Skip to content

Commit e1eff43

Browse files
committed
Add make_broadcast function and deprecate Broadcast class
The `make_broadcast` function would only return a sender and a receiver from an auto-closing channel. Signed-off-by: Sahas Subramanian <sahas.subramanian@proton.me>
1 parent 27ebc87 commit e1eff43

2 files changed

Lines changed: 43 additions & 2 deletions

File tree

src/frequenz/channels/__init__.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
"""
8181

8282
from ._anycast import Anycast
83-
from ._broadcast import Broadcast
83+
from ._broadcast import Broadcast, BroadcastChannel
8484
from ._exceptions import ChannelClosedError, ChannelError, Error
8585
from ._generic import (
8686
ChannelMessageT,
@@ -101,14 +101,24 @@
101101
select,
102102
selected_from,
103103
)
104-
from ._sender import Sender, SenderClosedError, SenderError
104+
from ._sender import (
105+
ClonableSender,
106+
ClonableSubscribableSender,
107+
Sender,
108+
SenderClosedError,
109+
SenderError,
110+
SubscribableSender,
111+
)
105112

106113
__all__ = [
107114
"Anycast",
108115
"Broadcast",
116+
"BroadcastChannel",
109117
"ChannelClosedError",
110118
"ChannelError",
111119
"ChannelMessageT",
120+
"ClonableSender",
121+
"ClonableSubscribableSender",
112122
"Error",
113123
"ErroredChannelT_co",
114124
"LatestValueCache",
@@ -126,6 +136,7 @@
126136
"SenderError",
127137
"SenderMessageT_co",
128138
"SenderMessageT_contra",
139+
"SubscribableSender",
129140
"UnhandledSelectedError",
130141
"merge",
131142
"select",

src/frequenz/channels/_broadcast.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
_logger = logging.getLogger(__name__)
2222

2323

24+
@deprecated("Please use BroadcastChannel channel instead.")
2425
class Broadcast( # pylint: disable=too-many-instance-attributes
2526
Generic[ChannelMessageT]
2627
):
@@ -604,3 +605,32 @@ def __repr__(self) -> str:
604605
f"{type(self).__name__}(name={self._name!r}, limit={limit!r}, "
605606
f"{self._channel!r}):<id={id(self)!r}, used={len(self._q)!r}>"
606607
)
608+
609+
610+
class BroadcastChannel(
611+
tuple[BroadcastSender[ChannelMessageT], BroadcastReceiver[ChannelMessageT]]
612+
):
613+
"""A broadcast channel, deprecated alias for Broadcast."""
614+
615+
def __new__(
616+
cls,
617+
name: str,
618+
resend_latest: bool = False,
619+
limit: int = 50,
620+
warn_on_overflow: bool = True,
621+
) -> BroadcastChannel[ChannelMessageT]:
622+
"""Create a new broadcast channel, deprecated alias for Broadcast."""
623+
channel = Broadcast[ChannelMessageT](
624+
name=name, resend_latest=resend_latest, auto_close=True
625+
)
626+
return tuple.__new__(
627+
cls,
628+
(
629+
channel.new_sender(),
630+
channel.new_receiver(
631+
name=f"{name}_receiver",
632+
limit=limit,
633+
warn_on_overflow=warn_on_overflow,
634+
),
635+
),
636+
)

0 commit comments

Comments
 (0)