From abad342eb2076114ba2c04f144115b850571a4a7 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Tue, 31 Mar 2020 21:19:04 +0200 Subject: [PATCH] Update hacking for Python3 The repo is Python 3 now, so update hacking to version 3.0 which supports Python 3. Fix problems found by updated hacking version. Remove hacking and friends from lower-constraints, they are not needed there at all. Change-Id: I35d848e9af297d3561ea2838a4808166d1c36601 --- devstack/files/schema/influxdb_setup.py | 20 +++--- docker/health_check.py | 2 +- lower-constraints.txt | 4 -- monasca_api/api/wsgi.py | 1 + monasca_api/cmd/monasca_db.py | 62 +++++++++---------- monasca_api/db/alembic/env.py | 1 + .../expression_parser/alarm_expr_parser.py | 1 + monasca_api/hacking/checks.py | 6 +- monasca_api/tests/base.py | 1 + monasca_api/tests/test_validation.py | 3 +- .../alarm_definition_request_body_schema.py | 1 + monasca_api/v2/reference/helpers.py | 2 +- releasenotes/source/conf.py | 6 +- test-requirements.txt | 2 +- tox.ini | 8 ++- 15 files changed, 65 insertions(+), 55 deletions(-) diff --git a/devstack/files/schema/influxdb_setup.py b/devstack/files/schema/influxdb_setup.py index 7f45a78e5..d18beb447 100644 --- a/devstack/files/schema/influxdb_setup.py +++ b/devstack/files/schema/influxdb_setup.py @@ -25,8 +25,8 @@ import sys from oslo_utils.encodeutils import safe_decode from oslo_utils.encodeutils import safe_encode -import six.moves.urllib.parse as urlparse from six.moves import urllib +import six.moves.urllib.parse as urlparse ADMIN = 'root' ADMIN_PASS = 'root' @@ -46,8 +46,8 @@ def format_response(req): try: json_value = json.loads(req.read()) if (len(json_value['results'][0]) > 0 and - 'series' in json_value['results'][0] and - 'values' in json_value['results'][0]['series'][0]): + 'series' in json_value['results'][0] and + 'values' in json_value['results'][0]['series'][0]): return json_value['results'][0]['series'][0]['values'] else: return [] @@ -77,7 +77,8 @@ def influxdb_get_post(uri, query, db=None): """Runs a query using HTTP GET or POST and returns the response as a Python list. At some InfluxDB release several ops changed from using GET to POST. For example, CREATE DATABASE. To maintain backward compatibility, this function first trys the - query using POST and if that fails it retries again using GET.""" + query using POST and if that fails it retries again using GET. + """ query_params = {"q": query} if db: @@ -115,10 +116,12 @@ def main(argv=None): query="SHOW RETENTION POLICIES ON {0}".format(DBNAME)) if not any(pol[0] == SHARDSPACE_NAME for pol in policies): # Set retention policy - policy = "CREATE RETENTION POLICY {0} ON {1} DURATION {2} REPLICATION {3} DEFAULT".format(SHARDSPACE_NAME, - DBNAME, - RETENTION, - REPLICATION) + policy = ("CREATE RETENTION POLICY {0} ON {1} DURATION {2} " + "REPLICATION {3} DEFAULT".format(SHARDSPACE_NAME, + DBNAME, + RETENTION, + REPLICATION) + ) influxdb_get_post(uri=api_uri, db=DBNAME, query=policy) # Create the users @@ -130,5 +133,6 @@ def main(argv=None): .format(name, password)), db=DBNAME) + if __name__ == "__main__": sys.exit(main()) diff --git a/docker/health_check.py b/docker/health_check.py index df5c5aa0d..312506539 100755 --- a/docker/health_check.py +++ b/docker/health_check.py @@ -18,9 +18,9 @@ """Health check will returns 0 when service is working properly.""" import logging -from urllib import request import os import sys +from urllib import request LOG_LEVEL = logging.getLevelName(os.environ.get('LOG_LEVEL', 'INFO')) diff --git a/lower-constraints.txt b/lower-constraints.txt index f66f0a94c..c92a44932 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -22,7 +22,6 @@ extras==1.0.0 falcon==2.0.0 fasteners==0.7.0 fixtures==3.0.0 -flake8==2.5.5 funcsigs==1.0.0 future==0.16.0 futures==3.0.0 @@ -30,7 +29,6 @@ gevent==1.2.2 gitdb==0.6.4 GitPython==1.0.1 greenlet==0.4.10 -hacking==1.1.0 httplib2==0.9.1 idna==2.6 imagesize==0.7.1 @@ -72,13 +70,11 @@ paramiko==2.0.0 PasteDeploy==1.5.0 Paste==2.0.2 pbr==2.0.0 -pep8==1.5.7 positional==1.2.1 prettytable==0.7.2 pyasn1==0.1.8 pycadf==1.1.0 pycparser==2.18 -pyflakes==0.8.1 Pygments==2.2.0 pyinotify==0.9.6 PyMySQL==0.7.6 diff --git a/monasca_api/api/wsgi.py b/monasca_api/api/wsgi.py index ba7256043..467bb978f 100644 --- a/monasca_api/api/wsgi.py +++ b/monasca_api/api/wsgi.py @@ -21,5 +21,6 @@ from monasca_api.api import server def main(): return server.get_wsgi_app(config_base_path='/etc/monasca') + if __name__ == '__main__' or __name__.startswith('_mod_wsgi'): application = main() diff --git a/monasca_api/cmd/monasca_db.py b/monasca_api/cmd/monasca_db.py index 21096368f..54a157cac 100644 --- a/monasca_api/cmd/monasca_db.py +++ b/monasca_api/cmd/monasca_db.py @@ -111,41 +111,41 @@ def do_version(): def add_command_parsers(subparsers): - parser = subparsers.add_parser('fingerprint', - help="Compute SHA1 fingerprint of " - "current database schema ") - parser.add_argument('-r', '--raw', action='store_true', - help='Print raw schema dump used for ' - 'fingerprinting') - parser.set_defaults(func=do_fingerprint) + parser = subparsers.add_parser('fingerprint', + help="Compute SHA1 fingerprint of " + "current database schema ") + parser.add_argument('-r', '--raw', action='store_true', + help='Print raw schema dump used for ' + 'fingerprinting') + parser.set_defaults(func=do_fingerprint) - parser = subparsers.add_parser('detect-revision', - help="Attempt to detect revision " - "matching current database " - " schema ") - parser.set_defaults(func=do_detect_revision) + parser = subparsers.add_parser('detect-revision', + help="Attempt to detect revision " + "matching current database " + " schema ") + parser.set_defaults(func=do_detect_revision) - parser = subparsers.add_parser('stamp', help='Stamp database with an ' - 'Alembic revision') - parser.add_argument('revision', nargs='?', metavar='VERSION', - help='Revision to stamp database with', - default=None) - parser.add_argument('-f', '--from-fingerprint', action='store_true', - help='Try to determine VERSION from fingerprint') - parser.set_defaults(func=do_stamp) + parser = subparsers.add_parser('stamp', help='Stamp database with an ' + 'Alembic revision') + parser.add_argument('revision', nargs='?', metavar='VERSION', + help='Revision to stamp database with', + default=None) + parser.add_argument('-f', '--from-fingerprint', action='store_true', + help='Try to determine VERSION from fingerprint') + parser.set_defaults(func=do_stamp) - parser = subparsers.add_parser('upgrade', - help='Upgrade database to given or ' - 'latest revision') - parser.add_argument('revision', metavar='VERSION', nargs='?', - help='Alembic revision to upgrade database to', - default='head') - parser.add_argument('-f', '--from-fingerprint', action='store_true', - help='Try to determine VERSION from fingerprint') - parser.set_defaults(func=do_upgrade) + parser = subparsers.add_parser('upgrade', + help='Upgrade database to given or ' + 'latest revision') + parser.add_argument('revision', metavar='VERSION', nargs='?', + help='Alembic revision to upgrade database to', + default='head') + parser.add_argument('-f', '--from-fingerprint', action='store_true', + help='Try to determine VERSION from fingerprint') + parser.set_defaults(func=do_upgrade) - parser = subparsers.add_parser('version', help="Show database's current Alembic version") - parser.set_defaults(func=do_version) + parser = subparsers.add_parser('version', help="Show database's current Alembic version") + parser.set_defaults(func=do_version) command_opt = cfg.SubCommandOpt('command', diff --git a/monasca_api/db/alembic/env.py b/monasca_api/db/alembic/env.py index 830ed8341..f33b723d3 100644 --- a/monasca_api/db/alembic/env.py +++ b/monasca_api/db/alembic/env.py @@ -78,5 +78,6 @@ def run_migrations_online(): with context.begin_transaction(): context.run_migrations() + if have_context: run_migrations_online() diff --git a/monasca_api/expression_parser/alarm_expr_parser.py b/monasca_api/expression_parser/alarm_expr_parser.py index e9e5315d1..81e6701d1 100644 --- a/monasca_api/expression_parser/alarm_expr_parser.py +++ b/monasca_api/expression_parser/alarm_expr_parser.py @@ -221,6 +221,7 @@ def periodsValidation(instr, loc, tokens): # Must return the string return tokens[0] + # Initialize non-ascii unicode code points in the Basic Multilingual Plane. unicode_printables = u''.join( six.unichr(c) for c in range(128, 65536) if not six.unichr(c).isspace()) diff --git a/monasca_api/hacking/checks.py b/monasca_api/hacking/checks.py index f3470c527..c4fa3fcee 100644 --- a/monasca_api/hacking/checks.py +++ b/monasca_api/hacking/checks.py @@ -14,17 +14,15 @@ import re +from hacking import core assert_no_xrange_re = re.compile(r"\s*xrange\s*\(") +@core.flake8ext def no_xrange(logical_line): """Do not use 'xrange' B319 """ if assert_no_xrange_re.match(logical_line): yield (0, "B319: Do not use xrange().") - - -def factory(register): - register(no_xrange) diff --git a/monasca_api/tests/base.py b/monasca_api/tests/base.py index 77511f320..7c7e1a037 100644 --- a/monasca_api/tests/base.py +++ b/monasca_api/tests/base.py @@ -180,6 +180,7 @@ def _hex_to_unicode(hex_raw): hex_str = hex_str_raw.decode('utf-8', 'replace') return hex_str + # NOTE(trebskit) => http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt UNICODE_MESSAGES = [ # Unicode is evil... diff --git a/monasca_api/tests/test_validation.py b/monasca_api/tests/test_validation.py index bef80e07e..ce73e2647 100644 --- a/monasca_api/tests/test_validation.py +++ b/monasca_api/tests/test_validation.py @@ -103,7 +103,7 @@ class TestTimestampsValidation(base.BaseTestCase): try: helpers.validate_start_end_timestamps(start_timestamp, end_timestamp) - except: + except Exception: self.fail("shouldn't happen") def test_same_timestamps(self): @@ -156,6 +156,7 @@ class TestConvertTimeString(base.BaseTestCase): ValueError, helpers._convert_time_string, date_time_string) + valid_periods = [0, 60] diff --git a/monasca_api/v2/common/schemas/alarm_definition_request_body_schema.py b/monasca_api/v2/common/schemas/alarm_definition_request_body_schema.py index 847f62a98..69ef7c16e 100644 --- a/monasca_api/v2/common/schemas/alarm_definition_request_body_schema.py +++ b/monasca_api/v2/common/schemas/alarm_definition_request_body_schema.py @@ -59,6 +59,7 @@ def validate_alarm_action_list(v): def validate_undetermined_action_list(v): validate_action_list(v, 'UNDETERMINED') + alarm_definition_schema = { Required('name'): All(Any(str, six.text_type), Length(max=255)), Required('expression'): All(Any(str, six.text_type)), diff --git a/monasca_api/v2/reference/helpers.py b/monasca_api/v2/reference/helpers.py index 9f5c240f9..d2d4b3ba3 100644 --- a/monasca_api/v2/reference/helpers.py +++ b/monasca_api/v2/reference/helpers.py @@ -713,7 +713,7 @@ def paginate_statistics(statistics, uri, limit): def create_alarms_count_next_link(uri, offset, limit): if offset is None: - offset = 0 + offset = 0 parsed_url = urlparse.urlparse(uri) base_url = build_base_uri(parsed_url) new_query_params = [u'offset=' + urlparse.quote(str(offset + limit))] diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py index e71fabb83..8a14e1499 100644 --- a/releasenotes/source/conf.py +++ b/releasenotes/source/conf.py @@ -173,9 +173,9 @@ htmlhelp_basename = 'MonitoringApiReleaseNotesDoc' # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [( - master_doc, 'MonitoringApiReleaseNotes.tex', - u'Monitoring API Release Notes', [author], - 'manual' + master_doc, 'MonitoringApiReleaseNotes.tex', + u'Monitoring API Release Notes', [author], + 'manual' )] # The name of an image file (relative to this directory) to place at the top of diff --git a/test-requirements.txt b/test-requirements.txt index f4da7c58e..f0c0f2861 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -4,7 +4,7 @@ # Hacking already pins down pep8, pyflakes and flake8 bandit>=1.1.0 # Apache-2.0 bashate>=0.5.1 # Apache-2.0 -hacking>=1.1.0,<1.2.0 # Apache-2.0 +hacking>=3.0,<3.1.0 # Apache-2.0 Babel!=2.4.0,>=2.3.4 # BSD coverage!=4.4,>=4.0 # Apache-2.0 cassandra-driver!=3.6.0,>=3.3.0 # Apache-2.0 diff --git a/tox.ini b/tox.ini index 4625df73d..309240ee1 100644 --- a/tox.ini +++ b/tox.ini @@ -144,7 +144,8 @@ commands = bindep test # H201 no 'except:' at least use 'except Exception:' # H302 import only modules # H405 multi line docstring summary not separated with an empty line -ignore = F821,H201,H302,H405 +# W504 line break after binary operator +ignore = F821,H201,H302,H405,W504 # H106: Don't put vim configuration in source files # H203: Use assertIs(Not)None to check for None # H204: Use assert(Not)Equal to check for equality. @@ -161,6 +162,11 @@ local-check-factory = monasca_api.hacking.checks.factory import_exceptions = six.moves +[flake8:local-plugins] +extension = + B319 = checks:no_xrange +paths = ./monasca_api/hacking + [testenv:lower-constraints] deps = -c{toxinidir}/lower-constraints.txt