Hello community,

here is the log from the commit of package python-oslo.utils for 
openSUSE:Factory checked in at 2020-06-05 20:15:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.utils (Old)
 and      /work/SRC/openSUSE:Factory/.python-oslo.utils.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oslo.utils"

Fri Jun  5 20:15:29 2020 rev:21 rq:803601 version:4.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-oslo.utils/python-oslo.utils.changes      
2020-03-24 22:32:37.565097683 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-oslo.utils.new.3606/python-oslo.utils.changes
    2020-06-05 20:19:36.619743280 +0200
@@ -1,0 +2,31 @@
+Tue May 12 09:49:15 UTC 2020 - [email protected]
+
+- update to version 4.1.1
+  - trivial: Move setup code into setUp helper
+  - Switch to Ussuri jobs
+  - Remove universal wheel configuration
+  - tests: Convert remaining tests to mock
+  - tox: Use upper-constraints for docs jobs
+  - Make mask_password case insensitive, and add new patterns
+  - Ignore releasenote cache within git untracked files
+  - Ignore the .eggs directory
+  - Support "qemu-img info" virtual size in QEMU 4.1 and later
+  - reword releasenote for py27 support dropping
+  - Bump the openstackdocstheme extension to 1.20
+  - tox: Keeping going with docs
+  - Update master for stable/train
+  - Add test to check scientific notation on disk virtual size
+  - Update hacking for Python3
+  - Use unittest.mock instead of third party mock
+  - remove outdated header
+  - Fix invalid escapes in regular expression strings
+  - tox: Trivial cleanup
+  - imageutils: Report format specific details when using JSON output format
+  - Verify the sanitize keys are lowered
+  - Update the constraints url
+  - Make mask_dict_password case insensitive and add new patterns
+  - Fix regex to correctly recognize scientific notation with QemuImgInfo
+  - Flatten test case
+  - [ussuri][goal] Drop python 2.7 support and testing
+
+-------------------------------------------------------------------

Old:
----
  oslo.utils-3.41.5.tar.gz

New:
----
  oslo.utils-4.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-oslo.utils.spec ++++++
--- /var/tmp/diff_new_pack.hsWIMR/_old  2020-06-05 20:19:37.411745972 +0200
+++ /var/tmp/diff_new_pack.hsWIMR/_new  2020-06-05 20:19:37.415745985 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-oslo.utils
-Version:        3.41.5
+Version:        4.1.1
 Release:        0
 Summary:        OpenStack Utils Library
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/oslo.utils
-Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.utils/oslo.utils-3.41.5.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.utils/oslo.utils-4.1.1.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-Babel
 BuildRequires:  python3-ddt
@@ -32,7 +32,7 @@
 BuildRequires:  python3-fixtures
 BuildRequires:  python3-iso8601 >= 0.1.11
 BuildRequires:  python3-mock
-BuildRequires:  python3-monotonic >= 0.6
+BuildRequires:  python3-monotonic
 BuildRequires:  python3-netaddr >= 0.7.18
 BuildRequires:  python3-netifaces >= 0.10.4
 BuildRequires:  python3-oslo.i18n >= 3.15.3
@@ -76,7 +76,7 @@
 Documentation for OpenStack utils library.
 
 %prep
-%autosetup -p1 -n oslo.utils-3.41.5
+%autosetup -p1 -n oslo.utils-4.1.1
 
 %py_req_cleanup
 
@@ -87,7 +87,7 @@
 %py3_install
 
 # generate html docs
-PBR_VERSION=3.41.5 %sphinx_build -b html doc/source doc/build/html
+PBR_VERSION=4.1.1 %sphinx_build -b html doc/source doc/build/html
 # remove the sphinx-build leftovers
 rm -rf doc/build/html/.{doctrees,buildinfo}
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.hsWIMR/_old  2020-06-05 20:19:37.439746068 +0200
+++ /var/tmp/diff_new_pack.hsWIMR/_new  2020-06-05 20:19:37.439746068 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/train/openstack/oslo.utils/oslo.utils.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/ussuri/openstack/oslo.utils/oslo.utils.spec.j2</param>
     <param name="output-name">python-oslo.utils.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/oslo.utils/stable/train/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/oslo.utils/raw/branch/stable/ussuri/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,oslo.utils</param>
   </service>

++++++ oslo.utils-3.41.5.tar.gz -> oslo.utils-4.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/.zuul.yaml 
new/oslo.utils-4.1.1/.zuul.yaml
--- old/oslo.utils-3.41.5/.zuul.yaml    2020-03-04 02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/.zuul.yaml     2020-04-07 12:08:13.000000000 +0200
@@ -1,11 +1,9 @@
 - project:
     templates:
       - check-requirements
-      - lib-forward-testing
       - lib-forward-testing-python3
       - openstack-lower-constraints-jobs
-      - openstack-python-jobs
-      - openstack-python3-train-jobs
+      - openstack-python3-ussuri-jobs
       - periodic-stable-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/AUTHORS 
new/oslo.utils-4.1.1/AUTHORS
--- old/oslo.utils-3.41.5/AUTHORS       2020-03-04 02:02:34.000000000 +0100
+++ new/oslo.utils-4.1.1/AUTHORS        2020-04-07 12:09:28.000000000 +0200
@@ -86,6 +86,7 @@
 Julien Danjou <[email protected]>
 Kenneth Giusti <[email protected]>
 Kevin Houdebert <[email protected]>
+Lee Yarwood <[email protected]>
 Lucas Alvares Gomes <[email protected]>
 Mark Mielke <[email protected]>
 Matthew Booth <[email protected]>
@@ -101,6 +102,7 @@
 Omar Shykhkerimov <[email protected]>
 OpenStack Release Bot <[email protected]>
 Paul Belanger <[email protected]>
+Radomir Dopieralski <[email protected]>
 Rahul Nair <[email protected]>
 Rajath Agasthya <[email protected]>
 Raymond Pekowski <[email protected]>
