Hello community,

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

Package is "python-oslo.log"

Fri Jun  5 20:14:30 2020 rev:18 rq:803592 version:4.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-oslo.log/python-oslo.log.changes  
2020-03-24 22:33:24.845120661 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-oslo.log.new.3606/python-oslo.log.changes    
    2020-06-05 20:16:26.279029819 +0200
@@ -1,0 +2,22 @@
+Tue May 12 09:44:47 UTC 2020 - [email protected]
+
+- update to version 4.1.1
+  - Serialize complex objects in FluentFormatter
+  - Use unittest.mock instead of third party mock
+  - Migrate grenade jobs to py3
+  - Add Ussuri release to versionutils
+  - Stop to build universal wheel
+  - remove outdated header
+  - Switch to hacking 2.x
+  - tox: Trivial cleanup
+  - Always use jsonutils.to_primitive 'fallback' parameter
+  - Ignore releasenote artifacts files.
+  - drop use of six
+  - Drop python 2.7 support and testing
+  - Add Victoria and Wallaby releases to versionutils
+  - tox: Keeping going with docs
+  - Switch to official Ussuri jobs
+  - Drop use of unittest2
+  - Update master for stable/train
+
+-------------------------------------------------------------------

Old:
----
  oslo.log-3.44.1.tar.gz

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

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

Other differences:
------------------
++++++ python-oslo.log.spec ++++++
--- /var/tmp/diff_new_pack.nf7BGZ/_old  2020-06-05 20:16:28.007036177 +0200
+++ /var/tmp/diff_new_pack.nf7BGZ/_new  2020-06-05 20:16:28.011036192 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-oslo.log
-Version:        3.44.1
+Version:        4.1.1
 Release:        0
 Summary:        OpenStack log library
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/oslo.log
-Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.log/oslo.log-3.44.1.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.log/oslo.log-4.1.1.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-mock
 BuildRequires:  python3-monotonic >= 1.4
@@ -36,7 +36,7 @@
 BuildRequires:  python3-pbr >= 3.1.1
 BuildRequires:  python3-pyinotify >= 0.9.6
 BuildRequires:  python3-python-dateutil >= 2.7.0
-BuildRequires:  python3-six >= 1.11.0
+BuildRequires:  python3-six
 BuildRequires:  python3-stestr
 BuildRequires:  python3-testtools
 BuildArch:      noarch
@@ -58,7 +58,7 @@
 Requires:       python3-oslo.utils >= 3.36.0
 Requires:       python3-pyinotify >= 0.9.6
 Requires:       python3-python-dateutil >= 2.7.0
-Requires:       python3-six >= 1.11.0
+Requires:       python3-six
 Requires:       python3-systemd
 %if 0%{?suse_version}
 Obsoletes:      python2-oslo.log < 4.0.0
@@ -81,14 +81,14 @@
 Documentation for the oslo.log library.
 
 %prep
-%autosetup -p1 -n oslo.log-3.44.1
+%autosetup -p1 -n oslo.log-4.1.1
 %py_req_cleanup
 
 %build
 %{py3_build}
 
 # generate html docs
-PYTHONPATH=. PBR_VERSION=3.44.1 %sphinx_build -b html doc/source doc/build/html
+PYTHONPATH=. PBR_VERSION=4.1.1 %sphinx_build -b html doc/source doc/build/html
 rm -rf doc/build/html/.{doctrees,buildinfo}
 
 %install

++++++ _service ++++++
--- /var/tmp/diff_new_pack.nf7BGZ/_old  2020-06-05 20:16:28.051036339 +0200
+++ /var/tmp/diff_new_pack.nf7BGZ/_new  2020-06-05 20:16:28.051036339 +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.log/oslo.log.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/ussuri/openstack/oslo.log/oslo.log.spec.j2</param>
     <param name="output-name">python-oslo.log.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/oslo.log/stable/train/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/oslo.log/raw/branch/stable/ussuri/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,oslo.log</param>
   </service>

++++++ oslo.log-3.44.1.tar.gz -> oslo.log-4.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/.zuul.yaml 
new/oslo.log-4.1.1/.zuul.yaml
--- old/oslo.log-3.44.1/.zuul.yaml      2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/.zuul.yaml       2020-04-07 12:06:45.000000000 +0200
@@ -41,7 +41,6 @@
       - ^doc/.*$
       - ^releasenotes/.*$
 
-
 - project:
     check:
       jobs:
@@ -52,11 +51,9 @@
         - oslo.log-jsonformatter
     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.log-3.44.1/AUTHORS new/oslo.log-4.1.1/AUTHORS
--- old/oslo.log-3.44.1/AUTHORS 2019-08-29 11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/AUTHORS  2020-04-07 12:07:58.000000000 +0200
@@ -146,6 +146,7 @@
 Victor Stinner <[email protected]>
 Vishakha Agarwal <[email protected]>
 Vishvananda Ishaya <[email protected]>
+Vladyslav Drok <[email protected]>
 Yaguang Tang <[email protected]>
 YangLei <[email protected]>
 Zane Bitter <[email protected]>
@@ -155,10 +156,12 @@
 Zhongyue Luo <[email protected]>
 abhishekkekane <[email protected]>
 avnish <[email protected]>
+caoyuan <[email protected]>
 eeldill <[email protected]>
 gecong1973 <[email protected]>
 gengchc2 <[email protected]>
 gtt116 <[email protected]>
+gujin <[email protected]>
 jacky06 <[email protected]>
 liangjingtao <[email protected]>
 lingyongxu <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/ChangeLog 
new/oslo.log-4.1.1/ChangeLog
--- old/oslo.log-3.44.1/ChangeLog       2019-08-29 11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/ChangeLog        2020-04-07 12:07:58.000000000 +0200
@@ -1,6 +1,51 @@
 CHANGES
 =======
 
+4.1.1
+-----
+
+* Use unittest.mock instead of third party mock
+* drop use of six
+
+4.1.0
+-----
+
+* Add Victoria and Wallaby releases to versionutils
+
+4.0.1
+-----
+
+* remove outdated header
+* Switch to hacking 2.x
+* Stop to build universal wheel
+* Ignore releasenote artifacts files
+
+4.0.0
+-----
+
+* Drop python 2.7 support and testing
+* Drop use of unittest2
+* tox: Trivial cleanup
+
+3.45.2
+------
+
+* Always use jsonutils.to\_primitive 'fallback' parameter
+
+3.45.1
+------
+
+* Serialize complex objects in FluentFormatter
+* Migrate grenade jobs to py3
+
+3.45.0
+------
+
+* tox: Keeping going with docs
+* Switch to official Ussuri jobs
+* Update master for stable/train
+* Add Ussuri release to versionutils
+
 3.44.1
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/PKG-INFO new/oslo.log-4.1.1/PKG-INFO
--- old/oslo.log-3.44.1/PKG-INFO        2019-08-29 11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/PKG-INFO 2020-04-07 12:07:58.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: oslo.log
-Version: 3.44.1
+Version: 4.1.1
 Summary: oslo.log library
 Home-page: https://docs.openstack.org/oslo.log/latest
 Author: OpenStack
