Skip to content

Commit 2abacaf

Browse files
authored
[pika] Fix connection parameter for callbacks (#16106)
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.
1 parent 97fd6c2 commit 2abacaf

6 files changed

Lines changed: 32 additions & 27 deletions

File tree

stubs/pika/pika/adapters/asyncio_connection.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import asyncio
22
from _typeshed import Incomplete
33
from collections.abc import Callable, Sequence
44
from logging import Logger
5+
from typing_extensions import Self
56

67
from pika.adapters.base_connection import BaseConnection
78
from pika.adapters.utils import io_services_utils
@@ -12,25 +13,25 @@ from pika.adapters.utils.nbio_interface import (
1213
AbstractIOServices,
1314
AbstractTimerReference,
1415
)
15-
from pika.connection import Connection, Parameters
16+
from pika.connection import Parameters
1617

1718
LOGGER: Logger
1819

1920
class AsyncioConnection(BaseConnection[asyncio.AbstractEventLoop]):
2021
def __init__(
2122
self,
2223
parameters: Parameters | None = None,
23-
on_open_callback: Callable[[Connection], object] | None = None,
24-
on_open_error_callback: Callable[[Connection, BaseException], object] | None = None,
25-
on_close_callback: Callable[[Connection, BaseException], object] | None = None,
24+
on_open_callback: Callable[[Self], object] | None = None,
25+
on_open_error_callback: Callable[[Self, BaseException], object] | None = None,
26+
on_close_callback: Callable[[Self, BaseException], object] | None = None,
2627
custom_ioloop: asyncio.AbstractEventLoop | AbstractIOServices | None = None,
2728
internal_connection_workflow: bool = True,
2829
) -> None: ...
2930
@classmethod
3031
def create_connection(
3132
cls,
3233
connection_configs: Sequence[Parameters],
33-
on_done: Callable[[Connection | AMQPConnectorException], object],
34+
on_done: Callable[[Self | AMQPConnectorException], object],
3435
custom_ioloop: asyncio.AbstractEventLoop | None = None,
3536
workflow: AbstractAMQPConnectionWorkflow | None = None,
3637
) -> AbstractAMQPConnectionWorkflow: ...

stubs/pika/pika/adapters/base_connection.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ class BaseConnection(Connection, Generic[_IOLoop], metaclass=abc.ABCMeta):
2121
def __init__(
2222
self,
2323
parameters: Parameters | None,
24-
on_open_callback: Callable[[Connection], object] | None,
25-
on_open_error_callback: Callable[[Connection, BaseException], object] | None,
26-
on_close_callback: Callable[[Connection, BaseException], object] | None,
24+
on_open_callback: Callable[[Self], object] | None,
25+
on_open_error_callback: Callable[[Self, BaseException], object] | None,
26+
on_close_callback: Callable[[Self, BaseException], object] | None,
2727
nbio: AbstractIOServices,
2828
internal_connection_workflow: bool = True,
2929
) -> None: ...
@@ -104,7 +104,7 @@ class _StreamingProtocolShim(AbstractStreamProtocol, Generic[_IOLoop]):
104104
def create_connection(
105105
cls,
106106
connection_configs: Sequence[Parameters],
107-
on_done: Callable[[Connection | AMQPConnectorException], object],
107+
on_done: Callable[[Self | AMQPConnectorException], object],
108108
custom_ioloop: _IOLoop | None = None,
109109
workflow: AbstractAMQPConnectionWorkflow | None = None,
110110
) -> AbstractAMQPConnectionWorkflow: ...

stubs/pika/pika/adapters/gevent_connection.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
11
from collections.abc import Callable, Sequence
22
from logging import Logger
33
from typing import Final
4+
from typing_extensions import Self
45

56
from gevent._types import _Loop, _TimerWatcher
67
from gevent.hub import Hub
78
from pika.adapters.base_connection import BaseConnection
89
from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException
910
from pika.adapters.utils.nbio_interface import AbstractIOReference, AbstractIOServices
1011
from pika.adapters.utils.selector_ioloop_adapter import AbstractSelectorIOLoop, SelectorIOServicesAdapter, _SupportsCancel
11-
from pika.connection import Connection, Parameters
12+
from pika.connection import Parameters
1213

1314
LOGGER: Logger
1415

1516
class GeventConnection(BaseConnection[_Loop]):
1617
def __init__(
1718
self,
1819
parameters: Parameters | None = None,
19-
on_open_callback: Callable[[Connection], object] | None = None,
20-
on_open_error_callback: Callable[[Connection, BaseException], object] | None = None,
21-
on_close_callback: Callable[[Connection, BaseException], object] | None = None,
20+
on_open_callback: Callable[[Self], object] | None = None,
21+
on_open_error_callback: Callable[[Self, BaseException], object] | None = None,
22+
on_close_callback: Callable[[Self, BaseException], object] | None = None,
2223
custom_ioloop: _Loop | AbstractIOServices | None = None,
2324
internal_connection_workflow: bool = True,
2425
) -> None: ...
2526
@classmethod
2627
def create_connection(
2728
cls,
2829
connection_configs: Sequence[Parameters],
29-
on_done: Callable[[Connection | AMQPConnectorException], object],
30+
on_done: Callable[[Self | AMQPConnectorException], object],
3031
custom_ioloop: _Loop | None = None,
3132
workflow: AbstractAMQPConnectionWorkflow | None = None,
3233
) -> AbstractAMQPConnectionWorkflow: ...

stubs/pika/pika/adapters/select_connection.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import select
33
from collections.abc import Callable, Sequence
44
from logging import Logger
55
from typing import ClassVar, Final, Literal, TypeAlias, TypedDict
6+
from typing_extensions import Self
67

78
import pika.compat
89
from pika.adapters.base_connection import BaseConnection
910
from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException
1011
from pika.adapters.utils.nbio_interface import AbstractIOServices
1112
from pika.adapters.utils.selector_ioloop_adapter import AbstractSelectorIOLoop
12-
from pika.connection import Connection, Parameters
13+
from pika.connection import Parameters
1314

1415
SELECT_ERROR_T: TypeAlias = OSError | IOError | InterruptedError | select.error
1516

@@ -24,17 +25,17 @@ class SelectConnection(BaseConnection[IOLoop]):
2425
def __init__(
2526
self,
2627
parameters: Parameters | None = None,
27-
on_open_callback: Callable[[Connection], object] | None = None,
28-
on_open_error_callback: Callable[[Connection, BaseException], object] | None = None,
29-
on_close_callback: Callable[[Connection, BaseException], object] | None = None,
28+
on_open_callback: Callable[[Self], object] | None = None,
29+
on_open_error_callback: Callable[[Self, BaseException], object] | None = None,
30+
on_close_callback: Callable[[Self, BaseException], object] | None = None,
3031
custom_ioloop: IOLoop | AbstractIOServices | None = None,
3132
internal_connection_workflow: bool = True,
3233
) -> None: ...
3334
@classmethod
3435
def create_connection(
3536
cls,
3637
connection_configs: Sequence[Parameters],
37-
on_done: Callable[[Connection | AMQPConnectorException], object],
38+
on_done: Callable[[Self | AMQPConnectorException], object],
3839
custom_ioloop: IOLoop | None = None,
3940
workflow: AbstractAMQPConnectionWorkflow | None = None,
4041
) -> AbstractAMQPConnectionWorkflow: ...

stubs/pika/pika/adapters/tornado_connection.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ from _typeshed import Incomplete
22
from collections.abc import Callable, Sequence
33
from logging import Logger
44
from typing import TypeAlias
5+
from typing_extensions import Self
56

67
from pika.adapters.base_connection import BaseConnection
78
from pika.adapters.utils.connection_workflow import AbstractAMQPConnectionWorkflow, AMQPConnectorException
89
from pika.adapters.utils.nbio_interface import AbstractIOServices
9-
from pika.connection import Connection, Parameters
10+
from pika.connection import Parameters
1011

1112
_IOLoop: TypeAlias = Incomplete # actual type is tornado.ioloop.IOLoop
1213

@@ -16,17 +17,17 @@ class TornadoConnection(BaseConnection[_IOLoop]):
1617
def __init__(
1718
self,
1819
parameters: Parameters | None = None,
19-
on_open_callback: Callable[[Connection], object] | None = None,
20-
on_open_error_callback: Callable[[Connection, BaseException], object] | None = None,
21-
on_close_callback: Callable[[Connection, BaseException], object] | None = None,
20+
on_open_callback: Callable[[Self], object] | None = None,
21+
on_open_error_callback: Callable[[Self, BaseException], object] | None = None,
22+
on_close_callback: Callable[[Self, BaseException], object] | None = None,
2223
custom_ioloop: _IOLoop | AbstractIOServices | None = None,
2324
internal_connection_workflow: bool = True,
2425
) -> None: ...
2526
@classmethod
2627
def create_connection(
2728
cls,
2829
connection_configs: Sequence[Parameters],
29-
on_done: Callable[[Connection | AMQPConnectorException], object],
30+
on_done: Callable[[Self | AMQPConnectorException], object],
3031
custom_ioloop: _IOLoop | None = None,
3132
workflow: AbstractAMQPConnectionWorkflow | None = None,
3233
) -> AbstractAMQPConnectionWorkflow: ...

stubs/pika/pika/adapters/twisted_connection.pyi

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ from _typeshed import Incomplete
55
from collections.abc import Callable, Iterable, Mapping
66
from logging import Logger
77
from typing import Generic, NamedTuple, TypeVar
8+
from typing_extensions import Self
89

910
from pika import amqp_object
1011
from pika.adapters.utils.nbio_interface import AbstractTimerReference
@@ -137,9 +138,9 @@ class _TwistedConnectionAdapter(Connection):
137138
def __init__(
138139
self,
139140
parameters: Parameters | None,
140-
on_open_callback: Callable[[Connection], object] | None,
141-
on_open_error_callback: Callable[[Connection, BaseException], object] | None,
142-
on_close_callback: Callable[[Connection, Exception], object] | None,
141+
on_open_callback: Callable[[Self], object] | None,
142+
on_open_error_callback: Callable[[Self, BaseException], object] | None,
143+
on_close_callback: Callable[[Self, Exception], object] | None,
143144
custom_reactor: ReactorBase | None = None,
144145
) -> None: ...
145146
def connection_made(self, transport: ITransport) -> None: ...

0 commit comments

Comments
 (0)