@@ -111,6 +113,7 @@
 Russell Bryant <[email protected]>
 SandyWalsh <[email protected]>
 Sean Dague <[email protected]>
+Sean McGinnis <[email protected]>
 Sean McGinnis <[email protected]>
 Sergey Kraynev <[email protected]>
 Sergey Lukjanov <[email protected]>
@@ -141,6 +144,7 @@
 Zhongyue Luo <[email protected]>
 avnish <[email protected]>
 bhagyashris <[email protected]>
+caoyuan <[email protected]>
 changxun <[email protected]>
 dharmendra <[email protected]>
 ekudryashova <[email protected]>
@@ -155,6 +159,7 @@
 malei <[email protected]>
 melissaml <[email protected]>
 paul-carlton2 <[email protected]>
+pengyuesheng <[email protected]>
 pran1990 <[email protected]>
 ricolin <[email protected]>
 sridhargaddam <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/ChangeLog 
new/oslo.utils-4.1.1/ChangeLog
--- old/oslo.utils-3.41.5/ChangeLog     2020-03-04 02:02:34.000000000 +0100
+++ new/oslo.utils-4.1.1/ChangeLog      2020-04-07 12:09:28.000000000 +0200
@@ -1,28 +1,55 @@
 CHANGES
 =======
 
-3.41.5
-------
+4.1.1
+-----
 
+* Update hacking for Python3
+* Use unittest.mock instead of third party mock
+* tox: Use upper-constraints for docs jobs
+
+4.1.0
+-----
+
+* Add test to check scientific notation on disk virtual size
+* tests: Convert remaining tests to mock
+* Flatten test case
 * Fix regex to correctly recognize scientific notation with QemuImgInfo
+* imageutils: Report format specific details when using JSON output format
+
+4.0.1
+-----
+
+* remove outdated header
+* Remove universal wheel configuration
+* reword releasenote for py27 support dropping
+
+4.0.0
+-----
 
-3.41.4
+* [ussuri][goal] Drop python 2.7 support and testing
+* tox: Trivial cleanup
+* Ignore releasenote cache within git untracked files
+* trivial: Move setup code into setUp helper
+
+3.42.1
 ------
 
 * Verify the sanitize keys are lowered
+* Fix invalid escapes in regular expression strings
+* Ignore the .eggs directory
 * Make mask\_dict\_password case insensitive and add new patterns
+* Bump the openstackdocstheme extension to 1.20
 
-3.41.3
+3.42.0
 ------
 
 * Make mask\_password case insensitive, and add new patterns
-
-3.41.2
-------
-
+* tox: Keeping going with docs
+* Switch to Ussuri jobs
+* Update the constraints url
 * Support "qemu-img info" virtual size in QEMU 4.1 and later
-* Update TOX/UPPER\_CONSTRAINTS\_FILE for stable/train
-* Update .gitreview for stable/train
+* Update master for stable/train
 
 3.41.1
 ------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/PKG-INFO 
new/oslo.utils-4.1.1/PKG-INFO
--- old/oslo.utils-3.41.5/PKG-INFO      2020-03-04 02:02:35.000000000 +0100
+++ new/oslo.utils-4.1.1/PKG-INFO       2020-04-07 12:09:28.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: oslo.utils
-Version: 3.41.5
+Version: 4.1.1
 Summary: Oslo Utility library
 Home-page: https://docs.openstack.org/oslo.utils/latest/
 Author: OpenStack
@@ -44,8 +44,9 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/doc/requirements.txt 
new/oslo.utils-4.1.1/doc/requirements.txt
--- old/oslo.utils-3.41.5/doc/requirements.txt  2020-03-04 02:01:40.000000000 
+0100
+++ new/oslo.utils-4.1.1/doc/requirements.txt   2020-04-07 12:08:13.000000000 
+0200
@@ -2,8 +2,7 @@
 # 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.6.6,!=1.6.7,>=1.6.2,<2.0.0;python_version=='2.7' # BSD
-sphinx!=1.6.6,!=1.6.7,>=1.6.2;python_version>='3.4' # BSD
-openstackdocstheme>=1.18.1 # Apache-2.0
+sphinx>=1.8.0,!=2.1.0 # BSD
+openstackdocstheme>=1.20.0 # Apache-2.0
 reno>=2.5.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/doc/source/conf.py 
new/oslo.utils-4.1.1/doc/source/conf.py
--- old/oslo.utils-3.41.5/doc/source/conf.py    2020-03-04 02:01:40.000000000 
+0100
+++ new/oslo.utils-4.1.1/doc/source/conf.py     2020-04-07 12:08:13.000000000 
+0200
@@ -63,8 +63,6 @@
 # html_static_path = ['static']
 html_theme = 'openstackdocs'
 
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
-
 # Output file base name for HTML help builder.
 htmlhelp_basename = '%sdoc' % project
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/lower-constraints.txt 
new/oslo.utils-4.1.1/lower-constraints.txt
--- old/oslo.utils-3.41.5/lower-constraints.txt 2020-03-04 02:01:40.000000000 
+0100
+++ new/oslo.utils-4.1.1/lower-constraints.txt  2020-04-07 12:08:13.000000000 
+0200
@@ -7,17 +7,13 @@
 eventlet==0.18.2
 extras==1.0.0
 fixtures==3.0.0
-flake8==2.5.5
 funcsigs==1.0.0
 gitdb==0.6.4
 GitPython==1.0.1
-hacking==0.12.0
 iso8601==0.1.11
 keystoneauth1==3.4.0
 linecache2==1.0.0
 mccabe==0.2.1
-mock==2.0.0
-monotonic==0.6
 netaddr==0.7.18
 netifaces==0.10.4
 os-client-config==1.28.0
@@ -25,8 +21,6 @@
 oslo.i18n==3.15.3
 oslotest==3.2.0
 pbr==2.0.0
