Merge "Fix dict related issues for Python 2/3 compatible code"
This commit is contained in:
commit
fc4fa1c048
|
@ -54,7 +54,7 @@ class Nodes(base.APIBase):
|
|||
"A list containing a self link and associated nodes links"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.fields = objects.sm_node.fields.keys()
|
||||
self.fields = list(objects.sm_node.fields)
|
||||
for k in self.fields:
|
||||
setattr(self, k, kwargs.get(k))
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class ServiceGroup(base.APIBase):
|
|||
"A list containing a self link and associated sm_sda links"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.fields = objects.sm_sda.fields.keys()
|
||||
self.fields = list(objects.sm_sda.fields)
|
||||
for k in self.fields:
|
||||
setattr(self, k, kwargs.get(k))
|
||||
|
||||
|
|
|
@ -135,7 +135,7 @@ def rest_api_request(token, method, api_cmd, api_cmd_headers=None,
|
|||
request_info.add_header("Accept", "application/json")
|
||||
|
||||
if api_cmd_headers is not None:
|
||||
for header_type, header_value in api_cmd_headers.items():
|
||||
for header_type, header_value in list(api_cmd_headers.items()):
|
||||
request_info.add_header(header_type, header_value)
|
||||
|
||||
if api_cmd_payload is not None:
|
||||
|
@ -484,7 +484,7 @@ class ServiceNodeController(rest.RestController):
|
|||
chk_list[sda.service_group_name].remove(service_name)
|
||||
|
||||
all_good = True
|
||||
for svcs in chk_list.values():
|
||||
for svcs in list(chk_list.values()):
|
||||
if len(svcs) > 0:
|
||||
all_good = False
|
||||
break
|
||||
|
|
|
@ -55,7 +55,7 @@ class Services(base.APIBase):
|
|||
"A list containing a self link and associated services links"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.fields = objects.service.fields.keys()
|
||||
self.fields = list(objects.service.fields)
|
||||
for k in self.fields:
|
||||
setattr(self, k, kwargs.get(k))
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class SmSda(base.APIBase):
|
|||
"A list containing a self link and associated sm_sda links"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.fields = objects.sm_sda.fields.keys()
|
||||
self.fields = list(objects.sm_sda.fields)
|
||||
for k in self.fields:
|
||||
setattr(self, k, kwargs.get(k))
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ class ProcessExecutionError(IOError):
|
|||
|
||||
def _cleanse_dict(original):
|
||||
"""Strip all admin_password, new_pass, rescue_pass keys from a dict."""
|
||||
return dict((k, v) for k, v in original.iteritems() if not "_pass" in k)
|
||||
return dict((k, v) for k, v in original.items() if not "_pass" in k)
|
||||
|
||||
|
||||
def wrap_exception(notifier=None, publisher_id=None, event_type=None,
|
||||
|
@ -146,7 +146,7 @@ class SmApiException(Exception):
|
|||
# kwargs doesn't match a variable in the message
|
||||
# log the issue and the kwargs
|
||||
LOG.exception(_('Exception in string format operation'))
|
||||
for name, value in kwargs.iteritems():
|
||||
for name, value in kwargs.items():
|
||||
LOG.error("%s: %s" % (name, value))
|
||||
|
||||
if CONF.fatal_exception_format_errors:
|
||||
|
|
|
@ -39,7 +39,7 @@ def get_attrname(name):
|
|||
def make_class_properties(cls):
|
||||
# NOTE(danms): Inherit Sm_apiObject's base fields only
|
||||
cls.fields.update(Sm_apiObject.fields)
|
||||
for name, typefn in cls.fields.iteritems():
|
||||
for name, typefn in cls.fields.items():
|
||||
|
||||
def getter(self, name=name):
|
||||
attrname = get_attrname(name)
|
||||
|
@ -120,7 +120,7 @@ def remotable(fn):
|
|||
if Sm_apiObject.indirection_api:
|
||||
updates, result = Sm_apiObject.indirection_api.object_action(
|
||||
ctxt, self, fn.__name__, args, kwargs)
|
||||
for key, value in updates.iteritems():
|
||||
for key, value in updates.items():
|
||||
if key in self.fields:
|
||||
self[key] = self._attr_from_primitive(key, value)
|
||||
self._changed_fields = set(updates.get('obj_what_changed', []))
|
||||
|
@ -336,7 +336,7 @@ class Sm_apiObject(object):
|
|||
name in self.obj_extra_fields):
|
||||
yield name, getattr(self, name)
|
||||
|
||||
items = lambda self: list(self.iteritems())
|
||||
items = lambda self: list(self.items())
|
||||
|
||||
def __getitem__(self, name):
|
||||
"""For backwards-compatibility with dict-based objects.
|
||||
|
@ -383,7 +383,7 @@ class Sm_apiObject(object):
|
|||
def get_defaults(cls):
|
||||
"""Return a dict of its fields with their default value."""
|
||||
return dict((k, v(None))
|
||||
for k, v in cls.fields.iteritems()
|
||||
for k, v in cls.fields.items()
|
||||
if k != "id" and callable(v))
|
||||
|
||||
|
||||
|
@ -497,7 +497,7 @@ def obj_to_primitive(obj):
|
|||
return [obj_to_primitive(x) for x in obj]
|
||||
elif isinstance(obj, Sm_apiObject):
|
||||
result = {}
|
||||
for key, value in obj.iteritems():
|
||||
for key, value in obj.items():
|
||||
result[key] = obj_to_primitive(value)
|
||||
return result
|
||||
else:
|
||||
|
|
|
@ -64,7 +64,7 @@ class ModelBase(object):
|
|||
return getattr(self, key, default)
|
||||
|
||||
def __iter__(self):
|
||||
columns = dict(object_mapper(self).columns).keys()
|
||||
columns = list(dict(object_mapper(self).columns))
|
||||
# NOTE(russellb): Allow models to specify other keys that can be looked
|
||||
# up, beyond the actual db columns. An example would be the 'name'
|
||||
# property for an Instance.
|
||||
|
@ -79,7 +79,7 @@ class ModelBase(object):
|
|||
|
||||
def update(self, values):
|
||||
"""Make the model object behave like a dict."""
|
||||
for k, v in values.iteritems():
|
||||
for k, v in values.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
def iteritems(self):
|
||||
|
@ -87,10 +87,10 @@ class ModelBase(object):
|
|||
|
||||
Includes attributes from joins."""
|
||||
local = dict(self)
|
||||
joined = dict([(k, v) for k, v in self.__dict__.iteritems()
|
||||
joined = dict([(k, v) for k, v in self.__dict__.items()
|
||||
if not k[0] == '_'])
|
||||
local.update(joined)
|
||||
return local.iteritems()
|
||||
return iter(local.items())
|
||||
|
||||
|
||||
class TimestampMixin(object):
|
||||
|
|
|
@ -121,7 +121,7 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
|
|||
level=level,
|
||||
max_depth=max_depth)
|
||||
if isinstance(value, dict):
|
||||
return dict((k, recursive(v)) for k, v in value.iteritems())
|
||||
return dict((k, recursive(v)) for k, v in value.items())
|
||||
elif isinstance(value, (list, tuple)):
|
||||
return [recursive(lv) for lv in value]
|
||||
|
||||
|
@ -134,7 +134,7 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
|
|||
if convert_datetime and isinstance(value, datetime.datetime):
|
||||
return timeutils.strtime(value)
|
||||
elif hasattr(value, 'iteritems'):
|
||||
return recursive(dict(value.iteritems()), level=level + 1)
|
||||
return recursive(dict(iter(value.items())), level=level + 1)
|
||||
elif hasattr(value, '__iter__'):
|
||||
return recursive(list(value))
|
||||
elif convert_instances and hasattr(value, '__dict__'):
|
||||
|
|
|
@ -380,7 +380,7 @@ def _find_facility_from_conf():
|
|||
facility = facility_names.get(CONF.syslog_log_facility)
|
||||
|
||||
if facility is None:
|
||||
valid_facilities = facility_names.keys()
|
||||
valid_facilities = list(facility_names)
|
||||
consts = ['LOG_AUTH', 'LOG_AUTHPRIV', 'LOG_CRON', 'LOG_DAEMON',
|
||||
'LOG_FTP', 'LOG_KERN', 'LOG_LPR', 'LOG_MAIL', 'LOG_NEWS',
|
||||
'LOG_AUTH', 'LOG_SYSLOG', 'LOG_USER', 'LOG_UUCP',
|
||||
|
|
|
@ -159,7 +159,7 @@ def _get_drivers():
|
|||
for notification_driver in CONF.notification_driver:
|
||||
add_driver(notification_driver)
|
||||
|
||||
return _drivers.values()
|
||||
return list(_drivers.values())
|
||||
|
||||
|
||||
def add_driver(notification_driver):
|
||||
|
|
|
@ -240,7 +240,7 @@ def msg_reply(conf, msg_id, reply_q, connection_pool, reply=None,
|
|||
msg = {'result': reply, 'failure': failure}
|
||||
except TypeError:
|
||||
msg = {'result': dict((k, repr(v))
|
||||
for k, v in reply.__dict__.iteritems()),
|
||||
for k, v in reply.__dict__.items()),
|
||||
'failure': failure}
|
||||
if ending:
|
||||
msg['ending'] = True
|
||||
|
@ -307,7 +307,7 @@ def pack_context(msg, context):
|
|||
|
||||
"""
|
||||
context_d = dict([('_context_%s' % key, value)
|
||||
for (key, value) in context.to_dict().iteritems()])
|
||||
for (key, value) in context.to_dict().items()])
|
||||
msg.update(context_d)
|
||||
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ class RPCException(Exception):
|
|||
# kwargs doesn't match a variable in the message
|
||||
# log the issue and the kwargs
|
||||
LOG.exception(_('Exception in string format operation'))
|
||||
for name, value in kwargs.iteritems():
|
||||
for name, value in kwargs.items():
|
||||
LOG.error("%s: %s" % (name, value))
|
||||
# at least get the core message out if something happened
|
||||
message = self.message
|
||||
|
|
|
@ -125,7 +125,7 @@ class RpcDispatcher(object):
|
|||
:returns: A new set of deserialized args
|
||||
"""
|
||||
new_kwargs = dict()
|
||||
for argname, arg in kwargs.iteritems():
|
||||
for argname, arg in kwargs.items():
|
||||
new_kwargs[argname] = self.serializer.deserialize_entity(context,
|
||||
arg)
|
||||
return new_kwargs
|
||||
|
|
|
@ -432,7 +432,7 @@ class Connection(object):
|
|||
'virtual_host': self.conf.rabbit_virtual_host,
|
||||
}
|
||||
|
||||
for sp_key, value in server_params.iteritems():
|
||||
for sp_key, value in server_params.items():
|
||||
p_key = server_params_to_kombu_params.get(sp_key, sp_key)
|
||||
params[p_key] = value
|
||||
|
||||
|
|
|
@ -368,7 +368,7 @@ class Connection(object):
|
|||
consumers = self.consumers
|
||||
self.consumers = {}
|
||||
|
||||
for consumer in consumers.itervalues():
|
||||
for consumer in consumers.values():
|
||||
consumer.reconnect(self.session)
|
||||
self._register_consumer(consumer)
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ class RpcProxy(object):
|
|||
:returns: A new set of serialized arguments
|
||||
"""
|
||||
new_kwargs = dict()
|
||||
for argname, arg in kwargs.iteritems():
|
||||
for argname, arg in kwargs.items():
|
||||
new_kwargs[argname] = self.serializer.serialize_entity(context,
|
||||
arg)
|
||||
return new_kwargs
|
||||
|
|
|
@ -58,7 +58,7 @@ def canonicalize_emails(changelog, mapping):
|
|||
"""Takes in a string and an email alias mapping and replaces all
|
||||
instances of the aliases in the string with their real email.
|
||||
"""
|
||||
for alias, email_address in mapping.iteritems():
|
||||
for alias, email_address in mapping.items():
|
||||
changelog = changelog.replace(alias, email_address)
|
||||
return changelog
|
||||
|
||||
|
@ -245,7 +245,7 @@ def get_cmdclass():
|
|||
for pkg in self.distribution.packages:
|
||||
if '.' not in pkg:
|
||||
os.path.walk(pkg, _find_modules, modules)
|
||||
module_list = modules.keys()
|
||||
module_list = list(modules.keys())
|
||||
module_list.sort()
|
||||
autoindex_filename = os.path.join(source_dir, 'autoindex.rst')
|
||||
with open(autoindex_filename, 'w') as autoindex:
|
||||
|
|
|
@ -99,7 +99,7 @@ class Resource(object):
|
|||
self._loaded = loaded
|
||||
|
||||
def _add_details(self, info):
|
||||
for (k, v) in info.iteritems():
|
||||
for (k, v) in info.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
def __getattr__(self, k):
|
||||
|
|
Loading…
Reference in New Issue