domainiac 0.1.0__py3-none-any.whl
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.
- domainiac/__init__.py +1 -0
- domainiac/managers/__init__.py +4 -0
- domainiac/managers/masterdata_manager.py +50 -0
- domainiac/managers/metering_manager.py +40 -0
- domainiac/managers/plant_manager.py +39 -0
- domainiac/managers/unit_manager.py +39 -0
- domainiac-0.1.0.dist-info/METADATA +12 -0
- domainiac-0.1.0.dist-info/RECORD +9 -0
- domainiac-0.1.0.dist-info/WHEEL +4 -0
domainiac/__init__.py
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
from .managers import MeteringManager, PlantManager, UnitManager
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import datamazing.pandas as pdz
|
2
|
+
import pandas as pd
|
3
|
+
from typeguard import typechecked
|
4
|
+
|
5
|
+
|
6
|
+
class MasterdataManager:
|
7
|
+
"""
|
8
|
+
Manager which simplifies the process of getting units from masterdata.
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(
|
12
|
+
self,
|
13
|
+
db: pdz.Database,
|
14
|
+
time_interval: pdz.TimeInterval,
|
15
|
+
resolution: pd.Timedelta,
|
16
|
+
) -> None:
|
17
|
+
self.db = db
|
18
|
+
self.time_interval = time_interval
|
19
|
+
self.resolution = resolution
|
20
|
+
|
21
|
+
@typechecked
|
22
|
+
def get_data(
|
23
|
+
self,
|
24
|
+
table: str,
|
25
|
+
filters: dict = {},
|
26
|
+
columns: list = [],
|
27
|
+
) -> pd.DataFrame:
|
28
|
+
"""Gets the units for a given unit type.
|
29
|
+
Filters for units valid at the end of time interval.
|
30
|
+
Filters by default for units in operation.
|
31
|
+
"""
|
32
|
+
|
33
|
+
filters["standing_entity_state"] = "InOperation"
|
34
|
+
df = self.db.query(table, filters=filters)
|
35
|
+
|
36
|
+
for key in filters.keys():
|
37
|
+
if key not in df.columns:
|
38
|
+
raise KeyError(f"Column {key} not found in {table}")
|
39
|
+
for column in columns:
|
40
|
+
if column not in df.columns:
|
41
|
+
raise KeyError(f"Column {column} not found in {table}")
|
42
|
+
|
43
|
+
df = pdz.as_of_time(
|
44
|
+
df=df,
|
45
|
+
period=("valid_from_date_utc", "valid_to_date_utc"),
|
46
|
+
at=self.time_interval.right,
|
47
|
+
)
|
48
|
+
df = df.filter(columns)
|
49
|
+
|
50
|
+
return df
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import datamazing.pandas as pdz
|
2
|
+
import pandas as pd
|
3
|
+
from typeguard import typechecked
|
4
|
+
|
5
|
+
|
6
|
+
class MeteringManager:
|
7
|
+
"""
|
8
|
+
Manager which simplifies the process of getting metering data from datahub.
|
9
|
+
"""
|
10
|
+
|
11
|
+
def __init__(
|
12
|
+
self,
|
13
|
+
db: pdz.Database,
|
14
|
+
time_interval: pdz.TimeInterval,
|
15
|
+
resolution: pd.Timedelta,
|
16
|
+
) -> None:
|
17
|
+
self.db = db
|
18
|
+
self.time_interval = time_interval
|
19
|
+
self.resolution = resolution
|
20
|
+
|
21
|
+
@typechecked
|
22
|
+
def get_plant_settlement(self, datahub_gsrn: str) -> pd.DataFrame:
|
23
|
+
"""
|
24
|
+
Retrieves the settlement data for a given datahub gsrn.
|
25
|
+
"""
|
26
|
+
df = self.db.query(
|
27
|
+
"readingSettlement",
|
28
|
+
self.time_interval,
|
29
|
+
filters={"datahub_gsrn_e18": datahub_gsrn},
|
30
|
+
)
|
31
|
+
|
32
|
+
df = df.filter(
|
33
|
+
[
|
34
|
+
"time_utc",
|
35
|
+
"datahub_gsrn_e18",
|
36
|
+
"reading_settlement_production_e18_MW",
|
37
|
+
]
|
38
|
+
)
|
39
|
+
|
40
|
+
return df
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import datamazing.pandas as pdz
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
from .masterdata_manager import MasterdataManager
|
5
|
+
|
6
|
+
|
7
|
+
class PlantManager(MasterdataManager):
|
8
|
+
"""
|
9
|
+
Manager which simplifies the process of getting plants from masterdata.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(
|
13
|
+
self,
|
14
|
+
db: pdz.Database,
|
15
|
+
time_interval: pdz.TimeInterval,
|
16
|
+
resolution: pd.Timedelta,
|
17
|
+
) -> None:
|
18
|
+
self.db = db
|
19
|
+
self.time_interval = time_interval
|
20
|
+
self.resolution = resolution
|
21
|
+
|
22
|
+
def get_plants(
|
23
|
+
self,
|
24
|
+
filters: dict = {},
|
25
|
+
columns: list = [
|
26
|
+
"plant_id",
|
27
|
+
"masterdata_gsrn",
|
28
|
+
"datahub_gsrn_e18",
|
29
|
+
"installed_power_MW",
|
30
|
+
"price_area",
|
31
|
+
"valid_from_date_utc",
|
32
|
+
"valid_to_date_utc",
|
33
|
+
],
|
34
|
+
) -> pd.DataFrame:
|
35
|
+
"""Gets the plants for a given plant type.
|
36
|
+
Filters for plants valid at the end of time interval.
|
37
|
+
Filters by default for plants in operation.
|
38
|
+
"""
|
39
|
+
return self.get_data("masterdataPlant", filters=filters, columns=columns)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import datamazing.pandas as pdz
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
from .masterdata_manager import MasterdataManager
|
5
|
+
|
6
|
+
|
7
|
+
class UnitManager(MasterdataManager):
|
8
|
+
"""
|
9
|
+
Manager which simplifies the process of getting units from masterdata.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(
|
13
|
+
self,
|
14
|
+
db: pdz.Database,
|
15
|
+
time_interval: pdz.TimeInterval,
|
16
|
+
resolution: pd.Timedelta,
|
17
|
+
) -> None:
|
18
|
+
self.db = db
|
19
|
+
self.time_interval = time_interval
|
20
|
+
self.resolution = resolution
|
21
|
+
|
22
|
+
def get_units(
|
23
|
+
self,
|
24
|
+
filters: dict = {},
|
25
|
+
columns: list = [
|
26
|
+
"masterdata_gsrn",
|
27
|
+
"installed_power_MW",
|
28
|
+
"plant_id",
|
29
|
+
"price_area",
|
30
|
+
"valid_from_date_utc",
|
31
|
+
"valid_to_date_utc",
|
32
|
+
"power_system_resource_type",
|
33
|
+
],
|
34
|
+
) -> pd.DataFrame:
|
35
|
+
"""Gets the units for a given unit type.
|
36
|
+
Filters for units valid at the end of time interval.
|
37
|
+
Filters by default for units in operation.
|
38
|
+
"""
|
39
|
+
return self.get_data("masterdataUnit", filters=filters, columns=columns)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: domainiac
|
3
|
+
Version: 0.1.0
|
4
|
+
Summary: Package for working with Energinet data, but with specialized functions used for Enigma.
|
5
|
+
Author: Team Enigma
|
6
|
+
Author-email: gridop-enigma@energinet.dk
|
7
|
+
Requires-Python: >=3.10,<3.11
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
10
|
+
Requires-Dist: datamazing (>=4.3.3,<5.0.0)
|
11
|
+
Requires-Dist: pandas (>=2.2.0,<3.0.0)
|
12
|
+
Requires-Dist: typeguard (>=4.2.1,<5.0.0)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
domainiac/__init__.py,sha256=ezC_vpooWhMA-M0M2GxZiF0DFc-KoCeVaNhlR4Ysnfg,65
|
2
|
+
domainiac/managers/__init__.py,sha256=ZwpdZMaQ7JxVWOlH2wKAxezy_JNni8qaGzfVFtMkIVo,174
|
3
|
+
domainiac/managers/masterdata_manager.py,sha256=h_KRtXLRAniPDy94EkWGC5cB93RYXQe3Zt_r_p4mWe0,1388
|
4
|
+
domainiac/managers/metering_manager.py,sha256=NXGHuNjWiAUE08fGIPAfvwbzlKESbKaO5uyxLNyZKC0,995
|
5
|
+
domainiac/managers/plant_manager.py,sha256=LW9S_HECpR-lljkopY1IcYpU9XgPDqhQxFH-wPAvQIU,1083
|
6
|
+
domainiac/managers/unit_manager.py,sha256=PjtLag75PRDlX57lxbYo6hundkQy37jC170R4YKJw7U,1085
|
7
|
+
domainiac-0.1.0.dist-info/METADATA,sha256=qmiB4NB9x1CY9zJMnYiNTPbdPXUVa0HWpX2NvJPpMXM,465
|
8
|
+
domainiac-0.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
9
|
+
domainiac-0.1.0.dist-info/RECORD,,
|