Hello community,

here is the log from the commit of package python-keystoneauth1 for 
openSUSE:Factory checked in at 2020-10-26 16:15:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-keystoneauth1 (Old)
 and      /work/SRC/openSUSE:Factory/.python-keystoneauth1.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-keystoneauth1"

Mon Oct 26 16:15:24 2020 rev:14 rq:841183 version:4.2.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-keystoneauth1/python-keystoneauth1.changes    
    2020-06-05 20:13:41.214422464 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-keystoneauth1.new.3463/python-keystoneauth1.changes
      2020-10-26 16:16:14.322931525 +0100
@@ -1,0 +2,24 @@
+Fri Oct  9 19:06:32 UTC 2020 - cloud-de...@suse.de
+
+- update to version 4.2.1
+  - Remove mox3 from local upper-constraints
+  - Fix E741 pep8 failure
+  - Add in-tree upper-constraints for py35 job
+  - Cleanup py27 support
+  - Fix get_endpoint_data for non-keystone plugins
+  - Implement HTTP Basic client support in keystoneauth1
+  - Fix docs builds for modern stevedors
+  - Fix hacking min version to 3.0.1
+  - Correct major version discovery for non-keystone plugins
+  - Use unittest.mock instead of third party mock
+  - Make header Case Insensitive
+  - Update lower-constraints versions
+  - Re-add python3.5 testing
+  - Add py38 package metadata
+  - Replace assertItemsEqual with assertCountEqual
+  - Inject /v3 in token path for v3 plugins
+  - Switch to newer openstackdocstheme and reno versions
+  - Drop python 3.5 support
+  - Update master for stable/ussuri
+
+-------------------------------------------------------------------

Old:
----
  keystoneauth1-4.0.0.tar.gz

New:
----
  keystoneauth1-4.2.1.tar.gz

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

Other differences:
------------------
++++++ python-keystoneauth1.spec ++++++
--- /var/tmp/diff_new_pack.xH9xzG/_old  2020-10-26 16:16:16.138932986 +0100
+++ /var/tmp/diff_new_pack.xH9xzG/_new  2020-10-26 16:16:16.142932989 +0100
@@ -17,13 +17,13 @@
 
 
 Name:           python-keystoneauth1
-Version:        4.0.0
+Version:        4.2.1
 Release:        0
 Summary:        OpenStack authenticating tools
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/keystoneauth
-Source0:        
https://files.pythonhosted.org/packages/source/k/keystoneauth1/keystoneauth1-4.0.0.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/k/keystoneauth1/keystoneauth1-4.2.1.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-PyYAML
 BuildRequires:  python3-betamax

++++++ _service ++++++
--- /var/tmp/diff_new_pack.xH9xzG/_old  2020-10-26 16:16:16.174933015 +0100
+++ /var/tmp/diff_new_pack.xH9xzG/_new  2020-10-26 16:16:16.174933015 +0100
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/ussuri/openstack/keystoneauth1/keystoneauth1.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/victoria/openstack/keystoneauth1/keystoneauth1.spec.j2</param>
     <param name="output-name">python-keystoneauth1.spec</param>
-    <param 
name="requirements">https://opendev.org/openstack/keystoneauth/raw/branch/stable/ussuri/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/keystoneauth/raw/branch/stable/victoria/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,keystoneauth</param>
   </service>

++++++ keystoneauth1-4.0.0.tar.gz -> keystoneauth1-4.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/AUTHORS 
new/keystoneauth1-4.2.1/AUTHORS
--- old/keystoneauth1-4.0.0/AUTHORS     2020-04-02 16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/AUTHORS     2020-08-04 11:17:27.000000000 +0200
@@ -62,6 +62,7 @@
 Florent Flament <florent.flament-...@cloudwatt.com>
 Gabriel Hurley <gabr...@strikeawe.com>
 Gage Hugo <gageh...@gmail.com>
+Ghanshyam Mann <gm...@ghanshyammann.com>
 Ghe Rivero <ghe.riv...@hp.com>
 Ghe Rivero <g...@debian.org>
 Gregory Haynes <g...@greghaynes.net>
@@ -88,6 +89,7 @@
 Joe Gordon <joe.gord...@gmail.com>
 Joe Gordon <j...@cloudscaling.com>
 Joe Heck <he...@mac.com>
+Joel Capitao <jcapi...@redhat.com>
 John Dennis <jden...@redhat.com>
 JordanP <jordan.pitt...@cloudwatt.com>
 Jose Castro Leon <jose.castro.l...@cern.ch>
@@ -142,6 +144,7 @@
 Sean Perry <sean.pe...@hpe.com>
 Sergey Kraynev <skray...@mirantis.com>
 Sergio Cazzolato <sergio.j.cazzol...@intel.com>
+Steve Baker <sba...@redhat.com>
 Steve Martinelli <s.martine...@gmail.com>
 Steve Martinelli <steve...@ca.ibm.com>
 Steven Hardy <sha...@redhat.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/ChangeLog 
new/keystoneauth1-4.2.1/ChangeLog
--- old/keystoneauth1-4.0.0/ChangeLog   2020-04-02 16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/ChangeLog   2020-08-04 11:17:27.000000000 +0200
@@ -1,6 +1,37 @@
 CHANGES
 =======
 
+4.2.1
+-----
+
+* Correct major version discovery for non-keystone plugins
+* Fix docs builds for modern stevedors
+* Fix get\_endpoint\_data for non-keystone plugins
+
+4.2.0
+-----
+
+* Drop python 3.5 support
+* Implement HTTP Basic client support in keystoneauth1
+* Update lower-constraints versions
+
+4.1.0
+-----
+
+* Remove mox3 from local upper-constraints
+* Replace assertItemsEqual with assertCountEqual
+* Add in-tree upper-constraints for py35 job
+* Make header Case Insensitive
+* Use unittest.mock instead of third party mock
+* Add py38 package metadata
+* Inject /v3 in token path for v3 plugins
+* Fix hacking min version to 3.0.1
+* Fix E741 pep8 failure
+* Switch to newer openstackdocstheme and reno versions
+* Re-add python3.5 testing
+* Cleanup py27 support
+* Update master for stable/ussuri
+
 4.0.0
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/PKG-INFO 
new/keystoneauth1-4.2.1/PKG-INFO
--- old/keystoneauth1-4.0.0/PKG-INFO    2020-04-02 16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/PKG-INFO    2020-08-04 11:17:27.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: keystoneauth1
-Version: 4.0.0
+Version: 4.2.1
 Summary: Authentication Library for OpenStack Identity
 Home-page: https://docs.openstack.org/keystoneauth/latest/
 Author: OpenStack
@@ -51,11 +51,15 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Requires-Python: >=3.6
+Provides-Extra: betamax
 Provides-Extra: kerberos
-Provides-Extra: saml2
 Provides-Extra: oauth1
-Provides-Extra: betamax
+Provides-Extra: saml2
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/doc/ext/list_plugins.py 
new/keystoneauth1-4.2.1/doc/ext/list_plugins.py
--- old/keystoneauth1-4.0.0/doc/ext/list_plugins.py     2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/doc/ext/list_plugins.py     2020-08-04 
11:15:42.000000000 +0200
@@ -76,7 +76,15 @@
         for name in sorted(mgr.names()):
             for line in self.display_plugin(mgr[name]):
                 for l in line.splitlines():
