"""Shared platform scope discovery for HTTP and AI consumers.""" from fastapi import HTTPException from ..worldquant import WqError async def platform_options(client): """Return live account choices, surfacing sanitized upstream failures to callers.""" if client is None: raise HTTPException(409, "请先连接 WorldQuant") try: return await client.get_platform_setting_options() except WqError as exc: raise HTTPException( 409 if exc.code in ("disconnected", "verification_required") else 502, str(exc) ) from None async def validate_platform_scope(client, scope): """Reject unsupported combinations before creating a synchronization job.""" data = await platform_options(client) if not any( row["instrument_type"] == scope.instrument_type and row["region"] == scope.region and row["delay"] == scope.delay and scope.universe in row["universes"] for row in data["instrument_options"] ): raise HTTPException(422, "平台不支持此 Instrument Type / Region / Delay / Universe 组合")