48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
"""Graph-of-Contracts (GoC) registry and minimal adapters registry.
|
|
|
|
This is a lightweight, production-oriented scaffold for the MVP.
|
|
"""
|
|
from __future__ import annotations
|
|
from dataclasses import dataclass, field
|
|
from typing import Dict, Optional
|
|
|
|
from .core import HedgeDelta
|
|
# Import adapters to ensure their classes are discoverable when registry loads
|
|
from .adapters.price_feed import PriceFeedAdapter
|
|
from .adapters.broker import BrokerAdapter
|
|
|
|
|
|
@dataclass
|
|
class GoCRegistry:
|
|
"""Registry for adapters and data contracts (toy GoC)."""
|
|
adapters: Dict[str, object] = field(default_factory=dict)
|
|
|
|
def __post_init__(self):
|
|
# Initialize to an empty mapping if not provided
|
|
if self.adapters is None:
|
|
self.adapters = {}
|
|
|
|
def register_adapter(self, adapter) -> None:
|
|
self.adapters[adapter.name] = adapter
|
|
|
|
def get_adapter(self, name: str) -> Optional[object]:
|
|
return self.adapters.get(name)
|
|
|
|
|
|
class GraphOfContracts:
|
|
"""Lightweight catalog for contract versions and replay metadata."""
|
|
def __init__(self) -> None:
|
|
self.contracts: Dict[str, str] = {}
|
|
|
|
def register_contract(self, name: str, version: str) -> None:
|
|
self.contracts[name] = version
|
|
|
|
def get_contract(self, name: str) -> Optional[str]:
|
|
return self.contracts.get(name)
|
|
|
|
def list_contracts(self):
|
|
return list(self.contracts.items())
|
|
|
|
|
|
__all__ = ["GoCRegistry", "GraphOfContracts"]
|