Hello community,

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

Package is "python-keystonemiddleware"

Fri Jun  5 20:10:41 2020 rev:11 rq:803568 version:9.0.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-keystonemiddleware/python-keystonemiddleware.changes
      2020-03-24 22:32:20.153089099 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-keystonemiddleware.new.3606/python-keystonemiddleware.changes
    2020-06-05 20:13:53.970469400 +0200
@@ -1,0 +2,22 @@
+Tue May 12 09:58:47 UTC 2020 - [email protected]
+
+- update to version 9.0.0
+  - Update master for stable/train
+  - Rename _v3_to_v2_catalog to _normalize_catalog
+  - Make tests pass in 2022
+  - Change ec2 URLs to v3
+  - Switch to Ussuri jobs
+  - Have middlewarearchitecture doc reference auth_type option
+  - Update invalid link for README
+  - Remove v2.0 functionality
+  - Update hacking for Python3
+  - [ussuri][goal] Drop python 2.7 support and testing
+  - Fix DeprecationWarning: invalid escape sequence issues
+  - Imported Translations from Zanata
+  - Remove universal wheel configuration
+  - Remove keystoneclient exception usage in tests
+  - Fix misspell word
+  - Update the constraints url
+  - Generate pdf documentation
+
+-------------------------------------------------------------------

Old:
----
  keystonemiddleware-7.0.1.tar.gz

New:
----
  keystonemiddleware-9.0.0.tar.gz

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

Other differences:
------------------
++++++ python-keystonemiddleware.spec ++++++
--- /var/tmp/diff_new_pack.urhJbu/_old  2020-06-05 20:13:54.750472270 +0200
+++ /var/tmp/diff_new_pack.urhJbu/_new  2020-06-05 20:13:54.754472284 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-keystonemiddleware
-Version:        7.0.1
+Version:        9.0.0
 Release:        0
 Summary:        Middleware for OpenStack Identity
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/keystonemiddleware
-Source0:        
https://files.pythonhosted.org/packages/source/k/keystonemiddleware/keystonemiddleware-7.0.1.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/k/keystonemiddleware/keystonemiddleware-9.0.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-WebOb >= 1.7.1
 BuildRequires:  python3-WebTest
@@ -90,12 +90,13 @@
 BuildRequires:  python3-Sphinx
 BuildRequires:  python3-openstackdocstheme
 BuildRequires:  python3-sphinxcontrib-apidoc
+BuildRequires:  python3-sphinxcontrib-svg2pdfconverter
 
 %description -n python-keystonemiddleware-doc
 Documentation for Middleware for OpenStack Identity.
 
 %prep
-%autosetup -p1 -n keystonemiddleware-7.0.1
+%autosetup -p1 -n keystonemiddleware-9.0.0
 %py_req_cleanup
 
 %build

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

++++++ keystonemiddleware-7.0.1.tar.gz -> keystonemiddleware-9.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/.zuul.yaml 
new/keystonemiddleware-9.0.0/.zuul.yaml
--- old/keystonemiddleware-7.0.1/.zuul.yaml     2019-09-06 18:59:56.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/.zuul.yaml     2020-04-02 16:27:38.000000000 
+0200
@@ -2,10 +2,8 @@
     templates:
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
-      - openstack-python-jobs
-      - openstack-python3-train-jobs
+      - openstack-python3-ussuri-jobs
       - publish-openstack-docs-pti
       - check-requirements
-      - lib-forward-testing
       - lib-forward-testing-python3
       - release-notes-jobs-python3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/AUTHORS 
new/keystonemiddleware-9.0.0/AUTHORS
--- old/keystonemiddleware-7.0.1/AUTHORS        2019-09-06 19:01:24.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/AUTHORS        2020-04-02 16:29:05.000000000 
+0200
@@ -14,6 +14,8 @@
 Anthony Young <[email protected]>
 Artem Vasilyev <[email protected]>
 Arun Kant <[email protected]>
+Ben Nemec <[email protected]>
+Bernhard M. Wiedemann <[email protected]>
 Boris Bobrov <[email protected]>
 Boris Bobrov <[email protected]>
 Brad Pokorny <[email protected]>
@@ -130,6 +132,7 @@
 Pete Zaitcev <[email protected]>
 Peter Portante <[email protected]>
 Pádraig Brady <[email protected]>
+Q.hongtao <[email protected]>
 Qiu Yu <[email protected]>
 Rafael Durán Castañeda <[email protected]>
 Rodrigo Duarte Sousa <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/ChangeLog 
new/keystonemiddleware-9.0.0/ChangeLog
--- old/keystonemiddleware-7.0.1/ChangeLog      2019-09-06 19:01:24.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/ChangeLog      2020-04-02 16:29:05.000000000 
+0200
@@ -1,6 +1,31 @@
 CHANGES
 =======
 
+9.0.0
+-----
+
+* Update hacking for Python3
+* Have middlewarearchitecture doc reference auth\_type option
+* Remove universal wheel configuration
+* [ussuri][goal] Drop python 2.7 support and testing
+* Imported Translations from Zanata
+
+8.0.0
+-----
+
+* Rename \_v3\_to\_v2\_catalog to \_normalize\_catalog
+* Change ec2 URLs to v3
+* Remove v2.0 functionality
+* Remove keystoneclient exception usage in tests
+* Fix DeprecationWarning: invalid escape sequence issues
+* Switch to Ussuri jobs
+* Generate pdf documentation
+* Update master for stable/train
+* Update the constraints url
+* Update invalid link for README
+* Make tests pass in 2022
+* Fix misspell word
+
 7.0.1
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/PKG-INFO 
new/keystonemiddleware-9.0.0/PKG-INFO
--- old/keystonemiddleware-7.0.1/PKG-INFO       2019-09-06 19:01:25.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/PKG-INFO       2020-04-02 16:29:05.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: keystonemiddleware
-Version: 7.0.1
+Version: 9.0.0
 Summary: Middleware for OpenStack Identity
 Home-page: https://docs.openstack.org/keystonemiddleware/latest/
 Author: OpenStack
@@ -36,7 +36,7 @@
         
         * License: Apache License, Version 2.0
         * Documentation: https://docs.openstack.org/keystonemiddleware/latest/
-        * Source: https://git.openstack.org/cgit/openstack/keystonemiddleware
+        * Source: https://opendev.org/openstack/keystonemiddleware
         * Bugs: https://bugs.launchpad.net/keystonemiddleware
         * Release notes: 
https://docs.openstack.org/releasenotes/keystonemiddleware/
         
@@ -52,8 +52,6 @@
 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/README.rst 
new/keystonemiddleware-9.0.0/README.rst
--- old/keystonemiddleware-7.0.1/README.rst     2019-09-06 18:59:56.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/README.rst     2020-04-02 16:27:38.000000000 
+0200
@@ -28,7 +28,7 @@
 
 * License: Apache License, Version 2.0
 * Documentation: https://docs.openstack.org/keystonemiddleware/latest/
-* Source: https://git.openstack.org/cgit/openstack/keystonemiddleware
+* Source: https://opendev.org/openstack/keystonemiddleware
 * Bugs: https://bugs.launchpad.net/keystonemiddleware
 * Release notes: https://docs.openstack.org/releasenotes/keystonemiddleware/
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/doc/requirements.txt 
new/keystonemiddleware-9.0.0/doc/requirements.txt
--- old/keystonemiddleware-7.0.1/doc/requirements.txt   2019-09-06 
18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/doc/requirements.txt   2020-04-02 
16:27:38.000000000 +0200
@@ -6,10 +6,12 @@
 doc8>=0.6.0 # Apache-2.0
 openstackdocstheme>=1.20.0 # Apache-2.0
 reno>=2.5.0 # Apache-2.0
-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
 sphinxcontrib-apidoc>=0.2.0  # BSD
 
+# PDF Docs
+sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD
+
 # For autodoc builds
 mock>=2.0.0 # BSD
 oslotest>=3.2.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/doc/source/conf.py 
new/keystonemiddleware-9.0.0/doc/source/conf.py
--- old/keystonemiddleware-7.0.1/doc/source/conf.py     2019-09-06 
18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/doc/source/conf.py     2020-04-02 
16:27:38.000000000 +0200
@@ -42,6 +42,7 @@
               'openstackdocstheme',
               'oslo_config.sphinxconfiggen',
               'sphinxcontrib.apidoc',
+              'sphinxcontrib.rsvgconverter',
              ]
 
 # sphinxcontrib.apidoc options
