33 lines
982 B
Python
33 lines
982 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import Dict, Optional
|
|
|
|
|
|
@dataclass
|
|
class GoCContract:
|
|
name: str
|
|
version: str
|
|
schema: dict = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class GoCRegistry:
|
|
"""Lightweight Graph-of-Contracts registry for GoC interoperability.
|
|
|
|
This is intentionally minimal: it stores versioned contract schemas for adapters
|
|
and primitives. Producers can register contracts, and consumers can fetch them
|
|
by (name, version).
|
|
"""
|
|
|
|
contracts: Dict[str, GoCContract] = field(default_factory=dict)
|
|
|
|
def register(self, name: str, version: str, schema: Optional[dict] = None) -> str:
|
|
key = f"{name}:{version}"
|
|
self.contracts[key] = GoCContract(name=name, version=version, schema=(schema or {}))
|
|
return key
|
|
|
|
def get_contract(self, name: str, version: str) -> Optional[GoCContract]:
|
|
key = f"{name}:{version}"
|
|
return self.contracts.get(key)
|