diff options
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 @@ -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 @@ -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 @@ -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 @@ -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 |