31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
"""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 组合")
|