frequenz-cs-reporting 0.2.9__tar.gz → 0.2.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.
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/PKG-INFO +13 -13
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/RELEASE_NOTES.md +2 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/pyproject.toml +13 -13
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/components/plot_charts.py +5 -1
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/metric_renderers.py +9 -2
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/plot_renderers.py +21 -3
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/table_renderers.py +4 -2
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz_cs_reporting.egg-info/PKG-INFO +13 -13
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz_cs_reporting.egg-info/requires.txt +12 -12
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/toml_directory/__init__.py +1 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/.streamlit/config.toml +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/Dockerfile +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/LICENSE +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/MANIFEST.in +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/README.md +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/app.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/setup.cfg +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/app_pages/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/app_pages/home.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/app_pages/reporting.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/app_pages/solar.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/assets/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/assets/neustrom_background.png +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/assets/neustrom_logo.png +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/components/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/components/inputs.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/components/sidebar_inputs.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/components/tables.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/components/ui.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/conftest.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/constants.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/py.typed +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/rep_cs_core/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/rep_cs_core/config.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/rep_cs_core/page_spec.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/services/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/services/client_factory.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/services/data_service.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/services/solar_workflow.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/styles/dashboard.css +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/styles/home.css +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/styles/kpi.css +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/styles/plot_card.css +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/dashboard_section_divider.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_feature_grid.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_feature_item.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_footer.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_hero.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_logo.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_stat_item.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/templates/home_stats.html +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/ui_resources.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/utils/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/utils/env.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/utils/time.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/__init__.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/dashboard.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/sections.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/views/solar_results.py +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz_cs_reporting.egg-info/SOURCES.txt +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz_cs_reporting.egg-info/dependency_links.txt +0 -0
- {frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz_cs_reporting.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frequenz-cs-reporting
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.10
|
|
4
4
|
Summary: Streamlit Library for reporting and solar monitoring
|
|
5
5
|
Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -38,39 +38,39 @@ Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
|
|
|
38
38
|
Requires-Dist: flake8-datetimez==20.10.0; extra == "dev-flake8"
|
|
39
39
|
Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
|
|
40
40
|
Requires-Dist: flake8-pyproject==1.2.4; extra == "dev-flake8"
|
|
41
|
-
Requires-Dist: pydoclint==0.8.
|
|
41
|
+
Requires-Dist: pydoclint==0.8.6; extra == "dev-flake8"
|
|
42
42
|
Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
|
|
43
43
|
Provides-Extra: dev-formatting
|
|
44
|
-
Requires-Dist: black==26.
|
|
44
|
+
Requires-Dist: black==26.5.1; extra == "dev-formatting"
|
|
45
45
|
Requires-Dist: isort==8.0.1; extra == "dev-formatting"
|
|
46
46
|
Provides-Extra: dev-mkdocs
|
|
47
47
|
Requires-Dist: Markdown==3.10.2; extra == "dev-mkdocs"
|
|
48
|
-
Requires-Dist: black==26.
|
|
48
|
+
Requires-Dist: black==26.5.1; extra == "dev-mkdocs"
|
|
49
49
|
Requires-Dist: mike==2.2.0; extra == "dev-mkdocs"
|
|
50
50
|
Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
|
|
51
51
|
Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
|
|
52
52
|
Requires-Dist: mkdocs-macros-plugin==1.5.0; extra == "dev-mkdocs"
|
|
53
53
|
Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
|
|
54
54
|
Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
|
|
55
|
-
Requires-Dist: mkdocstrings-python==2.0.
|
|
56
|
-
Requires-Dist: frequenz-repo-config[lib]==0.
|
|
55
|
+
Requires-Dist: mkdocstrings-python==2.0.4; extra == "dev-mkdocs"
|
|
56
|
+
Requires-Dist: frequenz-repo-config[lib]==0.18.0; extra == "dev-mkdocs"
|
|
57
57
|
Provides-Extra: dev-mypy
|
|
58
|
-
Requires-Dist: mypy==1.
|
|
59
|
-
Requires-Dist: types-Markdown==3.10.2.
|
|
58
|
+
Requires-Dist: mypy==2.1.0; extra == "dev-mypy"
|
|
59
|
+
Requires-Dist: types-Markdown==3.10.2.20260518; extra == "dev-mypy"
|
|
60
60
|
Requires-Dist: types-pytz; extra == "dev-mypy"
|
|
61
61
|
Requires-Dist: pandas-stubs; extra == "dev-mypy"
|
|
62
62
|
Requires-Dist: frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
|
|
63
63
|
Provides-Extra: dev-noxfile
|
|
64
64
|
Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
|
|
65
|
-
Requires-Dist: frequenz-repo-config[lib]==0.
|
|
65
|
+
Requires-Dist: frequenz-repo-config[lib]==0.18.0; extra == "dev-noxfile"
|
|
66
66
|
Provides-Extra: dev-pylint
|
|
67
67
|
Requires-Dist: frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
|
|
68
68
|
Provides-Extra: dev-pytest
|
|
69
|
-
Requires-Dist: pytest==9.0
|
|
70
|
-
Requires-Dist: pylint==4.0.
|
|
71
|
-
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.
|
|
69
|
+
Requires-Dist: pytest==9.1.0; extra == "dev-pytest"
|
|
70
|
+
Requires-Dist: pylint==4.0.6; extra == "dev-pytest"
|
|
71
|
+
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.18.0; extra == "dev-pytest"
|
|
72
72
|
Requires-Dist: pytest-mock==3.15.1; extra == "dev-pytest"
|
|
73
|
-
Requires-Dist: pytest-asyncio==1.
|
|
73
|
+
Requires-Dist: pytest-asyncio==1.4.0; extra == "dev-pytest"
|
|
74
74
|
Requires-Dist: async-solipsism==0.9; extra == "dev-pytest"
|
|
75
75
|
Provides-Extra: dev
|
|
76
76
|
Requires-Dist: frequenz-cs-reporting[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]; extra == "dev"
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
requires = [
|
|
6
6
|
"setuptools == 82.0.1",
|
|
7
7
|
"setuptools_scm[toml] == 10.0.5",
|
|
8
|
-
"frequenz-repo-config[lib] == 0.
|
|
8
|
+
"frequenz-repo-config[lib] == 0.18.0",
|
|
9
9
|
]
|
|
10
10
|
build-backend = "setuptools.build_meta"
|
|
11
11
|
|
|
@@ -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.
|
|
57
|
+
"pydoclint == 0.8.6",
|
|
58
58
|
"pydocstyle == 6.3.0",
|
|
59
59
|
]
|
|
60
|
-
dev-formatting = ["black == 26.
|
|
60
|
+
dev-formatting = ["black == 26.5.1", "isort == 8.0.1"]
|
|
61
61
|
dev-mkdocs = [
|
|
62
62
|
"Markdown == 3.10.2",
|
|
63
|
-
"black == 26.
|
|
63
|
+
"black == 26.5.1",
|
|
64
64
|
"mike == 2.2.0",
|
|
65
65
|
"mkdocs-gen-files == 0.6.1",
|
|
66
66
|
"mkdocs-literate-nav == 0.6.3",
|
|
67
67
|
"mkdocs-macros-plugin == 1.5.0",
|
|
68
68
|
"mkdocs-material == 9.7.6",
|
|
69
69
|
"mkdocstrings[python] == 1.0.4",
|
|
70
|
-
"mkdocstrings-python == 2.0.
|
|
71
|
-
"frequenz-repo-config[lib] == 0.
|
|
70
|
+
"mkdocstrings-python == 2.0.4",
|
|
71
|
+
"frequenz-repo-config[lib] == 0.18.0",
|
|
72
72
|
]
|
|
73
73
|
dev-mypy = [
|
|
74
|
-
"mypy == 1.
|
|
75
|
-
"types-Markdown == 3.10.2.
|
|
74
|
+
"mypy == 2.1.0",
|
|
75
|
+
"types-Markdown == 3.10.2.20260518",
|
|
76
76
|
"types-pytz",
|
|
77
77
|
"pandas-stubs",
|
|
78
78
|
# For checking the noxfile, docs/ script, and tests
|
|
@@ -80,7 +80,7 @@ dev-mypy = [
|
|
|
80
80
|
]
|
|
81
81
|
dev-noxfile = [
|
|
82
82
|
"nox == 2026.4.10",
|
|
83
|
-
"frequenz-repo-config[lib] == 0.
|
|
83
|
+
"frequenz-repo-config[lib] == 0.18.0",
|
|
84
84
|
]
|
|
85
85
|
dev-pylint = [
|
|
86
86
|
# dev-pytest already defines a dependency to pylint because of the examples
|
|
@@ -88,11 +88,11 @@ dev-pylint = [
|
|
|
88
88
|
"frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]",
|
|
89
89
|
]
|
|
90
90
|
dev-pytest = [
|
|
91
|
-
"pytest == 9.0
|
|
92
|
-
"pylint == 4.0.
|
|
93
|
-
"frequenz-repo-config[extra-lint-examples] == 0.
|
|
91
|
+
"pytest == 9.1.0",
|
|
92
|
+
"pylint == 4.0.6", # We need this to check for the examples
|
|
93
|
+
"frequenz-repo-config[extra-lint-examples] == 0.18.0",
|
|
94
94
|
"pytest-mock == 3.15.1",
|
|
95
|
-
"pytest-asyncio == 1.
|
|
95
|
+
"pytest-asyncio == 1.4.0",
|
|
96
96
|
"async-solipsism == 0.9",
|
|
97
97
|
]
|
|
98
98
|
dev = [
|
|
@@ -198,9 +198,13 @@ def plot_percentage_bar(
|
|
|
198
198
|
"font_color": "#f8fafc",
|
|
199
199
|
"bordercolor": "#334155",
|
|
200
200
|
},
|
|
201
|
+
separators=",.",
|
|
201
202
|
annotations=[
|
|
202
203
|
{
|
|
203
|
-
"text": f"<b>{total_key}:</b> {total:,.0f}
|
|
204
|
+
"text": f"<b>{total_key}:</b> {total:,.0f}".replace(",", "X")
|
|
205
|
+
.replace(".", ",")
|
|
206
|
+
.replace("X", ".")
|
|
207
|
+
+ " kWh",
|
|
204
208
|
"x": 0.5,
|
|
205
209
|
"xref": "paper",
|
|
206
210
|
"y": 1.35,
|
|
@@ -12,6 +12,13 @@ import streamlit as st
|
|
|
12
12
|
from frequenz.cs_reporting.components.plot_charts import plot_percentage_bar
|
|
13
13
|
from frequenz.cs_reporting.ui_resources import inject_style
|
|
14
14
|
|
|
15
|
+
|
|
16
|
+
def _fmt_de(val: float, decimals: int) -> str:
|
|
17
|
+
"""Format a number in German locale (period thousands, comma decimal)."""
|
|
18
|
+
formatted = f"{val:,.{decimals}f}"
|
|
19
|
+
return formatted.replace(",", "X").replace(".", ",").replace("X", ".")
|
|
20
|
+
|
|
21
|
+
|
|
15
22
|
# ── Section accent colours ─────────────────────────────────────────────────────
|
|
16
23
|
# Each reporting section gets a distinct left-border colour so the dashboard
|
|
17
24
|
# reads as a structured, visually hierarchical document.
|
|
@@ -154,9 +161,9 @@ def render_box_grid(
|
|
|
154
161
|
'<div class="kpi-card__value kpi-card__value--null">—</div>'
|
|
155
162
|
)
|
|
156
163
|
elif isinstance(val, float) and val == int(val):
|
|
157
|
-
value_html = f'<div class="kpi-card__value">{val
|
|
164
|
+
value_html = f'<div class="kpi-card__value">{_fmt_de(val, 0)}</div>'
|
|
158
165
|
elif isinstance(val, (int, float)):
|
|
159
|
-
value_html = f'<div class="kpi-card__value">{val
|
|
166
|
+
value_html = f'<div class="kpi-card__value">{_fmt_de(val, 2)}</div>'
|
|
160
167
|
else:
|
|
161
168
|
value_html = f'<div class="kpi-card__value">{val}</div>'
|
|
162
169
|
|
|
@@ -28,7 +28,7 @@ _DEFAULT_PLOT_ORDER = [
|
|
|
28
28
|
"Zeitpunkt",
|
|
29
29
|
"MID Gesamtverbrauch",
|
|
30
30
|
"Netzbezug",
|
|
31
|
-
"
|
|
31
|
+
"Netzeinspeisung",
|
|
32
32
|
"PV-Erzeugung",
|
|
33
33
|
"KWK-Erzeugung",
|
|
34
34
|
"Wind-Erzeugung",
|
|
@@ -36,7 +36,18 @@ _DEFAULT_PLOT_ORDER = [
|
|
|
36
36
|
]
|
|
37
37
|
|
|
38
38
|
_DEFAULT_DOTTED_COLS = ["Netzbezug"]
|
|
39
|
-
_FILL_EXCLUDE = {
|
|
39
|
+
_FILL_EXCLUDE = {
|
|
40
|
+
"Zeitpunkt",
|
|
41
|
+
"MID Gesamtverbrauch",
|
|
42
|
+
"Netzbezug",
|
|
43
|
+
"Netzeinspeisung",
|
|
44
|
+
"Netz Einspeisung",
|
|
45
|
+
}
|
|
46
|
+
_OVERVIEW_ALIASES = {
|
|
47
|
+
"BHKW-Erzeugung": "KWK-Erzeugung",
|
|
48
|
+
"CHP": "KWK-Erzeugung",
|
|
49
|
+
"Netz Einspeisung": "Netzeinspeisung",
|
|
50
|
+
}
|
|
40
51
|
_COMPONENT_TABS = [
|
|
41
52
|
("PV Leistung", "pv"),
|
|
42
53
|
("Batterie", "batt"),
|
|
@@ -214,7 +225,14 @@ def _prepare_overview_df(
|
|
|
214
225
|
|
|
215
226
|
overview_df = mapper.to_display(overview_df)
|
|
216
227
|
# Compatibility shim until the latest lib notebooks update rolls out
|
|
217
|
-
|
|
228
|
+
overview_df = overview_df.rename(columns=COLUMN_RENAME_MAP)
|
|
229
|
+
|
|
230
|
+
# Normalize known legacy aliases so plot ordering always includes key series.
|
|
231
|
+
for source, target in _OVERVIEW_ALIASES.items():
|
|
232
|
+
if source in overview_df.columns and target not in overview_df.columns:
|
|
233
|
+
overview_df = overview_df.rename(columns={source: target})
|
|
234
|
+
|
|
235
|
+
return overview_df
|
|
218
236
|
|
|
219
237
|
|
|
220
238
|
def _render_overview_plot(
|
|
@@ -131,7 +131,7 @@ def render_table_section(
|
|
|
131
131
|
header_cols[0].markdown("", unsafe_allow_html=True)
|
|
132
132
|
|
|
133
133
|
if not safe_df.empty:
|
|
134
|
-
csv_bytes = display_df.to_csv(index=False).encode("utf-8")
|
|
134
|
+
csv_bytes = display_df.to_csv(index=False, sep=";", decimal=",").encode("utf-8")
|
|
135
135
|
_style_download_button(header_cols[1])
|
|
136
136
|
header_cols[1].download_button(
|
|
137
137
|
label="CSV herunterladen",
|
|
@@ -160,7 +160,9 @@ def render_master_df(master_df: pd.DataFrame) -> None:
|
|
|
160
160
|
header_cols = st.columns([10, 1])
|
|
161
161
|
header_cols[0].caption("Standardized master dataframe")
|
|
162
162
|
display_df = _round_numeric_columns(master_df)
|
|
163
|
-
master_csv = display_df.to_csv(index=False).encode(
|
|
163
|
+
master_csv = display_df.to_csv(index=False, sep=";", decimal=",").encode(
|
|
164
|
+
"utf-8"
|
|
165
|
+
)
|
|
164
166
|
_style_download_button(header_cols[1])
|
|
165
167
|
header_cols[1].download_button(
|
|
166
168
|
label="Download Gesamt-Datensatz",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frequenz-cs-reporting
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.10
|
|
4
4
|
Summary: Streamlit Library for reporting and solar monitoring
|
|
5
5
|
Author-email: Frequenz Energy-as-a-Service GmbH <floss@frequenz.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -38,39 +38,39 @@ Requires-Dist: flake8==7.3.0; extra == "dev-flake8"
|
|
|
38
38
|
Requires-Dist: flake8-datetimez==20.10.0; extra == "dev-flake8"
|
|
39
39
|
Requires-Dist: flake8-docstrings==1.7.0; extra == "dev-flake8"
|
|
40
40
|
Requires-Dist: flake8-pyproject==1.2.4; extra == "dev-flake8"
|
|
41
|
-
Requires-Dist: pydoclint==0.8.
|
|
41
|
+
Requires-Dist: pydoclint==0.8.6; extra == "dev-flake8"
|
|
42
42
|
Requires-Dist: pydocstyle==6.3.0; extra == "dev-flake8"
|
|
43
43
|
Provides-Extra: dev-formatting
|
|
44
|
-
Requires-Dist: black==26.
|
|
44
|
+
Requires-Dist: black==26.5.1; extra == "dev-formatting"
|
|
45
45
|
Requires-Dist: isort==8.0.1; extra == "dev-formatting"
|
|
46
46
|
Provides-Extra: dev-mkdocs
|
|
47
47
|
Requires-Dist: Markdown==3.10.2; extra == "dev-mkdocs"
|
|
48
|
-
Requires-Dist: black==26.
|
|
48
|
+
Requires-Dist: black==26.5.1; extra == "dev-mkdocs"
|
|
49
49
|
Requires-Dist: mike==2.2.0; extra == "dev-mkdocs"
|
|
50
50
|
Requires-Dist: mkdocs-gen-files==0.6.1; extra == "dev-mkdocs"
|
|
51
51
|
Requires-Dist: mkdocs-literate-nav==0.6.3; extra == "dev-mkdocs"
|
|
52
52
|
Requires-Dist: mkdocs-macros-plugin==1.5.0; extra == "dev-mkdocs"
|
|
53
53
|
Requires-Dist: mkdocs-material==9.7.6; extra == "dev-mkdocs"
|
|
54
54
|
Requires-Dist: mkdocstrings[python]==1.0.4; extra == "dev-mkdocs"
|
|
55
|
-
Requires-Dist: mkdocstrings-python==2.0.
|
|
56
|
-
Requires-Dist: frequenz-repo-config[lib]==0.
|
|
55
|
+
Requires-Dist: mkdocstrings-python==2.0.4; extra == "dev-mkdocs"
|
|
56
|
+
Requires-Dist: frequenz-repo-config[lib]==0.18.0; extra == "dev-mkdocs"
|
|
57
57
|
Provides-Extra: dev-mypy
|
|
58
|
-
Requires-Dist: mypy==1.
|
|
59
|
-
Requires-Dist: types-Markdown==3.10.2.
|
|
58
|
+
Requires-Dist: mypy==2.1.0; extra == "dev-mypy"
|
|
59
|
+
Requires-Dist: types-Markdown==3.10.2.20260518; extra == "dev-mypy"
|
|
60
60
|
Requires-Dist: types-pytz; extra == "dev-mypy"
|
|
61
61
|
Requires-Dist: pandas-stubs; extra == "dev-mypy"
|
|
62
62
|
Requires-Dist: frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-mypy"
|
|
63
63
|
Provides-Extra: dev-noxfile
|
|
64
64
|
Requires-Dist: nox==2026.4.10; extra == "dev-noxfile"
|
|
65
|
-
Requires-Dist: frequenz-repo-config[lib]==0.
|
|
65
|
+
Requires-Dist: frequenz-repo-config[lib]==0.18.0; extra == "dev-noxfile"
|
|
66
66
|
Provides-Extra: dev-pylint
|
|
67
67
|
Requires-Dist: frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]; extra == "dev-pylint"
|
|
68
68
|
Provides-Extra: dev-pytest
|
|
69
|
-
Requires-Dist: pytest==9.0
|
|
70
|
-
Requires-Dist: pylint==4.0.
|
|
71
|
-
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.
|
|
69
|
+
Requires-Dist: pytest==9.1.0; extra == "dev-pytest"
|
|
70
|
+
Requires-Dist: pylint==4.0.6; extra == "dev-pytest"
|
|
71
|
+
Requires-Dist: frequenz-repo-config[extra-lint-examples]==0.18.0; extra == "dev-pytest"
|
|
72
72
|
Requires-Dist: pytest-mock==3.15.1; extra == "dev-pytest"
|
|
73
|
-
Requires-Dist: pytest-asyncio==1.
|
|
73
|
+
Requires-Dist: pytest-asyncio==1.4.0; extra == "dev-pytest"
|
|
74
74
|
Requires-Dist: async-solipsism==0.9; extra == "dev-pytest"
|
|
75
75
|
Provides-Extra: dev
|
|
76
76
|
Requires-Dist: frequenz-cs-reporting[dev-flake8,dev-formatting,dev-mkdocs,dev-mypy,dev-noxfile,dev-pylint,dev-pytest]; extra == "dev"
|
|
@@ -21,43 +21,43 @@ flake8==7.3.0
|
|
|
21
21
|
flake8-datetimez==20.10.0
|
|
22
22
|
flake8-docstrings==1.7.0
|
|
23
23
|
flake8-pyproject==1.2.4
|
|
24
|
-
pydoclint==0.8.
|
|
24
|
+
pydoclint==0.8.6
|
|
25
25
|
pydocstyle==6.3.0
|
|
26
26
|
|
|
27
27
|
[dev-formatting]
|
|
28
|
-
black==26.
|
|
28
|
+
black==26.5.1
|
|
29
29
|
isort==8.0.1
|
|
30
30
|
|
|
31
31
|
[dev-mkdocs]
|
|
32
32
|
Markdown==3.10.2
|
|
33
|
-
black==26.
|
|
33
|
+
black==26.5.1
|
|
34
34
|
mike==2.2.0
|
|
35
35
|
mkdocs-gen-files==0.6.1
|
|
36
36
|
mkdocs-literate-nav==0.6.3
|
|
37
37
|
mkdocs-macros-plugin==1.5.0
|
|
38
38
|
mkdocs-material==9.7.6
|
|
39
39
|
mkdocstrings[python]==1.0.4
|
|
40
|
-
mkdocstrings-python==2.0.
|
|
41
|
-
frequenz-repo-config[lib]==0.
|
|
40
|
+
mkdocstrings-python==2.0.4
|
|
41
|
+
frequenz-repo-config[lib]==0.18.0
|
|
42
42
|
|
|
43
43
|
[dev-mypy]
|
|
44
|
-
mypy==1.
|
|
45
|
-
types-Markdown==3.10.2.
|
|
44
|
+
mypy==2.1.0
|
|
45
|
+
types-Markdown==3.10.2.20260518
|
|
46
46
|
types-pytz
|
|
47
47
|
pandas-stubs
|
|
48
48
|
frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]
|
|
49
49
|
|
|
50
50
|
[dev-noxfile]
|
|
51
51
|
nox==2026.4.10
|
|
52
|
-
frequenz-repo-config[lib]==0.
|
|
52
|
+
frequenz-repo-config[lib]==0.18.0
|
|
53
53
|
|
|
54
54
|
[dev-pylint]
|
|
55
55
|
frequenz-cs-reporting[dev-mkdocs,dev-noxfile,dev-pytest]
|
|
56
56
|
|
|
57
57
|
[dev-pytest]
|
|
58
|
-
pytest==9.0
|
|
59
|
-
pylint==4.0.
|
|
60
|
-
frequenz-repo-config[extra-lint-examples]==0.
|
|
58
|
+
pytest==9.1.0
|
|
59
|
+
pylint==4.0.6
|
|
60
|
+
frequenz-repo-config[extra-lint-examples]==0.18.0
|
|
61
61
|
pytest-mock==3.15.1
|
|
62
|
-
pytest-asyncio==1.
|
|
62
|
+
pytest-asyncio==1.4.0
|
|
63
63
|
async-solipsism==0.9
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/conftest.py
RENAMED
|
File without changes
|
{frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/constants.py
RENAMED
|
File without changes
|
{frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/utils/env.py
RENAMED
|
File without changes
|
{frequenz_cs_reporting-0.2.9 → frequenz_cs_reporting-0.2.10}/src/frequenz/cs_reporting/utils/time.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|