ACT-001: actuator-first sensor lifecycle
This commit is contained in:
@@ -20,6 +20,8 @@ class ModelRegistry:
|
||||
def __init__(self, root: str | Path) -> None:
|
||||
self._root = Path(root).resolve()
|
||||
self._root.mkdir(parents=True, exist_ok=True)
|
||||
self._archive_root = self._root / "archive"
|
||||
self._archive_root.mkdir(parents=True, exist_ok=True)
|
||||
self._artifacts: dict[str, TrainedArtifact] = {}
|
||||
self._lock = RLock()
|
||||
self._load_existing()
|
||||
@@ -43,10 +45,27 @@ class ModelRegistry:
|
||||
raise KeyError(f"Artifact '{artifact_id}' nicht registriert.")
|
||||
return self._artifacts[artifact_id]
|
||||
|
||||
def get_optional(self, artifact_id: str) -> TrainedArtifact | None:
|
||||
self._validate_artifact_id(artifact_id)
|
||||
with self._lock:
|
||||
return self._artifacts.get(artifact_id)
|
||||
|
||||
def list_models(self) -> Iterable[TrainedArtifact]:
|
||||
with self._lock:
|
||||
return [self._artifacts[key] for key in sorted(self._artifacts)]
|
||||
|
||||
def archive(self, artifact_id: str) -> bool:
|
||||
self._validate_artifact_id(artifact_id)
|
||||
with self._lock:
|
||||
artifact = self._artifacts.pop(artifact_id, None)
|
||||
source = self._root / f"{artifact_id}.json"
|
||||
if not source.exists():
|
||||
return artifact is not None
|
||||
target = self._archive_root / f"{artifact_id}.json"
|
||||
os.replace(source, target)
|
||||
logger.info("Modell archiviert: %s", target)
|
||||
return True
|
||||
|
||||
def _load_existing(self) -> None:
|
||||
for source in sorted(self._root.glob("*.json")):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user