|
16 | 16 | from ._exceptions import ChannelClosedError |
17 | 17 | from ._generic import ChannelMessageT |
18 | 18 | from ._receiver import Receiver, ReceiverStoppedError |
19 | | -from ._sender import Sender, SenderClosedError, SenderError |
| 19 | +from ._sender import ClonableSubscribableSender, SenderClosedError, SenderError |
20 | 20 |
|
21 | 21 | _logger = logging.getLogger(__name__) |
22 | 22 |
|
@@ -269,7 +269,7 @@ async def close(self) -> None: # noqa: D402 |
269 | 269 | """Close the channel, deprecated alias for `aclose()`.""" # noqa: D402 |
270 | 270 | return await self.aclose() |
271 | 271 |
|
272 | | - def new_sender(self) -> Sender[ChannelMessageT]: |
| 272 | + def new_sender(self) -> ClonableSubscribableSender[ChannelMessageT]: |
273 | 273 | """Return a new sender attached to this channel.""" |
274 | 274 | return _Sender(self) |
275 | 275 |
|
@@ -317,7 +317,7 @@ def __repr__(self) -> str: |
317 | 317 | _T = TypeVar("_T") |
318 | 318 |
|
319 | 319 |
|
320 | | -class _Sender(Sender[_T]): |
| 320 | +class _Sender(ClonableSubscribableSender[_T]): |
321 | 321 | """A sender to send messages to the broadcast channel. |
322 | 322 |
|
323 | 323 | Should not be created directly, but through the |
@@ -381,6 +381,23 @@ async def aclose(self) -> None: |
381 | 381 | """ |
382 | 382 | self._closed = True |
383 | 383 |
|
| 384 | + @override |
| 385 | + def clone(self) -> _Sender[_T]: |
| 386 | + """Return a clone of this sender.""" |
| 387 | + return _Sender(self._channel) |
| 388 | + |
| 389 | + @override |
| 390 | + def subscribe( |
| 391 | + self, |
| 392 | + name: str | None = None, |
| 393 | + limit: int = 50, |
| 394 | + warn_on_overflow: bool = True, |
| 395 | + ) -> Receiver[_T]: |
| 396 | + """Return a new receiver attached to this sender's channel.""" |
| 397 | + return self._channel.new_receiver( |
| 398 | + name=name, limit=limit, warn_on_overflow=warn_on_overflow |
| 399 | + ) |
| 400 | + |
384 | 401 | def __str__(self) -> str: |
385 | 402 | """Return a string representation of this sender.""" |
386 | 403 | return f"{self._channel}:{type(self).__name__}" |
|
0 commit comments