-                    result.append(l, mgr[name].entry_point.module_name)
+                    ep = mgr[name]
+                    try:
+                        module_name = ep.entry_point.module_name
+                    except AttributeError:
+                        try:
+                            module_name = ep.entry_point.module
+                        except AttributeError:
+                            module_name = ep.entry_point.value
+                    result.append(l, module_name)
 
         # Parse what we have into a new section.
         node = nodes.section()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/doc/requirements.txt 
new/keystoneauth1-4.2.1/doc/requirements.txt
--- old/keystoneauth1-4.0.0/doc/requirements.txt        2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/doc/requirements.txt        2020-08-04 
11:15:42.000000000 +0200
@@ -3,18 +3,16 @@
 # process, which may cause wedges in the gate later.
 
 # For generationg sphinx documentation
-openstackdocstheme>=1.18.1 # Apache-2.0
-reno>=2.5.0 # Apache-2.0
-sphinx!=1.6.6,!=1.6.7,>=1.6.2;python_version>='3.4'  # BSD
+openstackdocstheme>=2.2.1 # Apache-2.0
+reno>=3.1.0 # Apache-2.0
+sphinx>=2.0.0,!=2.1.0 # BSD
 sphinxcontrib-apidoc>=0.2.0  # BSD
 
 # For autodoc builds
-hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
-mock>=2.0.0 # BSD
 betamax>=0.7.0 # Apache-2.0
 oslo.config>=5.2.0 # Apache-2.0
 oslo.utils>=3.33.0 # Apache-2.0
 requests-mock>=1.2.0 # Apache-2.0
-lxml!=3.7.0,>=3.4.1 # BSD
+lxml>=4.2.0 # BSD
 oauthlib>=0.6.2 # BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/doc/source/authentication-plugins.rst 
new/keystoneauth1-4.2.1/doc/source/authentication-plugins.rst
--- old/keystoneauth1-4.0.0/doc/source/authentication-plugins.rst       
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/doc/source/authentication-plugins.rst       
2020-08-04 11:15:42.000000000 +0200
@@ -226,6 +226,34 @@
     sess = session.Session(auth=auth)
     sess.get_token()
 
+Standalone Plugins
+------------------
+
+Services can be deployed in a standalone environment where there is no 
integration
+with an identity service. The following plugins are provided to support 
standalone
+services:
+
+- :py:class:`~keystoneauth1.http_basic.HTTPBasicAuth`: HTTP Basic 
authentication
+- :py:class:`~keystoneauth1.noauth.NoAuth`: No authentication
+
+Standalone plugins must be given an `endpoint` that points to the URL of the 
one
+service being used, since there is no service catalog to look up endpoints::
+
+    from keystoneauth1 import session
+    from keystoneauth1 import noauth
+    auth = noauth.NoAuth(endpoint='http://hostname:6385/')
+    sess = session.Session(auth=auth)
+
+:py:class:`~keystoneauth1.http_basic.HTTPBasicAuth` also requres a `username` 
and
+`password`::
+
+    from keystoneauth1 import session
+    from keystoneauth1 import http_basic
+    auth = http_basic.HTTPBasicAuth(endpoint='http://hostname:6385/',
+                                    username='myUser',
+                                    password='myPassword')
+    sess = session.Session(auth=auth)
+
 Federation
 ==========
 
@@ -374,6 +402,8 @@
 are available are then specific to the plugin that you specified. Currently the
 authentication plugins that are available in `keystoneauth` are:
 
+- http_basic: :py:class:`keystoneauth1.http_basic.HTTPBasicAuth`
+- none: :py:class:`keystoneauth1.noauth.NoAuth`
 - password: :py:class:`keystoneauth1.identity.generic.Password`
 - token: :py:class:`keystoneauth1.identity.generic.Token`
 - v2password: :py:class:`keystoneauth1.identity.v2.Password`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/doc/source/conf.py 
new/keystoneauth1-4.2.1/doc/source/conf.py
--- old/keystoneauth1-4.0.0/doc/source/conf.py  2020-04-02 16:32:45.000000000 
+0200
+++ new/keystoneauth1-4.2.1/doc/source/conf.py  2020-08-04 11:15:42.000000000 
+0200
@@ -12,8 +12,6 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-from __future__ import unicode_literals
-
 import os
 import sys
 
@@ -47,6 +45,7 @@
 apidoc_module_dir = '../../keystoneauth1'
 apidoc_output_dir = 'api'
 apidoc_excluded_paths = [
+    'hacking',
     'tests/*',
     'tests',
     'test']
@@ -69,15 +68,6 @@
 project = 'keystoneauth1'
 copyright = 'OpenStack Contributors'
 
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-version_info = pbr.version.VersionInfo('keystoneauth1')
-# The short X.Y version.
-version = version_info.version_string()
-# The full version, including alpha/beta/rc tags.
-release = version_info.release_string()
-
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
 #language = None
@@ -111,7 +101,7 @@
 #show_authors = False
 
 # The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = 'native'
 
 # A list of ignored prefixes for module index sorting.
 modindex_common_prefix = ['keystoneauth1.']
@@ -157,10 +147,6 @@
 # so a file named "default.css" will overwrite the builtin "default.css".
 #html_static_path = ['static']
 
-# 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
@@ -251,6 +237,8 @@
 }
 
 # -- Options for openstackdocstheme -------------------------------------------
-repository_name = 'openstack/keystoneauth'
-bug_project = 'keystoneauth'
-bug_tag = 'doc'
+openstackdocs_repo_name = 'openstack/keystoneauth'
+openstackdocs_pdf_link = True
+openstackdocs_auto_name = False
+openstackdocs_bug_project = 'keystoneauth'
+openstackdocs_bug_tag = 'doc'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1/adapter.py 
new/keystoneauth1-4.2.1/keystoneauth1/adapter.py
--- old/keystoneauth1-4.0.0/keystoneauth1/adapter.py    2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/adapter.py    2020-08-04 
11:15:42.000000000 +0200
@@ -13,6 +13,8 @@
 import os
 import warnings
 
+import requests
+
 from keystoneauth1 import _fair_semaphore
 from keystoneauth1 import session
 
@@ -198,7 +200,14 @@
     def request(self, url, method, **kwargs):
         endpoint_filter = kwargs.setdefault('endpoint_filter', {})
         self._set_endpoint_filter_kwargs(endpoint_filter)
-
+        # NOTE(gmann): Convert r initlize the headers to
+        # CaseInsensitiveDict to make sure headers are
+        # case insensitive.
+        if kwargs.get('headers'):
+            kwargs['headers'] = requests.structures.CaseInsensitiveDict(
+                kwargs['headers'])
+        else:
+            kwargs['headers'] = requests.structures.CaseInsensitiveDict()
         if self.endpoint_override:
             kwargs.setdefault('endpoint_override', self.endpoint_override)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/fixture/keystoneauth_betamax.py 
