diff options
-rw-r--r-- | .zuul.yaml | 2 | ||||
-rw-r--r-- | babel.cfg | 1 | ||||
-rw-r--r-- | doc/requirements.txt | 6 | ||||
-rwxr-xr-x | doc/source/conf.py | 6 | ||||
-rw-r--r-- | doc/source/index.rst | 8 | ||||
-rw-r--r-- | lower-constraints.txt | 12 | ||||
-rw-r--r-- | oslo_concurrency/locale/en_GB/LC_MESSAGES/oslo_concurrency.po | 8 | ||||
-rw-r--r-- | oslo_concurrency/lockutils.py | 3 | ||||
-rw-r--r-- | oslo_concurrency/prlimit.py | 2 | ||||
-rw-r--r-- | oslo_concurrency/processutils.py | 39 | ||||
-rw-r--r-- | oslo_concurrency/tests/__init__.py | 6 | ||||
-rw-r--r-- | oslo_concurrency/tests/unit/test_lockutils.py | 13 | ||||
-rw-r--r-- | oslo_concurrency/tests/unit/test_processutils.py | 102 | ||||
-rw-r--r-- | releasenotes/source/conf.py | 6 | ||||
-rw-r--r-- | releasenotes/source/index.rst | 1 | ||||
-rw-r--r-- | releasenotes/source/ussuri.rst | 6 | ||||
-rw-r--r-- | requirements.txt | 1 | ||||
-rw-r--r-- | setup.cfg | 15 | ||||
-rw-r--r-- | test-requirements.txt | 2 | ||||
-rw-r--r-- | tox.ini | 4 |
20 files changed, 96 insertions, 147 deletions
@@ -4,7 +4,7 @@ - lib-forward-testing-python3 - openstack-cover-jobs - openstack-lower-constraints-jobs - - openstack-python3-ussuri-jobs + - openstack-python3-victoria-jobs - periodic-stable-jobs - publish-openstack-docs-pti - release-notes-jobs-python3 diff --git a/babel.cfg b/babel.cfg deleted file mode 100644 index efceab8..0000000 --- a/babel.cfg +++ /dev/null @@ -1 +0,0 @@ -[python: **.py] diff --git a/doc/requirements.txt b/doc/requirements.txt index ba34ac7..400e1d9 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -2,8 +2,8 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. # this is required for the docs build jobs -sphinx>=1.8.0,!=2.1.0 # BSD -openstackdocstheme>=1.20.0 # Apache-2.0 -reno>=2.5.0 # Apache-2.0 +sphinx>=2.0.0,!=2.1.0 # BSD +openstackdocstheme>=2.2.0 # Apache-2.0 +reno>=3.1.0 # Apache-2.0 fixtures>=3.0.0 # Apache-2.0/BSD sphinxcontrib-apidoc>=0.2.0 # BSD diff --git a/doc/source/conf.py b/doc/source/conf.py index e3516e0..2620b8d 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -24,9 +24,9 @@ extensions = [ ] # openstackdocstheme options -repository_name = 'openstack/oslo.concurrency' -bug_project = 'oslo.concurrency' -bug_tag = '' +openstackdocs_repo_name = 'openstack/oslo.concurrency' +openstackdocs_bug_project = 'oslo.concurrency' +openstackdocs_bug_tag = '' # The master toctree document. master_doc = 'index' diff --git a/doc/source/index.rst b/doc/source/index.rst index d1f395e..8ff2a86 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -16,6 +16,14 @@ external processes. contributor/index reference/index + +Release Notes +============= + +Read also the `oslo.concurrency Release Notes +<https://docs.openstack.org/releasenotes/oslo.concurrency/>`_. + + Indices and tables ================== diff --git a/lower-constraints.txt b/lower-constraints.txt index 27ecde6..f9246dd 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -11,47 +11,41 @@ eventlet==0.18.2 extras==1.0.0 fasteners==0.7.0 fixtures==3.0.0 -flake8==2.5.5 futures==3.0.0;python_version=='2.7' or python_version=='2.6' # BSD gitdb==0.6.4 GitPython==1.0.1 greenlet==0.4.10 -hacking==0.12.0 imagesize==0.7.1 iso8601==0.1.11 Jinja2==2.10 keystoneauth1==3.4.0 linecache2==1.0.0 MarkupSafe==1.0 -mccabe==0.2.1 -mock==2.0.0 monotonic==0.6 mox3==0.20.0 netaddr==0.7.18 netifaces==0.10.4 -openstackdocstheme==1.20.0 +openstackdocstheme==2.2.0 os-client-config==1.28.0 oslo.config==5.2.0 oslo.i18n==3.15.3 oslo.utils==3.33.0 oslotest==3.2.0 pbr==2.0.0 -pep8==1.5.7 -pyflakes==0.8.1 Pygments==2.2.0 pyparsing==2.1.0 python-mimeparse==1.6.0 python-subunit==1.0.0 pytz==2013.6 PyYAML==3.12 -reno==2.5.0 +reno==3.1.0 requests==2.14.2 requestsexceptions==1.2.0 rfc3986==0.3.1 six==1.10.0 smmap==0.9.0 snowballstemmer==1.2.1 -Sphinx==1.8.0 +Sphinx==2.0.0 sphinxcontrib-websupport==1.0.1 stevedore==1.20.0 stestr==2.0.0 diff --git a/oslo_concurrency/locale/en_GB/LC_MESSAGES/oslo_concurrency.po b/oslo_concurrency/locale/en_GB/LC_MESSAGES/oslo_concurrency.po index 1a7bd92..3e10df6 100644 --- a/oslo_concurrency/locale/en_GB/LC_MESSAGES/oslo_concurrency.po +++ b/oslo_concurrency/locale/en_GB/LC_MESSAGES/oslo_concurrency.po @@ -7,15 +7,16 @@ # Andi Chandler <andi@gowling.com>, 2014-2015 # Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata # Andi Chandler <andi@gowling.com>, 2017. #zanata +# Andi Chandler <andi@gowling.com>, 2020. #zanata msgid "" msgstr "" "Project-Id-Version: oslo.concurrency VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2018-02-23 11:40+0000\n" +"POT-Creation-Date: 2020-04-27 10:22+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-07-11 05:04+0000\n" +"PO-Revision-Date: 2020-04-27 08:12+0000\n" "Last-Translator: Andi Chandler <andi@gowling.com>\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -101,6 +102,9 @@ msgstr "" msgid "Running cmd (subprocess): %s" msgstr "Running cmd (subprocess): %s" +msgid "Specifying semaphores is not supported when using fair locks." +msgstr "Specifying semaphores is not supported when using fair locks." + msgid "Unexpected error while running command." msgstr "Unexpected error while running command." diff --git a/oslo_concurrency/lockutils.py b/oslo_concurrency/lockutils.py index 3236289..67cf41e 100644 --- a/oslo_concurrency/lockutils.py +++ b/oslo_concurrency/lockutils.py @@ -29,7 +29,6 @@ import fasteners from oslo_config import cfg from oslo_utils import reflection from oslo_utils import timeutils -import six from oslo_concurrency._i18n import _ @@ -344,7 +343,7 @@ def synchronized(name, lock_file_prefix=None, external=False, lock_path=None, def wrap(f): - @six.wraps(f) + @functools.wraps(f) def inner(*args, **kwargs): t1 = timeutils.now() t2 = None diff --git a/oslo_concurrency/prlimit.py b/oslo_concurrency/prlimit.py index e0fc4e3..5f75910 100644 --- a/oslo_concurrency/prlimit.py +++ b/oslo_concurrency/prlimit.py @@ -13,8 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - import argparse import os import resource diff --git a/oslo_concurrency/processutils.py b/oslo_concurrency/processutils.py index fc815de..40cadf0 100644 --- a/oslo_concurrency/processutils.py +++ b/oslo_concurrency/processutils.py @@ -32,7 +32,6 @@ from oslo_utils import encodeutils from oslo_utils import importutils from oslo_utils import strutils from oslo_utils import timeutils -import six from oslo_concurrency._i18n import _ @@ -329,7 +328,7 @@ def execute(*cmd, **kwargs): if kwargs: raise UnknownArgumentError(_('Got unknown keyword args: %r') % kwargs) - if isinstance(log_errors, six.integer_types): + if isinstance(log_errors, int): log_errors = LogErrors(log_errors) if not isinstance(log_errors, LogErrors): raise InvalidArgumentError(_('Got invalid arg log_errors: %r') % @@ -413,16 +412,15 @@ def execute(*cmd, **kwargs): if not ignore_exit_code and _returncode not in check_exit_code: (stdout, stderr) = result - if six.PY3: - stdout = os.fsdecode(stdout) - stderr = os.fsdecode(stderr) + stdout = os.fsdecode(stdout) + stderr = os.fsdecode(stderr) sanitized_stdout = strutils.mask_password(stdout) sanitized_stderr = strutils.mask_password(stderr) raise ProcessExecutionError(exit_code=_returncode, stdout=sanitized_stdout, stderr=sanitized_stderr, cmd=sanitized_cmd) - if six.PY3 and not binary and result is not None: + if not binary and result is not None: (stdout, stderr) = result # Decode from the locale using using the surrogateescape error # handler (decoding cannot fail) @@ -491,7 +489,7 @@ def trycmd(*args, **kwargs): out, err = execute(*args, **kwargs) failed = False except ProcessExecutionError as exn: - out, err = '', six.text_type(exn) + out, err = '', str(exn) failed = True if not failed and discard_warnings and err: @@ -543,12 +541,11 @@ def ssh_execute(ssh, cmd, process_input=None, exit_status = channel.recv_exit_status() - if six.PY3: - # Decode from the locale using using the surrogateescape error handler - # (decoding cannot fail). Decode even if binary is True because - # mask_password() requires Unicode on Python 3 - stdout = os.fsdecode(stdout) - stderr = os.fsdecode(stderr) + # Decode from the locale using using the surrogateescape error handler + # (decoding cannot fail). Decode even if binary is True because + # mask_password() requires Unicode on Python 3 + stdout = os.fsdecode(stdout) + stderr = os.fsdecode(stderr) if sanitize_stdout: stdout = strutils.mask_password(stdout) @@ -570,19 +567,9 @@ def ssh_execute(ssh, cmd, process_input=None, cmd=sanitized_cmd) if binary: - if six.PY2: - # On Python 2, stdout is a bytes string if mask_password() failed - # to decode it, or an Unicode string otherwise. Encode to the - # default encoding (ASCII) because mask_password() decodes from - # the same encoding. - if isinstance(stdout, six.text_type): - stdout = stdout.encode() - if isinstance(stderr, six.text_type): - stderr = stderr.encode() - else: - # fsencode() is the reverse operation of fsdecode() - stdout = os.fsencode(stdout) - stderr = os.fsencode(stderr) + # fsencode() is the reverse operation of fsdecode() + stdout = os.fsencode(stdout) + stderr = os.fsencode(stderr) return (stdout, stderr) diff --git a/oslo_concurrency/tests/__init__.py b/oslo_concurrency/tests/__init__.py index bd455c4..73122fb 100644 --- a/oslo_concurrency/tests/__init__.py +++ b/oslo_concurrency/tests/__init__.py @@ -17,3 +17,9 @@ import os if os.environ.get('TEST_EVENTLET'): import eventlet eventlet.monkey_patch() + # Monkey patch the original current_thread to use the up-to-date _active + # global variable. See https://bugs.launchpad.net/bugs/1863021 and + # https://github.com/eventlet/eventlet/issues/592 + import __original_module_threading as orig_threading # noqa + import threading # noqa + orig_threading.current_thread.__globals__['_active'] = threading._active diff --git a/oslo_concurrency/tests/unit/test_lockutils.py b/oslo_concurrency/tests/unit/test_lockutils.py index 2aea215..0097bdc 100644 --- a/oslo_concurrency/tests/unit/test_lockutils.py +++ b/oslo_concurrency/tests/unit/test_lockutils.py @@ -22,11 +22,10 @@ import sys import tempfile import threading import time +from unittest import mock -import mock from oslo_config import cfg from oslotest import base as test_base -import six from oslo_concurrency.fixture import lockutils as fixtures from oslo_concurrency import lockutils @@ -279,10 +278,7 @@ class LockTestCase(test_base.BaseTestCase): # Note(flaper87): Lock is not external, which means # a semaphore will be yielded with lockutils.lock("test") as sem: - if six.PY2: - self.assertIsInstance(sem, threading._Semaphore) - else: - self.assertIsInstance(sem, threading.Semaphore) + self.assertIsInstance(sem, threading.Semaphore) # NOTE(flaper87): Lock is external so an InterProcessLock # will be yielded. @@ -296,10 +292,7 @@ class LockTestCase(test_base.BaseTestCase): self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency') with lockutils.lock("test") as sem: - if six.PY2: - self.assertIsInstance(sem, threading._Semaphore) - else: - self.assertIsInstance(sem, threading.Semaphore) + self.assertIsInstance(sem, threading.Semaphore) with lockutils.lock("test2", external=True) as lock: self.assertTrue(lock.exists()) diff --git a/oslo_concurrency/tests/unit/test_processutils.py b/oslo_concurrency/tests/unit/test_processutils.py index 982d293..fde6a54 100644 --- a/oslo_concurrency/tests/unit/test_processutils.py +++ b/oslo_concurrency/tests/unit/test_processutils.py @@ -13,9 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. -from __future__ import print_function - import errno +import io import logging import multiprocessing import os @@ -26,11 +25,10 @@ import stat import subprocess import sys import tempfile +from unittest import mock import fixtures -import mock from oslotest import base as test_base -import six from oslo_concurrency import processutils @@ -112,17 +110,11 @@ class UtilsTest(test_base.BaseTestCase): processutils.execute(TRUE_UTILITY) - if six.PY2: - self.assertRaises(processutils.InvalidArgumentError, - processutils.execute, - TRUE_UTILITY, - preexec_fn=preexec_fn) - else: - try: - processutils.execute(TRUE_UTILITY, preexec_fn=preexec_fn) - except Exception as e: - if type(e).__name__ != 'SubprocessError': - raise + try: + processutils.execute(TRUE_UTILITY, preexec_fn=preexec_fn) + except Exception as e: + if type(e).__name__ != 'SubprocessError': + raise @mock.patch.object(os, 'name', 'nt') @mock.patch.object(processutils.subprocess, "Popen") @@ -168,23 +160,23 @@ class ProcessExecutionErrorTest(test_base.BaseTestCase): def test_defaults(self): err = processutils.ProcessExecutionError() - self.assertIn('None\n', six.text_type(err)) - self.assertIn('code: -\n', six.text_type(err)) + self.assertIn('None\n', str(err)) + self.assertIn('code: -\n', str(err)) def test_with_description(self): description = 'The Narwhal Bacons at Midnight' err = processutils.ProcessExecutionError(description=description) - self.assertIn(description, six.text_type(err)) + self.assertIn(description, str(err)) def test_with_exit_code(self): exit_code = 0 err = processutils.ProcessExecutionError(exit_code=exit_code) - self.assertIn(str(exit_code), six.text_type(err)) + self.assertIn(str(exit_code), str(err)) def test_with_cmd(self): cmd = 'telinit' err = processutils.ProcessExecutionError(cmd=cmd) - self.assertIn(cmd, six.text_type(err)) + self.assertIn(cmd, str(err)) def test_with_stdout(self): stdout = """ @@ -207,13 +199,13 @@ class ProcessExecutionErrorTest(test_base.BaseTestCase): the Wielder of Wonder, with world's renown. """.strip() err = processutils.ProcessExecutionError(stdout=stdout) - print(six.text_type(err)) - self.assertIn('people-kings', six.text_type(err)) + print(str(err)) + self.assertIn('people-kings', str(err)) def test_with_stderr(self): stderr = 'Cottonian library' err = processutils.ProcessExecutionError(stderr=stderr) - self.assertIn(stderr, six.text_type(err)) + self.assertIn(stderr, str(err)) def test_retry_on_failure(self): fd, tmpfilename = tempfile.mkstemp() @@ -446,8 +438,8 @@ grep foo 'something') self.assertEqual(38, err.exit_code) - self.assertIsInstance(err.stdout, six.text_type) - self.assertIsInstance(err.stderr, six.text_type) + self.assertIsInstance(err.stdout, str) + self.assertIsInstance(err.stderr, str) self.assertIn('onstdout --password="***"', err.stdout) self.assertIn('onstderr --password="***"', err.stderr) self.assertEqual(' '.join([tmpfilename, @@ -458,20 +450,12 @@ grep foo def execute_undecodable_bytes(self, out_bytes, err_bytes, exitcode=0, binary=False): - if six.PY3: - code = ';'.join(('import sys', - 'sys.stdout.buffer.write(%a)' % out_bytes, - 'sys.stdout.flush()', - 'sys.stderr.buffer.write(%a)' % err_bytes, - 'sys.stderr.flush()', - 'sys.exit(%s)' % exitcode)) - else: - code = ';'.join(('import sys', - 'sys.stdout.write(%r)' % out_bytes, - 'sys.stdout.flush()', - 'sys.stderr.write(%r)' % err_bytes, - 'sys.stderr.flush()', - 'sys.exit(%s)' % exitcode)) + code = ';'.join(('import sys', + 'sys.stdout.buffer.write(%a)' % out_bytes, + 'sys.stdout.flush()', + 'sys.stderr.buffer.write(%a)' % err_bytes, + 'sys.stderr.flush()', + 'sys.exit(%s)' % exitcode)) return processutils.execute(sys.executable, '-c', code, binary=binary) @@ -480,7 +464,7 @@ grep foo err_bytes = b'err: ' + UNDECODABLE_BYTES out, err = self.execute_undecodable_bytes(out_bytes, err_bytes, binary=binary) - if six.PY3 and not binary: + if not binary: self.assertEqual(os.fsdecode(out_bytes), out) self.assertEqual(os.fsdecode(err_bytes), err) else: @@ -505,16 +489,8 @@ grep foo err = exc.stderr out_bytes = b'out: password="***" ' + UNDECODABLE_BYTES err_bytes = b'err: password="***" ' + UNDECODABLE_BYTES - if six.PY3: - # On Python 3, stdout and stderr attributes of - # ProcessExecutionError must always be Unicode - self.assertEqual(os.fsdecode(out_bytes), out) - self.assertEqual(os.fsdecode(err_bytes), err) - else: - # On Python 2, stdout and stderr attributes of - # ProcessExecutionError must always be bytes - self.assertEqual(out_bytes, out) - self.assertEqual(err_bytes, err) + self.assertEqual(os.fsdecode(out_bytes), out) + self.assertEqual(os.fsdecode(err_bytes), err) def test_undecodable_bytes_error(self): self.check_undecodable_bytes_error(False) @@ -642,7 +618,7 @@ class FakeSshChannel(object): return self.rc -class FakeSshStream(six.BytesIO): +class FakeSshStream(io.BytesIO): def setup_channel(self, rc): self.channel = FakeSshChannel(rc) @@ -658,9 +634,9 @@ class FakeSshConnection(object): raise socket.timeout() stdout = FakeSshStream(self.out) stdout.setup_channel(self.rc) - return (six.BytesIO(), + return (io.BytesIO(), stdout, - six.BytesIO(self.err)) + io.BytesIO(self.err)) class SshExecuteTestCase(test_base.BaseTestCase): @@ -684,8 +660,8 @@ class SshExecuteTestCase(test_base.BaseTestCase): out, err = processutils.ssh_execute(FakeSshConnection(0), 'ls') self.assertEqual('stdout', out) self.assertEqual('stderr', err) - self.assertIsInstance(out, six.text_type) - self.assertIsInstance(err, six.text_type) + self.assertIsInstance(out, str) + self.assertIsInstance(err, str) def test_binary(self): o, e = processutils.ssh_execute(FakeSshConnection(0), 'ls', @@ -701,7 +677,7 @@ class SshExecuteTestCase(test_base.BaseTestCase): conn = FakeSshConnection(0, out=out_bytes, err=err_bytes) out, err = processutils.ssh_execute(conn, 'ls', binary=binary) - if six.PY3 and not binary: + if not binary: self.assertEqual(os.fsdecode(out_bytes), out) self.assertEqual(os.fsdecode(err_bytes), err) else: @@ -729,16 +705,8 @@ class SshExecuteTestCase(test_base.BaseTestCase): out = exc.stdout err = exc.stderr - if six.PY3: - # On Python 3, stdout and stderr attributes of - # ProcessExecutionError must always be Unicode - self.assertEqual(os.fsdecode(out_bytes), out) - self.assertEqual(os.fsdecode(err_bytes), err) - else: - # On Python 2, stdout and stderr attributes of - # ProcessExecutionError must always be bytes - self.assertEqual(out_bytes, out) - self.assertEqual(err_bytes, err) + self.assertEqual(os.fsdecode(out_bytes), out) + self.assertEqual(os.fsdecode(err_bytes), err) def test_undecodable_bytes_error(self): self.check_undecodable_bytes_error(False) @@ -752,7 +720,7 @@ class SshExecuteTestCase(test_base.BaseTestCase): def _test_compromising_ssh(self, rc, check): fixture = self.useFixture(fixtures.FakeLogger(level=logging.DEBUG)) - fake_stdin = six.BytesIO() + fake_stdin = io.BytesIO() fake_stdout = mock.Mock() fake_stdout.channel.recv_exit_status.return_value = rc diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py index 2351d2f..8045747 100644 --- a/releasenotes/source/conf.py +++ b/releasenotes/source/conf.py @@ -40,9 +40,9 @@ extensions = [ ] # openstackdocstheme options -repository_name = 'openstack/oslo.config' -bug_project = 'oslo.config' -bug_tag = '' +openstackdocs_repo_name = 'openstack/oslo.config' +openstackdocs_bug_project = 'oslo.config' +openstackdocs_bug_tag = '' # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst index 4707005..4b69439 100644 --- a/releasenotes/source/index.rst +++ b/releasenotes/source/index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + ussuri train stein rocky diff --git a/releasenotes/source/ussuri.rst b/releasenotes/source/ussuri.rst new file mode 100644 index 0000000..e21e50e --- /dev/null +++ b/releasenotes/source/ussuri.rst @@ -0,0 +1,6 @@ +=========================== +Ussuri Series Release Notes +=========================== + +.. release-notes:: + :branch: stable/ussuri diff --git a/requirements.txt b/requirements.txt index 241920c..2abd8f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,5 +6,4 @@ pbr!=2.1.0,>=2.0.0 # Apache-2.0 oslo.config>=5.2.0 # Apache-2.0 oslo.i18n>=3.15.3 # Apache-2.0 oslo.utils>=3.33.0 # Apache-2.0 -six>=1.10.0 # MIT fasteners>=0.7.0 # Apache-2.0 @@ -17,6 +17,7 @@ classifier = Programming Language :: Python :: 3 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 Programming Language :: Python :: 3 :: Only Programming Language :: Python :: Implementation :: CPython @@ -29,17 +30,3 @@ oslo.config.opts = oslo.concurrency = oslo_concurrency.opts:list_opts console_scripts = lockutils-wrapper = oslo_concurrency.lockutils:main - -[compile_catalog] -directory = oslo_concurrency/locale -domain = oslo_concurrency - -[update_catalog] -domain = oslo_concurrency -output_dir = oslo_concurrency/locale -input_file = oslo_concurrency/locale/oslo_concurrency.pot - -[extract_messages] -keywords = _ gettext ngettext l_ lazy_gettext -mapping_file = babel.cfg -output_file = oslo_concurrency/locale/oslo_concurrency.pot diff --git a/test-requirements.txt b/test-requirements.txt index 44c2ac9..2d71e69 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,7 +2,7 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -hacking>=1.1.0,<1.2.0 # Apache-2.0 +hacking>=3.0.1,<3.1.0 # Apache-2.0 oslotest>=3.2.0 # Apache-2.0 coverage!=4.4,>=4.0 # Apache-2.0 fixtures>=3.0.0 # Apache-2.0/BSD @@ -1,6 +1,6 @@ [tox] minversion = 3.2.0 -envlist = py37,pep8 +envlist = py38,pep8 ignore_basepython_conflict = True [testenv] @@ -44,7 +44,7 @@ commands = [flake8] show-source = True -ignore = H405 +ignore = H405,W504 exclude=.venv,.git,.tox,dist,*lib/python*,*egg,build [hacking] |