-pep8==1.5.7
-pyflakes==0.8.1
 pyparsing==2.1.0
 python-mimeparse==1.6.0
 python-subunit==1.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo.utils.egg-info/PKG-INFO 
new/oslo.utils-4.1.1/oslo.utils.egg-info/PKG-INFO
--- old/oslo.utils-3.41.5/oslo.utils.egg-info/PKG-INFO  2020-03-04 
02:02:34.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo.utils.egg-info/PKG-INFO   2020-04-07 
12:09:28.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: oslo.utils
-Version: 3.41.5
+Version: 4.1.1
 Summary: Oslo Utility library
 Home-page: https://docs.openstack.org/oslo.utils/latest/
 Author: OpenStack
@@ -44,8 +44,9 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo.utils.egg-info/SOURCES.txt 
new/oslo.utils-4.1.1/oslo.utils.egg-info/SOURCES.txt
--- old/oslo.utils-3.41.5/oslo.utils.egg-info/SOURCES.txt       2020-03-04 
02:02:34.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo.utils.egg-info/SOURCES.txt        2020-04-07 
12:09:28.000000000 +0200
@@ -96,6 +96,7 @@
 oslo_utils/tests/fake/v2/dummpy.py
 releasenotes/notes/add-reno-350f5f34f794fb5e.yaml
 releasenotes/notes/bump-up-port-range-f774a16336158339.yaml
+releasenotes/notes/drop-python27-support-f97f680651693b47.yaml
 releasenotes/notes/image-utils-handle-scientific-notation-6f65d46e9c8c8f8c.yaml
 releasenotes/notes/mask-dict-passwords-99357ffb7972fb0b.yaml
 releasenotes/notes/mask-password-patterns-f41524069b8ae488.yaml
@@ -107,6 +108,7 @@
 releasenotes/source/queens.rst
 releasenotes/source/rocky.rst
 releasenotes/source/stein.rst
+releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo.utils.egg-info/pbr.json 
new/oslo.utils-4.1.1/oslo.utils.egg-info/pbr.json
--- old/oslo.utils-3.41.5/oslo.utils.egg-info/pbr.json  2020-03-04 
02:02:34.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo.utils.egg-info/pbr.json   2020-04-07 
12:09:28.000000000 +0200
@@ -1 +1 @@
-{"git_version": "85cd57d", "is_release": true}
\ No newline at end of file
+{"git_version": "af89f70", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo.utils.egg-info/requires.txt 
new/oslo.utils-4.1.1/oslo.utils.egg-info/requires.txt
--- old/oslo.utils-3.41.5/oslo.utils.egg-info/requires.txt      2020-03-04 
02:02:34.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo.utils.egg-info/requires.txt       2020-04-07 
12:09:28.000000000 +0200
@@ -7,9 +7,3 @@
 netifaces>=0.10.4
 debtcollector>=1.2.0
 pyparsing>=2.1.0
-
-[:(python_version<'3.3')]
-monotonic>=0.6
-
-[:(python_version=='2.7' or python_version=='2.6')]
-funcsigs>=1.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/imageutils.py 
new/oslo.utils-4.1.1/oslo_utils/imageutils.py
--- old/oslo.utils-3.41.5/oslo_utils/imageutils.py      2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/imageutils.py       2020-04-07 
12:08:13.000000000 +0200
@@ -45,7 +45,7 @@
                                   r"\s+(.*?)\)\s*$"), re.I)
     TOP_LEVEL_RE = re.compile(r"^([\w\d\s\_\-]+):(.*)$")
     SIZE_RE = re.compile(r"([0-9]+[eE][-+][0-9]+|\d*\.?\d+)"
-                         "\s*(\w+)?(\s*\(\s*(\d+)\s+bytes\s*\))?",
+                         r"\s*(\w+)?(\s*\(\s*(\d+)\s+bytes\s*\))?",
                          re.I)
 
     def __init__(self, cmd_output=None, format='human'):
@@ -59,6 +59,7 @@
             self.disk_size = details.get('actual-size')
             self.snapshots = details.get('snapshots', [])
             self.encrypted = details.get('encrypted')
+            self.format_specific = details.get('format-specific')
         else:
             details = self._parse(cmd_output or '')
             self.image = details.get('image')
@@ -69,6 +70,7 @@
             self.disk_size = details.get('disk_size')
             self.snapshots = details.get('snapshot_list', [])
             self.encrypted = details.get('encrypted')
+            self.format_specific = None
 
     def __str__(self):
         lines = [
@@ -83,6 +85,8 @@
             lines.append("snapshots: %s" % self.snapshots)
         if self.encrypted:
             lines.append("encrypted: %s" % self.encrypted)
+        if self.format_specific:
+            lines.appened("format_specific: %s" % self.format_specific)
         return "\n".join(lines)
 
     def _canonicalize(self, field):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/secretutils.py 
new/oslo.utils-4.1.1/oslo_utils/secretutils.py
--- old/oslo.utils-3.41.5/oslo_utils/secretutils.py     2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/secretutils.py      2020-04-07 
12:08:13.000000000 +0200
@@ -39,6 +39,7 @@
         result |= ord(x) ^ ord(y)
     return result == 0
 
+
 try:
     constant_time_compare = hmac.compare_digest
 except AttributeError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/strutils.py 
new/oslo.utils-4.1.1/oslo_utils/strutils.py
--- old/oslo.utils-3.41.5/oslo_utils/strutils.py        2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/strutils.py 2020-04-07 12:08:13.000000000 
+0200
@@ -83,11 +83,11 @@
                       r'([-]{2}%(key)s[0-9]*\s+)[^\'^\"^=^\s]+([\s]*)',
                       r'(<%(key)s[0-9]*>)[^<]*(</%(key)s[0-9]*>)',
                       r'([\"\']%(key)s[0-9]*[\"\']\s*:\s*[\"\'])[^\"\']*'
-                      '([\"\'])',
+                      r'([\"\'])',
                       r'([\'"][^"\']*%(key)s[0-9]*[\'"]\s*:\s*u?[\'"])[^\"\']*'
-                      '([\'"])',
+                      r'([\'"])',
                       r'([\'"][^\'"]*%(key)s[0-9]*[\'"]\s*,\s*\'--?[A-z]+'
-                      '\'\s*,\s*u?[\'"])[^\"\']*([\'"])',
+                      r'\'\s*,\s*u?[\'"])[^\"\']*([\'"])',
                       r'(%(key)s[0-9]*\s*--?[A-z]+\s*)\S+(\s*)']
 
 # NOTE(dhellmann): Keep a separate list of patterns by key so we only
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.utils-3.41.5/oslo_utils/tests/test_eventletutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_eventletutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_eventletutils.py        
2020-03-04 02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_eventletutils.py 2020-04-07 
12:08:13.000000000 +0200
@@ -13,11 +13,11 @@
 #    under the License.
 
 import threading
