mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-07-21 09:18:12 +00:00
Some checks failed
Bump Version / Bump Version Workflow (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
docker-build / platform-excludes (push) Has been cancelled
docker-build / build (push) Has been cancelled
docker-build / merge (push) Has been cancelled
pre-commit / pre-commit (push) Has been cancelled
Run Pytest on Pull Request / test (push) Has been cancelled
Close stale pull requests/issues / Find Stale issues and PRs (push) Has been cancelled
Respect pydantic model in serializing json data for import. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
81 lines
2.8 KiB
Python
81 lines
2.8 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.feedintariffabc import FeedInTariffProvider
|
|
from akkudoktoreos.prediction.feedintarifffixed import FeedInTariffFixedCommonSettings
|
|
from akkudoktoreos.prediction.feedintariffimport import FeedInTariffImportCommonSettings
|
|
|
|
|
|
def feedintariff_provider_ids() -> list[str]:
|
|
"""Valid feedintariff provider ids."""
|
|
try:
|
|
prediction_eos = get_prediction()
|
|
except:
|
|
# Prediction may not be initialized
|
|
# Return at least provider used in example
|
|
return ["FeedInTariffFixed", "FeedInTarifImport"]
|
|
|
|
return [
|
|
provider.provider_id()
|
|
for provider in prediction_eos.providers
|
|
if isinstance(provider, FeedInTariffProvider)
|
|
]
|
|
|
|
|
|
class FeedInTariffCommonProviderSettings(SettingsBaseModel):
|
|
"""Feed In Tariff Prediction Provider Configuration."""
|
|
|
|
FeedInTariffFixed: Optional[FeedInTariffFixedCommonSettings] = Field(
|
|
default=None,
|
|
json_schema_extra={"description": "FeedInTariffFixed settings", "examples": [None]},
|
|
)
|
|
FeedInTariffImport: Optional[FeedInTariffImportCommonSettings] = Field(
|
|
default=None,
|
|
json_schema_extra={"description": "FeedInTariffImport settings", "examples": [None]},
|
|
)
|
|
|
|
|
|
class FeedInTariffCommonSettings(SettingsBaseModel):
|
|
"""Feed In Tariff Prediction Configuration."""
|
|
|
|
provider: Optional[str] = Field(
|
|
default=None,
|
|
json_schema_extra={
|
|
"description": "Feed in tariff provider id of provider to be used.",
|
|
"examples": ["FeedInTariffFixed", "FeedInTarifImport"],
|
|
},
|
|
)
|
|
|
|
provider_settings: FeedInTariffCommonProviderSettings = Field(
|
|
default_factory=FeedInTariffCommonProviderSettings,
|
|
json_schema_extra={
|
|
"description": "Provider settings",
|
|
"examples": [
|
|
# Example 1: Empty/default settings (all providers None)
|
|
{
|
|
"FeedInTariffFixed": None,
|
|
"FeedInTariffImport": None,
|
|
},
|
|
],
|
|
},
|
|
)
|
|
|
|
@computed_field # type: ignore[prop-decorator]
|
|
@property
|
|
def providers(self) -> list[str]:
|
|
"""Available feed in tariff provider ids."""
|
|
return feedintariff_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 feedintariff_provider_ids():
|
|
return value
|
|
raise ValueError(
|
|
f"Provider '{value}' is not a valid feed in tariff provider: {feedintariff_provider_ids()}."
|
|
)
|