diff --git a/riskqueue/modeling/artifacts.py b/riskqueue/modeling/artifacts.py index 9173709..f1ec085 100644 --- a/riskqueue/modeling/artifacts.py +++ b/riskqueue/modeling/artifacts.py @@ -1,7 +1,7 @@ from __future__ import annotations import json -from dataclasses import asdict, dataclass +from dataclasses import asdict, dataclass, field from datetime import UTC, datetime from pathlib import Path @@ -17,7 +17,7 @@ class ModelMetadata: roc_auc: float brier: float decision_threshold: float - created_at: str = datetime.now(UTC).isoformat() + created_at: str = field(default_factory=lambda: datetime.now(UTC).isoformat()) def save_artifact(model, metadata: ModelMetadata, directory: str | Path) -> None: diff --git a/tests/test_artifacts.py b/tests/test_artifacts.py new file mode 100644 index 0000000..047c0bf --- /dev/null +++ b/tests/test_artifacts.py @@ -0,0 +1,16 @@ +from datetime import UTC, datetime +from unittest.mock import patch + +from riskqueue.modeling.artifacts import ModelMetadata + + +def test_model_metadata_records_each_creation_time(): + first_time = datetime(2026, 1, 1, tzinfo=UTC) + second_time = datetime(2026, 1, 2, tzinfo=UTC) + with patch("riskqueue.modeling.artifacts.datetime") as clock: + clock.now.side_effect = [first_time, second_time] + first = ModelMetadata("v1", "logistic", 10, 0.1, 0.7, 0.2, 0.3) + second = ModelMetadata("v2", "logistic", 20, 0.2, 0.8, 0.1, 0.4) + + assert first.created_at == first_time.isoformat() + assert second.created_at == second_time.isoformat()