+from unittest import mock
 import warnings
 
 import eventlet
 from eventlet import greenthread
-import mock
 from oslotest import base as test_base
 import six
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/tests/test_excutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_excutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_excutils.py     2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_excutils.py      2020-04-07 
12:08:13.000000000 +0200
@@ -13,19 +13,15 @@
 #    under the License.
 
 import logging
+from unittest import mock
 
 import fixtures
-import mock
 from oslotest import base as test_base
-from oslotest import moxstubout
 
 from oslo_utils import excutils
 from oslo_utils import timeutils
 
 
-mox = moxstubout.mox
-
-
 class Fail1(excutils.CausedByException):
     pass
 
@@ -168,159 +164,266 @@
 
     def setUp(self):
         super(ForeverRetryUncaughtExceptionsTest, self).setUp()
-        moxfixture = self.useFixture(moxstubout.MoxStubout())
-        self.mox = moxfixture.mox
+
+        self._exceptions = []
+
+        self.useFixture(fixtures.MockPatch('time.sleep', return_value=None))
 
     @excutils.forever_retry_uncaught_exceptions
     def exception_generator(self):
-        exc = self.exception_to_raise()
-        while exc is not None:
-            raise exc
-            exc = self.exception_to_raise()
-
-    def exception_to_raise(self):
-        return None
-
-    def my_time_sleep(self, arg):
-        pass
-
-    def exc_retrier_common_start(self):
-        patch_time = fixtures.MockPatch(
-            'time.sleep', self.my_time_sleep)
-        self.useFixture(patch_time)
-
-        self.mox.StubOutWithMock(logging, 'exception')
-        self.mox.StubOutWithMock(timeutils, 'now',
-                                 use_mock_anything=True)
-        self.mox.StubOutWithMock(self, 'exception_to_raise')
-
-    def exc_retrier_sequence(self, exc_id=None,
-                             exc_count=None, before_timestamp_calls=(),
-                             after_timestamp_calls=()):
-        self.exception_to_raise().AndReturn(
-            Exception('unexpected %d' % exc_id))
-        # Timestamp calls that happen before the logging is possibly triggered.
-        for timestamp in before_timestamp_calls:
-            timeutils.now().AndReturn(timestamp)
-        if exc_count != 0:
-            logging.exception(mox.In(
-                'Unexpected exception occurred %d time(s)' % exc_count))
-        # Timestamp calls that happen after the logging is possibly triggered.
-        for timestamp in after_timestamp_calls:
-            timeutils.now().AndReturn(timestamp)
+        while self._exceptions:
+            raise self._exceptions.pop(0)
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_1exc_gives_1log(self, mock_now, mock_log):
+
+        self._exceptions = [
+            Exception('unexpected %d' % 1),
+        ]
+        mock_now.side_effect = [0]
 
-    def exc_retrier_common_end(self):
-        self.exception_to_raise().AndReturn(None)
-        self.mox.ReplayAll()
         self.exception_generator()
 
-    def test_exc_retrier_1exc_gives_1log(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1, exc_count=1,
-                                  after_timestamp_calls=[0])
-        self.exc_retrier_common_end()
-
-    def test_exc_retrier_same_10exc_1min_gives_1log(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1,
-                                  after_timestamp_calls=[0], exc_count=1)
-        # By design, the following exception don't get logged because they
+        self.assertEqual([], self._exceptions)
+        # log should only be called once
+        mock_log.assert_called_once_with(
+            'Unexpected exception occurred %d time(s)... retrying.' % 1
+        )
+        mock_now.assert_has_calls([
+            mock.call(),
+        ])
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_same_10exc_1min_gives_1log(self, mock_now, mock_log):
+        self._exceptions = [
+            Exception('unexpected 1'),
+        ]
+        # Timestamp calls that happen after the logging is possibly triggered.
+        mock_now_side_effect = [0]
+
+        # By design, the following exceptions won't get logged because they
         # are within the same minute.
         for i in range(2, 11):
