Skip to content

Commit 7fb7cd8

Browse files
authored
Rename get_{sender,receiver} to new_{sender,receiver} (#49)
Using `get_` as a prefix gives the idea that one is always getting the same object, but these methods are indeed creating new objects.
2 parents 5b47b03 + ee3963d commit 7fb7cd8

File tree

13 files changed

+74
-70
lines changed

13 files changed

+74
-70
lines changed

RELEASE_NOTES.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ https://frequenz-floss.github.io/frequenz-channels-python/
99
For now the documentation is pretty scarce but we will be improving it with
1010
time.
1111

12-
## Upgrading
12+
## Upgrading (breaking changes)
1313

1414
* You need to make sure to use [timezone-aware] `datetime` objects when using
1515
the timestamp returned by [`Timer`], Otherwise you will get an exception.
1616

17+
* Channels methods `get_receiver()` and `get_sender()` have been renamed to
18+
`new_receiver()` and `new_sender()` respectively. This is to make it more
19+
clear that new objects are being created.
20+
1721
## New Features
1822

1923
<!-- Here goes the main new features and examples or instructions on how to use them -->

benchmarks/benchmark_anycast.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ async def benchmark_anycast(
4242
"""
4343
channels: List[Anycast[int]] = [Anycast(buffer_size) for _ in range(num_channels)]
4444
senders = [
45-
asyncio.create_task(send_msg(num_messages, bcast.get_sender()))
45+
asyncio.create_task(send_msg(num_messages, bcast.new_sender()))
4646
for bcast in channels
4747
]
4848

@@ -57,7 +57,7 @@ async def update_tracker_on_receive(chan: Receiver[int]) -> None:
5757
receivers = []
5858
for acast in channels:
5959
for _ in range(num_receivers):
60-
receivers.append(update_tracker_on_receive(acast.get_receiver()))
60+
receivers.append(update_tracker_on_receive(acast.new_receiver()))
6161

6262
receivers_runs = asyncio.gather(*receivers)
6363

benchmarks/benchmark_broadcast.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ async def benchmark_broadcast(
6262
"""
6363
channels: List[Broadcast[int]] = [Broadcast("meter") for _ in range(num_channels)]
6464
senders: List[asyncio.Task[Any]] = [
65-
asyncio.create_task(send_msg(num_messages, bcast.get_sender()))
65+
asyncio.create_task(send_msg(num_messages, bcast.new_sender()))
6666
for bcast in channels
6767
]
6868

@@ -75,7 +75,7 @@ async def update_tracker_on_receive(chan: Receiver[int]) -> None:
7575
receivers = []
7676
for bcast in channels:
7777
for _ in range(num_receivers):
78-
receivers.append(update_tracker_on_receive(bcast.get_receiver()))
78+
receivers.append(update_tracker_on_receive(bcast.new_receiver()))
7979

8080
receivers_runs = asyncio.gather(*receivers)
8181

@@ -104,11 +104,11 @@ async def benchmark_single_task_broadcast(
104104
int: Total number of messages received by all receivers.
105105
"""
106106
channels: List[Broadcast[int]] = [Broadcast("meter") for _ in range(num_channels)]
107-
senders = [b.get_sender() for b in channels]
107+
senders = [b.new_sender() for b in channels]
108108
recv_tracker = 0
109109

110110
receivers = [
111-
[bcast.get_receiver() for _ in range(num_receivers)] for bcast in channels
111+
[bcast.new_receiver() for _ in range(num_receivers)] for bcast in channels
112112
]
113113

114114
for ctr in range(num_messages):

src/frequenz/channels/anycast.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ async def recv(id: int, receiver: channel.Receiver) -> None:
5050
5151
acast = channel.Anycast()
5252
53-
sender = acast.get_sender()
54-
receiver_1 = acast.get_receiver()
53+
sender = acast.new_sender()
54+
receiver_1 = acast.new_receiver()
5555
5656
asyncio.create_task(send(sender))
5757
@@ -91,15 +91,15 @@ async def close(self) -> None:
9191
async with self.recv_cv:
9292
self.recv_cv.notify_all()
9393

94-
def get_sender(self) -> Sender[T]:
94+
def new_sender(self) -> Sender[T]:
9595
"""Create a new sender.
9696
9797
Returns:
9898
A Sender instance attached to the Anycast channel.
9999
"""
100100
return Sender(self)
101101

102-
def get_receiver(self) -> Receiver[T]:
102+
def new_receiver(self) -> Receiver[T]:
103103
"""Create a new receiver.
104104
105105
Returns:
@@ -111,7 +111,7 @@ def get_receiver(self) -> Receiver[T]:
111111
class Sender(BaseSender[T]):
112112
"""A sender to send messages to an Anycast channel.
113113
114-
Should not be created directly, but through the `Anycast.get_sender()`
114+
Should not be created directly, but through the `Anycast.ggetet_sender()`
115115
method.
116116
"""
117117

@@ -152,7 +152,7 @@ async def send(self, msg: T) -> bool:
152152
class Receiver(BaseReceiver[T]):
153153
"""A receiver to receive messages from an Anycast channel.
154154
155-
Should not be created directly, but through the `Anycast.get_receiver()`
155+
Should not be created directly, but through the `Anycast.new_receiver()`
156156
method.
157157
"""
158158

src/frequenz/channels/base_classes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def into_peekable(self) -> Peekable[T]:
141141
142142
Raises:
143143
NotImplementedError: when a `Receiver` implementation doesn't have
144-
a custom `get_peekable` implementation.
144+
a custom `into_peekable` implementation.
145145
"""
146146
raise NotImplementedError("This receiver does not implement `into_peekable`")
147147

src/frequenz/channels/bidirectional.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ def __init__(self, client_id: str, service_id: str) -> None:
2828
)
2929

3030
self._client_handle = BidirectionalHandle(
31-
self._request_channel.get_sender(),
32-
self._response_channel.get_receiver(),
31+
self._request_channel.new_sender(),
32+
self._response_channel.new_receiver(),
3333
)
3434
self._service_handle = BidirectionalHandle(
35-
self._response_channel.get_sender(),
36-
self._request_channel.get_receiver(),
35+
self._response_channel.new_sender(),
36+
self._request_channel.new_receiver(),
3737
)
3838

3939
@property

src/frequenz/channels/broadcast.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ async def recv(id: int, receiver: channel.Receiver) -> None:
5454
5555
bcast = channel.Broadcast()
5656
57-
sender = bcast.get_sender()
58-
receiver_1 = bcast.get_receiver()
57+
sender = bcast.new_sender()
58+
receiver_1 = bcast.new_receiver()
5959
6060
asyncio.create_task(send(sender))
6161
@@ -73,7 +73,7 @@ def __init__(self, name: str, resend_latest: bool = False) -> None:
7373
of data sent through it. Used to identify the channel in the
7474
logs.
7575
resend_latest: When True, every time a new receiver is created with
76-
`get_receiver`, it will automatically get sent the latest value
76+
`new_receiver`, it will automatically get sent the latest value
7777
on the channel. This allows new receivers on slow streams to
7878
get the latest value as soon as they are created, without having
7979
to wait for the next message on the channel to arrive.
@@ -102,15 +102,15 @@ async def close(self) -> None:
102102
async with self.recv_cv:
103103
self.recv_cv.notify_all()
104104

105-
def get_sender(self) -> Sender[T]:
105+
def new_sender(self) -> Sender[T]:
106106
"""Create a new broadcast sender.
107107
108108
Returns:
109109
A Sender instance attached to the broadcast channel.
110110
"""
111111
return Sender(self)
112112

113-
def get_receiver(
113+
def new_receiver(
114114
self, name: Optional[str] = None, maxsize: int = 50
115115
) -> Receiver[T]:
116116
"""Create a new broadcast receiver.
@@ -135,7 +135,7 @@ def get_receiver(
135135
recv.enqueue(self._latest)
136136
return recv
137137

138-
def get_peekable(self) -> Peekable[T]:
138+
def new_peekable(self) -> Peekable[T]:
139139
"""Create a new Peekable for the broadcast channel.
140140
141141
A Peekable provides a [peek()][frequenz.channels.Peekable.peek] method
@@ -152,7 +152,7 @@ class Sender(BaseSender[T]):
152152
"""A sender to send messages to the broadcast channel.
153153
154154
Should not be created directly, but through the
155-
[Broadcast.get_sender()][frequenz.channels.Broadcast.get_sender]
155+
[Broadcast.new_sender()][frequenz.channels.Broadcast.new_sender]
156156
method.
157157
"""
158158

@@ -196,7 +196,7 @@ class Receiver(BufferedReceiver[T]):
196196
"""A receiver to receive messages from the broadcast channel.
197197
198198
Should not be created directly, but through the
199-
[Broadcast.get_receiver()][frequenz.channels.Broadcast.get_receiver]
199+
[Broadcast.new_receiver()][frequenz.channels.Broadcast.new_receiver]
200200
method.
201201
"""
202202

tests/test_anycast.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ async def update_tracker_on_receive(receiver_id: int, chan: Receiver[int]) -> No
4343

4444
receivers = []
4545
for ctr in range(num_receivers):
46-
receivers.append(update_tracker_on_receive(ctr, acast.get_receiver()))
46+
receivers.append(update_tracker_on_receive(ctr, acast.new_receiver()))
4747

4848
# get one more sender and receiver to test channel operations after the
4949
# channel is closed.
50-
after_close_receiver = acast.get_receiver()
51-
after_close_sender = acast.get_sender()
50+
after_close_receiver = acast.new_receiver()
51+
after_close_sender = acast.new_sender()
5252

5353
receivers_runs = asyncio.gather(*receivers)
5454
senders = []
5555
for ctr in range(num_senders):
56-
senders.append(send_msg(acast.get_sender()))
56+
senders.append(send_msg(acast.new_sender()))
5757

5858
await asyncio.gather(*senders)
5959
await acast.close()
@@ -75,8 +75,8 @@ async def test_anycast_after_close() -> None:
7575
"""Ensure closed channels can't get new messages."""
7676
acast: Anycast[int] = Anycast()
7777

78-
receiver = acast.get_receiver()
79-
sender = acast.get_sender()
78+
receiver = acast.new_receiver()
79+
sender = acast.new_sender()
8080

8181
assert await sender.send(2) is True
8282

@@ -94,8 +94,8 @@ async def test_anycast_full() -> None:
9494
timeout = 0.2
9595
acast: Anycast[int] = Anycast(buffer_size)
9696

97-
receiver = acast.get_receiver()
98-
sender = acast.get_sender()
97+
receiver = acast.new_receiver()
98+
sender = acast.new_sender()
9999

100100
timeout_at = 0
101101
for ctr in range(buffer_size + 1):
@@ -137,8 +137,8 @@ async def test_anycast_async_iterator() -> None:
137137
"""Check that the anycast receiver works as an async iterator."""
138138
acast: Anycast[str] = Anycast()
139139

140-
sender = acast.get_sender()
141-
receiver = acast.get_receiver()
140+
sender = acast.new_sender()
141+
receiver = acast.new_receiver()
142142

143143
async def send_values() -> None:
144144
for val in ["one", "two", "three", "four", "five"]:
@@ -159,10 +159,10 @@ async def send_values() -> None:
159159
async def test_anycast_map() -> None:
160160
"""Ensure map runs on all incoming messages."""
161161
chan = Anycast[int]()
162-
sender = chan.get_sender()
162+
sender = chan.new_sender()
163163

164164
# transform int receiver into bool receiver.
165-
receiver: Receiver[bool] = chan.get_receiver().map(lambda num: num > 10)
165+
receiver: Receiver[bool] = chan.new_receiver().map(lambda num: num > 10)
166166

167167
await sender.send(8)
168168
await sender.send(12)

tests/test_broadcast.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ async def update_tracker_on_receive(receiver_id: int, chan: Receiver[int]) -> No
4141

4242
receivers = []
4343
for ctr in range(num_receivers):
44-
receivers.append(update_tracker_on_receive(ctr, bcast.get_receiver()))
44+
receivers.append(update_tracker_on_receive(ctr, bcast.new_receiver()))
4545

4646
receivers_runs = asyncio.gather(*receivers)
4747
senders = []
4848
for ctr in range(num_senders):
49-
senders.append(send_msg(bcast.get_sender()))
49+
senders.append(send_msg(bcast.new_sender()))
5050

5151
await asyncio.gather(*senders)
5252
await bcast.close()
@@ -64,8 +64,8 @@ async def test_broadcast_after_close() -> None:
6464
"""Ensure closed channels can't get new messages."""
6565
bcast: Broadcast[int] = Broadcast("meter_5")
6666

67-
receiver = bcast.get_receiver()
68-
sender = bcast.get_sender()
67+
receiver = bcast.new_receiver()
68+
sender = bcast.new_sender()
6969

7070
await bcast.close()
7171

@@ -80,10 +80,10 @@ async def test_broadcast_overflow() -> None:
8080

8181
big_recv_size = 10
8282
small_recv_size = int(big_recv_size / 2)
83-
sender = bcast.get_sender()
83+
sender = bcast.new_sender()
8484

85-
big_receiver = bcast.get_receiver("named-recv", big_recv_size)
86-
small_receiver = bcast.get_receiver(None, small_recv_size)
85+
big_receiver = bcast.new_receiver("named-recv", big_recv_size)
86+
small_receiver = bcast.new_receiver(None, small_recv_size)
8787

8888
async def drain_receivers() -> Tuple[int, int]:
8989
big_sum = 0
@@ -129,11 +129,11 @@ async def test_broadcast_resend_latest() -> None:
129129
"""Check if new receivers get the latest value when resend_latest is set."""
130130
bcast: Broadcast[int] = Broadcast("new_recv_test", resend_latest=True)
131131

132-
sender = bcast.get_sender()
133-
old_recv = bcast.get_receiver()
132+
sender = bcast.new_sender()
133+
old_recv = bcast.new_receiver()
134134
for val in range(0, 10):
135135
await sender.send(val)
136-
new_recv = bcast.get_receiver()
136+
new_recv = bcast.new_receiver()
137137

138138
await sender.send(100)
139139

@@ -146,11 +146,11 @@ async def test_broadcast_no_resend_latest() -> None:
146146
"""Ensure new receivers don't get the latest value when resend_latest isn't set."""
147147
bcast: Broadcast[int] = Broadcast("new_recv_test", resend_latest=False)
148148

149-
sender = bcast.get_sender()
150-
old_recv = bcast.get_receiver()
149+
sender = bcast.new_sender()
150+
old_recv = bcast.new_receiver()
151151
for val in range(0, 10):
152152
await sender.send(val)
153-
new_recv = bcast.get_receiver()
153+
new_recv = bcast.new_receiver()
154154

155155
await sender.send(100)
156156

@@ -161,9 +161,9 @@ async def test_broadcast_no_resend_latest() -> None:
161161
async def test_broadcast_peek() -> None:
162162
"""Ensure we are able to peek into broadcast channels."""
163163
bcast: Broadcast[int] = Broadcast("peek-test")
164-
receiver = bcast.get_receiver()
164+
receiver = bcast.new_receiver()
165165
peekable = receiver.into_peekable()
166-
sender = bcast.get_sender()
166+
sender = bcast.new_sender()
167167

168168
with pytest.raises(EOFError):
169169
await receiver.receive()
@@ -188,8 +188,8 @@ async def test_broadcast_async_iterator() -> None:
188188
"""Check that the broadcast receiver works as an async iterator."""
189189
bcast: Broadcast[int] = Broadcast("iter_test")
190190

191-
sender = bcast.get_sender()
192-
receiver = bcast.get_receiver()
191+
sender = bcast.new_sender()
192+
receiver = bcast.new_receiver()
193193

194194
async def send_values() -> None:
195195
for val in range(0, 10):
@@ -210,10 +210,10 @@ async def send_values() -> None:
210210
async def test_broadcast_map() -> None:
211211
"""Ensure map runs on all incoming messages."""
212212
chan = Broadcast[int]("input-chan")
213-
sender = chan.get_sender()
213+
sender = chan.new_sender()
214214

215215
# transform int receiver into bool receiver.
216-
receiver: Receiver[bool] = chan.get_receiver().map(lambda num: num > 10)
216+
receiver: Receiver[bool] = chan.new_receiver().map(lambda num: num > 10)
217217

218218
await sender.send(8)
219219
await sender.send(12)
@@ -225,10 +225,10 @@ async def test_broadcast_map() -> None:
225225
async def test_broadcast_receiver_drop() -> None:
226226
"""Ensure deleted receivers get cleaned up."""
227227
chan = Broadcast[int]("input-chan")
228-
sender = chan.get_sender()
228+
sender = chan.new_sender()
229229

230-
receiver1 = chan.get_receiver()
231-
receiver2 = chan.get_receiver()
230+
receiver1 = chan.new_receiver()
231+
receiver2 = chan.new_receiver()
232232

233233
await sender.send(10)
234234

0 commit comments

Comments
 (0)