Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-oslo.vmware for openSUSE:Factory checked in at 2026-03-10 17:48:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-oslo.vmware (Old) and /work/SRC/openSUSE:Factory/.python-oslo.vmware.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.vmware" Tue Mar 10 17:48:00 2026 rev:29 rq:1337829 version:4.9.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-oslo.vmware/python-oslo.vmware.changes 2025-11-10 19:18:03.110135016 +0100 +++ /work/SRC/openSUSE:Factory/.python-oslo.vmware.new.8177/python-oslo.vmware.changes 2026-03-10 17:48:18.567154505 +0100 @@ -1,0 +2,18 @@ +Mon Mar 9 15:26:34 UTC 2026 - Dirk Müller <[email protected]> + +- update to 4.9.0: + * Remove eventlet timeout from image\_transfer + * Remove unused PCRE packages + * Delay string interpolations at logging calls + * Remove reference to tag framework + * [test]Mock time.sleep instead of greenthread.sleep + * Use oslo.service loopingcall + * reno: Update master for unmaintained/2024.1 + * Bump pyupgrade target to 3.10+ + * Migrate bandit options to pyproject.toml + * pre-commit: Bump dependencies + * Migrate setup configuration to pyproject.toml + * Drop Python 3.9 support + * Update master for stable/2025.2 + +------------------------------------------------------------------- Old: ---- oslo_vmware-4.7.0.tar.gz New: ---- oslo_vmware-4.9.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-oslo.vmware.spec ++++++ --- /var/tmp/diff_new_pack.IAZXYV/_old 2026-03-10 17:48:19.395188686 +0100 +++ /var/tmp/diff_new_pack.IAZXYV/_new 2026-03-10 17:48:19.399188851 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-oslo.vmware # -# 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 @@ -17,7 +17,7 @@ Name: python-oslo.vmware -Version: 4.7.0 +Version: 4.9.0 Release: 0 Summary: Oslo VMware library for OpenStack projects License: Apache-2.0 @@ -33,6 +33,7 @@ BuildRequires: %{python_module oslo.concurrency >= 3.26.0} BuildRequires: %{python_module oslo.context >= 2.19.2} BuildRequires: %{python_module oslo.i18n >= 3.15.3} +BuildRequires: %{python_module oslo.service >= 4.3.0} BuildRequires: %{python_module oslo.utils >= 3.33.0} BuildRequires: %{python_module pip} BuildRequires: %{python_module python-subunit} @@ -50,6 +51,7 @@ Requires: python-oslo.concurrency >= 3.26.0 Requires: python-oslo.context >= 2.19.2 Requires: python-oslo.i18n >= 3.15.3 +Requires: python-oslo.service >= 4.3.0 Requires: python-oslo.utils >= 3.33.0 Requires: python-requests >= 2.14.2 Requires: python-suds-community >= 0.6 ++++++ oslo_vmware-4.7.0.tar.gz -> oslo_vmware-4.9.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/.pre-commit-config.yaml new/oslo_vmware-4.9.0/.pre-commit-config.yaml --- old/oslo_vmware-4.7.0/.pre-commit-config.yaml 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/.pre-commit-config.yaml 2026-02-17 17:06:06.000000000 +0100 @@ -1,20 +1,14 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: trailing-whitespace - # Replaces or checks mixed line ending - id: mixed-line-ending args: ['--fix', 'lf'] exclude: '.*\.(svg)$' - # Forbid files which have a UTF-8 byte-order marker - - id: check-byte-order-marker - # Checks that non-binary executables have a proper shebang + - id: fix-byte-order-marker - id: check-executables-have-shebangs - # Check for files that contain merge conflict strings. - id: check-merge-conflict - # Check for debugger imports and py37+ breakpoint() - # calls in python source - id: debug-statements - id: check-yaml files: .*\.(yaml|yml)$ @@ -24,12 +18,12 @@ - id: hacking additional_dependencies: [] - repo: https://github.com/PyCQA/bandit - rev: 1.7.10 + rev: 1.8.6 hooks: - id: bandit - args: ['-x', 'tests'] + args: ['-c', 'pyproject.toml'] - repo: https://github.com/asottile/pyupgrade - rev: v3.18.0 + rev: v3.20.0 hooks: - id: pyupgrade - args: [--py3-only] + args: [--py310-plus] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/AUTHORS new/oslo_vmware-4.9.0/AUTHORS --- old/oslo_vmware-4.7.0/AUTHORS 2025-07-25 12:55:02.000000000 +0200 +++ new/oslo_vmware-4.9.0/AUTHORS 2026-02-17 17:07:10.000000000 +0100 @@ -5,6 +5,7 @@ Andreas Jaeger <[email protected]> Arnaud Legendre <[email protected]> Arnaud Legendre <[email protected]> +Balazs Gibizer <[email protected]> Cao Xuan Hoang <[email protected]> Cedric Brandily <[email protected]> ChangBo Guo(gcb) <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/ChangeLog new/oslo_vmware-4.9.0/ChangeLog --- old/oslo_vmware-4.7.0/ChangeLog 2025-07-25 12:55:02.000000000 +0200 +++ new/oslo_vmware-4.9.0/ChangeLog 2026-02-17 17:07:10.000000000 +0100 @@ -1,6 +1,27 @@ CHANGES ======= +4.9.0 +----- + +* Remove eventlet timeout from image\_transfer + +4.8.0 +----- + +* Remove unused PCRE packages +* Delay string interpolations at logging calls +* Remove reference to tag framework +* [test]Mock time.sleep instead of greenthread.sleep +* Use oslo.service loopingcall +* reno: Update master for unmaintained/2024.1 +* Bump pyupgrade target to 3.10+ +* Migrate bandit options to pyproject.toml +* pre-commit: Bump dependencies +* Migrate setup configuration to pyproject.toml +* Drop Python 3.9 support +* Update master for stable/2025.2 + 4.7.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/PKG-INFO new/oslo_vmware-4.9.0/PKG-INFO --- old/oslo_vmware-4.7.0/PKG-INFO 2025-07-25 12:55:02.166318400 +0200 +++ new/oslo_vmware-4.9.0/PKG-INFO 2026-02-17 17:07:10.461320600 +0100 @@ -1,10 +1,11 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.4 Name: oslo.vmware -Version: 4.7.0 +Version: 4.9.0 Summary: Oslo VMware library -Home-page: https://docs.openstack.org/oslo.vmware/latest/ -Author: OpenStack -Author-email: [email protected] +Author-email: OpenStack <[email protected]> +License: Apache-2.0 +Project-URL: Homepage, https://docs.openstack.org/oslo.vmware +Project-URL: Repository, https://opendev.org/openstack/oslo.vmware Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators @@ -12,13 +13,12 @@ Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: Implementation :: CPython -Requires-Python: >=3.9 +Classifier: Programming Language :: Python :: 3.13 +Requires-Python: >=3.10 +Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: pbr!=2.1.0,>=2.0.0 Requires-Dist: oslo.i18n>=3.15.3 @@ -30,20 +30,18 @@ Requires-Dist: urllib3>=1.21.1 Requires-Dist: oslo.concurrency>=3.26.0 Requires-Dist: oslo.context>=2.19.2 +Requires-Dist: oslo.service>=4.3.0 +Dynamic: license-file +Dynamic: requires-dist -======================== -Team and repository tags -======================== +================================================= +oslo.vmware --- VMware support code for OpenStack +================================================= .. image:: https://governance.openstack.org/tc/badges/oslo.vmware.svg - :target: https://governance.openstack.org/tc/reference/tags/index.html .. Change things from this point on -================================================= -oslo.vmware --- VMware support code for OpenStack -================================================= - .. image:: https://img.shields.io/pypi/v/oslo.vmware.svg :target: https://pypi.org/project/oslo.vmware/ :alt: Latest Version @@ -60,4 +58,3 @@ * Source: https://opendev.org/openstack/oslo.vmware * Bugs: https://bugs.launchpad.net/oslo.vmware * Release notes: https://docs.openstack.org/releasenotes/oslo.vmware/ - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/README.rst new/oslo_vmware-4.9.0/README.rst --- old/oslo_vmware-4.7.0/README.rst 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/README.rst 2026-02-17 17:06:06.000000000 +0100 @@ -1,16 +1,11 @@ -======================== -Team and repository tags -======================== +================================================= +oslo.vmware --- VMware support code for OpenStack +================================================= .. image:: https://governance.openstack.org/tc/badges/oslo.vmware.svg - :target: https://governance.openstack.org/tc/reference/tags/index.html .. Change things from this point on -================================================= -oslo.vmware --- VMware support code for OpenStack -================================================= - .. image:: https://img.shields.io/pypi/v/oslo.vmware.svg :target: https://pypi.org/project/oslo.vmware/ :alt: Latest Version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/bindep.txt new/oslo_vmware-4.9.0/bindep.txt --- old/oslo_vmware-4.7.0/bindep.txt 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/bindep.txt 2026-02-17 17:06:06.000000000 +0100 @@ -8,5 +8,3 @@ libxslt-devel [platform:rpm test] python3-dev [platform:dpkg test] python3-devel [platform:rpm test] -libpcre3-dev [platform:dpkg test] -pcre-devel [platform:rpm test] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo.vmware.egg-info/PKG-INFO new/oslo_vmware-4.9.0/oslo.vmware.egg-info/PKG-INFO --- old/oslo_vmware-4.7.0/oslo.vmware.egg-info/PKG-INFO 2025-07-25 12:55:02.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo.vmware.egg-info/PKG-INFO 2026-02-17 17:07:10.000000000 +0100 @@ -1,10 +1,11 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.4 Name: oslo.vmware -Version: 4.7.0 +Version: 4.9.0 Summary: Oslo VMware library -Home-page: https://docs.openstack.org/oslo.vmware/latest/ -Author: OpenStack -Author-email: [email protected] +Author-email: OpenStack <[email protected]> +License: Apache-2.0 +Project-URL: Homepage, https://docs.openstack.org/oslo.vmware +Project-URL: Repository, https://opendev.org/openstack/oslo.vmware Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators @@ -12,13 +13,12 @@ Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: Implementation :: CPython -Requires-Python: >=3.9 +Classifier: Programming Language :: Python :: 3.13 +Requires-Python: >=3.10 +Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: pbr!=2.1.0,>=2.0.0 Requires-Dist: oslo.i18n>=3.15.3 @@ -30,20 +30,18 @@ Requires-Dist: urllib3>=1.21.1 Requires-Dist: oslo.concurrency>=3.26.0 Requires-Dist: oslo.context>=2.19.2 +Requires-Dist: oslo.service>=4.3.0 +Dynamic: license-file +Dynamic: requires-dist -======================== -Team and repository tags -======================== +================================================= +oslo.vmware --- VMware support code for OpenStack +================================================= .. image:: https://governance.openstack.org/tc/badges/oslo.vmware.svg - :target: https://governance.openstack.org/tc/reference/tags/index.html .. Change things from this point on -================================================= -oslo.vmware --- VMware support code for OpenStack -================================================= - .. image:: https://img.shields.io/pypi/v/oslo.vmware.svg :target: https://pypi.org/project/oslo.vmware/ :alt: Latest Version @@ -60,4 +58,3 @@ * Source: https://opendev.org/openstack/oslo.vmware * Bugs: https://bugs.launchpad.net/oslo.vmware * Release notes: https://docs.openstack.org/releasenotes/oslo.vmware/ - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo.vmware.egg-info/SOURCES.txt new/oslo_vmware-4.9.0/oslo.vmware.egg-info/SOURCES.txt --- old/oslo_vmware-4.7.0/oslo.vmware.egg-info/SOURCES.txt 2025-07-25 12:55:02.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo.vmware.egg-info/SOURCES.txt 2026-02-17 17:07:10.000000000 +0100 @@ -47,8 +47,6 @@ oslo_vmware/version.py oslo_vmware/vim.py oslo_vmware/vim_util.py -oslo_vmware/common/__init__.py -oslo_vmware/common/loopingcall.py oslo_vmware/hacking/__init__.py oslo_vmware/hacking/checks.py oslo_vmware/locale/en_GB/LC_MESSAGES/oslo_vmware.po @@ -119,12 +117,14 @@ releasenotes/notes/bp-oslo-vmware-soap-library-switch-cookiejar-access-d7efcc23d0eaee98.yaml releasenotes/notes/bp-oslo-vmware-soap-library-switch-helper-functions-21330be61cf7922a.yaml releasenotes/notes/drop-python27-support-4991a70046af4b03.yaml +releasenotes/notes/remove-py39-51518455aaf46d7f.yaml releasenotes/notes/vmdk-transfer-validation-014d28cc9430e51b.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/index.rst releasenotes/source/newton.rst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo.vmware.egg-info/pbr.json new/oslo_vmware-4.9.0/oslo.vmware.egg-info/pbr.json --- old/oslo_vmware-4.7.0/oslo.vmware.egg-info/pbr.json 2025-07-25 12:55:02.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo.vmware.egg-info/pbr.json 2026-02-17 17:07:10.000000000 +0100 @@ -1 +1 @@ -{"git_version": "308a9a6", "is_release": true} \ No newline at end of file +{"git_version": "8d9b0cb", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo.vmware.egg-info/requires.txt new/oslo_vmware-4.9.0/oslo.vmware.egg-info/requires.txt --- old/oslo_vmware-4.7.0/oslo.vmware.egg-info/requires.txt 2025-07-25 12:55:02.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo.vmware.egg-info/requires.txt 2026-02-17 17:07:10.000000000 +0100 @@ -8,3 +8,4 @@ urllib3>=1.21.1 oslo.concurrency>=3.26.0 oslo.context>=2.19.2 +oslo.service>=4.3.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/api.py new/oslo_vmware-4.9.0/oslo_vmware/api.py --- old/oslo_vmware-4.7.0/oslo_vmware/api.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/api.py 2026-02-17 17:06:06.000000000 +0100 @@ -25,11 +25,10 @@ from oslo_concurrency import lockutils from oslo_context import context +from oslo_service import loopingcall from oslo_utils import excutils -from oslo_utils import reflection from oslo_vmware._i18n import _ -from oslo_vmware.common import loopingcall from oslo_vmware import exceptions from oslo_vmware import pbm from oslo_vmware import vim @@ -45,85 +44,6 @@ return session_id[-5:] -# TODO(vbala) Move this class to excutils.py. -class RetryDecorator: - """Decorator for retrying a function upon suggested exceptions. - - The decorated function is retried for the given number of times, and the - sleep time between the retries is incremented until max sleep time is - reached. If the max retry count is set to -1, then the decorated function - is invoked indefinitely until an exception is thrown, and the caught - exception is not in the list of suggested exceptions. - """ - - def __init__(self, max_retry_count=-1, inc_sleep_time=10, - max_sleep_time=60, exceptions=()): - """Configure the retry object using the input params. - - :param max_retry_count: maximum number of times the given function must - be retried when one of the input 'exceptions' - is caught. When set to -1, it will be retried - indefinitely until an exception is thrown - and the caught exception is not in param - exceptions. - :param inc_sleep_time: incremental time in seconds for sleep time - between retries - :param max_sleep_time: max sleep time in seconds beyond which the sleep - time will not be incremented using param - inc_sleep_time. On reaching this threshold, - max_sleep_time will be used as the sleep time. - :param exceptions: suggested exceptions for which the function must be - retried - """ - self._max_retry_count = max_retry_count - self._inc_sleep_time = inc_sleep_time - self._max_sleep_time = max_sleep_time - self._exceptions = exceptions - self._retry_count = 0 - self._sleep_time = 0 - - def __call__(self, f): - func_name = reflection.get_callable_name(f) - - def _func(*args, **kwargs): - result = None - try: - if self._retry_count: - LOG.debug("Invoking %(func_name)s; retry count is " - "%(retry_count)d.", - {'func_name': func_name, - 'retry_count': self._retry_count}) - result = f(*args, **kwargs) - except self._exceptions: - with excutils.save_and_reraise_exception() as ctxt: - LOG.warning("Exception which is in the suggested list " - "of exceptions occurred while invoking " - "function: %s.", - func_name, - exc_info=True) - if (self._max_retry_count != -1 and - self._retry_count >= self._max_retry_count): - LOG.error("Cannot retry upon suggested exception " - "since retry count (%(retry_count)d) " - "reached max retry count " - "(%(max_retry_count)d).", - {'retry_count': self._retry_count, - 'max_retry_count': self._max_retry_count}) - else: - ctxt.reraise = False - self._retry_count += 1 - self._sleep_time += self._inc_sleep_time - return self._sleep_time - raise loopingcall.LoopingCallDone(result) - - def func(*args, **kwargs): - loop = loopingcall.DynamicLoopingCall(_func, *args, **kwargs) - evt = loop.start(periodic_interval_max=self._max_sleep_time) - return evt.wait() - - return func - - class VMwareAPISession: """Setup a session with the server and handles all calls made to it. @@ -226,7 +146,8 @@ self._pbm.set_soap_cookie(self._vim.get_http_cookie()) return self._pbm - @RetryDecorator(exceptions=(exceptions.VimConnectionException,)) + @loopingcall.RetryDecorator( + exceptions=(exceptions.VimConnectionException,)) @lockutils.synchronized('oslo_vmware_api_lock') def _create_session(self): """Establish session with the server.""" @@ -292,9 +213,10 @@ VimSessionOverLoadException, VimConnectionException """ - @RetryDecorator(max_retry_count=self._api_retry_count, - exceptions=(exceptions.VimSessionOverLoadException, - exceptions.VimConnectionException)) + @loopingcall.RetryDecorator( + max_retry_count=self._api_retry_count, + exceptions=(exceptions.VimSessionOverLoadException, + exceptions.VimConnectionException)) def _invoke_api(module, method, *args, **kwargs): try: api_method = getattr(module, method) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/common/loopingcall.py new/oslo_vmware-4.9.0/oslo_vmware/common/loopingcall.py --- old/oslo_vmware-4.7.0/oslo_vmware/common/loopingcall.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/common/loopingcall.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,143 +0,0 @@ -# Copyright 2010 United States Government as represented by the -# Administrator of the National Aeronautics and Space Administration. -# Copyright 2011 Justin Santa Barbara -# All Rights Reserved. -# -# 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 logging -import sys - -from eventlet import event -from eventlet import greenthread -from oslo_utils import timeutils - - -LOG = logging.getLogger(__name__) - - -class LoopingCallDone(Exception): - """Exception to break out and stop a LoopingCall. - - The poll-function passed to LoopingCall can raise this exception to - break out of the loop normally. This is somewhat analogous to - StopIteration. - - An optional return-value can be included as the argument to the exception; - this return-value will be returned by LoopingCall.wait() - - """ - - def __init__(self, retvalue=True): - """:param retvalue: Value that LoopingCall.wait() should return.""" - self.retvalue = retvalue - - -class LoopingCallBase: - def __init__(self, f=None, *args, **kw): - self.args = args - self.kw = kw - self.f = f - self._running = False - self.done = None - - def stop(self): - self._running = False - - def wait(self): - return self.done.wait() - - -class FixedIntervalLoopingCall(LoopingCallBase): - """A fixed interval looping call.""" - - def start(self, interval, initial_delay=None): - self._running = True - done = event.Event() - - def _inner(): - if initial_delay: - greenthread.sleep(initial_delay) - - try: - while self._running: - start = timeutils.utcnow() - self.f(*self.args, **self.kw) - end = timeutils.utcnow() - if not self._running: - break - delay = interval - timeutils.delta_seconds(start, end) - if delay <= 0: - LOG.warning('task run outlasted interval ' - 'by %s sec', - -delay) - greenthread.sleep(delay if delay > 0 else 0) - except LoopingCallDone as e: - self.stop() - done.send(e.retvalue) - except Exception: - done.send_exception(*sys.exc_info()) - return - else: - done.send(True) - - self.done = done - - greenthread.spawn_n(_inner) - return self.done - - -# TODO(mikal): this class name is deprecated in Havana and should be removed -# in the I release -LoopingCall = FixedIntervalLoopingCall - - -class DynamicLoopingCall(LoopingCallBase): - """A looping call which sleeps until the next known event. - - The function called should return how long to sleep for before being - called again. - """ - - def start(self, initial_delay=None, periodic_interval_max=None): - self._running = True - done = event.Event() - - def _inner(): - if initial_delay: - greenthread.sleep(initial_delay) - - try: - while self._running: - idle = self.f(*self.args, **self.kw) - if not self._running: - break - - if periodic_interval_max is not None: - idle = min(idle, periodic_interval_max) - LOG.debug('Dynamic looping call sleeping for %.02f ' - 'seconds', idle) - greenthread.sleep(idle) - except LoopingCallDone as e: - self.stop() - done.send(e.retvalue) - except Exception: - done.send_exception(*sys.exc_info()) - return - else: - done.send(True) - - self.done = done - - greenthread.spawn(_inner) - return self.done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/exceptions.py new/oslo_vmware-4.9.0/oslo_vmware/exceptions.py --- old/oslo_vmware-4.7.0/oslo_vmware/exceptions.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/exceptions.py 2026-02-17 17:06:06.000000000 +0100 @@ -148,7 +148,7 @@ descr += '\nFaults: ' + str(self.fault_list) if self.details: # details may contain non-ASCII values - details = '{%s}' % ', '.join(["'{}': '{}'".format(k, v) for k, v in + details = '{%s}' % ', '.join([f"'{k}': '{v}'" for k, v in self.details.items()]) descr += '\nDetails: ' + details return descr diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/image_transfer.py new/oslo_vmware-4.9.0/oslo_vmware/image_transfer.py --- old/oslo_vmware-4.7.0/oslo_vmware/image_transfer.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/image_transfer.py 2026-02-17 17:06:06.000000000 +0100 @@ -19,12 +19,11 @@ import logging import tarfile +import time -from eventlet import timeout - +from oslo_service import loopingcall from oslo_utils import units from oslo_vmware._i18n import _ -from oslo_vmware.common import loopingcall from oslo_vmware import constants from oslo_vmware import exceptions from oslo_vmware import image_util @@ -39,6 +38,18 @@ CHUNK_SIZE = 64 * units.Ki # default chunk size for image transfer +class Timer: + class Timeout(Exception): + pass + + def __init__(self, timeout_secs): + self._deadline = time.monotonic() + timeout_secs + + def check_deadline(self): + if (self._deadline - time.monotonic()) <= 0: + raise self.Timeout() + + def _create_progress_updater(handle): if isinstance(handle, rw_handles.VmdkHandle): updater = loopingcall.FixedIntervalLoopingCall(handle.update_progress) @@ -52,14 +63,15 @@ read_updater = _create_progress_updater(read_handle) write_updater = _create_progress_updater(write_handle) - timer = timeout.Timeout(timeout_secs) + timer = Timer(timeout_secs) try: while True: + timer.check_deadline() data = read_handle.read(CHUNK_SIZE) if not data: break write_handle.write(data) - except timeout.Timeout as excep: + except Timer.Timeout as excep: msg = (_('Timeout, read_handle: "%(src)s", write_handle: "%(dest)s"') % {'src': read_handle, 'dest': write_handle}) @@ -72,7 +84,6 @@ LOG.exception(msg) raise exceptions.ImageTransferException(msg, excep) finally: - timer.cancel() if read_updater: read_updater.stop() if write_updater: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/image_util.py new/oslo_vmware-4.9.0/oslo_vmware/image_util.py --- old/oslo_vmware-4.7.0/oslo_vmware/image_util.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/image_util.py 2026-02-17 17:06:06.000000000 +0100 @@ -19,10 +19,10 @@ def _get_vmdk_name_from_ovf(root): ns_ovf = "{{{0}}}".format(root.nsmap["ovf"]) disk = root.find("./{0}DiskSection/{0}Disk".format(ns_ovf)) - file_id = disk.get("{}fileRef".format(ns_ovf)) + file_id = disk.get(f"{ns_ovf}fileRef") f = root.find('./{0}References/{0}File[@{0}id="{1}"]'.format(ns_ovf, file_id)) - return f.get("{}href".format(ns_ovf)) + return f.get(f"{ns_ovf}href") def get_vmdk_name_from_ovf(ovf_handle): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/objects/datastore.py new/oslo_vmware-4.9.0/oslo_vmware/objects/datastore.py --- old/oslo_vmware-4.7.0/oslo_vmware/objects/datastore.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/objects/datastore.py 2026-02-17 17:06:06.000000000 +0100 @@ -312,7 +312,7 @@ def __str__(self): """Full datastore path to the file or directory.""" if self._rel_path != '': - return "[{}] {}".format(self._datastore_name, self.rel_path) + return f"[{self._datastore_name}] {self.rel_path}" return "[%s]" % self._datastore_name @property @@ -435,7 +435,7 @@ LOG.error(excep_msg) raise ValueError(excep_msg) conn.putrequest( - method, '/folder/{}?{}'.format(self.path, self._query)) + method, f'/folder/{self.path}?{self._query}') conn.putheader('User-Agent', constants.USER_AGENT) conn.putheader('Content-Length', content_length) conn.putheader('Cookie', cookie) @@ -459,4 +459,4 @@ 'AcquireGenericServiceTicket', session.vim.service_content.sessionManager, spec=spec) - return '{}="{}"'.format(constants.CGI_COOKIE_KEY, ticket.id) + return f'{constants.CGI_COOKIE_KEY}="{ticket.id}"' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/pbm.py new/oslo_vmware-4.9.0/oslo_vmware/pbm.py --- old/oslo_vmware-4.7.0/oslo_vmware/pbm.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/pbm.py 2026-02-17 17:06:06.000000000 +0100 @@ -193,7 +193,7 @@ ver = vc_version.split('.') major_minor = ver[0] if len(ver) >= 2: - major_minor = '{}.{}'.format(major_minor, ver[1]) + major_minor = f'{major_minor}.{ver[1]}' curr_dir = os.path.abspath(os.path.dirname(__file__)) pbm_service_wsdl = os.path.join(curr_dir, 'wsdl', major_minor, 'pbmService.wsdl') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/rw_handles.py new/oslo_vmware-4.9.0/oslo_vmware/rw_handles.py --- old/oslo_vmware-4.7.0/oslo_vmware/rw_handles.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/rw_handles.py 2026-02-17 17:06:06.000000000 +0100 @@ -243,7 +243,7 @@ else: soap_url = self._get_soap_url(scheme, host_or_url, port) param_list = {'dcPath': data_center_name, 'dsName': datastore_name} - self._url = '{}/folder/{}'.format(soap_url, file_path) + self._url = f'{soap_url}/folder/{file_path}' self._url = self._url + '?' + urlparse.urlencode(param_list) self._conn = self._create_write_connection('PUT', @@ -319,7 +319,7 @@ else: soap_url = self._get_soap_url(scheme, host_or_url, port) param_list = {'dcPath': data_center_name, 'dsName': datastore_name} - self._url = '{}/folder/{}'.format(soap_url, file_path) + self._url = f'{soap_url}/folder/{file_path}' self._url = self._url + '?' + urlparse.urlencode(param_list) self._conn = self._create_read_connection(self._url, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/tests/objects/test_datastore.py new/oslo_vmware-4.9.0/oslo_vmware/tests/objects/test_datastore.py --- old/oslo_vmware-4.7.0/oslo_vmware/tests/objects/test_datastore.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/tests/objects/test_datastore.py 2026-02-17 17:06:06.000000000 +0100 @@ -429,7 +429,7 @@ params = {'dcPath': dc_path, 'dsName': ds_name} path = 'images/aa.vmdk' query = urlparse.urlencode(params) - url = 'https://13.37.73.31/folder/{}?{}'.format(path, query) + url = f'https://13.37.73.31/folder/{path}?{query}' ds_url = datastore.DatastoreURL.urlparse(url) self.assertEqual(path, ds_url.path) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/tests/test_api.py new/oslo_vmware-4.9.0/oslo_vmware/tests/test_api.py --- old/oslo_vmware-4.7.0/oslo_vmware/tests/test_api.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/tests/test_api.py 2026-02-17 17:06:06.000000000 +0100 @@ -18,7 +18,6 @@ from datetime import datetime from unittest import mock -from eventlet import greenthread from oslo_context import context import suds @@ -29,71 +28,6 @@ from oslo_vmware import vim_util -class RetryDecoratorTest(base.TestCase): - """Tests for retry decorator class.""" - - def test_retry(self): - result = "RESULT" - - @api.RetryDecorator() - def func(*args, **kwargs): - return result - - self.assertEqual(result, func()) - - def func2(*args, **kwargs): - return result - - retry = api.RetryDecorator() - self.assertEqual(result, retry(func2)()) - self.assertTrue(retry._retry_count == 0) - - def test_retry_with_expected_exceptions(self): - result = "RESULT" - responses = [exceptions.VimSessionOverLoadException(None), - exceptions.VimSessionOverLoadException(None), - result] - - def func(*args, **kwargs): - response = responses.pop(0) - if isinstance(response, Exception): - raise response - return response - - sleep_time_incr = 0.01 - retry_count = 2 - retry = api.RetryDecorator(10, sleep_time_incr, 10, - (exceptions.VimSessionOverLoadException,)) - self.assertEqual(result, retry(func)()) - self.assertTrue(retry._retry_count == retry_count) - self.assertEqual(retry_count * sleep_time_incr, retry._sleep_time) - - def test_retry_with_max_retries(self): - responses = [exceptions.VimSessionOverLoadException(None), - exceptions.VimSessionOverLoadException(None), - exceptions.VimSessionOverLoadException(None)] - - def func(*args, **kwargs): - response = responses.pop(0) - if isinstance(response, Exception): - raise response - return response - - retry = api.RetryDecorator(2, 0, 0, - (exceptions.VimSessionOverLoadException,)) - self.assertRaises(exceptions.VimSessionOverLoadException, retry(func)) - self.assertTrue(retry._retry_count == 2) - - def test_retry_with_unexpected_exception(self): - - def func(*args, **kwargs): - raise exceptions.VimException(None) - - retry = api.RetryDecorator() - self.assertRaises(exceptions.VimException, retry(func)) - self.assertTrue(retry._retry_count == 0) - - class VMwareAPISessionTest(base.TestCase): """Tests for VMwareAPISession.""" @@ -276,7 +210,7 @@ module = mock.Mock() module.api = api - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): self.assertEqual(ret, api_session.invoke_api(module, 'api')) api_session._create_session.assert_called_once_with() @@ -296,7 +230,7 @@ module = mock.Mock() module.api = api - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): self.assertEqual(ret, api_session.invoke_api(module, 'api')) self.assertFalse(api_session._create_session.called) @@ -369,7 +303,7 @@ module = mock.Mock() module.api = api - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): ret = api_session.invoke_api(module, 'api') self.assertEqual(result, ret) vim_obj.SessionIsActive.assert_called_once_with( @@ -410,7 +344,7 @@ api_session.invoke_api = mock.Mock(side_effect=invoke_api_side_effect) task = mock.Mock() - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): ret = api_session.wait_for_task(task) self.assertEqual('success', ret.state) self.assertEqual(100, ret.progress) @@ -441,7 +375,7 @@ api_session.invoke_api = mock.Mock(side_effect=invoke_api_side_effect) task = mock.Mock() - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): ret = api_session.wait_for_task(task) self.assertEqual('success', ret.state) self.assertEqual(100, ret.progress) @@ -469,7 +403,7 @@ api_session.invoke_api = mock.Mock(side_effect=invoke_api_side_effect) task = mock.Mock() - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): self.assertRaises(exceptions.VimFaultException, api_session.wait_for_task, task) @@ -488,7 +422,7 @@ api_session.invoke_api = mock.Mock( side_effect=exceptions.VimException(None)) task = mock.Mock() - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): self.assertRaises(exceptions.VimException, api_session.wait_for_task, task) @@ -509,7 +443,7 @@ api_session.invoke_api = mock.Mock(side_effect=invoke_api_side_effect) lease = mock.Mock() - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): api_session.wait_for_lease_ready(lease) api_session.invoke_api.assert_called_with(vim_util, 'get_object_property', @@ -527,7 +461,7 @@ api_session.invoke_api = mock.Mock(side_effect=invoke_api_side_effect) lease = mock.Mock() - with mock.patch.object(greenthread, 'sleep'): + with mock.patch('time.sleep'): self.assertRaises(exceptions.VimException, api_session.wait_for_lease_ready, lease) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/tests/test_hacking.py new/oslo_vmware-4.9.0/oslo_vmware/tests/test_hacking.py --- old/oslo_vmware-4.7.0/oslo_vmware/tests/test_hacking.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/tests/test_hacking.py 2026-02-17 17:06:06.000000000 +0100 @@ -22,8 +22,8 @@ def test_no_log_translations(self): for log, hint in itertools.product(checks._all_log_levels, checks._all_hints): - bad = 'LOG.{}({}("Bad"))'.format(log, hint) + bad = f'LOG.{log}({hint}("Bad"))' self.assertEqual(1, len(list(checks.no_translate_logs(bad, 'f')))) # Catch abuses when used with a variable and not a literal - bad = 'LOG.{}({}(msg))'.format(log, hint) + bad = f'LOG.{log}({hint}(msg))' self.assertEqual(1, len(list(checks.no_translate_logs(bad, 'f')))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/tests/test_image_transfer.py new/oslo_vmware-4.9.0/oslo_vmware/tests/test_image_transfer.py --- old/oslo_vmware-4.7.0/oslo_vmware/tests/test_image_transfer.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/tests/test_image_transfer.py 2026-02-17 17:06:06.000000000 +0100 @@ -30,7 +30,7 @@ data = b'image-data-here' read_handle = io.BytesIO(data) write_handle = mock.Mock() - image_transfer._start_transfer(read_handle, write_handle, None) + image_transfer._start_transfer(read_handle, write_handle, 10) write_handle.write.assert_called_once_with(data) @mock.patch('oslo_vmware.rw_handles.FileWriteHandle') @@ -313,7 +313,7 @@ @mock.patch.object(image_transfer, '_start_transfer') @mock.patch('oslo_vmware.rw_handles.VmdkReadHandle') - @mock.patch('oslo_vmware.common.loopingcall.FixedIntervalLoopingCall') + @mock.patch('oslo_service.loopingcall.FixedIntervalLoopingCall') def test_copy_stream_optimized_disk( self, loopingcall, vmdk_read_handle, start_transfer): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/oslo_vmware/vim_util.py new/oslo_vmware-4.9.0/oslo_vmware/vim_util.py --- old/oslo_vmware-4.7.0/oslo_vmware/vim_util.py 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/oslo_vmware/vim_util.py 2026-02-17 17:06:06.000000000 +0100 @@ -576,13 +576,13 @@ if len(propSet) >= 1 and not entity_name: entity_name = propSet[0].val elif len(propSet) >= 1: - path = '{}/{}'.format(propSet[0].val, path) + path = f'{propSet[0].val}/{path}' # NOTE(arnaud): slice to exclude the root folder from the result. if propSet is not None and len(propSet) > 0: path = path[len(propSet[0].val):] if entity_name is None: entity_name = "" - return '{}{}'.format(path, entity_name) + return f'{path}{entity_name}' def get_http_service_request_spec(client_factory, method, uri): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/pyproject.toml new/oslo_vmware-4.9.0/pyproject.toml --- old/oslo_vmware-4.7.0/pyproject.toml 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/pyproject.toml 2026-02-17 17:06:06.000000000 +0100 @@ -1,3 +1,39 @@ [build-system] requires = ["pbr>=6.1.1"] build-backend = "pbr.build" + +[project] +name = "oslo.vmware" +description = "Oslo VMware library" +authors = [ + {name = "OpenStack", email = "[email protected]"}, +] +readme = {file = "README.rst", content-type = "text/x-rst"} +license = {text = "Apache-2.0"} +dynamic = ["version", "dependencies"] +requires-python = ">=3.10" +classifiers = [ + "Environment :: OpenStack", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: Apache Software License", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] + +[project.urls] +Homepage = "https://docs.openstack.org/oslo.vmware" +Repository = "https://opendev.org/openstack/oslo.vmware" + +[tool.setuptools] +packages = [ + "oslo_vmware" +] + +[tool.bandit] +exclude_dirs = ["tests"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/releasenotes/notes/remove-py39-51518455aaf46d7f.yaml new/oslo_vmware-4.9.0/releasenotes/notes/remove-py39-51518455aaf46d7f.yaml --- old/oslo_vmware-4.7.0/releasenotes/notes/remove-py39-51518455aaf46d7f.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo_vmware-4.9.0/releasenotes/notes/remove-py39-51518455aaf46d7f.yaml 2026-02-17 17:06:06.000000000 +0100 @@ -0,0 +1,5 @@ +--- +upgrade: + - | + Support for Python 3.9 has been removed. Now the minimum python version + supported is 3.10. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/releasenotes/source/2024.1.rst new/oslo_vmware-4.9.0/releasenotes/source/2024.1.rst --- old/oslo_vmware-4.7.0/releasenotes/source/2024.1.rst 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/releasenotes/source/2024.1.rst 2026-02-17 17:06:06.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/oslo_vmware-4.7.0/releasenotes/source/2025.2.rst new/oslo_vmware-4.9.0/releasenotes/source/2025.2.rst --- old/oslo_vmware-4.7.0/releasenotes/source/2025.2.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo_vmware-4.9.0/releasenotes/source/2025.2.rst 2026-02-17 17:06:06.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/oslo_vmware-4.7.0/releasenotes/source/index.rst new/oslo_vmware-4.9.0/releasenotes/source/index.rst --- old/oslo_vmware-4.7.0/releasenotes/source/index.rst 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/releasenotes/source/index.rst 2026-02-17 17:06:06.000000000 +0100 @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + 2025.2 2025.1 2024.2 2024.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/requirements.txt new/oslo_vmware-4.9.0/requirements.txt --- old/oslo_vmware-4.7.0/requirements.txt 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/requirements.txt 2026-02-17 17:06:06.000000000 +0100 @@ -14,3 +14,4 @@ urllib3>=1.21.1 # MIT oslo.concurrency>=3.26.0 # Apache-2.0 oslo.context>=2.19.2 # Apache-2.0 +oslo.service>=4.3.0 # Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/setup.cfg new/oslo_vmware-4.9.0/setup.cfg --- old/oslo_vmware-4.7.0/setup.cfg 2025-07-25 12:55:02.166318400 +0200 +++ new/oslo_vmware-4.9.0/setup.cfg 2026-02-17 17:07:10.462320600 +0100 @@ -1,30 +1,5 @@ [metadata] name = oslo.vmware -summary = Oslo VMware library -description_file = - README.rst -author = OpenStack -author_email = [email protected] -home_page = https://docs.openstack.org/oslo.vmware/latest/ -python_requires = >=3.9 -classifier = - Environment :: OpenStack - Intended Audience :: Information Technology - Intended Audience :: System Administrators - License :: OSI Approved :: Apache Software License - Operating System :: POSIX :: Linux - Programming Language :: Python - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Programming Language :: Python :: 3.12 - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: Implementation :: CPython - -[files] -packages = - oslo_vmware [egg_info] tag_build = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo_vmware-4.7.0/tox.ini new/oslo_vmware-4.9.0/tox.ini --- old/oslo_vmware-4.7.0/tox.ini 2025-07-25 12:53:56.000000000 +0200 +++ new/oslo_vmware-4.9.0/tox.ini 2026-02-17 17:06:06.000000000 +0100 @@ -38,6 +38,8 @@ [flake8] show-source = True +# H904: Delay string interpolations at logging calls +enable-extensions = H904 # H405: multi line docstring summary not separated with an empty line # W504 line break after binary operator ignore = H405,W504