-            self.exc_retrier_sequence(exc_id=1,
-                                      before_timestamp_calls=[i],
-                                      exc_count=0)
-        self.exc_retrier_common_end()
-
-    def test_exc_retrier_same_2exc_2min_gives_2logs(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1,
-                                  after_timestamp_calls=[0], exc_count=1)
-        self.exc_retrier_sequence(exc_id=1,
-                                  before_timestamp_calls=[65], exc_count=1,
-                                  after_timestamp_calls=[65, 66])
-        self.exc_retrier_common_end()
-
-    def test_exc_retrier_same_10exc_2min_gives_2logs(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1,
-                                  after_timestamp_calls=[0], exc_count=1)
+            self._exceptions.append(Exception('unexpected 1'))
+            # Timestamp calls that happen before the logging is possibly
+            # triggered.
+            mock_now_side_effect.append(i)
+
+        mock_now.side_effect = mock_now_side_effect
+
+        self.exception_generator()
+
+        self.assertEqual([], self._exceptions)
+        self.assertEqual(10, len(mock_now.mock_calls))
+        self.assertEqual(1, len(mock_log.mock_calls))
+        mock_log.assert_has_calls([
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+        ])
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_same_2exc_2min_gives_2logs(self, mock_now, mock_log):
+        self._exceptions = [
+            Exception('unexpected 1'),
+            Exception('unexpected 1'),
+        ]
+
+        mock_now.side_effect = [
+            # Timestamp calls that happen after the logging is possibly
+            # triggered
+            0,
+            # Timestamp calls that happen before the logging is possibly
+            # triggered
+            65,
+            # Timestamp calls that happen after the logging is possibly
+            # triggered.
+            65,
+            66,
+        ]
+
+        self.exception_generator()
+
+        self.assertEqual([], self._exceptions)
+        self.assertEqual(4, len(mock_now.mock_calls))
+        self.assertEqual(2, len(mock_log.mock_calls))
+        mock_log.assert_has_calls([
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+        ])
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_same_10exc_2min_gives_2logs(self, mock_now, mock_log):
+        self._exceptions = [
+            Exception('unexpected 1'),
+        ]
+
+        # Timestamp calls that happen after the logging is possibly triggered.
+        mock_now_side_effect = [
+            0,
+        ]
+
         for ts in [12, 23, 34, 45]:
-            self.exc_retrier_sequence(exc_id=1,
-                                      before_timestamp_calls=[ts],
-                                      exc_count=0)
+            self._exceptions.append(Exception('unexpected 1'))
+            # Timestamp calls that happen before the logging is possibly
+            # triggered.
+            mock_now_side_effect.append(ts)
+
         # The previous 4 exceptions are counted here
-        self.exc_retrier_sequence(exc_id=1,
-                                  before_timestamp_calls=[106],
-                                  exc_count=5,
-                                  after_timestamp_calls=[106, 107])
+
+        self._exceptions.append(Exception('unexpected 1'))
+        # Timestamp calls that happen before the logging is possibly triggered.
+        mock_now_side_effect.append(106)
+
+        for ts in [106, 107]:
+            # Timestamp calls that happen after the logging is possibly
+            # triggered.
+            mock_now_side_effect.append(ts)
+
         # Again, the following are not logged due to being within
         # the same minute
+
         for ts in [117, 128, 139, 150]:
-            self.exc_retrier_sequence(exc_id=1,
-                                      before_timestamp_calls=[ts],
-                                      exc_count=0)
-        self.exc_retrier_common_end()
-
-    def test_exc_retrier_mixed_4exc_1min_gives_2logs(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1,
-                                  # The stop watch will be started,
-                                  # which will consume one timestamp call.
-                                  after_timestamp_calls=[0], exc_count=1)
+            self._exceptions.append(Exception('unexpected 1'))
+            # Timestamp calls that happen before the logging is possibly
+            # triggered.
+            mock_now_side_effect.append(ts)
+
+        mock_now.side_effect = mock_now_side_effect
+
+        self.exception_generator()
+
+        self.assertEqual([], self._exceptions)
+        self.assertEqual(12, len(mock_now.mock_calls))
+        self.assertEqual(2, len(mock_log.mock_calls))
+        mock_log.assert_has_calls([
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+            mock.call('Unexpected exception occurred 5 time(s)... retrying.'),
+        ])
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_mixed_4exc_1min_gives_2logs(self, mock_now, mock_log):
+        # The stop watch will be started, which will consume one timestamp
+        # call.
+
+        self._exceptions = [
+            Exception('unexpected 1'),
+        ]
+        # Timestamp calls that happen after the logging is possibly
+        # triggered.
+        mock_now_side_effect = [0]
+
         # By design, this second 'unexpected 1' exception is not counted.  This
         # is likely a rare thing and is a sacrifice for code simplicity.
-        self.exc_retrier_sequence(exc_id=1, exc_count=0,
-                                  # Since the exception will be the same
-                                  # the expiry method will be called, which
-                                  # uses up a timestamp call.
-                                  before_timestamp_calls=[5])
-        self.exc_retrier_sequence(exc_id=2, exc_count=1,
-                                  # The watch should get reset, which uses
-                                  # up two timestamp calls.
-                                  after_timestamp_calls=[10, 20])
-        # Again, trailing exceptions within a minute are not counted.
-        self.exc_retrier_sequence(exc_id=2, exc_count=0,
-                                  # Since the exception will be the same
-                                  # the expiry method will be called, which
-                                  # uses up a timestamp call.
-                                  before_timestamp_calls=[25])
-        self.exc_retrier_common_end()
-
-    def test_exc_retrier_mixed_4exc_2min_gives_2logs(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1,
-                                  # The stop watch will now be started.
-                                  after_timestamp_calls=[0], exc_count=1)
+        self._exceptions.append(Exception('unexpected 1'))
+
+        # Timestamp calls that happen before the logging is possibly triggered.
+        # Since the exception will be the same the expiry method will be
+        # called, which uses up a timestamp call.
+        mock_now_side_effect.append(5)
+
+        self._exceptions.append(Exception('unexpected 2'))
+        # Timestamp calls that happen after the logging is possibly triggered.
+        # The watch should get reset, which uses up two timestamp calls.
+        mock_now_side_effect.extend([10, 20])
+
+        self._exceptions.append(Exception('unexpected 2'))
+        # Timestamp calls that happen before the logging is possibly triggered.
+        # Since the exception will be the same the expiry method will be
+        # called, which uses up a timestamp call.
+        mock_now_side_effect.append(25)
+
+        mock_now.side_effect = mock_now_side_effect
+
+        self.exception_generator()
+
+        self.assertEqual([], self._exceptions)
+        self.assertEqual(5, len(mock_now.mock_calls))
+        self.assertEqual(2, len(mock_log.mock_calls))
+        mock_log.assert_has_calls([
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+        ])
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_mixed_4exc_2min_gives_2logs(self, mock_now, mock_log):
+
+        self._exceptions = [
+            Exception('unexpected 1'),
+        ]
+        # Timestamp calls that happen after the logging is possibly triggered.
+        mock_now_side_effect = [0]
+
         # Again, this second exception of the same type is not counted
         # for the sake of code simplicity.
