mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-04-19 04:06:20 +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
pre-commit / pre-commit (push) Has been cancelled
Run Pytest on Pull Request / test (push) Has been cancelled
docker-build / build (push) Has been cancelled
docker-build / merge (push) Has been cancelled
Close stale pull requests/issues / Find Stale issues and PRs (push) Has been cancelled
Fix documentation for the loadforecast_power_w key. Fix documentation to explain the usage of import file/ JSON string to primarily initialise prediction data. Fix code scanning alert no. 6: URL redirection from remote source Enable to automatically save the configuration to the configuration file by default, which is a widespread user expectation. Make the genetic parameters non optional for better pydantic compliance. Update: - bump pytest to 9.0.3 - bump pillow to 12.2.0 - bump platformdirs to 4.9.6 - bump typespyyaml to 6.0.12.20260408 - bump tzfpy to 1.2.0 - bump pydantic to 2.13.0 - bump types-requests to 2.33.0.20260408 Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com> Co-authored-by: Normann <github@koldrack.com>
70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
"""Retrieves load forecast data from an import file.
|
|
|
|
This module provides classes and mappings to manage load data obtained from
|
|
an import file, including support for various load attributes such as temperature,
|
|
humidity, cloud cover, and solar irradiance. The data is mapped to the `LoadDataRecord`
|
|
format, enabling consistent access to forecasted and historical load attributes.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
from typing import Optional, Union
|
|
|
|
from pydantic import Field, field_validator
|
|
|
|
from akkudoktoreos.config.configabc import SettingsBaseModel
|
|
from akkudoktoreos.prediction.loadabc import LoadProvider
|
|
from akkudoktoreos.prediction.predictionabc import PredictionImportProvider
|
|
|
|
|
|
class LoadImportCommonSettings(SettingsBaseModel):
|
|
"""Common settings for load data import from file or JSON string."""
|
|
|
|
import_file_path: Optional[Union[str, Path]] = Field(
|
|
default=None,
|
|
json_schema_extra={
|
|
"description": "Path to the file to import load data from.",
|
|
"examples": [None, "/path/to/yearly_load.json"],
|
|
},
|
|
)
|
|
import_json: Optional[str] = Field(
|
|
default=None,
|
|
json_schema_extra={
|
|
"description": "JSON string, dictionary of load forecast value lists.",
|
|
"examples": ['{"loadforecast_power_w": [676.71, 876.19, 527.13]}'],
|
|
},
|
|
)
|
|
|
|
# Validators
|
|
@field_validator("import_file_path", mode="after")
|
|
@classmethod
|
|
def validate_loadimport_file_path(cls, value: Optional[Union[str, Path]]) -> Optional[Path]:
|
|
"""Ensure file is available."""
|
|
if value is None:
|
|
return None
|
|
if isinstance(value, str):
|
|
value = Path(value)
|
|
value.resolve()
|
|
if not value.is_file():
|
|
raise ValueError(f"Import file path '{value}' is not a file.")
|
|
return value
|
|
|
|
|
|
class LoadImport(LoadProvider, PredictionImportProvider):
|
|
"""Fetch Load data from import file or JSON string.
|
|
|
|
LoadImport is a singleton-based class that retrieves load forecast data
|
|
from a file or JSON string and maps it to `LoadDataRecord` fields. It manages the forecast
|
|
over a range of hours into the future and retains historical data.
|
|
"""
|
|
|
|
@classmethod
|
|
def provider_id(cls) -> str:
|
|
"""Return the unique identifier for the LoadImport provider."""
|
|
return "LoadImport"
|
|
|
|
def _update_data(self, force_update: Optional[bool] = False) -> None:
|
|
if self.config.load.loadimport.import_file_path:
|
|
self.import_from_file(self.config.load.loadimport.import_file_path, key_prefix="load")
|
|
if self.config.load.loadimport.import_json:
|
|
self.import_from_json(self.config.load.loadimport.import_json, key_prefix="load")
|