diff --git a/equicompiler_algebraic_portfolio_dsl_to_/adapters/__init__.py b/equicompiler_algebraic_portfolio_dsl_to_/adapters/__init__.py new file mode 100644 index 0000000..5efa20b --- /dev/null +++ b/equicompiler_algebraic_portfolio_dsl_to_/adapters/__init__.py @@ -0,0 +1,9 @@ +"""Adapter package for EquiCompiler MVP. + +This module initializes the adapters subpackage. It currently contains +lightweight skeletons for a DataFeedAdapter and a BrokerAdapter that +are intended to be extended in later MVP phases. They provide a minimal +contract-based interface to plug into the GoC registry. +""" + +__all__ = ["data_feed_adapter", "broker_adapter"] diff --git a/equicompiler_algebraic_portfolio_dsl_to_/adapters/data_feed_adapter.py b/equicompiler_algebraic_portfolio_dsl_to_/adapters/data_feed_adapter.py index 20ef7d5..f52b24c 100644 --- a/equicompiler_algebraic_portfolio_dsl_to_/adapters/data_feed_adapter.py +++ b/equicompiler_algebraic_portfolio_dsl_to_/adapters/data_feed_adapter.py @@ -1,30 +1,39 @@ -"""Starter Data Feed Adapter for EquiCompiler GoC workflow. - -This is a minimal, self-contained adapter that can be registered with the -GoC registry. It serves as a playground for plug-and-play interoperability -between adapters and the EquiIR representation. -""" +"""Lightweight Data Feed Adapter skeleton for MVP.""" from __future__ import annotations -try: - from .broker_adapter import register as _register_broker # type: ignore -except Exception: - _register_broker = None # pragma: no cover +from typing import Dict, Any +class DataFeedAdapter: + """ + Minimal data-feed adapter interface. + - connect: establish connection to feed + - fetch: retrieve latest market data snapshot (stubbed) + - contract_metadata: provide a minimal contract descriptor for replay/audit + """ -def register(registry): # pragma: no cover - """Register this data-feed adapter with the provided registry.""" - if registry is None: - return - registry.register( - name="mock-data-feed", - contract={ - "type": "data-feed", + def __init__(self, config: Dict[str, Any] | None = None) -> None: + self.config = config or {} + self.connected = False + + def connect(self) -> bool: + """Pretend to establish a connection to a data feed.""" + self.connected = True + return self.connected + + def fetch(self) -> Dict[str, Any]: + """Return a small mock data payload suitable for tests.""" + if not self.connected: + raise RuntimeError("DataFeedAdapter not connected") + return { + "timestamp": "2026-01-01T00:00:00Z", + "prices": {"AAPL": 150.0, "MSFT": 300.0, "GOOG": 2800.0}, + } + + def contract_metadata(self) -> Dict[str, Any]: + """Return a minimal descriptor for the feed's contract surface.""" + return { + "feed_name": "mock", "version": "0.1", - "description": "Mock data feed for prices and signals", - "contracts": [ - {"name": "prices", "provider": "mock"}, - ], - }, - ) + "description": "Lightweight mock data feed for MVP tests", + }