@@ -200,12 +201,24 @@
 # (source start file, target name, title, author, documentclass [howto/manual])
 # .
 latex_documents = [
-    ('index', 'keystonmiddleware.tex',
-     'keystonemiddleware Documentation',
-     'Nebula Inc, based on work by Rackspace and Jacob Kaplan-Moss',
+    ('index', 'doc-keystonemiddleware.tex',
+     u'keystonemiddleware Documentation',
+     u'Openstack Developers',
      'manual'),
 ]
 
+# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
+latex_use_xindy = False
+
+latex_domain_indices = False
+
+latex_elements = {
+    'extraclassoptions': 'openany',
+    'makeindex': '',
+    'printindex': '',
+    'preamble': r'\setcounter{tocdepth}{3}',
+    'maxlistdepth': 10,
+}
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
 #latex_logo = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/doc/source/middlewarearchitecture.rst 
new/keystonemiddleware-9.0.0/doc/source/middlewarearchitecture.rst
--- old/keystonemiddleware-7.0.1/doc/source/middlewarearchitecture.rst  
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/doc/source/middlewarearchitecture.rst  
2020-04-02 16:27:38.000000000 +0200
@@ -129,7 +129,7 @@
 
 .. literalinclude:: _static/keystonemiddleware.conf.sample
 
-If the ``auth_plugin`` configuration option is set, you may need to refer to
+If the ``auth_type`` configuration option is set, you may need to refer to
 the `Authentication Plugins <https://docs.openstack.org/keystoneauth/latest/
 authentication-plugins.html>`_ document for how to configure the auth_token
 middleware.
@@ -163,12 +163,12 @@
     to use options in the [keystone_authtoken] section.
 
 The following is an example of a service's auth_token middleware configuration
-when ``auth_plugin`` is set to ``password``.
+when ``auth_type`` is set to ``password``.
 
 .. code-block:: ini
 
     [keystone_authtoken]
-    auth_plugin = password
+    auth_type = password
     project_domain_name = Default
     project_name = service
     user_domain_name = Default
@@ -178,9 +178,9 @@
     auth_url = http://127.0.0.1:5000
     # Any of the options that could be set in api-paste.ini can be set here.
 
-If using an ``auth_plugin``, connection to the Identity service will be
+If using an ``auth_type``, connection to the Identity service will be
 established on the ``interface`` as registered in the service catalog.
-In the case where you are using an ``auth_plugin`` and have multiple regions,
+In the case where you are using an ``auth_type`` and have multiple regions,
 also specify the ``region_name`` option to fetch the correct endpoint.
 
 If the service doesn't use the global oslo.config object (CONF), then the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/_common/config.py 
new/keystonemiddleware-9.0.0/keystonemiddleware/_common/config.py
--- old/keystonemiddleware-7.0.1/keystonemiddleware/_common/config.py   
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware/_common/config.py   
2020-04-02 16:27:38.000000000 +0200
@@ -86,7 +86,7 @@
         # local oslo.config object or the caller which instantiates
         # AuthProtocol can pass in an existing oslo.config as the
         # value of the "oslo_config_config" key in conf. If both are
-        # set "olso_config_config" is used.
+        # set "oslo_config_config" is used.
         if local_config_project and not local_oslo_config:
             config_files = [local_config_file] if local_config_file else None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/auth_token/__init__.py 
new/keystonemiddleware-9.0.0/keystonemiddleware/auth_token/__init__.py
--- old/keystonemiddleware-7.0.1/keystonemiddleware/auth_token/__init__.py      
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware/auth_token/__init__.py      
2020-04-02 16:27:38.000000000 +0200
@@ -282,14 +282,14 @@
     # The fnmatch module doesn't provide the ability to match * versus **,
     # so convert to regex.
     token_regex = (r'(?P<tag>{[^}]*})|'  # {tag} # nosec
-                   '(?P<wild>\*(?=$|[^\*]))|'  # *
-                   '(?P<rec_wild>\*\*)|'  # **
-                   '(?P<literal>[^{}\*])')  # anything else
+                   r'(?P<wild>\*(?=$|[^\*]))|'  # *
+                   r'(?P<rec_wild>\*\*)|'  # **
+                   r'(?P<literal>[^{}\*])')  # anything else
     path_regex = ''
     for match in re.finditer(token_regex, path_pattern):
         token = match.groupdict()
         if token['tag'] or token['wild']:
-            path_regex += '[^\/]+'
+            path_regex += r'[^\/]+'
         if token['rec_wild']:
             path_regex += '.*'
         if token['literal']:
@@ -822,7 +822,7 @@
         plugin_opts = loading.get_auth_plugin_conf_options(plugin_loader)
 
         self._conf.oslo_conf_obj.register_opts(plugin_opts, group=group)
