frequenz-gridpool 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {frequenz_gridpool-0.4.1/src/frequenz_gridpool.egg-info → frequenz_gridpool-0.4.2}/PKG-INFO +7 -7
- frequenz_gridpool-0.4.2/RELEASE_NOTES.md +17 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/pyproject.toml +6 -6
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/_graph_generator.py +25 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/_microgrid_config.py +12 -3
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2/src/frequenz_gridpool.egg-info}/PKG-INFO +7 -7
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/requires.txt +6 -6
- frequenz_gridpool-0.4.1/RELEASE_NOTES.md +0 -17
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/LICENSE +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/MANIFEST.in +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/README.md +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/setup.cfg +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/__init__.py +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/__init__.py +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/__main__.py +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/_render_graph.py +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/conftest.py +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/py.typed +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/SOURCES.txt +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/dependency_links.txt +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/entry_points.txt +0 -0
- {frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frequenz-gridpool
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: High-level interface to grid pools for the Frequenz platform.
|
|
5
5
|
Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -40,26 +40,26 @@ Requires-Dist: isort==8.0.1; extra == "dev-formatting"
|
|
|
40
40
|
Provides-Extra: dev-mkdocs
|
|
41
41
|
Requires-Dist: Markdown==3.10.2; extra == "dev-mkdocs"
|
|
42
42
|
Requires-Dist: black==26.3.1; extra == "dev-mkdocs"
|
|
43
|
-
Requires-Dist: mike==2.
|
|
43
|
+
Requires-Dist: mike==2.2.0; extra == "dev-mkdocs"
|
|
44
44
|
Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
|
|
45
45
|
Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
|
|
46
46
|
Requires-Dist: mkdocs-macros-plugin==1.5.0; extra == "dev-mkdocs"
|
|
47
47
|
Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
|
|
48
|
-
Requires-Dist: mkdocstrings[python]==1.0.
|
|
48
|
+
Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
|
|
49
49
|
Requires-Dist: mkdocstrings-python==2.0.3; extra == "dev-mkdocs"
|
|
50
50
|
Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-mkdocs"
|
|
51
51
|
Provides-Extra: dev-mypy
|
|
52
|
-
Requires-Dist: mypy==1.20.
|
|
52
|
+
Requires-Dist: mypy==1.20.2; extra == "dev-mypy"
|
|
53
53
|
Requires-Dist: types-networkx>=3.6.1.20251220; extra == "dev-mypy"
|
|
54
|
-
Requires-Dist: types-Markdown==3.10.2.
|
|
54
|
+
Requires-Dist: types-Markdown==3.10.2.20260408; extra == "dev-mypy"
|
|
55
55
|
Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
|
|
56
56
|
Provides-Extra: dev-noxfile
|
|
57
|
-
Requires-Dist: nox==2026.
|
|
57
|
+
Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
|
|
58
58
|
Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-noxfile"
|
|
59
59
|
Provides-Extra: dev-pylint
|
|
60
60
|
Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
|
|
61
61
|
Provides-Extra: dev-pytest
|
|
62
|
-
Requires-Dist: pytest==9.0.
|
|
62
|
+
Requires-Dist: pytest==9.0.3; extra == "dev-pytest"
|
|
63
63
|
Requires-Dist: pylint==4.0.5; extra == "dev-pytest"
|
|
64
64
|
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.17.0; extra == "dev-pytest"
|
|
65
65
|
Requires-Dist: pytest-mock==3.15.1; extra == "dev-pytest"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Frequenz Gridpool Library Release Notes
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
<!-- Here goes a general summary of what this release is about -->
|
|
6
|
+
|
|
7
|
+
## Upgrading
|
|
8
|
+
|
|
9
|
+
<!-- Here goes notes on how to upgrade from previous versions, including deprecations and what they should be replaced with -->
|
|
10
|
+
|
|
11
|
+
## New Features
|
|
12
|
+
|
|
13
|
+
- If there are unconnected breakers at a site, they are now hidden from the component graph. If there are breakers with connections to other components, they are still sent to the component graph. This is a temporary measure until the graph traversal supports breakers.
|
|
14
|
+
|
|
15
|
+
## Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Fixed auto-formula population to only fill formulas for component types already present in a microgrid configuration. This prevents creating placeholder entries with `None` formulas for component types that are not configured.
|
|
@@ -59,24 +59,24 @@ dev-formatting = ["black == 26.3.1", "isort == 8.0.1"]
|
|
|
59
59
|
dev-mkdocs = [
|
|
60
60
|
"Markdown == 3.10.2",
|
|
61
61
|
"black == 26.3.1",
|
|
62
|
-
"mike == 2.
|
|
62
|
+
"mike == 2.2.0",
|
|
63
63
|
"mkdocs-gen-files == 0.6.1",
|
|
64
64
|
"mkdocs-literate-nav == 0.6.3",
|
|
65
65
|
"mkdocs-macros-plugin == 1.5.0",
|
|
66
66
|
"mkdocs-material == 9.7.6",
|
|
67
|
-
"mkdocstrings[python] == 1.0.
|
|
67
|
+
"mkdocstrings[python] == 1.0.4",
|
|
68
68
|
"mkdocstrings-python == 2.0.3",
|
|
69
69
|
"frequenz-repo-config[lib] == 0.17.0",
|
|
70
70
|
]
|
|
71
71
|
dev-mypy = [
|
|
72
|
-
"mypy == 1.20.
|
|
72
|
+
"mypy == 1.20.2",
|
|
73
73
|
"types-networkx>=3.6.1.20251220",
|
|
74
|
-
"types-Markdown == 3.10.2.
|
|
74
|
+
"types-Markdown == 3.10.2.20260408",
|
|
75
75
|
# For checking the noxfile, docs/ script, and tests
|
|
76
76
|
"frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]",
|
|
77
77
|
]
|
|
78
78
|
dev-noxfile = [
|
|
79
|
-
"nox == 2026.
|
|
79
|
+
"nox == 2026.4.10",
|
|
80
80
|
"frequenz-repo-config[lib] == 0.17.0",
|
|
81
81
|
]
|
|
82
82
|
dev-pylint = [
|
|
@@ -85,7 +85,7 @@ dev-pylint = [
|
|
|
85
85
|
"frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]",
|
|
86
86
|
]
|
|
87
87
|
dev-pytest = [
|
|
88
|
-
"pytest == 9.0.
|
|
88
|
+
"pytest == 9.0.3",
|
|
89
89
|
"pylint == 4.0.5", # We need this to check for the examples
|
|
90
90
|
"frequenz-repo-config[extra-lint-examples] == 0.17.0",
|
|
91
91
|
"pytest-mock == 3.15.1",
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/_graph_generator.py
RENAMED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
"""Formula generation from assets API component/connection configurations."""
|
|
5
5
|
|
|
6
|
+
import logging
|
|
7
|
+
|
|
6
8
|
from frequenz.client.assets import AssetsApiClient
|
|
7
9
|
from frequenz.client.assets.electrical_component import (
|
|
10
|
+
Breaker,
|
|
8
11
|
ComponentConnection,
|
|
9
12
|
ElectricalComponent,
|
|
10
13
|
)
|
|
@@ -12,6 +15,8 @@ from frequenz.client.common.microgrid import MicrogridId
|
|
|
12
15
|
from frequenz.client.common.microgrid.electrical_components import ElectricalComponentId
|
|
13
16
|
from frequenz.microgrid_component_graph import ComponentGraph
|
|
14
17
|
|
|
18
|
+
_logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
15
20
|
|
|
16
21
|
class ComponentGraphGenerator:
|
|
17
22
|
"""Generates component graphs for microgrids using the Assets API."""
|
|
@@ -57,6 +62,26 @@ class ComponentGraphGenerator:
|
|
|
57
62
|
if any(c is None for c in connections):
|
|
58
63
|
raise ValueError("Failed to load all electrical component connections.")
|
|
59
64
|
|
|
65
|
+
breakers = [c for c in components if isinstance(c, Breaker)]
|
|
66
|
+
connected_breakers = [
|
|
67
|
+
b
|
|
68
|
+
for b in breakers
|
|
69
|
+
if any(
|
|
70
|
+
b.id in (c.source, c.destination) for c in connections if c is not None
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
if connected_breakers:
|
|
75
|
+
_logger.warning(
|
|
76
|
+
"The following breakers are connected to other components, "
|
|
77
|
+
+ "which is not supported by the component graph generator and may "
|
|
78
|
+
+ "lead to graph traversal issues: %s",
|
|
79
|
+
[b.id for b in connected_breakers],
|
|
80
|
+
)
|
|
81
|
+
elif breakers:
|
|
82
|
+
_logger.debug("Dropping unconnected breakers: %s", [b.id for b in breakers])
|
|
83
|
+
components = [c for c in components if not isinstance(c, Breaker)]
|
|
84
|
+
|
|
60
85
|
graph = ComponentGraph[
|
|
61
86
|
ElectricalComponent, ComponentConnection, ElectricalComponentId
|
|
62
87
|
](components, connections)
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/_microgrid_config.py
RENAMED
|
@@ -441,10 +441,13 @@ class MicrogridConfig:
|
|
|
441
441
|
assets_url, auth_key=assets_auth_key, sign_secret=assets_sign_secret
|
|
442
442
|
) as assets_client:
|
|
443
443
|
for microgrid_id, config in microgrid_configs.items():
|
|
444
|
+
relevant_ctypes = set(config.ctype.keys())
|
|
445
|
+
|
|
444
446
|
await populate_missing_formulas(
|
|
445
447
|
microgrid_id=int(microgrid_id),
|
|
446
448
|
config=config,
|
|
447
449
|
assets_client=assets_client,
|
|
450
|
+
component_types=relevant_ctypes,
|
|
448
451
|
)
|
|
449
452
|
|
|
450
453
|
return microgrid_configs
|
|
@@ -454,6 +457,7 @@ async def populate_missing_formulas(
|
|
|
454
457
|
microgrid_id: int,
|
|
455
458
|
config: "MicrogridConfig",
|
|
456
459
|
assets_client: AssetsApiClient,
|
|
460
|
+
component_types: set[str] | None = None,
|
|
457
461
|
) -> None:
|
|
458
462
|
"""Populate missing component formulas from the assets API graph.
|
|
459
463
|
|
|
@@ -471,6 +475,8 @@ async def populate_missing_formulas(
|
|
|
471
475
|
Microgrid configuration object to update in place.
|
|
472
476
|
assets_client:
|
|
473
477
|
Assets API client used to fetch the component graph.
|
|
478
|
+
component_types:
|
|
479
|
+
Optional set of component types to consider when populating formulas.
|
|
474
480
|
|
|
475
481
|
Returns:
|
|
476
482
|
None. The configuration is modified in place.
|
|
@@ -502,12 +508,15 @@ async def populate_missing_formulas(
|
|
|
502
508
|
"AC_ENERGY_ACTIVE_DELIVERED",
|
|
503
509
|
)
|
|
504
510
|
|
|
511
|
+
# Default: only populate component types already present in the config.
|
|
512
|
+
allowed_ctypes = component_types or set(config.ctype.keys())
|
|
513
|
+
|
|
505
514
|
for ctype, formula in auto_formulas.items():
|
|
515
|
+
if ctype not in allowed_ctypes:
|
|
516
|
+
continue
|
|
517
|
+
|
|
506
518
|
cfg = config.ctype.get(ctype)
|
|
507
519
|
if cfg is None:
|
|
508
|
-
config.ctype[ctype] = ComponentTypeConfig(
|
|
509
|
-
formula={metric: formula for metric in metrics}
|
|
510
|
-
)
|
|
511
520
|
continue
|
|
512
521
|
|
|
513
522
|
if cfg.formula is None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frequenz-gridpool
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: High-level interface to grid pools for the Frequenz platform.
|
|
5
5
|
Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -40,26 +40,26 @@ Requires-Dist: isort==8.0.1; extra == "dev-formatting"
|
|
|
40
40
|
Provides-Extra: dev-mkdocs
|
|
41
41
|
Requires-Dist: Markdown==3.10.2; extra == "dev-mkdocs"
|
|
42
42
|
Requires-Dist: black==26.3.1; extra == "dev-mkdocs"
|
|
43
|
-
Requires-Dist: mike==2.
|
|
43
|
+
Requires-Dist: mike==2.2.0; extra == "dev-mkdocs"
|
|
44
44
|
Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
|
|
45
45
|
Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
|
|
46
46
|
Requires-Dist: mkdocs-macros-plugin==1.5.0; extra == "dev-mkdocs"
|
|
47
47
|
Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
|
|
48
|
-
Requires-Dist: mkdocstrings[python]==1.0.
|
|
48
|
+
Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
|
|
49
49
|
Requires-Dist: mkdocstrings-python==2.0.3; extra == "dev-mkdocs"
|
|
50
50
|
Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-mkdocs"
|
|
51
51
|
Provides-Extra: dev-mypy
|
|
52
|
-
Requires-Dist: mypy==1.20.
|
|
52
|
+
Requires-Dist: mypy==1.20.2; extra == "dev-mypy"
|
|
53
53
|
Requires-Dist: types-networkx>=3.6.1.20251220; extra == "dev-mypy"
|
|
54
|
-
Requires-Dist: types-Markdown==3.10.2.
|
|
54
|
+
Requires-Dist: types-Markdown==3.10.2.20260408; extra == "dev-mypy"
|
|
55
55
|
Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
|
|
56
56
|
Provides-Extra: dev-noxfile
|
|
57
|
-
Requires-Dist: nox==2026.
|
|
57
|
+
Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
|
|
58
58
|
Requires-Dist: frequenz-repo-config[lib]==0.17.0; extra == "dev-noxfile"
|
|
59
59
|
Provides-Extra: dev-pylint
|
|
60
60
|
Requires-Dist: frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
|
|
61
61
|
Provides-Extra: dev-pytest
|
|
62
|
-
Requires-Dist: pytest==9.0.
|
|
62
|
+
Requires-Dist: pytest==9.0.3; extra == "dev-pytest"
|
|
63
63
|
Requires-Dist: pylint==4.0.5; extra == "dev-pytest"
|
|
64
64
|
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.17.0; extra == "dev-pytest"
|
|
65
65
|
Requires-Dist: pytest-mock==3.15.1; extra == "dev-pytest"
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/requires.txt
RENAMED
|
@@ -22,30 +22,30 @@ isort==8.0.1
|
|
|
22
22
|
[dev-mkdocs]
|
|
23
23
|
Markdown==3.10.2
|
|
24
24
|
black==26.3.1
|
|
25
|
-
mike==2.
|
|
25
|
+
mike==2.2.0
|
|
26
26
|
mkdocs-gen-files==0.6.1
|
|
27
27
|
mkdocs-literate-nav==0.6.3
|
|
28
28
|
mkdocs-macros-plugin==1.5.0
|
|
29
29
|
mkdocs-material==9.7.6
|
|
30
|
-
mkdocstrings[python]==1.0.
|
|
30
|
+
mkdocstrings[python]==1.0.4
|
|
31
31
|
mkdocstrings-python==2.0.3
|
|
32
32
|
frequenz-repo-config[lib]==0.17.0
|
|
33
33
|
|
|
34
34
|
[dev-mypy]
|
|
35
|
-
mypy==1.20.
|
|
35
|
+
mypy==1.20.2
|
|
36
36
|
types-networkx>=3.6.1.20251220
|
|
37
|
-
types-Markdown==3.10.2.
|
|
37
|
+
types-Markdown==3.10.2.20260408
|
|
38
38
|
frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]
|
|
39
39
|
|
|
40
40
|
[dev-noxfile]
|
|
41
|
-
nox==2026.
|
|
41
|
+
nox==2026.4.10
|
|
42
42
|
frequenz-repo-config[lib]==0.17.0
|
|
43
43
|
|
|
44
44
|
[dev-pylint]
|
|
45
45
|
frequenz-gridpool[dev-mkdocs,dev-noxfile,dev-pytest]
|
|
46
46
|
|
|
47
47
|
[dev-pytest]
|
|
48
|
-
pytest==9.0.
|
|
48
|
+
pytest==9.0.3
|
|
49
49
|
pylint==4.0.5
|
|
50
50
|
frequenz-repo-config[extra-lint-examples]==0.17.0
|
|
51
51
|
pytest-mock==3.15.1
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Frequenz Gridpool Library Release Notes
|
|
2
|
-
|
|
3
|
-
## Summary
|
|
4
|
-
|
|
5
|
-
<!-- Here goes a general summary of what this release is about -->
|
|
6
|
-
|
|
7
|
-
## Upgrading
|
|
8
|
-
|
|
9
|
-
* Default formulas for AC active power and energy are removed.
|
|
10
|
-
|
|
11
|
-
## New Features
|
|
12
|
-
|
|
13
|
-
<!-- Here goes the main new features and examples or instructions on how to use them -->
|
|
14
|
-
|
|
15
|
-
## Bug Fixes
|
|
16
|
-
|
|
17
|
-
<!-- Here goes notable bug fixes that are worth a special mention or explanation -->
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz/gridpool/cli/_render_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{frequenz_gridpool-0.4.1 → frequenz_gridpool-0.4.2}/src/frequenz_gridpool.egg-info/top_level.txt
RENAMED
|
File without changes
|