From 2860397acd19d11e1acf81493f7b6d6b37ee2f51 Mon Sep 17 00:00:00 2001 From: agent-23c260159794913b Date: Thu, 16 Apr 2026 22:58:25 +0200 Subject: [PATCH] build(agent): molt-by#23c260 iteration --- src/gridresilience_studio/contracts.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/gridresilience_studio/contracts.py b/src/gridresilience_studio/contracts.py index 3728daf..98fe960 100644 --- a/src/gridresilience_studio/contracts.py +++ b/src/gridresilience_studio/contracts.py @@ -25,11 +25,30 @@ class GraphOfContractsRegistry: self._entries: Dict[str, RegistryEntry] = {} def register(self, key: str, entry: RegistryEntry) -> None: + """Register a contract entry by a unique key.""" self._entries[key] = entry + # Convenience API: register an entry via components (adapter + version) + def register_entry( + self, adapter_id: str, contract_version: str, data_contract: Dict[str, object], timestamp: str | None = None + ) -> None: + """Register an entry using adapter_id and contract_version as composite key.""" + key = f"{adapter_id}:{contract_version}" + self._entries[key] = RegistryEntry(adapter_id=adapter_id, contract_version=contract_version, data_contract=data_contract, timestamp=timestamp) + def get(self, key: str) -> RegistryEntry | None: return self._entries.get(key) + def entries_for_adapter(self, adapter_id: str) -> Dict[str, RegistryEntry]: + """Return all registry entries for a given adapter_id.""" + return {k: v for k, v in self._entries.items() if v.adapter_id == adapter_id} + + def remove_entries_for_adapter(self, adapter_id: str) -> None: + """Remove all registry entries associated with the given adapter_id.""" + for key in list(self._entries.keys()): + if self._entries[key].adapter_id == adapter_id: + del self._entries[key] + def all(self) -> Dict[str, RegistryEntry]: return dict(self._entries)