"""Helpers for writing runtime configs and preprocessing bundles.""" from __future__ import annotations import json from pathlib import Path from python_app.models.run_config_model import RunConfigModel, parse_combos_from_text from python_app.orchestration.preprocess_assets import PREPROCESS_ASSET_KEYS, PREPROCESS_ASSET_SPECS, preprocess_asset_model from python_app.storage.npz_store import NpzStore class ConfigWriter: """Write runtime artifacts consumed by C++ processes.""" def __init__(self, runtime_dir: Path) -> None: """Create writer rooted at runtime directory.""" self._runtime_dir = runtime_dir self._runtime_dir.mkdir(parents=True, exist_ok=True) def prepare_preprocess_bundles( self, store: NpzStore, radar_key: str, config: RunConfigModel, ) -> None: """Export selected preprocess sets into runtime bundles and update config paths.""" for key in PREPROCESS_ASSET_KEYS: spec = PREPROCESS_ASSET_SPECS[key] asset = preprocess_asset_model(config, key) bundle_path = self._runtime_dir / spec.runtime_filename store.export_set_bundle(spec.set_kind, radar_key, asset.set_name, bundle_path) asset.bundle_path = str(bundle_path) def write(self, config: RunConfigModel, output_path: Path) -> Path: """Write run configuration JSON file.""" output_path.parent.mkdir(parents=True, exist_ok=True) output_path.write_text(json.dumps(config.to_dict(), indent=2), encoding="utf-8") return output_path __all__ = ["ConfigWriter", "parse_combos_from_text"]