summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.pre-commit-config.yaml2
-rw-r--r--conftest.py2
-rw-r--r--docs/conf.py2
-rw-r--r--examples/complete_receive.py2
-rw-r--r--examples/complete_send.py2
-rw-r--r--examples/experimental/async_consume.py2
-rw-r--r--examples/hello_consumer.py2
-rw-r--r--examples/hello_publisher.py2
-rw-r--r--examples/memory_transport.py2
-rw-r--r--examples/rpc-tut6/rpc_client.py2
-rw-r--r--examples/rpc-tut6/rpc_server.py2
-rw-r--r--examples/simple_eventlet_receive.py2
-rw-r--r--examples/simple_eventlet_send.py2
-rw-r--r--examples/simple_receive.py2
-rw-r--r--examples/simple_send.py2
-rw-r--r--examples/simple_task_queue/client.py2
-rw-r--r--examples/simple_task_queue/queues.py2
-rw-r--r--examples/simple_task_queue/tasks.py3
-rw-r--r--examples/simple_task_queue/worker.py2
-rw-r--r--kombu/__init__.py6
-rw-r--r--kombu/abstract.py2
-rw-r--r--kombu/asynchronous/__init__.py2
-rw-r--r--kombu/asynchronous/aws/__init__.py8
-rw-r--r--kombu/asynchronous/aws/connection.py2
-rw-r--r--kombu/asynchronous/aws/ext.py2
-rw-r--r--kombu/asynchronous/aws/sqs/connection.py2
-rw-r--r--kombu/asynchronous/aws/sqs/ext.py2
-rw-r--r--kombu/asynchronous/aws/sqs/message.py2
-rw-r--r--kombu/asynchronous/aws/sqs/queue.py2
-rw-r--r--kombu/asynchronous/debug.py2
-rw-r--r--kombu/asynchronous/http/__init__.py8
-rw-r--r--kombu/asynchronous/http/base.py10
-rw-r--r--kombu/asynchronous/http/curl.py5
-rw-r--r--kombu/asynchronous/hub.py9
-rw-r--r--kombu/asynchronous/semaphore.py14
-rw-r--r--kombu/asynchronous/timer.py10
-rw-r--r--kombu/clocks.py2
-rw-r--r--kombu/common.py2
-rw-r--r--kombu/compat.py16
-rw-r--r--kombu/compression.py2
-rw-r--r--kombu/connection.py10
-rw-r--r--kombu/entity.py2
-rw-r--r--kombu/exceptions.py2
-rw-r--r--kombu/log.py2
-rw-r--r--kombu/matcher.py2
-rw-r--r--kombu/message.py2
-rw-r--r--kombu/messaging.py16
-rw-r--r--kombu/mixins.py2
-rw-r--r--kombu/pidbox.py2
-rw-r--r--kombu/pools.py2
-rw-r--r--kombu/resource.py4
-rw-r--r--kombu/serialization.py2
-rw-r--r--kombu/simple.py10
-rw-r--r--kombu/transport/SLMQ.py2
-rw-r--r--kombu/transport/SQS.py2
-rw-r--r--kombu/transport/__init__.py8
-rw-r--r--kombu/transport/azureservicebus.py22
-rw-r--r--kombu/transport/azurestoragequeues.py2
-rw-r--r--kombu/transport/base.py10
-rw-r--r--kombu/transport/consul.py2
-rw-r--r--kombu/transport/etcd.py2
-rw-r--r--kombu/transport/filesystem.py2
-rw-r--r--kombu/transport/librabbitmq.py2
-rw-r--r--kombu/transport/memory.py2
-rw-r--r--kombu/transport/mongodb.py2
-rw-r--r--kombu/transport/pyamqp.py2
-rw-r--r--kombu/transport/pyro.py2
-rw-r--r--kombu/transport/qpid.py2
-rw-r--r--kombu/transport/redis.py2
-rw-r--r--kombu/transport/sqlalchemy/__init__.py11
-rw-r--r--kombu/transport/sqlalchemy/models.py2
-rw-r--r--kombu/transport/virtual/__init__.py2
-rw-r--r--kombu/transport/virtual/base.py10
-rw-r--r--kombu/transport/virtual/exchange.py2
-rw-r--r--kombu/transport/zookeeper.py2
-rw-r--r--kombu/utils/__init__.py2
-rw-r--r--kombu/utils/amq_manager.py3
-rw-r--r--kombu/utils/collections.py3
-rw-r--r--kombu/utils/compat.py2
-rw-r--r--kombu/utils/debug.py2
-rw-r--r--kombu/utils/div.py2
-rw-r--r--kombu/utils/encoding.py2
-rw-r--r--kombu/utils/eventio.py2
-rw-r--r--kombu/utils/functional.py2
-rw-r--r--kombu/utils/imports.py2
-rw-r--r--kombu/utils/json.py2
-rw-r--r--kombu/utils/limits.py2
-rw-r--r--kombu/utils/objects.py2
-rw-r--r--kombu/utils/scheduling.py2
-rw-r--r--kombu/utils/text.py12
-rw-r--r--kombu/utils/time.py4
-rw-r--r--kombu/utils/url.py2
-rw-r--r--kombu/utils/uuid.py2
-rw-r--r--setup.cfg4
-rw-r--r--setup.py2
-rw-r--r--t/integration/__init__.py2
-rw-r--r--t/integration/common.py2
-rw-r--r--t/integration/test_py_amqp.py2
-rw-r--r--t/integration/test_redis.py2
-rw-r--r--t/mocks.py10
-rw-r--r--t/skip.py2
-rw-r--r--t/unit/asynchronous/aws/case.py2
-rw-r--r--t/unit/asynchronous/aws/sqs/test_connection.py2
-rw-r--r--t/unit/asynchronous/aws/sqs/test_queue.py2
-rw-r--r--t/unit/asynchronous/aws/test_aws.py2
-rw-r--r--t/unit/asynchronous/aws/test_connection.py2
-rw-r--r--t/unit/asynchronous/http/test_curl.py2
-rw-r--r--t/unit/asynchronous/http/test_http.py2
-rw-r--r--t/unit/asynchronous/test_hub.py2
-rw-r--r--t/unit/asynchronous/test_semaphore.py4
-rw-r--r--t/unit/asynchronous/test_timer.py2
-rw-r--r--t/unit/conftest.py2
-rw-r--r--t/unit/test_clocks.py2
-rw-r--r--t/unit/test_common.py10
-rw-r--r--t/unit/test_compat.py2
-rw-r--r--t/unit/test_compression.py2
-rw-r--r--t/unit/test_connection.py2
-rw-r--r--t/unit/test_entity.py2
-rw-r--r--t/unit/test_exceptions.py2
-rw-r--r--t/unit/test_log.py2
-rw-r--r--t/unit/test_matcher.py2
-rw-r--r--t/unit/test_message.py2
-rw-r--r--t/unit/test_messaging.py2
-rw-r--r--t/unit/test_mixins.py2
-rw-r--r--t/unit/test_pidbox.py2
-rw-r--r--t/unit/test_pools.py2
-rw-r--r--t/unit/test_serialization.py2
-rw-r--r--t/unit/test_simple.py2
-rw-r--r--t/unit/transport/test_SQS.py2
-rw-r--r--t/unit/transport/test_azureservicebus.py2
-rw-r--r--t/unit/transport/test_base.py2
-rw-r--r--t/unit/transport/test_consul.py2
-rw-r--r--t/unit/transport/test_etcd.py2
-rw-r--r--t/unit/transport/test_filesystem.py2
-rw-r--r--t/unit/transport/test_librabbitmq.py2
-rw-r--r--t/unit/transport/test_memory.py2
-rw-r--r--t/unit/transport/test_mongodb.py2
-rw-r--r--t/unit/transport/test_pyamqp.py2
-rw-r--r--t/unit/transport/test_pyro.py2
-rw-r--r--t/unit/transport/test_qpid.py2
-rw-r--r--t/unit/transport/test_redis.py10
-rw-r--r--t/unit/transport/test_sqlalchemy.py2
-rw-r--r--t/unit/transport/test_transport.py2
-rw-r--r--t/unit/transport/test_zookeeper.py2
-rw-r--r--t/unit/transport/virtual/test_base.py2
-rw-r--r--t/unit/transport/virtual/test_exchange.py2
-rw-r--r--t/unit/utils/test_amq_manager.py2
-rw-r--r--t/unit/utils/test_compat.py2
-rw-r--r--t/unit/utils/test_debug.py2
-rw-r--r--t/unit/utils/test_div.py2
-rw-r--r--t/unit/utils/test_encoding.py2
-rw-r--r--t/unit/utils/test_functional.py2
-rw-r--r--t/unit/utils/test_imports.py2
-rw-r--r--t/unit/utils/test_json.py2
-rw-r--r--t/unit/utils/test_objects.py2
-rw-r--r--t/unit/utils/test_scheduling.py2
-rw-r--r--t/unit/utils/test_time.py2
-rw-r--r--t/unit/utils/test_url.py2
-rw-r--r--t/unit/utils/test_utils.py2
-rw-r--r--t/unit/utils/test_uuid.py2
160 files changed, 416 insertions, 98 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a9a276d8..f667ad0f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,7 +3,7 @@ repos:
rev: v2.32.0
hooks:
- id: pyupgrade
- args: ["--py36-plus"]
+ args: ["--py37-plus"]
- repo: https://github.com/PyCQA/flake8
rev: 4.0.1
diff --git a/conftest.py b/conftest.py
index 3fc0a687..842d39a2 100644
--- a/conftest.py
+++ b/conftest.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pytest
diff --git a/docs/conf.py b/docs/conf.py
index 1f781486..0163fe39 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from sphinx_celery import conf
globals().update(conf.build_config(
diff --git a/examples/complete_receive.py b/examples/complete_receive.py
index 21903c59..1f1fb5e2 100644
--- a/examples/complete_receive.py
+++ b/examples/complete_receive.py
@@ -4,6 +4,8 @@ and exits.
"""
+from __future__ import annotations
+
from pprint import pformat
from kombu import Connection, Consumer, Exchange, Queue, eventloop
diff --git a/examples/complete_send.py b/examples/complete_send.py
index d4643e59..ea7ab65c 100644
--- a/examples/complete_send.py
+++ b/examples/complete_send.py
@@ -6,6 +6,8 @@ You can use `complete_receive.py` to receive the message sent.
"""
+from __future__ import annotations
+
from kombu import Connection, Exchange, Producer, Queue
#: By default messages sent to exchanges are persistent (delivery_mode=2),
diff --git a/examples/experimental/async_consume.py b/examples/experimental/async_consume.py
index 5f70b4ed..55126bda 100644
--- a/examples/experimental/async_consume.py
+++ b/examples/experimental/async_consume.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python
+from __future__ import annotations
+
from kombu import Connection, Consumer, Exchange, Producer, Queue
from kombu.asynchronous import Hub
diff --git a/examples/hello_consumer.py b/examples/hello_consumer.py
index 3a0d9f06..38b2b61d 100644
--- a/examples/hello_consumer.py
+++ b/examples/hello_consumer.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from kombu import Connection
with Connection('amqp://guest:guest@localhost:5672//') as conn:
diff --git a/examples/hello_publisher.py b/examples/hello_publisher.py
index 48342800..dfb2df8e 100644
--- a/examples/hello_publisher.py
+++ b/examples/hello_publisher.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import datetime
from kombu import Connection
diff --git a/examples/memory_transport.py b/examples/memory_transport.py
index 8d667b81..e25cc898 100644
--- a/examples/memory_transport.py
+++ b/examples/memory_transport.py
@@ -1,6 +1,8 @@
"""
Example that use memory transport for message produce.
"""
+from __future__ import annotations
+
import time
from kombu import Connection, Consumer, Exchange, Queue
diff --git a/examples/rpc-tut6/rpc_client.py b/examples/rpc-tut6/rpc_client.py
index 6b1d509b..a899bd5c 100644
--- a/examples/rpc-tut6/rpc_client.py
+++ b/examples/rpc-tut6/rpc_client.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python
+from __future__ import annotations
+
from kombu import Connection, Consumer, Producer, Queue, uuid
diff --git a/examples/rpc-tut6/rpc_server.py b/examples/rpc-tut6/rpc_server.py
index 761630ca..ce13ea83 100644
--- a/examples/rpc-tut6/rpc_server.py
+++ b/examples/rpc-tut6/rpc_server.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python
+from __future__ import annotations
+
from kombu import Connection, Queue
from kombu.mixins import ConsumerProducerMixin
diff --git a/examples/simple_eventlet_receive.py b/examples/simple_eventlet_receive.py
index 33f09d80..703203ad 100644
--- a/examples/simple_eventlet_receive.py
+++ b/examples/simple_eventlet_receive.py
@@ -7,6 +7,8 @@ message sent.
"""
+from __future__ import annotations
+
import eventlet
from kombu import Connection
diff --git a/examples/simple_eventlet_send.py b/examples/simple_eventlet_send.py
index 9a753e7a..ad0c1f2b 100644
--- a/examples/simple_eventlet_send.py
+++ b/examples/simple_eventlet_send.py
@@ -7,6 +7,8 @@ message sent.
"""
+from __future__ import annotations
+
import eventlet
from kombu import Connection
diff --git a/examples/simple_receive.py b/examples/simple_receive.py
index 90c2d0ae..c2512cca 100644
--- a/examples/simple_receive.py
+++ b/examples/simple_receive.py
@@ -3,6 +3,8 @@ Example receiving a message using the SimpleQueue interface.
"""
+from __future__ import annotations
+
from kombu import Connection
#: Create connection
diff --git a/examples/simple_send.py b/examples/simple_send.py
index d2eacea4..194fb810 100644
--- a/examples/simple_send.py
+++ b/examples/simple_send.py
@@ -7,6 +7,8 @@ message sent.
"""
+from __future__ import annotations
+
from kombu import Connection
#: Create connection
diff --git a/examples/simple_task_queue/client.py b/examples/simple_task_queue/client.py
index bc2d180f..aaa18f5c 100644
--- a/examples/simple_task_queue/client.py
+++ b/examples/simple_task_queue/client.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from kombu.pools import producers
from .queues import task_exchange
diff --git a/examples/simple_task_queue/queues.py b/examples/simple_task_queue/queues.py
index 602c2b0e..a545b4c2 100644
--- a/examples/simple_task_queue/queues.py
+++ b/examples/simple_task_queue/queues.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from kombu import Exchange, Queue
task_exchange = Exchange('tasks', type='direct')
diff --git a/examples/simple_task_queue/tasks.py b/examples/simple_task_queue/tasks.py
index 2810f7a8..02edda07 100644
--- a/examples/simple_task_queue/tasks.py
+++ b/examples/simple_task_queue/tasks.py
@@ -1,2 +1,5 @@
+from __future__ import annotations
+
+
def hello_task(who='world'):
print(f'Hello {who}')
diff --git a/examples/simple_task_queue/worker.py b/examples/simple_task_queue/worker.py
index 66ad9c30..4d16e309 100644
--- a/examples/simple_task_queue/worker.py
+++ b/examples/simple_task_queue/worker.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from kombu.log import get_logger
from kombu.mixins import ConsumerMixin
from kombu.utils.functional import reprcall
diff --git a/kombu/__init__.py b/kombu/__init__.py
index d3ba15ea..830e6dda 100644
--- a/kombu/__init__.py
+++ b/kombu/__init__.py
@@ -1,10 +1,12 @@
"""Messaging library for Python."""
+from __future__ import annotations
+
import os
import re
import sys
from collections import namedtuple
-from typing import Any, List, cast
+from typing import Any, cast
__version__ = '5.2.4'
__author__ = 'Ask Solem'
@@ -78,7 +80,7 @@ class module(ModuleType):
return getattr(module, name)
return ModuleType.__getattribute__(self, name)
- def __dir__(self) -> List[str]:
+ def __dir__(self) -> list[str]:
result = list(new_module.__all__)
result.extend(('__file__', '__path__', '__doc__', '__all__',
'__docformat__', '__name__', '__path__', 'VERSION',
diff --git a/kombu/abstract.py b/kombu/abstract.py
index 38cff010..3e3483dc 100644
--- a/kombu/abstract.py
+++ b/kombu/abstract.py
@@ -1,5 +1,7 @@
"""Object utilities."""
+from __future__ import annotations
+
from copy import copy
from .connection import maybe_channel
diff --git a/kombu/asynchronous/__init__.py b/kombu/asynchronous/__init__.py
index fb264aa5..53060753 100644
--- a/kombu/asynchronous/__init__.py
+++ b/kombu/asynchronous/__init__.py
@@ -1,5 +1,7 @@
"""Event loop."""
+from __future__ import annotations
+
from kombu.utils.eventio import ERR, READ, WRITE
from .hub import Hub, get_event_loop, set_event_loop
diff --git a/kombu/asynchronous/aws/__init__.py b/kombu/asynchronous/aws/__init__.py
index a105cca2..cbeb050f 100644
--- a/kombu/asynchronous/aws/__init__.py
+++ b/kombu/asynchronous/aws/__init__.py
@@ -1,11 +1,13 @@
-from typing import Any, Optional
+from __future__ import annotations
+
+from typing import Any
from kombu.asynchronous.aws.sqs.connection import AsyncSQSConnection
def connect_sqs(
- aws_access_key_id: Optional[str] = None,
- aws_secret_access_key: Optional[str] = None,
+ aws_access_key_id: str | None = None,
+ aws_secret_access_key: str | None = None,
**kwargs: Any
) -> AsyncSQSConnection:
"""Return async connection to Amazon SQS."""
diff --git a/kombu/asynchronous/aws/connection.py b/kombu/asynchronous/aws/connection.py
index f3926388..887ab40c 100644
--- a/kombu/asynchronous/aws/connection.py
+++ b/kombu/asynchronous/aws/connection.py
@@ -1,5 +1,7 @@
"""Amazon AWS Connection."""
+from __future__ import annotations
+
from email import message_from_bytes
from email.mime.message import MIMEMessage
diff --git a/kombu/asynchronous/aws/ext.py b/kombu/asynchronous/aws/ext.py
index 2dedc812..1fa4a57e 100644
--- a/kombu/asynchronous/aws/ext.py
+++ b/kombu/asynchronous/aws/ext.py
@@ -1,5 +1,7 @@
"""Amazon boto3 interface."""
+from __future__ import annotations
+
try:
import boto3
from botocore import exceptions
diff --git a/kombu/asynchronous/aws/sqs/connection.py b/kombu/asynchronous/aws/sqs/connection.py
index 9db2523b..20b56344 100644
--- a/kombu/asynchronous/aws/sqs/connection.py
+++ b/kombu/asynchronous/aws/sqs/connection.py
@@ -1,5 +1,7 @@
"""Amazon SQS Connection."""
+from __future__ import annotations
+
from vine import transform
from kombu.asynchronous.aws.connection import AsyncAWSQueryConnection
diff --git a/kombu/asynchronous/aws/sqs/ext.py b/kombu/asynchronous/aws/sqs/ext.py
index f6630936..72268b5d 100644
--- a/kombu/asynchronous/aws/sqs/ext.py
+++ b/kombu/asynchronous/aws/sqs/ext.py
@@ -1,6 +1,8 @@
"""Amazon SQS boto3 interface."""
+from __future__ import annotations
+
try:
import boto3
except ImportError:
diff --git a/kombu/asynchronous/aws/sqs/message.py b/kombu/asynchronous/aws/sqs/message.py
index 9425ff2d..52727bb7 100644
--- a/kombu/asynchronous/aws/sqs/message.py
+++ b/kombu/asynchronous/aws/sqs/message.py
@@ -1,5 +1,7 @@
"""Amazon SQS message implementation."""
+from __future__ import annotations
+
import base64
from kombu.message import Message
diff --git a/kombu/asynchronous/aws/sqs/queue.py b/kombu/asynchronous/aws/sqs/queue.py
index facd9588..7ca78f75 100644
--- a/kombu/asynchronous/aws/sqs/queue.py
+++ b/kombu/asynchronous/aws/sqs/queue.py
@@ -1,5 +1,7 @@
"""Amazon SQS queue implementation."""
+from __future__ import annotations
+
from vine import transform
from .message import AsyncMessage
diff --git a/kombu/asynchronous/debug.py b/kombu/asynchronous/debug.py
index 4fabb452..7c1e45c7 100644
--- a/kombu/asynchronous/debug.py
+++ b/kombu/asynchronous/debug.py
@@ -1,5 +1,7 @@
"""Event-loop debugging tools."""
+from __future__ import annotations
+
from kombu.utils.eventio import ERR, READ, WRITE
from kombu.utils.functional import reprcall
diff --git a/kombu/asynchronous/http/__init__.py b/kombu/asynchronous/http/__init__.py
index 0dc4247d..67d8b219 100644
--- a/kombu/asynchronous/http/__init__.py
+++ b/kombu/asynchronous/http/__init__.py
@@ -1,4 +1,6 @@
-from typing import TYPE_CHECKING, Optional
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
from kombu.asynchronous import get_event_loop
from kombu.asynchronous.http.base import Headers, Request, Response
@@ -10,13 +12,13 @@ if TYPE_CHECKING:
__all__ = ('Client', 'Headers', 'Response', 'Request')
-def Client(hub: Optional[Hub] = None, **kwargs: int) -> "CurlClient":
+def Client(hub: Hub | None = None, **kwargs: int) -> CurlClient:
"""Create new HTTP client."""
from .curl import CurlClient
return CurlClient(hub, **kwargs)
-def get_client(hub: Optional[Hub] = None, **kwargs: int) -> "CurlClient":
+def get_client(hub: Hub | None = None, **kwargs: int) -> CurlClient:
"""Get or create HTTP client bound to the current event loop."""
hub = hub or get_event_loop()
try:
diff --git a/kombu/asynchronous/http/base.py b/kombu/asynchronous/http/base.py
index 5feb8f3a..89be531f 100644
--- a/kombu/asynchronous/http/base.py
+++ b/kombu/asynchronous/http/base.py
@@ -1,8 +1,10 @@
"""Base async HTTP client implementation."""
+from __future__ import annotations
+
import sys
from http.client import responses
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from vine import Thenable, maybe_promise, promise
@@ -259,8 +261,8 @@ class BaseClient:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.close()
diff --git a/kombu/asynchronous/http/curl.py b/kombu/asynchronous/http/curl.py
index 8c601956..11f20c91 100644
--- a/kombu/asynchronous/http/curl.py
+++ b/kombu/asynchronous/http/curl.py
@@ -1,10 +1,11 @@
"""HTTP Client using pyCurl."""
+from __future__ import annotations
+
from collections import deque
from functools import partial
from io import BytesIO
from time import time
-from typing import Optional
from kombu.asynchronous.hub import READ, WRITE, Hub, get_event_loop
from kombu.exceptions import HttpError
@@ -37,7 +38,7 @@ class CurlClient(BaseClient):
Curl = Curl
- def __init__(self, hub: Optional[Hub] = None, max_clients: int = 10):
+ def __init__(self, hub: Hub | None = None, max_clients: int = 10):
if pycurl is None:
raise ImportError('The curl client requires the pycurl library.')
hub = hub or get_event_loop()
diff --git a/kombu/asynchronous/hub.py b/kombu/asynchronous/hub.py
index 73c4a7ff..14d25b93 100644
--- a/kombu/asynchronous/hub.py
+++ b/kombu/asynchronous/hub.py
@@ -1,12 +1,13 @@
"""Event loop implementation."""
+from __future__ import annotations
+
import errno
import threading
from contextlib import contextmanager
from queue import Empty
from time import sleep
from types import GeneratorType as generator
-from typing import Optional
from vine import Thenable, promise
@@ -20,7 +21,7 @@ from .timer import Timer
__all__ = ('Hub', 'get_event_loop', 'set_event_loop')
logger = get_logger(__name__)
-_current_loop: Optional["Hub"] = None
+_current_loop: Hub | None = None
W_UNKNOWN_EVENT = """\
Received unknown event %r for fd %r, please contact support!\
@@ -40,12 +41,12 @@ def _dummy_context(*args, **kwargs):
yield
-def get_event_loop() -> Optional["Hub"]:
+def get_event_loop() -> Hub | None:
"""Get current event loop object."""
return _current_loop
-def set_event_loop(loop: Optional["Hub"]) -> Optional["Hub"]:
+def set_event_loop(loop: Hub | None) -> Hub | None:
"""Set the current event loop object."""
global _current_loop
_current_loop = loop
diff --git a/kombu/asynchronous/semaphore.py b/kombu/asynchronous/semaphore.py
index 843fe982..07fb8a09 100644
--- a/kombu/asynchronous/semaphore.py
+++ b/kombu/asynchronous/semaphore.py
@@ -1,7 +1,9 @@
"""Semaphores and concurrency primitives."""
+from __future__ import annotations
+
import sys
from collections import deque
-from typing import TYPE_CHECKING, Callable, Deque, Optional, Tuple, Type
+from typing import TYPE_CHECKING, Callable, Deque
if sys.version_info < (3, 10):
from typing_extensions import ParamSpec
@@ -42,7 +44,7 @@ class LaxBoundedSemaphore:
def __init__(self, value: int) -> None:
self.initial_value = self.value = value
- self._waiting: Deque[Tuple] = deque()
+ self._waiting: Deque[tuple] = deque()
self._add_waiter = self._waiting.append
self._pop_waiter = self._waiting.popleft
@@ -111,13 +113,13 @@ class LaxBoundedSemaphore:
class DummyLock:
"""Pretending to be a lock."""
- def __enter__(self) -> 'DummyLock':
+ def __enter__(self) -> DummyLock:
return self
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
pass
diff --git a/kombu/asynchronous/timer.py b/kombu/asynchronous/timer.py
index 2ee26c61..f6be1346 100644
--- a/kombu/asynchronous/timer.py
+++ b/kombu/asynchronous/timer.py
@@ -1,5 +1,7 @@
"""Timer scheduling Python callbacks."""
+from __future__ import annotations
+
import heapq
import sys
from collections import namedtuple
@@ -7,7 +9,7 @@ from datetime import datetime
from functools import total_ordering
from time import monotonic
from time import time as _time
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from weakref import proxy as weakrefproxy
from vine.utils import wraps
@@ -107,9 +109,9 @@ class Timer:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.stop()
diff --git a/kombu/clocks.py b/kombu/clocks.py
index 3c152720..0affdd3c 100644
--- a/kombu/clocks.py
+++ b/kombu/clocks.py
@@ -1,5 +1,7 @@
"""Logical Clocks and Synchronization."""
+from __future__ import annotations
+
from itertools import islice
from operator import itemgetter
from threading import Lock
diff --git a/kombu/common.py b/kombu/common.py
index 08bc1aff..c7b2d50a 100644
--- a/kombu/common.py
+++ b/kombu/common.py
@@ -1,5 +1,7 @@
"""Common Utilities."""
+from __future__ import annotations
+
import os
import socket
import threading
diff --git a/kombu/compat.py b/kombu/compat.py
index df37c3b1..d90aec75 100644
--- a/kombu/compat.py
+++ b/kombu/compat.py
@@ -3,8 +3,10 @@
See https://pypi.org/project/carrot/ for documentation.
"""
+from __future__ import annotations
+
from itertools import count
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from . import messaging
from .entity import Exchange, Queue
@@ -71,9 +73,9 @@ class Publisher(messaging.Producer):
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.close()
@@ -138,9 +140,9 @@ class Consumer(messaging.Consumer):
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.close()
diff --git a/kombu/compression.py b/kombu/compression.py
index d9438539..f98c971b 100644
--- a/kombu/compression.py
+++ b/kombu/compression.py
@@ -1,5 +1,7 @@
"""Compression utilities."""
+from __future__ import annotations
+
import zlib
from kombu.utils.encoding import ensure_bytes
diff --git a/kombu/connection.py b/kombu/connection.py
index 7cdef505..8246db97 100644
--- a/kombu/connection.py
+++ b/kombu/connection.py
@@ -1,11 +1,13 @@
"""Client (Connection)."""
+from __future__ import annotations
+
import os
import socket
from contextlib import contextmanager
from itertools import count, cycle
from operator import itemgetter
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
try:
from ssl import CERT_NONE
@@ -835,9 +837,9 @@ class Connection:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.release()
diff --git a/kombu/entity.py b/kombu/entity.py
index a89fabb9..2329e748 100644
--- a/kombu/entity.py
+++ b/kombu/entity.py
@@ -1,5 +1,7 @@
"""Exchange and Queue declarations."""
+from __future__ import annotations
+
import numbers
from .abstract import MaybeChannelBound, Object
diff --git a/kombu/exceptions.py b/kombu/exceptions.py
index f2501437..fed47817 100644
--- a/kombu/exceptions.py
+++ b/kombu/exceptions.py
@@ -1,5 +1,7 @@
"""Exceptions."""
+from __future__ import annotations
+
from socket import timeout as TimeoutError
from amqp import ChannelError, ConnectionError, ResourceError
diff --git a/kombu/log.py b/kombu/log.py
index de77e7f3..ed8d0a50 100644
--- a/kombu/log.py
+++ b/kombu/log.py
@@ -1,5 +1,7 @@
"""Logging Utilities."""
+from __future__ import annotations
+
import logging
import numbers
import os
diff --git a/kombu/matcher.py b/kombu/matcher.py
index 7dcab8cd..583fdc4d 100644
--- a/kombu/matcher.py
+++ b/kombu/matcher.py
@@ -1,5 +1,7 @@
"""Pattern matching registry."""
+from __future__ import annotations
+
from fnmatch import fnmatch
from re import match as rematch
diff --git a/kombu/message.py b/kombu/message.py
index bcc90d1a..f2af1686 100644
--- a/kombu/message.py
+++ b/kombu/message.py
@@ -1,5 +1,7 @@
"""Message class."""
+from __future__ import annotations
+
import sys
from .compression import decompress
diff --git a/kombu/messaging.py b/kombu/messaging.py
index ebba43ee..2b600224 100644
--- a/kombu/messaging.py
+++ b/kombu/messaging.py
@@ -1,7 +1,9 @@
"""Sending and receiving messages."""
+from __future__ import annotations
+
from itertools import count
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from .common import maybe_declare
from .compression import compress
@@ -242,9 +244,9 @@ class Producer:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.release()
@@ -446,9 +448,9 @@ class Consumer:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
if self.channel and self.channel.connection:
conn_errors = self.channel.connection.client.connection_errors
diff --git a/kombu/mixins.py b/kombu/mixins.py
index b87e4b92..f1b3c1c9 100644
--- a/kombu/mixins.py
+++ b/kombu/mixins.py
@@ -1,5 +1,7 @@
"""Mixins."""
+from __future__ import annotations
+
import socket
from contextlib import contextmanager
from functools import partial
diff --git a/kombu/pidbox.py b/kombu/pidbox.py
index 7649736a..ee639b3c 100644
--- a/kombu/pidbox.py
+++ b/kombu/pidbox.py
@@ -1,5 +1,7 @@
"""Generic process mailbox."""
+from __future__ import annotations
+
import socket
import warnings
from collections import defaultdict, deque
diff --git a/kombu/pools.py b/kombu/pools.py
index 373bc06c..106be183 100644
--- a/kombu/pools.py
+++ b/kombu/pools.py
@@ -1,5 +1,7 @@
"""Public resource pools."""
+from __future__ import annotations
+
import os
from itertools import chain
diff --git a/kombu/resource.py b/kombu/resource.py
index 004eb7a9..53ba1145 100644
--- a/kombu/resource.py
+++ b/kombu/resource.py
@@ -1,5 +1,7 @@
"""Generic resource pool implementation."""
+from __future__ import annotations
+
import os
from collections import deque
from queue import Empty
@@ -199,7 +201,7 @@ class Resource:
self,
exc_type: type,
exc_val: Exception,
- exc_tb: 'TracebackType'
+ exc_tb: TracebackType
) -> None:
pass
diff --git a/kombu/serialization.py b/kombu/serialization.py
index 58c28717..f807b2bd 100644
--- a/kombu/serialization.py
+++ b/kombu/serialization.py
@@ -1,5 +1,7 @@
"""Serialization utilities."""
+from __future__ import annotations
+
import codecs
import os
import pickle
diff --git a/kombu/simple.py b/kombu/simple.py
index 5925ceec..a33e5f9e 100644
--- a/kombu/simple.py
+++ b/kombu/simple.py
@@ -1,10 +1,12 @@
"""Simple messaging interface."""
+from __future__ import annotations
+
import socket
from collections import deque
from queue import Empty
from time import monotonic
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from . import entity, messaging
from .connection import maybe_channel
@@ -24,9 +26,9 @@ class SimpleBase:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.close()
diff --git a/kombu/transport/SLMQ.py b/kombu/transport/SLMQ.py
index 750f67bd..50efca72 100644
--- a/kombu/transport/SLMQ.py
+++ b/kombu/transport/SLMQ.py
@@ -18,6 +18,8 @@ Transport Options
*Unreviewed*
"""
+from __future__ import annotations
+
import os
import socket
import string
diff --git a/kombu/transport/SQS.py b/kombu/transport/SQS.py
index d5e328ea..fa953e8c 100644
--- a/kombu/transport/SQS.py
+++ b/kombu/transport/SQS.py
@@ -122,6 +122,8 @@ Features
""" # noqa: E501
+from __future__ import annotations
+
import base64
import socket
import string
diff --git a/kombu/transport/__init__.py b/kombu/transport/__init__.py
index f51b5bbc..e5631b48 100644
--- a/kombu/transport/__init__.py
+++ b/kombu/transport/__init__.py
@@ -1,12 +1,12 @@
"""Built-in transports."""
-from typing import Optional
+from __future__ import annotations
from kombu.utils.compat import _detect_environment
from kombu.utils.imports import symbol_by_name
-def supports_librabbitmq() -> Optional[bool]:
+def supports_librabbitmq() -> bool | None:
"""Return true if :pypi:`librabbitmq` can be used."""
if _detect_environment() == 'default':
try:
@@ -47,7 +47,7 @@ TRANSPORT_ALIASES = {
_transport_cache = {}
-def resolve_transport(transport: Optional[str] = None) -> Optional[str]:
+def resolve_transport(transport: str | None = None) -> str | None:
"""Get transport by name.
Arguments:
@@ -74,7 +74,7 @@ def resolve_transport(transport: Optional[str] = None) -> Optional[str]:
return transport
-def get_transport_cls(transport: Optional[str] = None) -> Optional[str]:
+def get_transport_cls(transport: str | None = None) -> str | None:
"""Get transport class by name.
The transport string is the full path to a transport class, e.g.::
diff --git a/kombu/transport/azureservicebus.py b/kombu/transport/azureservicebus.py
index 83237424..3c6c3d36 100644
--- a/kombu/transport/azureservicebus.py
+++ b/kombu/transport/azureservicebus.py
@@ -53,9 +53,11 @@ Transport Options
* ``retry_backoff_max`` - Azure SDK retry total time. Default ``120``
"""
+from __future__ import annotations
+
import string
from queue import Empty
-from typing import Any, Dict, Optional, Set, Tuple, Union
+from typing import Any, Dict, Set
import azure.core.exceptions
import azure.servicebus.exceptions
@@ -83,8 +85,8 @@ class SendReceive:
"""Container for Sender and Receiver."""
def __init__(self,
- receiver: Optional[ServiceBusReceiver] = None,
- sender: Optional[ServiceBusSender] = None):
+ receiver: ServiceBusReceiver | None = None,
+ sender: ServiceBusSender | None = None):
self.receiver = receiver # type: ServiceBusReceiver
self.sender = sender # type: ServiceBusSender
@@ -160,8 +162,8 @@ class Channel(virtual.Channel):
def _add_queue_to_cache(
self, name: str,
- receiver: Optional[ServiceBusReceiver] = None,
- sender: Optional[ServiceBusSender] = None
+ receiver: ServiceBusReceiver | None = None,
+ sender: ServiceBusSender | None = None
) -> SendReceive:
if name in self._queue_cache:
obj = self._queue_cache[name]
@@ -183,7 +185,7 @@ class Channel(virtual.Channel):
def _get_asb_receiver(
self, queue: str,
recv_mode: ServiceBusReceiveMode = ServiceBusReceiveMode.PEEK_LOCK,
- queue_cache_key: Optional[str] = None) -> SendReceive:
+ queue_cache_key: str | None = None) -> SendReceive:
cache_key = queue_cache_key or queue
queue_obj = self._queue_cache.get(cache_key, None)
if queue_obj is None or queue_obj.receiver is None:
@@ -194,7 +196,7 @@ class Channel(virtual.Channel):
return queue_obj
def entity_name(
- self, name: str, table: Optional[Dict[int, int]] = None) -> str:
+ self, name: str, table: dict[int, int] | None = None) -> str:
"""Format AMQP queue name into a valid ServiceBus queue name."""
return str(safe_str(name)).translate(table or CHARS_REPLACE_TABLE)
@@ -242,8 +244,8 @@ class Channel(virtual.Channel):
def _get(
self, queue: str,
- timeout: Optional[Union[float, int]] = None
- ) -> Dict[str, Any]:
+ timeout: float | int | None = None
+ ) -> dict[str, Any]:
"""Try to retrieve a single message off ``queue``."""
# If we're not ack'ing for this queue, just change receive_mode
recv_mode = ServiceBusReceiveMode.RECEIVE_AND_DELETE \
@@ -412,7 +414,7 @@ class Transport(virtual.Transport):
can_parse_url = True
@staticmethod
- def parse_uri(uri: str) -> Tuple[str, str, str]:
+ def parse_uri(uri: str) -> tuple[str, str, str]:
# URL like:
# azureservicebus://{SAS policy name}:{SAS key}@{ServiceBus Namespace}
# urllib parse does not work as the sas key could contain a slash
diff --git a/kombu/transport/azurestoragequeues.py b/kombu/transport/azurestoragequeues.py
index e83a20d3..ed651d9c 100644
--- a/kombu/transport/azurestoragequeues.py
+++ b/kombu/transport/azurestoragequeues.py
@@ -30,6 +30,8 @@ Transport Options
* ``queue_name_prefix``
"""
+from __future__ import annotations
+
import string
from queue import Empty
diff --git a/kombu/transport/base.py b/kombu/transport/base.py
index 62a84fda..ec4c0aca 100644
--- a/kombu/transport/base.py
+++ b/kombu/transport/base.py
@@ -2,9 +2,11 @@
# flake8: noqa
+from __future__ import annotations
+
import errno
import socket
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from amqp.exceptions import RecoverableConnectionError
@@ -106,9 +108,9 @@ class StdChannel:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.close()
diff --git a/kombu/transport/consul.py b/kombu/transport/consul.py
index 4369b1f8..7ace52f6 100644
--- a/kombu/transport/consul.py
+++ b/kombu/transport/consul.py
@@ -27,6 +27,8 @@ Connection string has the following format:
"""
+from __future__ import annotations
+
import socket
import uuid
from collections import defaultdict
diff --git a/kombu/transport/etcd.py b/kombu/transport/etcd.py
index ba9e4150..2ab85841 100644
--- a/kombu/transport/etcd.py
+++ b/kombu/transport/etcd.py
@@ -24,6 +24,8 @@ Connection string has the following format:
"""
+from __future__ import annotations
+
import os
import socket
from collections import defaultdict
diff --git a/kombu/transport/filesystem.py b/kombu/transport/filesystem.py
index d29d06b8..92d8c4e4 100644
--- a/kombu/transport/filesystem.py
+++ b/kombu/transport/filesystem.py
@@ -89,6 +89,8 @@ Transport Options
* ``control_folder`` - directory where are exchange-queue table stored.
"""
+from __future__ import annotations
+
import os
import shutil
import tempfile
diff --git a/kombu/transport/librabbitmq.py b/kombu/transport/librabbitmq.py
index dec50ccf..37015b18 100644
--- a/kombu/transport/librabbitmq.py
+++ b/kombu/transport/librabbitmq.py
@@ -3,6 +3,8 @@
.. _`librabbitmq`: https://pypi.org/project/librabbitmq/
"""
+from __future__ import annotations
+
import os
import socket
import warnings
diff --git a/kombu/transport/memory.py b/kombu/transport/memory.py
index 3073d1cf..9bfaff8d 100644
--- a/kombu/transport/memory.py
+++ b/kombu/transport/memory.py
@@ -22,6 +22,8 @@ Connection string is in the following format:
"""
+from __future__ import annotations
+
from collections import defaultdict
from queue import Queue
diff --git a/kombu/transport/mongodb.py b/kombu/transport/mongodb.py
index db758c18..8285b70f 100644
--- a/kombu/transport/mongodb.py
+++ b/kombu/transport/mongodb.py
@@ -33,6 +33,8 @@ Transport Options
* ``calc_queue_size``,
"""
+from __future__ import annotations
+
import datetime
from queue import Empty
diff --git a/kombu/transport/pyamqp.py b/kombu/transport/pyamqp.py
index f230f911..c8fd3c86 100644
--- a/kombu/transport/pyamqp.py
+++ b/kombu/transport/pyamqp.py
@@ -68,6 +68,8 @@ hostname from broker URL. This is usefull when failover is used to fill
"""
+from __future__ import annotations
+
import amqp
from kombu.utils.amq_manager import get_manager
diff --git a/kombu/transport/pyro.py b/kombu/transport/pyro.py
index 833d9792..7b27cb61 100644
--- a/kombu/transport/pyro.py
+++ b/kombu/transport/pyro.py
@@ -32,6 +32,8 @@ Transport Options
"""
+from __future__ import annotations
+
import sys
from queue import Empty, Queue
diff --git a/kombu/transport/qpid.py b/kombu/transport/qpid.py
index 2b2d1b18..cfd864d8 100644
--- a/kombu/transport/qpid.py
+++ b/kombu/transport/qpid.py
@@ -86,6 +86,8 @@ Celery, this can be accomplished by setting the
*BROKER_TRANSPORT_OPTIONS* Celery option.
"""
+from __future__ import annotations
+
import os
import select
import socket
diff --git a/kombu/transport/redis.py b/kombu/transport/redis.py
index cc861995..b5cca5e5 100644
--- a/kombu/transport/redis.py
+++ b/kombu/transport/redis.py
@@ -51,6 +51,8 @@ Transport Options
* ``priority_steps``
"""
+from __future__ import annotations
+
import functools
import numbers
import socket
diff --git a/kombu/transport/sqlalchemy/__init__.py b/kombu/transport/sqlalchemy/__init__.py
index 91f87a86..2b779485 100644
--- a/kombu/transport/sqlalchemy/__init__.py
+++ b/kombu/transport/sqlalchemy/__init__.py
@@ -50,9 +50,7 @@ Transport Options
Moreover parameters of :func:`sqlalchemy.create_engine()` function can be passed as transport options.
"""
-# SQLAlchemy overrides != False to have special meaning and pep8 complains
-# flake8: noqa
-
+from __future__ import annotations
import threading
from json import dumps, loads
@@ -71,6 +69,13 @@ from .models import ModelBase
from .models import Queue as QueueBase
from .models import class_registry, metadata
+# SQLAlchemy overrides != False to have special meaning and pep8 complains
+# flake8: noqa
+
+
+
+
+
VERSION = (1, 4, 1)
__version__ = '.'.join(map(str, VERSION))
diff --git a/kombu/transport/sqlalchemy/models.py b/kombu/transport/sqlalchemy/models.py
index 45863852..be3fcfa0 100644
--- a/kombu/transport/sqlalchemy/models.py
+++ b/kombu/transport/sqlalchemy/models.py
@@ -1,5 +1,7 @@
"""Kombu transport using SQLAlchemy as the message store."""
+from __future__ import annotations
+
import datetime
from sqlalchemy import (Boolean, Column, DateTime, ForeignKey, Index, Integer,
diff --git a/kombu/transport/virtual/__init__.py b/kombu/transport/virtual/__init__.py
index 7ab11772..54e84665 100644
--- a/kombu/transport/virtual/__init__.py
+++ b/kombu/transport/virtual/__init__.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from .base import (AbstractChannel, Base64, BrokerState, Channel, Empty,
Management, Message, NotEquivalentError, QoS, Transport,
UndeliverableWarning, binding_key_t, queue_binding_t)
diff --git a/kombu/transport/virtual/base.py b/kombu/transport/virtual/base.py
index 6aef17da..552ebec7 100644
--- a/kombu/transport/virtual/base.py
+++ b/kombu/transport/virtual/base.py
@@ -3,6 +3,8 @@
Emulates the AMQ API for non-AMQ transports.
"""
+from __future__ import annotations
+
import base64
import socket
import sys
@@ -13,7 +15,7 @@ from itertools import count
from multiprocessing.util import Finalize
from queue import Empty
from time import monotonic, sleep
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from amqp.protocol import queue_declare_ok_t
@@ -806,9 +808,9 @@ class Channel(AbstractChannel, base.StdChannel):
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.close()
diff --git a/kombu/transport/virtual/exchange.py b/kombu/transport/virtual/exchange.py
index c6b6161c..b70544cd 100644
--- a/kombu/transport/virtual/exchange.py
+++ b/kombu/transport/virtual/exchange.py
@@ -4,6 +4,8 @@ Implementations of the standard exchanges defined
by the AMQ protocol (excluding the `headers` exchange).
"""
+from __future__ import annotations
+
import re
from kombu.utils.text import escape_regex
diff --git a/kombu/transport/zookeeper.py b/kombu/transport/zookeeper.py
index 1a2ab63c..c72ce2f5 100644
--- a/kombu/transport/zookeeper.py
+++ b/kombu/transport/zookeeper.py
@@ -42,6 +42,8 @@ Transport Options
"""
+from __future__ import annotations
+
import os
import socket
from queue import Empty
diff --git a/kombu/utils/__init__.py b/kombu/utils/__init__.py
index 304e2dfa..94bb3cdf 100644
--- a/kombu/utils/__init__.py
+++ b/kombu/utils/__init__.py
@@ -1,5 +1,7 @@
"""DEPRECATED - Import from modules below."""
+from __future__ import annotations
+
from .collections import EqualityDict
from .compat import fileno, maybe_fileno, nested, register_after_fork
from .div import emergency_dump_state
diff --git a/kombu/utils/amq_manager.py b/kombu/utils/amq_manager.py
index 7491bb25..f3e429fd 100644
--- a/kombu/utils/amq_manager.py
+++ b/kombu/utils/amq_manager.py
@@ -1,6 +1,9 @@
"""AMQP Management API utilities."""
+from __future__ import annotations
+
+
def get_manager(client, hostname=None, port=None, userid=None,
password=None):
"""Get pyrabbit manager."""
diff --git a/kombu/utils/collections.py b/kombu/utils/collections.py
index 77781047..1a0a6d0d 100644
--- a/kombu/utils/collections.py
+++ b/kombu/utils/collections.py
@@ -1,6 +1,9 @@
"""Custom maps, sequences, etc."""
+from __future__ import annotations
+
+
class HashedSeq(list):
"""Hashed Sequence.
diff --git a/kombu/utils/compat.py b/kombu/utils/compat.py
index a0c1b337..791c0038 100644
--- a/kombu/utils/compat.py
+++ b/kombu/utils/compat.py
@@ -1,5 +1,7 @@
"""Python Compatibility Utilities."""
+from __future__ import annotations
+
import numbers
import sys
from contextlib import contextmanager
diff --git a/kombu/utils/debug.py b/kombu/utils/debug.py
index acc2d60b..bd20948f 100644
--- a/kombu/utils/debug.py
+++ b/kombu/utils/debug.py
@@ -1,5 +1,7 @@
"""Debugging support."""
+from __future__ import annotations
+
import logging
from vine.utils import wraps
diff --git a/kombu/utils/div.py b/kombu/utils/div.py
index 45be7f94..439b6639 100644
--- a/kombu/utils/div.py
+++ b/kombu/utils/div.py
@@ -1,5 +1,7 @@
"""Div. Utilities."""
+from __future__ import annotations
+
import sys
from .encoding import default_encode
diff --git a/kombu/utils/encoding.py b/kombu/utils/encoding.py
index 5f58f0fa..42bf2ce9 100644
--- a/kombu/utils/encoding.py
+++ b/kombu/utils/encoding.py
@@ -5,6 +5,8 @@ applications without crashing from the infamous
:exc:`UnicodeDecodeError` exception.
"""
+from __future__ import annotations
+
import sys
import traceback
diff --git a/kombu/utils/eventio.py b/kombu/utils/eventio.py
index 48260a48..f8d89d45 100644
--- a/kombu/utils/eventio.py
+++ b/kombu/utils/eventio.py
@@ -1,5 +1,7 @@
"""Selector Utilities."""
+from __future__ import annotations
+
import errno
import math
import select as __select__
diff --git a/kombu/utils/functional.py b/kombu/utils/functional.py
index 366a0b99..6beb17d7 100644
--- a/kombu/utils/functional.py
+++ b/kombu/utils/functional.py
@@ -1,5 +1,7 @@
"""Functional Utilities."""
+from __future__ import annotations
+
import inspect
import random
import threading
diff --git a/kombu/utils/imports.py b/kombu/utils/imports.py
index fd4482a8..8752fa1a 100644
--- a/kombu/utils/imports.py
+++ b/kombu/utils/imports.py
@@ -1,5 +1,7 @@
"""Import related utilities."""
+from __future__ import annotations
+
import importlib
import sys
diff --git a/kombu/utils/json.py b/kombu/utils/json.py
index 6b8e4d46..2fb8d03d 100644
--- a/kombu/utils/json.py
+++ b/kombu/utils/json.py
@@ -1,5 +1,7 @@
"""JSON Serialization Utilities."""
+from __future__ import annotations
+
import base64
import datetime
import decimal
diff --git a/kombu/utils/limits.py b/kombu/utils/limits.py
index d82884f5..36d11f1f 100644
--- a/kombu/utils/limits.py
+++ b/kombu/utils/limits.py
@@ -1,5 +1,7 @@
"""Token bucket implementation for rate limiting."""
+from __future__ import annotations
+
from collections import deque
from time import monotonic
diff --git a/kombu/utils/objects.py b/kombu/utils/objects.py
index 7fef4a2f..eb4dfc2a 100644
--- a/kombu/utils/objects.py
+++ b/kombu/utils/objects.py
@@ -1,5 +1,7 @@
"""Object Utilities."""
+from __future__ import annotations
+
__all__ = ('cached_property',)
try:
diff --git a/kombu/utils/scheduling.py b/kombu/utils/scheduling.py
index 1875fce4..94286be8 100644
--- a/kombu/utils/scheduling.py
+++ b/kombu/utils/scheduling.py
@@ -1,5 +1,7 @@
"""Scheduling Utilities."""
+from __future__ import annotations
+
from itertools import count
from .imports import symbol_by_name
diff --git a/kombu/utils/text.py b/kombu/utils/text.py
index 8cc11f34..db260b52 100644
--- a/kombu/utils/text.py
+++ b/kombu/utils/text.py
@@ -2,6 +2,8 @@
# flake8: noqa
+from __future__ import annotations
+
from difflib import SequenceMatcher
from typing import Iterable, Iterator, Optional, Tuple, Union
@@ -17,7 +19,7 @@ def escape_regex(p, white=''):
for c in p)
-def fmatch_iter(needle: str, haystack: Iterable[str], min_ratio: float = 0.6) -> Iterator[Tuple[float, str]]:
+def fmatch_iter(needle: str, haystack: Iterable[str], min_ratio: float = 0.6) -> Iterator[tuple[float, str]]:
"""Fuzzy match: iteratively.
Yields:
@@ -29,7 +31,7 @@ def fmatch_iter(needle: str, haystack: Iterable[str], min_ratio: float = 0.6) ->
yield ratio, key
-def fmatch_best(needle: str, haystack: Iterable[str], min_ratio: float = 0.6) -> Optional[str]:
+def fmatch_best(needle: str, haystack: Iterable[str], min_ratio: float = 0.6) -> str | None:
"""Fuzzy match - Find best match (scalar)."""
try:
return sorted(
@@ -53,15 +55,15 @@ def version_string_as_tuple(s: str) -> version_info_t:
def _unpack_version(
major: str,
- minor: Union[str, int] = 0,
- micro: Union[str, int] = 0,
+ minor: str | int = 0,
+ micro: str | int = 0,
releaselevel: str = '',
serial: str = ''
) -> version_info_t:
return version_info_t(int(major), int(minor), micro, releaselevel, serial)
-def _splitmicro(micro: str, releaselevel: str = '', serial: str = '') -> Tuple[int, str, str]:
+def _splitmicro(micro: str, releaselevel: str = '', serial: str = '') -> tuple[int, str, str]:
for index, char in enumerate(micro):
if not char.isdigit():
break
diff --git a/kombu/utils/time.py b/kombu/utils/time.py
index a563657f..8228d2be 100644
--- a/kombu/utils/time.py
+++ b/kombu/utils/time.py
@@ -1,9 +1,9 @@
"""Time Utilities."""
-from typing import Optional, Union
+from __future__ import annotations
__all__ = ('maybe_s_to_ms',)
-def maybe_s_to_ms(v: Optional[Union[int, float]]) -> Optional[int]:
+def maybe_s_to_ms(v: int | float | None) -> int | None:
"""Convert seconds to milliseconds, but return None for None."""
return int(float(v) * 1000.0) if v is not None else v
diff --git a/kombu/utils/url.py b/kombu/utils/url.py
index de3a9139..f5f47701 100644
--- a/kombu/utils/url.py
+++ b/kombu/utils/url.py
@@ -2,6 +2,8 @@
# flake8: noqa
+from __future__ import annotations
+
from collections.abc import Mapping
from functools import partial
from typing import NamedTuple
diff --git a/kombu/utils/uuid.py b/kombu/utils/uuid.py
index b7a5bf48..9f77dad9 100644
--- a/kombu/utils/uuid.py
+++ b/kombu/utils/uuid.py
@@ -1,4 +1,6 @@
"""UUID utilities."""
+from __future__ import annotations
+
from typing import Callable
from uuid import UUID, uuid4
diff --git a/setup.cfg b/setup.cfg
index ff949215..71b271f1 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -12,6 +12,10 @@ all_files = 1
# whenever it makes the code more readable.
extend-ignore = W504, N806, N802, N801, N803
+[isort]
+add_imports =
+ from __future__ import annotations
+
[mypy]
warn_unused_configs = True
strict = False
diff --git a/setup.py b/setup.py
index cc8c3231..a8c57b0b 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,6 @@
#!/usr/bin/env python3
+from __future__ import annotations
+
import os
import re
import sys
diff --git a/t/integration/__init__.py b/t/integration/__init__.py
index 1bea4880..cfce4f85 100644
--- a/t/integration/__init__.py
+++ b/t/integration/__init__.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import os
import sys
diff --git a/t/integration/common.py b/t/integration/common.py
index 945e357a..0c40b6e9 100644
--- a/t/integration/common.py
+++ b/t/integration/common.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import socket
from contextlib import closing
from time import sleep
diff --git a/t/integration/test_py_amqp.py b/t/integration/test_py_amqp.py
index 6f80bc53..260f164d 100644
--- a/t/integration/test_py_amqp.py
+++ b/t/integration/test_py_amqp.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import os
import pytest
diff --git a/t/integration/test_redis.py b/t/integration/test_redis.py
index 522adf8e..169a32dc 100644
--- a/t/integration/test_redis.py
+++ b/t/integration/test_redis.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import os
from time import sleep
diff --git a/t/mocks.py b/t/mocks.py
index 51ef32fb..e4cfa3f7 100644
--- a/t/mocks.py
+++ b/t/mocks.py
@@ -1,5 +1,7 @@
+from __future__ import annotations
+
from itertools import count
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from unittest.mock import Mock
from kombu.transport import base
@@ -19,9 +21,9 @@ class _ContextMock(Mock):
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
pass
diff --git a/t/skip.py b/t/skip.py
index d2c59caa..966398ec 100644
--- a/t/skip.py
+++ b/t/skip.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import sys
import pytest
diff --git a/t/unit/asynchronous/aws/case.py b/t/unit/asynchronous/aws/case.py
index 56c70812..220cd700 100644
--- a/t/unit/asynchronous/aws/case.py
+++ b/t/unit/asynchronous/aws/case.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pytest
import t.skip
diff --git a/t/unit/asynchronous/aws/sqs/test_connection.py b/t/unit/asynchronous/aws/sqs/test_connection.py
index c3dd184b..0c5d2ac9 100644
--- a/t/unit/asynchronous/aws/sqs/test_connection.py
+++ b/t/unit/asynchronous/aws/sqs/test_connection.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import MagicMock, Mock
from kombu.asynchronous.aws.ext import boto3
diff --git a/t/unit/asynchronous/aws/sqs/test_queue.py b/t/unit/asynchronous/aws/sqs/test_queue.py
index 56812831..70f10a75 100644
--- a/t/unit/asynchronous/aws/sqs/test_queue.py
+++ b/t/unit/asynchronous/aws/sqs/test_queue.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/asynchronous/aws/test_aws.py b/t/unit/asynchronous/aws/test_aws.py
index 93d92e4b..736fdf8a 100644
--- a/t/unit/asynchronous/aws/test_aws.py
+++ b/t/unit/asynchronous/aws/test_aws.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
from kombu.asynchronous.aws import connect_sqs
diff --git a/t/unit/asynchronous/aws/test_connection.py b/t/unit/asynchronous/aws/test_connection.py
index 68e3c746..03fc5412 100644
--- a/t/unit/asynchronous/aws/test_connection.py
+++ b/t/unit/asynchronous/aws/test_connection.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from contextlib import contextmanager
from io import StringIO
from unittest.mock import Mock
diff --git a/t/unit/asynchronous/http/test_curl.py b/t/unit/asynchronous/http/test_curl.py
index 2e52f7d4..51f9128e 100644
--- a/t/unit/asynchronous/http/test_curl.py
+++ b/t/unit/asynchronous/http/test_curl.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from io import BytesIO
from unittest.mock import ANY, Mock, call, patch
diff --git a/t/unit/asynchronous/http/test_http.py b/t/unit/asynchronous/http/test_http.py
index 6e6abdcb..816bf89d 100644
--- a/t/unit/asynchronous/http/test_http.py
+++ b/t/unit/asynchronous/http/test_http.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from io import BytesIO
from unittest.mock import Mock
diff --git a/t/unit/asynchronous/test_hub.py b/t/unit/asynchronous/test_hub.py
index 0cf14194..bcbbb260 100644
--- a/t/unit/asynchronous/test_hub.py
+++ b/t/unit/asynchronous/test_hub.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import errno
from unittest.mock import Mock, call, patch
diff --git a/t/unit/asynchronous/test_semaphore.py b/t/unit/asynchronous/test_semaphore.py
index 485d0800..5c41a6d8 100644
--- a/t/unit/asynchronous/test_semaphore.py
+++ b/t/unit/asynchronous/test_semaphore.py
@@ -1,4 +1,4 @@
-from typing import List
+from __future__ import annotations
from kombu.asynchronous.semaphore import LaxBoundedSemaphore
@@ -7,7 +7,7 @@ class test_LaxBoundedSemaphore:
def test_over_release(self) -> None:
x = LaxBoundedSemaphore(2)
- calls: List[int] = []
+ calls: list[int] = []
for i in range(1, 21):
x.acquire(calls.append, i)
x.release()
diff --git a/t/unit/asynchronous/test_timer.py b/t/unit/asynchronous/test_timer.py
index 20411784..531b3d2e 100644
--- a/t/unit/asynchronous/test_timer.py
+++ b/t/unit/asynchronous/test_timer.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from datetime import datetime
from unittest.mock import Mock, patch
diff --git a/t/unit/conftest.py b/t/unit/conftest.py
index b798e3e5..15e31366 100644
--- a/t/unit/conftest.py
+++ b/t/unit/conftest.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import atexit
import builtins
import io
diff --git a/t/unit/test_clocks.py b/t/unit/test_clocks.py
index b4392440..af391ba9 100644
--- a/t/unit/test_clocks.py
+++ b/t/unit/test_clocks.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pickle
from heapq import heappush
from time import time
diff --git a/t/unit/test_common.py b/t/unit/test_common.py
index 4780c0a4..fd20243f 100644
--- a/t/unit/test_common.py
+++ b/t/unit/test_common.py
@@ -1,5 +1,7 @@
+from __future__ import annotations
+
import socket
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from unittest.mock import Mock, patch
import pytest
@@ -344,9 +346,9 @@ class MockConsumer:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
self.consumers.discard(self)
diff --git a/t/unit/test_compat.py b/t/unit/test_compat.py
index 31eb97ea..837d6f22 100644
--- a/t/unit/test_compat.py
+++ b/t/unit/test_compat.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock, patch
import pytest
diff --git a/t/unit/test_compression.py b/t/unit/test_compression.py
index f1f426b7..95139811 100644
--- a/t/unit/test_compression.py
+++ b/t/unit/test_compression.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import sys
import pytest
diff --git a/t/unit/test_connection.py b/t/unit/test_connection.py
index 703e237d..b1413b7e 100644
--- a/t/unit/test_connection.py
+++ b/t/unit/test_connection.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pickle
import socket
from copy import copy, deepcopy
diff --git a/t/unit/test_entity.py b/t/unit/test_entity.py
index 52c42b2b..a98f889d 100644
--- a/t/unit/test_entity.py
+++ b/t/unit/test_entity.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pickle
from unittest.mock import Mock, call
diff --git a/t/unit/test_exceptions.py b/t/unit/test_exceptions.py
index bba72a83..becac86c 100644
--- a/t/unit/test_exceptions.py
+++ b/t/unit/test_exceptions.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
from kombu.exceptions import HttpError
diff --git a/t/unit/test_log.py b/t/unit/test_log.py
index 4a8cd94c..30c6796f 100644
--- a/t/unit/test_log.py
+++ b/t/unit/test_log.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import logging
import sys
from unittest.mock import ANY, Mock, patch
diff --git a/t/unit/test_matcher.py b/t/unit/test_matcher.py
index 2100fa74..37ae5207 100644
--- a/t/unit/test_matcher.py
+++ b/t/unit/test_matcher.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pytest
from kombu.matcher import (MatcherNotInstalled, fnmatch, match, register,
diff --git a/t/unit/test_message.py b/t/unit/test_message.py
index 5b0833dd..4c53cac2 100644
--- a/t/unit/test_message.py
+++ b/t/unit/test_message.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import sys
from unittest.mock import Mock, patch
diff --git a/t/unit/test_messaging.py b/t/unit/test_messaging.py
index 68c85b5f..4bd467c2 100644
--- a/t/unit/test_messaging.py
+++ b/t/unit/test_messaging.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pickle
import sys
from collections import defaultdict
diff --git a/t/unit/test_mixins.py b/t/unit/test_mixins.py
index 04a56a6c..39b7370f 100644
--- a/t/unit/test_mixins.py
+++ b/t/unit/test_mixins.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import socket
from unittest.mock import Mock, patch
diff --git a/t/unit/test_pidbox.py b/t/unit/test_pidbox.py
index fac46139..cf8a748a 100644
--- a/t/unit/test_pidbox.py
+++ b/t/unit/test_pidbox.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import socket
import warnings
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
diff --git a/t/unit/test_pools.py b/t/unit/test_pools.py
index eb2a556e..12c045ac 100644
--- a/t/unit/test_pools.py
+++ b/t/unit/test_pools.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/test_serialization.py b/t/unit/test_serialization.py
index 14952e5e..d3fd5c20 100644
--- a/t/unit/test_serialization.py
+++ b/t/unit/test_serialization.py
@@ -1,5 +1,7 @@
#!/usr/bin/python
+from __future__ import annotations
+
from base64 import b64decode
from unittest.mock import call, patch
diff --git a/t/unit/test_simple.py b/t/unit/test_simple.py
index 6a9a9b09..50ea880b 100644
--- a/t/unit/test_simple.py
+++ b/t/unit/test_simple.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/transport/test_SQS.py b/t/unit/transport/test_SQS.py
index ea261659..ecf32e10 100644
--- a/t/unit/transport/test_SQS.py
+++ b/t/unit/transport/test_SQS.py
@@ -4,6 +4,8 @@ NOTE: The SQSQueueMock and SQSConnectionMock classes originally come from
http://github.com/pcsforeducation/sqs-mock-python. They have been patched
slightly.
"""
+from __future__ import annotations
+
import base64
import os
import random
diff --git a/t/unit/transport/test_azureservicebus.py b/t/unit/transport/test_azureservicebus.py
index 97775d06..f2280fe4 100644
--- a/t/unit/transport/test_azureservicebus.py
+++ b/t/unit/transport/test_azureservicebus.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import base64
import json
import random
diff --git a/t/unit/transport/test_base.py b/t/unit/transport/test_base.py
index 7df12c9e..5beae3c6 100644
--- a/t/unit/transport/test_base.py
+++ b/t/unit/transport/test_base.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/transport/test_consul.py b/t/unit/transport/test_consul.py
index d77b7a41..ff110e11 100644
--- a/t/unit/transport/test_consul.py
+++ b/t/unit/transport/test_consul.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from array import array
from queue import Empty
from unittest.mock import Mock
diff --git a/t/unit/transport/test_etcd.py b/t/unit/transport/test_etcd.py
index 6c75a033..f3fad035 100644
--- a/t/unit/transport/test_etcd.py
+++ b/t/unit/transport/test_etcd.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from queue import Empty
from unittest.mock import Mock, patch
diff --git a/t/unit/transport/test_filesystem.py b/t/unit/transport/test_filesystem.py
index fdf233ae..b22e3b8d 100644
--- a/t/unit/transport/test_filesystem.py
+++ b/t/unit/transport/test_filesystem.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import tempfile
from queue import Empty
diff --git a/t/unit/transport/test_librabbitmq.py b/t/unit/transport/test_librabbitmq.py
index 58ee7e1e..84f8691e 100644
--- a/t/unit/transport/test_librabbitmq.py
+++ b/t/unit/transport/test_librabbitmq.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock, patch
import pytest
diff --git a/t/unit/transport/test_memory.py b/t/unit/transport/test_memory.py
index 2c1fe83f..537ec01f 100644
--- a/t/unit/transport/test_memory.py
+++ b/t/unit/transport/test_memory.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import socket
import pytest
diff --git a/t/unit/transport/test_mongodb.py b/t/unit/transport/test_mongodb.py
index 39976988..fe31a477 100644
--- a/t/unit/transport/test_mongodb.py
+++ b/t/unit/transport/test_mongodb.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import datetime
from queue import Empty
from unittest.mock import MagicMock, call, patch
diff --git a/t/unit/transport/test_pyamqp.py b/t/unit/transport/test_pyamqp.py
index d5f6d7e2..bd402395 100644
--- a/t/unit/transport/test_pyamqp.py
+++ b/t/unit/transport/test_pyamqp.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import sys
from itertools import count
from unittest.mock import MagicMock, Mock, patch
diff --git a/t/unit/transport/test_pyro.py b/t/unit/transport/test_pyro.py
index 325f81ce..b0ec4be4 100644
--- a/t/unit/transport/test_pyro.py
+++ b/t/unit/transport/test_pyro.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import socket
import pytest
diff --git a/t/unit/transport/test_qpid.py b/t/unit/transport/test_qpid.py
index 95071e97..0048fd38 100644
--- a/t/unit/transport/test_qpid.py
+++ b/t/unit/transport/test_qpid.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import select
import socket
import ssl
diff --git a/t/unit/transport/test_redis.py b/t/unit/transport/test_redis.py
index 9905f6ee..d06f2959 100644
--- a/t/unit/transport/test_redis.py
+++ b/t/unit/transport/test_redis.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import base64
import copy
import socket
@@ -6,7 +8,7 @@ from collections import defaultdict
from itertools import count
from queue import Empty
from queue import Queue as _Queue
-from typing import TYPE_CHECKING, Optional, Type
+from typing import TYPE_CHECKING
from unittest.mock import ANY, Mock, call, patch
import pytest
@@ -237,9 +239,9 @@ class Pipeline:
def __exit__(
self,
- exc_type: Optional[Type[BaseException]],
- exc_val: Optional[BaseException],
- exc_tb: Optional['TracebackType']
+ exc_type: type[BaseException] | None,
+ exc_val: BaseException | None,
+ exc_tb: TracebackType | None
) -> None:
pass
diff --git a/t/unit/transport/test_sqlalchemy.py b/t/unit/transport/test_sqlalchemy.py
index 5ddca5ac..aa0907f7 100644
--- a/t/unit/transport/test_sqlalchemy.py
+++ b/t/unit/transport/test_sqlalchemy.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import patch
import pytest
diff --git a/t/unit/transport/test_transport.py b/t/unit/transport/test_transport.py
index ca84dd80..b5b5e6eb 100644
--- a/t/unit/transport/test_transport.py
+++ b/t/unit/transport/test_transport.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock, patch
from kombu import transport
diff --git a/t/unit/transport/test_zookeeper.py b/t/unit/transport/test_zookeeper.py
index 21fcac42..8b6d159c 100644
--- a/t/unit/transport/test_zookeeper.py
+++ b/t/unit/transport/test_zookeeper.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pytest
from kombu import Connection
diff --git a/t/unit/transport/virtual/test_base.py b/t/unit/transport/virtual/test_base.py
index 97df370a..04972cce 100644
--- a/t/unit/transport/virtual/test_base.py
+++ b/t/unit/transport/virtual/test_base.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import io
import socket
import warnings
diff --git a/t/unit/transport/virtual/test_exchange.py b/t/unit/transport/virtual/test_exchange.py
index 55741445..5e5a61d7 100644
--- a/t/unit/transport/virtual/test_exchange.py
+++ b/t/unit/transport/virtual/test_exchange.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/utils/test_amq_manager.py b/t/unit/utils/test_amq_manager.py
index ca6adb6e..22fb9355 100644
--- a/t/unit/utils/test_amq_manager.py
+++ b/t/unit/utils/test_amq_manager.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import patch
import pytest
diff --git a/t/unit/utils/test_compat.py b/t/unit/utils/test_compat.py
index d3159b76..462db143 100644
--- a/t/unit/utils/test_compat.py
+++ b/t/unit/utils/test_compat.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import socket
import sys
import types
diff --git a/t/unit/utils/test_debug.py b/t/unit/utils/test_debug.py
index 020bc849..a4955507 100644
--- a/t/unit/utils/test_debug.py
+++ b/t/unit/utils/test_debug.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import logging
from unittest.mock import Mock, patch
diff --git a/t/unit/utils/test_div.py b/t/unit/utils/test_div.py
index b29b6119..a6e988e8 100644
--- a/t/unit/utils/test_div.py
+++ b/t/unit/utils/test_div.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pickle
from io import BytesIO, StringIO
diff --git a/t/unit/utils/test_encoding.py b/t/unit/utils/test_encoding.py
index 26e3ef36..81358a7a 100644
--- a/t/unit/utils/test_encoding.py
+++ b/t/unit/utils/test_encoding.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import sys
from contextlib import contextmanager
from unittest.mock import patch
diff --git a/t/unit/utils/test_functional.py b/t/unit/utils/test_functional.py
index 73a98e52..26f28733 100644
--- a/t/unit/utils/test_functional.py
+++ b/t/unit/utils/test_functional.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pickle
from itertools import count
from unittest.mock import Mock
diff --git a/t/unit/utils/test_imports.py b/t/unit/utils/test_imports.py
index 8a4873df..8f515bd8 100644
--- a/t/unit/utils/test_imports.py
+++ b/t/unit/utils/test_imports.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/utils/test_json.py b/t/unit/utils/test_json.py
index d6a9c0b0..c263b4f9 100644
--- a/t/unit/utils/test_json.py
+++ b/t/unit/utils/test_json.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from collections import namedtuple
from datetime import datetime
from decimal import Decimal
diff --git a/t/unit/utils/test_objects.py b/t/unit/utils/test_objects.py
index 93a88b4f..b9f1484a 100644
--- a/t/unit/utils/test_objects.py
+++ b/t/unit/utils/test_objects.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from kombu.utils.objects import cached_property
diff --git a/t/unit/utils/test_scheduling.py b/t/unit/utils/test_scheduling.py
index 44cf01a2..7bc76b96 100644
--- a/t/unit/utils/test_scheduling.py
+++ b/t/unit/utils/test_scheduling.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from unittest.mock import Mock
import pytest
diff --git a/t/unit/utils/test_time.py b/t/unit/utils/test_time.py
index 660ae8ec..a8f7de0f 100644
--- a/t/unit/utils/test_time.py
+++ b/t/unit/utils/test_time.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pytest
from kombu.utils.time import maybe_s_to_ms
diff --git a/t/unit/utils/test_url.py b/t/unit/utils/test_url.py
index 71ea0f9b..f219002b 100644
--- a/t/unit/utils/test_url.py
+++ b/t/unit/utils/test_url.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
try:
from urllib.parse import urlencode
except ImportError:
diff --git a/t/unit/utils/test_utils.py b/t/unit/utils/test_utils.py
index d118d46e..08f95083 100644
--- a/t/unit/utils/test_utils.py
+++ b/t/unit/utils/test_utils.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import pytest
from kombu import version_info_t
diff --git a/t/unit/utils/test_uuid.py b/t/unit/utils/test_uuid.py
index 521d652b..bc69474a 100644
--- a/t/unit/utils/test_uuid.py
+++ b/t/unit/utils/test_uuid.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
from kombu.utils.uuid import uuid