Files
EOS/src/akkudoktoreos/prediction/load.py
Bobby Noelte e7b43782a4 fix: pydantic extra keywords deprecated (#753)
Pydantic deprecates using extra keyword arguments on Field.
Used json_schema_extra instead.

Deprecated in Pydantic V2.0 to be removed in V3.0.

Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
2025-11-10 16:57:44 +01:00

72 lines
2.4 KiB
Python

"""Load forecast module for load predictions."""
from typing import Optional
from pydantic import Field, field_validator
from akkudoktoreos.config.configabc import SettingsBaseModel
from akkudoktoreos.prediction.loadabc import LoadProvider
from akkudoktoreos.prediction.loadakkudoktor import LoadAkkudoktorCommonSettings
from akkudoktoreos.prediction.loadimport import LoadImportCommonSettings
from akkudoktoreos.prediction.loadvrm import LoadVrmCommonSettings
from akkudoktoreos.prediction.prediction import get_prediction
prediction_eos = get_prediction()
# Valid load providers
load_providers = [
provider.provider_id()
for provider in prediction_eos.providers
if isinstance(provider, LoadProvider)
]
class LoadCommonProviderSettings(SettingsBaseModel):
"""Load Prediction Provider Configuration."""
LoadAkkudoktor: Optional[LoadAkkudoktorCommonSettings] = Field(
default=None,
json_schema_extra={"description": "LoadAkkudoktor settings", "examples": [None]},
)
LoadVrm: Optional[LoadVrmCommonSettings] = Field(
default=None, json_schema_extra={"description": "LoadVrm settings", "examples": [None]}
)
LoadImport: Optional[LoadImportCommonSettings] = Field(
default=None, json_schema_extra={"description": "LoadImport settings", "examples": [None]}
)
class LoadCommonSettings(SettingsBaseModel):
"""Load Prediction Configuration."""
provider: Optional[str] = Field(
default=None,
json_schema_extra={
"description": "Load provider id of provider to be used.",
"examples": ["LoadAkkudoktor"],
},
)
provider_settings: LoadCommonProviderSettings = Field(
default_factory=LoadCommonProviderSettings,
json_schema_extra={
"description": "Provider settings",
"examples": [
# Example 1: Empty/default settings (all providers None)
{
"LoadAkkudoktor": None,
"LoadVrm": None,
"LoadImport": None,
},
],
},
)
# 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}.")