유효하지 않은 KEY 가 설정되어 있어도, 일단 UI 페이지가 나오도록 수정.
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+12
-2
@@ -20,9 +20,17 @@ class AccountService:
|
||||
self._client = httpx.AsyncClient(timeout=10.0)
|
||||
self._rate_limiter = RateLimiter(settings.rate_limit.requests_per_second)
|
||||
|
||||
def _check_auth(self) -> bool:
|
||||
if not token_manager.is_authenticated:
|
||||
logger.debug("API 인증되지 않음 - 잔고 조회 불가")
|
||||
return False
|
||||
return True
|
||||
|
||||
async def get_balance(self) -> dict:
|
||||
if not self._check_auth():
|
||||
return {"deposits": [], "stocks": []}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
token = await token_manager.get_access_token()
|
||||
tr_id = _BALANCE_TR_IDS.get(settings.kis.server_mode, "VTTC0311R")
|
||||
headers = token_manager.get_auth_headers(tr_id)
|
||||
|
||||
@@ -71,8 +79,10 @@ class AccountService:
|
||||
return {"deposits": deposits, "stocks": stocks}
|
||||
|
||||
async def get_orderable_amount(self, stock_code: str, price: int) -> dict:
|
||||
if not self._check_auth():
|
||||
return {"orderable_amount": 0, "orderable_qty": 0}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
token = await token_manager.get_access_token()
|
||||
headers = token_manager.get_auth_headers("VTTC0830R" if settings.kis.server_mode == "vps" else "TTTC0830R")
|
||||
|
||||
params = {
|
||||
|
||||
@@ -22,9 +22,17 @@ class MarketDataService:
|
||||
self._client = httpx.AsyncClient(timeout=10.0)
|
||||
self._rate_limiter = RateLimiter(settings.rate_limit.requests_per_second)
|
||||
|
||||
def _check_auth(self) -> bool:
|
||||
if not token_manager.is_authenticated:
|
||||
logger.debug("API 인증되지 않음 - 시세 조회 불가")
|
||||
return False
|
||||
return True
|
||||
|
||||
async def get_current_price(self, stock_code: str) -> dict:
|
||||
if not self._check_auth():
|
||||
return {}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
token = await token_manager.get_access_token()
|
||||
headers = token_manager.get_auth_headers("FHKST01010100")
|
||||
params = {_FID_COND_MRKT_DIV_CODE: "J", _FID_INPUT_ISCD: stock_code}
|
||||
url = f"{get_base_url()}{_PRICE_URL}"
|
||||
@@ -54,8 +62,10 @@ class MarketDataService:
|
||||
async def get_daily_chart(
|
||||
self, stock_code: str, start_date: str, end_date: str, count: int = 30
|
||||
) -> list[dict]:
|
||||
if not self._check_auth():
|
||||
return []
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
token = await token_manager.get_access_token()
|
||||
headers = token_manager.get_auth_headers("FHKST03010200")
|
||||
params = {
|
||||
_FID_COND_MRKT_DIV_CODE: "J",
|
||||
@@ -88,8 +98,10 @@ class MarketDataService:
|
||||
return result
|
||||
|
||||
async def get_orderbook(self, stock_code: str) -> dict:
|
||||
if not self._check_auth():
|
||||
return {}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
token = await token_manager.get_access_token()
|
||||
headers = token_manager.get_auth_headers("FHKST01010200")
|
||||
params = {_FID_COND_MRKT_DIV_CODE: "J", _FID_INPUT_ISCD: stock_code}
|
||||
url = f"{get_base_url()}{_ORDERBOOK_URL}"
|
||||
|
||||
@@ -23,6 +23,12 @@ class TradingService:
|
||||
self._client = httpx.AsyncClient(timeout=10.0)
|
||||
self._rate_limiter = RateLimiter(settings.rate_limit.requests_per_second)
|
||||
|
||||
def _check_auth(self) -> bool:
|
||||
if not token_manager.is_authenticated:
|
||||
logger.debug("API 인증되지 않음 - 매매 불가")
|
||||
return False
|
||||
return True
|
||||
|
||||
def _get_tr_id(self, side: str) -> str:
|
||||
mode = settings.kis.server_mode
|
||||
return _TR_IDS.get(mode, _TR_IDS["vps"]).get(side, "VTTC0802U")
|
||||
@@ -35,6 +41,9 @@ class TradingService:
|
||||
price: int = 0,
|
||||
order_type: str = "00",
|
||||
) -> dict:
|
||||
if not self._check_auth():
|
||||
return {"rt_cd": "-1", "msg": "API 인증되지 않음", "order_no": ""}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
|
||||
tr_id = self._get_tr_id(side)
|
||||
@@ -86,6 +95,9 @@ class TradingService:
|
||||
async def modify_order(
|
||||
self, order_no: str, stock_code: str, qty: int, price: int, order_type: str = "00"
|
||||
) -> dict:
|
||||
if not self._check_auth():
|
||||
return {"rt_cd": "-1", "msg": "API 인증되지 않음"}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
|
||||
tr_id = self._get_tr_id("modify")
|
||||
@@ -123,6 +135,9 @@ class TradingService:
|
||||
return result
|
||||
|
||||
async def cancel_order(self, order_no: str, stock_code: str, qty: int) -> dict:
|
||||
if not self._check_auth():
|
||||
return {"rt_cd": "-1", "msg": "API 인증되지 않음"}
|
||||
|
||||
await self._rate_limiter.acquire()
|
||||
|
||||
tr_id = self._get_tr_id("cancel")
|
||||
|
||||
Reference in New Issue
Block a user