Skip to content

Commit 738ebaf

Browse files
Add maxsize argument when subscribing for the component data
Default maxsize=50 is not working in case when user is interested in the latest component data only. maxsize has default constant argument specified outsided. That way this constanst can be reused and this PR is not breaking change. Signed-off-by: ela-kotulska-frequenz <[email protected]>
1 parent 6b7f178 commit 738ebaf

File tree

3 files changed

+48
-8
lines changed

3 files changed

+48
-8
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# License: MIT
2+
# Copyright © 2023 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Module with constants shared between instances of the sdk.
5+
6+
To be replaced by ConfigManager.
7+
"""
8+
9+
RECEIVER_MAX_SIZE = 50
10+
"""Default buffer size of the receiver."""

src/frequenz/sdk/microgrid/client/_client.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from frequenz.channels import Broadcast, Receiver, Sender
2626
from google.protobuf.empty_pb2 import Empty # pylint: disable=no-name-in-module
2727

28+
from ..._internal._constants import RECEIVER_MAX_SIZE
2829
from ..component import (
2930
BatteryData,
3031
Component,
@@ -90,6 +91,7 @@ async def connections(
9091
async def meter_data(
9192
self,
9293
component_id: int,
94+
maxsize: int = RECEIVER_MAX_SIZE,
9395
) -> Receiver[MeterData]:
9496
"""Return a channel receiver that provides a `MeterData` stream.
9597
@@ -99,6 +101,7 @@ async def meter_data(
99101
100102
Args:
101103
component_id: id of the meter to get data for.
104+
maxsize: Size of the receiver's buffer.
102105
103106
Returns:
104107
A channel receiver that provides realtime meter data.
@@ -108,6 +111,7 @@ async def meter_data(
108111
async def battery_data(
109112
self,
110113
component_id: int,
114+
maxsize: int = RECEIVER_MAX_SIZE,
111115
) -> Receiver[BatteryData]:
112116
"""Return a channel receiver that provides a `BatteryData` stream.
113117
@@ -117,6 +121,7 @@ async def battery_data(
117121
118122
Args:
119123
component_id: id of the battery to get data for.
124+
maxsize: Size of the receiver's buffer.
120125
121126
Returns:
122127
A channel receiver that provides realtime battery data.
@@ -126,6 +131,7 @@ async def battery_data(
126131
async def inverter_data(
127132
self,
128133
component_id: int,
134+
maxsize: int = RECEIVER_MAX_SIZE,
129135
) -> Receiver[InverterData]:
130136
"""Return a channel receiver that provides an `InverterData` stream.
131137
@@ -135,6 +141,7 @@ async def inverter_data(
135141
136142
Args:
137143
component_id: id of the inverter to get data for.
144+
maxsize: Size of the receiver's buffer.
138145
139146
Returns:
140147
A channel receiver that provides realtime inverter data.
@@ -144,6 +151,7 @@ async def inverter_data(
144151
async def ev_charger_data(
145152
self,
146153
component_id: int,
154+
maxsize: int = RECEIVER_MAX_SIZE,
147155
) -> Receiver[EVChargerData]:
148156
"""Return a channel receiver that provides an `EvChargeData` stream.
149157
@@ -153,6 +161,7 @@ async def ev_charger_data(
153161
154162
Args:
155163
component_id: id of the ev charger to get data for.
164+
maxsize: Size of the receiver's buffer.
156165
157166
Returns:
158167
A channel receiver that provides realtime ev charger data.
@@ -440,6 +449,7 @@ async def _expect_category(
440449
async def meter_data(
441450
self,
442451
component_id: int,
452+
maxsize: int = RECEIVER_MAX_SIZE,
443453
) -> Receiver[MeterData]:
444454
"""Return a channel receiver that provides a `MeterData` stream.
445455
@@ -452,6 +462,7 @@ async def meter_data(
452462
453463
Args:
454464
component_id: id of the meter to get data for.
465+
maxsize: Size of the receiver's buffer.
455466
456467
Returns:
457468
A channel receiver that provides realtime meter data.
@@ -463,11 +474,12 @@ async def meter_data(
463474
return self._get_component_data_channel(
464475
component_id,
465476
MeterData.from_proto,
466-
).new_receiver()
477+
).new_receiver(maxsize=maxsize)
467478

468479
async def battery_data(
469480
self,
470481
component_id: int,
482+
maxsize: int = RECEIVER_MAX_SIZE,
471483
) -> Receiver[BatteryData]:
472484
"""Return a channel receiver that provides a `BatteryData` stream.
473485
@@ -480,6 +492,7 @@ async def battery_data(
480492
481493
Args:
482494
component_id: id of the battery to get data for.
495+
maxsize: Size of the receiver's buffer.
483496
484497
Returns:
485498
A channel receiver that provides realtime battery data.
@@ -491,11 +504,12 @@ async def battery_data(
491504
return self._get_component_data_channel(
492505
component_id,
493506
BatteryData.from_proto,
494-
).new_receiver()
507+
).new_receiver(maxsize=maxsize)
495508

496509
async def inverter_data(
497510
self,
498511
component_id: int,
512+
maxsize: int = RECEIVER_MAX_SIZE,
499513
) -> Receiver[InverterData]:
500514
"""Return a channel receiver that provides an `InverterData` stream.
501515
@@ -508,6 +522,7 @@ async def inverter_data(
508522
509523
Args:
510524
component_id: id of the inverter to get data for.
525+
maxsize: Size of the receiver's buffer.
511526
512527
Returns:
513528
A channel receiver that provides realtime inverter data.
@@ -519,11 +534,12 @@ async def inverter_data(
519534
return self._get_component_data_channel(
520535
component_id,
521536
InverterData.from_proto,
522-
).new_receiver()
537+
).new_receiver(maxsize=maxsize)
523538

524539
async def ev_charger_data(
525540
self,
526541
component_id: int,
542+
maxsize: int = RECEIVER_MAX_SIZE,
527543
) -> Receiver[EVChargerData]:
528544
"""Return a channel receiver that provides an `EvChargeData` stream.
529545
@@ -536,6 +552,7 @@ async def ev_charger_data(
536552
537553
Args:
538554
component_id: id of the ev charger to get data for.
555+
maxsize: Size of the receiver's buffer.
539556
540557
Returns:
541558
A channel receiver that provides realtime ev charger data.
@@ -547,7 +564,7 @@ async def ev_charger_data(
547564
return self._get_component_data_channel(
548565
component_id,
549566
EVChargerData.from_proto,
550-
).new_receiver()
567+
).new_receiver(maxsize=maxsize)
551568

552569
async def set_power(self, component_id: int, power_w: int) -> Empty:
553570
"""Send request to the Microgrid to set power for component.

tests/utils/mock_microgrid.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from google.protobuf.empty_pb2 import Empty # pylint: disable=no-name-in-module
1111
from pytest_mock import MockerFixture
1212

13+
from frequenz.sdk._internal._constants import RECEIVER_MAX_SIZE
1314
from frequenz.sdk.microgrid import ConnectionManager
1415
from frequenz.sdk.microgrid._graph import ComponentGraph, _MicrogridComponentGraph
1516
from frequenz.sdk.microgrid.client import Connection
@@ -264,6 +265,7 @@ def _get_battery_receiver(
264265
self,
265266
component_id: int,
266267
channels: Dict[int, Broadcast[BatteryData]],
268+
maxsize: int = RECEIVER_MAX_SIZE,
267269
) -> Receiver[BatteryData]:
268270
"""Return receiver of the broadcast channel for given component_id.
269271
@@ -274,12 +276,15 @@ def _get_battery_receiver(
274276
Returns:
275277
Receiver from the given channels.
276278
"""
277-
return channels[component_id].new_receiver("component" + str(component_id))
279+
return channels[component_id].new_receiver(
280+
"component" + str(component_id), maxsize=maxsize
281+
)
278282

279283
def _get_meter_receiver(
280284
self,
281285
component_id: int,
282286
channels: Dict[int, Broadcast[MeterData]],
287+
maxsize: int = RECEIVER_MAX_SIZE,
283288
) -> Receiver[MeterData]:
284289
"""Return receiver of the broadcast channel for given component_id.
285290
@@ -290,12 +295,15 @@ def _get_meter_receiver(
290295
Returns:
291296
Receiver from the given channels.
292297
"""
293-
return channels[component_id].new_receiver("component" + str(component_id))
298+
return channels[component_id].new_receiver(
299+
"component" + str(component_id), maxsize=maxsize
300+
)
294301

295302
def _get_ev_charger_receiver(
296303
self,
297304
component_id: int,
298305
channels: Dict[int, Broadcast[EVChargerData]],
306+
maxsize: int = RECEIVER_MAX_SIZE,
299307
) -> Receiver[EVChargerData]:
300308
"""Return receiver of the broadcast channel for given component_id.
301309
@@ -306,12 +314,15 @@ def _get_ev_charger_receiver(
306314
Returns:
307315
Receiver from the given channels.
308316
"""
309-
return channels[component_id].new_receiver("component" + str(component_id))
317+
return channels[component_id].new_receiver(
318+
"component" + str(component_id), maxsize=maxsize
319+
)
310320

311321
def _get_inverter_receiver(
312322
self,
313323
component_id: int,
314324
channels: Dict[int, Broadcast[InverterData]],
325+
maxsize: int = RECEIVER_MAX_SIZE,
315326
) -> Receiver[InverterData]:
316327
"""Return receiver of the broadcast channel for given component_id.
317328
@@ -322,4 +333,6 @@ def _get_inverter_receiver(
322333
Returns:
323334
Receiver from the given channels.
324335
"""
325-
return channels[component_id].new_receiver("component" + str(component_id))
336+
return channels[component_id].new_receiver(
337+
"component" + str(component_id), maxsize=maxsize
338+
)

0 commit comments

Comments
 (0)