SPB Git

spb/wp39_uqo

Public
1.7 KB · 32 lines python
1"""Catalog reconciliation: documented contract vs observed API."""2from __future__ import annotations34from .api_client import FinDataClient56EXPECTED_BARS_FIELDS = ["instrument_id", "symbol_as_reported", "venue", "asset_class", "interval", "timestamp_utc",7                        "session_date", "open", "high", "low", "close", "volume", "currency", "trade_count", "vwap",8                        "adjustment_type", "source_id", "ingested_at", "quality_flags", "revision_id"]91011def probe(client: FinDataClient, contract: dict) -> dict:12    health = client.health()13    datasets = {d["id"]: d for d in client.datasets()}14    schema = client.schema_bars()15    spec = client.openapi()16    routes = sorted(f"{m.upper()} {p}" for p, ops in spec["paths"].items() for m in ops)17    needed = [contract["findata"]["datasets"][k] for k in ("bars_1m", "bars_1m_etf")]18    report = {19        "health_status": health.get("status"),20        "n_datasets": len(datasets),21        "schema_version": schema.get("schema_version"),22        "timestamp_convention": schema.get("timestamp_convention"),23        "bars_fields_ok": [f["name"] for f in schema["fields"]] == EXPECTED_BARS_FIELDS,24        "required_datasets": {d: {"status": datasets.get(d, {}).get("status"), "rows": datasets.get(d, {}).get("row_count"),25                                  "first": datasets.get(d, {}).get("first_session"), "last": datasets.get(d, {}).get("last_session"),26                                  "license": datasets.get(d, {}).get("license_class")} for d in needed},27        "has_earnings_route": any("/earnings" in r for r in routes),28        "routes": routes,29        "lake_free_gb": (health.get("components", {}).get("lake") or {}).get("free_gb"),30    }31    return report32
Files · main
Menu

Theme