-        getter = lambda opt: self._conf.get(opt.dest, group=group)
+        getter = lambda opt: self._conf.get(opt.dest, group=group)  # noqa
         return plugin_loader.load_from_options_getter(getter)
 
     def _create_session(self, **kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/auth_token/_identity.py 
new/keystonemiddleware-9.0.0/keystonemiddleware/auth_token/_identity.py
--- old/keystonemiddleware-7.0.1/keystonemiddleware/auth_token/_identity.py     
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware/auth_token/_identity.py     
2020-04-02 16:27:38.000000000 +0200
@@ -13,7 +13,6 @@
 from keystoneauth1 import discover
 from keystoneauth1 import exceptions as ksa_exceptions
 from keystoneauth1 import plugin
-from keystoneclient.v2_0 import client as v2_client
 from keystoneclient.v3 import client as v3_client
 from six.moves import urllib
 
@@ -37,25 +36,6 @@
         pass
 
 
-class _V2RequestStrategy(_RequestStrategy):
-
-    AUTH_VERSION = (2, 0)
-
-    def __init__(self, adap, **kwargs):
-        super(_V2RequestStrategy, self).__init__(adap, **kwargs)
-        self._client = v2_client.Client(session=adap)
-
-    def verify_token(self, token, allow_expired=False):
-        # NOTE(jamielennox): allow_expired is ignored on V2
-        auth_ref = self._client.tokens.validate_access_info(token)
-
-        if not auth_ref:
-            msg = _('Failed to fetch token data from identity server')
-            raise ksm_exceptions.InvalidToken(msg)
-
-        return {'access': auth_ref}
-
-
 class _V3RequestStrategy(_RequestStrategy):
 
     AUTH_VERSION = (3, 0)
@@ -81,7 +61,7 @@
         return {'token': auth_ref}
 
 
-_REQUEST_STRATEGIES = [_V3RequestStrategy, _V2RequestStrategy]
+_REQUEST_STRATEGIES = [_V3RequestStrategy]
 
 
 class IdentityServer(object):
@@ -137,13 +117,12 @@
 
     def _get_strategy_class(self):
         if self._requested_auth_version:
-            # A specific version was requested.
-            if discover.version_match(_V3RequestStrategy.AUTH_VERSION,
-                                      self._requested_auth_version):
-                return _V3RequestStrategy
-
-            # The version isn't v3 so we don't know what to do. Just assume V2.
-            return _V2RequestStrategy
+            if not discover.version_match(_V3RequestStrategy.AUTH_VERSION,
+                                          self._requested_auth_interface):
+                self._LOG.info('A version other than v3 was requested: %s',
+                               self._requested_auth_interface)
+            # Return v3, even if the request is unknown
+            return _V3RequestStrategy
 
         # Specific version was not requested then we fall through to
         # discovering available versions from the server
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/auth_token/_request.py 
new/keystonemiddleware-9.0.0/keystonemiddleware/auth_token/_request.py
--- old/keystonemiddleware-7.0.1/keystonemiddleware/auth_token/_request.py      
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware/auth_token/_request.py      
2020-04-02 16:27:38.000000000 +0200
@@ -16,20 +16,16 @@
 import webob
 
 
-def _v3_to_v2_catalog(catalog):
-    """Convert a catalog to v2 format.
-
-    X_SERVICE_CATALOG must be specified in v2 format. If you get a token
-    that is in v3 convert it.
-    """
-    v2_services = []
+def _normalize_catalog(catalog):
+    """Convert a catalog to a compatible format."""
+    services = []
     for v3_service in catalog:
         # first copy over the entries we allow for the service
-        v2_service = {'type': v3_service['type']}
+        service = {'type': v3_service['type']}
         try:
-            v2_service['name'] = v3_service['name']
+            service['name'] = v3_service['name']
         except KeyError:  # nosec
-            # v3 service doesn't have a name, so v2_service doesn't either.
+            # v3 service doesn't have a name, move on.
             pass
 
         # now convert the endpoints. Because in v3 we specify region per
@@ -47,10 +43,10 @@
             interface_name = v3_endpoint['interface'].lower() + 'URL'
             region[interface_name] = v3_endpoint['url']
 
-        v2_service['endpoints'] = list(regions.values())
-        v2_services.append(v2_service)
+        service['endpoints'] = list(regions.values())
+        services.append(service)
 
-    return v2_services
+    return services
 
 
 def _is_admin_project(auth_ref):
@@ -194,7 +190,7 @@
 
         catalog = auth_ref.service_catalog.catalog
         if auth_ref.version == 'v3':
-            catalog = _v3_to_v2_catalog(catalog)
+            catalog = _normalize_catalog(catalog)
 
         c = jsonutils.dumps(catalog)
         self.headers[self._SERVICE_CATALOG_HEADER] = c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/ec2_token.py 
new/keystonemiddleware-9.0.0/keystonemiddleware/ec2_token.py
--- old/keystonemiddleware-7.0.1/keystonemiddleware/ec2_token.py        
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware/ec2_token.py        
2020-04-02 16:27:38.000000000 +0200
@@ -31,7 +31,7 @@
 
 keystone_ec2_opts = [
     cfg.StrOpt('url',
-               default='http://localhost:5000/v2.0/ec2tokens',
+               default='http://localhost:5000/v3/ec2tokens',
                help='URL to get token from ec2 request.'),
     cfg.StrOpt('keyfile',
                help='Required if EC2 server requires client certificate.'),
@@ -185,13 +185,8 @@
             msg = _('Error response from keystone: %s') % response.reason
             self._logger.debug(msg)
             return self._ec2_error_response("AuthFailure", msg)
-        result = response.json()
         try:
-            if 'token' in result:
-                # NOTE(andrey-mp): response from keystone v3
-                token_id = response.headers['x-subject-token']
-            else:
-                token_id = result['access']['token']['id']
+            token_id = response.headers['x-subject-token']
         except (AttributeError, KeyError):
             msg = _("Failure parsing response from keystone")
             self._logger.exception(msg)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/locale/en_GB/LC_MESSAGES/keystonemiddleware.po
 
new/keystonemiddleware-9.0.0/keystonemiddleware/locale/en_GB/LC_MESSAGES/keystonemiddleware.po
--- 
old/keystonemiddleware-7.0.1/keystonemiddleware/locale/en_GB/LC_MESSAGES/keystonemiddleware.po
      2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/keystonemiddleware/locale/en_GB/LC_MESSAGES/keystonemiddleware.po
      2020-04-02 16:27:38.000000000 +0200
@@ -3,7 +3,7 @@
 msgstr ""
 "Project-Id-Version: keystonemiddleware VERSION\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2018-04-21 04:01+0000\n"
+"POT-Creation-Date: 2019-12-21 02:49+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -27,10 +27,6 @@
 msgid "Failed to fetch token data from identity server"
 msgstr "Failed to fetch token data from identity server"
 
-#, python-format
-msgid "Failed to fetch token revocation list: %d"
-msgstr "Failed to fetch token revocation list: %d"
-
 msgid "Failure parsing response from keystone"
 msgstr "Failure parsing response from Keystone"
 
@@ -46,9 +42,6 @@
 msgid "No compatible apis supported by server"
 msgstr "No compatible APIs supported by server"
 
-msgid "Revocation list improperly formatted."
-msgstr "Revocation list improperly formatted."
-
 msgid "Signature not provided"
 msgstr "Signature not provided"
 
@@ -58,9 +51,6 @@
 msgid "Token authorization failed"
 msgstr "Token authorisation failed"
 
-msgid "Token has been revoked"
-msgstr "Token has been revoked"
-
 msgid "Unable to determine service tenancy."
 msgstr "Unable to determine service tenancy."
 
@@ -70,7 +60,3 @@
 msgstr ""
 "memcache_secret_key must be defined when a memcache_security_strategy is "
 "defined"
-
-#, python-format
-msgid "unable to access signing_dir %s"
-msgstr "unable to access signing_dir %s"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/locale/ko_KR/LC_MESSAGES/keystonemiddleware.po
 
new/keystonemiddleware-9.0.0/keystonemiddleware/locale/ko_KR/LC_MESSAGES/keystonemiddleware.po
--- 
old/keystonemiddleware-7.0.1/keystonemiddleware/locale/ko_KR/LC_MESSAGES/keystonemiddleware.po
      2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/keystonemiddleware/locale/ko_KR/LC_MESSAGES/keystonemiddleware.po
      2020-04-02 16:27:38.000000000 +0200
@@ -3,7 +3,7 @@
 msgstr ""
 "Project-Id-Version: keystonemiddleware VERSION\n"
 "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n";
-"POT-Creation-Date: 2018-02-20 19:27+0000\n"
+"POT-Creation-Date: 2019-12-21 02:49+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -27,10 +27,6 @@
 msgid "Failed to fetch token data from identity server"
 msgstr "인증 서버로부터 토큰 데이터를 가져올 수 없습니다"
 
-#, python-format
-msgid "Failed to fetch token revocation list: %d"
-msgstr "토큰 revocation 목록을 가져올 수 없습니다: %d"
-
 msgid "Failure parsing response from keystone"
 msgstr "keystone 응답 파싱 실패"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py
 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py
--- 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py
 2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py
 2020-04-02 16:27:38.000000000 +0200
@@ -22,7 +22,6 @@
 from keystoneauth1 import fixture
 from keystoneauth1 import loading
 from keystoneauth1 import session
-from keystoneclient import exceptions as ksc_exceptions
 import mock
 import oslo_cache
 from oslo_log import log as logging
@@ -83,7 +82,8 @@
 FAKE_ADMIN_TOKEN_ID = 'admin_token2'
 FAKE_ADMIN_TOKEN = jsonutils.dumps(
     {'access': {'token': {'id': FAKE_ADMIN_TOKEN_ID,
-                          'expires': '2022-10-03T16:58:01Z'}}})
+                          'expires': '%i-10-03T16:58:01Z' %
+                          (1 + time.gmtime().tm_year)}}})
 
 VERSION_LIST_v3 = fixture.DiscoveryList(href=BASE_URI)
 VERSION_LIST_v2 = fixture.DiscoveryList(v3=False, href=BASE_URI)
@@ -589,7 +589,7 @@
         return self.middleware._token_cache.get(token)
 
     def test_memcache_set_invalid_uuid(self):
-        invalid_uri = "%s/v2.0/tokens/invalid-token" % BASE_URI
+        invalid_uri = "%s/v3/tokens/invalid-token" % BASE_URI
         self.requests_mock.get(invalid_uri, status_code=404)
 
         token = 'invalid-token'
@@ -600,7 +600,7 @@
 
     def test_memcache_hit_invalid_token(self):
         token = 'invalid-token'
-        invalid_uri = '%s/v2.0/tokens/invalid-token' % BASE_URI
+        invalid_uri = '%s/v3/tokens/invalid-token' % BASE_URI
         self.requests_mock.get(invalid_uri, status_code=404)
 
         # Call once to cache token's invalid state; verify it cached as such
@@ -1015,169 +1015,6 @@
         "Request to https://host/token/path timed out")
 
 
