fix: converge broker failures without retry
This commit is contained in:
@@ -15,7 +15,7 @@ import base64
|
||||
import hashlib
|
||||
import json
|
||||
from dataclasses import replace
|
||||
from datetime import datetime, time, timedelta, timezone
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from decimal import Decimal, InvalidOperation
|
||||
from time import monotonic
|
||||
from typing import Callable, Optional
|
||||
@@ -40,7 +40,7 @@ _MOCK_HINTS = ("openapivts", "virtual", "mock")
|
||||
_FILL_POLL_MIN_INTERVAL_SECONDS = 5.0
|
||||
_FILL_POLL_TRANSPORT_BACKOFF_SECONDS = 30.0
|
||||
_SUBMISSION_LOOKUP_GRACE_SECONDS = 90.0
|
||||
_SUPPORTED_ORDER_VENUES = frozenset({"AUTO", "KRX", "NXT", "SOR"})
|
||||
_SUPPORTED_ORDER_VENUES = frozenset({"KRX", "NXT", "SOR"})
|
||||
|
||||
|
||||
def _balance_http_error_code(status: Optional[int]) -> str:
|
||||
@@ -54,26 +54,15 @@ def _balance_http_error_code(status: Optional[int]) -> str:
|
||||
|
||||
|
||||
def resolve_order_venue(venue: str, at: datetime) -> str:
|
||||
"""Resolve AUTO to the venue that accepts domestic-stock orders at `at`.
|
||||
"""Validate and preserve an explicit KRX/NXT/SOR order venue.
|
||||
|
||||
The gaps are intentional fail-closed intervals. They prevent an AUTO order
|
||||
from silently falling back to KRX while the opening venue is indeterminate.
|
||||
Explicit KRX/NXT/SOR values are preserved.
|
||||
``at`` remains in the signature for compatibility with existing callers;
|
||||
venue selection is deliberately independent of wall-clock time.
|
||||
"""
|
||||
normalized = str(venue).strip().upper()
|
||||
if normalized not in _SUPPORTED_ORDER_VENUES:
|
||||
raise ValueError("unsupported_order_venue")
|
||||
if normalized != "AUTO":
|
||||
return normalized
|
||||
|
||||
current = at.astimezone(_KST).time().replace(tzinfo=None)
|
||||
if time(8, 0) <= current < time(8, 50):
|
||||
return "NXT"
|
||||
if time(9, 0, 30) <= current < time(15, 30):
|
||||
return "KRX"
|
||||
if time(15, 30) <= current <= time(20, 0):
|
||||
return "NXT"
|
||||
raise ValueError("auto_venue_session_closed")
|
||||
return normalized
|
||||
|
||||
|
||||
def _safe_int(v: object) -> Optional[int]:
|
||||
|
||||
Reference in New Issue
Block a user