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