Skip to content

Commit 154f340

Browse files
committed
Add some missing @override
This will help us to make sure all sub-classes are properly updated when doing changes to method signatures. Signed-off-by: Leandro Lucarella <[email protected]>
1 parent cc22cd1 commit 154f340

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

src/frequenz/sdk/microgrid/component_graph.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
InverterType,
3636
MicrogridApiClient,
3737
)
38+
from typing_extensions import override
3839

3940
_logger = logging.getLogger(__name__)
4041

@@ -372,6 +373,7 @@ def __init__(
372373
self.refresh_from(components, connections)
373374
self.validate()
374375

376+
@override
375377
def components(
376378
self,
377379
component_ids: set[ComponentId] | None = None,
@@ -401,6 +403,7 @@ def components(
401403

402404
return set(selection)
403405

406+
@override
404407
def connections(
405408
self,
406409
start: set[ComponentId] | None = None,
@@ -430,6 +433,7 @@ def connections(
430433

431434
return set(self._graph.edges[i][_DATA_KEY] for i in selection_ids)
432435

436+
@override
433437
def predecessors(self, component_id: ComponentId) -> set[Component]:
434438
"""Fetch the graph predecessors of the specified component.
435439
@@ -454,6 +458,7 @@ def predecessors(self, component_id: ComponentId) -> set[Component]:
454458

455459
return set(map(lambda idx: self._graph.nodes[idx][_DATA_KEY], predecessors_ids))
456460

461+
@override
457462
def successors(self, component_id: ComponentId) -> set[Component]:
458463
"""Fetch the graph successors of the specified component.
459464
@@ -567,6 +572,7 @@ def validate(self) -> None:
567572
self._validate_intermediary_components()
568573
self._validate_leaf_components()
569574

575+
@override
570576
def is_grid_meter(self, component: Component) -> bool:
571577
"""Check if the specified component is a grid meter.
572578
@@ -593,6 +599,7 @@ def is_grid_meter(self, component: Component) -> bool:
593599
grid_successors = self.successors(predecessor.component_id)
594600
return len(grid_successors) == 1
595601

602+
@override
596603
def is_pv_inverter(self, component: Component) -> bool:
597604
"""Check if the specified component is a PV inverter.
598605
@@ -607,6 +614,7 @@ def is_pv_inverter(self, component: Component) -> bool:
607614
and component.type == InverterType.SOLAR
608615
)
609616

617+
@override
610618
def is_pv_meter(self, component: Component) -> bool:
611619
"""Check if the specified component is a PV meter.
612620
@@ -630,6 +638,7 @@ def is_pv_meter(self, component: Component) -> bool:
630638
)
631639
)
632640

641+
@override
633642
def is_pv_chain(self, component: Component) -> bool:
634643
"""Check if the specified component is part of a PV chain.
635644
@@ -644,6 +653,7 @@ def is_pv_chain(self, component: Component) -> bool:
644653
"""
645654
return self.is_pv_inverter(component) or self.is_pv_meter(component)
646655

656+
@override
647657
def is_ev_charger(self, component: Component) -> bool:
648658
"""Check if the specified component is an EV charger.
649659
@@ -655,6 +665,7 @@ def is_ev_charger(self, component: Component) -> bool:
655665
"""
656666
return component.category == ComponentCategory.EV_CHARGER
657667

668+
@override
658669
def is_ev_charger_meter(self, component: Component) -> bool:
659670
"""Check if the specified component is an EV charger meter.
660671
@@ -675,6 +686,7 @@ def is_ev_charger_meter(self, component: Component) -> bool:
675686
and all(self.is_ev_charger(successor) for successor in successors)
676687
)
677688

689+
@override
678690
def is_ev_charger_chain(self, component: Component) -> bool:
679691
"""Check if the specified component is part of an EV charger chain.
680692
@@ -689,6 +701,7 @@ def is_ev_charger_chain(self, component: Component) -> bool:
689701
"""
690702
return self.is_ev_charger(component) or self.is_ev_charger_meter(component)
691703

704+
@override
692705
def is_battery_inverter(self, component: Component) -> bool:
693706
"""Check if the specified component is a battery inverter.
694707
@@ -703,6 +716,7 @@ def is_battery_inverter(self, component: Component) -> bool:
703716
and component.type == InverterType.BATTERY
704717
)
705718

719+
@override
706720
def is_battery_meter(self, component: Component) -> bool:
707721
"""Check if the specified component is a battery meter.
708722
@@ -723,6 +737,7 @@ def is_battery_meter(self, component: Component) -> bool:
723737
and all(self.is_battery_inverter(successor) for successor in successors)
724738
)
725739

740+
@override
726741
def is_battery_chain(self, component: Component) -> bool:
727742
"""Check if the specified component is part of a battery chain.
728743
@@ -737,6 +752,7 @@ def is_battery_chain(self, component: Component) -> bool:
737752
"""
738753
return self.is_battery_inverter(component) or self.is_battery_meter(component)
739754

755+
@override
740756
def is_chp(self, component: Component) -> bool:
741757
"""Check if the specified component is a CHP.
742758
@@ -748,6 +764,7 @@ def is_chp(self, component: Component) -> bool:
748764
"""
749765
return component.category == ComponentCategory.CHP
750766

767+
@override
751768
def is_chp_meter(self, component: Component) -> bool:
752769
"""Check if the specified component is a CHP meter.
753770
@@ -768,6 +785,7 @@ def is_chp_meter(self, component: Component) -> bool:
768785
and all(self.is_chp(successor) for successor in successors)
769786
)
770787

788+
@override
771789
def is_chp_chain(self, component: Component) -> bool:
772790
"""Check if the specified component is part of a CHP chain.
773791
@@ -781,6 +799,7 @@ def is_chp_chain(self, component: Component) -> bool:
781799
"""
782800
return self.is_chp(component) or self.is_chp_meter(component)
783801

802+
@override
784803
def dfs(
785804
self,
786805
current_node: Component,
@@ -816,6 +835,7 @@ def dfs(
816835

817836
return component
818837

838+
@override
819839
def find_first_descendant_component(
820840
self,
821841
*,

src/frequenz/sdk/timeseries/battery_pool/_component_metric_fetcher.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class LatestMetricsFetcher(ComponentMetricFetcher, Generic[T], ABC):
8282
_max_waiting_time: float
8383

8484
@classmethod
85+
@override
8586
async def async_new(
8687
cls,
8788
component_id: ComponentId,
@@ -115,6 +116,7 @@ async def async_new(
115116
# pylint: enable=protected-access
116117
return self
117118

119+
@override
118120
async def fetch_next(self) -> ComponentMetricsData | None:
119121
"""Fetch the latest component metrics.
120122
@@ -179,6 +181,7 @@ class LatestBatteryMetricsFetcher(LatestMetricsFetcher[BatteryData]):
179181
"""Subscribe for the latest battery data using MicrogridApiClient."""
180182

181183
@classmethod
184+
@override
182185
async def async_new( # noqa: DOC502 (ValueError is raised indirectly super.async_new)
183186
cls,
184187
component_id: ComponentId,
@@ -204,12 +207,15 @@ async def async_new( # noqa: DOC502 (ValueError is raised indirectly super.asyn
204207
)
205208
return self
206209

210+
@override
207211
def _supported_metrics(self) -> set[ComponentMetricId]:
208212
return set(_BatteryDataMethods.keys())
209213

214+
@override
210215
def _extract_metric(self, data: BatteryData, mid: ComponentMetricId) -> float:
211216
return _BatteryDataMethods[mid](data)
212217

218+
@override
213219
async def _subscribe(self) -> Receiver[BatteryData]:
214220
"""Subscribe for this component data.
215221
@@ -222,6 +228,7 @@ async def _subscribe(self) -> Receiver[BatteryData]:
222228
api = connection_manager.get().api_client
223229
return await api.battery_data(self._component_id, maxsize=1)
224230

231+
@override
225232
def _component_category(self) -> ComponentCategory:
226233
return ComponentCategory.BATTERY
227234

@@ -230,6 +237,7 @@ class LatestInverterMetricsFetcher(LatestMetricsFetcher[InverterData]):
230237
"""Subscribe for the latest inverter data using MicrogridApiClient."""
231238

232239
@classmethod
240+
@override
233241
async def async_new( # noqa: DOC502 (ValueError is raised indirectly by super.async_new)
234242
cls,
235243
component_id: ComponentId,
@@ -255,12 +263,15 @@ async def async_new( # noqa: DOC502 (ValueError is raised indirectly by super.a
255263
)
256264
return self
257265

266+
@override
258267
def _supported_metrics(self) -> set[ComponentMetricId]:
259268
return set(_InverterDataMethods.keys())
260269

270+
@override
261271
def _extract_metric(self, data: InverterData, mid: ComponentMetricId) -> float:
262272
return _InverterDataMethods[mid](data)
263273

274+
@override
264275
async def _subscribe(self) -> Receiver[InverterData]:
265276
"""Subscribe for this component data.
266277
@@ -273,5 +284,6 @@ async def _subscribe(self) -> Receiver[InverterData]:
273284
api = connection_manager.get().api_client
274285
return await api.inverter_data(self._component_id, maxsize=1)
275286

287+
@override
276288
def _component_category(self) -> ComponentCategory:
277289
return ComponentCategory.INVERTER

src/frequenz/sdk/timeseries/battery_pool/_metric_calculator.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from frequenz.client.common.microgrid.components import ComponentId
1515
from frequenz.client.microgrid import ComponentMetricId
1616
from frequenz.quantities import Energy, Percentage, Power, Temperature
17+
from typing_extensions import override
1718

1819
from ... import timeseries
1920
from ..._internal import _math
@@ -137,6 +138,7 @@ def __init__(self, batteries: Set[ComponentId]) -> None:
137138
]
138139

139140
@classmethod
141+
@override
140142
def name(cls) -> str:
141143
"""Return name of the calculator.
142144
@@ -146,6 +148,7 @@ def name(cls) -> str:
146148
return "Capacity"
147149

148150
@property
151+
@override
149152
def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
150153
"""Return what metrics are needed for each battery.
151154
@@ -155,6 +158,7 @@ def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
155158
return {bid: self._metrics for bid in self._batteries}
156159

157160
@property
161+
@override
158162
def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
159163
"""Return what metrics are needed for each inverter.
160164
@@ -163,6 +167,7 @@ def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
163167
"""
164168
return {}
165169

170+
@override
166171
def calculate(
167172
self,
168173
metrics_data: dict[ComponentId, ComponentMetricsData],
@@ -227,6 +232,7 @@ def __init__(self, batteries: Set[ComponentId]) -> None:
227232
]
228233

229234
@classmethod
235+
@override
230236
def name(cls) -> str:
231237
"""Return name of the calculator.
232238
@@ -236,6 +242,7 @@ def name(cls) -> str:
236242
return "temperature"
237243

238244
@property
245+
@override
239246
def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
240247
"""Return what metrics are needed for each battery.
241248
@@ -245,6 +252,7 @@ def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
245252
return {bid: self._metrics for bid in self._batteries}
246253

247254
@property
255+
@override
248256
def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
249257
"""Return what metrics are needed for each inverter.
250258
@@ -253,6 +261,7 @@ def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
253261
"""
254262
return {}
255263

264+
@override
256265
def calculate(
257266
self,
258267
metrics_data: dict[ComponentId, ComponentMetricsData],
@@ -317,6 +326,7 @@ def __init__(self, batteries: Set[ComponentId]) -> None:
317326
]
318327

319328
@classmethod
329+
@override
320330
def name(cls) -> str:
321331
"""Return name of the calculator.
322332
@@ -326,6 +336,7 @@ def name(cls) -> str:
326336
return "SoC"
327337

328338
@property
339+
@override
329340
def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
330341
"""Return what metrics are needed for each battery.
331342
@@ -335,6 +346,7 @@ def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
335346
return {bid: self._metrics for bid in self._batteries}
336347

337348
@property
349+
@override
338350
def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
339351
"""Return what metrics are needed for each inverter.
340352
@@ -343,6 +355,7 @@ def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
343355
"""
344356
return {}
345357

358+
@override
346359
def calculate(
347360
self,
348361
metrics_data: dict[ComponentId, ComponentMetricsData],
@@ -485,6 +498,7 @@ def __init__(
485498
]
486499

487500
@classmethod
501+
@override
488502
def name(cls) -> str:
489503
"""Return name of the calculator.
490504
@@ -494,6 +508,7 @@ def name(cls) -> str:
494508
return "PowerBounds"
495509

496510
@property
511+
@override
497512
def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
498513
"""Return what metrics are needed for each battery.
499514
@@ -503,6 +518,7 @@ def battery_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
503518
return {bid: self._battery_metrics for bid in set(self._bat_inv_map.keys())}
504519

505520
@property
521+
@override
506522
def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
507523
"""Return what metrics are needed for each inverter.
508524
@@ -516,6 +532,7 @@ def inverter_metrics(self) -> Mapping[ComponentId, list[ComponentMetricId]]:
516532
}
517533

518534
# pylint: disable=too-many-locals
535+
@override
519536
def calculate(
520537
self,
521538
metrics_data: dict[ComponentId, ComponentMetricsData],

0 commit comments

Comments
 (0)