Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-oslo.messaging for 
openSUSE:Factory checked in at 2026-03-09 16:11:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.messaging (Old)
 and      /work/SRC/openSUSE:Factory/.python-oslo.messaging.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oslo.messaging"

Mon Mar  9 16:11:10 2026 rev:36 rq:1337518 version:17.3.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-oslo.messaging/python-oslo.messaging.changes  
    2025-11-10 19:18:44.299860574 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-oslo.messaging.new.8177/python-oslo.messaging.changes
    2026-03-09 16:11:32.337416127 +0100
@@ -1,0 +2,20 @@
+Sun Mar  8 20:36:06 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 17.3.0:
+  * Do not delete queues on error
+  * Deprecate enforce\_fips\_mode
+  * Remove old hacking check for oslo namespace package
+  * Delay string interpolations at logging calls
+  * rabbit: Fix ignored PreconditionFailed error
+  * Simplify process group fallback expression
+  * reno: Update master for unmaintained/2024.1
+  * Bump kombu to 4.6.8
+  * Bump pyupgrade target to 3.10+
+  * Fix broken fallback causing type inconsistency
+  * Restore license note about optional deps
+  * pre-commit: Bump dependencies
+  * Migrate setup configuration to pyproject.toml
+  * Drop Python 3.9 support
+  * Update master for stable/2025.2
+
+-------------------------------------------------------------------

Old:
----
  oslo_messaging-17.1.0.tar.gz

New:
----
  oslo_messaging-17.3.0.tar.gz

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

Other differences:
------------------
++++++ python-oslo.messaging.spec ++++++
--- /var/tmp/diff_new_pack.hA4kYl/_old  2026-03-09 16:11:33.277454984 +0100
+++ /var/tmp/diff_new_pack.hA4kYl/_new  2026-03-09 16:11:33.277454984 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-oslo.messaging
 #
-# 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.messaging
-Version:        17.1.0
+Version:        17.3.0
 Release:        0
 Summary:        OpenStack oslo.messaging library
 License:        Apache-2.0

++++++ oslo_messaging-17.1.0.tar.gz -> oslo_messaging-17.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/.pre-commit-config.yaml 
new/oslo_messaging-17.3.0/.pre-commit-config.yaml
--- old/oslo_messaging-17.1.0/.pre-commit-config.yaml   2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/.pre-commit-config.yaml   2026-02-18 
14:45:04.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,tools']
   - 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_messaging-17.1.0/AUTHORS 
new/oslo_messaging-17.3.0/AUTHORS
--- old/oslo_messaging-17.1.0/AUTHORS   2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/AUTHORS   2026-02-18 14:45:54.000000000 +0100
@@ -96,6 +96,7 @@
 Ilya Shakhat <[email protected]>
 Ilya Tyaptin <[email protected]>
 Iswarya_Vakati <[email protected]>
+Ivan Anfimov <[email protected]>
 James Carey <[email protected]>
 James E. Blair <[email protected]>
 James Page <[email protected]>
@@ -133,6 +134,7 @@
 Lukas Bezdicka <[email protected]>
 Luong Anh Tuan <[email protected]>
 Mark McLoughlin <[email protected]>
+Matt Crees <[email protected]>
 Matt Riedemann <[email protected]>
 Matt Riedemann <[email protected]>
 Matthew Booth <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/ChangeLog 
new/oslo_messaging-17.3.0/ChangeLog
--- old/oslo_messaging-17.1.0/ChangeLog 2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/ChangeLog 2026-02-18 14:45:54.000000000 +0100
@@ -1,6 +1,29 @@
 CHANGES
 =======
 
+17.3.0
+------
+
+* Do not delete queues on error
+* Deprecate enforce\_fips\_mode
+* Remove old hacking check for oslo namespace package
+
+17.2.0
+------
+
+* Delay string interpolations at logging calls
+* rabbit: Fix ignored PreconditionFailed error
+* Simplify process group fallback expression
+* reno: Update master for unmaintained/2024.1
+* Bump kombu to 4.6.8
+* Bump pyupgrade target to 3.10+
+* Fix broken fallback causing type inconsistency
+* Restore license note about optional deps
+* pre-commit: Bump dependencies
+* Migrate setup configuration to pyproject.toml
+* Drop Python 3.9 support
+* Update master for stable/2025.2
+
 17.1.0
 ------
 
@@ -13,6 +36,7 @@
 17.0.0
 ------
 
+* Remove tags from README
 * Fix RPC metric labels being reused incorrectly
 * Remove quorum options with typo
 * Update master for stable/2025.1
@@ -24,6 +48,7 @@
 
 * Skip installation to speed up pep8
 * Fixed: use self.start\_time in QManager shm
+* Fix Queue Manager in podman containerised env
 * Added Docs for Simulator
 * rabbit: validate input for retry options
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/PKG-INFO 
new/oslo_messaging-17.3.0/PKG-INFO
--- old/oslo_messaging-17.1.0/PKG-INFO  2025-07-11 16:23:06.748381400 +0200
+++ new/oslo_messaging-17.3.0/PKG-INFO  2026-02-18 14:45:54.968240300 +0100
@@ -1,10 +1,10 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: oslo.messaging
-Version: 17.1.0
+Version: 17.3.0
 Summary: Oslo Messaging API
-Home-page: https://docs.openstack.org/oslo.messaging/latest/
-Author: OpenStack
-Author-email: [email protected]
+Author-email: OpenStack <[email protected]>
+Project-URL: Homepage, https://docs.openstack.org/oslo.messaging
+Project-URL: Repository, https://opendev.org/openstack/oslo.messaging
 Classifier: Environment :: OpenStack
 Classifier: Intended Audience :: Developers
 Classifier: Intended Audience :: Information Technology
@@ -12,13 +12,14 @@
 Classifier: Operating System :: OS Independent
 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.13
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
-Requires-Python: >=3.9
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
 License-File: LICENSE
 Requires-Dist: pbr>=2.0.0
 Requires-Dist: futurist>=1.2.0
@@ -34,35 +35,22 @@
 Requires-Dist: WebOb>=1.7.1
 Requires-Dist: PyYAML>=3.13
 Requires-Dist: amqp>=2.5.2
-Requires-Dist: kombu>=4.6.6
+Requires-Dist: kombu>=4.6.8
 Requires-Dist: oslo.middleware>=3.31.0
 Requires-Dist: oslo.metrics>=0.2.1
 Provides-Extra: kafka
 Requires-Dist: confluent-kafka>=1.3.0; extra == "kafka"
-Provides-Extra: test
-Requires-Dist: fixtures>=3.0.0; extra == "test"
-Requires-Dist: stestr>=2.0.0; extra == "test"
-Requires-Dist: testscenarios>=0.4; extra == "test"
-Requires-Dist: testtools>=2.2.0; extra == "test"
-Requires-Dist: oslotest>=3.2.0; extra == "test"
-Requires-Dist: pifpaf>=2.2.0; extra == "test"
-Requires-Dist: confluent-kafka>=1.3.0; extra == "test"
-Requires-Dist: coverage>=4.0; extra == "test"
-Requires-Dist: eventlet>=0.23.0; extra == "test"
-Requires-Dist: greenlet>=0.4.15; extra == "test"
-
-========================
-Team and repository tags
-========================
+Dynamic: license-file
+Dynamic: requires-dist
+
+======================
+Oslo Messaging Library
+======================
 
 .. image:: https://governance.openstack.org/tc/badges/oslo.messaging.svg
-    :target: https://governance.openstack.org/tc/reference/tags/index.html
 
 .. Change things from this point on
 
-Oslo Messaging Library
-======================
-
 .. image:: https://img.shields.io/pypi/v/oslo.messaging.svg
     :target: https://pypi.org/project/oslo.messaging/
     :alt: Latest Version
