diff --git a/ceilometer/agent.py b/ceilometer/agent.py index 5b3729dc..750de47d 100644 --- a/ceilometer/agent.py +++ b/ceilometer/agent.py @@ -20,6 +20,7 @@ import collections import itertools +import six from six.moves.urllib import parse as urlparse from stevedore import extension @@ -137,7 +138,7 @@ class AgentManager(os_service.Service): def start(self): self.pipeline_manager = pipeline.setup_pipeline() - for interval, task in self.setup_polling_tasks().iteritems(): + for interval, task in six.iteritems(self.setup_polling_tasks()): self.tg.add_timer(interval, self.interval_task, task=task) diff --git a/ceilometer/compute/nova_notifier.py b/ceilometer/compute/nova_notifier.py index 58e500e9..70771b66 100644 --- a/ceilometer/compute/nova_notifier.py +++ b/ceilometer/compute/nova_notifier.py @@ -23,6 +23,7 @@ from nova import notifications from nova.openstack.common import log as logging from nova.openstack.common.notifier import api as notifier_api from nova import utils +import six from stevedore import extension # HACK(dhellmann): Insert the nova version of openstack.common into @@ -96,7 +97,7 @@ class Instance(object): can pass it to the pollsters. """ def __init__(self, context, info): - for k, v in info.iteritems(): + for k, v in six.iteritems(info): if k == 'name': setattr(self, 'OS-EXT-SRV-ATTR:instance_name', v) elif k == 'metadata': diff --git a/ceilometer/energy/kwapi.py b/ceilometer/energy/kwapi.py index d7a7c2bb..59ff3c48 100644 --- a/ceilometer/energy/kwapi.py +++ b/ceilometer/energy/kwapi.py @@ -19,6 +19,7 @@ import datetime from keystoneclient import exceptions from oslo.config import cfg import requests +import six from ceilometer.central import plugin from ceilometer.openstack.common.gettextutils import _ @@ -45,7 +46,7 @@ class KwapiClient(object): request = requests.get(probes_url, headers=headers) message = request.json() probes = message['probes'] - for key, value in probes.iteritems(): + for key, value in six.iteritems(probes): probe_dict = value probe_dict['id'] = key yield probe_dict diff --git a/ceilometer/storage/base.py b/ceilometer/storage/base.py index 0e022dc5..769e3a44 100644 --- a/ceilometer/storage/base.py +++ b/ceilometer/storage/base.py @@ -21,6 +21,7 @@ import datetime import inspect import math +import six from six import moves from ceilometer.openstack.common import timeutils @@ -108,7 +109,7 @@ class Model(object): def __init__(self, **kwds): self.fields = list(kwds) - for k, v in kwds.iteritems(): + for k, v in six.iteritems(kwds): setattr(self, k, v) def as_dict(self): diff --git a/ceilometer/storage/impl_db2.py b/ceilometer/storage/impl_db2.py index 5bdbfb83..4f21f195 100644 --- a/ceilometer/storage/impl_db2.py +++ b/ceilometer/storage/impl_db2.py @@ -29,6 +29,7 @@ import sys import bson.code import bson.objectid import pymongo +import six from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils @@ -266,7 +267,7 @@ class Connection(pymongo_base.Connection): q['resource_id'] = resource # Add resource_ prefix so it matches the field in the db q.update(dict(('resource_' + k, v) - for (k, v) in metaquery.iteritems())) + for (k, v) in six.iteritems(metaquery))) if start_timestamp or end_timestamp: # Look for resources matching the above criteria and with diff --git a/ceilometer/storage/impl_mongodb.py b/ceilometer/storage/impl_mongodb.py index 33e4bb98..3110850f 100644 --- a/ceilometer/storage/impl_mongodb.py +++ b/ceilometer/storage/impl_mongodb.py @@ -31,6 +31,7 @@ import bson.code import bson.objectid from oslo.config import cfg import pymongo +import six from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils @@ -698,7 +699,7 @@ class Connection(pymongo_base.Connection): # Add resource_ prefix so it matches the field in the db query.update(dict(('resource_' + k, v) - for (k, v) in metaquery.iteritems())) + for (k, v) in six.iteritems(metaquery))) # FIXME(dhellmann): This may not perform very well, # but doing any better will require changing the database @@ -753,7 +754,7 @@ class Connection(pymongo_base.Connection): query['_id'] = resource query.update(dict((k, v) - for (k, v) in metaquery.iteritems())) + for (k, v) in six.iteritems(metaquery))) keys = base._handle_sort_key('resource') sort_keys = ['last_sample_timestamp' if i == 'timestamp' else i diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py index 0e133c31..c951b9a4 100644 --- a/ceilometer/storage/impl_sqlalchemy.py +++ b/ceilometer/storage/impl_sqlalchemy.py @@ -22,6 +22,7 @@ import operator import os from oslo.config import cfg +import six from sqlalchemy import and_ from sqlalchemy import distinct from sqlalchemy import func @@ -105,7 +106,7 @@ def apply_metaquery_filter(session, query, metaquery): :param query: Query instance :param metaquery: dict with metadata to match on. """ - for k, value in metaquery.iteritems(): + for k, value in six.iteritems(metaquery): key = k[9:] # strip out 'metadata.' prefix try: _model = sql_utils.META_TYPE_MAP[type(value)] @@ -795,7 +796,7 @@ class Connection(base.Connection): models.TraitType.id, models.TraitType.desc == trait_name] - for key, value in trait_filter.iteritems(): + for key, value in six.iteritems(trait_filter): if key == 'string': conditions.append(models.Trait.t_string == value) elif key == 'integer': diff --git a/ceilometer/storage/mongo/utils.py b/ceilometer/storage/mongo/utils.py index 8c52a0bc..fe337651 100644 --- a/ceilometer/storage/mongo/utils.py +++ b/ceilometer/storage/mongo/utils.py @@ -23,6 +23,7 @@ import time from oslo.config import cfg import pymongo +import six import weakref from ceilometer.openstack.common.gettextutils import _ @@ -89,7 +90,7 @@ def make_events_query_from_filter(event_filter): for trait_filter in event_filter.traits_filter: op = trait_filter.pop('op', 'eq') dict_query = {} - for k, v in trait_filter.iteritems(): + for k, v in six.iteritems(trait_filter): if v is not None: # All parameters in EventFilter['traits'] are optional, so # we need to check if they are in the query or no. @@ -149,7 +150,7 @@ def make_query_from_filter(sample_filter, require_meter=True): # so the samples call metadata resource_metadata, so we convert # to that. q.update(dict(('resource_%s' % k, v) - for (k, v) in sample_filter.metaquery.iteritems())) + for (k, v) in six.iteritems(sample_filter.metaquery))) return q diff --git a/ceilometer/storage/sqlalchemy/models.py b/ceilometer/storage/sqlalchemy/models.py index a90e67ce..97374b4b 100644 --- a/ceilometer/storage/sqlalchemy/models.py +++ b/ceilometer/storage/sqlalchemy/models.py @@ -19,6 +19,7 @@ SQLAlchemy models for Ceilometer data. import json +import six from sqlalchemy import (Column, Integer, String, ForeignKey, Index, UniqueConstraint, BigInteger, join) from sqlalchemy import Float, Boolean, Text, DateTime @@ -91,7 +92,7 @@ class CeilometerBase(object): def update(self, values): """Make the model object behave like a dict.""" - for k, v in values.iteritems(): + for k, v in six.iteritems(values): setattr(self, k, v) diff --git a/ceilometer/tests/api/v2/test_alarm_scenarios.py b/ceilometer/tests/api/v2/test_alarm_scenarios.py index 1fc4682f..fe3984f3 100644 --- a/ceilometer/tests/api/v2/test_alarm_scenarios.py +++ b/ceilometer/tests/api/v2/test_alarm_scenarios.py @@ -25,6 +25,7 @@ import uuid import mock import oslo.messaging.conffixture +import six from six import moves from ceilometer.alarm.storage import models @@ -386,7 +387,7 @@ class TestAlarms(v2.FunctionalTest, 'combination_rule': {} } } - for field, json in jsons.iteritems(): + for field, json in six.iteritems(jsons): resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) self.assertEqual("Invalid input for field/attribute %s." @@ -965,7 +966,7 @@ class TestAlarms(v2.FunctionalTest, 'period': 180, } } - for aspect, id in identifiers.iteritems(): + for aspect, id in six.iteritems(identifiers): json['%s_id' % aspect] = id return json @@ -1640,13 +1641,13 @@ class TestAlarms(v2.FunctionalTest, status=204) def _assert_is_subset(self, expected, actual): - for k, v in expected.iteritems(): + for k, v in six.iteritems(expected): self.assertEqual(v, actual.get(k), 'mismatched field: %s' % k) self.assertIsNotNone(actual['event_id']) def _assert_in_json(self, expected, actual): actual = jsonutils.dumps(jsonutils.loads(actual), sort_keys=True) - for k, v in expected.iteritems(): + for k, v in six.iteritems(expected): fragment = jsonutils.dumps({k: v}, sort_keys=True)[1:-1] self.assertTrue(fragment in actual, '%s not in %s' % (fragment, actual)) diff --git a/ceilometer/tests/api/v2/test_list_events_scenarios.py b/ceilometer/tests/api/v2/test_list_events_scenarios.py index 33a5c19c..da1c05a0 100644 --- a/ceilometer/tests/api/v2/test_list_events_scenarios.py +++ b/ceilometer/tests/api/v2/test_list_events_scenarios.py @@ -20,6 +20,7 @@ import datetime import mock +import six import webtest.app from ceilometer.openstack.common import timeutils @@ -172,4 +173,4 @@ class TestListEvents(v2.FunctionalTest, ('not_ignored_list', "['returned']"), ('tag', 'self.sample'), ], - list(sorted(sample['resource_metadata'].iteritems()))) + list(sorted(six.iteritems(sample['resource_metadata'])))) diff --git a/ceilometer/tests/api/v2/test_list_resources_scenarios.py b/ceilometer/tests/api/v2/test_list_resources_scenarios.py index c42f750f..2a43135e 100644 --- a/ceilometer/tests/api/v2/test_list_resources_scenarios.py +++ b/ceilometer/tests/api/v2/test_list_resources_scenarios.py @@ -476,7 +476,7 @@ class TestListResources(v2.FunctionalTest, (u'display_name', u'test-server'), (u'not_ignored_list', u"['returned']"), (u'tag', u'self.sample')], - list(sorted(metadata.iteritems()))) + list(sorted(six.iteritems(metadata)))) def test_resource_meter_links(self): sample1 = sample.Sample( diff --git a/ceilometer/tests/compute/pollsters/test_location_metadata.py b/ceilometer/tests/compute/pollsters/test_location_metadata.py index 083752f2..4ee57df5 100644 --- a/ceilometer/tests/compute/pollsters/test_location_metadata.py +++ b/ceilometer/tests/compute/pollsters/test_location_metadata.py @@ -20,6 +20,7 @@ """ import mock +import six from ceilometer.compute import manager from ceilometer.compute.pollsters import util @@ -81,7 +82,7 @@ class TestLocationMetadata(test.BaseTestCase): def test_metadata(self): md = util._get_metadata_from_object(self.instance) - for prop, value in self.INSTANCE_PROPERTIES.iteritems(): + for prop, value in six.iteritems(self.INSTANCE_PROPERTIES): if prop not in ("metadata"): # Special cases if prop == 'name': diff --git a/ceilometer/tests/energy/test_kwapi.py b/ceilometer/tests/energy/test_kwapi.py index c44aa6e5..62a75fda 100644 --- a/ceilometer/tests/energy/test_kwapi.py +++ b/ceilometer/tests/energy/test_kwapi.py @@ -18,6 +18,7 @@ import datetime from keystoneclient import exceptions import mock +import six from ceilometer.central import manager from ceilometer.energy import kwapi @@ -88,7 +89,7 @@ class TestEnergyPollster(test.BaseTestCase): @staticmethod def fake_iter_probes(ksclient, cache): probes = PROBE_DICT['probes'] - for key, value in probes.iteritems(): + for key, value in six.iteritems(probes): probe_dict = value probe_dict['id'] = key yield probe_dict @@ -148,7 +149,7 @@ class TestPowerPollster(test.BaseTestCase): @staticmethod def fake_iter_probes(ksclient, cache): probes = PROBE_DICT['probes'] - for key, value in probes.iteritems(): + for key, value in six.iteritems(probes): probe_dict = value probe_dict['id'] = key yield probe_dict diff --git a/ceilometer/transformer/__init__.py b/ceilometer/transformer/__init__.py index 0f20b6f7..2c6bda3b 100644 --- a/ceilometer/transformer/__init__.py +++ b/ceilometer/transformer/__init__.py @@ -79,7 +79,7 @@ class Namespace(object): def __init__(self, seed): self.__dict__ = collections.defaultdict(lambda: Namespace({})) self.__dict__.update(seed) - for k, v in self.__dict__.iteritems(): + for k, v in six.iteritems(self.__dict__): if isinstance(v, dict): self.__dict__[k] = Namespace(v) diff --git a/ceilometer/transformer/arithmetic.py b/ceilometer/transformer/arithmetic.py index 2eeac49f..22688e55 100644 --- a/ceilometer/transformer/arithmetic.py +++ b/ceilometer/transformer/arithmetic.py @@ -20,6 +20,8 @@ import keyword import math import re +import six + from ceilometer.openstack.common.gettextutils import _ from ceilometer.openstack.common import log from ceilometer import sample @@ -69,7 +71,7 @@ class ArithmeticTransformer(transformer.TransformerBase): def _calculate(self, resource_id): """Evaluate the expression and return a new sample if successful.""" ns_dict = dict((m, s.as_dict()) for m, s - in self.cache[resource_id].iteritems()) + in six.iteritems(self.cache[resource_id])) ns = transformer.Namespace(ns_dict) try: new_volume = eval(self.expr_escaped, {}, ns) diff --git a/ceilometer/utils.py b/ceilometer/utils.py index ac615ef9..38f157f6 100644 --- a/ceilometer/utils.py +++ b/ceilometer/utils.py @@ -32,7 +32,7 @@ from ceilometer.openstack.common import units def recursive_keypairs(d, separator=':'): """Generator that produces sequence of keypairs for nested dictionaries.""" - for name, value in sorted(d.iteritems()): + for name, value in sorted(six.iteritems(d)): if isinstance(value, dict): for subname, subvalue in recursive_keypairs(value, separator): yield ('%s%s%s' % (name, separator, subname), subvalue) @@ -107,7 +107,7 @@ def stringify_timestamps(data): """Stringify any datetimes in given dict.""" isa_timestamp = lambda v: isinstance(v, datetime.datetime) return dict((k, v.isoformat() if isa_timestamp(v) else v) - for (k, v) in data.iteritems()) + for (k, v) in six.iteritems(data)) def dict_to_keyval(value, key_base=None): @@ -118,7 +118,7 @@ def dict_to_keyval(value, key_base=None): """ val_iter, key_func = None, None if isinstance(value, dict): - val_iter = value.iteritems() + val_iter = six.iteritems(value) key_func = lambda k: key_base + '.' + k if key_base else k elif isinstance(value, (tuple, list)): val_iter = enumerate(value) @@ -155,7 +155,7 @@ def update_nested(original_dict, updates): Updates occur without replacing entire sub-dicts. """ dict_to_update = copy.deepcopy(original_dict) - for key, value in updates.iteritems(): + for key, value in six.iteritems(updates): if isinstance(value, dict): sub_dict = update_nested(dict_to_update.get(key, {}), value) dict_to_update[key] = sub_dict diff --git a/tools/show_data.py b/tools/show_data.py index 06142593..1cea68eb 100755 --- a/tools/show_data.py +++ b/tools/show_data.py @@ -20,6 +20,7 @@ from __future__ import print_function import sys from oslo.config import cfg +import six from ceilometer import storage @@ -38,7 +39,7 @@ def show_resources(db, args): print(u) for resource in db.get_resources(user=u): print(' %(resource_id)s %(timestamp)s' % resource) - for k, v in sorted(resource['metadata'].iteritems()): + for k, v in sorted(six.iteritems(resource['metadata'])): print(' %-10s : %s' % (k, v)) for meter in resource['meter']: totals = db.get_statistics(storage.SampleFilter(