new/keystoneauth1-4.2.1/keystoneauth1/fixture/keystoneauth_betamax.py
--- old/keystoneauth1-4.0.0/keystoneauth1/fixture/keystoneauth_betamax.py       
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/fixture/keystoneauth_betamax.py       
2020-08-04 11:15:42.000000000 +0200
@@ -13,10 +13,10 @@
 """A fixture to wrap the session constructor for use with Betamax."""
 
 from functools import partial
+from unittest import mock
 
 import betamax
 import fixtures
-import mock
 import requests
 
 from keystoneauth1.fixture import hooks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1/http_basic.py 
new/keystoneauth1-4.2.1/keystoneauth1/http_basic.py
--- old/keystoneauth1-4.0.0/keystoneauth1/http_basic.py 1970-01-01 
01:00:00.000000000 +0100
+++ new/keystoneauth1-4.2.1/keystoneauth1/http_basic.py 2020-08-04 
11:15:42.000000000 +0200
@@ -0,0 +1,45 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import base64
+
+from keystoneauth1 import plugin
+
+AUTH_HEADER_NAME = 'Authorization'
+
+
+class HTTPBasicAuth(plugin.FixedEndpointPlugin):
+    """A provider that will always use HTTP Basic authentication.
+
+    This is useful to unify session/adapter loading for services
+    that might be deployed in standalone mode.
+    """
+
+    def __init__(self, endpoint=None, username=None, password=None):
+        super(HTTPBasicAuth, self).__init__(endpoint)
+        self.username = username
+        self.password = password
+
+    def get_token(self, session, **kwargs):
+        if self.username is None or self.password is None:
+            return None
+        token = bytes('%s:%s' % (self.username, self.password),
+                      encoding='utf-8')
+        encoded = base64.b64encode(token)
+        return str(encoded, encoding='utf-8')
+
+    def get_headers(self, session, **kwargs):
+        token = self.get_token(session)
+        if not token:
+            return None
+        auth = 'Basic %s' % token
+        return {AUTH_HEADER_NAME: auth}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/identity/v3/base.py 
new/keystoneauth1-4.2.1/keystoneauth1/identity/v3/base.py
--- old/keystoneauth1-4.0.0/keystoneauth1/identity/v3/base.py   2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/identity/v3/base.py   2020-08-04 
11:15:42.000000000 +0200
@@ -173,9 +173,13 @@
             if self.system_scope == 'all':
                 body['auth']['scope'] = {'system': {'all': True}}
 
+        token_url = self.token_url
+
+        if not self.auth_url.rstrip('/').endswith('v3'):
+            token_url = '%s/v3/auth/tokens' % self.auth_url.rstrip('/')
+
         # NOTE(jamielennox): we add nocatalog here rather than in token_url
         # directly as some federation plugins require the base token_url
-        token_url = self.token_url
         if not self.include_catalog:
             token_url += '?nocatalog'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/loading/_plugins/http_basic.py 
new/keystoneauth1-4.2.1/keystoneauth1/loading/_plugins/http_basic.py
--- old/keystoneauth1-4.0.0/keystoneauth1/loading/_plugins/http_basic.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/keystoneauth1-4.2.1/keystoneauth1/loading/_plugins/http_basic.py        
2020-08-04 11:15:42.000000000 +0200
@@ -0,0 +1,48 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from keystoneauth1 import http_basic
+from keystoneauth1 import loading
+
+
+class HTTPBasicAuth(loading.BaseLoader):
+    """Use HTTP Basic authentication to perform requests.
+
+    This can be used to instantiate clients for services deployed in
+    standalone mode.
+
+    There is no fetching a service catalog or determining scope information
+    and so it cannot be used by clients that expect to use this scope
+    information.
+
+    """
+
+    @property
+    def plugin_class(self):
+        return http_basic.HTTPBasicAuth
+
+    def get_options(self):
+        options = super(HTTPBasicAuth, self).get_options()
+
+        options.extend([
+            loading.Opt('username',
+                        help='Username',
+                        deprecated=[loading.Opt('user-name')]),
+            loading.Opt('password',
+                        secret=True,
+                        prompt='Password: ',
+                        help="User's password"),
+            loading.Opt('endpoint',
+                        help='The endpoint that will always be used'),
+        ])
+
+        return options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1/noauth.py 
new/keystoneauth1-4.2.1/keystoneauth1/noauth.py
--- old/keystoneauth1-4.0.0/keystoneauth1/noauth.py     2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/noauth.py     2020-08-04 
11:15:42.000000000 +0200
@@ -13,25 +13,12 @@
 from keystoneauth1 import plugin
 
 
-class NoAuth(plugin.BaseAuthPlugin):
+class NoAuth(plugin.FixedEndpointPlugin):
     """A provider that will always use no auth.
 
     This is useful to unify session/adapter loading for services
     that might be deployed in standalone/noauth mode.
     """
 
-    def __init__(self, endpoint=None):
-        super(NoAuth, self).__init__()
-        self.endpoint = endpoint
-
     def get_token(self, session, **kwargs):
         return 'notused'
-
-    def get_endpoint(self, session, **kwargs):
-        """Return the supplied endpoint.
-
-        Using this plugin the same endpoint is returned regardless of the
-        parameters passed to the plugin. endpoint_override overrides the
-        endpoint specified when constructing the plugin.
-        """
-        return kwargs.get('endpoint_override') or self.endpoint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1/plugin.py 
new/keystoneauth1-4.2.1/keystoneauth1/plugin.py
--- old/keystoneauth1-4.0.0/keystoneauth1/plugin.py     2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/plugin.py     2020-08-04 
11:15:42.000000000 +0200
@@ -149,8 +149,18 @@
         endpoint_data = self.get_endpoint_data(
             session, endpoint_override=endpoint_override,
             discover_versions=False, **kwargs)
-        if endpoint_data:
+        if endpoint_data is None:
+            return
+
+        if endpoint_data.api_version is None:
+            # No version detected from the URL, trying full discovery.
+            endpoint_data = self.get_endpoint_data(
+                session, endpoint_override=endpoint_override,
+                discover_versions=True, **kwargs)
+
+        if endpoint_data and endpoint_data.api_version:
             return endpoint_data.api_version
+
         return None
 
     def get_endpoint(self, session, **kwargs):
