Replace six iteration methods with standard ones

1.As mentioned in [1], we should avoid using six.iterXXX
to achieve iterators. We can use dict.XXX instead, as it will
return iterators in PY3 as well.

2.In py2, the performance about list should be negligible,
see the link [2].

[1] https://wiki.openstack.org/wiki/Python3
[2] http://lists.openstack.org/pipermail/openstack-dev/2015-June/066391.html

Change-Id: I8ca16e539d3bd1ef9ac685f1852a2f5e745f8731
This commit is contained in:
Lu lei 2016-09-08 16:41:23 +08:00
parent 45770923db
commit e7b845cca9
7 changed files with 13 additions and 17 deletions

View File

@ -16,7 +16,6 @@ import itertools
import os.path
from oslo_log import log
import six
from keystone.catalog.backends import base
from keystone.common import utils
@ -133,8 +132,8 @@ class Catalog(base.CatalogDriverV8):
raise exception.NotImplemented()
def _list_services(self, hints):
for region_ref in six.itervalues(self.templates):
for service_type, service_ref in six.iteritems(region_ref):
for region_ref in self.templates.values():
for service_type, service_ref in region_ref.items():
yield {
'id': service_type,
'enabled': True,
@ -164,8 +163,8 @@ class Catalog(base.CatalogDriverV8):
raise exception.NotImplemented()
def _list_endpoints(self):
for region_id, region_ref in six.iteritems(self.templates):
for service_type, service_ref in six.iteritems(region_ref):
for region_id, region_ref in self.templates.items():
for service_type, service_ref in region_ref.items():
for key in service_ref:
if key.endswith('URL'):
interface = key[:-3]

View File

@ -15,7 +15,6 @@
import uuid
import six
from six.moves import http_client
from keystone.catalog import schema
@ -445,7 +444,7 @@ class EndpointFilterV3Controller(controller.V3Controller):
return EndpointV3.wrap_collection(
request.context_dict,
[v for v in six.itervalues(filtered_endpoints)])
[v for v in filtered_endpoints.values()])
@controller.protected()
def remove_endpoint_from_project(self, request, project_id, endpoint_id):
@ -494,7 +493,7 @@ class EndpointGroupV3Controller(controller.V3Controller):
def _require_valid_filter(self, endpoint_group):
filters = endpoint_group.get('filters')
for key in six.iterkeys(filters):
for key in filters.keys():
if key not in self.VALID_FILTER_KEYS:
raise exception.ValidationError(
attribute=self._valid_filter_keys(),

View File

@ -126,7 +126,7 @@ class DictBase(models.ModelBase):
def from_dict(cls, d):
new_d = d.copy()
new_d['extra'] = {k: new_d.pop(k) for k in six.iterkeys(d)
new_d['extra'] = {k: new_d.pop(k) for k in d.keys()
if k not in cls.attributes and k != 'extra'}
return cls(**new_d)

View File

@ -14,8 +14,6 @@
import hashlib
import six
from keystone.identity import generator
@ -23,6 +21,6 @@ class Generator(generator.IDGenerator):
def generate_public_ID(self, mapping):
m = hashlib.sha256()
for key in sorted(six.iterkeys(mapping)):
for key in sorted(mapping.keys()):
m.update(mapping[key].encode('utf-8'))
return m.hexdigest()

View File

@ -433,9 +433,9 @@ def dict_constructor_with_sequence_copy(logical_line):
PEP-0274 introduced dict comprehension with performance enhancement
and it also makes code more readable.
Okay: lower_res = {k.lower(): v for k, v in six.iteritems(res[1])}
Okay: lower_res = {k.lower(): v for k, v in res[1].items()}
Okay: fool = dict(a='a', b='b')
K008: lower_res = dict((k.lower(), v) for k, v in six.iteritems(res[1]))
K008: lower_res = dict((k.lower(), v) for k, v in res[1].items())
K008: attrs = dict([(k, _from_json(v))
K008: dict([[i,i] for i in range(3)])

View File

@ -123,9 +123,9 @@ class HackingCode(fixtures.Fixture):
dict_constructor = {
'code': """
lower_res = {k.lower(): v for k, v in six.iteritems(res[1])}
lower_res = {k.lower(): v for k, v in res[1].items()}
fool = dict(a='a', b='b')
lower_res = dict((k.lower(), v) for k, v in six.iteritems(res[1]))
lower_res = dict((k.lower(), v) for k, v in res[1].items())
attrs = dict([(k, _from_json(v))])
dict([[i,i] for i in range(3)])
dict(({1:2}))

View File

@ -1024,7 +1024,7 @@ class V2TestCase(object):
def assertValidExtension(self, extension, expected):
super(V2TestCase, self).assertValidExtension(extension)
descriptions = [ext['description'] for ext in six.itervalues(expected)]
descriptions = [ext['description'] for ext in expected.values()]
description = extension.get('description')
self.assertIsNotNone(description)
self.assertIn(description, descriptions)