mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-11-13 09:13:30 +01:00
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from typing import Optional
|
|||
|
|
|
||
|
|
from pydantic import Field, computed_field, field_validator
|
||
|
|
|
||
|
|
from akkudoktoreos.config.configabc import SettingsBaseModel
|
||
|
|
from akkudoktoreos.core.coreabc import get_prediction
|
||
|
|
from akkudoktoreos.prediction.elecfeeabc import ElecFeeProvider
|
||
|
|
from akkudoktoreos.prediction.elecfeefixed import ElecFeeFixedCommonSettings
|
||
|
|
from akkudoktoreos.prediction.elecfeeimport import ElecFeeImportCommonSettings
|
||
|
|
|
||
|
|
|
||
|
|
def elecfee_provider_ids() -> list[str]:
|
||
|
|
"""Valid elecfee provider ids."""
|
||
|
|
try:
|
||
|
|
prediction_eos = get_prediction()
|
||
|
|
except Exception:
|
||
|
|
# Prediction may not be initialized. Return static built-in provider ids.
|
||
|
|
return [
|
||
|
|
"ElecFeeFixed",
|
||
|
|
"ElecFeeImport",
|
||
|
|
]
|
||
|
|
|
||
|
|
return [
|
||
|
|
provider.provider_id()
|
||
|
|
for provider in prediction_eos.providers
|
||
|
|
if isinstance(provider, ElecFeeProvider)
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
class ElecFeeCommonSettings(SettingsBaseModel):
|
||
|
|
"""Electricity Price Prediction Configuration."""
|
||
|
|
|
||
|
|
provider: Optional[str] = Field(
|
||
|
|
default=None,
|
||
|
|
json_schema_extra={
|
||
|
|
"description": "Electricity fee provider id of provider to be used.",
|
||
|
|
"examples": ["ElecFeeFixed"],
|
||
|
|
},
|
||
|
|
)
|
||
|
|
|
||
|
|
elecfeefixed: ElecFeeFixedCommonSettings = Field(
|
||
|
|
default_factory=ElecFeeFixedCommonSettings,
|
||
|
|
json_schema_extra={"description": "Fixed electricity fees provider settings."},
|
||
|
|
)
|
||
|
|
|
||
|
|
elecfeeimport: ElecFeeImportCommonSettings = Field(
|
||
|
|
default_factory=ElecFeeImportCommonSettings,
|
||
|
|
json_schema_extra={"description": "Electricity fees import provider settings."},
|
||
|
|
)
|
||
|
|
|
||
|
|
@computed_field # type: ignore[prop-decorator]
|
||
|
|
@property
|
||
|
|
def providers(self) -> list[str]:
|
||
|
|
"""Available electricity fee provider ids."""
|
||
|
|
return elecfee_provider_ids()
|
||
|
|
|
||
|
|
# Validators
|
||
|
|
@field_validator("provider", mode="after")
|
||
|
|
@classmethod
|
||
|
|
def validate_provider(cls, value: Optional[str]) -> Optional[str]:
|
||
|
|
if value is None or value in elecfee_provider_ids():
|
||
|
|
return value
|
||
|
|
raise ValueError(
|
||
|
|
f"Provider '{value}' is not a valid electricity fees provider: {elecfee_provider_ids()}."
|
||
|
|
)
|