frequenz-api-common 0.8.8__tar.gz → 0.8.10__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.
Files changed (117) hide show
  1. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/PKG-INFO +8 -8
  2. frequenz_api_common-0.8.10/RELEASE_NOTES.md +19 -0
  3. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/streaming/event.proto +3 -3
  4. frequenz_api_common-0.8.10/proto/frequenz/api/common/v1alpha8/grid/flexibility_service.proto +171 -0
  5. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/grid/market_location.proto +14 -4
  6. frequenz_api_common-0.8.10/proto/frequenz/api/common/v1alpha8/grid/provision_duration.proto +102 -0
  7. frequenz_api_common-0.8.10/proto/frequenz/api/common/v1alpha8/identity/resource_uri.proto +167 -0
  8. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/streaming/event.proto +3 -3
  9. frequenz_api_common-0.8.10/py/frequenz/api/common/v1alpha8/identity/__init__.py +4 -0
  10. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz_api_common.egg-info/PKG-INFO +8 -8
  11. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz_api_common.egg-info/SOURCES.txt +4 -0
  12. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz_api_common.egg-info/requires.txt +7 -7
  13. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/pyproject.toml +14 -10
  14. frequenz_api_common-0.8.8/RELEASE_NOTES.md +0 -17
  15. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/LICENSE +0 -0
  16. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/MANIFEST.in +0 -0
  17. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/README.md +0 -0
  18. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/components.proto +0 -0
  19. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/location.proto +0 -0
  20. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/metrics/electrical.proto +0 -0
  21. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/metrics.proto +0 -0
  22. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/grid/delivery_area.proto +0 -0
  23. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/grid/delivery_duration.proto +0 -0
  24. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/location.proto +0 -0
  25. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/market/energy.proto +0 -0
  26. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/market/power.proto +0 -0
  27. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/market/price.proto +0 -0
  28. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/metrics/bounds.proto +0 -0
  29. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/metrics/metric_sample.proto +0 -0
  30. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/battery.proto +0 -0
  31. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/components.proto +0 -0
  32. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/ev_charger.proto +0 -0
  33. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/fuse.proto +0 -0
  34. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/grid.proto +0 -0
  35. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/inverter.proto +0 -0
  36. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/components/transformer.proto +0 -0
  37. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/lifetime.proto +0 -0
  38. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/microgrid.proto +0 -0
  39. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/microgrid/sensors/sensors.proto +0 -0
  40. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/pagination/pagination_info.proto +0 -0
  41. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/pagination/pagination_params.proto +0 -0
  42. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1/types/decimal.proto +0 -0
  43. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/grid/delivery_area.proto +0 -0
  44. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/grid/delivery_duration.proto +0 -0
  45. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/market/energy.proto +0 -0
  46. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/market/power.proto +0 -0
  47. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/market/price.proto +0 -0
  48. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/metrics/bounds.proto +0 -0
  49. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/metrics/metrics.proto +0 -0
  50. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/microgrid/communication_components/communication_components.proto +0 -0
  51. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/microgrid/electrical_components/electrical_components.proto +0 -0
  52. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/microgrid/lifetime.proto +0 -0
  53. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/microgrid/microgrid.proto +0 -0
  54. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/microgrid/sensors/sensors.proto +0 -0
  55. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/pagination/pagination_info.proto +0 -0
  56. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/pagination/pagination_params.proto +0 -0
  57. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/type/decimal.proto +0 -0
  58. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/type/interval.proto +0 -0
  59. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha7/type/location.proto +0 -0
  60. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/grid/balancing_group.proto +0 -0
  61. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/grid/delivery_area.proto +0 -0
  62. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/grid/delivery_duration.proto +0 -0
  63. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/gridpool/gridpool.proto +0 -0
  64. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/market/energy.proto +0 -0
  65. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/market/market_area.proto +0 -0
  66. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/market/power.proto +0 -0
  67. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/market/price.proto +0 -0
  68. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/metrics/bounds.proto +0 -0
  69. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/metrics/metrics.proto +0 -0
  70. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/microgrid/communication_components/communication_components.proto +0 -0
  71. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/microgrid/electrical_components/electrical_components.proto +0 -0
  72. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/microgrid/lifetime.proto +0 -0
  73. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/microgrid/microgrid.proto +0 -0
  74. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/microgrid/sensors/sensors.proto +0 -0
  75. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/pagination/pagination_info.proto +0 -0
  76. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/pagination/pagination_params.proto +0 -0
  77. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/types/decimal.proto +0 -0
  78. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/types/interval.proto +0 -0
  79. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/proto/frequenz/api/common/v1alpha8/types/location.proto +0 -0
  80. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/__init__.py +0 -0
  81. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/metrics/__init__.py +0 -0
  82. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/py.typed +0 -0
  83. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/__init__.py +0 -0
  84. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/grid/__init__.py +0 -0
  85. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/market/__init__.py +0 -0
  86. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/metrics/__init__.py +0 -0
  87. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/microgrid/__init__.py +0 -0
  88. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/microgrid/components/__init__.py +0 -0
  89. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/microgrid/sensors/__init__.py +0 -0
  90. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/pagination/__init__.py +0 -0
  91. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1/types/__init__.py +0 -0
  92. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/__init__.py +0 -0
  93. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/grid/__init__.py +0 -0
  94. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/market/__init__.py +0 -0
  95. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/metrics/__init__.py +0 -0
  96. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/microgrid/__init__.py +0 -0
  97. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/microgrid/communication_components/__init__.py +0 -0
  98. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/microgrid/electrical_components/__init__.py +0 -0
  99. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/microgrid/sensors/__init__.py +0 -0
  100. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/pagination/__init__.py +0 -0
  101. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/streaming/__init__.py +0 -0
  102. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha7/type/__init__.py +0 -0
  103. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/__init__.py +0 -0
  104. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/grid/__init__.py +0 -0
  105. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/gridpool/__init__.py +0 -0
  106. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/market/__init__.py +0 -0
  107. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/metrics/__init__.py +0 -0
  108. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/microgrid/__init__.py +0 -0
  109. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/microgrid/communication_components/__init__.py +0 -0
  110. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/microgrid/electrical_components/__init__.py +0 -0
  111. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/microgrid/sensors/__init__.py +0 -0
  112. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/pagination/__init__.py +0 -0
  113. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/streaming/__init__.py +0 -0
  114. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz/api/common/v1alpha8/types/__init__.py +0 -0
  115. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz_api_common.egg-info/dependency_links.txt +0 -0
  116. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/py/frequenz_api_common.egg-info/top_level.txt +0 -0
  117. {frequenz_api_common-0.8.8 → frequenz_api_common-0.8.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frequenz-api-common
3
- Version: 0.8.8
3
+ Version: 0.8.10
4
4
  Summary: Frequenz common gRPC API and bindings
5
5
  Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
6
6
  License-Expression: MIT
@@ -19,16 +19,16 @@ Requires-Python: <4,>=3.11
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: protobuf<8,>=6.33.6
22
- Requires-Dist: grpcio<2,>=1.80.0
22
+ Requires-Dist: grpcio<2,>=1.81.0
23
23
  Provides-Extra: dev-flake8
24
24
  Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
25
25
  Requires-Dist: flake8-datetimez==20.10.0; extra == "dev-flake8"
26
26
  Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
27
27
  Requires-Dist: flake8-pyproject==1.2.4; extra == "dev-flake8"
28
- Requires-Dist: pydoclint==0.8.3; extra == "dev-flake8"
28
+ Requires-Dist: pydoclint==0.8.6; extra == "dev-flake8"
29
29
  Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
30
30
  Provides-Extra: dev-formatting
31
- Requires-Dist: black==26.3.1; extra == "dev-formatting"
31
+ Requires-Dist: black==26.5.1; extra == "dev-formatting"
32
32
  Requires-Dist: isort==8.0.1; extra == "dev-formatting"
33
33
  Provides-Extra: dev-mkdocs
34
34
  Requires-Dist: mike==1.1.2; extra == "dev-mkdocs"
@@ -36,20 +36,20 @@ Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
36
36
  Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
37
37
  Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
38
38
  Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
39
- Requires-Dist: frequenz-repo-config[api]==0.17.0; extra == "dev-mkdocs"
39
+ Requires-Dist: frequenz-repo-config[api]==0.18.0; extra == "dev-mkdocs"
40
40
  Provides-Extra: dev-mypy
41
- Requires-Dist: mypy==1.20.2; extra == "dev-mypy"
41
+ Requires-Dist: mypy==2.1.0; extra == "dev-mypy"
42
42
  Requires-Dist: grpc-stubs==1.53.0.6; extra == "dev-mypy"
43
43
  Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
44
44
  Provides-Extra: dev-noxfile
45
45
  Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
46
- Requires-Dist: frequenz-repo-config[api]==0.17.0; extra == "dev-noxfile"
46
+ Requires-Dist: frequenz-repo-config[api]==0.18.0; extra == "dev-noxfile"
47
47
  Provides-Extra: dev-pylint
48
48
  Requires-Dist: pylint==4.0.5; extra == "dev-pylint"
49
49
  Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
50
50
  Provides-Extra: dev-pytest
51
51
  Requires-Dist: pytest==9.0.3; extra == "dev-pytest"
52
- Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.17.0; extra == "dev-pytest"
52
+ Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.18.0; extra == "dev-pytest"
53
53
  Provides-Extra: dev
54
54
  Requires-Dist: frequenz-api-common[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]; extra == "dev"
55
55
  Dynamic: license-file
@@ -0,0 +1,19 @@
1
+ # Frequenz Common API Release Notes
2
+
3
+ ## Summary
4
+
5
+ This release adds common grid definitions for flexibility service participation.
6
+
7
+ ## Upgrading
8
+
9
+ APIs that currently define flexibility service types, provision periods, or typed resource URIs locally can migrate to the new common grid definitions.
10
+
11
+ ## New Features
12
+
13
+ * Added common grid definitions for flexibility service types.
14
+ * Added common provision duration and provision period definitions.
15
+ * Added common typed resource URI definitions for shared domain resources such as access owners, operators, and flexibility groups.
16
+
17
+ ## Bug Fixes
18
+
19
+ <!-- Here goes notable bug fixes that are worth a special mention or explanation -->
@@ -15,12 +15,12 @@ enum Event {
15
15
  // Default, unspecified event
16
16
  EVENT_UNSPECIFIED = 0;
17
17
 
18
- // A new dispatch has been created
18
+ // A new resource has been created
19
19
  EVENT_CREATED = 1;
20
20
 
21
- // An existing dispatch has been updated
21
+ // An existing resource has been updated
22
22
  EVENT_UPDATED = 2;
23
23
 
24
- // An existing dispatch has been deleted
24
+ // An existing resource has been deleted
25
25
  EVENT_DELETED = 3;
26
26
  }
@@ -0,0 +1,171 @@
1
+ // Frequenz definitions for grid-facing flexibility services.
2
+ //
3
+ // Copyright 2025 Frequenz Energy-as-a-Service GmbH
4
+ //
5
+ // Licensed under the MIT License (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+
8
+ syntax = "proto3";
9
+
10
+ package frequenz.api.common.v1alpha8.grid;
11
+
12
+ // Defines the type of flexibility service associated with a flexibility
13
+ // resource.
14
+ //
15
+ // A flexibility resource can represent an individual asset, an asset group, a
16
+ // microgrid, a Gridpool, or another market-specific aggregation that provides
17
+ // or consumes flexibility.
18
+ //
19
+ // Each service type represents a flexibility service, often corresponding to
20
+ // a market product or grid-operator requirement, with specific rules for
21
+ // activation, delivery, telemetry, and control-signal handling.
22
+ //
23
+ // !!! note "Naming conventions"
24
+ // This enum uses region-neutral terminology and maps it to common
25
+ // flexibility-service names used by grid system operators and market
26
+ // operators in different regions.
27
+ //
28
+ // !!! note "Service behavior"
29
+ // This enum classifies the service type only. Service-specific behavior
30
+ // such as setpoint cadence, ramping windows, activation timing, telemetry
31
+ // requirements, and dispatch method is defined by the service or API that
32
+ // consumes this enum.
33
+ //
34
+ enum FlexServiceType {
35
+ // UNSPECIFIED: Default unspecified value — must not be used.
36
+ FLEX_SERVICE_TYPE_UNSPECIFIED = 0;
37
+
38
+ // PRIMARY: Primary Regulation
39
+ //
40
+ // Also known as:
41
+ // - Frequency Containment Reserve (FCR) [Europe]
42
+ // - Primary Frequency Response [US]
43
+ // - Dynamic Containment [UK]
44
+ //
45
+ // Provides autonomous frequency response within an assigned ΔP capacity band.
46
+ // Participating resources adjust active power locally and in real time based
47
+ // on measured frequency deviations.
48
+ //
49
+ // No centralized real-time dispatch signal is required for activation. The
50
+ // assigned capacity band may be determined by a bid, contract, schedule,
51
+ // or other service commitment.
52
+ //
53
+ // During the provision period, the assigned capacity responsibility may be
54
+ // updated, for example when availability changes or assets are deregistered.
55
+ FLEX_SERVICE_TYPE_PRIMARY = 1;
56
+
57
+ // SECONDARY_POS: Secondary Upward Regulation
58
+ //
59
+ // Also known as:
60
+ // - Automatic Frequency Restoration Reserve Up (aFRR+) [Europe]
61
+ // - Regulation Up [US, PJM]
62
+ // - Dynamic Regulation Up [UK]
63
+ //
64
+ // Supports the grid by increasing net export or reducing net import:
65
+ // - increasing generation or battery discharge,
66
+ // - decreasing consumption or battery charging.
67
+ //
68
+ // Secondary upward regulation is typically activated through recurring
69
+ // explicit control instructions or ΔP setpoints.
70
+ //
71
+ // Unlike primary regulation, activation is signal-based rather than purely
72
+ // autonomous. Participating resources are expected to follow received control
73
+ // instructions within the required ramping and delivery constraints.
74
+ FLEX_SERVICE_TYPE_SECONDARY_POS = 2;
75
+
76
+ // SECONDARY_NEG: Secondary Downward Regulation
77
+ //
78
+ // Also known as:
79
+ // - Automatic Frequency Restoration Reserve Down (aFRR-) [Europe]
80
+ // - Regulation Down / RegD Down [US, PJM]
81
+ // - Dynamic Regulation Down [UK]
82
+ //
83
+ // Supports the grid by reducing net export or increasing net import:
84
+ // - decreasing generation or battery discharge,
85
+ // - increasing consumption or battery charging.
86
+ //
87
+ // Secondary downward regulation is typically activated through recurring
88
+ // explicit control instructions or ΔP setpoints.
89
+ //
90
+ // Unlike primary regulation, activation is signal-based rather than purely
91
+ // autonomous. Participating resources are expected to follow received control
92
+ // instructions within the required ramping and delivery constraints.
93
+ FLEX_SERVICE_TYPE_SECONDARY_NEG = 3;
94
+
95
+ // MANUAL_POS: Manual Upward Reserve
96
+ //
97
+ // Also known as:
98
+ // - mFRR+ / Replacement Reserve Up [Europe]
99
+ // - Contingency Reserve Up [US]
100
+ //
101
+ // Supports the grid by increasing net export or reducing net import:
102
+ // - increasing generation or battery discharge,
103
+ // - decreasing consumption or battery charging.
104
+ //
105
+ // Manual upward reserve is typically activated through explicit control
106
+ // instructions or setpoints.
107
+ //
108
+ // Compared to secondary regulation, activation is usually less frequent and
109
+ // may follow manual, semi-automated, or event-driven operator processes.
110
+ FLEX_SERVICE_TYPE_MANUAL_POS = 4;
111
+
112
+ // MANUAL_NEG: Manual Downward Reserve
113
+ //
114
+ // Also known as:
115
+ // - mFRR– / Replacement Reserve Down [Europe]
116
+ // - Contingency Reserve Down [US]
117
+ //
118
+ // Supports the grid by reducing net export or increasing net import:
119
+ // - decreasing generation or battery discharge,
120
+ // - increasing consumption or battery charging.
121
+ //
122
+ // Manual downward reserve is typically activated through explicit control
123
+ // instructions or setpoints.
124
+ //
125
+ // Compared to secondary regulation, activation is usually less frequent and
126
+ // may follow manual, semi-automated, or event-driven operator processes.
127
+ FLEX_SERVICE_TYPE_MANUAL_NEG = 5;
128
+
129
+ // REPLACEMENT_RESERVE: Replacement Reserve
130
+ //
131
+ // Also known as:
132
+ // - Replacement Reserve (RR) [Europe]
133
+ // - Supplemental Reserve [US]
134
+ //
135
+ // Provides slower reserve capacity to restore operational balance or replace
136
+ // previously activated balancing capacity.
137
+ //
138
+ // Replacement reserve can support the grid in either direction, depending on
139
+ // the relevant market rules or grid-operator requirements:
140
+ // - upward reserve increases net export or reduces net import,
141
+ // - downward reserve reduces net export or increases net import.
142
+ //
143
+ // The activation process and control-instruction semantics are defined by the
144
+ // concrete service rules. Compared to primary and secondary regulation,
145
+ // activation is typically slower and less continuous.
146
+ FLEX_SERVICE_TYPE_REPLACEMENT_RESERVE = 6;
147
+
148
+ // DEMAND: Demand Response
149
+ //
150
+ // Also known as:
151
+ // - Emergency Demand Response
152
+ // - Interruptible Load
153
+ // - Flexible Load or Load Curtailment
154
+ //
155
+ // Provides load-side flexibility by changing consumption in response to
156
+ // market rules, grid-operator requirements, or a specific flexibility
157
+ // service.
158
+ //
159
+ // Demand response most commonly supports the grid by reducing net import:
160
+ // - decreasing consumption,
161
+ // - shifting consumption to another time period,
162
+ // - or temporarily interrupting flexible loads.
163
+ //
164
+ // Some demand-response products may also support increasing net import, for
165
+ // example to absorb excess generation or relieve local grid constraints.
166
+ //
167
+ // Activation is typically event-based or instruction-based rather than
168
+ // autonomous frequency response. Activation timing, duration, and control
169
+ // behavior are service-specific.
170
+ FLEX_SERVICE_TYPE_DEMAND = 7;
171
+ }
@@ -131,11 +131,21 @@ message MarketLocationId {
131
131
  MarketLocationIdType type = 2;
132
132
  }
133
133
 
134
- // Identifies a Market Location.
135
- message MarketLocationSelector {
136
- // Regulatory jurisdiction in which this Market Location is registered.
134
+ // Identifies a Market Location in a specific market area.
135
+ //
136
+ // A Market Location is the official market-facing identifier used for
137
+ // settlement, billing, balancing-group allocation, portfolio aggregation, and
138
+ // grid-operator reporting.
139
+ //
140
+ // Examples include:
141
+ // - Germany: MaLo-ID
142
+ // - UK: MPAN
143
+ // - Australia: NMI
144
+ // - US: ESI-ID
145
+ message MarketLocation {
146
+ // Market area in which the Market Location is registered.
137
147
  frequenz.api.common.v1alpha8.market.MarketArea market_area = 1;
138
148
 
139
- // Official market identifier (MaLo-ID, MPAN, ESI-ID, ...).
149
+ // Official Market Location identifier.
140
150
  MarketLocationId market_location_id = 2;
141
151
  }
@@ -0,0 +1,102 @@
1
+ // Frequenz definitions for provision durations and periods used by
2
+ // grid-facing flexibility services.
3
+ //
4
+ // Copyright 2025 Frequenz Energy-as-a-Service GmbH
5
+ //
6
+ // Licensed under the MIT License (the "License");
7
+ // you may not use this file except in compliance with the License.
8
+
9
+ syntax = "proto3";
10
+
11
+ package frequenz.api.common.v1alpha8.grid;
12
+
13
+ import "google/protobuf/timestamp.proto";
14
+
15
+ // Defines standard provision durations for flexibility services.
16
+ //
17
+ // A provision duration is the duration of a single provision period. In many
18
+ // markets, this corresponds to the delivery block or service interval for which
19
+ // a flexibility service is contracted, committed, or delivered.
20
+ //
21
+ // Provision durations are modeled as an enum because only a fixed set of
22
+ // provision periods is supported by the relevant services, markets, and
23
+ // operator integrations. This makes invalid durations unrepresentable and
24
+ // keeps validation behavior consistent across APIs.
25
+ //
26
+ // !!! note "Duration vs. resolution"
27
+ // This field defines the duration of a single provision period. In market
28
+ // terms, this is often the delivery block or product block for the
29
+ // flexibility service. It does not define the cadence or resolution of
30
+ // telemetry samples, control instructions, or setpoint updates.
31
+ //
32
+ enum ProvisionDuration {
33
+ // UNSPECIFIED: Default value — must not be used in production messages.
34
+ PROVISION_DURATION_UNSPECIFIED = 0;
35
+
36
+ // 5_MIN: 5-minute delivery window (planned for future reconstruction of
37
+ // ancillary service markets).
38
+ PROVISION_DURATION_5_MIN = 1;
39
+
40
+ // 15_MIN: 15-minute delivery window (common in balancing energy markets
41
+ // and secondary regulation).
42
+ PROVISION_DURATION_15_MIN = 2;
43
+
44
+ // 30_MIN: 30-minute delivery block (used in some scheduling or redispatch
45
+ // services).
46
+ PROVISION_DURATION_30_MIN = 3;
47
+
48
+ // 60_MIN: Hourly provision period (e.g., for day-ahead markets or system
49
+ // dispatch).
50
+ PROVISION_DURATION_60_MIN = 4;
51
+
52
+ // 120_MIN: 2-hour blocks, less commonly used but possible in some markets.
53
+ PROVISION_DURATION_120_MIN = 5;
54
+
55
+ // 240_MIN: 4-hour block (e.g., German and EU primary regulation tenders).
56
+ PROVISION_DURATION_240_MIN = 6;
57
+
58
+ // 1440_MIN: Full-day delivery period (e.g., capacity or commitment-based
59
+ // products).
60
+ PROVISION_DURATION_1440_MIN = 7;
61
+ }
62
+
63
+ // Represents the time period during which the flexibility market contract is
64
+ // delivered.
65
+ //
66
+ // This defines the contractual length of a provision period. Valid start
67
+ // times are determined by the combination of duration, flexibility service,
68
+ // delivery area, and market-specific rules
69
+ //
70
+ message ProvisionPeriod {
71
+ // Start UTC timestamp representing the beginning of the provision period.
72
+ //
73
+ // This timestamp is inclusive. The end of the provision period is derived
74
+ // from `start_time` and `duration`.
75
+ //
76
+ // !!! note "Start Time Constraints"
77
+ // The start time must align with the provision duration and the market
78
+ // rules for the selected `FlexServiceType` and delivery area.
79
+ //
80
+ // Unless stricter market-specific rules apply, the following default
81
+ // alignment is used:
82
+ //
83
+ // - 15-minute durations must start at :00, :15, :30, or :45.
84
+ // - 30-minute durations must start at :00 or :30.
85
+ // - 60-minute durations must start at :00 past the hour.
86
+ // - 120-minute durations must start on an even UTC hour
87
+ // (00:00, 02:00, 04:00, ...).
88
+ // - 240-minute durations must start on a UTC hour divisible by 4
89
+ // (00:00, 04:00, 08:00, 12:00, ...).
90
+ // - 1440-minute durations must start at the daily boundary defined by
91
+ // the relevant market rules for the selected delivery area. If no
92
+ // market-specific rule applies, this defaults to 00:00 UTC.
93
+ //
94
+ // Market-specific rules may further restrict valid start times. For
95
+ // example, a 4-hour product may only support predefined auction blocks,
96
+ // and a full-day product may follow the delivery-day definition of the
97
+ // relevant market.
98
+ google.protobuf.Timestamp start_time = 1;
99
+
100
+ // The length of the provision period.
101
+ ProvisionDuration duration = 2;
102
+ }
@@ -0,0 +1,167 @@
1
+ // Domain Resource URI definitions used across Frequenz APIs.
2
+ //
3
+ // Resource URIs identify domain resources such as access owners, operators,
4
+ // flexibility groups, control groups, or other resources that participate in
5
+ // energy, flexibility, grid-operation, or market workflows.
6
+ //
7
+ // Copyright 2025 Frequenz Energy-as-a-Service GmbH
8
+ //
9
+ // Licensed under the MIT License (the "License");
10
+ // you may not use this file except in compliance with the License.
11
+
12
+ syntax = "proto3";
13
+
14
+ package frequenz.api.common.v1alpha8.identity;
15
+
16
+ // Classifies the type of resource identified by a `ResourceUri`.
17
+ //
18
+ // The URI scheme identifies the general namespace, while the `type` field
19
+ // provides the domain-specific interpretation. For example, `group://...`
20
+ // identifies a group resource; when used with `RESOURCE_URI_TYPE_FLEX_GROUP`,
21
+ // that group is interpreted as a flexibility group.
22
+ //
23
+ // !!! note "URI scheme vs. resource type"
24
+ // URI schemes and resource types do not need to be one-to-one.
25
+ // For example:
26
+ // - A URI like `access-owner://frequenz` with
27
+ // `RESOURCE_URI_TYPE_ACCESS_OWNER` identifies a flexibility market
28
+ // access owner.
29
+ // - A URI like `operator://50hertz` with
30
+ // `RESOURCE_URI_TYPE_OPERATOR` identifies an operator or control-system
31
+ // authority.
32
+ // - A URI like `group://frequenz/secondary/fsp_q3` with
33
+ // `RESOURCE_URI_TYPE_FLEX_GROUP` identifies a flexibility group.
34
+ //
35
+ enum ResourceUriType {
36
+ // UNSPECIFIED: Default unspecified value — must not be used in production
37
+ // messages.
38
+ RESOURCE_URI_TYPE_UNSPECIFIED = 0;
39
+
40
+ // ACCESS_OWNER: Flexibility market access owner URI.
41
+ //
42
+ // Identifies the entity that holds or represents the market access rights
43
+ // under which flexibility services are offered, activated, or settled.
44
+ //
45
+ // An access owner may define or authorize flexibility groups and may
46
+ // represent microgrids, Gridpools, asset groups, or other flexibility
47
+ // resources toward market operators, grid operators, or flexibility
48
+ // platforms.
49
+ //
50
+ // Depending on the market model, this role may be referred to as a
51
+ // flexibility service provider, balancing service provider, aggregator, or
52
+ // virtual power plant operator. In this API, the generic term is access
53
+ // owner.
54
+ RESOURCE_URI_TYPE_ACCESS_OWNER = 1;
55
+
56
+ // OPERATOR: Operator URI.
57
+ //
58
+ // Identifies an entity or system authorized to operate, coordinate, validate,
59
+ // or issue control instructions for grid-facing or market-facing
60
+ // integrations.
61
+ //
62
+ // An operator may represent a grid operator, market operator, flexibility
63
+ // platform, gateway, or control-system authority. Unlike an access owner, an
64
+ // operator does not necessarily hold flexibility market access rights. It may
65
+ // instead act as the external or internal authority that exchanges setpoints,
66
+ // telemetry, status information, or validation signals with the platform.
67
+ //
68
+ // Typical examples include transmission system operators (TSOs),
69
+ // distribution system operators (DSOs), market operators, flexibility
70
+ // platforms, or gateway systems such as GridLink.
71
+ RESOURCE_URI_TYPE_OPERATOR = 2;
72
+
73
+ // FLEX_GROUP: Flexibility group URI.
74
+ //
75
+ // Identifies a logical group of microgrids or assets that can jointly
76
+ // participate in a flexibility service.
77
+ //
78
+ // !!! note "What is a flexibility group?"
79
+ // A flexibility group represents a logical group of microgrids or assets
80
+ // that can jointly participate in flexibility services.
81
+ //
82
+ // Instruction delivery, telemetry interpretation, and delivery evaluation
83
+ // are determined by the concrete participation context, such as the
84
+ // flexibility group, service type, and provision period.
85
+ //
86
+ // !!! note "Terminology across markets"
87
+ // Different markets use different terms for the concept of a
88
+ // flexibility group:
89
+ // - Europe: "Pool" or "Flexibility Service Provider Group"
90
+ // - US: "Aggregated Resource", "DER Aggregation", "Composite Resource"
91
+ // - UK: "Balancing Unit (BU)", "VLP Group", "Asset Group"
92
+ //
93
+ // !!! note "Examples for flexibility group usage"
94
+ // - A group of microgrids committed together to provide FCR capacity in a
95
+ // specific delivery area.
96
+ // - A group of controllable batteries used to follow an aFRR activation
97
+ // signal as one aggregated flexibility unit.
98
+ // - A group of flexible loads participating in a demand-response product
99
+ // for congestion relief.
100
+ RESOURCE_URI_TYPE_FLEX_GROUP = 3;
101
+
102
+ // GROUP: Generic group URI.
103
+ //
104
+ // Identifies a logical aggregation of assets, microgrids, controllable
105
+ // components, or other resources that are addressed as one unit.
106
+ //
107
+ // A group is intentionally context-neutral. It can be used whenever the API
108
+ // needs to refer to an aggregated resource scope without assigning a specific
109
+ // market, regulatory, or product meaning to that aggregation.
110
+ //
111
+ // !!! note "Generic group vs. flexibility group"
112
+ // Use `RESOURCE_URI_TYPE_GROUP` when the group is merely the addressed
113
+ // scope for telemetry, setpoints, control, routing, status reporting, or
114
+ // another operational interaction.
115
+ //
116
+ // Use `RESOURCE_URI_TYPE_FLEX_GROUP` when the group specifically
117
+ // represents a flexibility-market or provision-registration concept, such
118
+ // as a pool used for bid placement, reserve provisioning, activation, or
119
+ // delivery validation.
120
+ //
121
+ // !!! note "Examples for generic group usage"
122
+ // - A controllable asset group used by GridGuard, such as all batteries,
123
+ // all PV inverters, or another DER subset in a microgrid.
124
+ // - A GridLink routing scope used to exchange telemetry, setpoints,
125
+ // communication status, or activation acknowledgements.
126
+ // - A curtailment or grid-compliance group defined by an operator or
127
+ // control-system integration.
128
+ RESOURCE_URI_TYPE_GROUP = 4;
129
+ }
130
+
131
+ // Represents a typed URI to identify a resource in the Frequenz ecosystem.
132
+ //
133
+ // !!! format "Structure"
134
+ // URIs must follow the format:
135
+ // ```
136
+ // <scheme>://<authority>/<path>...
137
+ // ```
138
+ //
139
+ // Examples:
140
+ // - `access-owner://frequenz` → flexibility market access owner
141
+ // - `operator://50hertz` → operator or control-system authority
142
+ // - `group://frequenz/primary/pool-1` → flexibility group
143
+ //
144
+ // !!! example
145
+ // ```
146
+ // ResourceUri {
147
+ // uri: "group://frequenz/secondary/fsp_q3",
148
+ // type: RESOURCE_URI_TYPE_FLEX_GROUP
149
+ // }
150
+ // ```
151
+ //
152
+ message ResourceUri {
153
+ // Full URI string, including scheme, authority, and optional path.
154
+ string uri = 1;
155
+
156
+ // Expected domain-specific resource type for validation.
157
+ //
158
+ // The resource type is used to validate that `uri` identifies the expected
159
+ // kind of resource. For example, a value of `RESOURCE_URI_TYPE_FLEX_GROUP`
160
+ // requires a URI that identifies a flexibility group, such as one using the
161
+ // `group://` scheme according to the URI conventions of this API.
162
+ //
163
+ // This field is intentionally explicit instead of being inferred only from
164
+ // the URI string, so clients and servers can reject mismatches early and make
165
+ // the expected resource category clear in API messages.
166
+ ResourceUriType type = 2;
167
+ }
@@ -15,12 +15,12 @@ enum Event {
15
15
  // Default, unspecified event
16
16
  EVENT_UNSPECIFIED = 0;
17
17
 
18
- // A new dispatch has been created
18
+ // A new resource has been created
19
19
  EVENT_CREATED = 1;
20
20
 
21
- // An existing dispatch has been updated
21
+ // An existing resource has been updated
22
22
  EVENT_UPDATED = 2;
23
23
 
24
- // An existing dispatch has been deleted
24
+ // An existing resource has been deleted
25
25
  EVENT_DELETED = 3;
26
26
  }
@@ -0,0 +1,4 @@
1
+ # License: MIT
2
+ # Copyright © 2025 Frequenz Energy-as-a-Service GmbH
3
+
4
+ """Grid bindings for Frequenz common gRPC API."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frequenz-api-common
3
- Version: 0.8.8
3
+ Version: 0.8.10
4
4
  Summary: Frequenz common gRPC API and bindings
5
5
  Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
6
6
  License-Expression: MIT
@@ -19,16 +19,16 @@ Requires-Python: <4,>=3.11
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: protobuf<8,>=6.33.6
22
- Requires-Dist: grpcio<2,>=1.80.0
22
+ Requires-Dist: grpcio<2,>=1.81.0
23
23
  Provides-Extra: dev-flake8
24
24
  Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
25
25
  Requires-Dist: flake8-datetimez==20.10.0; extra == "dev-flake8"
26
26
  Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
27
27
  Requires-Dist: flake8-pyproject==1.2.4; extra == "dev-flake8"
28
- Requires-Dist: pydoclint==0.8.3; extra == "dev-flake8"
28
+ Requires-Dist: pydoclint==0.8.6; extra == "dev-flake8"
29
29
  Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
30
30
  Provides-Extra: dev-formatting
31
- Requires-Dist: black==26.3.1; extra == "dev-formatting"
31
+ Requires-Dist: black==26.5.1; extra == "dev-formatting"
32
32
  Requires-Dist: isort==8.0.1; extra == "dev-formatting"
33
33
  Provides-Extra: dev-mkdocs
34
34
  Requires-Dist: mike==1.1.2; extra == "dev-mkdocs"
@@ -36,20 +36,20 @@ Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
36
36
  Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
37
37
  Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
38
38
  Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
39
- Requires-Dist: frequenz-repo-config[api]==0.17.0; extra == "dev-mkdocs"
39
+ Requires-Dist: frequenz-repo-config[api]==0.18.0; extra == "dev-mkdocs"
40
40
  Provides-Extra: dev-mypy
41
- Requires-Dist: mypy==1.20.2; extra == "dev-mypy"
41
+ Requires-Dist: mypy==2.1.0; extra == "dev-mypy"
42
42
  Requires-Dist: grpc-stubs==1.53.0.6; extra == "dev-mypy"
43
43
  Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
44
44
  Provides-Extra: dev-noxfile
45
45
  Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
46
- Requires-Dist: frequenz-repo-config[api]==0.17.0; extra == "dev-noxfile"
46
+ Requires-Dist: frequenz-repo-config[api]==0.18.0; extra == "dev-noxfile"
47
47
  Provides-Extra: dev-pylint
48
48
  Requires-Dist: pylint==4.0.5; extra == "dev-pylint"
49
49
  Requires-Dist: frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
50
50
  Provides-Extra: dev-pytest
51
51
  Requires-Dist: pytest==9.0.3; extra == "dev-pytest"
52
- Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.17.0; extra == "dev-pytest"
52
+ Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.18.0; extra == "dev-pytest"
53
53
  Provides-Extra: dev
54
54
  Requires-Dist: frequenz-api-common[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]; extra == "dev"
55
55
  Dynamic: license-file
@@ -49,8 +49,11 @@ proto/frequenz/api/common/v1alpha7/type/location.proto
49
49
  proto/frequenz/api/common/v1alpha8/grid/balancing_group.proto
50
50
  proto/frequenz/api/common/v1alpha8/grid/delivery_area.proto
51
51
  proto/frequenz/api/common/v1alpha8/grid/delivery_duration.proto
52
+ proto/frequenz/api/common/v1alpha8/grid/flexibility_service.proto
52
53
  proto/frequenz/api/common/v1alpha8/grid/market_location.proto
54
+ proto/frequenz/api/common/v1alpha8/grid/provision_duration.proto
53
55
  proto/frequenz/api/common/v1alpha8/gridpool/gridpool.proto
56
+ proto/frequenz/api/common/v1alpha8/identity/resource_uri.proto
54
57
  proto/frequenz/api/common/v1alpha8/market/energy.proto
55
58
  proto/frequenz/api/common/v1alpha8/market/market_area.proto
56
59
  proto/frequenz/api/common/v1alpha8/market/power.proto
@@ -94,6 +97,7 @@ py/frequenz/api/common/v1alpha7/type/__init__.py
94
97
  py/frequenz/api/common/v1alpha8/__init__.py
95
98
  py/frequenz/api/common/v1alpha8/grid/__init__.py
96
99
  py/frequenz/api/common/v1alpha8/gridpool/__init__.py
100
+ py/frequenz/api/common/v1alpha8/identity/__init__.py
97
101
  py/frequenz/api/common/v1alpha8/market/__init__.py
98
102
  py/frequenz/api/common/v1alpha8/metrics/__init__.py
99
103
  py/frequenz/api/common/v1alpha8/microgrid/__init__.py
@@ -1,5 +1,5 @@
1
1
  protobuf<8,>=6.33.6
2
- grpcio<2,>=1.80.0
2
+ grpcio<2,>=1.81.0
3
3
 
4
4
  [dev]
5
5
  frequenz-api-common[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]
@@ -9,11 +9,11 @@ flake8==7.3.0
9
9
  flake8-datetimez==20.10.0
10
10
  flake8-docstrings==1.7.0
11
11
  flake8-pyproject==1.2.4
12
- pydoclint==0.8.3
12
+ pydoclint==0.8.6
13
13
  pydocstyle==6.3.0
14
14
 
15
15
  [dev-formatting]
16
- black==26.3.1
16
+ black==26.5.1
17
17
  isort==8.0.1
18
18
 
19
19
  [dev-mkdocs]
@@ -22,16 +22,16 @@ mkdocs-gen-files==0.6.1
22
22
  mkdocs-literate-nav==0.6.3
23
23
  mkdocs-material==9.7.6
24
24
  mkdocstrings[python]==1.0.4
25
- frequenz-repo-config[api]==0.17.0
25
+ frequenz-repo-config[api]==0.18.0
26
26
 
27
27
  [dev-mypy]
28
- mypy==1.20.2
28
+ mypy==2.1.0
29
29
  grpc-stubs==1.53.0.6
30
30
  frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]
31
31
 
32
32
  [dev-noxfile]
33
33
  nox==2026.4.10
34
- frequenz-repo-config[api]==0.17.0
34
+ frequenz-repo-config[api]==0.18.0
35
35
 
36
36
  [dev-pylint]
37
37
  pylint==4.0.5
@@ -39,4 +39,4 @@ frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]
39
39
 
40
40
  [dev-pytest]
41
41
  pytest==9.0.3
42
- frequenz-repo-config[extra-lint-examples]==0.17.0
42
+ frequenz-repo-config[extra-lint-examples]==0.18.0
@@ -5,14 +5,14 @@
5
5
  requires = [
6
6
  "setuptools == 82.0.1",
7
7
  "setuptools_scm[toml] == 10.0.5",
8
- "frequenz-repo-config[api] == 0.17.0",
8
+ "frequenz-repo-config[api] == 0.18.0",
9
9
  # We need to pin the protobuf, grpcio and grpcio-tools dependencies to make
10
10
  # sure the code is generated using the minimum supported versions, as older
11
11
  # versions can't work with code that was generated with newer versions.
12
12
  # https://protobuf.dev/support/cross-version-runtime-guarantee/#backwards
13
13
  "protobuf == 6.33.6",
14
- "grpcio-tools == 1.80.0",
15
- "grpcio == 1.80.0",
14
+ "grpcio-tools == 1.81.0",
15
+ "grpcio == 1.81.0",
16
16
  ]
17
17
  build-backend = "setuptools.build_meta"
18
18
 
@@ -40,7 +40,7 @@ dependencies = [
40
40
  # We couldn't find any document with a spec about the cross-version runtime
41
41
  # guarantee for grpcio, so unless we find one in the future, we'll assume
42
42
  # major version jumps are not compatible
43
- "grpcio >= 1.80.0, < 2", # Do not widen beyond 2!
43
+ "grpcio >= 1.81.0, < 2", # Do not widen beyond 2!
44
44
  ]
45
45
  dynamic = ["version"]
46
46
 
@@ -54,25 +54,25 @@ dev-flake8 = [
54
54
  "flake8-datetimez == 20.10.0",
55
55
  "flake8-docstrings == 1.7.0",
56
56
  "flake8-pyproject == 1.2.4", # For reading the flake8 config from pyproject.toml
57
- "pydoclint == 0.8.3",
57
+ "pydoclint == 0.8.6",
58
58
  "pydocstyle == 6.3.0",
59
59
  ]
60
- dev-formatting = ["black == 26.3.1", "isort == 8.0.1"]
60
+ dev-formatting = ["black == 26.5.1", "isort == 8.0.1"]
61
61
  dev-mkdocs = [
62
62
  "mike == 1.1.2",
63
63
  "mkdocs-gen-files == 0.6.1",
64
64
  "mkdocs-literate-nav == 0.6.3",
65
65
  "mkdocs-material == 9.7.6",
66
66
  "mkdocstrings[python] == 1.0.4",
67
- "frequenz-repo-config[api] == 0.17.0",
67
+ "frequenz-repo-config[api] == 0.18.0",
68
68
  ]
69
69
  dev-mypy = [
70
- "mypy == 1.20.2",
70
+ "mypy == 2.1.0",
71
71
  "grpc-stubs == 1.53.0.6",
72
72
  # For checking the noxfile, docs/ script, and tests
73
73
  "frequenz-api-common[dev-mkdocs,dev-noxfile,dev-pytest]",
74
74
  ]
75
- dev-noxfile = ["nox == 2026.4.10", "frequenz-repo-config[api] == 0.17.0"]
75
+ dev-noxfile = ["nox == 2026.4.10", "frequenz-repo-config[api] == 0.18.0"]
76
76
  dev-pylint = [
77
77
  "pylint == 4.0.5",
78
78
  # For checking the noxfile, docs/ script, and tests
@@ -80,7 +80,7 @@ dev-pylint = [
80
80
  ]
81
81
  dev-pytest = [
82
82
  "pytest == 9.0.3",
83
- "frequenz-repo-config[extra-lint-examples] == 0.17.0",
83
+ "frequenz-repo-config[extra-lint-examples] == 0.18.0",
84
84
  ]
85
85
  dev = [
86
86
  "frequenz-api-common[dev-mkdocs,dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]",
@@ -101,11 +101,15 @@ include_paths = []
101
101
  [tool.black]
102
102
  line-length = 88
103
103
  target-version = ['py311']
104
+ # Submodules may contain external code that doesn't follow our formatting rules.
105
+ extend-exclude = '^/submodules/'
104
106
 
105
107
  [tool.isort]
106
108
  profile = "black"
107
109
  line_length = 88
108
110
  src_paths = ["benchmarks", "examples", "src", "tests"]
111
+ # Submodules may contain external code that doesn't follow our import sorting rules.
112
+ skip_glob = ["submodules/*"]
109
113
 
110
114
  [tool.flake8]
111
115
  # We give some flexibility to go over 88, there are cases like long URLs or
@@ -1,17 +0,0 @@
1
- # Frequenz Common API Release Notes
2
-
3
- ## Summary
4
-
5
- This release includes addition a new definition of balancing group in
6
- v1alpha8 and moved market location definition to the `grid` submodule.
7
-
8
- ## Upgrading
9
-
10
- ## New Features
11
-
12
- - Added `BalancingGroup` to
13
- "frequenz/api/common/v1alpha8/grid/balancing_group.proto"
14
-
15
- ## Bug Fixes
16
-
17
- <!-- Here goes notable bug fixes that are worth a special mention or explanation -->