fluvius-energy-api 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.
- fluvius_energy_api/__init__.py +140 -0
- fluvius_energy_api/_http.py +128 -0
- fluvius_energy_api/auth.py +239 -0
- fluvius_energy_api/client.py +334 -0
- fluvius_energy_api/credentials.py +215 -0
- fluvius_energy_api/exceptions.py +104 -0
- fluvius_energy_api/models/__init__.py +123 -0
- fluvius_energy_api/models/base.py +36 -0
- fluvius_energy_api/models/energy.py +201 -0
- fluvius_energy_api/models/enums.py +137 -0
- fluvius_energy_api/models/installation.py +68 -0
- fluvius_energy_api/models/mandate.py +73 -0
- fluvius_energy_api/models/session.py +46 -0
- fluvius_energy_api/py.typed +0 -0
- fluvius_energy_api-0.1.0.dist-info/METADATA +311 -0
- fluvius_energy_api-0.1.0.dist-info/RECORD +18 -0
- fluvius_energy_api-0.1.0.dist-info/WHEEL +4 -0
- fluvius_energy_api-0.1.0.dist-info/licenses/LICENSE +661 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"""Models for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from .base import (
|
|
4
|
+
ErrorResponse,
|
|
5
|
+
ErrorValidationResponse,
|
|
6
|
+
FluviusBaseModel,
|
|
7
|
+
ResponseMetadata,
|
|
8
|
+
)
|
|
9
|
+
from .energy import (
|
|
10
|
+
AuxiliarySubHeadpoint,
|
|
11
|
+
GetEnergyResponse,
|
|
12
|
+
GetEnergyResponseApiDataResponse,
|
|
13
|
+
Headpoint,
|
|
14
|
+
HeadpointUnion,
|
|
15
|
+
MeasurementDirection,
|
|
16
|
+
MeasurementTimeSlice,
|
|
17
|
+
MeasurementValue,
|
|
18
|
+
MeasurementValueSet,
|
|
19
|
+
MeteringOnHeadpoint,
|
|
20
|
+
MeteringOnHeadpointAndMeter,
|
|
21
|
+
MeteringOnMeter,
|
|
22
|
+
OfftakeSubHeadpoint,
|
|
23
|
+
PhysicalMeter,
|
|
24
|
+
ProductionSubHeadpoint,
|
|
25
|
+
SubHeadpoint,
|
|
26
|
+
SubHeadpointUnion,
|
|
27
|
+
)
|
|
28
|
+
from .enums import (
|
|
29
|
+
CreateClientSessionStatus,
|
|
30
|
+
DataServiceType,
|
|
31
|
+
EnergyType,
|
|
32
|
+
EstimatedVolumeType,
|
|
33
|
+
Flow,
|
|
34
|
+
GasConversionFactor,
|
|
35
|
+
LocalProductionInstallationType,
|
|
36
|
+
MandateRenewalStatus,
|
|
37
|
+
MandateStatus,
|
|
38
|
+
MeasurementValidationState,
|
|
39
|
+
MeterType,
|
|
40
|
+
PeriodType,
|
|
41
|
+
Register,
|
|
42
|
+
Unit,
|
|
43
|
+
)
|
|
44
|
+
from .installation import (
|
|
45
|
+
EstimatedVolume,
|
|
46
|
+
GetInstallationResponse,
|
|
47
|
+
GetInstallationResponseApiDataResponse,
|
|
48
|
+
Installation,
|
|
49
|
+
LocalProductionInstallation,
|
|
50
|
+
)
|
|
51
|
+
from .mandate import (
|
|
52
|
+
CreateMandateRequest,
|
|
53
|
+
CreateMandateResponse,
|
|
54
|
+
CreateMandateResponseApiDataResponse,
|
|
55
|
+
GetMandatesResponse,
|
|
56
|
+
GetMandatesResponseApiDataResponse,
|
|
57
|
+
Mandate,
|
|
58
|
+
)
|
|
59
|
+
from .session import (
|
|
60
|
+
ClientSessionDataService,
|
|
61
|
+
CreateClientSessionRequest,
|
|
62
|
+
CreateClientSessionResponse,
|
|
63
|
+
CreateClientSessionResponseApiDataResponse,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
__all__ = [
|
|
67
|
+
# Base
|
|
68
|
+
"ErrorResponse",
|
|
69
|
+
"ErrorValidationResponse",
|
|
70
|
+
"FluviusBaseModel",
|
|
71
|
+
"ResponseMetadata",
|
|
72
|
+
# Energy
|
|
73
|
+
"AuxiliarySubHeadpoint",
|
|
74
|
+
"GetEnergyResponse",
|
|
75
|
+
"GetEnergyResponseApiDataResponse",
|
|
76
|
+
"Headpoint",
|
|
77
|
+
"HeadpointUnion",
|
|
78
|
+
"MeasurementDirection",
|
|
79
|
+
"MeasurementTimeSlice",
|
|
80
|
+
"MeasurementValue",
|
|
81
|
+
"MeasurementValueSet",
|
|
82
|
+
"MeteringOnHeadpoint",
|
|
83
|
+
"MeteringOnHeadpointAndMeter",
|
|
84
|
+
"MeteringOnMeter",
|
|
85
|
+
"OfftakeSubHeadpoint",
|
|
86
|
+
"PhysicalMeter",
|
|
87
|
+
"ProductionSubHeadpoint",
|
|
88
|
+
"SubHeadpoint",
|
|
89
|
+
"SubHeadpointUnion",
|
|
90
|
+
# Enums
|
|
91
|
+
"CreateClientSessionStatus",
|
|
92
|
+
"DataServiceType",
|
|
93
|
+
"EnergyType",
|
|
94
|
+
"EstimatedVolumeType",
|
|
95
|
+
"Flow",
|
|
96
|
+
"GasConversionFactor",
|
|
97
|
+
"LocalProductionInstallationType",
|
|
98
|
+
"MandateRenewalStatus",
|
|
99
|
+
"MandateStatus",
|
|
100
|
+
"MeasurementValidationState",
|
|
101
|
+
"MeterType",
|
|
102
|
+
"PeriodType",
|
|
103
|
+
"Register",
|
|
104
|
+
"Unit",
|
|
105
|
+
# Installation
|
|
106
|
+
"EstimatedVolume",
|
|
107
|
+
"GetInstallationResponse",
|
|
108
|
+
"GetInstallationResponseApiDataResponse",
|
|
109
|
+
"Installation",
|
|
110
|
+
"LocalProductionInstallation",
|
|
111
|
+
# Mandate
|
|
112
|
+
"CreateMandateRequest",
|
|
113
|
+
"CreateMandateResponse",
|
|
114
|
+
"CreateMandateResponseApiDataResponse",
|
|
115
|
+
"GetMandatesResponse",
|
|
116
|
+
"GetMandatesResponseApiDataResponse",
|
|
117
|
+
"Mandate",
|
|
118
|
+
# Session
|
|
119
|
+
"ClientSessionDataService",
|
|
120
|
+
"CreateClientSessionRequest",
|
|
121
|
+
"CreateClientSessionResponse",
|
|
122
|
+
"CreateClientSessionResponseApiDataResponse",
|
|
123
|
+
]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""Base model classes for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class FluviusBaseModel(BaseModel):
|
|
9
|
+
"""Base model with camelCase alias configuration."""
|
|
10
|
+
|
|
11
|
+
model_config = ConfigDict(
|
|
12
|
+
populate_by_name=True,
|
|
13
|
+
use_enum_values=True,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ResponseMetadata(FluviusBaseModel):
|
|
18
|
+
"""Represents metadata for a response."""
|
|
19
|
+
|
|
20
|
+
fetch_time: datetime | None = Field(default=None, alias="fetchTime")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ErrorResponse(FluviusBaseModel):
|
|
24
|
+
"""Represents an error response from the API."""
|
|
25
|
+
|
|
26
|
+
type: str | None = Field(default=None, alias="Type")
|
|
27
|
+
code: str | None = Field(default=None, alias="Code")
|
|
28
|
+
message: str | None = Field(default=None, alias="Message")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ErrorValidationResponse(ErrorResponse):
|
|
32
|
+
"""Represents a response when validation has failed during the request."""
|
|
33
|
+
|
|
34
|
+
validation_error_messages: list[str] | None = Field(
|
|
35
|
+
default=None, alias="ValidationErrorMessages"
|
|
36
|
+
)
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"""Energy measurement models for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import Annotated, Literal
|
|
5
|
+
from pydantic import Field
|
|
6
|
+
|
|
7
|
+
from .base import FluviusBaseModel, ResponseMetadata
|
|
8
|
+
from .enums import (
|
|
9
|
+
EnergyType,
|
|
10
|
+
GasConversionFactor,
|
|
11
|
+
LocalProductionInstallationType,
|
|
12
|
+
MeasurementValidationState,
|
|
13
|
+
Unit,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class MeasurementValue(FluviusBaseModel):
|
|
18
|
+
"""Represents a single measurement value."""
|
|
19
|
+
|
|
20
|
+
value: float | None = None
|
|
21
|
+
unit: Unit | None = None
|
|
22
|
+
validation_state: MeasurementValidationState | None = Field(
|
|
23
|
+
default=None, alias="validationState"
|
|
24
|
+
)
|
|
25
|
+
gas_conversion_factor: GasConversionFactor | None = Field(
|
|
26
|
+
default=None, alias="gasConversionFactor"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class MeasurementValueSet(FluviusBaseModel):
|
|
31
|
+
"""Represents a measurement value set for different registers."""
|
|
32
|
+
|
|
33
|
+
total: MeasurementValue | None = None
|
|
34
|
+
day: MeasurementValue | None = None
|
|
35
|
+
night: MeasurementValue | None = None
|
|
36
|
+
reactive: MeasurementValue | None = None
|
|
37
|
+
inductive: MeasurementValue | None = None
|
|
38
|
+
capacitive: MeasurementValue | None = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class MeasurementDirection(FluviusBaseModel):
|
|
42
|
+
"""Represents a measurement set for different energy directions."""
|
|
43
|
+
|
|
44
|
+
offtake: MeasurementValueSet | None = None
|
|
45
|
+
injection: MeasurementValueSet | None = None
|
|
46
|
+
production: MeasurementValueSet | None = None
|
|
47
|
+
auxiliary: MeasurementValueSet | None = None
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class MeasurementTimeSlice(FluviusBaseModel):
|
|
51
|
+
"""Represents a measurement set within a given period (time slice)."""
|
|
52
|
+
|
|
53
|
+
start: datetime | None = None
|
|
54
|
+
end: datetime | None = None
|
|
55
|
+
measurements: list[MeasurementDirection] | None = None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class PhysicalMeter(FluviusBaseModel):
|
|
59
|
+
"""Represents a physical meter."""
|
|
60
|
+
|
|
61
|
+
seq_number: str | None = Field(default=None, alias="seqNumber")
|
|
62
|
+
meter_id: str | None = Field(default=None, alias="meterID")
|
|
63
|
+
daily_energy: list[MeasurementTimeSlice] | None = Field(
|
|
64
|
+
default=None, alias="dailyEnergy"
|
|
65
|
+
)
|
|
66
|
+
hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
67
|
+
default=None, alias="hourlyEnergy"
|
|
68
|
+
)
|
|
69
|
+
quarter_hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
70
|
+
default=None, alias="quarterHourlyEnergy"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class SubHeadpoint(FluviusBaseModel):
|
|
75
|
+
"""Base response for different kinds of submetering installations."""
|
|
76
|
+
|
|
77
|
+
type_discriminator: str = Field(alias="$type")
|
|
78
|
+
ean: str | None = None
|
|
79
|
+
seq_number: str | None = Field(default=None, alias="seqNumber")
|
|
80
|
+
vreg_id: str | None = Field(default=None, alias="vregId")
|
|
81
|
+
type: LocalProductionInstallationType | None = None
|
|
82
|
+
daily_energy: list[MeasurementTimeSlice] | None = Field(
|
|
83
|
+
default=None, alias="dailyEnergy"
|
|
84
|
+
)
|
|
85
|
+
hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
86
|
+
default=None, alias="hourlyEnergy"
|
|
87
|
+
)
|
|
88
|
+
quarter_hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
89
|
+
default=None, alias="quarterHourlyEnergy"
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class AuxiliarySubHeadpoint(SubHeadpoint):
|
|
94
|
+
"""Represents a submetering installation for auxiliary energy."""
|
|
95
|
+
|
|
96
|
+
type_discriminator: Literal["submetering-auxiliary"] = Field(
|
|
97
|
+
default="submetering-auxiliary", alias="$type"
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class OfftakeSubHeadpoint(SubHeadpoint):
|
|
102
|
+
"""Represents a submetering installation for offtake energy."""
|
|
103
|
+
|
|
104
|
+
type_discriminator: Literal["submetering-offtake"] = Field(
|
|
105
|
+
default="submetering-offtake", alias="$type"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class ProductionSubHeadpoint(SubHeadpoint):
|
|
110
|
+
"""Represents a submetering installation for produced energy."""
|
|
111
|
+
|
|
112
|
+
type_discriminator: Literal["submetering-production"] = Field(
|
|
113
|
+
default="submetering-production", alias="$type"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
SubHeadpointUnion = Annotated[
|
|
118
|
+
AuxiliarySubHeadpoint | OfftakeSubHeadpoint | ProductionSubHeadpoint,
|
|
119
|
+
Field(discriminator="type_discriminator"),
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class Headpoint(FluviusBaseModel):
|
|
124
|
+
"""Base response for different kinds of installations."""
|
|
125
|
+
|
|
126
|
+
type_discriminator: str = Field(alias="$type")
|
|
127
|
+
ean: str | None = None
|
|
128
|
+
energy_type: EnergyType | None = Field(default=None, alias="energyType")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class MeteringOnHeadpoint(Headpoint):
|
|
132
|
+
"""Response containing an installation where metering is done on headpoint level (AMR)."""
|
|
133
|
+
|
|
134
|
+
type_discriminator: Literal["metering-on-headpoint"] = Field(
|
|
135
|
+
default="metering-on-headpoint", alias="$type"
|
|
136
|
+
)
|
|
137
|
+
daily_energy: list[MeasurementTimeSlice] | None = Field(
|
|
138
|
+
default=None, alias="dailyEnergy"
|
|
139
|
+
)
|
|
140
|
+
hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
141
|
+
default=None, alias="hourlyEnergy"
|
|
142
|
+
)
|
|
143
|
+
quarter_hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
144
|
+
default=None, alias="quarterHourlyEnergy"
|
|
145
|
+
)
|
|
146
|
+
sub_headpoints: list[SubHeadpointUnion] | None = Field(
|
|
147
|
+
default=None, alias="subHeadpoints"
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class MeteringOnMeter(Headpoint):
|
|
152
|
+
"""Response containing an installation where metering is done on meter level (DM)."""
|
|
153
|
+
|
|
154
|
+
type_discriminator: Literal["metering-on-meter"] = Field(
|
|
155
|
+
default="metering-on-meter", alias="$type"
|
|
156
|
+
)
|
|
157
|
+
physical_meters: list[PhysicalMeter] | None = Field(
|
|
158
|
+
default=None, alias="physicalMeters"
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class MeteringOnHeadpointAndMeter(Headpoint):
|
|
163
|
+
"""Response containing an installation where metering is done on both headpoint and meter level."""
|
|
164
|
+
|
|
165
|
+
type_discriminator: Literal["metering-on-headpoint-and-meter"] = Field(
|
|
166
|
+
default="metering-on-headpoint-and-meter", alias="$type"
|
|
167
|
+
)
|
|
168
|
+
physical_meters: list[PhysicalMeter] | None = Field(
|
|
169
|
+
default=None, alias="physicalMeters"
|
|
170
|
+
)
|
|
171
|
+
daily_energy: list[MeasurementTimeSlice] | None = Field(
|
|
172
|
+
default=None, alias="dailyEnergy"
|
|
173
|
+
)
|
|
174
|
+
hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
175
|
+
default=None, alias="hourlyEnergy"
|
|
176
|
+
)
|
|
177
|
+
quarter_hourly_energy: list[MeasurementTimeSlice] | None = Field(
|
|
178
|
+
default=None, alias="quarterHourlyEnergy"
|
|
179
|
+
)
|
|
180
|
+
sub_headpoints: list[SubHeadpointUnion] | None = Field(
|
|
181
|
+
default=None, alias="subHeadpoints"
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
HeadpointUnion = Annotated[
|
|
186
|
+
MeteringOnHeadpoint | MeteringOnMeter | MeteringOnHeadpointAndMeter,
|
|
187
|
+
Field(discriminator="type_discriminator"),
|
|
188
|
+
]
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class GetEnergyResponse(FluviusBaseModel):
|
|
192
|
+
"""Represents a response containing energy for a single installation."""
|
|
193
|
+
|
|
194
|
+
headpoint: HeadpointUnion | None = None
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class GetEnergyResponseApiDataResponse(FluviusBaseModel):
|
|
198
|
+
"""Represents a successful response from the server containing data."""
|
|
199
|
+
|
|
200
|
+
meta: ResponseMetadata | None = Field(default=None, alias="_meta")
|
|
201
|
+
data: GetEnergyResponse | None = None
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Enum definitions for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CreateClientSessionStatus(str, Enum):
|
|
7
|
+
"""Defines all client session creation statuses."""
|
|
8
|
+
|
|
9
|
+
SUCCESS = "success"
|
|
10
|
+
FAILED = "failed"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DataServiceType(str, Enum):
|
|
14
|
+
"""Defines the available data service types."""
|
|
15
|
+
|
|
16
|
+
VH_ONBEPAALD = "VH_onbepaald"
|
|
17
|
+
VH_KWARTIER_UUR = "VH_kwartier_uur"
|
|
18
|
+
VH_DAG = "VH_dag"
|
|
19
|
+
IG = "IG"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class EnergyType(str, Enum):
|
|
23
|
+
"""Defines all supported disciplines (energy types)."""
|
|
24
|
+
|
|
25
|
+
ELECTRICITY = "E"
|
|
26
|
+
GAS = "G"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class EstimatedVolumeType(str, Enum):
|
|
30
|
+
"""Defines the supported types of estimated volume."""
|
|
31
|
+
|
|
32
|
+
EAV = "EAV"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Flow(str, Enum):
|
|
36
|
+
"""Defines all possible flows."""
|
|
37
|
+
|
|
38
|
+
B2C = "B2C"
|
|
39
|
+
B2B = "B2B"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class GasConversionFactor(str, Enum):
|
|
43
|
+
"""Defines all possible values for gas conversion factor."""
|
|
44
|
+
|
|
45
|
+
PREDICTIVE = "P"
|
|
46
|
+
DEFINITIVE = "D"
|
|
47
|
+
CONSTANT = "C"
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class LocalProductionInstallationType(str, Enum):
|
|
51
|
+
"""Defines the types of local production installation."""
|
|
52
|
+
|
|
53
|
+
UNKNOWN = "?"
|
|
54
|
+
NDGR = "NDGR"
|
|
55
|
+
NDGR2 = "NDGR2"
|
|
56
|
+
PV = "PV"
|
|
57
|
+
WKKB = "WKKB"
|
|
58
|
+
WKKD = "WKKD"
|
|
59
|
+
WKKA = "WKKA"
|
|
60
|
+
WTR = "WTR"
|
|
61
|
+
WND = "WND"
|
|
62
|
+
TBJT = "TBJT"
|
|
63
|
+
ORC = "ORC"
|
|
64
|
+
BC = "BC"
|
|
65
|
+
BIOM = "BIOM"
|
|
66
|
+
DSL = "DSL"
|
|
67
|
+
FOSM = "FOSM"
|
|
68
|
+
PPPV = "PPPV"
|
|
69
|
+
PPBAT = "PPBAT"
|
|
70
|
+
BAT = "BAT"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class MandateRenewalStatus(str, Enum):
|
|
74
|
+
"""Defines all mandate renewal statuses."""
|
|
75
|
+
|
|
76
|
+
TO_BE_RENEWED = "ToBeRenewed"
|
|
77
|
+
RENEWAL_REQUESTED = "RenewalRequested"
|
|
78
|
+
EXPIRED = "Expired"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class MandateStatus(str, Enum):
|
|
82
|
+
"""Defines all mandate statuses."""
|
|
83
|
+
|
|
84
|
+
REQUESTED = "Requested"
|
|
85
|
+
APPROVED = "Approved"
|
|
86
|
+
REJECTED = "Rejected"
|
|
87
|
+
FINISHED = "Finished"
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class MeasurementValidationState(str, Enum):
|
|
91
|
+
"""Defines all possible values for validation states of measurements."""
|
|
92
|
+
|
|
93
|
+
READ = "READ"
|
|
94
|
+
EST = "EST"
|
|
95
|
+
VAL = "VAL"
|
|
96
|
+
NVAL = "NVAL"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class MeterType(str, Enum):
|
|
100
|
+
"""Defines all possible meter types."""
|
|
101
|
+
|
|
102
|
+
KM = "KM"
|
|
103
|
+
DM = "DM"
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class PeriodType(str, Enum):
|
|
107
|
+
"""Defines the type of period for which will be queried."""
|
|
108
|
+
|
|
109
|
+
READ_TIME = "readTime"
|
|
110
|
+
INSERT_TIME = "insertTime"
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class Register(str, Enum):
|
|
114
|
+
"""Represents a register."""
|
|
115
|
+
|
|
116
|
+
UNKNOWN = "Unknown"
|
|
117
|
+
OFFTAKE_TOTAL_HOURS = "OfftakeTotalHours"
|
|
118
|
+
OFFTAKE_HIGH = "OfftakeHigh"
|
|
119
|
+
OFFTAKE_LOW = "OfftakeLow"
|
|
120
|
+
OFFTAKE_EXCLUSIVE_NIGHT = "OfftakeExclusiveNight"
|
|
121
|
+
COMPENSATED_OFFTAKE_TOTAL_HOURS = "CompensatedOfftakeTotalHours"
|
|
122
|
+
COMPENSATED_OFFTAKE_HIGH = "CompensatedOfftakeHigh"
|
|
123
|
+
COMPENSATED_OFFTAKE_LOW = "CompensatedOfftakeLow"
|
|
124
|
+
INJECTION_TOTAL_HOURS = "InjectionTotalHours"
|
|
125
|
+
INJECTION_HIGH = "InjectionHigh"
|
|
126
|
+
INJECTION_LOW = "InjectionLow"
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class Unit(str, Enum):
|
|
130
|
+
"""Defines all supported units."""
|
|
131
|
+
|
|
132
|
+
UNKNOWN = "?"
|
|
133
|
+
KVA = "kVA"
|
|
134
|
+
KVARH = "kVArh"
|
|
135
|
+
KWH = "kWh"
|
|
136
|
+
KW = "kW"
|
|
137
|
+
M3 = "m3"
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Installation models for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from pydantic import Field
|
|
5
|
+
|
|
6
|
+
from .base import FluviusBaseModel, ResponseMetadata
|
|
7
|
+
from .enums import (
|
|
8
|
+
EnergyType,
|
|
9
|
+
EstimatedVolumeType,
|
|
10
|
+
LocalProductionInstallationType,
|
|
11
|
+
MeterType,
|
|
12
|
+
Register,
|
|
13
|
+
Unit,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class LocalProductionInstallation(FluviusBaseModel):
|
|
18
|
+
"""Represents a single local production installation."""
|
|
19
|
+
|
|
20
|
+
vreg_id: str | None = Field(default=None, alias="vregId")
|
|
21
|
+
type: LocalProductionInstallationType | None = None
|
|
22
|
+
converter_power: float | None = Field(default=None, alias="converterPower")
|
|
23
|
+
converter_power_unit: Unit | None = Field(default=None, alias="converterPowerUnit")
|
|
24
|
+
inspection_date: datetime | None = Field(default=None, alias="inspectionDate")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class EstimatedVolume(FluviusBaseModel):
|
|
28
|
+
"""Represents a response containing an estimated volume."""
|
|
29
|
+
|
|
30
|
+
type: EstimatedVolumeType | None = None
|
|
31
|
+
calculated_register: Register | None = Field(
|
|
32
|
+
default=None, alias="calculatedRegister"
|
|
33
|
+
)
|
|
34
|
+
value: int | None = None
|
|
35
|
+
unit: Unit | None = None
|
|
36
|
+
consumption_start_date: datetime | None = Field(
|
|
37
|
+
default=None, alias="consumptionStartDate"
|
|
38
|
+
)
|
|
39
|
+
consumption_end_date: datetime | None = Field(
|
|
40
|
+
default=None, alias="consumptionEndDate"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Installation(FluviusBaseModel):
|
|
45
|
+
"""Represents a single installation."""
|
|
46
|
+
|
|
47
|
+
energy_type: EnergyType | None = Field(default=None, alias="energyType")
|
|
48
|
+
meter_type: MeterType | None = Field(default=None, alias="meterType")
|
|
49
|
+
smr3: bool | None = None
|
|
50
|
+
local_production_installations: list[LocalProductionInstallation] | None = Field(
|
|
51
|
+
default=None, alias="localProductionInstallations"
|
|
52
|
+
)
|
|
53
|
+
estimated_volumes: list[EstimatedVolume] | None = Field(
|
|
54
|
+
default=None, alias="estimatedVolumes"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class GetInstallationResponse(FluviusBaseModel):
|
|
59
|
+
"""Represents a response containing installation data."""
|
|
60
|
+
|
|
61
|
+
installation: Installation | None = None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class GetInstallationResponseApiDataResponse(FluviusBaseModel):
|
|
65
|
+
"""Represents a successful response from the server containing data."""
|
|
66
|
+
|
|
67
|
+
meta: ResponseMetadata | None = Field(default=None, alias="_meta")
|
|
68
|
+
data: GetInstallationResponse | None = None
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""Mandate models for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from pydantic import Field
|
|
5
|
+
|
|
6
|
+
from .base import FluviusBaseModel, ResponseMetadata
|
|
7
|
+
from .enums import DataServiceType, EnergyType, MandateRenewalStatus, MandateStatus
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Mandate(FluviusBaseModel):
|
|
11
|
+
"""Represents a single mandate."""
|
|
12
|
+
|
|
13
|
+
reference_number: str | None = Field(default=None, alias="referenceNumber")
|
|
14
|
+
status: MandateStatus | None = None
|
|
15
|
+
ean: str | None = None
|
|
16
|
+
energy_type: EnergyType | None = Field(default=None, alias="energyType")
|
|
17
|
+
data_period_from: datetime | None = Field(default=None, alias="dataPeriodFrom")
|
|
18
|
+
data_period_to: datetime | None = Field(default=None, alias="dataPeriodTo")
|
|
19
|
+
data_service_type: DataServiceType | None = Field(
|
|
20
|
+
default=None, alias="dataServiceType"
|
|
21
|
+
)
|
|
22
|
+
mandate_expiration_date: datetime | None = Field(
|
|
23
|
+
default=None, alias="mandateExpirationDate"
|
|
24
|
+
)
|
|
25
|
+
renewal_status: MandateRenewalStatus | None = Field(
|
|
26
|
+
default=None, alias="renewalStatus"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class GetMandatesResponse(FluviusBaseModel):
|
|
31
|
+
"""Represents a response containing multiple mandates."""
|
|
32
|
+
|
|
33
|
+
mandates: list[Mandate] | None = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class GetMandatesResponseApiDataResponse(FluviusBaseModel):
|
|
37
|
+
"""Represents a successful response from the server containing data."""
|
|
38
|
+
|
|
39
|
+
meta: ResponseMetadata | None = Field(default=None, alias="_meta")
|
|
40
|
+
data: GetMandatesResponse | None = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class CreateMandateRequest(FluviusBaseModel):
|
|
44
|
+
"""Request to create a mock mandate in the sandbox environment.
|
|
45
|
+
|
|
46
|
+
This endpoint is only available in the sandbox environment.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
reference_number: str = Field(..., alias="referenceNumber")
|
|
50
|
+
ean: str
|
|
51
|
+
data_service_type: DataServiceType = Field(..., alias="dataServiceType")
|
|
52
|
+
data_period_from: str | None = Field(default=None, alias="dataPeriodFrom")
|
|
53
|
+
data_period_to: str | None = Field(default=None, alias="dataPeriodTo")
|
|
54
|
+
status: MandateStatus | None = None
|
|
55
|
+
mandate_expiration_date: str | None = Field(
|
|
56
|
+
default=None, alias="mandateExpirationDate"
|
|
57
|
+
)
|
|
58
|
+
renewal_status: MandateRenewalStatus | None = Field(
|
|
59
|
+
default=None, alias="renewalStatus"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class CreateMandateResponse(FluviusBaseModel):
|
|
64
|
+
"""Response from creating a mock mandate."""
|
|
65
|
+
|
|
66
|
+
status: str | None = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class CreateMandateResponseApiDataResponse(FluviusBaseModel):
|
|
70
|
+
"""Represents a successful response from the mock mandate creation."""
|
|
71
|
+
|
|
72
|
+
meta: ResponseMetadata | None = Field(default=None, alias="_meta")
|
|
73
|
+
data: CreateMandateResponse | None = None
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Client session models for the Fluvius Energy API."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from pydantic import Field
|
|
5
|
+
|
|
6
|
+
from .base import FluviusBaseModel, ResponseMetadata
|
|
7
|
+
from .enums import CreateClientSessionStatus, DataServiceType, Flow
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ClientSessionDataService(FluviusBaseModel):
|
|
11
|
+
"""Represents a data service on a request to create a client session."""
|
|
12
|
+
|
|
13
|
+
data_service_type: DataServiceType = Field(alias="dataServiceType")
|
|
14
|
+
data_period_from: str | None = Field(default=None, alias="dataPeriodFrom")
|
|
15
|
+
data_period_to: str | None = Field(default=None, alias="dataPeriodTo")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CreateClientSessionRequest(FluviusBaseModel):
|
|
19
|
+
"""Represents a request to create a client session."""
|
|
20
|
+
|
|
21
|
+
data_access_contract_number: str = Field(alias="dataAccessContractNumber")
|
|
22
|
+
reference_number: str = Field(alias="referenceNumber")
|
|
23
|
+
flow: Flow
|
|
24
|
+
data_services: list[ClientSessionDataService] | None = Field(
|
|
25
|
+
default=None, alias="dataServices"
|
|
26
|
+
)
|
|
27
|
+
number_of_eans: int | None = Field(default=None, alias="numberOfEans")
|
|
28
|
+
return_url_success: str | None = Field(default=None, alias="returnUrlSuccess")
|
|
29
|
+
return_url_failed: str | None = Field(default=None, alias="returnUrlFailed")
|
|
30
|
+
sso: bool | None = None
|
|
31
|
+
enterprise_number: str | None = Field(default=None, alias="enterpriseNumber")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class CreateClientSessionResponse(FluviusBaseModel):
|
|
35
|
+
"""Represents a response containing a new client session."""
|
|
36
|
+
|
|
37
|
+
status: CreateClientSessionStatus | None = None
|
|
38
|
+
short_url_identifier: str | None = Field(default=None, alias="shortUrlIdentifier")
|
|
39
|
+
valid_to: datetime | None = Field(default=None, alias="validTo")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class CreateClientSessionResponseApiDataResponse(FluviusBaseModel):
|
|
43
|
+
"""Represents a successful response from the server containing data."""
|
|
44
|
+
|
|
45
|
+
meta: ResponseMetadata | None = Field(default=None, alias="_meta")
|
|
46
|
+
data: CreateClientSessionResponse | None = None
|
|
File without changes
|