@@ -79,4 +67,3 @@
 * Source: https://opendev.org/openstack/oslo.messaging
 * Bugs: https://bugs.launchpad.net/oslo.messaging
 * Release notes: https://docs.openstack.org/releasenotes/oslo.messaging/
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/README.rst 
new/oslo_messaging-17.3.0/README.rst
--- old/oslo_messaging-17.1.0/README.rst        2025-07-11 16:21:43.000000000 
+0200
+++ new/oslo_messaging-17.3.0/README.rst        2026-02-18 14:45:04.000000000 
+0100
@@ -1,15 +1,11 @@
-========================
-Team and repository tags
-========================
+======================
+Oslo Messaging Library
+======================
 
 .. image:: https://governance.openstack.org/tc/badges/oslo.messaging.svg
-    :target: https://governance.openstack.org/tc/reference/tags/index.html
 
 .. Change things from this point on
 
-Oslo Messaging Library
-======================
-
 .. image:: https://img.shields.io/pypi/v/oslo.messaging.svg
     :target: https://pypi.org/project/oslo.messaging/
     :alt: Latest Version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/PKG-INFO 
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/PKG-INFO
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/PKG-INFO  2025-07-11 
16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/PKG-INFO  2026-02-18 
14:45:54.000000000 +0100
@@ -1,10 +1,10 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: oslo.messaging
-Version: 17.1.0
+Version: 17.3.0
 Summary: Oslo Messaging API
-Home-page: https://docs.openstack.org/oslo.messaging/latest/
-Author: OpenStack
-Author-email: [email protected]
+Author-email: OpenStack <[email protected]>
+Project-URL: Homepage, https://docs.openstack.org/oslo.messaging
+Project-URL: Repository, https://opendev.org/openstack/oslo.messaging
 Classifier: Environment :: OpenStack
 Classifier: Intended Audience :: Developers
 Classifier: Intended Audience :: Information Technology
@@ -12,13 +12,14 @@
 Classifier: Operating System :: OS Independent
 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.13
 Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: Implementation :: CPython
-Requires-Python: >=3.9
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
 License-File: LICENSE
 Requires-Dist: pbr>=2.0.0
 Requires-Dist: futurist>=1.2.0
@@ -34,35 +35,22 @@
 Requires-Dist: WebOb>=1.7.1
 Requires-Dist: PyYAML>=3.13
 Requires-Dist: amqp>=2.5.2
-Requires-Dist: kombu>=4.6.6
+Requires-Dist: kombu>=4.6.8
 Requires-Dist: oslo.middleware>=3.31.0
 Requires-Dist: oslo.metrics>=0.2.1
 Provides-Extra: kafka
 Requires-Dist: confluent-kafka>=1.3.0; extra == "kafka"
-Provides-Extra: test
-Requires-Dist: fixtures>=3.0.0; extra == "test"
-Requires-Dist: stestr>=2.0.0; extra == "test"
-Requires-Dist: testscenarios>=0.4; extra == "test"
-Requires-Dist: testtools>=2.2.0; extra == "test"
-Requires-Dist: oslotest>=3.2.0; extra == "test"
-Requires-Dist: pifpaf>=2.2.0; extra == "test"
-Requires-Dist: confluent-kafka>=1.3.0; extra == "test"
-Requires-Dist: coverage>=4.0; extra == "test"
-Requires-Dist: eventlet>=0.23.0; extra == "test"
-Requires-Dist: greenlet>=0.4.15; extra == "test"
-
-========================
-Team and repository tags
-========================
+Dynamic: license-file
+Dynamic: requires-dist
+
+======================
+Oslo Messaging Library
+======================
 
 .. image:: https://governance.openstack.org/tc/badges/oslo.messaging.svg
-    :target: https://governance.openstack.org/tc/reference/tags/index.html
 
 .. Change things from this point on
 
-Oslo Messaging Library
-======================
-
 .. image:: https://img.shields.io/pypi/v/oslo.messaging.svg
     :target: https://pypi.org/project/oslo.messaging/
     :alt: Latest Version
@@ -79,4 +67,3 @@
 * Source: https://opendev.org/openstack/oslo.messaging
 * Bugs: https://bugs.launchpad.net/oslo.messaging
 * Release notes: https://docs.openstack.org/releasenotes/oslo.messaging/
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/SOURCES.txt 
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/SOURCES.txt
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/SOURCES.txt       
2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/SOURCES.txt       
2026-02-18 14:45:54.000000000 +0100
@@ -138,6 +138,7 @@
 releasenotes/notes/adding_support_for_quorum_queues-3101d055b492289e.yaml
 releasenotes/notes/allow-transient-no-expire-ce7ae9d8c9d15751.yaml
 releasenotes/notes/auto-deleted-failed-quorum-ca6a3923c3ed999a.yaml
+releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
 releasenotes/notes/blocking-executor-deprecated-895146c1c3bf2f51.yaml
 releasenotes/notes/blocking-executor-support-dropped-a3bc74c6825863f0.yaml
 
releasenotes/notes/bug-1917645-rabbit-use-retry-parameter-for-notifications-3f7c508ab4437579.yaml
@@ -145,10 +146,12 @@
 releasenotes/notes/bug-1993149-e8b231791b65e938.yaml
 releasenotes/notes/bug-2068630-6ff92f213bc4eca0.yaml
 releasenotes/notes/bug-2098714-d55094fa4fbb3178.yaml
+releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
 releasenotes/notes/bump-amqp-version-due-to-tls-issue-e877b152eb101c15.yaml
 releasenotes/notes/connection_ttl-2cf0fe6e1ab8c73c.yaml
 releasenotes/notes/declare_fallback_durable_exchange-0db677de4fdf1e78.yaml
 releasenotes/notes/deprecate-ZeroMQ-driver-a8af25aaba867c5b.yaml
+releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
 releasenotes/notes/deprecate-eventlet-executor-13835b9818fd77f2.yaml
 
releasenotes/notes/deprecate-the-option-heartbeat_in_pthread-from-rabbit-driver-5757adb83701caa5.yaml
 releasenotes/notes/deprecated-amqp1-driver-4bf57449bc2b7aad.yaml
@@ -157,6 +160,7 @@
 releasenotes/notes/drop-python27-support-5ef2f365d8930483.yaml
 releasenotes/notes/enforce_fips_mode-07dd259eb8a73c2b.yaml
 releasenotes/notes/fix-access_policy-deafult-a6954a147cb002b0.yaml
+releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
 releasenotes/notes/get-rpc-client-0b4aa62160864b29.yaml
 releasenotes/notes/get-rpc-helpers-cls-8911826ac08aef2a.yaml
 releasenotes/notes/get_rpc_transport-4aa3511ad9754a60.yaml
@@ -182,6 +186,7 @@
 releasenotes/notes/remove-old-quorum-opts-with-typo-5e013064fb6df062.yaml
 releasenotes/notes/remove-pika-1bae204ced2521a3.yaml
 releasenotes/notes/remove-py38-381f832001230756.yaml
+releasenotes/notes/remove-py39-20d8b050389186ff.yaml
 releasenotes/notes/reply_q-timeout-e3c3bae636e8bc74.yaml
 releasenotes/notes/retry-support-07996ef04dda9482.yaml
 releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
