Skip to content

Commit 786569d

Browse files
committed
Put frequently used code in base function.
Signed-off-by: Mathias L. Baumann <[email protected]>
1 parent 922691a commit 786569d

File tree

5 files changed

+38
-66
lines changed

5 files changed

+38
-66
lines changed

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_consumer_power_formula.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,9 @@ def generate(self) -> FormulaEngine[Power]:
3737
builder = self._get_builder(
3838
"consumer-power", ComponentMetricId.ACTIVE_POWER, Power.from_watts
3939
)
40-
component_graph = connection_manager.get().component_graph
41-
grid_component = next(
42-
(
43-
comp
44-
for comp in component_graph.components()
45-
if comp.category == ComponentCategory.GRID
46-
),
47-
None,
48-
)
4940

50-
if grid_component is None:
51-
raise ComponentNotFound("Grid component not found in the component graph.")
41+
grid_successors = self._get_grid_component_successors()
5242

53-
grid_successors = component_graph.successors(grid_component.component_id)
5443
if not grid_successors:
5544
raise ComponentNotFound("No components found in the component graph.")
5645

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_formula_generator.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from frequenz.channels import Sender
1616

1717
from ....actor import ChannelRegistry, ComponentMetricRequest
18+
from ....microgrid import component, connection_manager
1819
from ....microgrid.component import ComponentMetricId
1920
from ..._quantities import QuantityT
2021
from .._formula_engine import FormulaEngine, FormulaEngine3Phase
@@ -100,6 +101,36 @@ def _get_builder(
100101
)
101102
return builder
102103

104+
def _get_grid_component_successors(self) -> set[component.Component]:
105+
"""Get the set of grid component successors in the component graph.
106+
107+
Returns:
108+
A set of grid component successors.
109+
110+
Raises:
111+
ComponentNotFound: If the grid component is not found in the component graph.
112+
ComponentNotFound: If no successor components are found in the component graph.
113+
"""
114+
component_graph = connection_manager.get().component_graph
115+
grid_component = next(
116+
iter(
117+
component_graph.components(
118+
component_category={component.ComponentCategory.GRID}
119+
)
120+
),
121+
None,
122+
)
123+
124+
if grid_component is None:
125+
raise ComponentNotFound("Grid component not found in the component graph.")
126+
127+
grid_successors = component_graph.successors(grid_component.component_id)
128+
129+
if not grid_successors:
130+
raise ComponentNotFound("No components found in the component graph.")
131+
132+
return grid_successors
133+
103134
@abstractmethod
104135
def generate(
105136
self,

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_grid_current_formula.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55

66
from typing import Set
77

8-
from ....microgrid import connection_manager
98
from ....microgrid.component import Component, ComponentCategory, ComponentMetricId
109
from ..._quantities import Current
1110
from .._formula_engine import FormulaEngine, FormulaEngine3Phase
12-
from ._formula_generator import ComponentNotFound, FormulaGenerator
11+
from ._formula_generator import FormulaGenerator
1312

1413

1514
class GridCurrentFormula(FormulaGenerator[Current]):
@@ -24,22 +23,7 @@ def generate(self) -> FormulaEngine3Phase[Current]:
2423
Raises:
2524
ComponentNotFound: when the component graph doesn't have a `GRID` component.
2625
"""
27-
component_graph = connection_manager.get().component_graph
28-
grid_component = next(
29-
(
30-
comp
31-
for comp in component_graph.components()
32-
if comp.category == ComponentCategory.GRID
33-
),
34-
None,
35-
)
36-
37-
if grid_component is None:
38-
raise ComponentNotFound(
39-
"Unable to find a GRID component from the component graph."
40-
)
41-
42-
grid_successors = component_graph.successors(grid_component.component_id)
26+
grid_successors = self._get_grid_component_successors()
4327

4428
return FormulaEngine3Phase(
4529
"grid-current",

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_grid_power_formula.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33

44
"""Formula generator from component graph for Grid Power."""
55

6-
from ....microgrid import connection_manager
76
from ....microgrid.component import ComponentCategory, ComponentMetricId
87
from ..._quantities import Power
98
from .._formula_engine import FormulaEngine
10-
from ._formula_generator import ComponentNotFound, FormulaGenerator, FormulaType
9+
from ._formula_generator import FormulaGenerator, FormulaType
1110

1211

1312
class GridPowerFormula(FormulaGenerator[Power]):
@@ -27,22 +26,7 @@ def generate(
2726
builder = self._get_builder(
2827
"grid-power", ComponentMetricId.ACTIVE_POWER, Power.from_watts
2928
)
30-
component_graph = connection_manager.get().component_graph
31-
grid_component = next(
32-
(
33-
comp
34-
for comp in component_graph.components()
35-
if comp.category == ComponentCategory.GRID
36-
),
37-
None,
38-
)
39-
40-
if grid_component is None:
41-
raise ComponentNotFound(
42-
"Unable to find a GRID component from the component graph."
43-
)
44-
45-
grid_successors = component_graph.successors(grid_component.component_id)
29+
grid_successors = self._get_grid_component_successors()
4630

4731
# generate a formula that just adds values from all commponents that are
4832
# directly connected to the grid. If the requested formula type is

src/frequenz/sdk/timeseries/_formula_engine/_formula_generators/_producer_power_formula.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@
99
from ....microgrid.component import ComponentCategory, ComponentMetricId
1010
from ..._quantities import Power
1111
from .._formula_engine import FormulaEngine
12-
from ._formula_generator import (
13-
NON_EXISTING_COMPONENT_ID,
14-
ComponentNotFound,
15-
FormulaGenerator,
16-
)
12+
from ._formula_generator import NON_EXISTING_COMPONENT_ID, FormulaGenerator
1713

1814

1915
class ProducerPowerFormula(FormulaGenerator[Power]):
@@ -39,19 +35,7 @@ def generate(self) -> FormulaEngine[Power]:
3935
"producer_power", ComponentMetricId.ACTIVE_POWER, Power.from_watts
4036
)
4137
component_graph = connection_manager.get().component_graph
42-
grid_component = next(
43-
iter(
44-
component_graph.components(component_category={ComponentCategory.GRID})
45-
),
46-
None,
47-
)
48-
49-
if grid_component is None:
50-
raise ComponentNotFound("Grid component not found in the component graph.")
51-
52-
grid_successors = component_graph.successors(grid_component.component_id)
53-
if not grid_successors:
54-
raise ComponentNotFound("No components found in the component graph.")
38+
grid_successors = self._get_grid_component_successors()
5539

5640
if len(grid_successors) == 1:
5741
grid_meter = next(iter(grid_successors))

0 commit comments

Comments
 (0)