Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-kombu for openSUSE:Factory 
checked in at 2024-04-03 17:20:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-kombu (Old)
 and      /work/SRC/openSUSE:Factory/.python-kombu.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-kombu"

Wed Apr  3 17:20:51 2024 rev:82 rq:1164300 version:5.3.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-kombu/python-kombu.changes        
2024-02-08 19:03:32.538084869 +0100
+++ /work/SRC/openSUSE:Factory/.python-kombu.new.1905/python-kombu.changes      
2024-04-03 17:22:06.993259416 +0200
@@ -1,0 +2,20 @@
+Wed Apr  3 07:21:44 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 5.3.6:
+  * boto3>=1.26.143
+  * Always convert azureservicebus namespace to fully qualified
+  * Pin pytest-sugar to latest version 1.0.0
+  * Upgrade to pytest v8 that removed nose compatibility
+  * fix warning for usage of utcfromtimestamp
+  * Update pytest to 8.0.2
+  * Hotfix: Fix CI failures (limit redis to <5.0.2 instead of
+  * Expose cancel callback from py-amqp channel.basic_consume
+  * Update mypy to 1.9.0
+  * Update pytest to 8.1.1
+  * Pin hypothesis to hypothesis<7
+  * redis>=4.5.2,<5.0.2,!=4.5.5 -> redis>=4.5.2,!=5.0.2,!=4.5.5
+  * add escape hatch for custom JSON serialization
+  * Pin pytest-cov to latest version 5.0.0
+  * Added Changelog for v5.3.6
+
+-------------------------------------------------------------------

Old:
----
  kombu-5.3.5.tar.gz

New:
----
  kombu-5.3.6.tar.gz

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

Other differences:
------------------
++++++ python-kombu.spec ++++++
--- /var/tmp/diff_new_pack.dUSNYj/_old  2024-04-03 17:22:07.793288932 +0200
+++ /var/tmp/diff_new_pack.dUSNYj/_new  2024-04-03 17:22:07.797289080 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-kombu
-Version:        5.3.5
+Version:        5.3.6
 Release:        0
 Summary:        AMQP Messaging Framework for Python
 License:        BSD-3-Clause
@@ -33,7 +33,7 @@
 BuildRequires:  %{python_module SQLAlchemy}
 BuildRequires:  %{python_module amqp >= 5.1.1}
 BuildRequires:  %{python_module azure-identity >= 1.12.0}
-BuildRequires:  %{python_module boto3 >= 1.9.12}
+BuildRequires:  %{python_module boto3 >= 1.26.143}
 BuildRequires:  %{python_module hypothesis}
 BuildRequires:  %{python_module msgpack}
 BuildRequires:  %{python_module pycurl >= 7.43.0.2}

++++++ kombu-5.3.5.tar.gz -> kombu-5.3.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/PKG-INFO new/kombu-5.3.6/PKG-INFO
--- old/kombu-5.3.5/PKG-INFO    2024-01-12 20:55:36.071878000 +0100
+++ new/kombu-5.3.6/PKG-INFO    2024-03-27 14:06:01.328128000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: kombu
-Version: 5.3.5
+Version: 5.3.6
 Summary: Messaging library for Python.
 Home-page: https://kombu.readthedocs.io
 Author: Ask Solem
@@ -38,7 +38,7 @@
 Provides-Extra: yaml
 Requires-Dist: PyYAML>=3.10; extra == "yaml"
 Provides-Extra: redis
-Requires-Dist: redis!=4.5.5,<6.0.0,>=4.5.2; extra == "redis"
+Requires-Dist: redis!=4.5.5,!=5.0.2,>=4.5.2; extra == "redis"
 Provides-Extra: mongodb
 Requires-Dist: pymongo>=4.1.1; extra == "mongodb"
 Provides-Extra: sqs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/README.rst new/kombu-5.3.6/README.rst
--- old/kombu-5.3.5/README.rst  2024-01-12 20:53:46.000000000 +0100
+++ new/kombu-5.3.6/README.rst  2024-03-27 14:05:32.000000000 +0100
@@ -4,7 +4,7 @@
 
 |build-status| |coverage| |license| |wheel| |pyversion| |pyimp| |downloads|
 
-:Version: 5.3.5
+:Version: 5.3.6
 :Documentation: https://kombu.readthedocs.io/
 :Download: https://pypi.org/project/kombu/
 :Source: https://github.com/celery/kombu/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/docs/includes/introduction.txt 
new/kombu-5.3.6/docs/includes/introduction.txt
--- old/kombu-5.3.5/docs/includes/introduction.txt      2024-01-12 
20:53:46.000000000 +0100
+++ new/kombu-5.3.6/docs/includes/introduction.txt      2024-03-27 
14:05:32.000000000 +0100
@@ -1,4 +1,4 @@
-:Version: 5.3.5
+:Version: 5.3.6
 :Web: https://kombu.readthedocs.io/
 :Download: https://pypi.org/project/kombu/
 :Source: https://github.com/celery/kombu/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu/__init__.py 
new/kombu-5.3.6/kombu/__init__.py
--- old/kombu-5.3.5/kombu/__init__.py   2024-01-12 20:53:46.000000000 +0100
+++ new/kombu-5.3.6/kombu/__init__.py   2024-03-27 14:05:32.000000000 +0100
@@ -8,7 +8,7 @@
 from collections import namedtuple
 from typing import Any, cast
 
-__version__ = '5.3.5'
+__version__ = '5.3.6'
 __author__ = 'Ask Solem'
 __contact__ = '[email protected]'
 __homepage__ = 'https://kombu.readthedocs.io'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu/asynchronous/timer.py 
new/kombu-5.3.6/kombu/asynchronous/timer.py
--- old/kombu-5.3.5/kombu/asynchronous/timer.py 2023-05-15 05:09:16.000000000 
+0200
+++ new/kombu-5.3.6/kombu/asynchronous/timer.py 2024-03-05 11:08:52.000000000 
+0100
@@ -29,7 +29,7 @@
 logger = get_logger(__name__)
 
 DEFAULT_MAX_INTERVAL = 2
-EPOCH = datetime.utcfromtimestamp(0).replace(tzinfo=ZoneInfo("UTC"))
+EPOCH = datetime.fromtimestamp(0, ZoneInfo("UTC"))
 IS_PYPY = hasattr(sys, 'pypy_version_info')
 
 scheduled = namedtuple('scheduled', ('eta', 'priority', 'entry'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu/entity.py 
new/kombu-5.3.6/kombu/entity.py
--- old/kombu-5.3.5/kombu/entity.py     2023-05-15 05:09:16.000000000 +0200
+++ new/kombu-5.3.6/kombu/entity.py     2024-03-09 09:49:45.000000000 +0100
@@ -722,7 +722,7 @@
                                         nowait=nowait) or 0
 
     def consume(self, consumer_tag='', callback=None,
-                no_ack=None, nowait=False):
+                no_ack=None, nowait=False, on_cancel=None):
         """Start a queue consumer.
 
         Consumers last as long as the channel they were created on, or
@@ -741,6 +741,9 @@
             nowait (bool): Do not wait for a reply.
 
             callback (Callable): callback called for each delivered message.
+
+            on_cancel (Callable): callback called on cancel notify received
+                from broker.
         """
         if no_ack is None:
             no_ack = self.no_ack
@@ -750,7 +753,9 @@
             consumer_tag=consumer_tag or '',
             callback=callback,
             nowait=nowait,
-            arguments=self.consumer_arguments)
+            arguments=self.consumer_arguments,
+            on_cancel=on_cancel,
+        )
 
     def cancel(self, consumer_tag):
         """Cancel a consumer by consumer tag."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu/transport/azureservicebus.py 
new/kombu-5.3.6/kombu/transport/azureservicebus.py
--- old/kombu-5.3.5/kombu/transport/azureservicebus.py  2024-01-08 
16:56:44.000000000 +0100
+++ new/kombu-5.3.6/kombu/transport/azureservicebus.py  2024-03-05 
11:08:52.000000000 +0100
@@ -148,13 +148,8 @@
         if ":" in self._credential:
             self._policy, self._sas_key = self._credential.split(':', 1)
 
-        # Convert
-        endpoint = 'sb://' + self._namespace
-        if not endpoint.endswith('.net'):
-            endpoint += '.servicebus.windows.net'
-
         conn_dict = {
-            'Endpoint': endpoint,
+            'Endpoint': 'sb://' + self._namespace,
             'SharedAccessKeyName': self._policy,
             'SharedAccessKey': self._sas_key,
         }
@@ -451,6 +446,9 @@
         # > 'rootpolicy:some/key',  'somenamespace'
         credential, namespace = uri.rsplit('@', 1)
 
+        if not namespace.endswith('.net'):
+            namespace += '.servicebus.windows.net'
+
         if "DefaultAzureCredential".lower() == credential.lower():
             if DefaultAzureCredential is None:
                 raise ImportError('Azure Service Bus transport with a '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu/utils/json.py 
new/kombu-5.3.6/kombu/utils/json.py
--- old/kombu-5.3.5/kombu/utils/json.py 2023-06-18 22:37:05.000000000 +0200
+++ new/kombu-5.3.6/kombu/utils/json.py 2024-03-27 13:05:07.000000000 +0100
@@ -32,7 +32,9 @@
 
         for t, (marker, encoder) in _encoders.items():
             if isinstance(o, t):
-                return _as(marker, encoder(o))
+                return (
+                    encoder(o) if marker is None else _as(marker, encoder(o))
+                )
 
         # Bytes is slightly trickier, so we cannot put them directly
         # into _encoders, because we use two formats: bytes, and base64.
@@ -50,7 +52,11 @@
 
 
 def dumps(
-    s, _dumps=json.dumps, cls=JSONEncoder, default_kwargs=None, **kwargs
+    s,
+    _dumps=json.dumps,
+    cls=JSONEncoder,
+    default_kwargs=None,
+    **kwargs
 ):
     """Serialize object to json string."""
     default_kwargs = default_kwargs or {}
@@ -94,35 +100,47 @@
 
 def register_type(
     t: type[T],
-    marker: str,
+    marker: str | None,
     encoder: Callable[[T], EncodedT],
-    decoder: Callable[[EncodedT], T],
+    decoder: Callable[[EncodedT], T] = lambda d: d,
 ):
-    """Add support for serializing/deserializing native python type."""
+    """Add support for serializing/deserializing native python type.
+
+    If marker is `None`, the encoding is a pure transformation and the result
+    is not placed in an envelope, so `decoder` is unnecessary. Decoding must
+    instead be handled outside this library.
+    """
     _encoders[t] = (marker, encoder)
-    _decoders[marker] = decoder
+    if marker is not None:
+        _decoders[marker] = decoder
 
 
-_encoders: dict[type, tuple[str, EncoderT]] = {}
+_encoders: dict[type, tuple[str | None, EncoderT]] = {}
 _decoders: dict[str, DecoderT] = {
     "bytes": lambda o: o.encode("utf-8"),
     "base64": lambda o: base64.b64decode(o.encode("utf-8")),
 }
 
-# NOTE: datetime should be registered before date,
-# because datetime is also instance of date.
-register_type(datetime, "datetime", datetime.isoformat, datetime.fromisoformat)
-register_type(
-    date,
-    "date",
-    lambda o: o.isoformat(),
-    lambda o: datetime.fromisoformat(o).date(),
-)
-register_type(time, "time", lambda o: o.isoformat(), time.fromisoformat)
-register_type(Decimal, "decimal", str, Decimal)
-register_type(
-    uuid.UUID,
-    "uuid",
-    lambda o: {"hex": o.hex},
-    lambda o: uuid.UUID(**o),
-)
+
+def _register_default_types():
+    # NOTE: datetime should be registered before date,
+    # because datetime is also instance of date.
+    register_type(datetime, "datetime", datetime.isoformat,
+                  datetime.fromisoformat)
+    register_type(
+        date,
+        "date",
+        lambda o: o.isoformat(),
+        lambda o: datetime.fromisoformat(o).date(),
+    )
+    register_type(time, "time", lambda o: o.isoformat(), time.fromisoformat)
+    register_type(Decimal, "decimal", str, Decimal)
+    register_type(
+        uuid.UUID,
+        "uuid",
+        lambda o: {"hex": o.hex},
+        lambda o: uuid.UUID(**o),
+    )
+
+
+_register_default_types()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu.egg-info/PKG-INFO 
new/kombu-5.3.6/kombu.egg-info/PKG-INFO
--- old/kombu-5.3.5/kombu.egg-info/PKG-INFO     2024-01-12 20:55:35.000000000 
+0100
+++ new/kombu-5.3.6/kombu.egg-info/PKG-INFO     2024-03-27 14:06:01.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: kombu
-Version: 5.3.5
+Version: 5.3.6
 Summary: Messaging library for Python.
 Home-page: https://kombu.readthedocs.io
 Author: Ask Solem
@@ -38,7 +38,7 @@
 Provides-Extra: yaml
 Requires-Dist: PyYAML>=3.10; extra == "yaml"
 Provides-Extra: redis
-Requires-Dist: redis!=4.5.5,<6.0.0,>=4.5.2; extra == "redis"
+Requires-Dist: redis!=4.5.5,!=5.0.2,>=4.5.2; extra == "redis"
 Provides-Extra: mongodb
 Requires-Dist: pymongo>=4.1.1; extra == "mongodb"
 Provides-Extra: sqs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/kombu.egg-info/requires.txt 
new/kombu-5.3.6/kombu.egg-info/requires.txt
--- old/kombu-5.3.5/kombu.egg-info/requires.txt 2024-01-12 20:55:35.000000000 
+0100
+++ new/kombu-5.3.6/kombu.egg-info/requires.txt 2024-03-27 14:06:01.000000000 
+0100
@@ -39,7 +39,7 @@
 qpid-tools>=0.26
 
 [redis]
-redis!=4.5.5,<6.0.0,>=4.5.2
+redis!=4.5.5,!=5.0.2,>=4.5.2
 
 [slmq]
 softlayer_messaging>=1.0.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/requirements/extras/redis.txt 
new/kombu-5.3.6/requirements/extras/redis.txt
--- old/kombu-5.3.5/requirements/extras/redis.txt       2023-09-17 
20:37:33.000000000 +0200
+++ new/kombu-5.3.6/requirements/extras/redis.txt       2024-03-11 
10:58:36.000000000 +0100
@@ -1 +1 @@
-redis>=4.5.2,<6.0.0,!=4.5.5
+redis>=4.5.2,!=5.0.2,!=4.5.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/requirements/funtest.txt 
new/kombu-5.3.6/requirements/funtest.txt
--- old/kombu-5.3.5/requirements/funtest.txt    2022-09-28 17:48:06.000000000 
+0200
+++ new/kombu-5.3.6/requirements/funtest.txt    2024-03-11 10:58:36.000000000 
+0100
@@ -1,5 +1,5 @@
 # redis transport
-redis
+redis>=4.5.2,!=5.0.2,!=4.5.5
 
 # MongoDB transport
 pymongo
@@ -8,7 +8,7 @@
 kazoo
 
 # SQS transport
-boto3
+boto3>=1.26.143
 
 # Qpid transport
 qpid-python>=0.26
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/requirements/pkgutils.txt 
new/kombu-5.3.6/requirements/pkgutils.txt
--- old/kombu-5.3.5/requirements/pkgutils.txt   2024-01-08 19:06:37.000000000 
+0100
+++ new/kombu-5.3.6/requirements/pkgutils.txt   2024-03-09 09:54:36.000000000 
+0100
@@ -5,4 +5,4 @@
 sphinx2rst>=1.0
 bumpversion
 pydocstyle==6.3.0
-mypy==1.8.0
+mypy==1.9.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/requirements/test-ci.txt 
new/kombu-5.3.6/requirements/test-ci.txt
--- old/kombu-5.3.5/requirements/test-ci.txt    2023-06-18 22:37:05.000000000 
+0200
+++ new/kombu-5.3.6/requirements/test-ci.txt    2024-03-27 13:05:07.000000000 
+0100
@@ -1,4 +1,4 @@
-pytest-cov
+pytest-cov==5.0.0
 codecov; sys_platform == 'win32'
 librabbitmq>=2.0.0; sys_platform == 'win32'
 -r extras/redis.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/requirements/test.txt 
new/kombu-5.3.6/requirements/test.txt
--- old/kombu-5.3.5/requirements/test.txt       2024-01-08 18:12:55.000000000 
+0100
+++ new/kombu-5.3.6/requirements/test.txt       2024-03-11 10:37:32.000000000 
+0100
@@ -1,5 +1,5 @@
-pytest==7.4.4
-pytest-sugar
+hypothesis<7
 Pyro4
-hypothesis
 pytest-freezer
+pytest-sugar==1.0.0
+pytest==8.1.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kombu-5.3.5/t/unit/asynchronous/aws/sqs/test_connection.py 
new/kombu-5.3.6/t/unit/asynchronous/aws/sqs/test_connection.py
--- old/kombu-5.3.5/t/unit/asynchronous/aws/sqs/test_connection.py      
2023-11-28 13:45:32.000000000 +0100
+++ new/kombu-5.3.6/t/unit/asynchronous/aws/sqs/test_connection.py      
2024-03-05 11:08:52.000000000 +0100
@@ -17,7 +17,7 @@
 
 class test_AsyncSQSConnection(AWSCase):
 
-    def setup(self):
+    def setup_method(self):
         session = boto3.session.Session(
             aws_access_key_id='AAA',
             aws_secret_access_key='AAAA',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kombu-5.3.5/t/unit/asynchronous/aws/sqs/test_queue.py 
new/kombu-5.3.6/t/unit/asynchronous/aws/sqs/test_queue.py
--- old/kombu-5.3.5/t/unit/asynchronous/aws/sqs/test_queue.py   2023-10-13 
19:12:35.000000000 +0200
+++ new/kombu-5.3.6/t/unit/asynchronous/aws/sqs/test_queue.py   2024-03-05 
11:08:52.000000000 +0100
@@ -13,7 +13,7 @@
 
 class test_AsyncQueue(AWSCase):
 
-    def setup(self):
+    def setup_method(self):
         self.conn = Mock(name='connection')
         self.x = AsyncQueue(self.conn, '/url')
         self.callback = PromiseMock(name='callback')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kombu-5.3.5/t/unit/asynchronous/aws/test_connection.py 
new/kombu-5.3.6/t/unit/asynchronous/aws/test_connection.py
--- old/kombu-5.3.5/t/unit/asynchronous/aws/test_connection.py  2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/asynchronous/aws/test_connection.py  2024-03-05 
11:08:52.000000000 +0100
@@ -199,7 +199,7 @@
 
 class test_AsyncAWSQueryConnection(AWSCase):
 
-    def setup(self):
+    def setup_method(self):
         session = boto3.session.Session(
             aws_access_key_id='AAA',
             aws_secret_access_key='AAAA',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/asynchronous/test_hub.py 
new/kombu-5.3.6/t/unit/asynchronous/test_hub.py
--- old/kombu-5.3.5/t/unit/asynchronous/test_hub.py     2024-01-08 
16:56:44.000000000 +0100
+++ new/kombu-5.3.6/t/unit/asynchronous/test_hub.py     2024-03-05 
11:08:52.000000000 +0100
@@ -127,10 +127,10 @@
 
 class test_Utils:
 
-    def setup(self):
+    def setup_method(self):
         self._prev_loop = get_event_loop()
 
-    def teardown(self):
+    def teardown_method(self):
         set_event_loop(self._prev_loop)
 
     def test_get_set_event_loop(self):
@@ -153,10 +153,10 @@
 
 class test_Hub:
 
-    def setup(self):
+    def setup_method(self):
         self.hub = Hub()
 
-    def teardown(self):
+    def teardown_method(self):
         self.hub.close()
 
     def test_reset(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_compat.py 
new/kombu-5.3.6/t/unit/test_compat.py
--- old/kombu-5.3.5/t/unit/test_compat.py       2022-10-19 12:47:33.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_compat.py       2024-03-05 11:08:52.000000000 
+0100
@@ -77,7 +77,7 @@
 
 class test_Publisher:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection(transport=Transport)
 
     def test_constructor(self):
@@ -130,7 +130,7 @@
 
 class test_Consumer:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection(transport=Transport)
 
     @patch('kombu.compat._iterconsume')
@@ -266,7 +266,7 @@
 
 class test_ConsumerSet:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection(transport=Transport)
 
     def test_providing_channel(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_connection.py 
new/kombu-5.3.6/t/unit/test_connection.py
--- old/kombu-5.3.5/t/unit/test_connection.py   2023-06-19 17:18:18.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_connection.py   2024-03-05 11:08:52.000000000 
+0100
@@ -16,7 +16,7 @@
 
 class test_connection_utils:
 
-    def setup(self):
+    def setup_method(self):
         self.url = 'amqp://user:pass@localhost:5672/my/vhost'
         self.nopass = 'amqp://user:**@localhost:5672/my/vhost'
         self.expected = {
@@ -136,7 +136,7 @@
 
 class test_Connection:
 
-    def setup(self):
+    def setup_method(self):
         self.conn = Connection(port=5672, transport=Transport)
 
     def test_establish_connection(self):
@@ -757,7 +757,7 @@
 
     transport_options = {'pool_recycler': 3600, 'echo': True}
 
-    def setup(self):
+    def setup_method(self):
         self.conn = Connection(port=5672, transport=Transport,
                                transport_options=self.transport_options)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_entity.py 
new/kombu-5.3.6/t/unit/test_entity.py
--- old/kombu-5.3.5/t/unit/test_entity.py       2022-10-19 12:47:33.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_entity.py       2024-03-09 09:49:45.000000000 
+0100
@@ -210,7 +210,7 @@
 
 class test_Queue:
 
-    def setup(self) -> None:
+    def setup_method(self) -> None:
         self.exchange = Exchange('foo', 'direct')
 
     def test_constructor_with_actual_exchange(self) -> None:
@@ -387,6 +387,22 @@
         b.consume('fifafo', None)
         assert 'basic_consume' in b.channel
 
+    def test_consume_with_callbacks(self) -> None:
+        chan = Mock()
+        b = Queue('foo', self.exchange, 'foo', channel=chan)
+        callback = Mock()
+        on_cancel = Mock()
+        b.consume('fifafo', callback=callback, on_cancel=on_cancel)
+        chan.basic_consume.assert_called_with(
+            queue='foo',
+            no_ack=False,
+            consumer_tag='fifafo',
+            callback=callback,
+            nowait=False,
+            arguments=None,
+            on_cancel=on_cancel
+        )
+
     def test_cancel(self) -> None:
         b = Queue('foo', self.exchange, 'foo', channel=get_conn().channel())
         b.cancel('fifafo')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_log.py 
new/kombu-5.3.6/t/unit/test_log.py
--- old/kombu-5.3.5/t/unit/test_log.py  2022-10-19 12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/test_log.py  2024-03-05 11:08:52.000000000 +0100
@@ -46,7 +46,7 @@
 
 class test_LogMixin:
 
-    def setup(self):
+    def setup_method(self):
         self.log = Log('Log', Mock())
         self.logger = self.log.logger
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_messaging.py 
new/kombu-5.3.6/t/unit/test_messaging.py
--- old/kombu-5.3.5/t/unit/test_messaging.py    2022-10-19 12:47:33.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_messaging.py    2024-03-05 11:08:52.000000000 
+0100
@@ -16,7 +16,7 @@
 
 class test_Producer:
 
-    def setup(self):
+    def setup_method(self):
         self.exchange = Exchange('foo', 'direct')
         self.connection = Connection(transport=Transport)
         self.connection.connect()
@@ -243,7 +243,7 @@
 
 class test_Consumer:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection(transport=Transport)
         self.connection.connect()
         assert self.connection.connection.connected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_mixins.py 
new/kombu-5.3.6/t/unit/test_mixins.py
--- old/kombu-5.3.5/t/unit/test_mixins.py       2022-10-19 12:47:33.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_mixins.py       2024-03-05 11:08:52.000000000 
+0100
@@ -110,7 +110,7 @@
 
 class test_ConsumerMixin_interface:
 
-    def setup(self):
+    def setup_method(self):
         self.c = ConsumerMixin()
 
     def test_get_consumers(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_pidbox.py 
new/kombu-5.3.6/t/unit/test_pidbox.py
--- old/kombu-5.3.5/t/unit/test_pidbox.py       2022-10-19 12:47:33.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_pidbox.py       2024-03-05 11:08:52.000000000 
+0100
@@ -27,7 +27,7 @@
         def _collect(self, *args, **kwargs):
             return 'COLLECTED'
 
-    def setup(self):
+    def setup_method(self):
         self.mailbox = self.Mailbox('test_pidbox')
         self.connection = Connection(transport='memory')
         self.state = {'var': 1}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_pools.py 
new/kombu-5.3.6/t/unit/test_pools.py
--- old/kombu-5.3.5/t/unit/test_pools.py        2023-12-05 13:59:16.000000000 
+0100
+++ new/kombu-5.3.6/t/unit/test_pools.py        2024-03-05 11:08:52.000000000 
+0100
@@ -21,7 +21,7 @@
         def Producer(self, connection):
             return self.instance
 
-    def setup(self):
+    def setup_method(self):
         self.connections = Mock()
         self.pool = self.Pool(self.connections, limit=10)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/test_simple.py 
new/kombu-5.3.6/t/unit/test_simple.py
--- old/kombu-5.3.5/t/unit/test_simple.py       2022-10-19 12:47:33.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/test_simple.py       2024-03-05 11:08:52.000000000 
+0100
@@ -21,11 +21,11 @@
     def _Queue(self, *args, **kwargs):
         raise NotImplementedError()
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection(transport='memory')
         self.connection.default_channel.exchange_declare('amq.direct')
 
-    def teardown(self):
+    def teardown_method(self):
         self.connection.close()
         self.connection = None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_SQS.py 
new/kombu-5.3.6/t/unit/transport/test_SQS.py
--- old/kombu-5.3.5/t/unit/transport/test_SQS.py        2023-10-13 
19:12:35.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_SQS.py        2024-03-05 
11:08:52.000000000 +0100
@@ -141,7 +141,7 @@
     def handleMessageCallback(self, message):
         self.callback_message = message
 
-    def setup(self):
+    def setup_method(self):
         """Mock the back-end SQS classes"""
         # Sanity check... if SQS is None, then it did not import and we
         # cannot execute our tests.
@@ -195,7 +195,7 @@
                                    callback=self.handleMessageCallback,
                                    consumer_tag='unittest')
 
-    def teardown(self):
+    def teardown_method(self):
         # Removes QoS reserved messages so we don't restore msgs on shutdown.
         try:
             qos = self.channel._qos
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_azureservicebus.py 
new/kombu-5.3.6/t/unit/transport/test_azureservicebus.py
--- old/kombu-5.3.5/t/unit/transport/test_azureservicebus.py    2024-01-08 
16:56:44.000000000 +0100
+++ new/kombu-5.3.6/t/unit/transport/test_azureservicebus.py    2024-03-05 
11:08:52.000000000 +0100
@@ -103,8 +103,11 @@
 
 URL_NOCREDS = 'azureservicebus://'
 URL_CREDS_SAS = 'azureservicebus://policyname:ke/y@hostname'
+URL_CREDS_SAS_FQ = 
'azureservicebus://policyname:ke/[email protected]'  # noqa
 URL_CREDS_DA = 'azureservicebus://DefaultAzureCredential@hostname'
+URL_CREDS_DA_FQ = 
'azureservicebus://[email protected]' # 
noqa
 URL_CREDS_MI = 'azureservicebus://ManagedIdentityCredential@hostname'
+URL_CREDS_MI_FQ = 
'azureservicebus://[email protected]' # 
noqa
 
 
 def test_queue_service_nocredentials():
@@ -133,6 +136,7 @@
         # Ensure that queue_service is cached
         assert channel.queue_service == 'test'
         assert m.from_connection_string.call_count == 1
+        assert channel._namespace == 'hostname.servicebus.windows.net'
 
 
 def test_queue_service_da():
@@ -142,6 +146,7 @@
     # Check the DefaultAzureCredential has been parsed from the url correctly
     # and the credential is a ManagedIdentityCredential
     assert isinstance(channel._credential, DefaultAzureCredential)
+    assert channel._namespace == 'hostname.servicebus.windows.net'
 
 
 def test_queue_service_mi():
@@ -151,6 +156,7 @@
     # Check the ManagedIdentityCredential has been parsed from the url
     # correctly and the credential is a ManagedIdentityCredential
     assert isinstance(channel._credential, ManagedIdentityCredential)
+    assert channel._namespace == 'hostname.servicebus.windows.net'
 
 
 def test_conninfo():
@@ -450,14 +456,14 @@
 
 def test_returning_sas():
     conn = Connection(URL_CREDS_SAS, transport=azureservicebus.Transport)
-    assert conn.as_uri(True) == URL_CREDS_SAS
+    assert conn.as_uri(True) == URL_CREDS_SAS_FQ
 
 
 def test_returning_da():
     conn = Connection(URL_CREDS_DA, transport=azureservicebus.Transport)
-    assert conn.as_uri(True) == URL_CREDS_DA
+    assert conn.as_uri(True) == URL_CREDS_DA_FQ
 
 
 def test_returning_mi():
     conn = Connection(URL_CREDS_MI, transport=azureservicebus.Transport)
-    assert conn.as_uri(True) == URL_CREDS_MI
+    assert conn.as_uri(True) == URL_CREDS_MI_FQ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_base.py 
new/kombu-5.3.6/t/unit/transport/test_base.py
--- old/kombu-5.3.5/t/unit/transport/test_base.py       2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_base.py       2024-03-05 
11:08:52.000000000 +0100
@@ -25,7 +25,7 @@
 
 class test_StdChannel:
 
-    def setup(self):
+    def setup_method(self):
         self.conn = Connection('memory://')
         self.channel = self.conn.channel()
         self.channel.queues.clear()
@@ -52,7 +52,7 @@
 
 class test_Message:
 
-    def setup(self):
+    def setup_method(self):
         self.conn = Connection('memory://')
         self.channel = self.conn.channel()
         self.message = Message(channel=self.channel, delivery_tag=313)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_consul.py 
new/kombu-5.3.6/t/unit/transport/test_consul.py
--- old/kombu-5.3.5/t/unit/transport/test_consul.py     2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_consul.py     2024-03-05 
11:08:52.000000000 +0100
@@ -13,7 +13,7 @@
 
 class test_Consul:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Mock()
         self.connection._used_channel_ids = array('H')
         self.connection.channel_max = 65535
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_etcd.py 
new/kombu-5.3.6/t/unit/transport/test_etcd.py
--- old/kombu-5.3.5/t/unit/transport/test_etcd.py       2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_etcd.py       2024-03-05 
11:08:52.000000000 +0100
@@ -12,7 +12,7 @@
 
 class test_Etcd:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Mock()
         self.connection.client.transport_options = {}
         self.connection.client.port = 2739
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_filesystem.py 
new/kombu-5.3.6/t/unit/transport/test_filesystem.py
--- old/kombu-5.3.5/t/unit/transport/test_filesystem.py 2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_filesystem.py 2024-03-05 
11:08:52.000000000 +0100
@@ -14,7 +14,7 @@
 @t.skip.if_win32
 class test_FilesystemTransport:
 
-    def setup(self):
+    def setup_method(self):
         self.channels = set()
         try:
             data_folder_in = tempfile.mkdtemp()
@@ -41,7 +41,7 @@
                         exchange=self.e,
                         routing_key='test_transport_filesystem2')
 
-    def teardown(self):
+    def teardown_method(self):
         # make sure we don't attempt to restore messages at shutdown.
         for channel in self.channels:
             try:
@@ -147,7 +147,7 @@
 
 @t.skip.if_win32
 class test_FilesystemFanout:
-    def setup(self):
+    def setup_method(self):
         try:
             data_folder_in = tempfile.mkdtemp()
             data_folder_out = tempfile.mkdtemp()
@@ -177,7 +177,7 @@
         self.q1 = Queue("queue1", exchange=self.exchange)
         self.q2 = Queue("queue2", exchange=self.exchange)
 
-    def teardown(self):
+    def teardown_method(self):
         # make sure we don't attempt to restore messages at shutdown.
         for channel in [self.producer_channel, self.consumer_connection]:
             try:
@@ -240,7 +240,7 @@
 
 @t.skip.if_win32
 class test_FilesystemLock:
-    def setup(self):
+    def setup_method(self):
         try:
             data_folder_in = tempfile.mkdtemp()
             data_folder_out = tempfile.mkdtemp()
@@ -269,7 +269,7 @@
         self.exchange = Exchange("filesystem_exchange_lock", type="fanout")
         self.q = Queue("queue1", exchange=self.exchange)
 
-    def teardown(self):
+    def teardown_method(self):
         # make sure we don't attempt to restore messages at shutdown.
         for channel in [self.producer_channel, self.consumer_connection]:
             try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_librabbitmq.py 
new/kombu-5.3.6/t/unit/transport/test_librabbitmq.py
--- old/kombu-5.3.5/t/unit/transport/test_librabbitmq.py        2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_librabbitmq.py        2024-03-05 
11:08:52.000000000 +0100
@@ -53,7 +53,7 @@
 
 class test_Transport:
 
-    def setup(self):
+    def setup_method(self):
         self.client = Mock(name='client')
         self.T = librabbitmq.Transport(self.client)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_memory.py 
new/kombu-5.3.6/t/unit/transport/test_memory.py
--- old/kombu-5.3.5/t/unit/transport/test_memory.py     2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_memory.py     2024-03-05 
11:08:52.000000000 +0100
@@ -9,7 +9,7 @@
 
 class test_MemoryTransport:
 
-    def setup(self):
+    def setup_method(self):
         self.c = Connection(transport='memory')
         self.e = Exchange('test_transport_memory')
         self.q = Queue('test_transport_memory',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_mongodb.py 
new/kombu-5.3.6/t/unit/transport/test_mongodb.py
--- old/kombu-5.3.5/t/unit/transport/test_mongodb.py    2023-10-13 
19:12:35.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_mongodb.py    2024-03-05 
11:08:52.000000000 +0100
@@ -169,7 +169,7 @@
 
 class test_mongodb_channel(BaseMongoDBChannelCase):
 
-    def setup(self):
+    def setup_method(self):
         self.connection = _create_mock_connection()
         self.channel = self.connection.default_channel
 
@@ -421,7 +421,7 @@
 
 class test_mongodb_channel_ttl(BaseMongoDBChannelCase):
 
-    def setup(self):
+    def setup_method(self):
         self.connection = _create_mock_connection(
             transport_options={'ttl': True},
         )
@@ -563,7 +563,7 @@
 
 class test_mongodb_channel_calc_queue_size(BaseMongoDBChannelCase):
 
-    def setup(self):
+    def setup_method(self):
         self.connection = _create_mock_connection(
             transport_options={'calc_queue_size': False})
         self.channel = self.connection.default_channel
@@ -584,7 +584,7 @@
 
 
 class test_mongodb_transport(BaseMongoDBChannelCase):
-    def setup(self):
+    def setup_method(self):
         self.connection = _create_mock_connection()
 
     def test_driver_version(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_pyamqp.py 
new/kombu-5.3.6/t/unit/transport/test_pyamqp.py
--- old/kombu-5.3.5/t/unit/transport/test_pyamqp.py     2022-12-20 
17:10:39.000000000 +0100
+++ new/kombu-5.3.6/t/unit/transport/test_pyamqp.py     2024-03-09 
09:49:45.000000000 +0100
@@ -27,7 +27,7 @@
 
 class test_Channel:
 
-    def setup(self):
+    def setup_method(self):
 
         class Channel(pyamqp.Channel):
             wait_returns = []
@@ -78,10 +78,16 @@
         self.channel.basic_cancel('my-consumer-tag')
         assert 'my-consumer-tag' not in self.channel.no_ack_consumers
 
+    def test_consume_registers_cancel_callback(self):
+        on_cancel = Mock()
+        self.channel.wait_returns = ['my-consumer-tag']
+        self.channel.basic_consume('foo', on_cancel=on_cancel)
+        assert self.channel.cancel_callbacks['my-consumer-tag'] == on_cancel
+
 
 class test_Transport:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection('pyamqp://')
         self.transport = self.connection.transport
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_pyro.py 
new/kombu-5.3.6/t/unit/transport/test_pyro.py
--- old/kombu-5.3.5/t/unit/transport/test_pyro.py       2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_pyro.py       2024-03-05 
11:08:52.000000000 +0100
@@ -9,7 +9,7 @@
 
 class test_PyroTransport:
 
-    def setup(self):
+    def setup_method(self):
         self.c = Connection(transport='pyro', virtual_host="kombu.broker")
         self.e = Exchange('test_transport_pyro')
         self.q = Queue('test_transport_pyro',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_qpid.py 
new/kombu-5.3.6/t/unit/transport/test_qpid.py
--- old/kombu-5.3.5/t/unit/transport/test_qpid.py       2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_qpid.py       2024-03-05 
11:08:52.000000000 +0100
@@ -46,7 +46,7 @@
 @pytest.mark.skip(reason='Not supported in Python3')
 class test_QoS__init__:
 
-    def setup(self):
+    def setup_method(self):
         self.mock_session = Mock()
         self.qos = QoS(self.mock_session)
 
@@ -64,7 +64,7 @@
 @pytest.mark.skip(reason='Not supported in Python3')
 class test_QoS_can_consume:
 
-    def setup(self):
+    def setup_method(self):
         session = Mock()
         self.qos = QoS(session)
 
@@ -87,7 +87,7 @@
 @pytest.mark.skip(reason='Not supported in Python3')
 class test_QoS_can_consume_max_estimate:
 
-    def setup(self):
+    def setup_method(self):
         self.mock_session = Mock()
         self.qos = QoS(self.mock_session)
 
@@ -104,7 +104,7 @@
 @pytest.mark.skip(reason='Not supported in Python3')
 class test_QoS_ack:
 
-    def setup(self):
+    def setup_method(self):
         self.mock_session = Mock()
         self.qos = QoS(self.mock_session)
 
@@ -132,7 +132,7 @@
         self.mock_RELEASED = self.mock_qpid.messaging.RELEASED
         self.mock_REJECTED = self.mock_qpid.messaging.REJECTED
 
-    def setup(self):
+    def setup_method(self):
         self.mock_session = Mock()
         self.mock_message = Mock()
         self.qos = QoS(self.mock_session)
@@ -185,7 +185,7 @@
         m, m_delivery_tag = self.mock_message_factory()
         qos.append(m, m_delivery_tag)
 
-    def setup(self):
+    def setup_method(self):
         self.mock_session = Mock()
         self.qos_no_limit = QoS(self.mock_session)
         self.qos_limit_2 = QoS(self.mock_session, prefetch_count=2)
@@ -226,7 +226,7 @@
 class ConnectionTestBase:
 
     @patch(QPID_MODULE + '.qpid')
-    def setup(self, mock_qpid):
+    def setup_method(self, mock_qpid):
         self.connection_options = {
             'host': 'localhost',
             'port': 5672,
@@ -389,8 +389,8 @@
 @pytest.mark.skip(reason='Not supported in Python3')
 class test_Connection_close_channel(ConnectionTestBase):
 
-    def setup(self):
-        super().setup()
+    def setup_method(self):
+        super().setup_method()
         self.conn.channels = Mock()
 
     def test_connection_close_channel_removes_channel_from_channel_list(self):
@@ -425,7 +425,7 @@
 @pytest.mark.skip(reason='Not supported in Python3')
 class test_Channel_purge(ChannelTestBase):
 
-    def setup(self):
+    def setup_method(self):
         self.mock_queue = Mock()
 
     def test_gets_queue(self):
@@ -815,7 +815,7 @@
 class test_Channel:
 
     @patch(QPID_MODULE + '.qpidtoollibs')
-    def setup(self, mock_qpidtoollibs):
+    def setup_method(self, mock_qpidtoollibs):
         self.mock_connection = Mock()
         self.mock_qpid_connection = Mock()
         self.mock_qpid_session = Mock()
@@ -1690,7 +1690,7 @@
 class test_Transport_Qpid_callback_handlers_sync:
 
     @pytest.fixture(autouse=True)
-    def setup(self, patching, disable_runtime_dependency_check):
+    def setup_method(self, patching, disable_runtime_dependency_check):
         self.mock_os_write = patching(QPID_MODULE + '.os.write')
         self.transport = Transport(Mock())
 
@@ -1775,7 +1775,7 @@
 @pytest.mark.usefixtures('disable_runtime_dependency_check')
 class test_Transport:
 
-    def setup(self):
+    def setup_method(self):
         """Creates a mock_client to be used in testing."""
         self.mock_client = Mock()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_redis.py 
new/kombu-5.3.6/t/unit/transport/test_redis.py
--- old/kombu-5.3.5/t/unit/transport/test_redis.py      2024-01-12 
20:11:22.000000000 +0100
+++ new/kombu-5.3.6/t/unit/transport/test_redis.py      2024-03-05 
11:08:52.000000000 +0100
@@ -288,7 +288,7 @@
 
 class test_Channel:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = self.create_connection()
         self.channel = self.connection.default_channel
 
@@ -1179,12 +1179,12 @@
 
 class test_Redis:
 
-    def setup(self):
+    def setup_method(self):
         self.connection = Connection(transport=Transport)
         self.exchange = Exchange('test_Redis', type='direct')
         self.queue = Queue('test_Redis', self.exchange, 'test_Redis')
 
-    def teardown(self):
+    def teardown_method(self):
         self.connection.close()
 
     @pytest.mark.replace_module_value(redis.redis, 'VERSION', [3, 0, 0])
@@ -1326,7 +1326,7 @@
 
 class test_MultiChannelPoller:
 
-    def setup(self):
+    def setup_method(self):
         self.Poller = redis.MultiChannelPoller
 
     def test_on_poll_start(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/test_zookeeper.py 
new/kombu-5.3.6/t/unit/transport/test_zookeeper.py
--- old/kombu-5.3.5/t/unit/transport/test_zookeeper.py  2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/test_zookeeper.py  2024-03-05 
11:08:52.000000000 +0100
@@ -9,14 +9,14 @@
 
 
 class test_Channel:
-    def setup(self):
+    def setup_method(self):
         self.connection = self.create_connection()
         self.channel = self.connection.default_channel
 
     def create_connection(self, **kwargs):
         return Connection(transport=zookeeper.Transport, **kwargs)
 
-    def teardown(self):
+    def teardown_method(self):
         self.connection.close()
 
     def test_put_puts_bytes_to_queue(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/transport/virtual/test_base.py 
new/kombu-5.3.6/t/unit/transport/virtual/test_base.py
--- old/kombu-5.3.5/t/unit/transport/virtual/test_base.py       2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/virtual/test_base.py       2024-03-05 
11:08:52.000000000 +0100
@@ -36,10 +36,10 @@
 
 class test_QoS:
 
-    def setup(self):
+    def setup_method(self):
         self.q = virtual.QoS(client().channel(), prefetch_count=10)
 
-    def teardown(self):
+    def teardown_method(self):
         self.q._on_collect.cancel()
 
     def test_constructor(self):
@@ -174,10 +174,10 @@
 
 class test_Channel:
 
-    def setup(self):
+    def setup_method(self):
         self.channel = client().channel()
 
-    def teardown(self):
+    def teardown_method(self):
         if self.channel._qos is not None:
             self.channel._qos._on_collect.cancel()
 
@@ -555,7 +555,7 @@
 
 class test_Transport:
 
-    def setup(self):
+    def setup_method(self):
         self.transport = client().transport
 
     def test_state_is_transport_specific(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kombu-5.3.5/t/unit/transport/virtual/test_exchange.py 
new/kombu-5.3.6/t/unit/transport/virtual/test_exchange.py
--- old/kombu-5.3.5/t/unit/transport/virtual/test_exchange.py   2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/transport/virtual/test_exchange.py   2024-03-05 
11:08:52.000000000 +0100
@@ -12,7 +12,7 @@
 class ExchangeCase:
     type = None
 
-    def setup(self):
+    def setup_method(self):
         if self.type:
             self.e = self.type(Connection(transport=Transport).channel())
 
@@ -70,8 +70,8 @@
         ('stock.us.*', None, 'rBar'),
     ]
 
-    def setup(self):
-        super().setup()
+    def setup_method(self):
+        super().setup_method()
         self.table = [(rkey, self.e.key_to_pattern(rkey), queue)
                       for rkey, _, queue in self.table]
 
@@ -115,8 +115,8 @@
         ('#', None, 'rFoo'),
     ]
 
-    def setup(self):
-        super().setup()
+    def setup_method(self):
+        super().setup_method()
         self.table = [(rkey, self.e.key_to_pattern(rkey), queue)
                       for rkey, _, queue in self.table]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/utils/test_encoding.py 
new/kombu-5.3.6/t/unit/utils/test_encoding.py
--- old/kombu-5.3.5/t/unit/utils/test_encoding.py       2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/utils/test_encoding.py       2024-03-05 
11:08:52.000000000 +0100
@@ -60,7 +60,7 @@
 
 class test_safe_str:
 
-    def setup(self):
+    def setup_method(self):
         self._encoding = self.patching('sys.getfilesystemencoding')
         self._encoding.return_value = 'ascii'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/utils/test_functional.py 
new/kombu-5.3.6/t/unit/utils/test_functional.py
--- old/kombu-5.3.5/t/unit/utils/test_functional.py     2022-10-19 
12:47:33.000000000 +0200
+++ new/kombu-5.3.6/t/unit/utils/test_functional.py     2024-03-05 
11:08:52.000000000 +0100
@@ -168,7 +168,7 @@
     class Predicate(Exception):
         pass
 
-    def setup(self):
+    def setup_method(self):
         self.index = 0
 
     def myfun(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kombu-5.3.5/t/unit/utils/test_json.py 
new/kombu-5.3.6/t/unit/utils/test_json.py
--- old/kombu-5.3.5/t/unit/utils/test_json.py   2023-06-18 22:37:05.000000000 
+0200
+++ new/kombu-5.3.6/t/unit/utils/test_json.py   2024-03-27 13:05:07.000000000 
+0100
@@ -3,6 +3,7 @@
 import sys
 import uuid
 from collections import namedtuple
+from dataclasses import dataclass
 from datetime import datetime
 from decimal import Decimal
 
@@ -11,7 +12,8 @@
 from hypothesis import strategies as st
 
 from kombu.utils.encoding import str_to_bytes
-from kombu.utils.json import dumps, loads
+from kombu.utils.json import (_register_default_types, dumps, loads,
+                              register_type)
 
 if sys.version_info >= (3, 9):
     from zoneinfo import ZoneInfo
@@ -28,6 +30,10 @@
 
 
 class test_JSONEncoder:
+    @pytest.fixture(autouse=True)
+    def reset_registered_types(self):
+        _register_default_types()
+
     @pytest.mark.freeze_time("2015-10-21")
     def test_datetime(self):
         now = datetime.utcnow()
@@ -82,6 +88,41 @@
             assert loaded_value == {'u': id}
             assert loaded_value["u"].version == id.version
 
+    def test_register_type_overrides_defaults(self):
+        # This type is already registered by default, let's override it
+        register_type(uuid.UUID, "uuid", lambda o: "custom", lambda o: o)
+        value = uuid.uuid4()
+        loaded_value = loads(dumps({'u': value}))
+        assert loaded_value == {'u': "custom"}
+
+    def test_register_type_with_new_type(self):
+        # Guaranteed never before seen type
+        @dataclass()
+        class SomeType:
+            a: int
+
+        register_type(SomeType, "some_type", lambda o: "custom", lambda o: o)
+        value = SomeType(42)
+        loaded_value = loads(dumps({'u': value}))
+        assert loaded_value == {'u': "custom"}
+
+    def test_register_type_with_empty_marker(self):
+        register_type(
+            datetime,
+            None,
+            lambda o: o.isoformat(),
+            lambda o: "should never be used"
+        )
+        now = datetime.utcnow()
+        serialized_str = dumps({'now': now})
+        deserialized_value = loads(serialized_str)
+
+        assert "__type__" not in serialized_str
+        assert "__value__" not in serialized_str
+
+        # Check that there is no extra deserialization happening
+        assert deserialized_value == {'now': now.isoformat()}
+
     def test_default(self):
         with pytest.raises(TypeError):
             dumps({'o': object()})

Reply via email to