68 lines
1.4 KiB
Python
68 lines
1.4 KiB
Python
|
|
# generated by datamodel-codegen:
|
||
|
|
# filename: ledger_view.json
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from enum import StrEnum
|
||
|
|
from typing import Literal
|
||
|
|
|
||
|
|
from pydantic import (
|
||
|
|
AwareDatetime,
|
||
|
|
BaseModel,
|
||
|
|
ConfigDict,
|
||
|
|
Field,
|
||
|
|
RootModel,
|
||
|
|
conint,
|
||
|
|
constr,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class Timescale(StrEnum):
|
||
|
|
ANNUAL = 'ANNUAL'
|
||
|
|
MONTHLY = 'MONTHLY'
|
||
|
|
DAY_AHEAD = 'DAY_AHEAD'
|
||
|
|
INTRADAY = 'INTRADAY'
|
||
|
|
REALTIME = 'REALTIME'
|
||
|
|
|
||
|
|
|
||
|
|
class Kind(StrEnum):
|
||
|
|
CONTRACT = 'CONTRACT'
|
||
|
|
BID_SUBMITTED = 'BID_SUBMITTED'
|
||
|
|
AWARD = 'AWARD'
|
||
|
|
EXTERNAL_COMMITMENT = 'EXTERNAL_COMMITMENT'
|
||
|
|
|
||
|
|
|
||
|
|
class Value(RootModel[constr(pattern=r'^-?\d+(\.\d+)?$')]):
|
||
|
|
root: constr(pattern=r'^-?\d+(\.\d+)?$')
|
||
|
|
|
||
|
|
|
||
|
|
class Curve(BaseModel):
|
||
|
|
model_config = ConfigDict(
|
||
|
|
extra='forbid',
|
||
|
|
)
|
||
|
|
interval_minutes: Literal[15]
|
||
|
|
date: constr(pattern=r'^\d{4}-\d{2}-\d{2}$')
|
||
|
|
values: list[Value] = Field(..., max_length=96, min_length=96)
|
||
|
|
|
||
|
|
|
||
|
|
class Entry(BaseModel):
|
||
|
|
model_config = ConfigDict(
|
||
|
|
extra='forbid',
|
||
|
|
)
|
||
|
|
id: constr(min_length=1)
|
||
|
|
timescale: Timescale
|
||
|
|
period: constr(pattern=r'^\d{4}(-\d{2}(-\d{2})?)?$')
|
||
|
|
kind: Kind
|
||
|
|
energy_mwh: constr(pattern=r'^-?\d+(\.\d+)?$')
|
||
|
|
curve: Curve | None
|
||
|
|
source_ref: constr(min_length=1)
|
||
|
|
recorded_at: AwareDatetime
|
||
|
|
|
||
|
|
|
||
|
|
class LedgerView(BaseModel):
|
||
|
|
model_config = ConfigDict(
|
||
|
|
extra='forbid',
|
||
|
|
)
|
||
|
|
version: conint(ge=0, le=9007199254740991)
|
||
|
|
entries: list[Entry]
|