Skip to content

Commit

Permalink
Merge "use function next() instead of next() method on iterator objects"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Jan 2, 2015
2 parents b3c832a + 63378f5 commit a818e33
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 37 deletions.
50 changes: 25 additions & 25 deletions rally/benchmark/context/cleanup/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,25 +58,25 @@ class HeatStack(base.ResourceManager):
_nova_order = get_order(200)


@base.resource("nova", "servers", order=_nova_order.next())
@base.resource("nova", "servers", order=next(_nova_order))
class NovaServer(base.ResourceManager):
pass


@base.resource("nova", "keypairs", order=_nova_order.next())
@base.resource("nova", "keypairs", order=next(_nova_order))
class NovaKeypair(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("nova", "security_groups", order=_nova_order.next())
@base.resource("nova", "security_groups", order=next(_nova_order))
class NovaSecurityGroup(SynchronizedDeletion, base.ResourceManager):

def list(self):
return filter(lambda x: x.name != "default",
super(NovaSecurityGroup, self).list())


@base.resource("nova", "quotas", order=_nova_order.next(),
@base.resource("nova", "quotas", order=next(_nova_order),
admin_required=True, tenant_resource=True)
class NovaQuotas(QuotaMixin, base.ResourceManager):
pass
Expand Down Expand Up @@ -108,7 +108,7 @@ def list(self):
list_method({"tenant_id": self.tenant_uuid})[resources])


@base.resource("neutron", "port", order=_neutron_order.next(),
@base.resource("neutron", "port", order=next(_neutron_order),
tenant_resource=True)
class NeutronPort(NeutronMixin, base.ResourceManager):

Expand All @@ -128,19 +128,19 @@ def delete(self):
% self.id())


@base.resource("neutron", "router", order=_neutron_order.next(),
@base.resource("neutron", "router", order=next(_neutron_order),
tenant_resource=True)
class NeutronRouter(NeutronMixin, base.ResourceManager):
pass


@base.resource("neutron", "subnet", order=_neutron_order.next(),
@base.resource("neutron", "subnet", order=next(_neutron_order),
tenant_resource=True)
class NeutronSubnet(NeutronMixin, base.ResourceManager):
pass


@base.resource("neutron", "network", order=_neutron_order.next(),
@base.resource("neutron", "network", order=next(_neutron_order),
tenant_resource=True)
class NeutronNetwork(NeutronMixin, base.ResourceManager):
pass
Expand All @@ -151,31 +151,31 @@ class NeutronNetwork(NeutronMixin, base.ResourceManager):
_cinder_order = get_order(400)


@base.resource("cinder", "backups", order=_cinder_order.next(),
@base.resource("cinder", "backups", order=next(_cinder_order),
tenant_resource=True)
class CinderVolumeBackup(base.ResourceManager):
pass


@base.resource("cinder", "volume_snapshots", order=_cinder_order.next(),
@base.resource("cinder", "volume_snapshots", order=next(_cinder_order),
tenant_resource=True)
class CinderVolumeSnapshot(base.ResourceManager):
pass


@base.resource("cinder", "transfers", order=_cinder_order.next(),
@base.resource("cinder", "transfers", order=next(_cinder_order),
tenant_resource=True)
class CinderVolumeTransfer(base.ResourceManager):
pass


@base.resource("cinder", "volumes", order=_cinder_order.next(),
@base.resource("cinder", "volumes", order=next(_cinder_order),
tenant_resource=True)
class CinderVolume(base.ResourceManager):
pass


@base.resource("cinder", "quotas", order=_cinder_order.next(),
@base.resource("cinder", "quotas", order=next(_cinder_order),
admin_required=True, tenant_resource=True)
class CinderQuotas(QuotaMixin, base.ResourceManager):
pass
Expand All @@ -195,49 +195,49 @@ def list(self):
_sahara_order = get_order(600)


@base.resource("sahara", "job_executions", order=_sahara_order.next(),
@base.resource("sahara", "job_executions", order=next(_sahara_order),
tenant_resource=True)
class SaharaJobExecution(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("sahara", "jobs", order=_sahara_order.next(),
@base.resource("sahara", "jobs", order=next(_sahara_order),
tenant_resource=True)
class SaharaJob(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("sahara", "job_binary_internals", order=_sahara_order.next(),
@base.resource("sahara", "job_binary_internals", order=next(_sahara_order),
tenant_resource=True)
class SaharaJobBinaryInternals(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("sahara", "job_binaries", order=_sahara_order.next(),
@base.resource("sahara", "job_binaries", order=next(_sahara_order),
tenant_resource=True)
class SaharaJobBinary(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("sahara", "data_sources", order=_sahara_order.next(),
@base.resource("sahara", "data_sources", order=next(_sahara_order),
tenant_resource=True)
class SaharaDataSource(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("sahara", "clusters", order=_sahara_order.next(),
@base.resource("sahara", "clusters", order=next(_sahara_order),
tenant_resource=True)
class SaharaCluster(base.ResourceManager):
pass


@base.resource("sahara", "cluster_templates", order=_sahara_order.next(),
@base.resource("sahara", "cluster_templates", order=next(_sahara_order),
tenant_resource=True)
class SaharaClusterTemplate(SynchronizedDeletion, base.ResourceManager):
pass


@base.resource("sahara", "node_group_templates", order=_sahara_order.next(),
@base.resource("sahara", "node_group_templates", order=next(_sahara_order),
tenant_resource=True)
class SaharaNodeGroup(SynchronizedDeletion, base.ResourceManager):
pass
Expand Down Expand Up @@ -298,25 +298,25 @@ def list(self):
return filter(kutils.is_temporary, list_method())


@base.resource("keystone", "user", order=_keystone_order.next(),
@base.resource("keystone", "user", order=next(_keystone_order),
admin_required=True, perform_for_admin_only=True)
class KeystoneUser(KeystoneMixin, base.ResourceManager):
pass


@base.resource("keystone", "project", order=_keystone_order.next(),
@base.resource("keystone", "project", order=next(_keystone_order),
admin_required=True, perform_for_admin_only=True)
class KeystoneProject(KeystoneMixin, base.ResourceManager):
pass


@base.resource("keystone", "service", order=_keystone_order.next(),
@base.resource("keystone", "service", order=next(_keystone_order),
admin_required=True, perform_for_admin_only=True)
class KeystoneService(KeystoneMixin, base.ResourceManager):
pass


@base.resource("keystone", "role", order=_keystone_order.next(),
@base.resource("keystone", "role", order=next(_keystone_order),
admin_required=True, perform_for_admin_only=True)
class KeystoneRole(KeystoneMixin, base.ResourceManager):
pass
1 change: 1 addition & 0 deletions tests/hacking/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ Rally Specific Commandments
* [N334] - Ensure that ``itertools.imap`` is not used
* [N335] - Ensure that ``xrange`` is not used
* [N336] - Ensure that ``string.lowercase`` and ``string.uppercase`` are not used
* [N337] - Ensure that ``next()`` method on iterator objects is not used
* [N340] - Ensure that we are importing always ``from rally import objects``
17 changes: 17 additions & 0 deletions tests/hacking/checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
re_xrange_method = re.compile(r"(^|[\s=])xrange\(")
re_string_lower_upper_case_method = re.compile(
r"(^|[(,\s=])string\.(lower|upper)case([)\[,\s]|$)")
re_next_on_iterator_method = re.compile(r"\.next\(\)")


def _parse_assert_mock_str(line):
Expand Down Expand Up @@ -322,6 +323,21 @@ def check_string_lower_upper_case_method(logical_line):
"rather than string.lowercase or string.uppercase.")


def check_next_on_iterator_method(logical_line):
"""Check if next() method on iterator objects are properly called
Python 3 introduced a next() function to replace the next() method on
iterator objects. Rather than calling the method on the iterator,
the next() function is called with the iterable object as it's sole
parameter, which calls the underlying __next__() method.
N337
"""
res = re_next_on_iterator_method.search(logical_line)
if res:
yield (0, "N337: Use next(iterator) rather than iterator.next().")


def check_no_direct_rally_objects_import(logical_line, filename):
"""Check if rally.objects are properly imported.
Expand Down Expand Up @@ -356,4 +372,5 @@ def factory(register):
register(check_itertools_imap_method)
register(check_xrange_method)
register(check_string_lower_upper_case_method)
register(check_next_on_iterator_method)
register(check_no_direct_rally_objects_import)
2 changes: 1 addition & 1 deletion tests/unit/benchmark/scenarios/neutron/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ def test_functional_create_network_and_subnets(self, mock_generate_cidr):

cidrs = ["1.1.%d.0/24" % i for i in range(subnets_per_network)]
cidrs_ = iter(cidrs)
mock_generate_cidr.side_effect = lambda **kw: cidrs_.next()
mock_generate_cidr.side_effect = lambda **kw: next(cidrs_)

network, subnets = scenario._create_network_and_subnets(
network_create_args,
Expand Down
8 changes: 4 additions & 4 deletions tests/unit/benchmark/wrappers/test_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def test__init__(self):
def test__generate_cidr(self, mock_cidr):
skip_cidrs = [5, 7]
cidrs = iter(range(7))
mock_cidr.side_effect = lambda start_cidr: start_cidr + cidrs.next()
mock_cidr.side_effect = lambda start_cidr: start_cidr + next(cidrs)
service = self.get_wrapper(*skip_cidrs, start_cidr=3)
self.assertEqual(service._generate_cidr(), 3)
self.assertEqual(service._generate_cidr(), 4)
Expand Down Expand Up @@ -97,7 +97,7 @@ def test_SUBNET_IP_VERSION(self):
@mock.patch("rally.benchmark.wrappers.network.generate_cidr")
def test__generate_cidr(self, mock_cidr):
cidrs = iter(range(5))
mock_cidr.side_effect = lambda start_cidr: start_cidr + cidrs.next()
mock_cidr.side_effect = lambda start_cidr: start_cidr + next(cidrs)
service = self.get_wrapper(start_cidr=3)
self.assertEqual(service._generate_cidr(), 3)
self.assertEqual(service._generate_cidr(), 4)
Expand Down Expand Up @@ -134,10 +134,10 @@ def test_create_network_with_subnets(self, mock_name):
subnets_cidrs = iter(range(subnets_num))
subnets_ids = iter(range(subnets_num))
service._generate_cidr = mock.Mock(
side_effect=lambda: "cidr-%d" % subnets_cidrs.next())
side_effect=lambda: "cidr-%d" % next(subnets_cidrs))
service.client.create_subnet = mock.Mock(
side_effect=lambda i: {
"subnet": {"id": "subnet-%d" % subnets_ids.next()}})
"subnet": {"id": "subnet-%d" % next(subnets_ids)}})
service.client.create_network.return_value = {
"network": {"id": "foo_id",
"name": "foo_name",
Expand Down
14 changes: 7 additions & 7 deletions tests/unit/common/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ def __iadd__(self, i):
return_value="next_value")
@mock.patch("rally.common.utils.multiprocessing")
def test_next(self, mock_multi, mock_next):
self.assertEqual(utils.RAMInt().next(), "next_value")
self.assertEqual(next(utils.RAMInt()), "next_value")
mock_next.assert_called_once_with()

@mock.patch("rally.common.utils.multiprocessing")
Expand All @@ -418,33 +418,33 @@ def test_generate_random_name(self, mock_random):
choice = "foobarspamchoicestring"

idx = iter(range(100))
mock_random.choice.side_effect = lambda choice: choice[idx.next()]
mock_random.choice.side_effect = lambda choice: choice[next(idx)]
self.assertEqual(utils.generate_random_name(),
string.ascii_lowercase[:16])

idx = iter(range(100))
mock_random.choice.side_effect = lambda choice: choice[idx.next()]
mock_random.choice.side_effect = lambda choice: choice[next(idx)]
self.assertEqual(utils.generate_random_name(length=10),
string.ascii_lowercase[:10])

idx = iter(range(100))
mock_random.choice.side_effect = lambda choice: choice[idx.next()]
mock_random.choice.side_effect = lambda choice: choice[next(idx)]
self.assertEqual(utils.generate_random_name(choice=choice),
choice[:16])

idx = iter(range(100))
mock_random.choice.side_effect = lambda choice: choice[idx.next()]
mock_random.choice.side_effect = lambda choice: choice[next(idx)]
self.assertEqual(utils.generate_random_name(choice=choice, length=5),
choice[:5])

idx = iter(range(100))
mock_random.choice.side_effect = lambda choice: choice[idx.next()]
mock_random.choice.side_effect = lambda choice: choice[next(idx)]
self.assertEqual(
utils.generate_random_name(prefix="foo_", length=10),
"foo_" + string.ascii_lowercase[:10])

idx = iter(range(100))
mock_random.choice.side_effect = lambda choice: choice[idx.next()]
mock_random.choice.side_effect = lambda choice: choice[next(idx)]
self.assertEqual(
utils.generate_random_name(prefix="foo_",
choice=choice, length=10),
Expand Down
7 changes: 7 additions & 0 deletions tests/unit/test_hacking.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,13 @@ def test_check_string_lower_upper_case_method(self):
self.assertEqual(len(list(checks.check_string_lower_upper_case_method(
"string.ascii_uppercase[:16]"))), 0)

def test_check_next_on_iterator_method(self):
self.assertEqual(len(list(checks.check_next_on_iterator_method(
"iterator.next()"))), 1)

self.assertEqual(len(list(checks.check_next_on_iterator_method(
"next(iterator)"))), 0)

def test_assert_equal_none(self):
self.assertEqual(len(list(checks.assert_equal_none(
"self.assertEqual(A, None)"))), 1)
Expand Down

0 comments on commit a818e33

Please sign in to comment.