-class v2AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest,
-                                CommonAuthTokenMiddlewareTest,
-                                testresources.ResourcedTestCase):
-    """v2 token specific tests.
-
-    There are some differences between how the auth-token middleware handles
-    v2 and v3 tokens over and above the token formats, namely:
-
-    - A v3 keystone server will auto scope a token to a user's default project
-      if no scope is specified. A v2 server assumes that the auth-token
-      middleware will do that.
-    - A v2 keystone server may issue a token without a catalog, even with a
-      tenant
-
-    The tests below were originally part of the generic AuthTokenMiddlewareTest
-    class, but now, since they really are v2 specific, they are included here.
-
-    """
-
-    resources = [('examples', client_fixtures.EXAMPLES_RESOURCE)]
-
-    def setUp(self):
-        super(v2AuthTokenMiddlewareTest, self).setUp()
-
-        self.token_dict = {
-            'uuid_token_default': self.examples.UUID_TOKEN_DEFAULT,
-            'uuid_token_unscoped': self.examples.UUID_TOKEN_UNSCOPED,
-            'uuid_token_bind': self.examples.UUID_TOKEN_BIND,
-            'uuid_token_unknown_bind': self.examples.UUID_TOKEN_UNKNOWN_BIND,
-            'uuid_service_token_default':
-            self.examples.UUID_SERVICE_TOKEN_DEFAULT,
-        }
-
-        self.requests_mock.get(BASE_URI,
-                               json=VERSION_LIST_v2,
-                               status_code=300)
-
-        self.requests_mock.post('%s/v2.0/tokens' % BASE_URI,
-                                text=FAKE_ADMIN_TOKEN)
-
-        for token in (self.examples.UUID_TOKEN_DEFAULT,
-                      self.examples.UUID_TOKEN_UNSCOPED,
-                      self.examples.UUID_TOKEN_BIND,
-                      self.examples.UUID_TOKEN_UNKNOWN_BIND,
-                      self.examples.UUID_TOKEN_NO_SERVICE_CATALOG,
-                      self.examples.UUID_SERVICE_TOKEN_DEFAULT,):
-            url = "%s/v2.0/tokens/%s" % (BASE_URI, token)
-            text = self.examples.JSON_TOKEN_RESPONSES[token]
-            self.requests_mock.get(url, text=text)
-
-        url = '%s/v2.0/tokens/%s' % (BASE_URI, ERROR_TOKEN)
-        self.requests_mock.get(url, text=network_error_response)
-
-        url = '%s/v2.0/tokens/%s' % (BASE_URI, TIMEOUT_TOKEN)
-        self.requests_mock.get(url, text=request_timeout_response)
-
-        self.set_middleware()
-
-    def assert_unscoped_default_tenant_auto_scopes(self, token):
-        """Unscoped v2 requests with a default tenant should ``auto-scope``.
-
-        The implied scope is the user's tenant ID.
-
-        """
-        resp = self.call_middleware(headers={'X-Auth-Token': token})
-        self.assertEqual(FakeApp.SUCCESS, resp.body)
-        self.assertIn('keystone.token_info', resp.request.environ)
-
-    def assert_valid_last_url(self, token_id):
-        self.assertLastPath("/v2.0/tokens/%s" % token_id)
-
-    def test_default_tenant_uuid_token(self):
-        self.assert_unscoped_default_tenant_auto_scopes(
-            self.examples.UUID_TOKEN_DEFAULT)
-
-    def assert_unscoped_token_receives_401(self, token):
-        """Unscoped requests with no default tenant ID should be rejected."""
-        resp = self.call_middleware(headers={'X-Auth-Token': token},
-                                    expected_status=401)
-        self.assertEqual('Keystone uri="https://keystone.example.com:1234";',
-                         resp.headers['WWW-Authenticate'])
-
-    def test_request_prevent_service_catalog_injection(self):
-        token = self.examples.UUID_TOKEN_NO_SERVICE_CATALOG
-        resp = self.call_middleware(headers={'X-Service-Catalog': '[]',
-                                             'X-Auth-Token': token})
-
-        self.assertFalse(resp.request.headers.get('X-Service-Catalog'))
-        self.assertEqual(FakeApp.SUCCESS, resp.body)
-
-    def test_user_plugin_token_properties(self):
-        token = self.examples.UUID_TOKEN_DEFAULT
-        token_data = self.examples.TOKEN_RESPONSES[token]
-        service = self.examples.UUID_SERVICE_TOKEN_DEFAULT
-
-        resp = self.call_middleware(headers={'X-Service-Catalog': '[]',
-                                             'X-Auth-Token': token,
-                                             'X-Service-Token': service})
-
-        self.assertEqual(FakeApp.SUCCESS, resp.body)
-
-        token_auth = resp.request.environ['keystone.token_auth']
-
-        self.assertTrue(token_auth.has_user_token)
-        self.assertTrue(token_auth.has_service_token)
-
-        self.assertEqual(token_data.user_id, token_auth.user.user_id)
-        self.assertEqual(token_data.tenant_id, token_auth.user.project_id)
-
-        self.assertThat(token_auth.user.role_names, matchers.HasLength(2))
-        self.assertIn('role1', token_auth.user.role_names)
-        self.assertIn('role2', token_auth.user.role_names)
-
-        self.assertIsNone(token_auth.user.trust_id)
-        self.assertIsNone(token_auth.user.user_domain_id)
-        self.assertIsNone(token_auth.user.project_domain_id)
-
-        self.assertThat(token_auth.service.role_names, matchers.HasLength(2))
-        self.assertIn('service', token_auth.service.role_names)
-        self.assertIn('service_role2', token_auth.service.role_names)
-
-        self.assertIsNone(token_auth.service.trust_id)
-
-
-class CrossVersionAuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest,
-                                          testresources.ResourcedTestCase):
-
-    resources = [('examples', client_fixtures.EXAMPLES_RESOURCE)]
-
-    def test_valid_uuid_request_forced_to_2_0(self):
-        """Test forcing auth_token to use lower api version.
-
-        By installing the v3 http hander, auth_token will be get
-        a version list that looks like a v3 server - from which it
-        would normally chose v3.0 as the auth version.  However, here
-        we specify v2.0 in the configuration - which should force
-        auth_token to use that version instead.
-
-        """
-        conf = {
-            'auth_version': 'v2.0'
-        }
-
-        self.requests_mock.get(BASE_URI,
-                               json=VERSION_LIST_v3,
-                               status_code=300)
-
-        self.requests_mock.post('%s/v2.0/tokens' % BASE_URI,
-                                text=FAKE_ADMIN_TOKEN)
-
-        token = self.examples.UUID_TOKEN_DEFAULT
-        url = "%s/v2.0/tokens/%s" % (BASE_URI, token)
-        text = self.examples.JSON_TOKEN_RESPONSES[token]
-        self.requests_mock.get(url, text=text)
-
-        self.set_middleware(conf=conf)
-
-        # This tests will only work is auth_token has chosen to use the
-        # lower, v2, api version
-        self.call_middleware(headers={'X-Auth-Token': token})
-        self.assertEqual(url, self.requests_mock.last_request.url)
-
-
 class v3AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest,
                                 CommonAuthTokenMiddlewareTest,
                                 testresources.ResourcedTestCase):
@@ -1189,19 +1026,7 @@
 
     This is done by configuring the AuthTokenMiddlewareTest class via
     its Setup(), passing in v3 style data that will then be used by