@@ -46,11 +46,12 @@
 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
 Provides-Extra: fixtures
-Provides-Extra: test
 Provides-Extra: systemd
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/doc/requirements.txt 
new/oslo.log-4.1.1/doc/requirements.txt
--- old/oslo.log-3.44.1/doc/requirements.txt    2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/doc/requirements.txt     2020-04-07 12:06:45.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.
 
-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,!=2.1.0,>=1.6.2;python_version>='3.4' # BSD
+sphinx>=1.8.0,!=2.1.0 # BSD
 openstackdocstheme>=1.20.0 # Apache-2.0
 reno>=2.5.0 # Apache-2.0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/lower-constraints.txt 
new/oslo.log-4.1.1/lower-constraints.txt
--- old/oslo.log-3.44.1/lower-constraints.txt   2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/lower-constraints.txt    2020-04-07 12:06:45.000000000 
+0200
@@ -13,7 +13,7 @@
 flake8==2.5.5
 gitdb2==2.0.3
 GitPython==2.1.8
-hacking==0.12.0
+hacking==2.0.0
 idna==2.6
 imagesize==1.0.0
 iso8601==0.1.12
@@ -22,7 +22,6 @@
 linecache2==1.0.0
 MarkupSafe==1.0
 mccabe==0.2.1
-mock==2.0.0
 monotonic==1.4;python_version<'3.3'
 mox3==0.25.0
 msgpack==0.5.6
@@ -54,10 +53,9 @@
 requests==2.18.4
 requestsexceptions==1.4.0
 rfc3986==1.1.0
-six==1.11.0
 smmap2==2.0.3
 snowballstemmer==1.2.1
-Sphinx==1.6.5
+Sphinx==1.8.0
 sphinxcontrib-websupport==1.0.1
 stestr==2.0.0
 stevedore==1.28.0
@@ -65,6 +63,5 @@
 testrepository==0.0.20
 testtools==2.3.0
 traceback2==1.4.0
-unittest2==1.1.0
 urllib3==1.22
 wrapt==1.10.11
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo.log.egg-info/PKG-INFO 
new/oslo.log-4.1.1/oslo.log.egg-info/PKG-INFO
--- old/oslo.log-3.44.1/oslo.log.egg-info/PKG-INFO      2019-08-29 
11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/oslo.log.egg-info/PKG-INFO       2020-04-07 
12:07:58.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: oslo.log
-Version: 3.44.1
+Version: 4.1.1
 Summary: oslo.log library
 Home-page: https://docs.openstack.org/oslo.log/latest
 Author: OpenStack
@@ -46,11 +46,12 @@
 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
 Provides-Extra: fixtures
-Provides-Extra: test
 Provides-Extra: systemd
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo.log.egg-info/SOURCES.txt 
new/oslo.log-4.1.1/oslo.log.egg-info/SOURCES.txt
--- old/oslo.log-3.44.1/oslo.log.egg-info/SOURCES.txt   2019-08-29 
11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/oslo.log.egg-info/SOURCES.txt    2020-04-07 
12:07:58.000000000 +0200
@@ -92,6 +92,7 @@
 releasenotes/notes/add-context-section-0b2f411ec64f42f6.yaml
 releasenotes/notes/add-reno-e4fedb11ece56f1e.yaml
 releasenotes/notes/always-add-error-text-715022964364ffa0.yaml
+releasenotes/notes/drop-python27-support-0fe4909a5468feb3.yaml
 releasenotes/notes/info-logging-7b7be9fc7a95aebc.yaml
 releasenotes/notes/is_debug_enabled-d7afee4c811a46df.yaml
 releasenotes/notes/jsonformatter-repr-fd616eb6fa6caeb3.yaml
@@ -114,6 +115,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.log-3.44.1/oslo.log.egg-info/pbr.json 
new/oslo.log-4.1.1/oslo.log.egg-info/pbr.json
--- old/oslo.log-3.44.1/oslo.log.egg-info/pbr.json      2019-08-29 
11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/oslo.log.egg-info/pbr.json       2020-04-07 
12:07:58.000000000 +0200
@@ -1 +1 @@
-{"git_version": "3ff497d", "is_release": true}
\ No newline at end of file
+{"git_version": "2aaf7b0", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo.log.egg-info/requires.txt 
new/oslo.log-4.1.1/oslo.log.egg-info/requires.txt
--- old/oslo.log-3.44.1/oslo.log.egg-info/requires.txt  2019-08-29 
11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/oslo.log.egg-info/requires.txt   2020-04-07 
12:07:58.000000000 +0200
@@ -1,5 +1,4 @@
 pbr>=3.1.1
-six>=1.11.0
 oslo.config>=5.2.0
 oslo.context>=2.20.0
 oslo.i18n>=3.20.0
@@ -21,10 +20,9 @@
 systemd-python>=234
 
 [test]
-hacking!=0.13.0,<0.14,>=0.12.0
+hacking<2.1.0,>=2.0.0
 stestr>=2.0.0
 testtools>=2.3.0
-mock>=2.0.0
 oslotest>=3.3.0
 coverage>=4.5.1
 bandit<1.6.0,>=1.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/cmds/convert_json.py 
new/oslo.log-4.1.1/oslo_log/cmds/convert_json.py
--- old/oslo.log-3.44.1/oslo_log/cmds/convert_json.py   2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/cmds/convert_json.py    2020-04-07 
12:06:45.000000000 +0200
@@ -21,7 +21,6 @@
 
 from oslo_serialization import jsonutils
 from oslo_utils import importutils
-import six
 
 from oslo_log import log
 
@@ -180,8 +179,8 @@
         # Thrown when a non-string format-specifier can't be filled in.
         # Dict comprehension cleans up the output
         yield warn('Missing non-string placeholder in record',
-                   {str(k): str(v) if isinstance(v, six.string_types) else v
-                    for k, v in six.iteritems(record)})
+                   {str(k): str(v) if isinstance(v, str) else v
+                    for k, v in record.items()})
         return
 
     locator = ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/formatters.py 
