42 lines
1.0 KiB
Python
42 lines
1.0 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from typing import Dict, Any, List
|
|
|
|
from .trace import LocalEvent, PlanDelta, OrderEvent, FillEvent
|
|
|
|
|
|
class FixFeedAdapter:
|
|
"""Starter FIX feed adapter (simulation).
|
|
|
|
Emits LocalEvent instances as JSON over an in-process queue for now.
|
|
"""
|
|
|
|
def __init__(self) -> None:
|
|
self._outbox: List[str] = []
|
|
|
|
def emit(self, event: LocalEvent) -> None:
|
|
self._outbox.append(json.dumps(event.to_dict()))
|
|
|
|
def drain(self) -> List[str]:
|
|
out, self._outbox = self._outbox, []
|
|
return out
|
|
|
|
|
|
class ExchangeGatewaySandbox:
|
|
"""Starter exchange gateway sandbox (simulation).
|
|
|
|
Consumes JSON messages and returns a parsed dict representation.
|
|
"""
|
|
|
|
def __init__(self) -> None:
|
|
self._inbox: List[str] = []
|
|
|
|
def receive(self, payload: str) -> None:
|
|
self._inbox.append(payload)
|
|
|
|
def parse_all(self) -> List[Dict[str, Any]]:
|
|
messages = [json.loads(p) for p in self._inbox]
|
|
self._inbox.clear()
|
|
return messages
|