Skip to content

Commit 50f89d4

Browse files
Rename some internal classes
... battery_status.py and battery_pool_status.py Signed-off-by: ela-kotulska-frequenz <[email protected]>
1 parent fd38ff2 commit 50f89d4

File tree

3 files changed

+46
-36
lines changed

3 files changed

+46
-36
lines changed

src/frequenz/sdk/actor/power_distributing/_battery_pool_status.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from frequenz.channels.util import MergeNamed
1414

1515
from ..._internal.asyncio import cancel_and_await
16-
from ._battery_status import BatteryStatus, BatteryStatusTracker, RequestResult
16+
from ._battery_status import BatteryStatus, BatteryStatusTracker, SetPowerResult
1717

1818
_logger = logging.getLogger(__name__)
1919

@@ -94,7 +94,7 @@ def __init__(
9494
self._current_status = Status(working=set(), uncertain=set())
9595

9696
# Channel for sending results of requests to the batteries
97-
request_result_channel = Broadcast[RequestResult]("battery_request_status")
97+
request_result_channel = Broadcast[SetPowerResult]("battery_request_status")
9898
self._request_result_sender = request_result_channel.new_sender()
9999

100100
self._batteries: Dict[str, BatteryStatusTracker] = {}
@@ -179,7 +179,7 @@ async def update_status(
179179
failed_batteries: Batteries that failed request
180180
"""
181181
await self._request_result_sender.send(
182-
RequestResult(succeed_batteries, failed_batteries)
182+
SetPowerResult(succeed_batteries, failed_batteries)
183183
)
184184

185185
def get_working_batteries(self, batteries: Set[int]) -> Set[int]:

src/frequenz/sdk/actor/power_distributing/_battery_status.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from dataclasses import dataclass
1010
from datetime import datetime, timedelta, timezone
1111
from enum import Enum
12-
from typing import Generic, Iterable, Optional, Set, TypeVar, Union
12+
from typing import Iterable, Optional, Set, TypeVar, Union
1313

1414
from frequenz.api.microgrid.battery_pb2 import ComponentState as BatteryComponentState
1515
from frequenz.api.microgrid.battery_pb2 import RelayState as BatteryRelayState
@@ -46,7 +46,7 @@ class BatteryStatus(Enum):
4646

4747

4848
@dataclass
49-
class RequestResult:
49+
class SetPowerResult:
5050
"""Information what batteries succeed or failed the last request."""
5151

5252
succeed: Iterable[int]
@@ -60,7 +60,7 @@ class RequestResult:
6060

6161

6262
@dataclass
63-
class _ComponentData(Generic[T]):
63+
class _ComponentStreamStatus:
6464
component_id: int
6565
last_msg_timestamp: datetime = datetime.now(tz=timezone.utc)
6666
last_msg_correct: bool = False
@@ -156,7 +156,7 @@ def __init__( # pylint: disable=too-many-arguments
156156
max_data_age_sec: float,
157157
max_blocking_duration_sec: float,
158158
status_sender: Sender[BatteryStatus],
159-
request_result_receiver: Receiver[RequestResult],
159+
request_result_receiver: Receiver[SetPowerResult],
160160
) -> None:
161161
"""Create class instance.
162162
@@ -185,8 +185,8 @@ def __init__( # pylint: disable=too-many-arguments
185185
if inverter_id is None:
186186
raise RuntimeError(f"Can't find inverter adjacent to battery: {battery_id}")
187187

188-
self._battery = _ComponentData[BatteryData](battery_id)
189-
self._inverter = _ComponentData[InverterData](inverter_id)
188+
self._battery = _ComponentStreamStatus(battery_id)
189+
self._inverter = _ComponentStreamStatus(inverter_id)
190190

191191
# Select needs receivers that can be get in async way only.
192192
self._select = None
@@ -214,7 +214,7 @@ async def stop(self) -> None:
214214
async def _run(
215215
self,
216216
status_sender: Sender[BatteryStatus],
217-
request_result_receiver: Receiver[RequestResult],
217+
request_result_receiver: Receiver[SetPowerResult],
218218
) -> None:
219219
"""Process data from the components and request_result_receiver.
220220
@@ -265,7 +265,7 @@ def _update_status(self, select: Select) -> Optional[BatteryStatus]:
265265
self._inverter.last_msg_timestamp = msg.inner.timestamp
266266

267267
elif msg := select.request_result:
268-
result: RequestResult = msg.inner
268+
result: SetPowerResult = msg.inner
269269
if self.battery_id in result.succeed:
270270
self._blocking_status.unblock()
271271

tests/actor/test_battery_status.py

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from frequenz.sdk.actor.power_distributing._battery_status import (
3131
BatteryStatus,
3232
BatteryStatusTracker,
33-
RequestResult,
33+
SetPowerResult,
3434
)
3535
from frequenz.sdk.microgrid.client import Connection
3636
from frequenz.sdk.microgrid.component import (
@@ -194,14 +194,14 @@ def __init__(
194194
self,
195195
battery: Optional[BatteryData] = None,
196196
inverter: Optional[InverterData] = None,
197-
request_result: Optional[RequestResult] = None,
197+
request_result: Optional[SetPowerResult] = None,
198198
) -> None:
199199
"""Create FakeSelect instance
200200
201201
Args:
202202
battery: Expected battery message. Defaults to None.
203203
inverter: Expected inverter message. Defaults to None.
204-
request_result: Expected RequestResult message. Defaults to None.
204+
request_result: Expected SetPowerResult message. Defaults to None.
205205
"""
206206
self.battery = None if battery is None else Message(battery)
207207
self.inverter = None if inverter is None else Message(inverter)
@@ -245,7 +245,7 @@ async def test_sync_update_status_with_messages(
245245
mock_microgrid: mock_microgrid fixture
246246
"""
247247
status_channel = Broadcast[BatteryStatus]("battery_status")
248-
request_result_channel = Broadcast[RequestResult]("request_result")
248+
request_result_channel = Broadcast[SetPowerResult]("request_result")
249249

250250
tracker = BatteryStatusTracker(
251251
BATTERY_ID,
@@ -382,7 +382,7 @@ async def test_sync_update_status_with_messages(
382382
async def test_sync_blocking_feature(
383383
self, mock_microgrid: MockMicrogridClient
384384
) -> None:
385-
"""Test if status changes when RequestResult message is received.
385+
"""Test if status changes when SetPowerResult message is received.
386386
387387
Tests uses FakeSelect to test status in sync way.
388388
Otherwise we would have lots of async calls and waiting.
@@ -392,7 +392,7 @@ async def test_sync_blocking_feature(
392392
"""
393393

394394
status_channel = Broadcast[BatteryStatus]("battery_status")
395-
request_result_channel = Broadcast[RequestResult]("request_result")
395+
request_result_channel = Broadcast[SetPowerResult]("request_result")
396396

397397
# increase max_data_age_sec for blocking tests.
398398
# Otherwise it will block blocking.
@@ -417,7 +417,9 @@ async def test_sync_blocking_feature(
417417
assert tracker._update_status(select) is None # type: ignore[arg-type]
418418

419419
# message is not correct, component should not block.
420-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
420+
select = FakeSelect(
421+
request_result=SetPowerResult(succeed={1}, failed={106})
422+
)
421423
assert tracker._update_status(select) is None # type: ignore[arg-type]
422424

423425
select = FakeSelect(battery=battery_data(component_id=BATTERY_ID))
@@ -428,15 +430,15 @@ async def test_sync_blocking_feature(
428430
for timeout in expected_blocking_timeout:
429431
# message is not correct, component should not block.
430432
select = FakeSelect(
431-
request_result=RequestResult(succeed={1}, failed={106})
433+
request_result=SetPowerResult(succeed={1}, failed={106})
432434
)
433435
status = tracker._update_status(select) # type: ignore[arg-type]
434436
assert status is BatteryStatus.UNCERTAIN
435437

436438
# Battery should be still blocked, nothing should happen
437439
time.shift(timeout - 1)
438440
select = FakeSelect(
439-
request_result=RequestResult(succeed={1}, failed={106})
441+
request_result=SetPowerResult(succeed={1}, failed={106})
440442
)
441443
assert tracker._update_status(select) is None # type: ignore[arg-type]
442444

@@ -449,7 +451,9 @@ async def test_sync_blocking_feature(
449451
assert status is BatteryStatus.WORKING
450452

451453
# should block for 30 sec
452-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
454+
select = FakeSelect(
455+
request_result=SetPowerResult(succeed={1}, failed={106})
456+
)
453457
status = tracker._update_status(select) # type: ignore[arg-type]
454458
assert status is BatteryStatus.UNCERTAIN
455459
time.shift(28)
@@ -469,14 +473,16 @@ async def test_sync_blocking_feature(
469473
assert status is BatteryStatus.WORKING
470474

471475
# should block for 30 sec
472-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
476+
select = FakeSelect(
477+
request_result=SetPowerResult(succeed={1}, failed={106})
478+
)
473479
status = tracker._update_status(select) # type: ignore[arg-type]
474480
assert status is BatteryStatus.UNCERTAIN
475481
time.shift(28)
476482

477483
# If battery succeed, then it should unblock.
478484
select = FakeSelect(
479-
request_result=RequestResult(succeed={106}, failed={206})
485+
request_result=SetPowerResult(succeed={106}, failed={206})
480486
)
481487
status = tracker._update_status(select) # type: ignore[arg-type]
482488
assert status is BatteryStatus.WORKING
@@ -486,7 +492,7 @@ async def test_sync_blocking_feature(
486492
async def test_sync_blocking_interrupted_with_with_max_data(
487493
self, mock_microgrid: MockMicrogridClient
488494
) -> None:
489-
"""Test if status changes when RequestResult message is received.
495+
"""Test if status changes when SetPowerResult message is received.
490496
491497
Tests uses FakeSelect to test status in sync way.
492498
Otherwise we would have lots of async calls and waiting.
@@ -496,7 +502,7 @@ async def test_sync_blocking_interrupted_with_with_max_data(
496502
"""
497503

498504
status_channel = Broadcast[BatteryStatus]("battery_status")
499-
request_result_channel = Broadcast[RequestResult]("request_result")
505+
request_result_channel = Broadcast[SetPowerResult]("request_result")
500506

501507
tracker = BatteryStatusTracker(
502508
BATTERY_ID,
@@ -514,21 +520,25 @@ async def test_sync_blocking_interrupted_with_with_max_data(
514520
status = tracker._update_status(select) # type: ignore[arg-type]
515521
assert status is BatteryStatus.WORKING
516522

517-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
523+
select = FakeSelect(
524+
request_result=SetPowerResult(succeed={1}, failed={106})
525+
)
518526
status = tracker._update_status(select) # type: ignore[arg-type]
519527
assert status is BatteryStatus.UNCERTAIN
520528

521529
expected_blocking_timeout = [1, 2, 4]
522530
for timeout in expected_blocking_timeout:
523531
# message is not correct, component should not block.
524532
select = FakeSelect(
525-
request_result=RequestResult(succeed={1}, failed={106})
533+
request_result=SetPowerResult(succeed={1}, failed={106})
526534
)
527535
assert tracker._update_status(select) is None # type: ignore[arg-type]
528536
time.shift(timeout)
529537

530538
# Battery message should be to old after 5 seconds.
531-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
539+
select = FakeSelect(
540+
request_result=SetPowerResult(succeed={1}, failed={106})
541+
)
532542
status = tracker._update_status(select) # type: ignore[arg-type]
533543
assert status is BatteryStatus.NOT_WORKING
534544

@@ -538,7 +548,7 @@ async def test_sync_blocking_interrupted_with_with_max_data(
538548
async def test_sync_blocking_interrupted_with_invalid_message(
539549
self, mock_microgrid: MockMicrogridClient
540550
) -> None:
541-
"""Test if status changes when RequestResult message is received.
551+
"""Test if status changes when SetPowerResult message is received.
542552
543553
Tests uses FakeSelect to test status in sync way.
544554
Otherwise we would have lots of async calls and waiting.
@@ -548,7 +558,7 @@ async def test_sync_blocking_interrupted_with_invalid_message(
548558
"""
549559

550560
status_channel = Broadcast[BatteryStatus]("battery_status")
551-
request_result_channel = Broadcast[RequestResult]("request_result")
561+
request_result_channel = Broadcast[SetPowerResult]("request_result")
552562

553563
tracker = BatteryStatusTracker(
554564
BATTERY_ID,
@@ -564,7 +574,7 @@ async def test_sync_blocking_interrupted_with_invalid_message(
564574
select = FakeSelect(battery=battery_data(component_id=BATTERY_ID))
565575
assert tracker._update_status(select) is BatteryStatus.WORKING # type: ignore[arg-type]
566576

567-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
577+
select = FakeSelect(request_result=SetPowerResult(succeed={1}, failed={106}))
568578
assert tracker._update_status(select) is BatteryStatus.UNCERTAIN # type: ignore[arg-type]
569579

570580
select = FakeSelect(
@@ -575,10 +585,10 @@ async def test_sync_blocking_interrupted_with_invalid_message(
575585
)
576586
assert tracker._update_status(select) is BatteryStatus.NOT_WORKING # type: ignore[arg-type]
577587

578-
select = FakeSelect(request_result=RequestResult(succeed={1}, failed={106}))
588+
select = FakeSelect(request_result=SetPowerResult(succeed={1}, failed={106}))
579589
assert tracker._update_status(select) is None # type: ignore[arg-type]
580590

581-
select = FakeSelect(request_result=RequestResult(succeed={106}, failed={}))
591+
select = FakeSelect(request_result=SetPowerResult(succeed={106}, failed={}))
582592
assert tracker._update_status(select) is None # type: ignore[arg-type]
583593

584594
select = FakeSelect(inverter=inverter_data(component_id=INVERTER_ID))
@@ -597,7 +607,7 @@ async def test_async_battery_status(
597607
"""
598608

599609
status_channel = Broadcast[BatteryStatus]("battery_status")
600-
request_result_channel = Broadcast[RequestResult]("request_result")
610+
request_result_channel = Broadcast[SetPowerResult]("request_result")
601611

602612
status_receiver = status_channel.new_receiver()
603613
request_result_sender = request_result_channel.new_sender()
@@ -618,7 +628,7 @@ async def test_async_battery_status(
618628
assert status is BatteryStatus.WORKING
619629

620630
assert await request_result_sender.send(
621-
RequestResult(succeed={}, failed={BATTERY_ID})
631+
SetPowerResult(succeed={}, failed={BATTERY_ID})
622632
)
623633
status = await asyncio.wait_for(status_receiver.receive(), timeout=0.1)
624634
assert status is BatteryStatus.UNCERTAIN
@@ -639,7 +649,7 @@ async def test_async_battery_status(
639649
assert status is BatteryStatus.NOT_WORKING
640650

641651
assert await request_result_sender.send(
642-
RequestResult(succeed={}, failed={BATTERY_ID})
652+
SetPowerResult(succeed={}, failed={BATTERY_ID})
643653
)
644654
await asyncio.sleep(0.3)
645655
assert len(status_receiver) == 0

0 commit comments

Comments
 (0)