new/oslo.log-4.1.1/oslo_log/formatters.py
--- old/oslo.log-3.44.1/oslo_log/formatters.py  2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/oslo_log/formatters.py   2020-04-07 12:06:45.000000000 
+0200
@@ -13,6 +13,7 @@
 import datetime
 import debtcollector
 import functools
+import io
 import itertools
 import logging
 import logging.config
@@ -23,25 +24,11 @@
 import traceback
 
 from dateutil import tz
-import six
-from six import moves
 
 from oslo_context import context as context_utils
 from oslo_serialization import jsonutils
 from oslo_utils import encodeutils
 
-if six.PY3:
-    from functools import reduce
-
-
-try:
-    # Test if to_primitive() has the fallback parameter added
-    # in oslo.serialization 2.21.1
-    jsonutils.to_primitive(1, fallback=repr)
-    _HAVE_JSONUTILS_FALLBACK = True
-except TypeError:
-    _HAVE_JSONUTILS_FALLBACK = False
-
 
 def _dictify_context(context):
     if getattr(context, 'get_logging_values', None):
@@ -94,10 +81,10 @@
 def _ensure_unicode(msg):
     """Do our best to turn the input argument into a unicode object.
     """
-    if isinstance(msg, six.text_type):
+    if isinstance(msg, str):
         return msg
