"""Shared Stock Oracle client helpers for ORB/intraday workflows.""" from __future__ import annotations from libs.common.config import Settings from libs.oracle_client import OracleClient _INTRADAY_ORACLE_MIN_TIMEOUT = 90.0 def intraday_oracle_timeout(settings: Settings) -> float: """Return a safer timeout for heavy ORB historical bulk requests. Oracle may spend tens of seconds inside upstream Alpaca retries. The global default timeout (`stock_oracle_timeout=30`) is fine for lighter PIT lookups but too short for ORB multi-ticker intraday batches, which can trigger client-side timeouts and singleton retry cascades. """ return max(float(settings.stock_oracle_timeout), _INTRADAY_ORACLE_MIN_TIMEOUT) def make_intraday_oracle_client(settings: Settings) -> OracleClient: """Build an Oracle client tuned for ORB/intraday research workloads.""" return OracleClient( base_url=settings.stock_oracle_url, timeout=intraday_oracle_timeout(settings), )