diff --git a/heat-stack/app/utils/pyodide.test.ts b/heat-stack/app/utils/pyodide.test.ts index 16e7cd17..1dff3364 100644 --- a/heat-stack/app/utils/pyodide.test.ts +++ b/heat-stack/app/utils/pyodide.test.ts @@ -220,7 +220,6 @@ test('pyodide solves climate change', async () => { } const executePy = await pyodide.runPythonAsync(` - from datetime import date from rules_engine import parser from rules_engine.pydantic_models import ( FuelType, @@ -238,7 +237,7 @@ test('pyodide solves climate change', async () => { summaryInput = SummaryInput(**summaryInputFromJs) - temperatureInput = TemperatureInput(dates=[date.fromisoformat(date_) for date_ in temperatureInputFromJs["dates"]], temperatures=temperatureInputFromJs["temperatures"]) + temperatureInput = TemperatureInput(**temperatureInputFromJs) outputs = engine.get_outputs_natural_gas(summaryInput,temperatureInput, naturalGasInputRecords) diff --git a/rules-engine/src/rules_engine/pydantic_models.py b/rules-engine/src/rules_engine/pydantic_models.py index 6c98921f..fce42087 100644 --- a/rules-engine/src/rules_engine/pydantic_models.py +++ b/rules-engine/src/rules_engine/pydantic_models.py @@ -171,8 +171,12 @@ class NormalizedBillingPeriodRecord(NormalizedBillingPeriodRecordBase): whole_home_heat_loss_rate: Optional[float] = Field(frozen=True) +def _date_string_parser(rate: str) -> datetime: + return datetime.strptime(rate, "%Y-%m-%d") + + class TemperatureInput(BaseModel): - dates: list[datetime] + dates: list[Annotated[datetime, BeforeValidator(_date_string_parser)]] temperatures: list[float] diff --git a/rules-engine/tests/test_rules_engine/test_engine.py b/rules-engine/tests/test_rules_engine/test_engine.py index 17ae1e0f..40ca3346 100644 --- a/rules-engine/tests/test_rules_engine/test_engine.py +++ b/rules-engine/tests/test_rules_engine/test_engine.py @@ -185,7 +185,7 @@ def sample_temp_inputs() -> TemperatureInput: return TemperatureInput( temperatures=temperature_dict["temperatures"], - dates=[datetime.fromisoformat(x) for x in temperature_dict["dates"]], + dates=temperature_dict["dates"], ) diff --git a/rules-engine/tests/test_rules_engine/test_utils.py b/rules-engine/tests/test_rules_engine/test_utils.py index 57c622f4..32a6c81b 100644 --- a/rules-engine/tests/test_rules_engine/test_utils.py +++ b/rules-engine/tests/test_rules_engine/test_utils.py @@ -172,7 +172,7 @@ def load_temperature_data(path: Path, weather_station: str) -> TemperatureInput: row: Any for row in reader: - dates.append(datetime.strptime(row["Date"], "%Y-%m-%d")) + dates.append(row["Date"]) temperatures.append(row[weather_station]) return TemperatureInput(dates=dates, temperatures=temperatures)