-    if not isinstance(msg, six.binary_type):
-        return six.text_type(msg)
+    if not isinstance(msg, bytes):
+        return str(msg)
     return encodeutils.safe_decode(
         msg,
         incoming='utf-8',
@@ -166,7 +153,7 @@
                 error_summary = error_summary.split('\n', 1)[0]
         except TypeError as type_err:
             # Work around https://bugs.python.org/issue28603
-            error_summary = "<exception with %s>" % six.text_type(type_err)
+            error_summary = "<exception with %s>" % str(type_err)
         finally:
             # Remove the local reference to the exception and
             # traceback to avoid a memory leak through the frame
@@ -184,6 +171,16 @@
 _MSG_KEY_REGEX = re.compile(r'(%+)\((\w+)\)')
 
 
+def _json_dumps_with_fallback(obj):
+    # Bug #1593641: If an object cannot be serialized to JSON, convert
+    # it using repr() to prevent serialization errors. Using repr() is
+    # not ideal, but serialization errors are unexpected on logs,
+    # especially when the code using logs is not aware that the
+    # JSONFormatter will be used.
+    convert = functools.partial(jsonutils.to_primitive, fallback=repr)
+    return jsonutils.dumps(obj, default=convert)
+
+
 class JSONFormatter(logging.Formatter):
     def __init__(self, fmt=None, datefmt=None, style='%'):
         # NOTE(sfinucan) we ignore the fmt and style arguments, but they're
@@ -200,10 +197,10 @@
             lines = traceback.format_exception(*ei)
         except TypeError as type_error:
             # Work around https://bugs.python.org/issue28603
-            msg = six.text_type(type_error)
+            msg = str(type_error)
             lines = ['<Unprintable exception due to %s>\n' % msg]
         if strip_newlines:
-            lines = [moves.filter(
+            lines = [filter(
                 lambda x: x,
                 line.rstrip().splitlines()) for line in lines]
             lines = list(itertools.chain(*lines))
@@ -271,16 +268,7 @@
         if record.exc_info:
             message['traceback'] = self.formatException(record.exc_info)
 
-        if _HAVE_JSONUTILS_FALLBACK:
-            # Bug #1593641: If an object cannot be serialized to JSON, convert
-            # it using repr() to prevent serialization errors. Using repr() is
-            # not ideal, but serialization errors are unexpected on logs,
-            # especially when the code using logs is not aware that the
-            # JSONFormatter will be used.
-            convert = functools.partial(jsonutils.to_primitive, fallback=repr)
-            return jsonutils.dumps(message, default=convert)
-        else:
-            return jsonutils.dumps(message)
+        return _json_dumps_with_fallback(message)
 
 
 class FluentFormatter(logging.Formatter):
@@ -308,11 +296,12 @@
             lines = traceback.format_exception(*exc_info)
         except TypeError as type_error:
             # Work around https://bugs.python.org/issue28603
-            msg = six.text_type(type_error)
+            msg = str(type_error)
             lines = ['<Unprintable exception due to %s>\n' % msg]
         if strip_newlines:
-            lines = reduce(lambda a, line: a + line.rstrip().splitlines(),
-                           lines, [])
+            lines = functools.reduce(lambda a,
+                                     line: a + line.rstrip().splitlines(),
+                                     lines, [])
         return lines
 
     def format(self, record):
@@ -352,6 +341,11 @@
         else:
             message['context'] = {}
         extra.pop('context', None)
+        # NOTE(vdrok): try to dump complex objects
+        primitive_types = (str, int, bool, type(None), float, list, dict)
+        for key, value in extra.items():
+            if not isinstance(value, primitive_types):
+                extra[key] = _json_dumps_with_fallback(value)
         message['extra'] = extra
 
         if record.exc_info:
@@ -401,20 +395,6 @@
 
     def format(self, record):
         """Uses contextstring if request_id is set, otherwise default."""
-        if six.PY2:
-            should_use_unicode = True
-            args = (record.args.values() if isinstance(record.args, dict)
-                    else record.args)
-            for arg in args or []:
-                try:
-                    six.text_type(arg)
-                except UnicodeDecodeError:
-                    should_use_unicode = False
-                    break
-            if (not isinstance(record.msg, six.text_type)
-                    and should_use_unicode):
-                record.msg = _ensure_unicode(record.msg)
-
         # store project info
         record.project = self.project
         record.version = self.version
@@ -525,16 +505,16 @@
                 return logging.Formatter.formatException(self, exc_info)
             except TypeError as type_error:
                 # Work around https://bugs.python.org/issue28603
-                msg = six.text_type(type_error)
+                msg = str(type_error)
                 return '<Unprintable exception due to %s>\n' % msg
 
-        stringbuffer = moves.StringIO()
+        stringbuffer = io.StringIO()
         try:
             traceback.print_exception(exc_info[0], exc_info[1], exc_info[2],
                                       None, stringbuffer)
         except TypeError as type_error:
             # Work around https://bugs.python.org/issue28603
-            msg = six.text_type(type_error)
+            msg = str(type_error)
             stringbuffer.write('<Unprintable exception due to %s>\n' % msg)
 
         lines = stringbuffer.getvalue().split('\n')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/handlers.py 
new/oslo.log-4.1.1/oslo_log/handlers.py
--- old/oslo.log-3.44.1/oslo_log/handlers.py    2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/oslo_log/handlers.py     2020-04-07 12:06:45.000000000 
+0200
@@ -16,7 +16,6 @@
 import logging.config
 import logging.handlers
 import os
-import six
 
 try:
     from systemd import journal
@@ -26,7 +25,6 @@
     import syslog
 except ImportError:
     syslog = None
-from oslo_utils import encodeutils
 
 
 NullHandler = logging.NullHandler
@@ -71,29 +69,6 @@
     def emit(self, record):
         priority = SYSLOG_MAP.get(record.levelname, 7)
         message = self.format(record)
-
-        # NOTE(gangila): In python2, the syslog function takes in 's' as
-        # the format argument, which means it either accepts python string
-        # (str = 'a') or unicode strings (str = u'a'), the PyArg_ParseTuple
-        # then if needed converts the unicode objects to C strings using
-        # the *default encoding*. This default encoding is 'ascii' in case
-        # of python2 while it has been changed to 'utf-8' in case of
-        # python3. What this leads to is when we supply a syslog message
-        # like:
-        # >>> syslog.syslog(syslog.LOG_DEBUG, u"François Deppierraz")
-        # In case of python2 the above fails with TypeError: [priority,]
-        # message string. Because python2 doesn't explicitly encode as
-        # 'utf-8' and use the system default encoding ascii, which raises
-        # a UnicodeEncodeError (UnicodeEncodeError: 'ascii' codec can't
-        # encode character u'\xe7' in position 4: ordinal not in
-        # range(128)), and hence the error message that's set in the code
-        # (TypeError: [priority,] message string) gets shown to the user.
-        # However, this in the case of Python3, where the system default
-        # encoding is 'utf-8' works without any issues. Therefore, we need
-        # to safe_encode in case of python2 and not in case of Python3.
-        if six.PY2:
-            message = encodeutils.safe_encode(self.format(record))
-
         syslog.syslog(priority, message)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/log.py 
new/oslo.log-4.1.1/oslo_log/log.py
--- old/oslo.log-3.44.1/oslo_log/log.py 2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/log.py  2020-04-07 12:06:45.000000000 +0200
@@ -27,6 +27,7 @@
 
 """
 
+import configparser
 import logging
 import logging.config
 import logging.handlers
@@ -41,8 +42,6 @@
 from oslo_config import cfg
 from oslo_utils import importutils
 from oslo_utils import units
-import six
-from six import moves
 
 from oslo_log._i18n import _
 from oslo_log import _options
@@ -232,8 +231,8 @@
             logging.config.fileConfig(log_config_append,
                                       disable_existing_loggers=False)
             _load_log_config.old_time = new_time
-    except (moves.configparser.Error, KeyError, os.error) as exc:
-        raise LogConfigError(log_config_append, six.text_type(exc))
+    except (configparser.Error, KeyError, os.error) as exc:
+        raise LogConfigError(log_config_append, str(exc))
 
 
 def _mutate_hook(conf, fresh):
@@ -455,6 +454,7 @@
                                   conf.rate_limit_interval,
                                   conf.rate_limit_except)
 
+
 _loggers = {}
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/rate_limit.py 
new/oslo.log-4.1.1/oslo_log/rate_limit.py
--- old/oslo.log-3.44.1/oslo_log/rate_limit.py  2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/oslo_log/rate_limit.py   2020-04-07 12:06:45.000000000 
+0200
@@ -132,6 +132,7 @@
     for logger in _iter_loggers():
         logger.addFilter(log_filter)
 
+
 install_filter.log_filter = None
 install_filter.logger_class = None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.log-3.44.1/oslo_log/tests/unit/test_convert_json.py 
new/oslo.log-4.1.1/oslo_log/tests/unit/test_convert_json.py
--- old/oslo.log-3.44.1/oslo_log/tests/unit/test_convert_json.py        
2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/tests/unit/test_convert_json.py 2020-04-07 
12:06:45.000000000 +0200
@@ -10,7 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import six
+import io
 
 from oslo_log.cmds import convert_json
 from oslo_serialization import jsonutils
@@ -45,7 +45,7 @@
         super(ConvertJsonTestCase, self).setUp()
 
     def _reformat(self, text):
-        fh = six.StringIO(text)
+        fh = io.StringIO(text)
         return list(convert_json.reformat_json(fh, lambda x: [x]))
 
     def test_reformat_json_single(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.log-3.44.1/oslo_log/tests/unit/test_formatters.py 
new/oslo.log-4.1.1/oslo_log/tests/unit/test_formatters.py
--- old/oslo.log-3.44.1/oslo_log/tests/unit/test_formatters.py  2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/tests/unit/test_formatters.py   2020-04-07 
12:06:45.000000000 +0200
@@ -14,17 +14,17 @@
 
 """Unit Tests for oslo.log formatter"""
 
-import mock
-
 import logging
 import sys
+from unittest import mock
 
 from oslo_config import cfg
 from oslo_config import fixture as config_fixture
 from oslo_context import context
+from oslotest import base as test_base
+
 from oslo_log import formatters
 from oslo_log import log
-from oslotest import base as test_base
 
 
 def _fake_context():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/tests/unit/test_helpers.py 
new/oslo.log-4.1.1/oslo_log/tests/unit/test_helpers.py
--- old/oslo.log-3.44.1/oslo_log/tests/unit/test_helpers.py     2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/tests/unit/test_helpers.py      2020-04-07 
12:06:45.000000000 +0200
@@ -10,10 +10,12 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
-from oslo_log import helpers
+from unittest import mock
+
 from oslotest import base as test_base
 
+from oslo_log import helpers
+
 
 class LogHelpersTestCase(test_base.BaseTestCase):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/tests/unit/test_log.py 
new/oslo.log-4.1.1/oslo_log/tests/unit/test_log.py
--- old/oslo.log-3.44.1/oslo_log/tests/unit/test_log.py 2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/tests/unit/test_log.py  2020-04-07 
12:06:45.000000000 +0200
@@ -19,6 +19,7 @@
 from contextlib import contextmanager
 import copy
 import datetime
+import io
 import logging
 import os
 import platform
@@ -30,9 +31,9 @@
     syslog = None
 import tempfile
 import time
+from unittest import mock
 
 from dateutil import tz
-import mock
 from oslo_config import cfg
 from oslo_config import fixture as fixture_config  # noqa
 from oslo_context import context
@@ -40,7 +41,6 @@
 from oslo_i18n import fixture as fixture_trans
 from oslo_serialization import jsonutils
 from oslotest import base as test_base
-import six
 import testtools
 
 from oslo_log import _options
@@ -251,7 +251,7 @@
         :param formatter: The formatter class to set on the handler.  Must be
             the class itself, not an instance.
         """
-        self.stream = six.StringIO()
+        self.stream = io.StringIO()
         if handler is None:
             handler = logging.StreamHandler
         self.handler = handler(self.stream)
@@ -364,17 +364,12 @@
 
     def test_syslog(self):
         msg_unicode = u"Benoît Knecht & François Deppierraz login failure"
-        msg_utf8 = msg_unicode.encode('utf-8')
-
         handler = handlers.OSSysLogHandler()
         syslog.syslog = mock.Mock()
         handler.emit(
             logging.LogRecord("name", logging.INFO, "path", 123,
                               msg_unicode, None, None))
-        if six.PY2:
-            syslog.syslog.assert_called_once_with(syslog.LOG_INFO, msg_utf8)
-        else:
-            syslog.syslog.assert_called_once_with(syslog.LOG_INFO, msg_unicode)
+        syslog.syslog.assert_called_once_with(syslog.LOG_INFO, msg_unicode)
 
 
 class OSJournalHandlerTestCase(BaseTestCase):
@@ -396,9 +391,9 @@
         log.setup(self.CONF, 'testing')
 
     def test_emit(self):
-        l = log.getLogger('nova-test.foo')
+        logger = log.getLogger('nova-test.foo')
         local_context = _fake_new_context()
-        l.info("Foo", context=local_context)
+        logger.info("Foo", context=local_context)
         self.assertEqual(
             mock.call(mock.ANY, CODE_FILE=mock.ANY, CODE_FUNC='test_emit',
                       CODE_LINE=mock.ANY, LOGGER_LEVEL='INFO',
@@ -412,21 +407,21 @@
             self.journal.send.call_args)
         args, kwargs = self.journal.send.call_args
         self.assertEqual(len(args), 1)
-        self.assertIsInstance(args[0], six.string_types)
+        self.assertIsInstance(args[0], str)
         self.assertIsInstance(kwargs['CODE_LINE'], int)
         self.assertIsInstance(kwargs['PRIORITY'], int)
         del kwargs['CODE_LINE'], kwargs['PRIORITY']
         for key, arg in kwargs.items():
-            self.assertIsInstance(key, six.string_types)
-            self.assertIsInstance(arg, six.string_types + (six.binary_type,))
+            self.assertIsInstance(key, str)
+            self.assertIsInstance(arg, (bytes, str))
 
     def test_emit_exception(self):
-        l = log.getLogger('nova-exception.foo')
+        logger = log.getLogger('nova-exception.foo')
         local_context = _fake_new_context()
         try:
             raise Exception("Some exception")
         except Exception:
-            l.exception("Foo", context=local_context)
+            logger.exception("Foo", context=local_context)
         self.assertEqual(
             mock.call(mock.ANY, CODE_FILE=mock.ANY,
                       CODE_FUNC='test_emit_exception',
@@ -443,13 +438,13 @@
             self.journal.send.call_args)
         args, kwargs = self.journal.send.call_args
         self.assertEqual(len(args), 1)
-        self.assertIsInstance(args[0], six.string_types)
+        self.assertIsInstance(args[0], str)
         self.assertIsInstance(kwargs['CODE_LINE'], int)
         self.assertIsInstance(kwargs['PRIORITY'], int)
         del kwargs['CODE_LINE'], kwargs['PRIORITY']
         for key, arg in kwargs.items():
-            self.assertIsInstance(key, six.string_types)
-            self.assertIsInstance(arg, six.string_types + (six.binary_type,))
+            self.assertIsInstance(key, str)
+            self.assertIsInstance(arg, (bytes, str))
 
 
 class LogLevelTestCase(BaseTestCase):
@@ -485,12 +480,12 @@
         self.assertEqual(log.TRACE, self.log_trace.logger.getEffectiveLevel())
 
     def test_child_log_has_level_of_parent_flag(self):
-        l = log.getLogger('nova-test.foo')
-        self.assertEqual(logging.INFO, l.logger.getEffectiveLevel())
+        logger = log.getLogger('nova-test.foo')
+        self.assertEqual(logging.INFO, logger.logger.getEffectiveLevel())
 
     def test_child_log_has_level_of_parent_flag_for_trace(self):
-        l = log.getLogger('nova-trace.foo')
-        self.assertEqual(log.TRACE, l.logger.getEffectiveLevel())
+        logger = log.getLogger('nova-trace.foo')
+        self.assertEqual(log.TRACE, logger.logger.getEffectiveLevel())
 
     def test_get_loggers(self):
         log._loggers['sentinel_log'] = mock.sentinel.sentinel_log
@@ -610,15 +605,14 @@
 
     def test_can_process_strings(self):
         expected = b'\\u2622'
-        if six.PY3:
-            # see ContextFormatterTestCase.test_can_process_strings
-            expected = '\\\\xe2\\\\x98\\\\xa2'
+        # see ContextFormatterTestCase.test_can_process_strings
+        expected = '\\\\xe2\\\\x98\\\\xa2'
         self.log.info(b'%s', u'\u2622'.encode('utf8'))
         self.assertIn(expected, self.stream.getvalue())
 
     def test_exception(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         try:
             raise RuntimeError('test_exception')
         except RuntimeError:
@@ -630,7 +624,7 @@
 
     def test_no_exception(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         self.log.info('testing', context=ctxt)
         data = jsonutils.loads(self.stream.getvalue())
         self.assertIn('error_summary', data)
@@ -638,7 +632,7 @@
 
     def test_exception_without_exc_info_passed(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         try:
             raise RuntimeError('test_exception\ntraceback\nfrom\nremote error')
         except RuntimeError:
@@ -649,7 +643,7 @@
 
     def test_exception_with_exc_info_passed(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         try:
             raise RuntimeError('test_exception\ntraceback\nfrom\nremote error')
         except RuntimeError:
@@ -661,10 +655,6 @@
                          data['error_summary'])
 
     def test_fallback(self):
-        if not formatters._HAVE_JSONUTILS_FALLBACK:
-            self.skipTest("need the fallback parameter of "
-                          "jsonutils.to_primitive() added in "
-                          "oslo_serialization 2.21.1")
 
         class MyObject(object):
             def __str__(self):
@@ -840,14 +830,14 @@
 
     def test_message_logging_3rd_party_log_records(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         sa_log = logging.getLogger('sqlalchemy.engine')
         sa_log.setLevel(logging.INFO)
-        message = self.trans_fixture.lazy('test ' + six.unichr(128))
+        message = self.trans_fixture.lazy('test ' + chr(128))
         sa_log.info(message)
 
         expected = ('HAS CONTEXT [%s]: %s\n' % (ctxt.request_id,
-                                                six.text_type(message)))
+                                                str(message)))
         self.assertEqual(expected, self.stream.getvalue())
 
     def test_debugging_log(self):
@@ -862,11 +852,11 @@
         # the Message object, with a wrong encoding. This test case
         # tests that problem does not occur.
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
-        message = self.trans_fixture.lazy('test ' + six.unichr(128))
+        ctxt.request_id = str('99')
+        message = self.trans_fixture.lazy('test ' + chr(128))
         self.log.info(message, context=ctxt)
         expected = "HAS CONTEXT [%s]: %s\n" % (ctxt.request_id,
-                                               six.text_type(message))
+                                               str(message))
         self.assertEqual(expected, self.stream.getvalue())
 
     def test_exception_logging(self):
@@ -874,8 +864,8 @@
         # does not appear in the format string, ensure that it is
         # appended to the end of the log lines.
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
-        message = self.trans_fixture.lazy('test ' + six.unichr(128))
+        ctxt.request_id = str('99')
+        message = self.trans_fixture.lazy('test ' + chr(128))
         try:
             raise RuntimeError('test_exception_logging')
         except RuntimeError:
@@ -887,8 +877,8 @@
         # NOTE(dhellmann): Several of the built-in exception types
         # should not be automatically added to the log output.
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
-        message = self.trans_fixture.lazy('test ' + six.unichr(128))
+        ctxt.request_id = str('99')
+        message = self.trans_fixture.lazy('test ' + chr(128))
         ignored_exceptions = [
             ValueError, TypeError, KeyError, AttributeError, ImportError
         ]
@@ -906,8 +896,8 @@
         # that position in the output.
         self.config(logging_context_format_string="A %(error_summary)s B")
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
-        message = self.trans_fixture.lazy('test ' + six.unichr(128))
+        ctxt.request_id = str('99')
+        message = self.trans_fixture.lazy('test ' + chr(128))
         try:
             raise RuntimeError('test_exception_logging')
         except RuntimeError:
@@ -921,32 +911,32 @@
         # inserted.
         self.config(logging_context_format_string="%(error_summary)s")
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
-        message = self.trans_fixture.lazy('test ' + six.unichr(128))
+        ctxt.request_id = str('99')
+        message = self.trans_fixture.lazy('test ' + chr(128))
         self.log.info(message, context=ctxt)
         expected = '-\n'
         self.assertTrue(self.stream.getvalue().startswith(expected))
 
     def test_unicode_conversion_in_adapter(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         message = "Exception is (%s)"
-        ex = Exception(self.trans_fixture.lazy('test' + six.unichr(128)))
+        ex = Exception(self.trans_fixture.lazy('test' + chr(128)))
         self.log.debug(message, ex, context=ctxt)
-        message = six.text_type(message) % ex
+        message = str(message) % ex
         expected = "HAS CONTEXT [%s]: %s --DBG\n" % (ctxt.request_id,
                                                      message)
         self.assertEqual(expected, self.stream.getvalue())
 
     def test_unicode_conversion_in_formatter(self):
         ctxt = _fake_context()
-        ctxt.request_id = six.text_type('99')
+        ctxt.request_id = str('99')
         no_adapt_log = logging.getLogger('no_adapt')
         no_adapt_log.setLevel(logging.INFO)
         message = "Exception is (%s)"
-        ex = Exception(self.trans_fixture.lazy('test' + six.unichr(128)))
+        ex = Exception(self.trans_fixture.lazy('test' + chr(128)))
         no_adapt_log.info(message, ex)
-        message = six.text_type(message) % ex
+        message = str(message) % ex
         expected = "HAS CONTEXT [%s]: %s\n" % (ctxt.request_id,
                                                message)
         self.assertEqual(expected, self.stream.getvalue())
@@ -963,7 +953,7 @@
         expected = ("HAS CONTEXT [%s %s %s %s %s %s]: %s\n" %
                     (ctxt.request_id, ctxt.user, ctxt.tenant, ctxt.domain,
                      ctxt.user_domain, ctxt.project_domain,
-                     six.text_type(message)))
+                     str(message)))
         self.assertEqual(expected, self.stream.getvalue())
 
     def test_user_identity_logging_set_format(self):
@@ -979,7 +969,7 @@
         self.log.info(message, context=ctxt)
         expected = ("HAS CONTEXT [%s %s %s]: %s\n" %
                     (ctxt.request_id, ctxt.user, ctxt.tenant,
-                     six.text_type(message)))
+                     str(message)))
         self.assertEqual(expected, self.stream.getvalue())
 
     @mock.patch("datetime.datetime",
@@ -1013,11 +1003,10 @@
 
     def test_can_process_strings(self):
         expected = b'\xe2\x98\xa2'
-        if six.PY3:
-            # in PY3 logging format string should be unicode string
-            # or it will fail and inserting byte string in unicode string
-            # causes such formatting
-            expected = '\\xe2\\x98\\xa2'
+        # logging format string should be unicode string
+        # or it will fail and inserting byte string in unicode string
+        # causes such formatting
+        expected = '\\xe2\\x98\\xa2'
         self.log.info(b'%s', u'\u2622'.encode('utf8'))
         self.assertIn(expected, self.stream.getvalue())
 
@@ -1105,7 +1094,7 @@
         # and goes to stderr. Suggests on a better way to do this are
         # welcomed.
         error = sys.stderr
-        sys.stderr = six.StringIO()
+        sys.stderr = io.StringIO()
 
         self.colorlog.info("foo")
         self.assertNotEqual(-1,
@@ -1612,7 +1601,7 @@
         root = logging.getLogger()
         self.assertEqual(1, len(root.handlers))
         handler = root.handlers[0]
-        handler.stream = six.StringIO()
+        handler.stream = io.StringIO()
         return handler.stream
 
     def test_remove_handler(self):
@@ -1638,7 +1627,7 @@
                  'loggers': {'a.a': fake_logger}}
         conf2 = {'root': {'handlers': 'fake'},
                  'handlers': {'fake': fake_handler}}
-        stream = six.StringIO()
+        stream = io.StringIO()
         with self.mutate_conf(conf1, conf2) as (loginis, confs):
             stream = self.set_root_stream()
             log = logging.getLogger("a.a")
@@ -1657,7 +1646,7 @@
         super(LogConfigOptsTestCase, self).setUp()
 
     def test_print_help(self):
-        f = six.StringIO()
+        f = io.StringIO()
         self.CONF([])
         self.CONF.print_help(file=f)
         for option in ['debug', 'log-config', 'watch-log-file']:
@@ -1924,34 +1913,34 @@
         enc_msg = msg.encode('utf-8')
         result = formatters._ensure_unicode(enc_msg)
         self.assertEqual(msg, result)
-        self.assertIsInstance(result, six.text_type)
+        self.assertIsInstance(result, str)
 
     def test_unicode_to_unicode(self):
         msg = self._MSG
         result = formatters._ensure_unicode(msg)
         self.assertEqual(msg, result)
-        self.assertIsInstance(result, six.text_type)
+        self.assertIsInstance(result, str)
 
     def test_exception_to_unicode(self):
         msg = self._MSG
         exc = Exception(msg)
         result = formatters._ensure_unicode(exc)
         self.assertEqual(msg, result)
-        self.assertIsInstance(result, six.text_type)
+        self.assertIsInstance(result, str)
 
 
 class LoggerNameTestCase(LoggerTestCase):
 
     def test_oslo_dot(self):
         logger_name = 'oslo.subname'
-        l = log.getLogger(logger_name)
-        self.assertEqual(logger_name, l.logger.name)
+        logger = log.getLogger(logger_name)
+        self.assertEqual(logger_name, logger.logger.name)
 
     def test_oslo_underscore(self):
         logger_name = 'oslo_subname'
         expected = logger_name.replace('_', '.')
-        l = log.getLogger(logger_name)
-        self.assertEqual(expected, l.logger.name)
+        logger = log.getLogger(logger_name)
+        self.assertEqual(expected, logger.logger.name)
 
 
 class IsDebugEnabledTestCase(test_base.BaseTestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.log-3.44.1/oslo_log/tests/unit/test_rate_limit.py 
new/oslo.log-4.1.1/oslo_log/tests/unit/test_rate_limit.py
--- old/oslo.log-3.44.1/oslo_log/tests/unit/test_rate_limit.py  2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/tests/unit/test_rate_limit.py   2020-04-07 
12:06:45.000000000 +0200
@@ -12,11 +12,11 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
+import io
 import logging
+from unittest import mock
 
-import mock
 from oslotest import base as test_base
-import six
 
 from oslo_log import rate_limit
 
@@ -41,7 +41,7 @@
             logger.removeHandler(handler)
 
         # install our handler writing logs into a StringIO
-        stream = six.StringIO()
+        stream = io.StringIO()
         handler = logging.StreamHandler(stream)
         logger.addHandler(handler)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.log-3.44.1/oslo_log/tests/unit/test_versionutils.py 
new/oslo.log-4.1.1/oslo_log/tests/unit/test_versionutils.py
--- old/oslo.log-3.44.1/oslo_log/tests/unit/test_versionutils.py        
2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/tests/unit/test_versionutils.py 2020-04-07 
12:06:45.000000000 +0200
@@ -13,11 +13,10 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
+from unittest import mock
+
 from oslotest import base as test_base
-import six
 from testtools import matchers
-import unittest2
 
 from oslo_log import versionutils
 
@@ -247,27 +246,6 @@
                                as_of='Juno',
                                remove_in='Kilo')
 
-    @unittest2.skipIf(
-        six.PY3,
-        'Deprecated exception detection does not work for Python 3')
-    @mock.patch('oslo_log.versionutils.report_deprecated_feature')
-    def test_deprecated_exception(self, mock_log):
-        @versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE,
-                                 remove_in=+1)
-        class OldException(Exception):
-            pass
-
-        class NewException(OldException):
-            pass
-
-        try:
-            raise NewException()
-        except OldException:
-            pass
-
-        self.assert_deprecated(mock_log, what='OldException()',
-                               as_of='Icehouse', remove_in='Juno')
-
     @mock.patch('oslo_log.versionutils.report_deprecated_feature')
     def test_deprecated_exception_old(self, mock_log):
         @versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/oslo_log/versionutils.py 
new/oslo.log-4.1.1/oslo_log/versionutils.py
--- old/oslo.log-3.44.1/oslo_log/versionutils.py        2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/oslo_log/versionutils.py 2020-04-07 12:06:45.000000000 
+0200
@@ -22,7 +22,6 @@
 import logging
 
 from oslo_config import cfg
-import six
 
 from oslo_log._i18n import _
 
@@ -73,6 +72,9 @@
     'R': 'Rocky',
     'S': 'Stein',
     'T': 'Train',
+    'U': 'Ussuri',
+    'V': 'Victoria',
+    'W': 'Wallaby',
 }
 
 
@@ -150,6 +152,7 @@
     ROCKY = 'R'
     STEIN = 'S'
     TRAIN = 'T'
+    USSURI = 'U'
 
     def __init__(self, as_of, in_favor_of=None, remove_in=2, what=None):
         """Initialize decorator
@@ -178,7 +181,7 @@
 
         if inspect.isfunction(func_or_cls):
 
-            @six.wraps(func_or_cls)
+            @functools.wraps(func_or_cls)
             def wrapped(*args, **kwargs):
                 report_deprecated()
                 return func_or_cls(*args, **kwargs)
@@ -186,7 +189,7 @@
         elif inspect.isclass(func_or_cls):
             orig_init = func_or_cls.__init__
 
-            @six.wraps(orig_init, assigned=('__name__', '__doc__'))
+            @functools.wraps(orig_init, assigned=('__name__', '__doc__'))
             def new_init(self, *args, **kwargs):
                 if self.__class__ in _DEPRECATED_EXCEPTIONS:
                     report_deprecated()
@@ -211,7 +214,7 @@
                             report_deprecated()
                         return super(ExceptionMeta,
                                      self).__subclasscheck__(subclass)
-                func_or_cls = six.add_metaclass(ExceptionMeta)(func_or_cls)
+                func_or_cls.__meta__ = ExceptionMeta
                 _DEPRECATED_EXCEPTIONS.add(func_or_cls)
 
             return func_or_cls
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.log-3.44.1/playbooks/legacy/oslo.log-src-grenade-devstack/run.yaml 
new/oslo.log-4.1.1/playbooks/legacy/oslo.log-src-grenade-devstack/run.yaml
--- old/oslo.log-3.44.1/playbooks/legacy/oslo.log-src-grenade-devstack/run.yaml 
2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/playbooks/legacy/oslo.log-src-grenade-devstack/run.yaml  
2020-04-07 12:06:45.000000000 +0200
@@ -31,6 +31,7 @@
           export PYTHONUNBUFFERED=true
           export DEVSTACK_GATE_TEMPEST=1
           export DEVSTACK_GATE_GRENADE=pullup
+          export DEVSTACK_GATE_USE_PYTHON3=True
           export BRANCH_OVERRIDE=default
           if [ "$BRANCH_OVERRIDE" != "default" ] ; then
               export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.log-3.44.1/releasenotes/notes/drop-python27-support-0fe4909a5468feb3.yaml
 
new/oslo.log-4.1.1/releasenotes/notes/drop-python27-support-0fe4909a5468feb3.yaml
--- 
old/oslo.log-3.44.1/releasenotes/notes/drop-python27-support-0fe4909a5468feb3.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.log-4.1.1/releasenotes/notes/drop-python27-support-0fe4909a5468feb3.yaml
   2020-04-07 12:06:45.000000000 +0200
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Python 2.7 is no longer supported. The minimum supported version of Python
+    is now Python 3.6.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/releasenotes/source/index.rst 
new/oslo.log-4.1.1/releasenotes/source/index.rst
--- old/oslo.log-3.44.1/releasenotes/source/index.rst   2019-08-29 
11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/releasenotes/source/index.rst    2020-04-07 
12:06:45.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.log-3.44.1/releasenotes/source/train.rst 
new/oslo.log-4.1.1/releasenotes/source/train.rst
--- old/oslo.log-3.44.1/releasenotes/source/train.rst   1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.log-4.1.1/releasenotes/source/train.rst    2020-04-07 
12:06:45.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.log-3.44.1/requirements.txt 
new/oslo.log-4.1.1/requirements.txt
--- old/oslo.log-3.44.1/requirements.txt        2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/requirements.txt 2020-04-07 12:06:45.000000000 +0200
@@ -3,7 +3,6 @@
 # process, which may cause wedges in the gate later.
 
 pbr>=3.1.1 # Apache-2.0
-six>=1.11.0 # MIT
 oslo.config>=5.2.0 # Apache-2.0
 oslo.context>=2.20.0 # Apache-2.0
 oslo.i18n>=3.20.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/setup.cfg 
new/oslo.log-4.1.1/setup.cfg
--- old/oslo.log-3.44.1/setup.cfg       2019-08-29 11:51:35.000000000 +0200
+++ new/oslo.log-4.1.1/setup.cfg        2020-04-07 12:07:58.000000000 +0200
@@ -6,6 +6,7 @@
 author = OpenStack
 author-email = [email protected]
 home-page = https://docs.openstack.org/oslo.log/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 = 
@@ -35,9 +36,6 @@
 console_scripts = 
        convert-json = oslo_log.cmds.convert_json:main
 
-[upload_sphinx]
-upload-dir = doc/build/html
-
 [compile_catalog]
 directory = oslo_log/locale
 domain = oslo_log
@@ -52,9 +50,6 @@
 mapping_file = babel.cfg
 output_file = oslo_log/locale/oslo_log.pot
 
-[bdist_wheel]
-universal = 1
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/setup.py new/oslo.log-4.1.1/setup.py
--- old/oslo.log-3.44.1/setup.py        2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/setup.py 2020-04-07 12:06:45.000000000 +0200
@@ -13,7 +13,6 @@
 # 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/test-requirements.txt 
new/oslo.log-4.1.1/test-requirements.txt
--- old/oslo.log-3.44.1/test-requirements.txt   2019-08-29 11:50:52.000000000 
+0200
+++ new/oslo.log-4.1.1/test-requirements.txt    2020-04-07 12:06:45.000000000 
+0200
@@ -2,11 +2,10 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
+hacking>=2.0.0,<2.1.0 # Apache-2.0
 
 stestr>=2.0.0 # Apache-2.0
 testtools>=2.3.0 # MIT
-mock>=2.0.0 # BSD
 oslotest>=3.3.0 # Apache-2.0
 
 coverage>=4.5.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.log-3.44.1/tox.ini new/oslo.log-4.1.1/tox.ini
--- old/oslo.log-3.44.1/tox.ini 2019-08-29 11:50:52.000000000 +0200
+++ new/oslo.log-4.1.1/tox.ini  2020-04-07 12:06:45.000000000 +0200
@@ -1,8 +1,10 @@
 [tox]
-minversion = 2.0
-envlist = py27,py36,py37,pep8
+minversion = 3.1
+envlist = py36,py37,pep8
+ignore_basepython_conflict = true
 
 [testenv]
+basepython = python3
 whitelist_externals =
   find
 deps =
@@ -14,32 +16,33 @@
   stestr slowest
 
 [testenv:pep8]
-basepython = python3
 commands =
   flake8
   # Run security linter
   bandit -r oslo_log -x tests -n5
 
 [testenv:venv]
-basepython = python3
 commands = {posargs}
 
 [testenv:docs]
-basepython = python3
+whitelist_externals = rm
 deps =
   
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/doc/requirements.txt
-commands = sphinx-build -a -E -W -b html doc/source doc/build/html
+commands =
+  rm -fr doc/build
+  sphinx-build -a -E -W --keep-going -b html doc/source doc/build/html
 
 [testenv:releasenotes]
-basepython = python3
+whitelist_externals = rm
 deps =
   
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/doc/requirements.txt
-commands = sphinx-build -a -E -W -b html releasenotes/source 
releasenotes/build/html
+commands =
+  rm -rf releasenotes/build
+  sphinx-build -a -E -W --keep-going -b html releasenotes/source 
releasenotes/build/html
 
 [testenv:cover]
-basepython = python3
 commands =
   coverage erase
   {[testenv]commands}
@@ -49,11 +52,9 @@
   coverage report --show-missing
 
 [testenv:bandit]
-basepython = python3
 commands = bandit -r oslo_log -x tests -n5
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt
@@ -61,8 +62,9 @@
 
 [flake8]
 # E123, E125 skipped as they are invalid PEP-8.
+# W503, W504 skipped: 
https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator
 show-source = True
-ignore = E123,E125,H405
+ignore = E123,E125,H405,W503,W504
 exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,__init__.py
 
 [hacking]


Reply via email to