idea143-crisisguard-federat.../crisisguard/registry.py

33 lines
894 B
Python

from __future__ import annotations
from dataclasses import dataclass
from typing import Dict
@dataclass
class AdapterEntry:
name: str
version: str
contract: dict
class GraphOfContracts:
def __init__(self) -> None:
self._adapters: Dict[str, AdapterEntry] = {}
self._contracts: Dict[str, dict] = {}
def register_adapter(self, name: str, version: str, contract: dict) -> AdapterEntry:
entry = AdapterEntry(name=name, version=version, contract=contract)
self._adapters[name] = entry
self._contracts[name] = contract
return entry
def get_adapter(self, name: str) -> AdapterEntry | None:
return self._adapters.get(name)
def list_adapters(self) -> list[AdapterEntry]:
return list(self._adapters.values())
def get_contract(self, name: str) -> dict | None:
return self._contracts.get(name)