Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-swiftclient for openSUSE:Factory checked in at 2026-03-24 18:50:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-swiftclient (Old) and /work/SRC/openSUSE:Factory/.python-swiftclient.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-swiftclient" Tue Mar 24 18:50:47 2026 rev:37 rq:1342250 version:4.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-swiftclient/python-swiftclient.changes 2025-11-10 19:18:08.874376497 +0100 +++ /work/SRC/openSUSE:Factory/.python-swiftclient.new.8177/python-swiftclient.changes 2026-03-24 18:51:35.205187553 +0100 @@ -1,0 +2,16 @@ +Mon Mar 9 15:58:32 UTC 2026 - Dirk Müller <[email protected]> + +- update to 4.10.0: + * The "v1password" plugin for keystoneauth now returns + v3-compatible service catalogs, fixing some issues seen when + using v1 auth with openstackclient. + * Now tested under Python 3.14. + * Removed support for the provider-specific SERVICENET. + Explicitly override your storage URLs if you were previously + using this feature. + * Various other minor improvements. + * The ``timeout`` parameter is now included when creating + Keystoneauth Sessions. + * Various other minor improvements. + +------------------------------------------------------------------- Old: ---- python_swiftclient-4.8.0.tar.gz New: ---- python_swiftclient-4.10.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-swiftclient.spec ++++++ --- /var/tmp/diff_new_pack.tXwwNP/_old 2026-03-24 18:51:35.745209890 +0100 +++ /var/tmp/diff_new_pack.tXwwNP/_new 2026-03-24 18:51:35.745209890 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-swiftclient # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %global pythons %{primary_python} Name: python-swiftclient -Version: 4.8.0 +Version: 4.10.0 Release: 0 Summary: OpenStack Object Storage API Client Library License: Apache-2.0 ++++++ python_swiftclient-4.8.0.tar.gz -> python_swiftclient-4.10.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/.zuul.yaml new/python_swiftclient-4.10.0/.zuul.yaml --- old/python_swiftclient-4.8.0/.zuul.yaml 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/.zuul.yaml 2026-02-25 21:59:50.000000000 +0100 @@ -10,9 +10,6 @@ # for installation. required-projects: - opendev.org/openstack/python-swiftclient - vars: - # New tox keeps breaking things as of 2023-01 - ensure_tox_version: '<4' - job: name: swiftclient-functional @@ -40,10 +37,14 @@ # on-demand pipeline used to test older (but still supported) versions of python, # as well as intermediate releases that the openstack-python3-jobs might skip jobs: - - openstack-tox-py37 + - openstack-tox-py37: + nodeset: ubuntu-jammy + vars: + python_use_pyenv: True - openstack-tox-py38 - openstack-tox-py39 - openstack-tox-py311 + - openstack-tox-py312 check: jobs: - swiftclient-functional: @@ -55,13 +56,15 @@ irrelevant-files: *functest-irrelevant-files - tempest-full-py3: irrelevant-files: *functest-irrelevant-files - - openstack-tox-py313: + - openstack-tox-py313 + - openstack-tox-py314: voting: true gate: jobs: - swiftclient-swift-functional - swiftclient-functional - - openstack-tox-py313: + - openstack-tox-py313 + - openstack-tox-py314: voting: true post: jobs: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/AUTHORS new/python_swiftclient-4.10.0/AUTHORS --- old/python_swiftclient-4.8.0/AUTHORS 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/AUTHORS 2026-02-25 21:59:50.000000000 +0100 @@ -10,6 +10,7 @@ Andy McCrae ([email protected]) Anh Tran ([email protected]) Anne Gentle ([email protected]) +Anthony Roussel ([email protected]) Ben McCann ([email protected]) Cedric Brandily ([email protected]) Chaozhe.Chen ([email protected]) @@ -34,6 +35,7 @@ David Goetz ([email protected]) David Kranz ([email protected]) David Shrewsbury ([email protected]) +David Svenson ([email protected]) Davide Guerri ([email protected]) Dean Troyer ([email protected]) Dirk Mueller ([email protected]) @@ -58,6 +60,7 @@ howardlee ([email protected]) Hu Bing ([email protected]) Ian Cordasco ([email protected]) +Ivan Anfimov ([email protected]) Ivan Kolodyazhny ([email protected]) jacky06 ([email protected]) Jaivish Kothari ([email protected]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/ChangeLog new/python_swiftclient-4.10.0/ChangeLog --- old/python_swiftclient-4.8.0/ChangeLog 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/ChangeLog 2026-02-25 21:59:50.000000000 +0100 @@ -1,3 +1,25 @@ +4.10.0 +----- + +* The "v1password" plugin for keystoneauth now returns v3-compatible service + catalogs, fixing some issues seen when using v1 auth with openstackclient. + +* Now tested under Python 3.14. + +* Removed support for the provider-specific SERVICENET. Explicitly override + your storage URLs if you were previously using this feature. + +* Various other minor improvements. + + +4.9.0 +----- + +* The ``timeout`` parameter is now included when creating Keystoneauth Sessions. + +* Various other minor improvements. + + 4.8.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/PKG-INFO new/python_swiftclient-4.10.0/PKG-INFO --- old/python_swiftclient-4.8.0/PKG-INFO 2025-05-22 09:14:51.092040000 +0200 +++ new/python_swiftclient-4.10.0/PKG-INFO 2026-02-25 22:00:39.549790600 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.4 Name: python-swiftclient -Version: 4.8.0 +Version: 4.10.0 Summary: OpenStack Object Storage API Client Library Home-page: https://docs.openstack.org/python-swiftclient/latest/ Author: OpenStack @@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 Classifier: Programming Language :: Python :: 3 :: Only Requires-Python: >=3.7 Description-Content-Type: text/x-rst @@ -40,6 +41,19 @@ Requires-Dist: keystoneauth1>=3.4.0; extra == "test" Requires-Dist: stestr!=3.0.0,>=2.0.0; extra == "test" Requires-Dist: openstacksdk>=0.11.0; extra == "test" +Requires-Dist: python-openstackclient>=3.12.0; extra == "test" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary Python bindings to the OpenStack Object Storage API =================================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/doc/manpages/swift.1 new/python_swiftclient-4.10.0/doc/manpages/swift.1 --- old/python_swiftclient-4.8.0/doc/manpages/swift.1 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/doc/manpages/swift.1 2026-02-25 21:59:51.000000000 +0100 @@ -177,7 +177,6 @@ .PD 0 .IP "--version Show program's version number and exit" .IP "-h, --help Show this (or any subcommand if after command) help message and exit" -.IP "-s, --snet Use SERVICENET internal network" .IP "-v, --verbose Print more info" .IP "-q, --quiet Suppress status output" .IP "-A AUTH, --auth=AUTH URL for obtaining an auth token " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/doc/source/cli/index.rst new/python_swiftclient-4.10.0/doc/source/cli/index.rst --- old/python_swiftclient-4.8.0/doc/source/cli/index.rst 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/doc/source/cli/index.rst 2026-02-25 21:59:51.000000000 +0100 @@ -20,7 +20,7 @@ .. code-block:: console - Usage: swift [--version] [--help] [--os-help] [--snet] [--verbose] + Usage: swift [--version] [--help] [--os-help] [--verbose] [--debug] [--info] [--quiet] [--auth <auth_url>] [--auth-version <auth_version> | --os-identity-api-version <auth_version> ] @@ -95,9 +95,6 @@ ``--os-help`` Show OpenStack authentication options. -``-s, --snet`` - Use SERVICENET internal network. - ``-v, --verbose`` Print more info. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/python_swiftclient.egg-info/PKG-INFO new/python_swiftclient-4.10.0/python_swiftclient.egg-info/PKG-INFO --- old/python_swiftclient-4.8.0/python_swiftclient.egg-info/PKG-INFO 2025-05-22 09:14:51.000000000 +0200 +++ new/python_swiftclient-4.10.0/python_swiftclient.egg-info/PKG-INFO 2026-02-25 22:00:39.000000000 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.4 Name: python-swiftclient -Version: 4.8.0 +Version: 4.10.0 Summary: OpenStack Object Storage API Client Library Home-page: https://docs.openstack.org/python-swiftclient/latest/ Author: OpenStack @@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 Classifier: Programming Language :: Python :: 3 :: Only Requires-Python: >=3.7 Description-Content-Type: text/x-rst @@ -40,6 +41,19 @@ Requires-Dist: keystoneauth1>=3.4.0; extra == "test" Requires-Dist: stestr!=3.0.0,>=2.0.0; extra == "test" Requires-Dist: openstacksdk>=0.11.0; extra == "test" +Requires-Dist: python-openstackclient>=3.12.0; extra == "test" +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: home-page +Dynamic: license +Dynamic: license-file +Dynamic: project-url +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary Python bindings to the OpenStack Object Storage API =================================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/python_swiftclient.egg-info/SOURCES.txt new/python_swiftclient-4.10.0/python_swiftclient.egg-info/SOURCES.txt --- old/python_swiftclient-4.8.0/python_swiftclient.egg-info/SOURCES.txt 2025-05-22 09:14:51.000000000 +0200 +++ new/python_swiftclient-4.10.0/python_swiftclient.egg-info/SOURCES.txt 2026-02-25 22:00:39.000000000 +0100 @@ -57,16 +57,19 @@ releasenotes/notes/3_8_0_release-bd867fbdb8c895d3.yaml releasenotes/notes/3_8_1_release-cb5648c3ae69bde1.yaml releasenotes/notes/3_9_0_release-3c293d277f14ec22.yaml +releasenotes/notes/4_10_0_release-8370f0dcdb8a0e11.yaml releasenotes/notes/4_3_0_release.yaml releasenotes/notes/4_4_0_release-d731bab5982c160b.yaml releasenotes/notes/4_5_0_release-b315d25b889293f2.yaml releasenotes/notes/4_6_0_release-92e466eb55b80225.yaml releasenotes/notes/4_8_0_release-41ba0852981191c3.yaml +releasenotes/notes/4_9_0_release-b26426108163280d.yaml releasenotes/source/2023.1.rst releasenotes/source/2023.2.rst releasenotes/source/2024.1.rst releasenotes/source/2024.2.rst releasenotes/source/2025.1.rst +releasenotes/source/2025.2.rst releasenotes/source/conf.py releasenotes/source/current.rst releasenotes/source/index.rst @@ -97,6 +100,7 @@ test/__init__.py test/sample.conf test/functional/__init__.py +test/functional/test_openstackclient.py test/functional/test_openstacksdk.py test/functional/test_swiftclient.py test/unit/__init__.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/python_swiftclient.egg-info/pbr.json new/python_swiftclient-4.10.0/python_swiftclient.egg-info/pbr.json --- old/python_swiftclient-4.8.0/python_swiftclient.egg-info/pbr.json 2025-05-22 09:14:51.000000000 +0200 +++ new/python_swiftclient-4.10.0/python_swiftclient.egg-info/pbr.json 2026-02-25 22:00:39.000000000 +0100 @@ -1 +1 @@ -{"git_version": "8486005", "is_release": true} \ No newline at end of file +{"git_version": "70e1109", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/python_swiftclient.egg-info/requires.txt new/python_swiftclient-4.10.0/python_swiftclient.egg-info/requires.txt --- old/python_swiftclient-4.8.0/python_swiftclient.egg-info/requires.txt 2025-05-22 09:14:51.000000000 +0200 +++ new/python_swiftclient-4.10.0/python_swiftclient.egg-info/requires.txt 2026-02-25 22:00:39.000000000 +0100 @@ -10,3 +10,4 @@ keystoneauth1>=3.4.0 stestr!=3.0.0,>=2.0.0 openstacksdk>=0.11.0 +python-openstackclient>=3.12.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/releasenotes/notes/4_10_0_release-8370f0dcdb8a0e11.yaml new/python_swiftclient-4.10.0/releasenotes/notes/4_10_0_release-8370f0dcdb8a0e11.yaml --- old/python_swiftclient-4.8.0/releasenotes/notes/4_10_0_release-8370f0dcdb8a0e11.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/python_swiftclient-4.10.0/releasenotes/notes/4_10_0_release-8370f0dcdb8a0e11.yaml 2026-02-25 21:59:51.000000000 +0100 @@ -0,0 +1,17 @@ +--- +features: + - | + Now tested under Python 3.14. + +upgrade: + - | + Removed support for the provider-specific SERVICENET. Explicitly override + your storage URLs if you were previously using this feature. + +fixes: + - | + The "v1password" plugin for keystoneauth now returns v3-compatible service + catalogs, fixing some issues seen when using v1 auth with openstackclient. + + - | + Various other minor improvements. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/releasenotes/notes/4_9_0_release-b26426108163280d.yaml new/python_swiftclient-4.10.0/releasenotes/notes/4_9_0_release-b26426108163280d.yaml --- old/python_swiftclient-4.8.0/releasenotes/notes/4_9_0_release-b26426108163280d.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/python_swiftclient-4.10.0/releasenotes/notes/4_9_0_release-b26426108163280d.yaml 2026-02-25 21:59:51.000000000 +0100 @@ -0,0 +1,7 @@ +--- +fixes: + - | + The ``timeout`` parameter is now included when creating Keystoneauth Sessions. + + - | + Various other minor improvements. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/releasenotes/source/2024.1.rst new/python_swiftclient-4.10.0/releasenotes/source/2024.1.rst --- old/python_swiftclient-4.8.0/releasenotes/source/2024.1.rst 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/releasenotes/source/2024.1.rst 2026-02-25 21:59:51.000000000 +0100 @@ -3,4 +3,4 @@ =========================== .. release-notes:: - :branch: stable/2024.1 + :branch: unmaintained/2024.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/releasenotes/source/2025.2.rst new/python_swiftclient-4.10.0/releasenotes/source/2025.2.rst --- old/python_swiftclient-4.8.0/releasenotes/source/2025.2.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/python_swiftclient-4.10.0/releasenotes/source/2025.2.rst 2026-02-25 21:59:51.000000000 +0100 @@ -0,0 +1,6 @@ +=========================== +2025.2 Series Release Notes +=========================== + +.. release-notes:: + :branch: stable/2025.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/releasenotes/source/index.rst new/python_swiftclient-4.10.0/releasenotes/source/index.rst --- old/python_swiftclient-4.8.0/releasenotes/source/index.rst 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/releasenotes/source/index.rst 2026-02-25 21:59:51.000000000 +0100 @@ -6,6 +6,7 @@ :maxdepth: 1 current + 2025.2 2025.1 2024.2 2024.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/setup.cfg new/python_swiftclient-4.10.0/setup.cfg --- old/python_swiftclient-4.8.0/setup.cfg 2025-05-22 09:14:51.096040500 +0200 +++ new/python_swiftclient-4.10.0/setup.cfg 2026-02-25 22:00:39.550790800 +0100 @@ -30,6 +30,7 @@ Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 Programming Language :: Python :: 3.13 + Programming Language :: Python :: 3.14 Programming Language :: Python :: 3 :: Only [files] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/swiftclient/authv1.py new/python_swiftclient-4.10.0/swiftclient/authv1.py --- old/python_swiftclient-4.8.0/swiftclient/authv1.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/swiftclient/authv1.py 2026-02-25 21:59:51.000000000 +0100 @@ -37,6 +37,7 @@ """ import datetime +from datetime import timezone import json import time @@ -52,22 +53,6 @@ from keystoneauth1.identity import base -# stupid stdlib... -class _UTC(datetime.tzinfo): - def utcoffset(self, dt): - return datetime.timedelta(0) - - def tzname(self, dt): - return "UTC" - - def dst(self, dt): - return datetime.timedelta(0) - - -UTC = _UTC() -del _UTC - - class ServiceCatalogV1: def __init__(self, auth_url, storage_url, account): self.auth_url = auth_url @@ -85,13 +70,15 @@ # openstackclient wants this for the `catalog list` and # `catalog show` commands endpoints = [{ + 'interface': 'public', 'region': 'default', - 'publicURL': self._storage_url, + 'url': self._storage_url, }] if self.storage_url != self._storage_url: endpoints.insert(0, { + 'interface': 'public', 'region': 'override', - 'publicURL': self.storage_url, + 'url': self.storage_url, }) return [ @@ -104,8 +91,9 @@ 'name': 'auth', 'type': 'identity', 'endpoints': [{ + 'interface': 'public', 'region': 'default', - 'publicURL': self.auth_url, + 'url': self.auth_url, }], } ] @@ -166,16 +154,18 @@ self._expires = None # following is used by openstackclient self.project_id = None + self.domain_id = 'default' + self.system_scoped = False @property def expires(self): if self._expires is None: return None - return datetime.datetime.fromtimestamp(self._expires, UTC) + return datetime.datetime.fromtimestamp(self._expires, timezone.utc) @property def issued(self): - return datetime.datetime.fromtimestamp(self._issued, UTC) + return datetime.datetime.fromtimestamp(self._issued, timezone.utc) @property def user_id(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/swiftclient/client.py new/python_swiftclient-4.10.0/swiftclient/client.py --- old/python_swiftclient-4.8.0/swiftclient/client.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/swiftclient/client.py 2026-02-25 21:59:51.000000000 +0100 @@ -441,7 +441,7 @@ def getresponse(self): """Adapt requests response to httplib interface""" self.resp.status = self.resp.status_code - old_getheader = self.resp.raw.getheader + old_getheader = self.resp.headers.get def _decode_header(string): if string is None: @@ -490,7 +490,7 @@ return conn.parsed_url, conn -def get_auth_1_0(url, user, key, snet, **kwargs): +def get_auth_1_0(url, user, key, **kwargs): cacert = kwargs.get('cacert', None) insecure = kwargs.get('insecure', False) cert = kwargs.get('cert') @@ -514,12 +514,6 @@ # if we don't have a x-storage-url header and if we get a body. if resp.status < 200 or resp.status >= 300 or (body and not url): raise ClientException.from_response(resp, 'Auth GET failed', body) - if snet: - parsed = list(urlparse(url)) - # Second item in the list is the netloc - netloc = parsed[1] - parsed[1] = 'snet-' + netloc - url = urlunparse(parsed) token = resp.getheader('x-storage-token', resp.getheader('x-auth-token')) return url, token @@ -577,7 +571,7 @@ filter_kwargs = {} service_type = os_options.get('service_type') or 'object-store' - endpoint_type = os_options.get('endpoint_type') or 'publicURL' + endpoint_type = os_options.get('endpoint_type') or 'public' if os_options.get('region_name'): filter_kwargs['attr'] = 'region' filter_kwargs['filter_value'] = os_options['region_name'] @@ -601,7 +595,7 @@ 'application_credential_secret'), application_credential_id=os_options.get( 'application_credential_id')) - sess = ksa_session.Session(auth=auth) + sess = ksa_session.Session(auth=auth, timeout=timeout) token = sess.get_token() except ksauthexceptions.Unauthorized: msg = 'Unauthorized. Check application credential id and secret.' @@ -671,12 +665,6 @@ N.B. if the optional os_options parameter includes a non-empty 'object_storage_url' key it will override the default storage url returned by the auth service. - - The snet parameter is used for Rackspace's ServiceNet internal network - implementation. In this function, it simply adds *snet-* to the beginning - of the host name for the returned storage URL. With Rackspace Cloud Files, - use of this network path causes no bandwidth charges but requires the - client to be running on Rackspace's ServiceNet network. """ session = kwargs.get('session', None) auth_version = kwargs.get('auth_version', '1') @@ -700,7 +688,6 @@ storage_url, token = get_auth_1_0(auth_url, user, key, - kwargs.get('snet'), cacert=cacert, insecure=insecure, cert=cert, @@ -1654,7 +1641,7 @@ """ def __init__(self, authurl=None, user=None, key=None, retries=5, - preauthurl=None, preauthtoken=None, snet=False, + preauthurl=None, preauthtoken=None, starting_backoff=1, max_backoff=64, tenant_name=None, os_options=None, auth_version="1", cacert=None, insecure=False, cert=None, cert_key=None, @@ -1669,7 +1656,6 @@ :param preauthtoken: authentication token (if you have already authenticated) note authurl/user/key/tenant_name are not required when specifying preauthtoken - :param snet: use SERVICENET internal network default is False :param starting_backoff: initial delay between retries (seconds) :param max_backoff: maximum delay between retries (seconds) :param auth_version: OpenStack auth version, default is 1.0 @@ -1705,7 +1691,6 @@ self.retries = retries self.http_conn = None self.attempts = 0 - self.snet = snet self.starting_backoff = starting_backoff self.max_backoff = max_backoff self.auth_version = auth_version @@ -1740,7 +1725,7 @@ def get_auth(self): self.url, self.token = get_auth(self.authurl, self.user, self.key, - session=self.session, snet=self.snet, + session=self.session, auth_version=self.auth_version, os_options=self.os_options, cacert=self.cacert, @@ -1761,7 +1746,6 @@ service_key = opts.get('service_key', None) return get_auth(self.authurl, service_user, service_key, session=self.session, - snet=self.snet, auth_version=self.auth_version, os_options=service_options, cacert=self.cacert, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/swiftclient/service.py new/python_swiftclient-4.10.0/swiftclient/service.py --- old/python_swiftclient-4.8.0/swiftclient/service.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/swiftclient/service.py 2026-02-25 21:59:51.000000000 +0100 @@ -163,7 +163,6 @@ def _build_default_global_options(): return { - "snet": False, "verbose": 1, "debug": False, "info": False, @@ -298,7 +297,6 @@ retries=options['retries'], auth_version=options['auth_version'], os_options=options['os_options'], - snet=options['snet'], cacert=options['os_cacert'], insecure=options['insecure'], cert=options['os_cert'], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/swiftclient/shell.py new/python_swiftclient-4.10.0/swiftclient/shell.py --- old/python_swiftclient-4.8.0/swiftclient/shell.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/swiftclient/shell.py 2026-02-25 21:59:51.000000000 +0100 @@ -1727,8 +1727,6 @@ help='Show OpenStack authentication options.') parser.add_argument('--os_help', action='store_true', help=argparse.SUPPRESS) - parser.add_argument('-s', '--snet', action='store_true', dest='snet', - default=False, help='Use SERVICENET internal network.') parser.add_argument('-v', '--verbose', action='count', dest='verbose', default=1, help='Print more info.') parser.add_argument('--debug', action='store_true', dest='debug', @@ -1965,7 +1963,7 @@ parser = argparse.ArgumentParser( add_help=False, formatter_class=HelpFormatter, usage=''' -%(prog)s [--version] [--help] [--os-help] [--snet] [--verbose] +%(prog)s [--version] [--help] [--os-help] [--verbose] [--debug] [--debug-with-secrets] [--info] [--quiet] [--auth <auth_url>] [--auth-version <auth_version> | --os-identity-api-version <auth_version> ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/test/functional/test_openstackclient.py new/python_swiftclient-4.10.0/test/functional/test_openstackclient.py --- old/python_swiftclient-4.8.0/test/functional/test_openstackclient.py 1970-01-01 01:00:00.000000000 +0100 +++ new/python_swiftclient-4.10.0/test/functional/test_openstackclient.py 2026-02-25 21:59:51.000000000 +0100 @@ -0,0 +1,62 @@ +# Copyright (c) 2025 NVIDIA +# +# 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 os +import subprocess +import unittest + +from . import TEST_CONFIG + + +class TestOpenStackClient(unittest.TestCase): + @classmethod + def setUpClass(cls): + # NB: Only runs for v1 auth, to exercise our keystoneauth plugin + cls.skip_tests = (TEST_CONFIG is None or + TEST_CONFIG['auth_version'] != '1') + cls.env = { + 'OS_AUTH_TYPE': 'v1password', + 'OS_AUTH_URL': TEST_CONFIG['auth_url'] or '', + 'OS_USERNAME': TEST_CONFIG['account_username'] or '', + 'OS_PASSWORD': TEST_CONFIG['password'] or '', + 'OS_CACERT': TEST_CONFIG['cacert'] or '', + } + if 'PATH' in os.environ: + cls.env['PATH'] = os.environ['PATH'] + + def setUp(self): + if self.skip_tests: + raise unittest.SkipTest('SKIPPING V1-AUTH TESTS') + + def _run(self, *args): + subprocess.run(args, env=self.env, check=True) + + def test_token_issue(self): + self._run('openstack', 'token', 'issue') + + def test_catalog_list(self): + self._run('openstack', 'catalog', 'list') + + def test_catalog_show(self): + self._run('openstack', 'catalog', 'show', 'swift') + self._run('openstack', 'catalog', 'show', 'object-store') + self._run('openstack', 'catalog', 'show', 'auth') + + def test_account_show(self): + self._run('openstack', 'object', 'store', 'account', 'show') + # If account show works and the openstacksdk tests work, presumably + # container/object commands work, too + + # service list? endpoint list? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/test/sample.conf new/python_swiftclient-4.10.0/test/sample.conf --- old/python_swiftclient-4.8.0/test/sample.conf 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/test/sample.conf 2026-02-25 21:59:51.000000000 +0100 @@ -1,10 +1,8 @@ [func_test] # sample config auth_uri = http://127.0.0.1:8080/auth/v1.0/ -## sample config for Swift with Keystone v2 API -# For keystone v3 change auth_version to 3 and auth_prefix to /v3/ -#auth_version = 2 -#auth_uri = http://localhost:5000/v2.0/ +# sample config for Swift with Keystone API v3 +#auth_uri = http://localhost:5000/v3/ # You may want to run tests against endpoints that use development certs # without installing the CA system-wide. Use this to trust an extra set diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/test/unit/test_authv1.py new/python_swiftclient-4.10.0/test/unit/test_authv1.py --- old/python_swiftclient-4.8.0/test/unit/test_authv1.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/test/unit/test_authv1.py 2026-02-25 21:59:51.000000000 +0100 @@ -163,7 +163,7 @@ self.assertEqual('object-store', catalog[0].get('type')) self.assertIn('endpoints', catalog[0]) self.assertIn(self.storage_url, [ - e.get('publicURL') for e in catalog[0]['endpoints']]) + e.get('url') for e in catalog[0]['endpoints']]) def test_get_access_with_expiry(self): auth_plugin = authv1.PasswordPlugin(**self.options) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/test/unit/test_shell.py new/python_swiftclient-4.10.0/test/unit/test_shell.py --- old/python_swiftclient-4.8.0/test/unit/test_shell.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/test/unit/test_shell.py 2026-02-25 21:59:51.000000000 +0100 @@ -3365,7 +3365,7 @@ # options that are given default values in code if missing from CLI defaults = {'auth-version': '2.0', 'service-type': 'object-store', - 'endpoint-type': 'publicURL'} + 'endpoint-type': 'public'} def _build_os_opts(self, keys): os_opts = {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/test/unit/test_swiftclient.py new/python_swiftclient-4.10.0/test/unit/test_swiftclient.py --- old/python_swiftclient-4.8.0/test/unit/test_swiftclient.py 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/test/unit/test_swiftclient.py 2026-02-25 21:59:51.000000000 +0100 @@ -594,8 +594,11 @@ class FakeKeystoneuth1v3Session: - def __init__(self, auth): + def __init__(self, auth, timeout=None): self.auth = auth + self.timeout = None + if timeout is not None: + self.timeout = float(timeout) self.token = 'token' def get_token(self): @@ -2000,6 +2003,7 @@ self.assertEqual( '\u062a-value', resp.getheader('\u062a-UNICODE')) self.assertEqual('', resp.getheader('empty-header')) + self.assertEqual('"%s"' % EMPTY_ETAG, resp.getheader('etag')) self.assertEqual( dict([('\u062a-unicode', '\u062a-value'), ('empty-header', ''), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/test-requirements.txt new/python_swiftclient-4.10.0/test-requirements.txt --- old/python_swiftclient-4.8.0/test-requirements.txt 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/test-requirements.txt 2026-02-25 21:59:51.000000000 +0100 @@ -5,3 +5,4 @@ keystoneauth1>=3.4.0 # Apache-2.0 stestr>=2.0.0,!=3.0.0 # Apache-2.0 openstacksdk>=0.11.0 # Apache-2.0 +python-openstackclient>=3.12.0 # Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python_swiftclient-4.8.0/tox.ini new/python_swiftclient-4.10.0/tox.ini --- old/python_swiftclient-4.8.0/tox.ini 2025-05-22 09:14:20.000000000 +0200 +++ new/python_swiftclient-4.10.0/tox.ini 2026-02-25 21:59:51.000000000 +0100 @@ -24,7 +24,7 @@ commands = python -m flake8 swiftclient test -[testenv:{py36,py37,py38}] +[testenv:{py37,py38,py39}] # Drop the use of constraints; most dependencies have dropped support for # these versions already, and have updated their metadata to reflect that deps = -r{toxinidir}/requirements.txt