-    the tests themselves.  This approach has been used to ensure we
-    really are running the same tests for both v2 and v3 tokens.
-
-    There a few additional specific test for v3 only:
-
-    - We allow an unscoped token to be validated (as unscoped), where
-      as for v2 tokens, the auth_token middleware is expected to try and
-      auto-scope it (and fail if there is no default tenant)
-    - Domain scoped tokens
-
-    Since we don't specify an auth version for auth_token to use, by
-    definition we are thefore implicitely testing that it will use
-    the highest available auth version, i.e. v3.0
+    the tests themselves.
 
     """
 
@@ -1526,7 +1351,7 @@
 
         if request.headers.get('X-Subject-Token') == ERROR_TOKEN:
             msg = 'Network connection refused.'
-            raise ksc_exceptions.ConnectionRefused(msg)
+            raise ksa_exceptions.ConnectFailure(msg)
 
         # All others just fail
         context.status_code = 404
@@ -1536,7 +1361,7 @@
         body = uuid.uuid4().hex
         www_authenticate_uri = 'http://local.test'
         conf = {'delay_auth_decision': 'True',
-                'auth_version': 'v3.0',
+                'auth_version': 'v3',
                 'www_authenticate_uri': www_authenticate_uri}
 
         middleware = self.create_simple_middleware(status='401 Unauthorized',
@@ -1840,59 +1665,6 @@
                                             bind_level='required')
 
 
-class v2CompositeAuthTests(BaseAuthTokenMiddlewareTest,
-                           CommonCompositeAuthTests,
-                           testresources.ResourcedTestCase):
-    """Test auth_token middleware with v2 token based composite auth.
-
-    Execute the Composite auth class tests, but with the
-    auth_token middleware configured to expect v2 tokens back from
-    a keystone server.
-    """
-
-    resources = [('examples', client_fixtures.EXAMPLES_RESOURCE)]
-
-    def setUp(self):
-        super(v2CompositeAuthTests, self).setUp(
-            expected_env=EXPECTED_V2_DEFAULT_SERVICE_ENV_RESPONSE,
-            fake_app=CompositeFakeApp)
-
-        uuid_token_default = self.examples.UUID_TOKEN_DEFAULT
-        uuid_service_token_default = self.examples.UUID_SERVICE_TOKEN_DEFAULT
-        uuid_token_bind = self.examples.UUID_TOKEN_BIND
-        uuid_service_token_bind = self.examples.UUID_SERVICE_TOKEN_BIND
-        self.token_dict = {
-            'uuid_token_default': uuid_token_default,
-            'uuid_service_token_default': uuid_service_token_default,
-            'uuid_token_bind': uuid_token_bind,
-            'uuid_service_token_bind': uuid_service_token_bind,
-        }
-
-        self.requests_mock.get(BASE_URI,
-                               json=VERSION_LIST_v2,
-                               status_code=300)
-
-        self.requests_mock.post('%s/v2.0/tokens' % BASE_URI,
-                                text=FAKE_ADMIN_TOKEN)
-
-        for token in (self.examples.UUID_TOKEN_DEFAULT,
-                      self.examples.UUID_SERVICE_TOKEN_DEFAULT,
-                      self.examples.UUID_TOKEN_BIND,
-                      self.examples.UUID_SERVICE_TOKEN_BIND):
-            text = self.examples.JSON_TOKEN_RESPONSES[token]
-            self.requests_mock.get('%s/v2.0/tokens/%s' % (BASE_URI, token),
-                                   text=text)
-
-        for invalid_uri in ("%s/v2.0/tokens/invalid-token" % BASE_URI,
-                            "%s/v2.0/tokens/invalid-service-token" % BASE_URI):
-            self.requests_mock.get(invalid_uri, text='', status_code=404)
-
-        self.token_expected_env = dict(EXPECTED_V2_DEFAULT_ENV_RESPONSE)
-        self.service_token_expected_env = dict(
-            EXPECTED_V2_DEFAULT_SERVICE_ENV_RESPONSE)
-        self.set_middleware()
-
-
 class v3CompositeAuthTests(BaseAuthTokenMiddlewareTest,
                            CommonCompositeAuthTests,
                            testresources.ResourcedTestCase):
@@ -1907,7 +1679,7 @@
 
     def setUp(self):
         super(v3CompositeAuthTests, self).setUp(
-            auth_version='v3.0',
+            auth_version='v3',
             fake_app=v3CompositeFakeApp)
 
         uuid_token_default = self.examples.v3_UUID_TOKEN_DEFAULT
@@ -1950,7 +1722,7 @@
 
         if token_id == ERROR_TOKEN:
             msg = "Network connection refused."
-            raise ksc_exceptions.ConnectionRefused(msg)
+            raise ksa_exceptions.ConnectFailure(msg)
         elif token_id == TIMEOUT_TOKEN:
             request_timeout_response(request, context)
 
@@ -1978,7 +1750,7 @@
         self.call_middleware(headers={'X-Auth-Token': uuid.uuid4().hex},
                              expected_status=503)
 
-        self.assertIn('versions [v3.0, v2.0]', self.logger.output)
+        self.assertIn('versions [v3.0]', self.logger.output)
 
     def _assert_auth_version(self, conf_version, identity_server_version):
         self.set_middleware(conf={'auth_version': conf_version})
@@ -1987,8 +1759,6 @@
                          identity_server.auth_version)
 
     def test_micro_version(self):
-        self._assert_auth_version('v2', (2, 0))
-        self._assert_auth_version('v2.0', (2, 0))
         self._assert_auth_version('v3', (3, 0))
         self._assert_auth_version('v3.0', (3, 0))
         self._assert_auth_version('v3.1', (3, 0))
@@ -2002,14 +1772,10 @@
         self.requests_mock.get(BASE_URI, json=VERSION_LIST_v3, status_code=300)
         self._assert_auth_version(None, (3, 0))
 
-        # VERSION_LIST_v2 contains only v2 version elements
-        self.requests_mock.get(BASE_URI, json=VERSION_LIST_v2, status_code=300)
-        self._assert_auth_version(None, (2, 0))
-
     def test_unsupported_auth_version(self):
-        # If the requested version isn't supported we will use v2
-        self._assert_auth_version('v1', (2, 0))
-        self._assert_auth_version('v10', (2, 0))
+        # If the requested version isn't supported we will use v3
+        self._assert_auth_version('v1', (3, 0))
+        self._assert_auth_version('v10', (3, 0))
 
 
 class AuthProtocolLoadingTests(BaseAuthTokenMiddlewareTest):
@@ -2019,9 +1785,7 @@
     KEYSTONE_BASE_URL = 'http://keystone.url/prefix'
     CRUD_URL = 'http://crud.url/prefix'
 
-    # NOTE(jamielennox): use the /v2.0 prefix here because this is what's most
-    # likely to be in the service catalog and we should be able to ignore it.
-    KEYSTONE_URL = KEYSTONE_BASE_URL + '/v2.0'
+    KEYSTONE_URL = KEYSTONE_BASE_URL + '/v3'
 
     def setUp(self):
         super(AuthProtocolLoadingTests, self).setUp()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/auth_token/test_request.py
 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/auth_token/test_request.py
--- 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/auth_token/test_request.py
       2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/auth_token/test_request.py
       2020-04-02 16:27:38.000000000 +0200
@@ -224,7 +224,7 @@
 
         auth_ref = access.create(body=token)
         catalog_data = auth_ref.service_catalog.catalog
-        catalog = _request._v3_to_v2_catalog(catalog_data)
+        catalog = _request._normalize_catalog(catalog_data)
 
         self.assertEqual(1, len(catalog))
         service = catalog[0]
@@ -248,7 +248,7 @@
 
         auth_ref = access.create(body=token)
         catalog_data = auth_ref.service_catalog.catalog
-        catalog = _request._v3_to_v2_catalog(catalog_data)
+        catalog = _request._normalize_catalog(catalog_data)
 
         self.assertEqual(1, len(catalog))
         service = catalog[0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/auth_token/test_user_auth_plugin.py
 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/auth_token/test_user_auth_plugin.py
--- 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/auth_token/test_user_auth_plugin.py
      2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/auth_token/test_user_auth_plugin.py
      2020-04-02 16:27:38.000000000 +0200
@@ -80,72 +80,6 @@
         self.assertTokenDataEqual(service_id, service, plugin.service)
 
 
-class V2UserPluginTests(BaseUserPluginTests, base.BaseAuthTokenTestCase):
-
-    def setUp(self):
-        super(V2UserPluginTests, self).setUp()
-
-        self.service_token = fixture.V2Token()
-        self.service_token.set_scope()
-        s = self.service_token.add_service('identity', name='keystone')
-
-        s.add_endpoint(public=BASE_URI,
-                       admin=BASE_URI,
-                       internal=BASE_URI)
-
-        self.configure_middleware(auth_type='v2password',
-                                  auth_url='%s/v2.0/' % AUTH_URL,
-                                  user_id=self.service_token.user_id,
-                                  password=uuid.uuid4().hex,
-                                  tenant_id=self.service_token.tenant_id)
-
-        auth_discovery = fixture.DiscoveryList(href=AUTH_URL, v3=False)
-        self.requests_mock.get(AUTH_URL, json=auth_discovery)
-
-        base_discovery = fixture.DiscoveryList(href=BASE_URI, v3=False)
-        self.requests_mock.get(BASE_URI, json=base_discovery)
-
-        url = '%s/v2.0/tokens' % AUTH_URL
-        self.requests_mock.post(url, json=self.service_token)
-
-    def get_role_names(self, token):
-        return [x['name'] for x in token['access']['user'].get('roles', [])]
-
-    def get_token(self, service=False):
-        token = fixture.V2Token()
-        token.set_scope()
-        token.add_role()
-        if service:
-            token.add_role('service')
-
-        request_headers = {'X-Auth-Token': self.service_token.token_id}
-
-        url = '%s/v2.0/tokens/%s' % (BASE_URI, token.token_id)
-        self.requests_mock.get(url,
-                               request_headers=request_headers,
-                               json=token)
-
-        return token.token_id, token
-
-    def assertTokenDataEqual(self, token_id, token, token_data):
-        super(V2UserPluginTests, self).assertTokenDataEqual(token_id,
-                                                            token,
-                                                            token_data)
-
-        self.assertEqual(token.tenant_id, token_data.project_id)
-        self.assertIsNone(token_data.user_domain_id)
-        self.assertIsNone(token_data.project_domain_id)
-
-    def test_trust_scope(self):
-        token_id, token = self.get_token()
-        token.set_trust()
-
-        plugin = self.get_plugin(token_id)
-        self.assertEqual(token.trust_id, plugin.user.trust_id)
-        self.assertEqual(token.trustee_user_id, plugin.user.trustee_user_id)
-        self.assertIsNone(plugin.user.trustor_user_id)
-
-
 class V3UserPluginTests(BaseUserPluginTests, base.BaseAuthTokenTestCase):
 
     def setUp(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/test_ec2_token_middleware.py
 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/test_ec2_token_middleware.py
--- 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/test_ec2_token_middleware.py
     2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/test_ec2_token_middleware.py
     2020-04-02 16:27:38.000000000 +0200
@@ -23,13 +23,12 @@
 
 
 TOKEN_ID = 'fake-token-id'
-GOOD_RESPONSE = {'access': {'token': {'id': TOKEN_ID,
-                                      'tenant': {'id': 'TENANT_ID'}}}}
 EMPTY_RESPONSE = {}
 
 
 class FakeResponse(object):
     reason = "Test Reason"
+    headers = {'x-subject-token': TOKEN_ID}
 
     def __init__(self, json, status_code=400):
         self._json = json
@@ -53,9 +52,9 @@
     TEST_PROTOCOL = 'https'
     TEST_HOST = 'fakehost'
     TEST_PORT = 35357
-    TEST_URL = '%s://%s:%d/v2.0/ec2tokens' % (TEST_PROTOCOL,
-                                              TEST_HOST,
-                                              TEST_PORT)
+    TEST_URL = '%s://%s:%d/v3/ec2tokens' % (TEST_PROTOCOL,
+                                            TEST_HOST,
+                                            TEST_PORT)
 
     def setUp(self):
         super(EC2TokenMiddlewareTestBase, self).setUp()
@@ -74,7 +73,7 @@
 class EC2TokenMiddlewareTestGood(EC2TokenMiddlewareTestBase):
     @mock.patch.object(
         requests, 'request',
-        return_value=FakeResponse(GOOD_RESPONSE, status_code=200))
+        return_value=FakeResponse(EMPTY_RESPONSE, status_code=200))
     def test_protocol_old_versions(self, mock_request):
         req = webob.Request.blank('/test')
         req.GET['Signature'] = 'test-signature'
@@ -85,7 +84,7 @@
         self.assertEqual(TOKEN_ID, req.headers['X-Auth-Token'])
 
         mock_request.assert_called_with(
-            'POST', 'http://localhost:5000/v2.0/ec2tokens',
+            'POST', 'http://localhost:5000/v3/ec2tokens',
             data=mock.ANY, headers={'Content-Type': 'application/json'},
             verify=True, cert=None)
 
@@ -105,7 +104,7 @@
 
     @mock.patch.object(
         requests, 'request',
-        return_value=FakeResponse(GOOD_RESPONSE, status_code=200))
+        return_value=FakeResponse(EMPTY_RESPONSE, status_code=200))
     def test_protocol_v4(self, mock_request):
         req = webob.Request.blank('/test')
         auth_str = (
@@ -120,7 +119,7 @@
         self.assertEqual(TOKEN_ID, req.headers['X-Auth-Token'])
 
         mock_request.assert_called_with(
-            'POST', 'http://localhost:5000/v2.0/ec2tokens',
+            'POST', 'http://localhost:5000/v3/ec2tokens',
             data=mock.ANY, headers={'Content-Type': 'application/json'},
             verify=True, cert=None)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/utils.py 
new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/utils.py
--- old/keystonemiddleware-7.0.1/keystonemiddleware/tests/unit/utils.py 
2019-09-06 18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware/tests/unit/utils.py 
2020-04-02 16:27:38.000000000 +0200
@@ -82,7 +82,7 @@
 class MiddlewareTestCase(BaseTestCase):
 
     def create_middleware(self, cb, **kwargs):
-        raise NotImplemented("implement this in your tests")
+        raise NotImplementedError("implement this in your tests")
 
     def create_simple_middleware(self,
                                  status='200 OK',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/PKG-INFO 
new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/PKG-INFO
--- old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/PKG-INFO   
2019-09-06 19:01:24.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/PKG-INFO   
2020-04-02 16:29:05.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: keystonemiddleware
-Version: 7.0.1
+Version: 9.0.0
 Summary: Middleware for OpenStack Identity
 Home-page: https://docs.openstack.org/keystonemiddleware/latest/
 Author: OpenStack
@@ -36,7 +36,7 @@
         
         * License: Apache License, Version 2.0
         * Documentation: https://docs.openstack.org/keystonemiddleware/latest/
-        * Source: https://git.openstack.org/cgit/openstack/keystonemiddleware
+        * Source: https://opendev.org/openstack/keystonemiddleware
         * Bugs: https://bugs.launchpad.net/keystonemiddleware
         * Release notes: 
https://docs.openstack.org/releasenotes/keystonemiddleware/
         
@@ -52,8 +52,6 @@
 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/SOURCES.txt 
new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/SOURCES.txt
--- old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/SOURCES.txt        
2019-09-06 19:01:25.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/SOURCES.txt        
2020-04-02 16:29:05.000000000 +0200
@@ -116,10 +116,13 @@
 releasenotes/notes/bug_1540115-677cf5016bc46348.yaml
 releasenotes/notes/delay_auth_instead_of_503-f9b46bf4fbc11455.yaml
 releasenotes/notes/deprecate-caching-tokens-in-process-a412b0f1dea84cb9.yaml
+releasenotes/notes/drop-py-2-7-6655f421a9cac0a2.yaml
+releasenotes/notes/ec2-v2-removal-6a886210cbc9d3e9.yaml
 releasenotes/notes/fix-audit-no-service-endpoint-ports-72b2009d631dcf19.yaml
 releasenotes/notes/interface-option-ed551d2a3162668d.yaml
 releasenotes/notes/ksm_4.1.0-3cd78446d8e63616.yaml
 releasenotes/notes/remove_kwargs_to_fetch_token-20e3451ed192ab6a.yaml
+releasenotes/notes/removed-as-of-ussuri-4e1ea485ba8801c9.yaml
 releasenotes/notes/rename-auth-uri-d223d883f5898aee.yaml
 releasenotes/notes/s3token_auth_uri-490c1287d90b9df7.yaml
 releasenotes/notes/x-is-admin-project-header-97f1882e209fe727.yaml
@@ -132,6 +135,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/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/pbr.json 
new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/pbr.json
--- old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/pbr.json   
2019-09-06 19:01:24.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/pbr.json   
2020-04-02 16:29:05.000000000 +0200
@@ -1 +1 @@
-{"git_version": "0a65b14", "is_release": true}
\ No newline at end of file
+{"git_version": "2ff7489", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/requires.txt 
new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/requires.txt
--- old/keystonemiddleware-7.0.1/keystonemiddleware.egg-info/requires.txt       
2019-09-06 19:01:24.000000000 +0200
+++ new/keystonemiddleware-9.0.0/keystonemiddleware.egg-info/requires.txt       
2020-04-02 16:29:05.000000000 +0200
@@ -17,7 +17,7 @@
 oslo.messaging>=5.29.0
 
 [test]
-hacking<0.11,>=0.10.0
+hacking<4.0.0,>=3.0
 flake8-docstrings==0.2.1.post1
 coverage!=4.4,>=4.0
 cryptography>=2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/releasenotes/notes/drop-py-2-7-6655f421a9cac0a2.yaml
 
new/keystonemiddleware-9.0.0/releasenotes/notes/drop-py-2-7-6655f421a9cac0a2.yaml
--- 
old/keystonemiddleware-7.0.1/releasenotes/notes/drop-py-2-7-6655f421a9cac0a2.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystonemiddleware-9.0.0/releasenotes/notes/drop-py-2-7-6655f421a9cac0a2.yaml
   2020-04-02 16:27:38.000000000 +0200
@@ -0,0 +1,6 @@
+---
+upgrade:
+  - |
+    Python 2.7 support has been dropped. Last release of keystonemiddleware
+    to support python 2.7 is OpenStack Train. The minimum version of Python now
+    supported is Python 3.6.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/releasenotes/notes/ec2-v2-removal-6a886210cbc9d3e9.yaml
 
new/keystonemiddleware-9.0.0/releasenotes/notes/ec2-v2-removal-6a886210cbc9d3e9.yaml
--- 
old/keystonemiddleware-7.0.1/releasenotes/notes/ec2-v2-removal-6a886210cbc9d3e9.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystonemiddleware-9.0.0/releasenotes/notes/ec2-v2-removal-6a886210cbc9d3e9.yaml
        2020-04-02 16:27:38.000000000 +0200
@@ -0,0 +1,7 @@
+---
+other:
+  - |
+    [`bug 1845539 <https://bugs.launchpad.net/keystone/+bug/1845539>`_]
+    The ec2 'url' config option now defaults to
+    https://localhost:5000/v3/ec2tokens with the removal of ec2 v2.0 support.
+    Keystonemiddleware no longer supports ec2tokens using the v2.0 API.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/releasenotes/notes/removed-as-of-ussuri-4e1ea485ba8801c9.yaml
 
new/keystonemiddleware-9.0.0/releasenotes/notes/removed-as-of-ussuri-4e1ea485ba8801c9.yaml
--- 
old/keystonemiddleware-7.0.1/releasenotes/notes/removed-as-of-ussuri-4e1ea485ba8801c9.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/keystonemiddleware-9.0.0/releasenotes/notes/removed-as-of-ussuri-4e1ea485ba8801c9.yaml
  2020-04-02 16:27:38.000000000 +0200
@@ -0,0 +1,7 @@
+---
+upgrade:
+  - |
+    [`bug 1845539 <https://bugs.launchpad.net/keystone/+bug/1845539>`_]
+    [`bug 1777177 <https://bugs.launchpad.net/keystone/+bug/1777177>`_]
+    keystonemiddleware no longer supports the keystone v2.0 api, all
+    associated functionality has been removed.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/releasenotes/source/index.rst 
new/keystonemiddleware-9.0.0/releasenotes/source/index.rst
--- old/keystonemiddleware-7.0.1/releasenotes/source/index.rst  2019-09-06 
18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/releasenotes/source/index.rst  2020-04-02 
16:27:38.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   train
    stein
    rocky
    queens
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
 
new/keystonemiddleware-9.0.0/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
--- 
old/keystonemiddleware-7.0.1/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
   2019-09-06 18:59:56.000000000 +0200
+++ 
new/keystonemiddleware-9.0.0/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
   2020-04-02 16:27:38.000000000 +0200
@@ -1,14 +1,15 @@
 # Andi Chandler <[email protected]>, 2017. #zanata
 # Andi Chandler <[email protected]>, 2018. #zanata
+# Andi Chandler <[email protected]>, 2019. #zanata
 msgid ""
 msgstr ""
 "Project-Id-Version: keystonemiddleware\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-04-21 04:01+0000\n"
+"POT-Creation-Date: 2019-12-21 02:49+0000\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2018-04-30 10:08+0000\n"
+"PO-Revision-Date: 2019-12-21 02:38+0000\n"
 "Last-Translator: Andi Chandler <[email protected]>\n"
 "Language-Team: English (United Kingdom)\n"
 "Language: en_GB\n"
@@ -24,6 +25,9 @@
 msgid "4.16.0"
 msgstr "4.16.0"
 
+msgid "4.17.1"
+msgstr "4.17.1"
+
 msgid "4.18.0"
 msgstr "4.18.0"
 
@@ -33,6 +37,9 @@
 msgid "4.20.0"
 msgstr "4.20.0"
 
+msgid "4.22.0"
+msgstr "4.22.0"
+
 msgid "4.3.0"
 msgstr "4.3.0"
 
@@ -45,8 +52,29 @@
 msgid "5.0.0"
 msgstr "5.0.0"
 
-msgid "5.0.0-5"
-msgstr "5.0.0-5"
+msgid "5.1.0"
+msgstr "5.1.0"
+
+msgid "5.2.0"
+msgstr "5.2.0"
+
+msgid "5.2.1"
+msgstr "5.2.1"
+
+msgid "5.3.0"
+msgstr "5.3.0"
+
+msgid "6.0.0"
+msgstr "6.0.0"
+
+msgid "6.1.0"
+msgstr "6.1.0"
+
+msgid "7.0.0"
+msgstr "7.0.0"
+
+msgid "7.0.1-8"
+msgstr "7.0.1-8"
 
 msgid ""
 "A new configuration option for the s3token middleware called auth_uri can be "
@@ -135,6 +163,9 @@
 msgid "Queens Series Release Notes"
 msgstr "Queens Series Release Notes"
 
+msgid "Rocky Series Release Notes"
+msgstr "Rocky Series Release Notes"
+
 msgid "Security Issues"
 msgstr "Security Issues"
 
@@ -170,6 +201,9 @@
 "enforce this behaviour. This will become the default setting in future "
 "releases."
 
+msgid "Stein Series Release Notes"
+msgstr "Stein Series Release Notes"
+
 msgid ""
 "The ``kwargs_to_fetch_token`` setting was removed from the "
 "``BaseAuthProtocol`` class. Implementations of auth_token now assume kwargs "
@@ -201,10 +235,28 @@
 "returned when the user needs to be redirected to the Identity service for "
 "authentication."
 
+msgid "Train Series Release Notes"
+msgstr "Train Series Release Notes"
+
 msgid "Upgrade Notes"
 msgstr "Upgrade Notes"
 
 msgid ""
+"When ``delay_auth_decision`` is enabled and a Keystone failure prevents a "
+"final decision about whether a token is valid or invalid, it will be marked "
+"invalid and the application will be responsible for a final auth decision. "
+"This is similar to what happens when a token is confirmed *not* valid. This "
+"allows a Keystone outage to only affect Keystone users in a multi-auth "
+"system."
+msgstr ""
+"When ``delay_auth_decision`` is enabled and a Keystone failure prevents a "
+"final decision about whether a token is valid or invalid, it will be marked "
+"invalid and the application will be responsible for a final auth decision. "
+"This is similar to what happens when a token is confirmed *not* valid. This "
+"allows a Keystone outage to only affect Keystone users in a multi-auth "
+"system."
+
+msgid ""
 "With the release of 4.2.0 of keystonemiddleware we no longer recommend using "
 "the in-process token cache. In-process caching may result in inconsistent "
 "validation, poor UX and race conditions. It is recommended that the "
@@ -363,6 +415,19 @@
 "look for the given option in local config, then Oslo global config."
 
 msgid ""
+"[`bug 1649735 <https://bugs.launchpad.net/keystone/+bug/1649735>`_] The "
+"auth_token middleware no longer attempts to retrieve the revocation list "
+"from the Keystone server. The deprecated options "
+"`check_revocations_for_cached` and `check_revocations_for_cached` have been "
+"removed."
+msgstr ""
+"[`bug 1649735 <https://bugs.launchpad.net/keystone/+bug/1649735>`_] The "
+"auth_token middleware no longer attempts to retrieve the revocation list "
+"from the Keystone server. The deprecated options "
+"`check_revocations_for_cached` and `check_revocations_for_cached` have been "
+"removed."
+
+msgid ""
 "[`bug 1677308 <https://bugs.launchpad.net/keystonemiddleware/";
 "+bug/1677308>`_] Removes ``pycrypto`` dependency as the library is "
 "unmaintained, and replaces it with the ``cryptography`` library."
@@ -439,6 +504,137 @@
 "(Unauthorised) response now is double quoted to follow the RFC requirement."
 
 msgid ""
+"[`bug 1766731 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1766731>`_] Keystonemiddleware now supports system scoped tokens. When "
+"a system-scoped token is parsed by auth_token middleware, it will set the "
+"``OpenStack-System-Scope`` header accordingly."
+msgstr ""
+"[`bug 1766731 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1766731>`_] Keystonemiddleware now supports system scoped tokens. When "
+"a system-scoped token is parsed by auth_token middleware, it will set the "
+"``OpenStack-System-Scope`` header accordingly."
+
+msgid ""
+"[`bug 1782404 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1782404>`_] Keystonemiddleware incorrectly implemented an abstraction "
+"for the memcache client pool that utilized a `queue.Queue` `get` method "
+"instead of the supplied `acquire()` context manager. The `acquire()` context "
+"manager properly places the client connection back into the pool after "
+"`__exit__`."
+msgstr ""
+"[`bug 1782404 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1782404>`_] Keystonemiddleware incorrectly implemented an abstraction "
+"for the memcache client pool that utilized a `queue.Queue` `get` method "
+"instead of the supplied `acquire()` context manager. The `acquire()` context "
+"manager properly places the client connection back into the pool after "
+"`__exit__`."
+
+msgid ""
+"[`bug 1789351 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1789351>`_] Fixed the bug that when initialize `AuthProtocol`, it'll "
+"raise \"dictionary changed size during iteration\" error if the input `CONF` "
+"object contains deprecated options."
+msgstr ""
+"[`bug 1789351 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1789351>`_] Fixed the bug that when initialize `AuthProtocol`, it'll "
+"raise \"dictionary changed size during iteration\" error if the input `CONF` "
+"object contains deprecated options."
+
+msgid ""
+"[`bug 1797584 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1797584>`_] Fixed a bug where the audit code would select the wrong "
+"target service if the OpenStack service endpoints were not using unique TCP "
+"ports."
+msgstr ""
+"[`bug 1797584 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1797584>`_] Fixed a bug where the audit code would select the wrong "
+"target service if the OpenStack service endpoints were not using unique TCP "
+"ports."
+
+msgid ""
+"[`bug 1800017 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1800017>`_] Fix audit middleware service catalog parsing for the "
+"scenario where a service does not contain any endpoints. In that case, we "
+"should just skip over that service."
+msgstr ""
+"[`bug 1800017 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1800017>`_] Fix audit middleware service catalog parsing for the "
+"scenario where a service does not contain any endpoints. In that case, we "
+"should just skip over that service."
+
+msgid ""
+"[`bug 1803940 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1803940>`_] Request ID and global request ID have been added to CADF "
+"notifications."
+msgstr ""
+"[`bug 1803940 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1803940>`_] Request ID and global request ID have been added to CADF "
+"notifications."
+
+msgid ""
+"[`bug 1809101 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1809101>`_] Fix req.context of Keystone audit middleware and Glance "
+"conflict with each other issue. The audit middleware now stores the admin "
+"context to req.environ['audit.context']."
+msgstr ""
+"[`bug 1809101 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1809101>`_] Fix req.context of Keystone audit middleware and Glance "
+"conflict with each other issue. The audit middleware now stores the admin "
+"context to req.environ['audit.context']."
+
+msgid ""
+"[`bug 1813739 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1813739>`_] When admin identity endpoint is not created yet, "
+"keystonemiddleware emit EndpointNotFound exception. Even after admin "
+"identity endpoint created, auth_token middleware could not be notified of "
+"update since it does not invalidate existing auth. Add an invalidation step "
+"so that endpoint updates can be detected."
+msgstr ""
+"[`bug 1813739 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1813739>`_] When admin identity endpoint is not created yet, "
+"keystonemiddleware emit EndpointNotFound exception. Even after admin "
+"identity endpoint created, auth_token middleware could not be notified of "
+"update since it does not invalidate existing auth. Add an invalidation step "
+"so that endpoint updates can be detected."
+
+msgid ""
+"[`bug 1830002 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1830002>`_] In order to allow an installation to work without deploying "
+"an admin Identity endpoint, a new option `interface` has been added, "
+"allowing select the Identity endpoint that is being used when verifying auth "
+"tokens. It defaults to `admin` in order to replicate the old behaviour, but "
+"may be set to `public` or `internal` as needed."
+msgstr ""
+"[`bug 1830002 <https://bugs.launchpad.net/keystonemiddleware/";
+"+bug/1830002>`_] In order to allow an installation to work without deploying "
+"an admin Identity endpoint, a new option `interface` has been added, "
+"allowing select the Identity endpoint that is being used when verifying auth "
+"tokens. It defaults to `admin` in order to replicate the old behaviour, but "
+"may be set to `public` or `internal` as needed."
+
+msgid ""
+"[`bug 1845539 <https://bugs.launchpad.net/keystone/+bug/1845539>`_] The ec2 "
+"'url' config option now defaults to https://localhost:5000/v3/ec2tokens with "
+"the removal of ec2 v2.0 support. Keystonemiddleware no longer supports "
+"ec2tokens using the v2.0 API."
+msgstr ""
+"[`bug 1845539 <https://bugs.launchpad.net/keystone/+bug/1845539>`_] The ec2 "
+"'url' config option now defaults to https://localhost:5000/v3/ec2tokens with "
+"the removal of ec2 v2.0 support. Keystonemiddleware no longer supports "
+"ec2tokens using the v2.0 API."
+
+msgid ""
+"[`bug 1845539 <https://bugs.launchpad.net/keystone/+bug/1845539>`_] [`bug "
+"1777177 <https://bugs.launchpad.net/keystone/+bug/1777177>`_] "
+"keystonemiddleware no longer supports the keystone v2.0 api, all associated "
+"functionality has been removed."
+msgstr ""
+"[`bug 1845539 <https://bugs.launchpad.net/keystone/+bug/1845539>`_] [`bug "
+"1777177 <https://bugs.launchpad.net/keystone/+bug/1777177>`_] "
+"keystonemiddleware no longer supports the Keystone v2.0 api, all associated "
+"functionality has been removed."
+
+msgid ""
 "[`bug/1747655 <https://bugs.launchpad.net/keystonemiddleware/";
 "+bug/1747655>`_] When keystone is temporarily unavailable, "
 "keystonemiddleware correctly sends a 503 response to the HTTP client but was "
@@ -453,5 +649,16 @@
 "was keystone or the service using keystonemiddleware that was unavailable. "
 "This change identifies keystone in the error response."
 
+msgid ""
+"[`spec <http://specs.openstack.org/openstack/keystone-specs/specs/keystone/";
+"train/capabilities-app-creds.html>`_] The auth_token middleware now has "
+"support for accepting or denying incoming requests based on access rules "
+"provided by users in their keystone application credentials."
+msgstr ""
+"[`spec <http://specs.openstack.org/openstack/keystone-specs/specs/keystone/";
+"train/capabilities-app-creds.html>`_] The auth_token middleware now has "
+"support for accepting or denying incoming requests based on access rules "
+"provided by users in their Keystone application credentials."
+
 msgid "keystonemiddleware Release Notes"
 msgstr "keystonemiddleware Release Notes"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/keystonemiddleware-7.0.1/releasenotes/source/train.rst 
new/keystonemiddleware-9.0.0/releasenotes/source/train.rst
--- old/keystonemiddleware-7.0.1/releasenotes/source/train.rst  1970-01-01 
01:00:00.000000000 +0100
+++ new/keystonemiddleware-9.0.0/releasenotes/source/train.rst  2020-04-02 
16:27:38.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/keystonemiddleware-7.0.1/setup.cfg 
new/keystonemiddleware-9.0.0/setup.cfg
--- old/keystonemiddleware-7.0.1/setup.cfg      2019-09-06 19:01:25.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/setup.cfg      2020-04-02 16:29:05.000000000 
+0200
@@ -13,8 +13,6 @@
        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
@@ -54,9 +52,6 @@
 mapping_file = babel.cfg
 output_file = keystonemiddleware/locale/keystonemiddleware.pot
 
-[wheel]
-universal = 1
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/test-requirements.txt 
new/keystonemiddleware-9.0.0/test-requirements.txt
--- old/keystonemiddleware-7.0.1/test-requirements.txt  2019-09-06 
18:59:56.000000000 +0200
+++ new/keystonemiddleware-9.0.0/test-requirements.txt  2020-04-02 
16:27:38.000000000 +0200
@@ -2,7 +2,7 @@
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
 
-hacking<0.11,>=0.10.0
+hacking>=3.0,<4.0.0 # Apache-2.0
 flake8-docstrings==0.2.1.post1 # MIT
 
 coverage!=4.4,>=4.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/keystonemiddleware-7.0.1/tox.ini 
new/keystonemiddleware-9.0.0/tox.ini
--- old/keystonemiddleware-7.0.1/tox.ini        2019-09-06 18:59:56.000000000 
+0200
+++ new/keystonemiddleware-9.0.0/tox.ini        2020-04-02 16:27:38.000000000 
+0200
@@ -1,7 +1,8 @@
 [tox]
-minversion = 2.5.0
+minversion = 3.1.1
 skipsdist = True
-envlist = py27,py37,pep8,releasenotes
+envlist = py37,pep8,releasenotes
+ignore_basepython_conflict = True
 
 [testenv]
 usedevelop = True
@@ -9,29 +10,26 @@
          OS_STDOUT_NOCAPTURE=False
          OS_STDERR_NOCAPTURE=False
 deps =
-    
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
+    
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
     -r{toxinidir}/requirements.txt
     -r{toxinidir}/test-requirements.txt
 commands = stestr run {posargs}
+basepython = python3
 
 [testenv:pep8]
-basepython = python3
 commands =
   flake8
   bandit -r keystonemiddleware -x tests -n5
 
 [testenv:bandit]
-basepython = python3
 # NOTE(browne): This is required for the integration test job of the bandit
 # project. Please do not remove.
 commands = bandit -r keystonemiddleware -x tests -n5
 
 [testenv:venv]
-basepython = python3
 commands = {posargs}
 
 [testenv:cover]
-basepython = python3
 setenv =
     {[testenv]setenv}
     PYTHON=coverage run --source keystonemiddleware --parallel-mode
@@ -42,7 +40,6 @@
     coverage xml -o cover/coverage.xml
 
 [testenv:debug]
-basepython = python3
 
 commands = oslo_debug_helper -t keystonemiddleware/tests {posargs}
 
@@ -53,19 +50,30 @@
 # D103: Missing docstring in public function
 # D104: Missing docstring in public package
 # D203: 1 blank line required before class docstring (deprecated in pep257)
-ignore = D100,D101,D102,D103,D104,D203
+# W503 line break before binary operator
+# W504 line break after binary operator
+ignore = D100,D101,D102,D103,D104,D203,W503,W504
 show-source = True
 exclude = .venv,.tox,dist,doc,*egg,build
 
 [testenv:docs]
-basepython = python3
 deps = -r{toxinidir}/doc/requirements.txt
 commands=
     doc8 doc/source
     sphinx-build -W -b html doc/source doc/build/html
 
+[testenv:pdf-docs]
+envdir = {toxworkdir}/docs
+deps = {[testenv:docs]deps}
+whitelist_externals =
+  make
+  rm
+commands =
+  rm -rf doc/build/pdf
+  sphinx-build -W -b latex doc/source doc/build/pdf
+  make -C doc/build/pdf
+
 [testenv:releasenotes]
-basepython = python3
 deps = -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
 
@@ -79,7 +87,6 @@
 max-line-length = 79
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt


Reply via email to