@@ -313,3 +323,48 @@
             feature.
         """
         raise NotImplementedError()
+
+
+class FixedEndpointPlugin(BaseAuthPlugin):
+    """A base class for plugins that have one fixed endpoint."""
+
+    def __init__(self, endpoint=None):
+        super(FixedEndpointPlugin, self).__init__()
+        self.endpoint = endpoint
+
+    def get_endpoint(self, session, **kwargs):
+        """Return the supplied endpoint.
+
+        Using this plugin the same endpoint is returned regardless of the
+        parameters passed to the plugin. endpoint_override overrides the
+        endpoint specified when constructing the plugin.
+        """
+        return kwargs.get('endpoint_override') or self.endpoint
+
+    def get_endpoint_data(self, session,
+                          endpoint_override=None,
+                          discover_versions=True,
+                          **kwargs):
+        """Return a valid endpoint data for a the service.
+
+        :param session: A session object that can be used for communication.
+        :type session: keystoneauth1.session.Session
+        :param str endpoint_override: URL to use for version discovery.
+        :param bool discover_versions: Whether to get version metadata from
+                                       the version discovery document even
+                                       if it major api version info can be
+                                       inferred from the url.
+                                       (optional, defaults to True)
+        :param kwargs: Ignored.
+
+        :raises keystoneauth1.exceptions.http.HttpError: An error from an
+                                                         invalid HTTP response.
+
+        :return: Valid EndpointData or None if not available.
+        :rtype: `keystoneauth1.discover.EndpointData` or None
+        """
+        return super(FixedEndpointPlugin, self).get_endpoint_data(
+            session,
+            endpoint_override=endpoint_override or self.endpoint,
+            discover_versions=discover_versions,
+            **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1/session.py 
new/keystoneauth1-4.2.1/keystoneauth1/session.py
--- old/keystoneauth1-4.0.0/keystoneauth1/session.py    2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/session.py    2020-08-04 
11:15:42.000000000 +0200
@@ -753,6 +753,14 @@
         else:
             split_loggers = None
         logger = logger or utils.get_logger(__name__)
+        # NOTE(gmann): Convert r initlize the headers to
+        # CaseInsensitiveDict to make sure headers are
+        # case insensitive.
+        if kwargs.get('headers'):
+            kwargs['headers'] = requests.structures.CaseInsensitiveDict(
+                kwargs['headers'])
+        else:
+            kwargs['headers'] = requests.structures.CaseInsensitiveDict()
         if connect_retries is None:
             connect_retries = self._connect_retries
         # HTTP 503 - Service Unavailable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/extras/kerberos/test_fedkerb_loading.py
 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/extras/kerberos/test_fedkerb_loading.py
--- 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/extras/kerberos/test_fedkerb_loading.py
    2020-04-02 16:32:45.000000000 +0200
+++ 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/extras/kerberos/test_fedkerb_loading.py
    2020-08-04 11:15:42.000000000 +0200
@@ -35,7 +35,7 @@
                         'mutual-auth',
                         ]
 
-        self.assertItemsEqual(allowed_opts, opts)
+        self.assertCountEqual(allowed_opts, opts)
 
     def create(self, **kwargs):
         loader = loading.get_plugin_loader('v3fedkerb')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/extras/kerberos/test_kerberos_loading.py
 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/extras/kerberos/test_kerberos_loading.py
--- 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/extras/kerberos/test_kerberos_loading.py
   2020-04-02 16:32:45.000000000 +0200
+++ 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/extras/kerberos/test_kerberos_loading.py
   2020-08-04 11:15:42.000000000 +0200
@@ -32,4 +32,4 @@
                         'mutual-auth',
                         ]
 
-        self.assertItemsEqual(allowed_opts, opts)
+        self.assertCountEqual(allowed_opts, opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/identity/test_identity_v3.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/identity/test_identity_v3.py
--- 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/identity/test_identity_v3.py   
    2020-04-02 16:32:45.000000000 +0200
+++ 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/identity/test_identity_v3.py   
    2020-08-04 11:15:42.000000000 +0200
@@ -798,3 +798,27 @@
         self.assertRequestHeaderEqual("Content-Type", "application/json")
         self.assertRequestHeaderEqual("Accept", "application/json")
         self.assertEqual(s.auth.auth_ref.auth_token, self.TEST_TOKEN)
+
+    def test_authenticate_with_unversioned_endpoint(self):
+        self.stub_auth(json=self.TEST_RESPONSE_DICT)
+        # We use the root url here because it doesn't reference the API version
+        # (e.g., '/v3'). We want to make sure the authentication plugin handles
+        # this and appends /v3 if it's not present.
+        a = v3.Password(self.TEST_ROOT_URL,
+                        username=self.TEST_USER,
+                        password=self.TEST_PASS)
+        self.assertFalse(a.has_scope_parameters)
+        s = session.Session(auth=a)
+
+        self.assertEqual({'X-Auth-Token': self.TEST_TOKEN},
+                         s.get_auth_headers())
+
+        req = {'auth': {'identity':
+               {'methods': ['password'],
+                'password': {'user': {'name': self.TEST_USER,
+                                      'password': self.TEST_PASS}}}}}
+
+        self.assertRequestBodyIs(json=req)
+        self.assertRequestHeaderEqual('Content-Type', 'application/json')
+        self.assertRequestHeaderEqual('Accept', 'application/json')
+        self.assertEqual(s.auth.auth_ref.auth_token, self.TEST_TOKEN)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/test_cli.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/test_cli.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/test_cli.py        
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/test_cli.py        
2020-08-04 11:15:42.000000000 +0200
@@ -11,10 +11,10 @@
 # under the License.
 
 import argparse
+from unittest import mock
 import uuid
 
 import fixtures
-import mock
 
 from keystoneauth1 import loading
 from keystoneauth1.loading import cli
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/test_conf.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/test_conf.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/test_conf.py       
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/test_conf.py       
2020-08-04 11:15:42.000000000 +0200
@@ -10,9 +10,9 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
+from unittest import mock
 import uuid
 
-import mock
 from oslo_config import cfg
 from oslo_config import fixture as config
 import stevedore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/test_loading.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/test_loading.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/test_loading.py    
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/test_loading.py    
2020-08-04 11:15:42.000000000 +0200
@@ -76,8 +76,8 @@
         loaders = loading.get_available_plugin_loaders()
         self.assertThat(len(loaders), matchers.GreaterThan(0))
 
-        for l in loaders.values():
-            self.assertIsInstance(l, loading.BaseLoader)
+        for loader in loaders.values():
+            self.assertIsInstance(loader, loading.BaseLoader)
 
     def test_loading_getter(self):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/utils.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/utils.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/loading/utils.py   
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/loading/utils.py   
2020-08-04 11:15:42.000000000 +0200
@@ -11,9 +11,9 @@
 # under the License.
 
 import functools
+from unittest import mock
 import uuid
 
-import mock
 
 from keystoneauth1 import loading
 from keystoneauth1.loading import base
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_betamax_fixture.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_betamax_fixture.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_betamax_fixture.py    
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_betamax_fixture.py    
2020-08-04 11:15:42.000000000 +0200
@@ -10,9 +10,10 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
+from unittest import mock
+
 import betamax
 from betamax import exceptions
-import mock
 import testtools
 
 from keystoneauth1.fixture import keystoneauth_betamax
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_betamax_hooks.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_betamax_hooks.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_betamax_hooks.py      
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_betamax_hooks.py      
2020-08-04 11:15:42.000000000 +0200
@@ -11,9 +11,9 @@
 # under the License.
 
 import json
+from unittest import mock
 
 import betamax
-import mock
 from requests import models
 import testtools
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_discovery.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_discovery.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_discovery.py  
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_discovery.py  
2020-08-04 11:15:42.000000000 +0200
@@ -12,14 +12,15 @@
 
 import json
 import re
+from unittest import mock
 
-import mock
 from testtools import matchers
 
 from keystoneauth1 import adapter
 from keystoneauth1 import discover
 from keystoneauth1 import exceptions
 from keystoneauth1 import fixture
+from keystoneauth1 import http_basic
 from keystoneauth1 import noauth
 from keystoneauth1 import session
 from keystoneauth1.tests.unit import utils
@@ -747,24 +748,81 @@
 
     def test_endpoint_data_noauth_discover(self):
         mock = self.requests_mock.get(
+            BASE_URL, status_code=200, json=V3_VERSION_LIST)
+        self.requests_mock.get(
             V3_URL, status_code=200, json=V3_VERSION_ENTRY)
+
+        plugin = noauth.NoAuth(endpoint=BASE_URL)
+        data = plugin.get_endpoint_data(self.session)
+
+        self.assertEqual(data.api_version, (3, 0))
+        self.assertEqual(data.url, V3_URL)
+        self.assertEqual(plugin.get_api_major_version(self.session), (3, 0))
+        self.assertEqual(plugin.get_endpoint(self.session), BASE_URL)
+
+        self.assertTrue(mock.called_once)
+
+    def test_endpoint_data_noauth_versioned_discover(self):
+        self.requests_mock.get(
+            BASE_URL, status_code=200, json=V3_VERSION_LIST)
+        self.requests_mock.get(
+            V3_URL, status_code=200, json=V3_VERSION_ENTRY)
+
+        plugin = noauth.NoAuth(endpoint=V3_URL)
+        data = plugin.get_endpoint_data(self.session)
+
+        self.assertEqual(data.api_version, (3, 0))
+        self.assertEqual(data.url, V3_URL)
+        self.assertEqual(plugin.get_api_major_version(self.session), (3, 0))
+        self.assertEqual(plugin.get_endpoint(self.session), V3_URL)
+
+    def test_endpoint_data_noauth_no_discover(self):
+        plugin = noauth.NoAuth(endpoint=V3_URL)
+        data = plugin.get_endpoint_data(
+            self.session, discover_versions=False)
+
+        self.assertEqual(data.api_version, (3, 0))
+        self.assertEqual(data.url, V3_URL)
+        self.assertEqual(plugin.get_api_major_version(self.session), (3, 0))
+        self.assertEqual(plugin.get_endpoint(self.session), V3_URL)
+
+    def test_endpoint_data_noauth_override_no_discover(self):
         plugin = noauth.NoAuth()
-        data = plugin.get_endpoint_data(self.session, endpoint_override=V3_URL)
+        data = plugin.get_endpoint_data(
+            self.session, endpoint_override=V3_URL, discover_versions=False)
 
         self.assertEqual(data.api_version, (3, 0))
         self.assertEqual(data.url, V3_URL)
         self.assertEqual(
-            plugin.get_api_major_version(
-                self.session, endpoint_override=V3_URL),
-            (3, 0))
-        self.assertEqual(
             plugin.get_endpoint(self.session, endpoint_override=V3_URL),
             V3_URL)
 
-        self.assertTrue(mock.called_once)
+    def test_endpoint_data_http_basic_discover(self):
+        self.requests_mock.get(
+            BASE_URL, status_code=200, json=V3_VERSION_LIST)
+        self.requests_mock.get(
+            V3_URL, status_code=200, json=V3_VERSION_ENTRY)
 
-    def test_endpoint_data_noauth_no_discover(self):
-        plugin = noauth.NoAuth()
+        plugin = http_basic.HTTPBasicAuth(endpoint=V3_URL)
+        data = plugin.get_endpoint_data(self.session)
+
+        self.assertEqual(data.api_version, (3, 0))
+        self.assertEqual(data.url, V3_URL)
+        self.assertEqual(plugin.get_api_major_version(self.session), (3, 0))
+        self.assertEqual(plugin.get_endpoint(self.session), V3_URL)
+
+    def test_endpoint_data_http_basic_no_discover(self):
+        plugin = http_basic.HTTPBasicAuth(endpoint=V3_URL)
+        data = plugin.get_endpoint_data(
+            self.session, discover_versions=False)
+
+        self.assertEqual(data.api_version, (3, 0))
+        self.assertEqual(data.url, V3_URL)
+        self.assertEqual(plugin.get_api_major_version(self.session), (3, 0))
+        self.assertEqual(plugin.get_endpoint(self.session), V3_URL)
+
+    def test_endpoint_data_http_basic_override_no_discover(self):
+        plugin = http_basic.HTTPBasicAuth()
         data = plugin.get_endpoint_data(
             self.session, endpoint_override=V3_URL, discover_versions=False)
 
@@ -779,6 +837,22 @@
             V3_URL)
 
     def test_endpoint_data_noauth_adapter(self):
+        self.requests_mock.get(
+            BASE_URL, status_code=200, json=V3_VERSION_LIST)
+        self.requests_mock.get(
+            V3_URL, status_code=200, json=V3_VERSION_ENTRY)
+
+        client = adapter.Adapter(
+            session.Session(noauth.NoAuth()),
+            endpoint_override=BASE_URL)
+        data = client.get_endpoint_data()
+
+        self.assertEqual(data.api_version, (3, 0))
+        self.assertEqual(data.url, V3_URL)
+        self.assertEqual(client.get_api_major_version(), (3, 0))
+        self.assertEqual(client.get_endpoint(), BASE_URL)
+
+    def test_endpoint_data_noauth_versioned_adapter(self):
         mock = self.requests_mock.get(
             V3_URL, status_code=200, json=V3_VERSION_ENTRY)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_fair_sempahore.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_fair_sempahore.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_fair_sempahore.py     
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_fair_sempahore.py     
2020-08-04 11:15:42.000000000 +0200
@@ -12,8 +12,8 @@
 
 from threading import Thread
 from timeit import default_timer as timer
+from unittest import mock
 
-import mock
 from six.moves import queue
 import testtools
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_hacking_checks.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_hacking_checks.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_hacking_checks.py     
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_hacking_checks.py     
2020-08-04 11:15:42.000000000 +0200
@@ -11,8 +11,8 @@
 # under the License.
 
 import textwrap
+from unittest import mock
 
-import mock
 import pycodestyle
 import testtools
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_http_basic.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_http_basic.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_http_basic.py 
1970-01-01 01:00:00.000000000 +0100
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_http_basic.py 
2020-08-04 11:15:42.000000000 +0200
@@ -0,0 +1,49 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from keystoneauth1 import http_basic
+from keystoneauth1.loading._plugins import http_basic as loader
+from keystoneauth1 import session
+from keystoneauth1.tests.unit import utils
+
+
+class HTTPBasicAuthTest(utils.TestCase):
+
+    TEST_URL = 'http://server/prefix'
+
+    def test_basic_case(self):
+        self.requests_mock.get(self.TEST_URL, text='body')
+
+        a = http_basic.HTTPBasicAuth(username='myName', password='myPassword')
+        s = session.Session(auth=a)
+
+        data = s.get(self.TEST_URL, authenticated=True)
+
+        self.assertEqual(data.text, 'body')
+        self.assertRequestHeaderEqual(
+            'Authorization', 'Basic bXlOYW1lOm15UGFzc3dvcmQ=')
+        self.assertIsNone(a.get_endpoint(s))
+
+    def test_basic_options(self):
+        opts = loader.HTTPBasicAuth().get_options()
+        self.assertEqual(['username', 'password', 'endpoint'],
+                         [o.name for o in opts])
+
+    def test_get_endpoint(self):
+        a = http_basic.HTTPBasicAuth(endpoint=self.TEST_URL)
+        s = session.Session(auth=a)
+        self.assertEqual(self.TEST_URL, a.get_endpoint(s))
+
+    def test_get_endpoint_with_override(self):
+        a = http_basic.HTTPBasicAuth(endpoint=self.TEST_URL)
+        s = session.Session(auth=a)
+        self.assertEqual('foo', a.get_endpoint(s, endpoint_override='foo'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_session.py 
new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_session.py
--- old/keystoneauth1-4.0.0/keystoneauth1/tests/unit/test_session.py    
2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1/tests/unit/test_session.py    
2020-08-04 11:15:42.000000000 +0200
@@ -15,9 +15,9 @@
 import json
 import logging
 import sys
+from unittest import mock
 import uuid
 
-import mock
 from oslo_utils import encodeutils
 import requests
 import requests.auth
@@ -978,7 +978,7 @@
         mock_close = mock.Mock()
         sess._session.close = mock_close
         del sess
-        mock_close.assert_called_once()
+        self.assertEqual(1, mock_close.call_count)
 
     def test_service_type_urls(self):
         service_type = 'compute'
@@ -1822,7 +1822,7 @@
             with mock.patch.object(sess, 'request') as m:
                 adapter.Adapter(sess, **adap_kwargs).get(url, **get_kwargs)
                 m.assert_called_once_with(url, 'GET', endpoint_filter={},
-                                          rate_semaphore=mock.ANY,
+                                          headers={}, rate_semaphore=mock.ANY,
                                           **exp_kwargs)
 
         # No default_microversion in Adapter, no microversion in get()
@@ -1846,7 +1846,7 @@
             with mock.patch.object(sess, 'request') as m:
                 adapter.Adapter(sess, **adap_kwargs).get(url, **get_kwargs)
                 m.assert_called_once_with(url, 'GET', endpoint_filter={},
-                                          rate_semaphore=mock.ANY,
+                                          headers={}, rate_semaphore=mock.ANY,
                                           **exp_kwargs)
 
         # No raise_exc in Adapter or get()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1.egg-info/PKG-INFO 
new/keystoneauth1-4.2.1/keystoneauth1.egg-info/PKG-INFO
--- old/keystoneauth1-4.0.0/keystoneauth1.egg-info/PKG-INFO     2020-04-02 
16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1.egg-info/PKG-INFO     2020-08-04 
11:17:27.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: keystoneauth1
-Version: 4.0.0
+Version: 4.2.1
 Summary: Authentication Library for OpenStack Identity
 Home-page: https://docs.openstack.org/keystoneauth/latest/
 Author: OpenStack
@@ -51,11 +51,15 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Requires-Python: >=3.6
+Provides-Extra: betamax
 Provides-Extra: kerberos
-Provides-Extra: saml2
 Provides-Extra: oauth1
-Provides-Extra: betamax
+Provides-Extra: saml2
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1.egg-info/SOURCES.txt 
new/keystoneauth1-4.2.1/keystoneauth1.egg-info/SOURCES.txt
--- old/keystoneauth1-4.0.0/keystoneauth1.egg-info/SOURCES.txt  2020-04-02 
16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1.egg-info/SOURCES.txt  2020-08-04 
11:17:27.000000000 +0200
@@ -34,6 +34,7 @@
 keystoneauth1/_utils.py
 keystoneauth1/adapter.py
 keystoneauth1/discover.py
+keystoneauth1/http_basic.py
 keystoneauth1/noauth.py
 keystoneauth1/plugin.py
 keystoneauth1/service_token.py
@@ -116,6 +117,7 @@
 keystoneauth1/loading/session.py
 keystoneauth1/loading/_plugins/__init__.py
 keystoneauth1/loading/_plugins/admin_token.py
+keystoneauth1/loading/_plugins/http_basic.py
 keystoneauth1/loading/_plugins/noauth.py
 keystoneauth1/loading/_plugins/identity/__init__.py
 keystoneauth1/loading/_plugins/identity/generic.py
@@ -135,6 +137,7 @@
 keystoneauth1/tests/unit/test_fair_sempahore.py
 keystoneauth1/tests/unit/test_fixtures.py
 keystoneauth1/tests/unit/test_hacking_checks.py
+keystoneauth1/tests/unit/test_http_basic.py
 keystoneauth1/tests/unit/test_matchers.py
 keystoneauth1/tests/unit/test_noauth.py
 keystoneauth1/tests/unit/test_service_token.py
@@ -209,6 +212,7 @@
 releasenotes/notes/additional-headers-f2d16f85f5abe942.yaml
 releasenotes/notes/allow_version_hack-flag-9b53b72d9b084c04.yaml
 releasenotes/notes/api-sig-error-guideline-handler.yaml
+releasenotes/notes/basic-http-auth-45bea4298209df75.yaml
 releasenotes/notes/bp-application-credentials-416a1f8bb2311e04.yaml
 releasenotes/notes/bp-system-scope-29e9c597039ddb1e.yaml
 releasenotes/notes/bug-1582774-49af731b6dfc6f2f.yaml
@@ -220,11 +224,13 @@
 releasenotes/notes/bug-1766235wq-0de60d0f996c6bfb.yaml
 releasenotes/notes/bug-1839748-5d8dfc99c43aaefc.yaml
 releasenotes/notes/bug-1840235-ef2946d149ac329c.yaml
+releasenotes/notes/bug-1876317-1db97d1b12a3e4b4.yaml
 releasenotes/notes/cache-trailing-slash-3663c86cd9754379.yaml
 releasenotes/notes/cleanup-session-on-delete-1ed6177d4c5c1f83.yaml
 releasenotes/notes/client-side-rate-limiting-dec43fc9b54f5b70.yaml
 releasenotes/notes/collect-timing-85f007f0d86c8b26.yaml
 releasenotes/notes/drop-py-2-7-f90c67a5db0dfeb8.yaml
+releasenotes/notes/drop-python-3.5-362bb9d47f830353.yaml
 releasenotes/notes/expose-endpoint-status-6195a6b76d8a8de8.yaml
 releasenotes/notes/filter-versions-service-type-763af68092344b7a.yaml
 releasenotes/notes/fix-get-all-version-data-a01ee58524755b9b.yaml
@@ -234,6 +240,7 @@
 releasenotes/notes/ironic-microversions-a69bf92ab21f0cf5.yaml
 releasenotes/notes/ksa_2.2.0-81145229d4b43043.yaml
 releasenotes/notes/microversion-header-support-901acd820a21d788.yaml
+releasenotes/notes/noauth-discovery-c26d82a32c36d41d.yaml
 releasenotes/notes/none-auth-dab13ab9af6f5c86.yaml
 releasenotes/notes/oslo-config-split-loggers-6bda266d657fe921.yaml
 releasenotes/notes/retries-limit-dbaedcb3207934ae.yaml
@@ -256,5 +263,6 @@
 releasenotes/source/stein.rst
 releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
+releasenotes/source/ussuri.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1.egg-info/entry_points.txt 
new/keystoneauth1-4.2.1/keystoneauth1.egg-info/entry_points.txt
--- old/keystoneauth1-4.0.0/keystoneauth1.egg-info/entry_points.txt     
2020-04-02 16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1.egg-info/entry_points.txt     
2020-08-04 11:17:27.000000000 +0200
@@ -1,5 +1,6 @@
 [keystoneauth1.plugin]
 admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken
+http_basic = keystoneauth1.loading._plugins.http_basic:HTTPBasicAuth
 none = keystoneauth1.loading._plugins.noauth:NoAuth
 password = keystoneauth1.loading._plugins.identity.generic:Password
 token = keystoneauth1.loading._plugins.identity.generic:Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/keystoneauth1.egg-info/pbr.json 
new/keystoneauth1-4.2.1/keystoneauth1.egg-info/pbr.json
--- old/keystoneauth1-4.0.0/keystoneauth1.egg-info/pbr.json     2020-04-02 
16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1.egg-info/pbr.json     2020-08-04 
11:17:27.000000000 +0200
@@ -1 +1 @@
-{"git_version": "c096099", "is_release": true}
\ No newline at end of file
+{"git_version": "c2d2e7a", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/keystoneauth1.egg-info/requires.txt 
new/keystoneauth1-4.2.1/keystoneauth1.egg-info/requires.txt
--- old/keystoneauth1-4.0.0/keystoneauth1.egg-info/requires.txt 2020-04-02 
16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/keystoneauth1.egg-info/requires.txt 2020-08-04 
11:17:27.000000000 +0200
@@ -1,9 +1,9 @@
-pbr!=2.1.0,>=2.0.0
 iso8601>=0.1.11
+os-service-types>=1.2.0
+pbr!=2.1.0,>=2.0.0
 requests>=2.14.2
 six>=1.10.0
 stevedore>=1.20.0
-os-service-types>=1.2.0
 
 [betamax]
 betamax>=0.7.0
@@ -17,27 +17,26 @@
 oauthlib>=0.6.2
 
 [saml2]
-lxml!=3.7.0,>=3.4.1
+lxml>=4.2.0
 
 [test]
-hacking<3.1.0,>=3.0
-flake8-docstrings==0.2.1.post1
-flake8-import-order>=0.17.1
+PyYAML>=3.12
 bandit<1.6.0,>=1.1.0
+betamax>=0.7.0
 coverage!=4.4,>=4.0
 fixtures>=3.0.0
-mock>=2.0.0
+flake8-docstrings==0.2.1.post1
+flake8-import-order>=0.17.1
+hacking<3.1.0,>=3.0.1
+lxml>=4.2.0
+oauthlib>=0.6.2
 oslo.config>=5.2.0
-openstackdocstheme>=1.18.1
 oslo.utils>=3.33.0
 oslotest>=3.2.0
-betamax>=0.7.0
-reno>=2.5.0
+pycodestyle<2.6.0,>=2.0.0
+reno>=3.1.0
+requests-kerberos>=0.8.0
 requests-mock>=1.2.0
 stestr>=1.0.0
 testresources>=2.0.0
 testtools>=2.2.0
-PyYAML>=3.12
-requests-kerberos>=0.8.0
-lxml!=3.7.0,>=3.4.1
-oauthlib>=0.6.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/lower-constraints.txt 
new/keystoneauth1-4.2.1/lower-constraints.txt
--- old/keystoneauth1-4.0.0/lower-constraints.txt       2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/lower-constraints.txt       2020-08-04 
11:15:42.000000000 +0200
@@ -1,67 +1,48 @@
-alabaster==0.7.10
 appdirs==1.4.3
-Babel==2.5.3
+Babel==2.8.0
 bandit==1.1.0
 betamax==0.7.0
 certifi==2018.1.18
-chardet==3.0.4
-cliff==2.11.0
-cmd2==0.8.1
 coverage==4.0
 debtcollector==1.19.0
-docutils==0.14
 dulwich==0.19.0
+entrypoints==0.3
 extras==1.0.0
 fixtures==3.0.0
 future==0.16.0
 gitdb2==2.0.3
 GitPython==2.1.8
-idna==2.6
-imagesize==1.0.0
 iso8601==0.1.11
-Jinja2==2.10
 linecache2==1.0.0
-lxml==3.4.1
-MarkupSafe==1.0
-mccabe==0.2.1
+lxml==4.2.0
 mock==2.0.0
 monotonic==1.4
 mox3==0.25.0
 netaddr==0.7.19
 netifaces==0.10.6
 oauthlib==0.6.2
-openstack-requirements==1.2.0
-openstackdocstheme==1.18.1
 os-client-config==1.29.0
 os-service-types==1.2.0
 oslo.config==5.2.0
 oslo.i18n==3.20.0
 oslo.utils==3.33.0
 oslotest==3.2.0
-packaging==17.1
-Parsley==1.3
 pbr==2.0.0
 pep257==0.7.0
-prettytable==0.7.2
-pycodestyle==2.3.1
-Pygments==2.2.0
+pykerberos==1.2.1
 pyparsing==2.2.0
-pyperclip==1.6.0
 python-mimeparse==1.6.0
 python-subunit==1.2.0
 pytz==2018.3
 PyYAML==3.12
-reno==2.5.0
+reno==3.1.0
+requests==2.14.2
 requests-kerberos==0.8.0
 requests-mock==1.2.0
-requests==2.14.2
 requestsexceptions==1.4.0
 rfc3986==1.1.0
 six==1.10.0
 smmap2==2.0.3
-snowballstemmer==1.2.1
-Sphinx==1.6.2
-sphinxcontrib-websupport==1.0.1
 stestr==1.0.0
 stevedore==1.20.0
 testrepository==0.0.20
@@ -70,5 +51,4 @@
 traceback2==1.4.0
 unittest2==1.1.0
 urllib3==1.22
-voluptuous==0.11.1
 wrapt==1.10.11
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/releasenotes/notes/basic-http-auth-45bea4298209df75.yaml
 
new/keystoneauth1-4.2.1/releasenotes/notes/basic-http-auth-45bea4298209df75.yaml
--- 
old/keystoneauth1-4.0.0/releasenotes/notes/basic-http-auth-45bea4298209df75.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystoneauth1-4.2.1/releasenotes/notes/basic-http-auth-45bea4298209df75.yaml
    2020-08-04 11:15:42.000000000 +0200
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    A new ``http_basic`` auth plugin is added which enables HTTP Basic
+    authentication for standalone services. Like the ``noauth`` plugin, the
+    ``endpoint`` needs to be specified explicitly, along with the
+    ``username`` and ``password``.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/releasenotes/notes/bug-1876317-1db97d1b12a3e4b4.yaml 
new/keystoneauth1-4.2.1/releasenotes/notes/bug-1876317-1db97d1b12a3e4b4.yaml
--- 
old/keystoneauth1-4.0.0/releasenotes/notes/bug-1876317-1db97d1b12a3e4b4.yaml    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystoneauth1-4.2.1/releasenotes/notes/bug-1876317-1db97d1b12a3e4b4.yaml    
    2020-08-04 11:15:42.000000000 +0200
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    [`bug 1876317 <https://bugs.launchpad.net/keystoneauth/+bug/1876317>`_]
+    The v3 authentication plugins now attempt to add /v3 to the token path if
+    it's not present on the authentication URL.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/releasenotes/notes/drop-python-3.5-362bb9d47f830353.yaml
 
new/keystoneauth1-4.2.1/releasenotes/notes/drop-python-3.5-362bb9d47f830353.yaml
--- 
old/keystoneauth1-4.0.0/releasenotes/notes/drop-python-3.5-362bb9d47f830353.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystoneauth1-4.2.1/releasenotes/notes/drop-python-3.5-362bb9d47f830353.yaml
    2020-08-04 11:15:42.000000000 +0200
@@ -0,0 +1,4 @@
+---
+upgrade:
+  - |
+    Python 3.5 is no longer supported.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystoneauth1-4.0.0/releasenotes/notes/noauth-discovery-c26d82a32c36d41d.yaml
 
new/keystoneauth1-4.2.1/releasenotes/notes/noauth-discovery-c26d82a32c36d41d.yaml
--- 
old/keystoneauth1-4.0.0/releasenotes/notes/noauth-discovery-c26d82a32c36d41d.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystoneauth1-4.2.1/releasenotes/notes/noauth-discovery-c26d82a32c36d41d.yaml
   2020-08-04 11:15:42.000000000 +0200
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    Fixes ``get_api_major_version`` for non-keystone authentication methods
+    when the provided endpoint is not versioned.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/releasenotes/source/conf.py 
new/keystoneauth1-4.2.1/releasenotes/source/conf.py
--- old/keystoneauth1-4.0.0/releasenotes/source/conf.py 2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/releasenotes/source/conf.py 2020-08-04 
11:15:42.000000000 +0200
@@ -97,7 +97,7 @@
 # show_authors = False
 
 # The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = 'native'
 
 # A list of ignored prefixes for module index sorting.
 # modindex_common_prefix = []
@@ -146,11 +146,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 = '%b %d, %Y'
-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
@@ -278,6 +273,7 @@
 locale_dirs = ['locale/']
 
 # -- Options for openstackdocstheme -------------------------------------------
-repository_name = 'openstack/keystoneauth'
-bug_project = 'keystoneauth'
-bug_tag = 'doc'
+openstackdocs_repo_name = 'openstack/keystoneauth'
+openstackdocs_auto_name = False
+openstackdocs_bug_project = 'keystoneauth'
+openstackdocs_bug_tag = 'doc'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/releasenotes/source/index.rst 
new/keystoneauth1-4.2.1/releasenotes/source/index.rst
--- old/keystoneauth1-4.0.0/releasenotes/source/index.rst       2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/releasenotes/source/index.rst       2020-08-04 
11:15:42.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   ussuri
    train
    stein
    rocky
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/releasenotes/source/ussuri.rst 
new/keystoneauth1-4.2.1/releasenotes/source/ussuri.rst
--- old/keystoneauth1-4.0.0/releasenotes/source/ussuri.rst      1970-01-01 
01:00:00.000000000 +0100
+++ new/keystoneauth1-4.2.1/releasenotes/source/ussuri.rst      2020-08-04 
11:15:42.000000000 +0200
@@ -0,0 +1,6 @@
+===========================
+Ussuri Series Release Notes
+===========================
+
+.. release-notes::
+   :branch: stable/ussuri
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/setup.cfg 
new/keystoneauth1-4.2.1/setup.cfg
--- old/keystoneauth1-4.0.0/setup.cfg   2020-04-02 16:34:05.000000000 +0200
+++ new/keystoneauth1-4.2.1/setup.cfg   2020-08-04 11:17:27.000000000 +0200
@@ -6,6 +6,7 @@
 author = OpenStack
 author-email = openstack-disc...@lists.openstack.org
 home-page = https://docs.openstack.org/keystoneauth/latest/
+python-requires = >=3.6
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
@@ -13,9 +14,12 @@
        License :: OSI Approved :: Apache Software License
        Operating System :: POSIX :: Linux
        Programming Language :: Python
+       Programming Language :: Python :: Implementation :: CPython
+       Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
+       Programming Language :: Python :: 3.8
 
 [files]
 packages = 
@@ -25,7 +29,7 @@
 kerberos = 
        requests-kerberos>=0.8.0 # ISC
 saml2 = 
-       lxml!=3.7.0,>=3.4.1 # BSD
+       lxml>=4.2.0 # BSD
 oauth1 = 
        oauthlib>=0.6.2 # BSD
 betamax = 
@@ -36,6 +40,7 @@
 [entry_points]
 keystoneauth1.plugin = 
        none = keystoneauth1.loading._plugins.noauth:NoAuth
+       http_basic = keystoneauth1.loading._plugins.http_basic:HTTPBasicAuth
        password = keystoneauth1.loading._plugins.identity.generic:Password
        token = keystoneauth1.loading._plugins.identity.generic:Token
        admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken
@@ -57,19 +62,6 @@
        v3applicationcredential = 
keystoneauth1.loading._plugins.identity.v3:ApplicationCredential
        v3multifactor = keystoneauth1.loading._plugins.identity.v3:MultiFactor
 
-[build_sphinx]
-source-dir = doc/source
-build-dir = doc/build
-all_files = 1
-warning-is-error = 1
-
-[pbr]
-autodoc_tree_index_modules = True
-autodoc_tree_excludes = setup.py
-
-[upload_sphinx]
-upload-dir = doc/build/html
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystoneauth1-4.0.0/setup.py 
new/keystoneauth1-4.2.1/setup.py
--- old/keystoneauth1-4.0.0/setup.py    2020-04-02 16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/setup.py    2020-08-04 11:15:42.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/keystoneauth1-4.0.0/test-requirements.txt 
new/keystoneauth1-4.2.1/test-requirements.txt
--- old/keystoneauth1-4.0.0/test-requirements.txt       2020-04-02 
16:32:45.000000000 +0200
+++ new/keystoneauth1-4.2.1/test-requirements.txt       2020-08-04 
11:15:42.000000000 +0200
@@ -2,25 +2,24 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-hacking>=3.0,<3.1.0 # Apache-2.0
+hacking>=3.0.1,<3.1.0 # Apache-2.0
 flake8-docstrings==0.2.1.post1 # MIT
 flake8-import-order>=0.17.1 #LGPLv3
+pycodestyle>=2.0.0,<2.6.0 # MIT
 
 bandit<1.6.0,>=1.1.0 # Apache-2.0
 coverage!=4.4,>=4.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
-mock>=2.0.0 # BSD
 oslo.config>=5.2.0 # Apache-2.0
-openstackdocstheme>=1.18.1 # Apache-2.0
 oslo.utils>=3.33.0 # Apache-2.0
 oslotest>=3.2.0 # Apache-2.0
 betamax>=0.7.0 # Apache-2.0
-reno>=2.5.0 # Apache-2.0
+reno>=3.1.0 # Apache-2.0
 requests-mock>=1.2.0 # Apache-2.0
 stestr>=1.0.0 # Apache-2.0
 testresources>=2.0.0 # Apache-2.0/BSD
 testtools>=2.2.0 # MIT
 PyYAML>=3.12 # MIT
 requests-kerberos>=0.8.0 # ISC
-lxml!=3.7.0,>=3.4.1 # BSD
+lxml>=4.2.0 # BSD
 oauthlib>=0.6.2 # BSD


Reply via email to