44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
"""Graph-of-Contracts registry: minimal schema and adapter registration.
|
|
|
|
This registry stores contract descriptors and adapter metadata. It's intentionally
|
|
lightweight and uses JSON-serializable structures so adapters can be validated.
|
|
"""
|
|
from typing import Dict, Any
|
|
import time
|
|
import uuid
|
|
|
|
|
|
class Registry:
|
|
def __init__(self):
|
|
# contracts keyed by name -> metadata
|
|
self._contracts: Dict[str, Dict[str, Any]] = {}
|
|
self._adapters: Dict[str, Dict[str, Any]] = {}
|
|
|
|
def register_contract(self, name: str, schema: Dict[str, Any], version: str = "0.1") -> str:
|
|
contract_id = f"{name}:{version}"
|
|
self._contracts[contract_id] = {
|
|
"name": name,
|
|
"version": version,
|
|
"schema": schema,
|
|
"registered_at": time.time(),
|
|
"id": contract_id,
|
|
}
|
|
return contract_id
|
|
|
|
def get_contract(self, contract_id: str) -> Dict[str, Any]:
|
|
return self._contracts[contract_id]
|
|
|
|
def register_adapter(self, adapter_name: str, contract_id: str, meta: Dict[str, Any]) -> str:
|
|
adapter_id = f"{adapter_name}:{str(uuid.uuid4())[:8]}"
|
|
self._adapters[adapter_id] = {
|
|
"name": adapter_name,
|
|
"contract_id": contract_id,
|
|
"meta": meta,
|
|
"registered_at": time.time(),
|
|
"id": adapter_id,
|
|
}
|
|
return adapter_id
|
|
|
|
def list_adapters(self):
|
|
return list(self._adapters.values())
|