2024-12-15 14:40:03 +01:00
|
|
|
"""Load forecast module for load predictions."""
|
|
|
|
|
|
2025-01-12 05:19:37 +01:00
|
|
|
from typing import Optional, Union
|
2024-12-15 14:40:03 +01:00
|
|
|
|
2025-03-27 21:53:01 +01:00
|
|
|
from pydantic import Field, field_validator
|
2024-12-15 14:40:03 +01:00
|
|
|
|
|
|
|
|
from akkudoktoreos.config.configabc import SettingsBaseModel
|
2025-03-27 21:53:01 +01:00
|
|
|
from akkudoktoreos.prediction.loadabc import LoadProvider
|
2025-01-12 05:19:37 +01:00
|
|
|
from akkudoktoreos.prediction.loadakkudoktor import LoadAkkudoktorCommonSettings
|
|
|
|
|
from akkudoktoreos.prediction.loadimport import LoadImportCommonSettings
|
2025-03-27 21:53:01 +01:00
|
|
|
from akkudoktoreos.prediction.prediction import get_prediction
|
2024-12-15 14:40:03 +01:00
|
|
|
|
2025-03-27 21:53:01 +01:00
|
|
|
prediction_eos = get_prediction()
|
|
|
|
|
|
|
|
|
|
# Valid load providers
|
|
|
|
|
load_providers = [
|
|
|
|
|
provider.provider_id()
|
|
|
|
|
for provider in prediction_eos.providers
|
|
|
|
|
if isinstance(provider, LoadProvider)
|
|
|
|
|
]
|
2024-12-15 14:40:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class LoadCommonSettings(SettingsBaseModel):
|
2025-01-15 00:54:45 +01:00
|
|
|
"""Load Prediction Configuration."""
|
2025-01-05 14:41:07 +01:00
|
|
|
|
2025-01-18 14:26:34 +01:00
|
|
|
provider: Optional[str] = Field(
|
2025-01-15 00:54:45 +01:00
|
|
|
default=None,
|
|
|
|
|
description="Load provider id of provider to be used.",
|
|
|
|
|
examples=["LoadAkkudoktor"],
|
2024-12-15 14:40:03 +01:00
|
|
|
)
|
2025-01-12 05:19:37 +01:00
|
|
|
|
|
|
|
|
provider_settings: Optional[Union[LoadAkkudoktorCommonSettings, LoadImportCommonSettings]] = (
|
2025-01-15 00:54:45 +01:00
|
|
|
Field(default=None, description="Provider settings", examples=[None])
|
2025-01-12 05:19:37 +01:00
|
|
|
)
|
2025-03-27 21:53:01 +01:00
|
|
|
|
|
|
|
|
# Validators
|
|
|
|
|
@field_validator("provider", mode="after")
|
|
|
|
|
@classmethod
|
|
|
|
|
def validate_provider(cls, value: Optional[str]) -> Optional[str]:
|
|
|
|
|
if value is None or value in load_providers:
|
|
|
|
|
return value
|
|
|
|
|
raise ValueError(f"Provider '{value}' is not a valid load provider: {load_providers}.")
|