From 08e014a300f56257060fa795d83fad72034adb68 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 29 Jul 2026 11:43:13 +0200 Subject: [PATCH 1/2] [pika] Fix connection parameter for callbacks The callbacks provided to a connection get passed the connection as first argument. While this was correctly typed as `Self` in the base `Connection` class, the concrete `Connection` class was used in sub-classes. Fixed to use `Self` in sub-classes as well. --- stubs/pika/pika/adapters/asyncio_connection.pyi | 11 ++++++----- stubs/pika/pika/adapters/base_connection.pyi | 8 ++++---- stubs/pika/pika/adapters/gevent_connection.pyi | 12 ++++++------ stubs/pika/pika/adapters/select_connection.pyi | 12 ++++++------ stubs/pika/pika/adapters/tornado_connection.pyi | 12 ++++++------ stubs/pika/pika/adapters/twisted_connection.pyi | 8 ++++---- 6 files changed, 32 insertions(+), 31 deletions(-) diff --git a/stubs/pika/pika/adapters/asyncio_connection.pyi b/stubs/pika/pika/adapters/asyncio_connection.pyi index 7789841db6a9..6ee119ea5d00 100644 --- a/stubs/pika/pika/adapters/asyncio_connection.pyi +++ b/stubs/pika/pika/adapters/asyncio_connection.pyi @@ -2,6 +2,7 @@ import asyncio from _typeshed import Incomplete from collections.abc import Callable, Sequence from logging import Logger +from typing import Self from pika.adapters.base_connection import BaseConnection from pika.adapters.utils import io_services_utils @@ -12,7 +13,7 @@ from pika.adapters.utils.nbio_interface import ( AbstractIOServices, AbstractTimerReference, ) -from pika.connection import Connection, Parameters +from pika.connection import Parameters LOGGER: Logger @@ -20,9 +21,9 @@ class AsyncioConnection(BaseConnection[asyncio.AbstractEventLoop]): def __init__( self, parameters: Parameters | None = None, - on_open_callback: Callable[[Connection], object] | None = None, - on_open_error_callback: Callable[[Connection, BaseException], object] | None = None, - on_close_callback: Callable[[Connection, BaseException], object] | None = None, + on_open_callback: Callable[[Self], object] | None = None, + on_open_error_callback: Callable[[Self, BaseException], object] | None = None, + on_close_callback: Callable[[Self, BaseException], object] | None = None, custom_ioloop: asyncio.AbstractEventLoop | AbstractIOServices | None = None, internal_connection_workflow: bool = True, ) -> None: ... @@ -30,7 +31,7 @@ class AsyncioConnection(BaseConnection[asyncio.AbstractEventLoop]): def create_connection( cls, connection_configs: Sequence[Parameters], - on_done: Callable[[Connection | AMQPConnectorException], object], + on_done: Callable[[Self | AMQPConnectorException], object], custom_ioloop: asyncio.AbstractEventLoop | None = None, workflow: AbstractAMQPConnectionWorkflow | None = None, ) -> AbstractAMQPConnectionWorkflow: ... diff --git a/stubs/pika/pika/adapters/base_connection.pyi b/stubs/pika/pika/adapters/base_connection.pyi index ab9b4dc94ac1..2766489ec660 100644 --- a/stubs/pika/pika/adapters/base_connection.pyi +++ b/stubs/pika/pika/adapters/base_connection.pyi @@ -21,9 +21,9 @@ class BaseConnection(Connection, Generic[_IOLoop], metaclass=abc.ABCMeta): def __init__( self, parameters: Parameters | None, - on_open_callback: Callable[[Connection], object] | None, - on_open_error_callback: Callable[[Connection, BaseException], object] | None, - on_close_callback: Callable[[Connection, BaseException], object] | None, + on_open_callback: Callable[[Self], object] | None, + on_open_error_callback: Callable[[Self, BaseException], object] | None, + on_close_callback: Callable[[Self, BaseException], object] | None, nbio: AbstractIOServices, internal_connection_workflow: bool = True, ) -> None: ... @@ -104,7 +104,7 @@ class _StreamingProtocolShim(AbstractStreamProtocol, Generic[_IOLoop]): def create_connection( cls, connection_configs: Sequence[Parameters], - on_done: Callable[[Connection | AMQPConnectorException], object], + on_done: Callable[[Self | AMQPConnectorException], object], custom_ioloop: _IOLoop | None = None, workflow: AbstractAMQPConnectionWorkflow | None = None, ) -> AbstractAMQPConnectionWorkflow: ... diff --git a/stubs/pika/pika/adapters/gevent_connection.pyi b/stubs/pika/pika/adapters/gevent_connection.pyi index 1f323796d6c1..94f4c04a1d8f 100644 --- a/stubs/pika/pika/adapters/gevent_connection.pyi +++ b/stubs/pika/pika/adapters/gevent_connection.pyi @@ -1,6 +1,6 @@ from collections.abc import Callable, Sequence from logging import Logger -from typing import Final +from typing import Final, Self from gevent._types import _Loop, _TimerWatcher from gevent.hub import Hub @@ -8,7 +8,7 @@ from pika.adapters.base_connection import BaseConnection from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException from pika.adapters.utils.nbio_interface import AbstractIOReference, AbstractIOServices from pika.adapters.utils.selector_ioloop_adapter import AbstractSelectorIOLoop, SelectorIOServicesAdapter, _SupportsCancel -from pika.connection import Connection, Parameters +from pika.connection import Parameters LOGGER: Logger @@ -16,9 +16,9 @@ class GeventConnection(BaseConnection[_Loop]): def __init__( self, parameters: Parameters | None = None, - on_open_callback: Callable[[Connection], object] | None = None, - on_open_error_callback: Callable[[Connection, BaseException], object] | None = None, - on_close_callback: Callable[[Connection, BaseException], object] | None = None, + on_open_callback: Callable[[Self], object] | None = None, + on_open_error_callback: Callable[[Self, BaseException], object] | None = None, + on_close_callback: Callable[[Self, BaseException], object] | None = None, custom_ioloop: _Loop | AbstractIOServices | None = None, internal_connection_workflow: bool = True, ) -> None: ... @@ -26,7 +26,7 @@ class GeventConnection(BaseConnection[_Loop]): def create_connection( cls, connection_configs: Sequence[Parameters], - on_done: Callable[[Connection | AMQPConnectorException], object], + on_done: Callable[[Self | AMQPConnectorException], object], custom_ioloop: _Loop | None = None, workflow: AbstractAMQPConnectionWorkflow | None = None, ) -> AbstractAMQPConnectionWorkflow: ... diff --git a/stubs/pika/pika/adapters/select_connection.pyi b/stubs/pika/pika/adapters/select_connection.pyi index d1309477191c..ab6802a357f3 100644 --- a/stubs/pika/pika/adapters/select_connection.pyi +++ b/stubs/pika/pika/adapters/select_connection.pyi @@ -2,14 +2,14 @@ import abc import select from collections.abc import Callable, Sequence from logging import Logger -from typing import ClassVar, Final, Literal, TypeAlias, TypedDict +from typing import ClassVar, Final, Literal, Self, TypeAlias, TypedDict import pika.compat from pika.adapters.base_connection import BaseConnection from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException from pika.adapters.utils.nbio_interface import AbstractIOServices from pika.adapters.utils.selector_ioloop_adapter import AbstractSelectorIOLoop -from pika.connection import Connection, Parameters +from pika.connection import Parameters SELECT_ERROR_T: TypeAlias = OSError | IOError | InterruptedError | select.error @@ -24,9 +24,9 @@ class SelectConnection(BaseConnection[IOLoop]): def __init__( self, parameters: Parameters | None = None, - on_open_callback: Callable[[Connection], object] | None = None, - on_open_error_callback: Callable[[Connection, BaseException], object] | None = None, - on_close_callback: Callable[[Connection, BaseException], object] | None = None, + on_open_callback: Callable[[Self], object] | None = None, + on_open_error_callback: Callable[[Self, BaseException], object] | None = None, + on_close_callback: Callable[[Self, BaseException], object] | None = None, custom_ioloop: IOLoop | AbstractIOServices | None = None, internal_connection_workflow: bool = True, ) -> None: ... @@ -34,7 +34,7 @@ class SelectConnection(BaseConnection[IOLoop]): def create_connection( cls, connection_configs: Sequence[Parameters], - on_done: Callable[[Connection | AMQPConnectorException], object], + on_done: Callable[[Self | AMQPConnectorException], object], custom_ioloop: IOLoop | None = None, workflow: AbstractAMQPConnectionWorkflow | None = None, ) -> AbstractAMQPConnectionWorkflow: ... diff --git a/stubs/pika/pika/adapters/tornado_connection.pyi b/stubs/pika/pika/adapters/tornado_connection.pyi index 31ac6c9518d9..e26e4d513e78 100644 --- a/stubs/pika/pika/adapters/tornado_connection.pyi +++ b/stubs/pika/pika/adapters/tornado_connection.pyi @@ -1,12 +1,12 @@ from _typeshed import Incomplete from collections.abc import Callable, Sequence from logging import Logger -from typing import TypeAlias +from typing import Self, TypeAlias from pika.adapters.base_connection import BaseConnection from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException from pika.adapters.utils.nbio_interface import AbstractIOServices -from pika.connection import Connection, Parameters +from pika.connection import Parameters _IOLoop: TypeAlias = Incomplete # actual type is tornado.ioloop.IOLoop @@ -16,9 +16,9 @@ class TornadoConnection(BaseConnection[_IOLoop]): def __init__( self, parameters: Parameters | None = None, - on_open_callback: Callable[[Connection], object] | None = None, - on_open_error_callback: Callable[[Connection, BaseException], object] | None = None, - on_close_callback: Callable[[Connection, BaseException], object] | None = None, + on_open_callback: Callable[[Self], object] | None = None, + on_open_error_callback: Callable[[Self, BaseException], object] | None = None, + on_close_callback: Callable[[Self, BaseException], object] | None = None, custom_ioloop: _IOLoop | AbstractIOServices | None = None, internal_connection_workflow: bool = True, ) -> None: ... @@ -26,7 +26,7 @@ class TornadoConnection(BaseConnection[_IOLoop]): def create_connection( cls, connection_configs: Sequence[Parameters], - on_done: Callable[[Connection | AMQPConnectorException], object], + on_done: Callable[[Self | AMQPConnectorException], object], custom_ioloop: _IOLoop | None = None, workflow: AbstractAMQPConnectionWorkflow | None = None, ) -> AbstractAMQPConnectionWorkflow: ... diff --git a/stubs/pika/pika/adapters/twisted_connection.pyi b/stubs/pika/pika/adapters/twisted_connection.pyi index 204fc2d61603..24132677abee 100644 --- a/stubs/pika/pika/adapters/twisted_connection.pyi +++ b/stubs/pika/pika/adapters/twisted_connection.pyi @@ -4,7 +4,7 @@ from _typeshed import Incomplete from collections.abc import Callable, Iterable, Mapping from logging import Logger -from typing import Generic, NamedTuple, TypeVar +from typing import Generic, NamedTuple, Self, TypeVar from pika import amqp_object from pika.adapters.utils.nbio_interface import AbstractTimerReference @@ -137,9 +137,9 @@ class _TwistedConnectionAdapter(Connection): def __init__( self, parameters: Parameters | None, - on_open_callback: Callable[[Connection], object] | None, - on_open_error_callback: Callable[[Connection, BaseException], object] | None, - on_close_callback: Callable[[Connection, Exception], object] | None, + on_open_callback: Callable[[Self], object] | None, + on_open_error_callback: Callable[[Self, BaseException], object] | None, + on_close_callback: Callable[[Self, Exception], object] | None, custom_reactor: ReactorBase | None = None, ) -> None: ... def connection_made(self, transport: ITransport) -> None: ... From 594d73518ebaa7420b85fd99abd844e161ff3295 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Wed, 29 Jul 2026 11:45:22 +0200 Subject: [PATCH 2/2] Fix imports --- stubs/pika/pika/adapters/asyncio_connection.pyi | 2 +- stubs/pika/pika/adapters/gevent_connection.pyi | 3 ++- stubs/pika/pika/adapters/select_connection.pyi | 3 ++- stubs/pika/pika/adapters/tornado_connection.pyi | 3 ++- stubs/pika/pika/adapters/twisted_connection.pyi | 3 ++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/stubs/pika/pika/adapters/asyncio_connection.pyi b/stubs/pika/pika/adapters/asyncio_connection.pyi index 6ee119ea5d00..b4f5b7d3b656 100644 --- a/stubs/pika/pika/adapters/asyncio_connection.pyi +++ b/stubs/pika/pika/adapters/asyncio_connection.pyi @@ -2,7 +2,7 @@ import asyncio from _typeshed import Incomplete from collections.abc import Callable, Sequence from logging import Logger -from typing import Self +from typing_extensions import Self from pika.adapters.base_connection import BaseConnection from pika.adapters.utils import io_services_utils diff --git a/stubs/pika/pika/adapters/gevent_connection.pyi b/stubs/pika/pika/adapters/gevent_connection.pyi index 94f4c04a1d8f..995579bf4991 100644 --- a/stubs/pika/pika/adapters/gevent_connection.pyi +++ b/stubs/pika/pika/adapters/gevent_connection.pyi @@ -1,6 +1,7 @@ from collections.abc import Callable, Sequence from logging import Logger -from typing import Final, Self +from typing import Final +from typing_extensions import Self from gevent._types import _Loop, _TimerWatcher from gevent.hub import Hub diff --git a/stubs/pika/pika/adapters/select_connection.pyi b/stubs/pika/pika/adapters/select_connection.pyi index ab6802a357f3..09d88fde568b 100644 --- a/stubs/pika/pika/adapters/select_connection.pyi +++ b/stubs/pika/pika/adapters/select_connection.pyi @@ -2,7 +2,8 @@ import abc import select from collections.abc import Callable, Sequence from logging import Logger -from typing import ClassVar, Final, Literal, Self, TypeAlias, TypedDict +from typing import ClassVar, Final, Literal, TypeAlias, TypedDict +from typing_extensions import Self import pika.compat from pika.adapters.base_connection import BaseConnection diff --git a/stubs/pika/pika/adapters/tornado_connection.pyi b/stubs/pika/pika/adapters/tornado_connection.pyi index e26e4d513e78..7a32602a0798 100644 --- a/stubs/pika/pika/adapters/tornado_connection.pyi +++ b/stubs/pika/pika/adapters/tornado_connection.pyi @@ -1,7 +1,8 @@ from _typeshed import Incomplete from collections.abc import Callable, Sequence from logging import Logger -from typing import Self, TypeAlias +from typing import TypeAlias +from typing_extensions import Self from pika.adapters.base_connection import BaseConnection from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException diff --git a/stubs/pika/pika/adapters/twisted_connection.pyi b/stubs/pika/pika/adapters/twisted_connection.pyi index 24132677abee..5fcaa6835c90 100644 --- a/stubs/pika/pika/adapters/twisted_connection.pyi +++ b/stubs/pika/pika/adapters/twisted_connection.pyi @@ -4,7 +4,8 @@ from _typeshed import Incomplete from collections.abc import Callable, Iterable, Mapping from logging import Logger -from typing import Generic, NamedTuple, Self, TypeVar +from typing import Generic, NamedTuple, TypeVar +from typing_extensions import Self from pika import amqp_object from pika.adapters.utils.nbio_interface import AbstractTimerReference