idea182-implementation/gravityweave/registry.py

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())