Skip to content

Commit de1331d

Browse files
committed
Refactor to reduce the amount of calls to the component data cache
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 12749c1 commit de1331d

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

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

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -226,20 +226,18 @@ def __init__(
226226
bat_id: None for bat_id, _ in self._bat_inv_map.items()
227227
}
228228

229-
def _get_bounds(self, batteries: abc.Set[int], include_broken: bool) -> PowerBounds:
229+
def _get_bounds(
230+
self,
231+
pairs_data: list[InvBatPair],
232+
) -> PowerBounds:
230233
"""Get power bounds for given batteries.
231234
232235
Args:
233-
batteries: List of batteries
234-
include_broken: whether all batteries in the batteries set in the
235-
request must be used regardless the status.
236+
pairs_data: list of battery and adjacent inverter data pairs.
236237
237238
Returns:
238239
Power bounds for given batteries.
239240
"""
240-
pairs_data: List[InvBatPair] = self._get_components_data(
241-
batteries, include_broken
242-
)
243241
return PowerBounds(
244242
inclusion_lower=sum(
245243
max(
@@ -352,11 +350,6 @@ async def run(self) -> None:
352350
await asyncio.sleep(self._wait_for_data_sec)
353351

354352
async for request in self._requests_receiver:
355-
error = self._check_request(request)
356-
if error:
357-
await self._send_result(request.namespace, error)
358-
continue
359-
360353
try:
361354
pairs_data: List[InvBatPair] = self._get_components_data(
362355
request.batteries, request.include_broken_batteries
@@ -374,6 +367,11 @@ async def run(self) -> None:
374367
)
375368
continue
376369

370+
error = self._check_request(request, pairs_data)
371+
if error:
372+
await self._send_result(request.namespace, error)
373+
continue
374+
377375
try:
378376
distribution = self._get_power_distribution(request, pairs_data)
379377
except ValueError as err:
@@ -497,11 +495,16 @@ def _get_power_distribution(
497495

498496
return result
499497

500-
def _check_request(self, request: Request) -> Optional[Result]:
498+
def _check_request(
499+
self,
500+
request: Request,
501+
pairs_data: List[InvBatPair],
502+
) -> Optional[Result]:
501503
"""Check whether the given request if correct.
502504
503505
Args:
504506
request: request to check
507+
pairs_data: list of battery and adjacent inverter data pairs.
505508
506509
Returns:
507510
Result for the user if the request is wrong, None otherwise.
@@ -517,7 +520,7 @@ def _check_request(self, request: Request) -> Optional[Result]:
517520
)
518521
return Error(request=request, msg=msg)
519522

520-
bounds = self._get_bounds(request.batteries, request.include_broken_batteries)
523+
bounds = self._get_bounds(pairs_data)
521524
if request.adjust_power:
522525
# Automatic power adjustments can only bring down the requested power down
523526
# to the inclusion bounds.

tests/actor/test_power_distributing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ async def test_power_distributor_invalid_battery_id(
397397
result: Result = done.pop().result()
398398
assert isinstance(result, Error)
399399
assert result.request == request
400-
err_msg = re.search(r"^No battery 100, available batteries:", result.msg)
400+
err_msg = re.search(r"No battery 100, available batteries:", result.msg)
401401
assert err_msg is not None
402402

403403
async def test_power_distributor_one_user_adjust_power_consume(

0 commit comments

Comments
 (0)