@@ -193,6 +198,7 @@
 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_messaging-17.1.0/oslo.messaging.egg-info/pbr.json 
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/pbr.json
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/pbr.json  2025-07-11 
16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/pbr.json  2026-02-18 
14:45:54.000000000 +0100
@@ -1 +1 @@
-{"git_version": "827859af", "is_release": true}
\ No newline at end of file
+{"git_version": "3035e816", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/requires.txt 
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/requires.txt
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/requires.txt      
2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/requires.txt      
2026-02-18 14:45:54.000000000 +0100
@@ -12,21 +12,9 @@
 WebOb>=1.7.1
 PyYAML>=3.13
 amqp>=2.5.2
-kombu>=4.6.6
+kombu>=4.6.8
 oslo.middleware>=3.31.0
 oslo.metrics>=0.2.1
 
 [kafka]
 confluent-kafka>=1.3.0
-
-[test]
-fixtures>=3.0.0
-stestr>=2.0.0
-testscenarios>=0.4
-testtools>=2.2.0
-oslotest>=3.2.0
-pifpaf>=2.2.0
-confluent-kafka>=1.3.0
-coverage>=4.0
-eventlet>=0.23.0
-greenlet>=0.4.15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/amqpdriver.py 
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/amqpdriver.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/amqpdriver.py     
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/amqpdriver.py     
2026-02-18 14:45:04.000000000 +0100
@@ -70,7 +70,13 @@
         # parse start time (in jiffies) since system boot
         #
         # https://www.man7.org/linux/man-pages//man5/proc_pid_stat.5.html
-        with open(f'/proc/{self.pg}/stat') as f:
+        #
+        # We fallback to process id here when process group id is 0, as /proc/0
+        # does not exist. This is only hit in an edge case with the crun
+        # container runtime (default for podman), see issue for more details:
+        # https://github.com/containers/crun/issues/1642
+        proc_id = self.pg or os.getpid()
+        with open(f'/proc/{proc_id}/stat') as f:
             self.start_time = int(f.read().split()[21])
 
     def get(self):
@@ -118,7 +124,7 @@
     """
 
     def __init__(self, name):
-        self.name = "{} ({})".format(name, hex(id(self)))
+        self.name = f"{name} ({hex(id(self))})"
         self._tasks = queue.Queue()
 
         self._shutdown = eventletutils.Event()
@@ -771,7 +777,7 @@
                     topic = target.topic
                     exchange = self._get_exchange(target)
                     if target.server:
-                        topic = '{}.{}'.format(target.topic, target.server)
+                        topic = f'{target.topic}.{target.server}'
                     LOG.debug(log_msg + "exchange '%(exchange)s'"
                               " topic '%(topic)s'", {'exchange': exchange,
                                                      'topic': topic})
@@ -824,7 +830,7 @@
         for target, priority in targets_and_priorities:
             conn.declare_topic_consumer(
                 exchange_name=self._get_exchange(target),
-                topic='{}.{}'.format(target.topic, priority),
+                topic=f'{target.topic}.{priority}',
                 callback=listener, queue_name=pool)
         return base.PollStyleListenerAdapter(listener, batch_size,
                                              batch_timeout)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/common.py 
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/common.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/common.py 2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/common.py 2026-02-18 
14:45:04.000000000 +0100
@@ -235,7 +235,7 @@
     str_override = lambda self: message
     new_ex_type = type(ex_type.__name__ + _REMOTE_POSTFIX, (ex_type,),
                        {'__str__': str_override, '__unicode__': str_override})
-    new_ex_type.__module__ = '{}{}'.format(module, _REMOTE_POSTFIX)
+    new_ex_type.__module__ = f'{module}{_REMOTE_POSTFIX}'
     try:
         # NOTE(ameade): Dynamically create a new exception type and swap it in
         # as the new type for the exception. This only works on user defined
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_fake.py 
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_fake.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_fake.py      
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_fake.py      
2026-02-18 14:45:04.000000000 +0100
@@ -248,7 +248,7 @@
                                  batch_size, batch_timeout):
         targets = [
             oslo_messaging.Target(
-                topic='{}.{}'.format(target.topic, priority),
+                topic=f'{target.topic}.{priority}',
                 exchange=target.exchange)
             for target, priority in targets_and_priorities]
         listener = FakeListener(self._exchange_manager, targets, pool)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_kafka.py 
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_kafka.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_kafka.py     
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_kafka.py     
2026-02-18 14:45:04.000000000 +0100
@@ -304,7 +304,7 @@
                                              message, poll)
                     return self._produce_message(topic, message, poll)
                 except KafkaException as e:
-                    LOG.error("Produce message failed: %s" % str(e))
+                    LOG.error("Produce message failed: %s", e)
                     break
                 except BufferError:
                     LOG.debug("Produce message queue full, "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_rabbit.py 
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_rabbit.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_rabbit.py    
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_rabbit.py    
2026-02-18 14:45:04.000000000 +0100
@@ -86,6 +86,9 @@
                     '(valid only if SSL enabled).'),
     cfg.BoolOpt('ssl_enforce_fips_mode',
                 default=False,
+                deprecated_for_removal=True,
+                deprecated_reason='FIPS_mode_set API was removed in OpenSSL '
+                                  '3.0.0. This option has no effect now.',
                 help='Global toggle for enforcing the OpenSSL FIPS mode. '
                 'This feature requires Python support. '
                 'This is available in Python 3.9 in all '
@@ -404,7 +407,6 @@
         self.callback = callback
         self.type = type
         self.nowait = nowait
-        rabbit_quorum_queue_config = rabbit_quorum_queue_config or {}
         self.queue_arguments = _get_queue_arguments(
             rabbit_ha_queues, rabbit_queue_ttl, rabbit_quorum_queue,
             rabbit_quorum_queue_config, rabbit_stream_fanout)
@@ -419,7 +421,7 @@
         self.rabbit_stream_fanout = rabbit_stream_fanout
         self.next_stream_offset = "last"
 
-    def _declare_fallback(self, err, conn, consumer_arguments):
+    def _declare_fallback_nondurable(self, err, conn, consumer_arguments):
         """Fallback by declaring a non durable queue.
 
         When a control exchange is shared between services it is possible
@@ -431,26 +433,25 @@
         to fallback by creating a non durable queue to match the default
         config.
         """
-        if "PRECONDITION_FAILED - inequivalent arg 'durable'" in str(err):
-            LOG.info(
-                "[%s] Retrying to declare the exchange (%s) as "
-                "non durable", conn.connection_id, self.exchange_name)
-            self.exchange = kombu.entity.Exchange(
-                name=self.exchange_name,
-                type=self.type,
-                durable=False,
-                auto_delete=self.queue_auto_delete)
-            self.queue = kombu.entity.Queue(
-                name=self.queue_name,
-                channel=conn.channel,
-                exchange=self.exchange,
-                durable=False,
-                auto_delete=self.queue_auto_delete,
-                routing_key=self.routing_key,
-                queue_arguments=self.queue_arguments,
-                consumer_arguments=consumer_arguments
-            )
-            self.queue.declare()
+        LOG.info(
+            "[%s] Retrying to declare the exchange (%s) as "
+            "non durable", conn.connection_id, self.exchange_name)
+        self.exchange = kombu.entity.Exchange(
+            name=self.exchange_name,
+            type=self.type,
+            durable=False,
+            auto_delete=self.queue_auto_delete)
+        self.queue = kombu.entity.Queue(
+            name=self.queue_name,
+            channel=conn.channel,
+            exchange=self.exchange,
+            durable=False,
+            auto_delete=self.queue_auto_delete,
+            routing_key=self.routing_key,
+            queue_arguments=self.queue_arguments,
+            consumer_arguments=consumer_arguments
+        )
+        self.queue.declare()
 
     def reset_stream_offset(self):
         if not self.rabbit_stream_fanout:
@@ -493,16 +494,21 @@
             try:
                 self.queue.declare()
             except amqp_ex.PreconditionFailed as err:
-                # NOTE(hberaud): This kind of exception may be triggered
-                # when a control exchange is shared between services and
-                # when services try to create it with configs that differ
-                # from each others. RabbitMQ will reject the services
-                # that try to create it with a configuration that differ
-                # from the one used first.
-                LOG.warning('[%s] Queue %s could not be declared probably '
-                            'because of conflicting configurations: %s',
-                            conn.connection_id, self.queue_name, err)
-                self._declare_fallback(err, conn, consumer_arguments)
+                if "PRECONDITION_FAILED - inequivalent arg 'durable'" in \
+                        str(err):
+                    # NOTE(hberaud): This kind of exception may be triggered
+                    # when a control exchange is shared between services and
+                    # when services try to create it with configs that differ
+                    # from each others. RabbitMQ will reject the services
+                    # that try to create it with a configuration that differ
+                    # from the one used first.
+                    LOG.warning('[%s] Queue %s could not be declared probably '
+                                'because of conflicting configurations: %s',
+                                conn.connection_id, self.queue_name, err)
+                    self._declare_fallback_nondurable(
+                        err, conn, consumer_arguments)
+                else:
+                    raise
             except amqp_ex.NotFound as ex:
                 # NOTE(viktor.krivak): This exception is raised when
                 # non-durable and non-ha queue is hosted on node that
@@ -555,14 +561,6 @@
                           'Queue: [%(queue)s], '
                           'error message: [%(err_str)s]', info)
                 time.sleep(interval)
-                if self.queue_arguments.get('x-queue-type') == 'quorum':
-                    # Before re-declare queue, try to delete it
-                    # This is helping with issue #2028384
-                    # NOTE(amorin) we need to make sure the connection is
-                    # established again, because when an error occur, the
-                    # connection is closed.
-                    conn.ensure_connection()
-                    self.queue.delete()
                 self.queue.declare()
             else:
                 raise
@@ -605,24 +603,6 @@
                                    nowait=self.nowait)
             else:
                 raise
-        except amqp_ex.InternalError as exc:
-            if self.queue_arguments.get('x-queue-type') == 'quorum':
-                # Before re-consume queue, try to delete it
-                # This is helping with issue #2028384
-                if exc.code == 541:
-                    LOG.warning('Queue %s seems broken, will try delete it '
-                                'before starting over.', self.queue.name)
-                    # NOTE(amorin) we need to make sure the connection is
-                    # established again, because when an error occur, the
-                    # connection is closed.
-                    conn.ensure_connection()
-                    self.queue.delete()
-                    self.declare(conn)
-                    self.queue.consume(callback=self._callback,
-                                       consumer_tag=str(tag),
-                                       nowait=self.nowait)
-            else:
-                raise
 
     def cancel(self, tag):
         LOG.trace('ConsumerBase.cancel: canceling %s', tag)
@@ -814,19 +794,6 @@
             self.ssl_cert_file = driver_conf.ssl_cert_file
             self.ssl_ca_file = driver_conf.ssl_ca_file
 
-            if self.ssl_enforce_fips_mode:
-                if hasattr(ssl, 'FIPS_mode'):
-                    LOG.info("Enforcing the use of the OpenSSL FIPS mode")
-                    ssl.FIPS_mode_set(1)
-                else:
-                    raise exceptions.ConfigurationError(
-                        "OpenSSL FIPS mode is not supported by your Python "
-                        "version. You must either change the Python "
-                        "executable used to a version with FIPS mode "
-                        "support or disable FIPS mode by setting the "
-                        "'[oslo_messaging_rabbit] ssl_enforce_fips_mode' "
-                        "configuration option to 'False'.")
-
         self._url = ''
         if url.hosts:
             if url.transport.startswith('kombu+'):
@@ -1089,8 +1056,8 @@
             retry = float('inf')
 
         def on_error(exc, interval):
-            LOG.debug("[%s] Received recoverable error from kombu:"
-                      % self.connection_id,
+            LOG.debug("[%s] Received recoverable error from kombu:",
+                      self.connection_id,
                       exc_info=True)
 
             recoverable_error_callback and recoverable_error_callback(exc)
@@ -1245,7 +1212,7 @@
                 for consumer in filter(lambda c: c.type == 'fanout',
                                        self._consumers):
                     LOG.debug('[connection close] Deleting fanout '
-                              'queue: %s ' % consumer.queue.name)
+                              'queue: %s ', consumer.queue.name)
                     consumer.queue.delete()
             self._set_current_channel(None)
             self.connection.release()
@@ -1300,8 +1267,8 @@
             sock = self.channel.connection.sock
         except AttributeError as e:
             # Level is set to debug because otherwise we would spam the logs
-            LOG.debug('[%s] Failed to get socket attribute: %s'
-                      % (self.connection_id, str(e)))
+            LOG.debug('[%s] Failed to get socket attribute: %s',
+                      self.connection_id, e)
         else:
             sock.settimeout(timeout)
             # TCP_USER_TIMEOUT is not defined on Windows and Mac OS X
@@ -1367,7 +1334,7 @@
                         # already do that for other connection
                         try:
                             self.connection.drain_events(timeout=0.001)
-                        except socket.timeout:
+                        except TimeoutError:
                             pass
                     # NOTE(hberaud): In a clustered rabbitmq when
                     # a node disappears, we get a ConnectionRefusedError
@@ -1377,9 +1344,7 @@
                     # Catch these exceptions to ensure that we call
                     # ensure_connection for switching the
                     # connection destination.
-                    except (socket.timeout,
-                            ConnectionRefusedError,
-                            OSError,
+                    except (TimeoutError, ConnectionRefusedError, OSError,
                             kombu.exceptions.OperationalError,
                             amqp_ex.ConnectionForced) as exc:
                         LOG.info("A recoverable connection/channel error "
@@ -1463,7 +1428,7 @@
                 try:
                     self.connection.drain_events(timeout=poll_timeout)
                     return
-                except socket.timeout:
+                except TimeoutError:
                     poll_timeout = timer.check_return(
                         _raise_timeout, maximum=self._poll_timeout)
                 except self.connection.channel_errors as exc:
@@ -1534,7 +1499,7 @@
                 unique = self._q_manager.get()
             else:
                 unique = uuid.uuid4().hex
-            queue_name = '{}_fanout_{}'.format(topic, unique)
+            queue_name = f'{topic}_fanout_{unique}'
         LOG.debug('Creating fanout queue: %s', queue_name)
 
         is_durable = (self.rabbit_transient_quorum_queue or
@@ -1599,17 +1564,19 @@
             try:
                 exchange(self.channel).declare()
             except amqp_ex.PreconditionFailed as err:
-                # NOTE(hberaud): This kind of exception may be triggered
-                # when a control exchange is shared between services and
-                # when services try to create it with configs that differ
-                # from each others. RabbitMQ will reject the services
-                # that try to create it with a configuration that differ
-                # from the one used first.
                 if "PRECONDITION_FAILED - inequivalent arg 'durable'" \
                    in str(err):
+                    # NOTE(hberaud): This kind of exception may be triggered
+                    # when a control exchange is shared between services and
+                    # when services try to create it with configs that differ
+                    # from each others. RabbitMQ will reject the services
+                    # that try to create it with a configuration that differ
+                    # from the one used first.
                     LOG.warning("Force creating a non durable exchange.")
                     exchange.durable = False
                     exchange(self.channel).declare()
+                else:
+                    raise
             self._declared_exchanges.add(exchange.name)
 
         log_info = {'msg': msg,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/pool.py 
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/pool.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/pool.py   2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/pool.py   2026-02-18 
14:45:04.000000000 +0100
@@ -128,7 +128,7 @@
     def _on_expire(self, connection):
         connection.close()
         LOG.debug("Idle connection has expired and been closed."
-                  " Pool size: %d" % len(self._items))
+                  " Pool size: %d", len(self._items))
 
     def create(self, purpose=common.PURPOSE_SEND, retry=None):
         LOG.debug('Pool creating new connection')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/_metrics/client.py 
new/oslo_messaging-17.3.0/oslo_messaging/_metrics/client.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_metrics/client.py 2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_metrics/client.py 2026-02-18 
14:45:04.000000000 +0100
@@ -74,9 +74,9 @@
         try:
             self.tx_queue.put_nowait(m)
         except queue.Full:
-            LOG.warning("tx queues is already full(%s/%s). Fails to "
-                        "send the metrics(%s)" %
-                        (self.tx_queue.qsize(), self.tx_queue.maxsize, m))
+            LOG.warning("tx queues is already full(%d/%d). Fails to "
+                        "send the metrics(%s)",
+                        self.tx_queue.qsize(), self.tx_queue.maxsize, m)
 
         if not self.send_thread.is_alive():
             self.send_thread = threading.Thread(target=self.send_loop)
@@ -101,7 +101,7 @@
                 stoptime = time.time() + timeout
             except Exception as e:
                 LOG.error("Failed to send metrics: %s. "
-                          "Wait 1 seconds for next try." % e)
+                          "Wait 1 second for next try.", e)
                 time.sleep(1)
 
     def send_metric(self, metric):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/hacking/checks.py 
new/oslo_messaging-17.3.0/oslo_messaging/hacking/checks.py
--- old/oslo_messaging-17.1.0/oslo_messaging/hacking/checks.py  2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/hacking/checks.py  2026-02-18 
14:45:04.000000000 +0100
@@ -12,36 +12,7 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-import re
-
 import ast
-from hacking import core
-
-
-oslo_namespace_imports_dot = re.compile(r"import[\s]+oslo[.][^\s]+")
-oslo_namespace_imports_from_dot = re.compile(r"from[\s]+oslo[.]")
-oslo_namespace_imports_from_root = re.compile(r"from[\s]+oslo[\s]+import[\s]+")
-mock_imports_directly = re.compile(r"import[\s]+mock")
-mock_imports_direclty_from = re.compile(r"from[\s]+mock[\s]+import[\s]+")
-
-
[email protected]
-def check_oslo_namespace_imports(logical_line):
-    if re.match(oslo_namespace_imports_from_dot, logical_line):
-        msg = ("O321: '%s' must be used instead of '%s'.") % (
-            logical_line.replace('oslo.', 'oslo_'),
-            logical_line)
-        yield (0, msg)
-    elif re.match(oslo_namespace_imports_from_root, logical_line):
-        msg = ("O321: '%s' must be used instead of '%s'.") % (
-            logical_line.replace('from oslo import ', 'import oslo_'),
-            logical_line)
-        yield (0, msg)
-    elif re.match(oslo_namespace_imports_dot, logical_line):
-        msg = ("O321: '%s' must be used instead of '%s'.") % (
-            logical_line.replace('import', 'from').replace('.', ' import '),
-            logical_line)
-        yield (0, msg)
 
 
 class BaseASTChecker(ast.NodeVisitor):
@@ -124,7 +95,7 @@
 
     def visit_ImportFrom(self, node):
         for alias in node.names:
-            full_name = '{}.{}'.format(node.module, alias.name)
+            full_name = f'{node.module}.{alias.name}'
             self._filter_imports(full_name, alias)
         return super().generic_visit(node)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/notify/messaging.py 
new/oslo_messaging-17.3.0/oslo_messaging/notify/messaging.py
--- old/oslo_messaging-17.1.0/oslo_messaging/notify/messaging.py        
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/notify/messaging.py        
2026-02-18 14:45:04.000000000 +0100
@@ -73,7 +73,7 @@
         priority = priority.lower()
         for topic in self.topics:
             target = oslo_messaging.Target(
-                topic='{}.{}'.format(topic, priority))
+                topic=f'{topic}.{priority}')
             try:
                 self.transport._send_notification(target, ctxt, message,
                                                   version=self.version,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/oslo_messaging/rpc/client.py 
new/oslo_messaging-17.3.0/oslo_messaging/rpc/client.py
--- old/oslo_messaging-17.1.0/oslo_messaging/rpc/client.py      2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/rpc/client.py      2026-02-18 
14:45:04.000000000 +0100
@@ -80,7 +80,7 @@
     """Raised if we failed to send a message to a target."""
 
     def __init__(self, target, ex):
-        msg = 'Failed to send to target "{}": {}'.format(target, ex)
+        msg = f'Failed to send to target "{target}": {ex}'
         super().__init__(msg)
         self.target = target
         self.ex = ex
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/rpc/dispatcher.py 
new/oslo_messaging-17.3.0/oslo_messaging/rpc/dispatcher.py
--- old/oslo_messaging-17.1.0/oslo_messaging/rpc/dispatcher.py  2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/rpc/dispatcher.py  2026-02-18 
14:45:04.000000000 +0100
@@ -88,7 +88,7 @@
     def __init__(self, version, method=None):
         msg = "Endpoint does not support RPC version %s" % version
         if method:
-            msg = "{}. Attempted method: {}".format(msg, method)
+            msg = f"{msg}. Attempted method: {method}"
         super().__init__(msg)
         self.version = version
         self.method = method
@@ -177,7 +177,7 @@
                          " for namespace and version filtering.  It must" + \
                          " be of type oslo_messaging.Target. Do not" + \
                          " define an Endpoint method named 'target'"
-                raise TypeError("{}: endpoint={}".format(errmsg, ep))
+                raise TypeError(f"{errmsg}: endpoint={ep}")
 
             # Check if we have an attribute named 'oslo_rpc_server_ping'
             oslo_rpc_server_ping = getattr(ep, 'oslo_rpc_server_ping', None)
@@ -186,7 +186,7 @@
                          " attribute which can be use to ping the" + \
                          " endpoint. Please avoid using any oslo_* " + \
                          " naming."
-                LOG.warning("{} (endpoint={})".format(errmsg, ep))
+                LOG.warning(f"{errmsg} (endpoint={ep})")
 
         self.endpoints = endpoints
 
@@ -243,16 +243,16 @@
             client_timeout = cm_heartbeat_interval = 0
 
         if cm_heartbeat_interval < 1:
-            LOG.warning('Client provided an invalid timeout value of %r' % (
-                incoming.client_timeout))
+            LOG.warning('Client provided an invalid timeout value of %r',
+                        incoming.client_timeout)
             return
 
         while not event.wait(cm_heartbeat_interval):
             LOG.debug(
                 'Sending call-monitor heartbeat for active call to %(method)s '
-                '(interval=%(interval)i)' % (
-                    {'method': incoming.message.get('method'),
-                     'interval': cm_heartbeat_interval}))
+                '(interval=%(interval)i)',
+                {'method': incoming.message.get('method'),
+                 'interval': cm_heartbeat_interval})
             try:
                 incoming.heartbeat()
             except Exception as exc:
@@ -260,8 +260,8 @@
                 # client has died. Nothing to do here but exit the watchdog
                 # thread. If the client is still alive (dead broker) then its
                 # RPC will timeout as expected.
-                LOG.debug("Call-monitor heartbeat failed: %(exc)s"
-                          % ({'exc': exc}))
+                LOG.debug("Call-monitor heartbeat failed: %(exc)s",
+                          {'exc': exc})
                 break
 
     def dispatch(self, incoming):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/oslo_messaging/server.py 
new/oslo_messaging-17.3.0/oslo_messaging/server.py
--- old/oslo_messaging-17.1.0/oslo_messaging/server.py  2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/server.py  2026-02-18 
14:45:04.000000000 +0100
@@ -65,7 +65,7 @@
     """Raised if an executor can't be loaded."""
 
     def __init__(self, executor, ex):
-        msg = 'Failed to load executor "{}": {}'.format(executor, ex)
+        msg = f'Failed to load executor "{executor}": {ex}'
         super().__init__(msg)
         self.executor = executor
         self.ex = ex
@@ -75,7 +75,7 @@
     """Raised if we failed to listen on a target."""
 
     def __init__(self, target, ex):
-        msg = 'Failed to listen on target "{}": {}'.format(target, ex)
+        msg = f'Failed to listen on target "{target}": {ex}'
         super().__init__(msg)
         self.target = target
         self.ex = ex
@@ -159,7 +159,7 @@
                               `timeout_timer` expires while waiting.
         """
         with self._cond:
-            msg = '{} is waiting for {} to complete'.format(caller, self._name)
+            msg = f'{caller} is waiting for {self._name} to complete'
             self._wait(lambda: not self.complete,
                        msg, log_after, timeout_timer)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/tests/drivers/test_impl_rabbit.py 
new/oslo_messaging-17.3.0/oslo_messaging/tests/drivers/test_impl_rabbit.py
--- old/oslo_messaging-17.1.0/oslo_messaging/tests/drivers/test_impl_rabbit.py  
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/tests/drivers/test_impl_rabbit.py  
2026-02-18 14:45:04.000000000 +0100
@@ -19,6 +19,7 @@
 import time
 import uuid
 
+from amqp import exceptions as amqp_ex
 import fixtures
 import kombu
 import kombu.connection
@@ -31,7 +32,6 @@
 from oslo_messaging._drivers import amqpdriver
 from oslo_messaging._drivers import common as driver_common
 from oslo_messaging._drivers import impl_rabbit as rabbit_driver
-from oslo_messaging.exceptions import ConfigurationError
 from oslo_messaging.exceptions import MessageDeliveryFailure
 from oslo_messaging.tests import utils as test_utils
 from oslo_messaging.transport import DriverLoadFailure
@@ -206,66 +206,24 @@
         )
 
 
-class TestRabbitDriverLoadSSLWithFIPS(test_utils.BaseTestCase):
-    scenarios = [
-        ('ssl_fips_mode', dict(options=dict(ssl=True,
-                                            ssl_enforce_fips_mode=True),
-                               expected=True)),
-    ]
-
-    @mock.patch('oslo_messaging._drivers.impl_rabbit.Connection'
-                '.ensure_connection')
-    @mock.patch('kombu.connection.Connection')
-    def test_driver_load_with_fips_supported(self,
-                                             connection_klass, fake_ensure):
-        self.config(ssl=True, ssl_enforce_fips_mode=True,
-                    group="oslo_messaging_rabbit")
-        transport = oslo_messaging.get_transport(self.conf,
-                                                 'kombu+memory:////')
-        self.addCleanup(transport.cleanup)
-
-        with mock.patch.object(ssl, 'FIPS_mode',
-                               create=True, return_value=True):
-            with mock.patch.object(ssl, 'FIPS_mode_set', create=True):
-
-                connection = transport._driver._get_connection()
-                connection_klass.assert_called_once_with(
-                    'memory:///', transport_options={
-                        'client_properties': {
-                            'capabilities': {
-                                'connection.blocked': True,
-                                'consumer_cancel_notify': True,
-                                'authentication_failure_close': True,
-                            },
-                            'connection_name': connection.name},
-                        'confirm_publish': True,
-                        'on_blocked': mock.ANY,
-                        'on_unblocked': mock.ANY},
-                    ssl=self.expected, login_method='AMQPLAIN',
-                    heartbeat=60, failover_strategy='round-robin'
-                )
-
-    @mock.patch('oslo_messaging._drivers.impl_rabbit.Connection'
-                '.ensure_connection')
-    @mock.patch('oslo_messaging._drivers.impl_rabbit.ssl')
-    @mock.patch('kombu.connection.Connection')
-    def test_fips_unsupported(self, connection_klass, fake_ssl, fake_ensure):
-        self.config(ssl=True, ssl_enforce_fips_mode=True,
-                    group="oslo_messaging_rabbit")
+class TestRabbitPublisher(test_utils.BaseTestCase):
+    @mock.patch('kombu.messaging.Producer.publish')
+    def test_send(self, fake_publish):
         transport = oslo_messaging.get_transport(self.conf,
                                                  'kombu+memory:////')
-        self.addCleanup(transport.cleanup)
-
-        del fake_ssl.FIPS_mode
-
-        # We do this test only if FIPS mode is not supported to
-        # ensure that we hard fail.
-        self.assertRaises(
-            ConfigurationError,
-            transport._driver._get_connection)
-
+        exchange_mock = mock.Mock()
+        with transport._driver._get_connection(
+                driver_common.PURPOSE_SEND) as pool_conn:
+            conn = pool_conn.connection
+            conn._publish(exchange_mock, 'msg', routing_key='routing_key')
+        exchange_mock.return_value.declare.assert_not_called()
+        fake_publish.assert_called_with(
+            'msg', expiration=None,
+            mandatory=False,
+            compression=self.conf.oslo_messaging_rabbit.kombu_compression,
+            exchange=exchange_mock,
+            routing_key='routing_key')
 
-class TestRabbitPublisher(test_utils.BaseTestCase):
     @mock.patch('kombu.messaging.Producer.publish')
     def test_send_with_timeout(self, fake_publish):
         transport = oslo_messaging.get_transport(self.conf,
@@ -285,14 +243,53 @@
             routing_key='routing_key')
 
     @mock.patch('kombu.messaging.Producer.publish')
-    def test_send_no_timeout(self, fake_publish):
+    def test_send_declare(self, fake_publish):
         transport = oslo_messaging.get_transport(self.conf,
                                                  'kombu+memory:////')
         exchange_mock = mock.Mock()
+        exchange_mock.passive = False
         with transport._driver._get_connection(
                 driver_common.PURPOSE_SEND) as pool_conn:
             conn = pool_conn.connection
             conn._publish(exchange_mock, 'msg', routing_key='routing_key')
+        exchange_mock.return_value.declare.assert_called_once_with()
+        fake_publish.assert_called_with(
+            'msg', expiration=None,
+            mandatory=False,
+            compression=self.conf.oslo_messaging_rabbit.kombu_compression,
+            exchange=exchange_mock,
+            routing_key='routing_key')
+
+    @mock.patch('kombu.messaging.Producer.publish')
+    def test_send_declare_precondition_failed(self, fake_publish):
+        transport = oslo_messaging.get_transport(self.conf,
+                                                 'kombu+memory:////')
+        exchange_mock = mock.Mock()
+        exchange_mock.passive = False
+        exchange_mock.return_value.declare.side_effect = \
+            amqp_ex.PreconditionFailed('error')
+        with transport._driver._get_connection(
+                driver_common.PURPOSE_SEND) as pool_conn:
+            conn = pool_conn.connection
+            self.assertRaises(
+                amqp_ex.PreconditionFailed,
+                conn._publish, exchange_mock, 'msg', routing_key='routing_key')
+        fake_publish.assert_not_called()
+
+    @mock.patch('kombu.messaging.Producer.publish')
+    def test_send_declare_precondition_failed_durable(self, fake_publish):
+        transport = oslo_messaging.get_transport(self.conf,
+                                                 'kombu+memory:////')
+        exchange_mock = mock.Mock()
+        exchange_mock.passive = False
+        exchange_mock.return_value.declare.side_effect = [
+            amqp_ex.PreconditionFailed(
+                "PRECONDITION_FAILED - inequivalent arg 'durable'"), None]
+        with transport._driver._get_connection(
+                driver_common.PURPOSE_SEND) as pool_conn:
+            conn = pool_conn.connection
+            conn._publish(exchange_mock, 'msg', routing_key='routing_key')
+        self.assertEqual(2, exchange_mock.return_value.declare.call_count)
         fake_publish.assert_called_with(
             'msg', expiration=None,
             mandatory=False,
@@ -778,7 +775,7 @@
                                          type='topic',
                                          durable=False,
                                          auto_delete=False)
-        topic = '{}.{}'.format(target.topic, target.server)
+        topic = f'{target.topic}.{target.server}'
         queue = kombu.entity.Queue(name=topic,
                                    channel=channel,
                                    exchange=exchange,
@@ -928,7 +925,7 @@
                                          type='topic',
                                          durable=False,
                                          auto_delete=False)
-        topic = '{}.{}'.format(target.topic, target.server)
+        topic = f'{target.topic}.{target.server}'
         producer = kombu.messaging.Producer(exchange=exchange,
                                             channel=channel,
                                             routing_key=topic)
@@ -1048,19 +1045,15 @@
             'kombu.connection.Connection.connection'))
         self.useFixture(fixtures.MockPatch(
             'kombu.connection.Connection.channel'))
-        # TODO(stephenfin): Drop hasattr when we drop support for kombo < 4.6.8
-        if hasattr(kombu.connection.Connection, '_connection_factory'):
-            self.useFixture(fixtures.MockPatch(
-                'kombu.connection.Connection._connection_factory'))
+        self.useFixture(fixtures.MockPatch(
+            'kombu.connection.Connection._connection_factory'))
 
         # starting from the first broker in the list
         url = oslo_messaging.TransportURL.parse(self.conf, None)
         self.connection = rabbit_driver.Connection(self.conf, url,
                                                    driver_common.PURPOSE_SEND)
-        # TODO(stephenfin): Remove when we drop support for kombo < 4.6.8
-        if hasattr(kombu.connection.Connection, 'connect'):
-            self.useFixture(fixtures.MockPatch(
-                'kombu.connection.Connection.connect'))
+        self.useFixture(fixtures.MockPatch(
+            'kombu.connection.Connection.connect'))
         self.addCleanup(self.connection.close)
 
     def test_ensure_four_retry(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/notify/test_logger.py 
new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/notify/test_logger.py
--- 
old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/notify/test_logger.py 
    2025-07-11 16:21:43.000000000 +0200
+++ 
new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/notify/test_logger.py 
    2026-02-18 14:45:04.000000000 +0100
@@ -50,7 +50,7 @@
 
     def test_logging(self):
         # NOTE(gtt): Using different topic to make tests run in parallel
-        topic = 'test_logging_{}_driver_{}'.format(self.priority, self.driver)
+        topic = f'test_logging_{self.priority}_driver_{self.driver}'
 
         if self.notify_url.startswith("kafka://"):
             self.conf.set_override('consumer_group', str(uuid.uuid4()),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/utils.py 
new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/utils.py
--- old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/utils.py  
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/utils.py  
2026-02-18 14:45:04.000000000 +0100
@@ -253,7 +253,7 @@
         self.wrong_order = []
 
     def describe(self):
-        text = "Sent {}, got {}; ".format(self.original, self.received)
+        text = f"Sent {self.original}, got {self.received}; "
         e1 = ["%r was missing" % m for m in self.missing]
         e2 = ["%r was not expected" % m for m in self.extra]
         e3 = ["{!r} expected before {!r}".format(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/oslo_messaging/tests/rpc/test_dispatcher.py 
new/oslo_messaging-17.3.0/oslo_messaging/tests/rpc/test_dispatcher.py
--- old/oslo_messaging-17.1.0/oslo_messaging/tests/rpc/test_dispatcher.py       
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/tests/rpc/test_dispatcher.py       
2026-02-18 14:45:04.000000000 +0100
@@ -214,7 +214,7 @@
                         self.ctxt, **self.msg.get('args', {}))
                 else:
                     self.assertEqual(0, method.call_count,
-                                     'method: {}'.format(method))
+                                     f'method: {method}')
 
 
 class TestDispatcherWithPingEndpoint(test_utils.BaseTestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/oslo_messaging/transport.py 
new/oslo_messaging-17.3.0/oslo_messaging/transport.py
--- old/oslo_messaging-17.1.0/oslo_messaging/transport.py       2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/transport.py       2026-02-18 
14:45:04.000000000 +0100
@@ -184,7 +184,7 @@
     """Raised if a transport driver can't be loaded."""
 
     def __init__(self, driver, ex):
-        msg = 'Failed to load transport driver "{}": {}'.format(driver, ex)
+        msg = f'Failed to load transport driver "{driver}": {ex}'
         super().__init__(msg)
         self.driver = driver
         self.ex = ex
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/pyproject.toml 
new/oslo_messaging-17.3.0/pyproject.toml
--- old/oslo_messaging-17.1.0/pyproject.toml    2025-07-11 16:21:43.000000000 
+0200
+++ new/oslo_messaging-17.3.0/pyproject.toml    2026-02-18 14:45:04.000000000 
+0100
@@ -1,3 +1,67 @@
 [build-system]
 requires = ["pbr>=6.1.1"]
 build-backend = "pbr.build"
+
+[project]
+name = "oslo.messaging"
+description = "Oslo Messaging API"
+readme = "README.rst"
+authors = [
+    {name = "OpenStack", email = "[email protected]"},
+]
+requires-python = ">=3.10"
+classifiers = [
+    "Environment :: OpenStack",
+    "Intended Audience :: Developers",
+    "Intended Audience :: Information Technology",
+    "License :: OSI Approved :: Apache Software License",
+    "Operating System :: OS Independent",
+    "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",
+    "Programming Language :: Python :: 3 :: Only",
+    "Programming Language :: Python :: Implementation :: CPython",
+]
+dynamic = ["version", "dependencies"]
+
+[project.urls]
+Homepage = "https://docs.openstack.org/oslo.messaging";
+Repository = "https://opendev.org/openstack/oslo.messaging";
+
+[project.optional-dependencies]
+# package dependencies for optional (non-rabbitmq) messaging drivers.
+# projects can test-depend on oslo.messaging[<drivers>]
+# e.g.: oslo.messaging[kafka]
+kafka = [
+    "confluent-kafka>=1.3.0", # Apache-2.0
+]
+
+[project.scripts]
+oslo-messaging-send-notification = 
"oslo_messaging.notify.notifier:_send_notification"
+
+[project.entry-points."oslo.messaging.drivers"]
+rabbit = "oslo_messaging._drivers.impl_rabbit:RabbitDriver"
+kafka = "oslo_messaging._drivers.impl_kafka:KafkaDriver"
+kombu = "oslo_messaging._drivers.impl_rabbit:RabbitDriver"
+fake = "oslo_messaging._drivers.impl_fake:FakeDriver"
+
+[project.entry-points."oslo.messaging.executors"]
+eventlet = "futurist:GreenThreadPoolExecutor"
+threading = "futurist:ThreadPoolExecutor"
+
+[project.entry-points."oslo.messaging.notify.drivers"]
+messagingv2 = "oslo_messaging.notify.messaging:MessagingV2Driver"
+messaging = "oslo_messaging.notify.messaging:MessagingDriver"
+log = "oslo_messaging.notify._impl_log:LogDriver"
+test = "oslo_messaging.notify._impl_test:TestDriver"
+noop = "oslo_messaging.notify._impl_noop:NoOpDriver"
+routing = "oslo_messaging.notify._impl_routing:RoutingDriver"
+
+[project.entry-points."oslo.config.opts"]
+"oslo.messaging" = "oslo_messaging.opts:list_opts"
+
+[tool.setuptools]
+packages = ["oslo_messaging"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
 
new/oslo_messaging-17.3.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
--- 
old/oslo_messaging-17.1.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo_messaging-17.3.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
    2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    Avoid deleting RabbitMQ ``quorum`` queues if they are failing on server
+    side with ``Internal Server Error`` (error ``541``).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml 
new/oslo_messaging-17.3.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
--- 
old/oslo_messaging-17.1.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo_messaging-17.3.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml  
    2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    `Bug 2131652 <https://bugs.launchpad.net/oslo.messaging/+bug/2131652>`_:
+    Fixed ignorance of Precondition Failed error by rabbitmq driver so that
+    the error is properly raised to clients.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
 
new/oslo_messaging-17.3.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
--- 
old/oslo_messaging-17.1.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo_messaging-17.3.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
      2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,5 @@
+---
+deprecations:
+  - |
+    The ``[oslo_messaging_rabbit] enforce_fips_mode`` option has been
+    deprecated and has no effect.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
 
new/oslo_messaging-17.3.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
--- 
old/oslo_messaging-17.1.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo_messaging-17.3.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
    2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Fixes a bug where calling some OpenStack utilites, such as ``nova-manage``,
+    within podman containers would fail when using Queue Manager.
+    `LP#2091703 <https://bugs.launchpad.net/oslo.messaging/+bug/2095178>`__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo_messaging-17.1.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml 
new/oslo_messaging-17.3.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml
--- 
old/oslo_messaging-17.1.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo_messaging-17.3.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml  
    2026-02-18 14:45:04.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_messaging-17.1.0/releasenotes/source/2024.1.rst 
new/oslo_messaging-17.3.0/releasenotes/source/2024.1.rst
--- old/oslo_messaging-17.1.0/releasenotes/source/2024.1.rst    2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/releasenotes/source/2024.1.rst    2026-02-18 
14:45:04.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_messaging-17.1.0/releasenotes/source/2025.2.rst 
new/oslo_messaging-17.3.0/releasenotes/source/2025.2.rst
--- old/oslo_messaging-17.1.0/releasenotes/source/2025.2.rst    1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo_messaging-17.3.0/releasenotes/source/2025.2.rst    2026-02-18 
14:45:04.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_messaging-17.1.0/releasenotes/source/index.rst 
new/oslo_messaging-17.3.0/releasenotes/source/index.rst
--- old/oslo_messaging-17.1.0/releasenotes/source/index.rst     2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/releasenotes/source/index.rst     2026-02-18 
14:45:04.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_messaging-17.1.0/requirements.txt 
new/oslo_messaging-17.3.0/requirements.txt
--- old/oslo_messaging-17.1.0/requirements.txt  2025-07-11 16:21:43.000000000 
+0200
+++ new/oslo_messaging-17.3.0/requirements.txt  2026-02-18 14:45:04.000000000 
+0100
@@ -25,7 +25,7 @@
 # rabbit driver is the default
 # we set the amqp version to ensure heartbeat works
 amqp>=2.5.2 # BSD
-kombu>=4.6.6 # BSD
+kombu>=4.6.8 # BSD
 
 # middleware
 oslo.middleware>=3.31.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/setup.cfg 
new/oslo_messaging-17.3.0/setup.cfg
--- old/oslo_messaging-17.1.0/setup.cfg 2025-07-11 16:23:06.748381400 +0200
+++ new/oslo_messaging-17.3.0/setup.cfg 2026-02-18 14:45:54.969240200 +0100
@@ -1,58 +1,5 @@
 [metadata]
 name = oslo.messaging
-author = OpenStack
-author_email = [email protected]
-summary = Oslo Messaging API
-description_file = 
-       README.rst
-home_page = https://docs.openstack.org/oslo.messaging/latest/
-python_requires = >=3.9
-classifier = 
-       Environment :: OpenStack
-       Intended Audience :: Developers
-       Intended Audience :: Information Technology
-       License :: OSI Approved :: Apache Software License
-       Operating System :: OS Independent
-       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
-
-[extras]
-kafka = 
-       confluent-kafka>=1.3.0 # Apache-2.0
-
-[files]
-packages = 
-       oslo_messaging
-
-[entry_points]
-console_scripts = 
-       oslo-messaging-send-notification = 
oslo_messaging.notify.notifier:_send_notification
-oslo.messaging.drivers = 
-       rabbit = oslo_messaging._drivers.impl_rabbit:RabbitDriver
-       
-       kafka = oslo_messaging._drivers.impl_kafka:KafkaDriver
-       
-       kombu = oslo_messaging._drivers.impl_rabbit:RabbitDriver
-       
-       fake = oslo_messaging._drivers.impl_fake:FakeDriver
-oslo.messaging.executors = 
-       eventlet = futurist:GreenThreadPoolExecutor
-       threading = futurist:ThreadPoolExecutor
-oslo.messaging.notify.drivers = 
-       messagingv2 = oslo_messaging.notify.messaging:MessagingV2Driver
-       messaging = oslo_messaging.notify.messaging:MessagingDriver
-       log = oslo_messaging.notify._impl_log:LogDriver
-       test = oslo_messaging.notify._impl_test:TestDriver
-       noop = oslo_messaging.notify._impl_noop:NoOpDriver
-       routing = oslo_messaging.notify._impl_routing:RoutingDriver
-oslo.config.opts = 
-       oslo.messaging = oslo_messaging.opts:list_opts
 
 [egg_info]
 tag_build = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/tools/simulator.py 
new/oslo_messaging-17.3.0/tools/simulator.py
--- old/oslo_messaging-17.1.0/tools/simulator.py        2025-07-11 
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/tools/simulator.py        2026-02-18 
14:45:04.000000000 +0100
@@ -334,14 +334,14 @@
         """Handle start reports from clients"""
 
         client_id = message['id']
-        LOG.info('The client %s started to send messages' % client_id)
+        LOG.info('The client %s started to send messages', client_id)
         self.connected_clients.add(client_id)
 
     def sync_done(self, ctx, message):
         """Handle done reports from clients"""
 
         client_id = message['id']
-        LOG.info('The client %s finished msg sending.' % client_id)
+        LOG.info('The client %s finished msg sending.', client_id)
 
         if client_id in self.connected_clients:
             self.connected_clients.remove(client_id)
@@ -437,11 +437,11 @@
             method = _rpc_call if self.sync_mode == 'call' else _rpc_cast
             method(self.sync_client, msg, 'sync_start')
         except Exception:
-            LOG.error('The client: %s failed to sync with %s.' %
-                      (self.client_id, self.client.target))
+            LOG.error('The client: %s failed to sync with %s.',
+                      self.client_id, self.client.target)
             return False
-        LOG.info('The client: {} successfully sync with  {}'.format(
-            self.client_id, self.client.target))
+        LOG.info('The client: %s successfully sync with %s',
+                 self.client_id, self.client.target)
         return True
 
     def sync_done(self):
@@ -450,11 +450,11 @@
             method = _rpc_call if self.sync_mode == 'call' else _rpc_cast
             method(self.sync_client, msg, 'sync_done')
         except Exception:
-            LOG.error('The client: %s failed finish the sync with %s.'
-                      % (self.client_id, self.client.target))
+            LOG.error('The client: %s failed finish the sync with %s.',
+                      self.client_id, self.client.target)
             return False
-        LOG.info('The client: %s successfully finished sync with %s'
-                 % (self.client_id, self.client.target))
+        LOG.info('The client: %s successfully finished sync with %s',
+                 self.client_id, self.client.target)
         return True
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo_messaging-17.1.0/tox.ini 
new/oslo_messaging-17.3.0/tox.ini
--- old/oslo_messaging-17.1.0/tox.ini   2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/tox.ini   2026-02-18 14:45:04.000000000 +0100
@@ -71,7 +71,8 @@
 
 [flake8]
 show-source = True
-enable-extensions = H203,H106
+# H904: Delay string interpolations at logging calls
+enable-extensions = H203,H106,H904
 # E731 skipped as assign a lambda expression
 ignore = E731,H405,W504
 exclude = .tox,dist,doc,*.egg,build,__init__.py
@@ -81,7 +82,6 @@
 
 [flake8:local-plugins]
 extension =
-  O321 = checks:check_oslo_namespace_imports
   O324 = checks:CheckForLoggingIssues
 paths = ./oslo_messaging/hacking
 

Reply via email to