-        self.exc_retrier_sequence(exc_id=1,
-                                  before_timestamp_calls=[10], exc_count=0)
+
+        self._exceptions.append(Exception('unexpected 1'))
+        # Timestamp calls that happen before the logging is possibly triggered.
+        mock_now_side_effect.append(10)
+
         # The difference between this and the previous case is the log
         # is also triggered by more than a minute expiring.
-        self.exc_retrier_sequence(exc_id=2, exc_count=1,
-                                  # The stop watch will now be restarted.
-                                  after_timestamp_calls=[100, 105])
-        self.exc_retrier_sequence(exc_id=2,
-                                  before_timestamp_calls=[110], exc_count=0)
-        self.exc_retrier_common_end()
-
-    def test_exc_retrier_mixed_4exc_2min_gives_3logs(self):
-        self.exc_retrier_common_start()
-        self.exc_retrier_sequence(exc_id=1,
-                                  # The stop watch will now be started.
-                                  after_timestamp_calls=[0], exc_count=1)
+
+        self._exceptions.append(Exception('unexpected 2'))
+        # Timestamp calls that happen after the logging is possibly triggered.
+        mock_now_side_effect.extend([100, 105])
+
+        self._exceptions.append(Exception('unexpected 2'))
+        # Timestamp calls that happen before the logging is possibly triggered.
+        mock_now_side_effect.append(110)
+
+        mock_now.side_effect = mock_now_side_effect
+
+        self.exception_generator()
+
+        self.assertEqual([], self._exceptions)
+        self.assertEqual(5, len(mock_now.mock_calls))
+        self.assertEqual(2, len(mock_log.mock_calls))
+        mock_log.assert_has_calls([
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+        ])
+
+    @mock.patch.object(logging, 'exception')
+    @mock.patch.object(timeutils, 'now')
+    def test_exc_retrier_mixed_4exc_2min_gives_3logs(self, mock_now, mock_log):
+        self._exceptions = [
+            Exception('unexpected 1'),
+        ]
+        # Timestamp calls that happen after the logging is possibly triggered.
+        mock_now_side_effect = [0]
+
         # This time the second 'unexpected 1' exception is counted due
         # to the same exception occurring same when the minute expires.
-        self.exc_retrier_sequence(exc_id=1,
-                                  before_timestamp_calls=[10], exc_count=0)
-        self.exc_retrier_sequence(exc_id=1,
-                                  before_timestamp_calls=[100],
-                                  after_timestamp_calls=[100, 105],
-                                  exc_count=2)
-        self.exc_retrier_sequence(exc_id=2, exc_count=1,
-                                  after_timestamp_calls=[110, 111])
-        self.exc_retrier_common_end()
+
+        self._exceptions.append(Exception('unexpected 1'))
+        # Timestamp calls that happen before the logging is possibly triggered.
+        mock_now_side_effect.append(10)
+
+        self._exceptions.append(Exception('unexpected 1'))
+        # Timestamp calls that happen before the logging is possibly triggered.
+        mock_now_side_effect.extend([100, 100, 105])
+
+        self._exceptions.append(Exception('unexpected 2'))
+        # Timestamp calls that happen after the logging is possibly triggered.
+        mock_now_side_effect.extend([110, 111])
+
+        mock_now.side_effect = mock_now_side_effect
+
+        self.exception_generator()
+
+        self.assertEqual([], self._exceptions)
+        self.assertEqual(7, len(mock_now.mock_calls))
+        self.assertEqual(3, len(mock_log.mock_calls))
+        mock_log.assert_has_calls([
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+            mock.call('Unexpected exception occurred 2 time(s)... retrying.'),
+            mock.call('Unexpected exception occurred 1 time(s)... retrying.'),
+        ])
 
 
 class ExceptionFilterTest(test_base.BaseTestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/tests/test_fnmatch.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_fnmatch.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_fnmatch.py      2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_fnmatch.py       2020-04-07 
12:08:13.000000000 +0200
@@ -16,8 +16,8 @@
 import ntpath
 import posixpath
 import sys
+from unittest import mock
 
-import mock
 from oslotest import base
 import six
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.utils-3.41.5/oslo_utils/tests/test_imageutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_imageutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_imageutils.py   2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_imageutils.py    2020-04-07 
12:08:13.000000000 +0200
@@ -52,6 +52,8 @@
                                    exp_virtual_size=2048)),
         ('2_KiB_with_byte_hint', dict(virtual_size='2 KiB (2048 bytes)',
                                       exp_virtual_size=2048)),
+        ('1e+03_MiB', dict(virtual_size='1e+03 MiB',
+                           exp_virtual_size=1048576000)),
     ]
 
     _disk_size = [
@@ -69,7 +71,7 @@
                          exp_disk_size=3328599655)),
         ('unavailable', dict(disk_size='unavailable',
                              exp_disk_size=0)),
