From 1a848faac498804f0d1a6ef3f083dd00c91f1e74 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 25 May 2026 19:31:55 +0900 Subject: [PATCH] =?UTF-8?q?fix(ai=5Ftrade):=20V1=5FTOKEN=5FPATH=20default?= =?UTF-8?q?=EB=A5=BC=20legacy/signal=5Fv1/=20=EA=B2=BD=EC=9C=A0=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(F1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 코드 리뷰 F1: V1이 legacy/signal_v1/로 이동되었으나 config.py default가 구 경로를 가리켜 .env 미설정 시 KIS REST가 V1 token file missing으로 실패. Co-Authored-By: Claude Opus 4.7 (1M context) --- ai_trade/config.py | 2 +- ai_trade/tests/test_config_token_path.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 ai_trade/tests/test_config_token_path.py diff --git a/ai_trade/config.py b/ai_trade/config.py index fbfc75a..53c793a 100644 --- a/ai_trade/config.py +++ b/ai_trade/config.py @@ -31,7 +31,7 @@ class Settings: v1_token_path: Path = field( default_factory=lambda: Path( os.getenv("V1_TOKEN_PATH", - str(Path(__file__).parent.parent / "signal_v1" / "data" / "kis_token.json")) + str(Path(__file__).parent.parent / "legacy" / "signal_v1" / "data" / "kis_token.json")) ) ) chronos_model: str = field(default_factory=lambda: os.getenv("CHRONOS_MODEL", "amazon/chronos-2")) diff --git a/ai_trade/tests/test_config_token_path.py b/ai_trade/tests/test_config_token_path.py new file mode 100644 index 0000000..065a730 --- /dev/null +++ b/ai_trade/tests/test_config_token_path.py @@ -0,0 +1,22 @@ +"""F1 — V1_TOKEN_PATH default가 legacy/signal_v1/ 경유인지 검증.""" +from pathlib import Path + +from ai_trade.config import Settings + + +def test_v1_token_default_path_uses_legacy_dir(monkeypatch): + """env에 V1_TOKEN_PATH 없으면 legacy/signal_v1/data/kis_token.json""" + monkeypatch.delenv("V1_TOKEN_PATH", raising=False) + settings = Settings() + expected_suffix = Path("legacy") / "signal_v1" / "data" / "kis_token.json" + assert str(settings.v1_token_path).endswith(str(expected_suffix)), ( + f"expected default to end with {expected_suffix}, got {settings.v1_token_path}" + ) + + +def test_v1_token_env_override_wins(monkeypatch, tmp_path): + """env로 명시한 경로가 default를 덮어씀.""" + custom = tmp_path / "custom_token.json" + monkeypatch.setenv("V1_TOKEN_PATH", str(custom)) + settings = Settings() + assert settings.v1_token_path == custom