fix: synology py38 compatibility and KIS validation deps

This commit is contained in:
2026-06-21 23:09:55 +09:00
parent c76f763e64
commit febd85d95e
8 changed files with 308 additions and 19 deletions
+10 -2
View File
@@ -26,8 +26,6 @@ import sys
from pathlib import Path
from typing import Any
import requests
ROOT = Path(__file__).resolve().parents[2]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
@@ -36,6 +34,14 @@ REAL_DOMAIN = "https://openapi.koreainvestment.com:9443"
MOCK_DOMAIN = "https://openapivts.koreainvestment.com:29443"
TOKEN_CACHE_DIR = ROOT / "Temp"
def _requests():
try:
import requests # type: ignore
except Exception as exc: # pragma: no cover - surfaced as runtime validation error
raise RuntimeError(f"import_error: {exc}") from exc
return requests
# ── [CRITICAL] 주문 차단 목록 — 절대 수정/완화 금지 (governance/rules/06_no_direct_api_trading.yaml) ──
# "/trading/" 하위 경로는 주문(order)뿐 아니라 계좌잔고조회(inquire-balance)도 포함한다.
# 계좌 보유종목/잔고는 governance/rules/07_no_kis_account_balance_query.yaml에 의해
@@ -126,6 +132,7 @@ def _issue_or_reuse_token(creds: KisCredentials) -> str:
except (json.JSONDecodeError, KeyError, ValueError):
pass
requests = _requests()
resp = requests.post(
f"{creds.domain}/oauth2/tokenP",
json={"grant_type": "client_credentials", "appkey": creds.app_key, "appsecret": creds.app_secret},
@@ -155,6 +162,7 @@ def _send_request(creds: KisCredentials, path: str, tr_id: str, params: dict[str
"tr_id": tr_id,
"custtype": "P",
}
requests = _requests()
resp = requests.get(f"{creds.domain}{path}", headers=headers, params=params, timeout=15)
resp.raise_for_status()
return resp.json()