-        ('1e+03 MiB', dict(disk_size='1e+03 MiB',
+        ('1e+03_MiB', dict(disk_size='1e+03 MiB',
                            exp_disk_size=1048576000)),
     ]
 
@@ -135,6 +137,7 @@
         image_info = imageutils.QemuImgInfo(example_output)
         self._base_validation(image_info)
 
+
 ImageUtilsRawTestCase.generate_scenarios()
 
 
@@ -201,6 +204,7 @@
         if self.encrypted is not None:
             self.assertEqual(image_info.encrypted, self.encrypted)
 
+
 ImageUtilsQemuTestCase.generate_scenarios()
 
 
@@ -222,7 +226,8 @@
                        "filename": "fake_img",
                        "cluster-size": 65536,
                        "format": "qcow2",
-                       "actual-size": 13168640
+                       "actual-size": 13168640,
+                       "format-specific": {"data": {"foo": "bar"}}
                       }'''
         image_info = imageutils.QemuImgInfo(img_output, format='json')
         self.assertEqual(41126400, image_info.virtual_size)
@@ -230,6 +235,7 @@
         self.assertEqual(65536, image_info.cluster_size)
         self.assertEqual('qcow2', image_info.file_format)
         self.assertEqual(13168640, image_info.disk_size)
+        self.assertEqual("bar", image_info.format_specific["data"]["foo"])
 
     def test_qemu_img_info_json_format_blank(self):
         img_output = '{}'
@@ -239,3 +245,4 @@
         self.assertIsNone(image_info.cluster_size)
         self.assertIsNone(image_info.file_format)
         self.assertIsNone(image_info.disk_size)
+        self.assertIsNone(image_info.format_specific)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/tests/test_netutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_netutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_netutils.py     2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_netutils.py      2020-04-07 
12:08:13.000000000 +0200
@@ -15,8 +15,8 @@
 
 import contextlib
 import socket
+from unittest import mock
 
-import mock
 import netifaces
 from oslotest import base as test_base
 import six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/tests/test_strutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_strutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_strutils.py     2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_strutils.py      2020-04-07 
12:08:13.000000000 +0200
@@ -18,9 +18,9 @@
 import collections
 import copy
 import math
+from unittest import mock
 
 import ddt
-import mock
 from oslotest import base as test_base
 import six
 import testscenarios
@@ -291,6 +291,7 @@
         else:
             self.assertAlmostEqual(actual, expected)
 
+
 StringToBytesTest.generate_scenarios()
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/oslo_utils/tests/test_timeutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/test_timeutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/test_timeutils.py    2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/test_timeutils.py     2020-04-07 
12:08:13.000000000 +0200
@@ -17,9 +17,9 @@
 import datetime
 import logging
 import time
+from unittest import mock
 
 import iso8601
-import mock
 from oslotest import base as test_base
 from testtools import matchers
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.utils-3.41.5/oslo_utils/tests/tests_encodeutils.py 
new/oslo.utils-4.1.1/oslo_utils/tests/tests_encodeutils.py
--- old/oslo.utils-3.41.5/oslo_utils/tests/tests_encodeutils.py 2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/oslo_utils/tests/tests_encodeutils.py  2020-04-07 
12:08:13.000000000 +0200
@@ -15,7 +15,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
+from unittest import mock
+
 from oslo_i18n import fixture as oslo_i18n_fixture
 from oslotest import base as test_base
 import six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.utils-3.41.5/releasenotes/notes/drop-python27-support-f97f680651693b47.yaml
 
new/oslo.utils-4.1.1/releasenotes/notes/drop-python27-support-f97f680651693b47.yaml
--- 
old/oslo.utils-3.41.5/releasenotes/notes/drop-python27-support-f97f680651693b47.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.utils-4.1.1/releasenotes/notes/drop-python27-support-f97f680651693b47.yaml
 2020-04-07 12:08:13.000000000 +0200
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Support for Python 2.7 has been dropped. The minimum version of Python now
+    supported is Python 3.6.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/releasenotes/source/conf.py 
new/oslo.utils-4.1.1/releasenotes/source/conf.py
--- old/oslo.utils-3.41.5/releasenotes/source/conf.py   2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/releasenotes/source/conf.py    2020-04-07 
12:08:13.000000000 +0200
@@ -57,7 +57,6 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'oslo.utils Release Notes'
 copyright = u'2016, oslo.utils Developers'
 
 # Release notes do not need a version in the title, they span
@@ -146,10 +145,6 @@
 # directly to the root of the documentation.
 # html_extra_path = []
 
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
-
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
 # html_use_smartypants = True
@@ -193,17 +188,6 @@
 
 # -- Options for LaTeX output ---------------------------------------------
 
-latex_elements = {
-    # The paper size ('letterpaper' or 'a4paper').
-    # 'papersize': 'letterpaper',
-
-    # The font size ('10pt', '11pt' or '12pt').
-    # 'pointsize': '10pt',
-
-    # Additional stuff for the LaTeX preamble.
-    # 'preamble': '',
-}
-
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/releasenotes/source/index.rst 
new/oslo.utils-4.1.1/releasenotes/source/index.rst
--- old/oslo.utils-3.41.5/releasenotes/source/index.rst 2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/releasenotes/source/index.rst  2020-04-07 
12:08:13.000000000 +0200
@@ -6,6 +6,7 @@
     :maxdepth: 1
 
     unreleased
+    train
     stein
     rocky
     queens
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/releasenotes/source/train.rst 
new/oslo.utils-4.1.1/releasenotes/source/train.rst
--- old/oslo.utils-3.41.5/releasenotes/source/train.rst 1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.utils-4.1.1/releasenotes/source/train.rst  2020-04-07 
12:08:13.000000000 +0200
@@ -0,0 +1,6 @@
+==========================
+Train Series Release Notes
+==========================
+
+.. release-notes::
+   :branch: stable/train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/requirements.txt 
new/oslo.utils-4.1.1/requirements.txt
--- old/oslo.utils-3.41.5/requirements.txt      2020-03-04 02:01:40.000000000 
+0100
+++ new/oslo.utils-4.1.1/requirements.txt       2020-04-07 12:08:13.000000000 
+0200
@@ -9,10 +9,8 @@
 
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
 six>=1.10.0 # MIT
-funcsigs>=1.0.0;python_version=='2.7' or python_version=='2.6' # Apache-2.0
 iso8601>=0.1.11 # MIT
 oslo.i18n>=3.15.3 # Apache-2.0
-monotonic>=0.6;python_version<'3.3' # Apache-2.0
 pytz>=2013.6 # MIT
 netaddr>=0.7.18 # BSD
 netifaces>=0.10.4 # MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/setup.cfg 
new/oslo.utils-4.1.1/setup.cfg
--- old/oslo.utils-3.41.5/setup.cfg     2020-03-04 02:02:35.000000000 +0100
+++ new/oslo.utils-4.1.1/setup.cfg      2020-04-07 12:09:28.000000000 +0200
@@ -6,6 +6,7 @@
 author = OpenStack
 author-email = [email protected]
 home-page = https://docs.openstack.org/oslo.utils/latest/
+python-requires = >=3.6
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
@@ -13,11 +14,11 @@
        License :: OSI Approved :: Apache Software License
        Operating System :: POSIX :: Linux
        Programming Language :: Python
-       Programming Language :: Python :: 2
-       Programming Language :: Python :: 2.7
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
+       Programming Language :: Python :: 3 :: Only
+       Programming Language :: Python :: Implementation :: CPython
 
 [files]
 packages = 
@@ -37,9 +38,6 @@
 mapping_file = babel.cfg
 output_file = oslo_utils/locale/oslo_utils.pot
 
-[wheel]
-universal = 1
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/setup.py 
new/oslo.utils-4.1.1/setup.py
--- old/oslo.utils-3.41.5/setup.py      2020-03-04 02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/setup.py       2020-04-07 12:08:13.000000000 +0200
@@ -13,17 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
 import setuptools
 
-# In python < 2.7.4, a lazy loading of package `pbr` will break
-# setuptools if some other modules registered functions in `atexit`.
-# solution from: http://bugs.python.org/issue15881#msg170215
-try:
-    import multiprocessing  # noqa
-except ImportError:
-    pass
-
 setuptools.setup(
     setup_requires=['pbr>=2.0.0'],
     pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/test-requirements.txt 
new/oslo.utils-4.1.1/test-requirements.txt
--- old/oslo.utils-3.41.5/test-requirements.txt 2020-03-04 02:01:40.000000000 
+0100
+++ new/oslo.utils-4.1.1/test-requirements.txt  2020-04-07 12:08:13.000000000 
+0200
@@ -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,<3.1.0 # Apache-2.0
 
 eventlet>=0.18.2,!=0.18.3,!=0.20.1,!=0.21.0,!=0.23.0 # MIT
 fixtures>=3.0.0 # Apache-2.0/BSD
@@ -17,9 +17,6 @@
 #  deps = {[testenv]deps} coverage
 coverage!=4.4,>=4.0 # Apache-2.0
 
-# mocking framework
-mock>=2.0.0 # BSD
-
 # used for oslotest cross-testing scripts
 oslo.config>=5.2.0 # Apache-2.0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/tools/perf_test_mask_password.py 
new/oslo.utils-4.1.1/tools/perf_test_mask_password.py
--- old/oslo.utils-3.41.5/tools/perf_test_mask_password.py      2020-03-04 
02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/tools/perf_test_mask_password.py       2020-04-07 
12:08:13.000000000 +0200
@@ -37,7 +37,7 @@
 for pattern in strutils._SANITIZE_PATTERNS_2['admin_pass']:
     print('\ntesting %s' % pattern.pattern)
     t = timeit.Timer(
-        "re.sub(pattern, r'\g<1>***\g<2>', payload)",
+        r"re.sub(pattern, r'\g<1>***\g<2>', payload)",
         """
 import re
 payload = '''%s'''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.utils-3.41.5/tox.ini 
new/oslo.utils-4.1.1/tox.ini
--- old/oslo.utils-3.41.5/tox.ini       2020-03-04 02:01:40.000000000 +0100
+++ new/oslo.utils-4.1.1/tox.ini        2020-04-07 12:08:13.000000000 +0200
@@ -1,58 +1,56 @@
 [tox]
-minversion = 2.0
-envlist = py27,py37,pep8
+minversion = 3.1
+envlist = py37,pep8
+ignore_basepython_conflict = true
 
 [testenv]
-install_command = pip install {opts} {packages}
+basepython = python3
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/train}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/test-requirements.txt
   -r{toxinidir}/requirements.txt
 commands = stestr run --slowest {posargs}
 
-[testenv:py27]
-basepython = python2.7
-
 [testenv:pep8]
-basepython = python3
 commands =
   flake8
   # Run security linter
   bandit -r oslo_utils -x tests -n5
 
 [testenv:venv]
-basepython = python3
 commands = {posargs}
 
 [testenv:docs]
-basepython = python3
 whitelist_externals = rm
-deps = -r{toxinidir}/doc/requirements.txt
+deps =
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+  -r{toxinidir}/doc/requirements.txt
 commands =
-    rm -fr doc/build
-    sphinx-build -W -b html doc/source doc/build/html
+  rm -fr doc/build
+  sphinx-build -W --keep-going -b html doc/source doc/build/html
 
 [testenv:cover]
-basepython = python3
 commands = python setup.py test --coverage --coverage-package-name=oslo_utils 
--testr-args='{posargs}'
 
 [testenv:bandit]
-basepython = python3
 commands = bandit -r oslo_utils -x tests -n5
 
 [flake8]
 # E731 skipped as assign a lambda expression
-ignore = E123,E731,H405
+# W504 line break after binary operator
+ignore = E123,E731,H405,W504
 show-source = True
 exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,__init__.py
 
 [testenv:releasenotes]
-basepython = python3
-deps = -r{toxinidir}/doc/requirements.txt
-commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
+whitelist_externals = rm
+deps =
+  {[testenv:docs]deps}
+commands =
+  rm -rf releasenotes/build
+  sphinx-build -a -E -W -d releasenotes/build/doctrees --keep-going -b html 
releasenotes/source releasenotes/build/html
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt


Reply via email to