diff --git a/collect.py b/collect.py index 594ae6b..6f5bbe6 100644 --- a/collect.py +++ b/collect.py @@ -58,7 +58,8 @@ from pathlib import Path import log_config import network import we_connect -from data_model import ALL_DOMAINS, auto_out_path, collect_snapshot, load_store, save_store +from data_model import ALL_DOMAINS, collect_snapshot +from storage_helpers import auto_out_path, load_store, save_store log = logging.getLogger(__name__) diff --git a/data_model.py b/data_model.py index 98b9124..7094d07 100644 --- a/data_model.py +++ b/data_model.py @@ -1,7 +1,5 @@ -import json import logging from datetime import datetime, timezone -from pathlib import Path log = logging.getLogger(__name__) @@ -245,34 +243,3 @@ def collect_snapshot(vehicle, domains: list[str]) -> dict: if data is not None: snapshot[domain] = data return snapshot - - -# ── store helpers ───────────────────────────────────────────────────────────── - -def auto_out_path(logs_dir: Path, vin: str) -> Path: - stamp = datetime.now(timezone.utc).strftime("%Y_%m_%d_%H_%M_%S") - return logs_dir / f"{stamp}_{vin}.json" - - -def load_store(path: Path, vin: str, interval: int) -> dict: - if path.exists(): - try: - data = json.loads(path.read_text()) - if isinstance(data, dict) and "records" in data: - return data - except json.JSONDecodeError: - log.warning("Output file is corrupt — starting fresh") - return { - "meta": { - "vin": vin, - "created_at": datetime.now(timezone.utc).isoformat(), - "interval_seconds": interval, - }, - "records": [], - } - - -def save_store(path: Path, store: dict, max_records: int | None) -> None: - if max_records and len(store["records"]) > max_records: - store["records"] = store["records"][-max_records:] - path.write_text(json.dumps(store, indent=2, default=str)) \ No newline at end of file diff --git a/storage_helpers.py b/storage_helpers.py new file mode 100644 index 0000000..9445e3f --- /dev/null +++ b/storage_helpers.py @@ -0,0 +1,35 @@ +import json +import logging +from datetime import datetime, timezone +from pathlib import Path + +log = logging.getLogger(__name__) + + +def auto_out_path(logs_dir: Path, vin: str) -> Path: + stamp = datetime.now(timezone.utc).strftime("%Y_%m_%d_%H_%M_%S") + return logs_dir / f"{stamp}_{vin}.json" + + +def load_store(path: Path, vin: str, interval: int) -> dict: + if path.exists(): + try: + data = json.loads(path.read_text()) + if isinstance(data, dict) and "records" in data: + return data + except json.JSONDecodeError: + log.warning("Output file is corrupt — starting fresh") + return { + "meta": { + "vin": vin, + "created_at": datetime.now(timezone.utc).isoformat(), + "interval_seconds": interval, + }, + "records": [], + } + + +def save_store(path: Path, store: dict, max_records: int | None) -> None: + if max_records and len(store["records"]) > max_records: + store["records"] = store["records"][-max_records:] + path.write_text(json.dumps(store, indent=2, default=str)) \ No newline at end of file