Update hacking for Python3

The repo is Python 3 now, so update hacking to version 3.0 which
supports Python 3.

Fix problems found.

Update local hacking checks for new flake8.

Change-Id: I129bc38e6663836e12610dd50a20c74dbc79891c
This commit is contained in:
Andreas Jaeger 2020-03-31 16:20:19 +02:00
parent 56012eaa5c
commit 1a6a003242
13 changed files with 41 additions and 38 deletions

View File

@ -187,7 +187,7 @@ class InstanceDiscovery(plugin_base.DiscoveryBase):
image_xml = metadata_xml.find("./root[@type='image']")
image = ({'id': image_xml.attrib['uuid']}
if image_xml is not None else None)
except AttributeError as e:
except AttributeError:
LOG.error(
"Fail to get domain uuid %s metadata: "
"metadata was missing expected attributes",

View File

@ -13,12 +13,7 @@
# under the License.
import collections
import six
if six.PY2:
from monotonic import monotonic as now
else:
from time import monotonic as now
from time import monotonic as now
from oslo_log import log
from oslo_utils import timeutils

View File

@ -26,7 +26,10 @@ Guidelines for writing new hacking checks
"""
from hacking import core
@core.flake8ext
def no_log_warn(logical_line):
"""Disallow 'LOG.warn('
@ -38,6 +41,7 @@ def no_log_warn(logical_line):
yield(0, 'C301 Use LOG.warning() rather than LOG.warn()')
@core.flake8ext
def no_os_popen(logical_line):
"""Disallow 'os.popen('
@ -50,8 +54,3 @@ def no_os_popen(logical_line):
if 'os.popen(' in logical_line:
yield(0, 'C302 Deprecated library function os.popen(). '
'Replace it using subprocess module. ')
def factory(register):
register(no_log_warn)
register(no_os_popen)

View File

@ -119,7 +119,7 @@ class SensorNotification(endpoint.SampleEndpoint):
try:
sensor_reading = info['payload']['Sensor Reading']
except KeyError as exc:
except KeyError:
raise InvalidSensorData(
"missing 'Sensor Reading' in payload"
)

View File

@ -414,10 +414,10 @@ class OpenDayLightDriver(driver.Driver):
val_iter, key_func = None, None
if isinstance(value, dict):
val_iter = six.iteritems(value)
key_func = lambda k: key_base + '.' + k if key_base else k
key_func = lambda k: key_base + '.' + k if key_base else k # noqa
elif isinstance(value, (tuple, list)):
val_iter = enumerate(value)
key_func = lambda k: key_base + '[%d]' % k
key_func = lambda k: key_base + '[%d]' % k # noqa: E731
if val_iter:
for k, v in val_iter:

View File

@ -134,16 +134,16 @@ class ContainersSizePollster(_Base):
for tenant, bucket_info in self._iter_accounts(manager.keystone,
cache, resources):
for it in bucket_info['buckets']:
yield sample.Sample(
name='radosgw.containers.objects.size',
type=sample.TYPE_GAUGE,
volume=int(it.size * 1024),
unit='B',
user_id=None,
project_id=tenant,
resource_id=tenant + '/' + it.name,
resource_metadata=None,
)
yield sample.Sample(
name='radosgw.containers.objects.size',
type=sample.TYPE_GAUGE,
volume=int(it.size * 1024),
unit='B',
user_id=None,
project_id=tenant,
resource_id=tenant + '/' + it.name,
resource_metadata=None,
)
class ObjectsSizePollster(_Base):

View File

@ -345,7 +345,7 @@ class PollsterDefinition(object):
class PollsterDefinitions(object):
POLLSTER_VALID_NAMES_REGEXP = "^([\w-]+)(\.[\w-]+)*(\.{[\w-]+})?$"
POLLSTER_VALID_NAMES_REGEXP = r"^([\w-]+)(\.[\w-]+)*(\.{[\w-]+})?$"
standard_definitions = [
PollsterDefinition(name='name', required=True,
@ -416,10 +416,10 @@ class PollsterDefinitions(object):
class MultiMetricPollsterDefinitions(PollsterDefinitions):
MULTI_METRIC_POLLSTER_NAME_REGEXP = ".*(\.{(\w+)})$"
MULTI_METRIC_POLLSTER_NAME_REGEXP = r".*(\.{(\w+)})$"
pattern_pollster_name = re.compile(
MULTI_METRIC_POLLSTER_NAME_REGEXP)
MULTI_METRIC_POLLSTER_VALUE_ATTRIBUTE_REGEXP = "^(\[(\w+)\])((\.\w+)+)$"
MULTI_METRIC_POLLSTER_VALUE_ATTRIBUTE_REGEXP = r"^(\[(\w+)\])((\.\w+)+)$"
pattern_pollster_value_attribute = re.compile(
MULTI_METRIC_POLLSTER_VALUE_ATTRIBUTE_REGEXP)

View File

@ -132,7 +132,7 @@ class PollingTask(object):
# we relate the static resources and per-source discovery to
# each combination of pollster and matching source
resource_factory = lambda: Resources(agent_manager)
resource_factory = lambda: Resources(agent_manager) # noqa: E731
self.resources = collections.defaultdict(resource_factory)
self._batch_size = self.manager.conf.polling.batch_size

View File

@ -100,7 +100,8 @@ class HttpPublisher(publisher.ConfigPublisherBase):
password = parsed_url.password
if username:
self.client_auth = (username, password)
netloc = parsed_url.netloc.replace(username+':'+password+'@', '')
netloc = parsed_url.netloc.replace(username + ':' + password + '@',
'')
else:
self.client_auth = None
netloc = parsed_url.netloc

View File

@ -125,7 +125,7 @@ class MonascaPublisher(publisher.ConfigPublisherBase):
except Exception:
LOG.info(traceback.format_exc())
if hasattr(self, 'archive_handler'):
self.archive_handler.publish_samples(None, metrics)
self.archive_handler.publish_samples(None, metrics)
def publish_samples(self, samples):
"""Main method called to publish samples."""

View File

@ -47,7 +47,7 @@ class TestFloatingIPPollster(_BaseTestFloatingIPPollster):
@staticmethod
def fake_get_fip_service():
return [{'router_id': 'e24f8a37-1bb7-49e4-833c-049bb21986d2',
'status': 'ACTIVE',
'status': 'ACTIVE',
'tenant_id': '54a00c50ee4c4396b2f8dc220a2bed57',
'floating_network_id':
'f41f399e-d63e-47c6-9a19-21c4e4fbbba0',
@ -56,7 +56,7 @@ class TestFloatingIPPollster(_BaseTestFloatingIPPollster):
'port_id': '93a0d2c7-a397-444c-9d75-d2ac89b6f209',
'id': '18ca27bf-72bc-40c8-9c13-414d564ea367'},
{'router_id': 'astf8a37-1bb7-49e4-833c-049bb21986d2',
'status': 'DOWN',
'status': 'DOWN',
'tenant_id': '34a00c50ee4c4396b2f8dc220a2bed57',
'floating_network_id':
'gh1f399e-d63e-47c6-9a19-21c4e4fbbba0',
@ -65,7 +65,7 @@ class TestFloatingIPPollster(_BaseTestFloatingIPPollster):
'port_id': '453a0d2c7-a397-444c-9d75-d2ac89b6f209',
'id': 'jkca27bf-72bc-40c8-9c13-414d564ea367'},
{'router_id': 'e2478937-1bb7-49e4-833c-049bb21986d2',
'status': 'error',
'status': 'error',
'tenant_id': '54a0gggg50ee4c4396b2f8dc220a2bed57',
'floating_network_id':
'po1f399e-d63e-47c6-9a19-21c4e4fbbba0',

View File

@ -330,7 +330,7 @@ class TestDynamicPollster(base.BaseTestCase):
pollster = dynamic_pollster.DynamicPollster(
self.pollster_definition_only_required_fields)
pollster.definitions.sample_extractor.generate_new_metadata_fields(
metadata, self.pollster_definition_only_required_fields)
metadata, self.pollster_definition_only_required_fields)
self.assertEqual(metadata_before_call, metadata)

14
tox.ini
View File

@ -28,7 +28,7 @@ commands =
coverage xml -o cover/coverage.xml
[testenv:pep8]
deps = hacking<0.13,>=0.12
deps = hacking>=3.0,<=3.1.0
doc8
commands =
flake8
@ -65,14 +65,22 @@ ignore = D000
ignore-path = .venv,.git,.tox,*ceilometer/locale*,*lib/python*,ceilometer.egg*,doc/build,doc/source/api,releasenotes/*
[flake8]
ignore =
# E123 closing bracket does not match indentation of opening bracket's line
# W503 line break before binary operator
# W504 line break after binary operator
ignore = E123,W503,W504
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,install-guide
show-source = True
[hacking]
import_exceptions =
ceilometer.i18n
local-check-factory = ceilometer.hacking.checks.factory
[flake8:local-plugins]
extension =
C301 = checks:no_log_warn
C302 = checks:no_os_popen
paths = ./ceilometer/hacking
[testenv:lower-constraints]
deps =