@@ -224,17 +224,18 @@ async def _get_distribution(self, request: Request) -> DistributionResult | Resu
224224 Returns:
225225 Distribution of the batteries.
226226 """
227- try :
228- pairs_data : list [InvBatPair ] = self ._get_components_data (
229- request .component_ids
230- )
231- except KeyError as err :
232- return Error (request = request , msg = str (err ))
227+ match self ._get_components_data (request .component_ids ):
228+ case str () as err :
229+ return Error (request = request , msg = err )
230+ case list () as pairs_data :
231+ pass
232+ case unexpected :
233+ typing .assert_never (unexpected )
233234
234235 if not pairs_data :
235236 error_msg = (
236- "No data for at least one of the given "
237- f"batteries { str (request .component_ids )} "
237+ "No data for at least one of the given batteries: "
238+ + self . _str_ids (request .component_ids )
238239 )
239240 return Error (request = request , msg = str (error_msg ))
240241
@@ -510,18 +511,17 @@ def nan_metric_in_list(data: list[DataType], metrics: list[str]) -> bool:
510511
511512 def _get_components_data (
512513 self , batteries : collections .abc .Set [int ]
513- ) -> list [InvBatPair ]:
514+ ) -> list [InvBatPair ] | str :
514515 """Get data for the given batteries and adjacent inverters.
515516
516517 Args:
517518 batteries: Batteries that needs data.
518519
519- Raises:
520- KeyError: If any battery in the given list doesn't exists in microgrid.
521-
522520 Returns:
523- Pairs of battery and adjacent inverter data.
521+ Pairs of battery and adjacent inverter data or an error message if there was
522+ an error while getting the data.
524523 """
524+ inverter_ids : collections .abc .Set [int ]
525525 pairs_data : list [InvBatPair ] = []
526526
527527 working_batteries = self ._component_pool_status_tracker .get_working_components (
@@ -530,9 +530,9 @@ def _get_components_data(
530530
531531 for battery_id in working_batteries :
532532 if battery_id not in self ._battery_caches :
533- raise KeyError (
533+ return (
534534 f"No battery { battery_id } , "
535- f"available batteries: { list (self ._battery_caches .keys ())} "
535+ f"available batteries: { self . _str_ids (self ._battery_caches .keys ())} "
536536 )
537537
538538 connected_inverters = _get_all_from_map (self ._bat_invs_map , batteries )
@@ -545,9 +545,10 @@ def _get_components_data(
545545
546546 if batteries_from_inverters != batteries :
547547 extra_batteries = batteries_from_inverters - batteries
548- raise KeyError (
549- f"Inverters { _get_all_from_map (self ._bat_invs_map , extra_batteries )} "
550- f"are connected to batteries that were not requested: { extra_batteries } "
548+ inverter_ids = _get_all_from_map (self ._bat_invs_map , extra_batteries )
549+ return (
550+ f"Inverter(s) ({ self ._str_ids (inverter_ids )} ) are connected to "
551+ f"battery(ies) ({ self ._str_ids (extra_batteries )} ) that were not requested"
551552 )
552553
553554 # set of set of batteries one for each working_battery
@@ -556,7 +557,7 @@ def _get_components_data(
556557 )
557558
558559 for battery_ids in battery_sets :
559- inverter_ids : frozenset [ int ] = self ._bat_invs_map [next (iter (battery_ids ))]
560+ inverter_ids = self ._bat_invs_map [next (iter (battery_ids ))]
560561
561562 data = self ._get_battery_inverter_data (battery_ids , inverter_ids )
562563 if data is None :
@@ -570,6 +571,9 @@ def _get_components_data(
570571 pairs_data .append (data )
571572 return pairs_data
572573
574+ def _str_ids (self , ids : collections .abc .Set [int ]) -> str :
575+ return ", " .join (str (cid ) for cid in sorted (ids ))
576+
573577 def _get_power_distribution (
574578 self , request : Request , inv_bat_pairs : list [InvBatPair ]
575579 ) -> DistributionResult :
0 commit comments