tooja 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. tooja/__init__.py +9 -0
  2. tooja/brokers/__init__.py +5 -0
  3. tooja/brokers/kis/__init__.py +7 -0
  4. tooja/brokers/kis/_call.py +143 -0
  5. tooja/brokers/kis/_mappers.py +955 -0
  6. tooja/brokers/kis/_rate_limit.py +16 -0
  7. tooja/brokers/kis/_ws_stream.py +416 -0
  8. tooja/brokers/kis/account.py +139 -0
  9. tooja/brokers/kis/analytics.py +175 -0
  10. tooja/brokers/kis/auth.py +215 -0
  11. tooja/brokers/kis/broker.py +151 -0
  12. tooja/brokers/kis/credentials.py +27 -0
  13. tooja/brokers/kis/info.py +179 -0
  14. tooja/brokers/kis/mapping.py +64 -0
  15. tooja/brokers/kis/market.py +248 -0
  16. tooja/brokers/kis/orders.py +344 -0
  17. tooja/brokers/kis/rankings.py +265 -0
  18. tooja/brokers/kis/raw/__init__.py +0 -0
  19. tooja/brokers/kis/raw/base.py +269 -0
  20. tooja/brokers/kis/raw/domestic_bond_quotations/__init__.py +0 -0
  21. tooja/brokers/kis/raw/domestic_bond_quotations/avg_unit.py +97 -0
  22. tooja/brokers/kis/raw/domestic_bond_quotations/inquire_asking_price.py +67 -0
  23. tooja/brokers/kis/raw/domestic_bond_quotations/inquire_ccnl.py +40 -0
  24. tooja/brokers/kis/raw/domestic_bond_quotations/inquire_daily_itemchartprice.py +39 -0
  25. tooja/brokers/kis/raw/domestic_bond_quotations/inquire_daily_price.py +42 -0
  26. tooja/brokers/kis/raw/domestic_bond_quotations/inquire_price.py +50 -0
  27. tooja/brokers/kis/raw/domestic_bond_quotations/issue_info.py +119 -0
  28. tooja/brokers/kis/raw/domestic_bond_quotations/search_bond_info.py +114 -0
  29. tooja/brokers/kis/raw/domestic_bond_trading/__init__.py +0 -0
  30. tooja/brokers/kis/raw/domestic_bond_trading/buy.py +45 -0
  31. tooja/brokers/kis/raw/domestic_bond_trading/inquire_balance.py +50 -0
  32. tooja/brokers/kis/raw/domestic_bond_trading/inquire_daily_ccld.py +71 -0
  33. tooja/brokers/kis/raw/domestic_bond_trading/inquire_psbl_order.py +43 -0
  34. tooja/brokers/kis/raw/domestic_bond_trading/inquire_psbl_rvsecncl.py +52 -0
  35. tooja/brokers/kis/raw/domestic_bond_trading/order_rvsecncl.py +45 -0
  36. tooja/brokers/kis/raw/domestic_bond_trading/sell.py +49 -0
  37. tooja/brokers/kis/raw/domestic_bond_ws/__init__.py +0 -0
  38. tooja/brokers/kis/raw/domestic_bond_ws/h0bicnt0.py +38 -0
  39. tooja/brokers/kis/raw/domestic_bond_ws/h0bjasp0.py +52 -0
  40. tooja/brokers/kis/raw/domestic_bond_ws/h0bjcnt0.py +37 -0
  41. tooja/brokers/kis/raw/domestic_futureoption_quotations/__init__.py +0 -0
  42. tooja/brokers/kis/raw/domestic_futureoption_quotations/display_board_callput.py +124 -0
  43. tooja/brokers/kis/raw/domestic_futureoption_quotations/display_board_futures.py +54 -0
  44. tooja/brokers/kis/raw/domestic_futureoption_quotations/display_board_option_list.py +36 -0
  45. tooja/brokers/kis/raw/domestic_futureoption_quotations/display_board_top.py +53 -0
  46. tooja/brokers/kis/raw/domestic_futureoption_quotations/exp_price_trend.py +49 -0
  47. tooja/brokers/kis/raw/domestic_futureoption_quotations/inquire_asking_price.py +81 -0
  48. tooja/brokers/kis/raw/domestic_futureoption_quotations/inquire_daily_fuopchartprice.py +71 -0
  49. tooja/brokers/kis/raw/domestic_futureoption_quotations/inquire_price.py +89 -0
  50. tooja/brokers/kis/raw/domestic_futureoption_quotations/inquire_time_fuopchartprice.py +82 -0
  51. tooja/brokers/kis/raw/domestic_futureoption_trading/__init__.py +0 -0
  52. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_balance.py +92 -0
  53. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_balance_settlement_pl.py +65 -0
  54. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_balance_valuation_pl.py +87 -0
  55. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_ccnl.py +83 -0
  56. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_ccnl_bstime.py +57 -0
  57. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_daily_amount_fee.py +76 -0
  58. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_deposit.py +63 -0
  59. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_ngt_balance.py +94 -0
  60. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_ngt_ccnl.py +83 -0
  61. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_psbl_ngt_order.py +44 -0
  62. tooja/brokers/kis/raw/domestic_futureoption_trading/inquire_psbl_order.py +42 -0
  63. tooja/brokers/kis/raw/domestic_futureoption_trading/margin_rate.py +41 -0
  64. tooja/brokers/kis/raw/domestic_futureoption_trading/ngt_margin_detail.py +139 -0
  65. tooja/brokers/kis/raw/domestic_futureoption_trading/order.py +50 -0
  66. tooja/brokers/kis/raw/domestic_futureoption_trading/order_rvsecncl.py +51 -0
  67. tooja/brokers/kis/raw/domestic_futureoption_ws/__init__.py +0 -0
  68. tooja/brokers/kis/raw/domestic_futureoption_ws/h0cfasp0.py +55 -0
  69. tooja/brokers/kis/raw/domestic_futureoption_ws/h0cfcnt0.py +67 -0
  70. tooja/brokers/kis/raw/domestic_futureoption_ws/h0euanc0.py +26 -0
  71. tooja/brokers/kis/raw/domestic_futureoption_ws/h0euasp0.py +56 -0
  72. tooja/brokers/kis/raw/domestic_futureoption_ws/h0eucni0.py +37 -0
  73. tooja/brokers/kis/raw/domestic_futureoption_ws/h0eucnt0.py +74 -0
  74. tooja/brokers/kis/raw/domestic_futureoption_ws/h0ifasp0.py +55 -0
  75. tooja/brokers/kis/raw/domestic_futureoption_ws/h0ifcni0.py +39 -0
  76. tooja/brokers/kis/raw/domestic_futureoption_ws/h0ifcnt0.py +67 -0
  77. tooja/brokers/kis/raw/domestic_futureoption_ws/h0ioasp0.py +55 -0
  78. tooja/brokers/kis/raw/domestic_futureoption_ws/h0iocnt0.py +75 -0
  79. tooja/brokers/kis/raw/domestic_futureoption_ws/h0mfasp0.py +56 -0
  80. tooja/brokers/kis/raw/domestic_futureoption_ws/h0mfcni0.py +37 -0
  81. tooja/brokers/kis/raw/domestic_futureoption_ws/h0mfcnt0.py +67 -0
  82. tooja/brokers/kis/raw/domestic_futureoption_ws/h0zfanc0.py +26 -0
  83. tooja/brokers/kis/raw/domestic_futureoption_ws/h0zfasp0.py +85 -0
  84. tooja/brokers/kis/raw/domestic_futureoption_ws/h0zfcnt0.py +66 -0
  85. tooja/brokers/kis/raw/domestic_futureoption_ws/h0zoanc0.py +25 -0
  86. tooja/brokers/kis/raw/domestic_futureoption_ws/h0zoasp0.py +85 -0
  87. tooja/brokers/kis/raw/domestic_futureoption_ws/h0zocnt0.py +70 -0
  88. tooja/brokers/kis/raw/domestic_stock_elw_quotations/__init__.py +0 -0
  89. tooja/brokers/kis/raw/domestic_stock_elw_quotations/compare_stocks.py +35 -0
  90. tooja/brokers/kis/raw/domestic_stock_elw_quotations/cond_search.py +131 -0
  91. tooja/brokers/kis/raw/domestic_stock_elw_quotations/expiration_stocks.py +62 -0
  92. tooja/brokers/kis/raw/domestic_stock_elw_quotations/indicator.py +55 -0
  93. tooja/brokers/kis/raw/domestic_stock_elw_quotations/indicator_trend_ccnl.py +45 -0
  94. tooja/brokers/kis/raw/domestic_stock_elw_quotations/indicator_trend_daily.py +48 -0
  95. tooja/brokers/kis/raw/domestic_stock_elw_quotations/indicator_trend_minute.py +48 -0
  96. tooja/brokers/kis/raw/domestic_stock_elw_quotations/inquire_elw_price.py +71 -0
  97. tooja/brokers/kis/raw/domestic_stock_elw_quotations/lp_trade_trend.py +67 -0
  98. tooja/brokers/kis/raw/domestic_stock_elw_quotations/newly_listed.py +47 -0
  99. tooja/brokers/kis/raw/domestic_stock_elw_quotations/quick_change.py +59 -0
  100. tooja/brokers/kis/raw/domestic_stock_elw_quotations/sensitivity.py +59 -0
  101. tooja/brokers/kis/raw/domestic_stock_elw_quotations/sensitivity_trend_ccnl.py +44 -0
  102. tooja/brokers/kis/raw/domestic_stock_elw_quotations/sensitivity_trend_daily.py +44 -0
  103. tooja/brokers/kis/raw/domestic_stock_elw_quotations/udrl_asset_list.py +40 -0
  104. tooja/brokers/kis/raw/domestic_stock_elw_quotations/udrl_asset_price.py +76 -0
  105. tooja/brokers/kis/raw/domestic_stock_elw_quotations/updown_rate.py +80 -0
  106. tooja/brokers/kis/raw/domestic_stock_elw_quotations/volatility_trend_ccnl.py +42 -0
  107. tooja/brokers/kis/raw/domestic_stock_elw_quotations/volatility_trend_daily.py +48 -0
  108. tooja/brokers/kis/raw/domestic_stock_elw_quotations/volatility_trend_minute.py +43 -0
  109. tooja/brokers/kis/raw/domestic_stock_elw_quotations/volatility_trend_tick.py +37 -0
  110. tooja/brokers/kis/raw/domestic_stock_elw_quotations/volume_rank.py +88 -0
  111. tooja/brokers/kis/raw/domestic_stock_industry/__init__.py +0 -0
  112. tooja/brokers/kis/raw/domestic_stock_industry/chk_holiday.py +40 -0
  113. tooja/brokers/kis/raw/domestic_stock_industry/comp_interest.py +54 -0
  114. tooja/brokers/kis/raw/domestic_stock_industry/exp_index_trend.py +42 -0
  115. tooja/brokers/kis/raw/domestic_stock_industry/exp_total_index.py +60 -0
  116. tooja/brokers/kis/raw/domestic_stock_industry/inquire_daily_indexchartprice.py +64 -0
  117. tooja/brokers/kis/raw/domestic_stock_industry/inquire_index_category_price.py +71 -0
  118. tooja/brokers/kis/raw/domestic_stock_industry/inquire_index_daily_price.py +73 -0
  119. tooja/brokers/kis/raw/domestic_stock_industry/inquire_index_price.py +69 -0
  120. tooja/brokers/kis/raw/domestic_stock_industry/inquire_index_tickprice.py +41 -0
  121. tooja/brokers/kis/raw/domestic_stock_industry/inquire_index_timeprice.py +42 -0
  122. tooja/brokers/kis/raw/domestic_stock_industry/inquire_time_indexchartprice.py +65 -0
  123. tooja/brokers/kis/raw/domestic_stock_industry/inquire_vi_status.py +52 -0
  124. tooja/brokers/kis/raw/domestic_stock_industry/market_time.py +41 -0
  125. tooja/brokers/kis/raw/domestic_stock_industry/news_title.py +51 -0
  126. tooja/brokers/kis/raw/domestic_stock_info/__init__.py +0 -0
  127. tooja/brokers/kis/raw/domestic_stock_info/balance_sheet.py +45 -0
  128. tooja/brokers/kis/raw/domestic_stock_info/bonus_issue.py +46 -0
  129. tooja/brokers/kis/raw/domestic_stock_info/cap_dcrs.py +44 -0
  130. tooja/brokers/kis/raw/domestic_stock_info/credit_by_company.py +39 -0
  131. tooja/brokers/kis/raw/domestic_stock_info/dividend.py +50 -0
  132. tooja/brokers/kis/raw/domestic_stock_info/estimate_perform.py +66 -0
  133. tooja/brokers/kis/raw/domestic_stock_info/financial_ratio.py +44 -0
  134. tooja/brokers/kis/raw/domestic_stock_info/forfeit.py +44 -0
  135. tooja/brokers/kis/raw/domestic_stock_info/growth_ratio.py +39 -0
  136. tooja/brokers/kis/raw/domestic_stock_info/income_statement.py +47 -0
  137. tooja/brokers/kis/raw/domestic_stock_info/invest_opbysec.py +53 -0
  138. tooja/brokers/kis/raw/domestic_stock_info/invest_opinion.py +48 -0
  139. tooja/brokers/kis/raw/domestic_stock_info/lendable_by_company.py +58 -0
  140. tooja/brokers/kis/raw/domestic_stock_info/list_info.py +43 -0
  141. tooja/brokers/kis/raw/domestic_stock_info/mand_deposit.py +41 -0
  142. tooja/brokers/kis/raw/domestic_stock_info/merger_split.py +49 -0
  143. tooja/brokers/kis/raw/domestic_stock_info/other_major_ratios.py +39 -0
  144. tooja/brokers/kis/raw/domestic_stock_info/paidin_capin.py +49 -0
  145. tooja/brokers/kis/raw/domestic_stock_info/profit_ratio.py +39 -0
  146. tooja/brokers/kis/raw/domestic_stock_info/pub_offer.py +48 -0
  147. tooja/brokers/kis/raw/domestic_stock_info/purreq.py +44 -0
  148. tooja/brokers/kis/raw/domestic_stock_info/rev_split.py +43 -0
  149. tooja/brokers/kis/raw/domestic_stock_info/search_info.py +51 -0
  150. tooja/brokers/kis/raw/domestic_stock_info/search_stock_info.py +100 -0
  151. tooja/brokers/kis/raw/domestic_stock_info/sharehld_meet.py +42 -0
  152. tooja/brokers/kis/raw/domestic_stock_info/stability_ratio.py +39 -0
  153. tooja/brokers/kis/raw/domestic_stock_quotations/__init__.py +0 -0
  154. tooja/brokers/kis/raw/domestic_stock_quotations/exp_closing_price.py +45 -0
  155. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_asking_price.py +132 -0
  156. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_asking_price_exp_ccn.py +122 -0
  157. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_ccnl.py +40 -0
  158. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_component_stock_price.py +70 -0
  159. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_daily_itemchartprice.py +85 -0
  160. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_daily_overtimeprice.py +66 -0
  161. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_daily_price.py +49 -0
  162. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_investor.py +55 -0
  163. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_member.py +100 -0
  164. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_overtime_asking_price.py +107 -0
  165. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_overtime_price.py +68 -0
  166. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_price.py +115 -0
  167. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_price_2.py +87 -0
  168. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_price_fhpst02400000.py +92 -0
  169. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_time_dailychartprice.py +58 -0
  170. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_time_itemchartprice.py +57 -0
  171. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_time_itemconclusion.py +56 -0
  172. tooja/brokers/kis/raw/domestic_stock_quotations/inquire_time_overtimeconclusion.py +66 -0
  173. tooja/brokers/kis/raw/domestic_stock_quotations/nav_comparison_daily_trend.py +48 -0
  174. tooja/brokers/kis/raw/domestic_stock_quotations/nav_comparison_time_trend.py +47 -0
  175. tooja/brokers/kis/raw/domestic_stock_quotations/nav_comparison_trend.py +58 -0
  176. tooja/brokers/kis/raw/domestic_stock_quote_analysis/__init__.py +0 -0
  177. tooja/brokers/kis/raw/domestic_stock_quote_analysis/capture_uplowprice.py +58 -0
  178. tooja/brokers/kis/raw/domestic_stock_quote_analysis/comp_program_trade_daily.py +135 -0
  179. tooja/brokers/kis/raw/domestic_stock_quote_analysis/comp_program_trade_today.py +55 -0
  180. tooja/brokers/kis/raw/domestic_stock_quote_analysis/daily_credit_balance.py +61 -0
  181. tooja/brokers/kis/raw/domestic_stock_quote_analysis/daily_loan_trans.py +47 -0
  182. tooja/brokers/kis/raw/domestic_stock_quote_analysis/daily_short_sale.py +65 -0
  183. tooja/brokers/kis/raw/domestic_stock_quote_analysis/exp_price_trend.py +53 -0
  184. tooja/brokers/kis/raw/domestic_stock_quote_analysis/foreign_institution_total.py +63 -0
  185. tooja/brokers/kis/raw/domestic_stock_quote_analysis/frgnmem_pchs_trend.py +44 -0
  186. tooja/brokers/kis/raw/domestic_stock_quote_analysis/frgnmem_trade_estimate.py +46 -0
  187. tooja/brokers/kis/raw/domestic_stock_quote_analysis/frgnmem_trade_trend.py +54 -0
  188. tooja/brokers/kis/raw/domestic_stock_quote_analysis/inquire_daily_trade_volume.py +46 -0
  189. tooja/brokers/kis/raw/domestic_stock_quote_analysis/inquire_investor_daily_by_market.py +76 -0
  190. tooja/brokers/kis/raw/domestic_stock_quote_analysis/inquire_investor_time_by_market.py +105 -0
  191. tooja/brokers/kis/raw/domestic_stock_quote_analysis/inquire_member_daily.py +46 -0
  192. tooja/brokers/kis/raw/domestic_stock_quote_analysis/intstock_grouplist.py +40 -0
  193. tooja/brokers/kis/raw/domestic_stock_quote_analysis/intstock_multprice.py +120 -0
  194. tooja/brokers/kis/raw/domestic_stock_quote_analysis/intstock_stocklist_by_group.py +56 -0
  195. tooja/brokers/kis/raw/domestic_stock_quote_analysis/investor_program_trade_today.py +53 -0
  196. tooja/brokers/kis/raw/domestic_stock_quote_analysis/investor_trade_by_stock_daily.py +149 -0
  197. tooja/brokers/kis/raw/domestic_stock_quote_analysis/investor_trend_estimate.py +36 -0
  198. tooja/brokers/kis/raw/domestic_stock_quote_analysis/mktfunds.py +49 -0
  199. tooja/brokers/kis/raw/domestic_stock_quote_analysis/overtime_exp_trans_fluct.py +52 -0
  200. tooja/brokers/kis/raw/domestic_stock_quote_analysis/pbar_tratio.py +55 -0
  201. tooja/brokers/kis/raw/domestic_stock_quote_analysis/program_trade_by_stock.py +47 -0
  202. tooja/brokers/kis/raw/domestic_stock_quote_analysis/program_trade_by_stock_daily.py +49 -0
  203. tooja/brokers/kis/raw/domestic_stock_quote_analysis/psearch_result.py +57 -0
  204. tooja/brokers/kis/raw/domestic_stock_quote_analysis/psearch_title.py +36 -0
  205. tooja/brokers/kis/raw/domestic_stock_quote_analysis/tradprt_byamt.py +45 -0
  206. tooja/brokers/kis/raw/domestic_stock_rank_analysis/__init__.py +0 -0
  207. tooja/brokers/kis/raw/domestic_stock_rank_analysis/after_hour_balance.py +52 -0
  208. tooja/brokers/kis/raw/domestic_stock_rank_analysis/bulk_trans_num.py +54 -0
  209. tooja/brokers/kis/raw/domestic_stock_rank_analysis/credit_balance.py +60 -0
  210. tooja/brokers/kis/raw/domestic_stock_rank_analysis/disparity.py +55 -0
  211. tooja/brokers/kis/raw/domestic_stock_rank_analysis/dividend_rate.py +46 -0
  212. tooja/brokers/kis/raw/domestic_stock_rank_analysis/exp_trans_updown.py +56 -0
  213. tooja/brokers/kis/raw/domestic_stock_rank_analysis/finance_ratio.py +71 -0
  214. tooja/brokers/kis/raw/domestic_stock_rank_analysis/fluctuation.py +69 -0
  215. tooja/brokers/kis/raw/domestic_stock_rank_analysis/hts_top_view.py +34 -0
  216. tooja/brokers/kis/raw/domestic_stock_rank_analysis/market_cap.py +51 -0
  217. tooja/brokers/kis/raw/domestic_stock_rank_analysis/market_value.py +64 -0
  218. tooja/brokers/kis/raw/domestic_stock_rank_analysis/near_new_highlow.py +59 -0
  219. tooja/brokers/kis/raw/domestic_stock_rank_analysis/overtime_fluctuation.py +73 -0
  220. tooja/brokers/kis/raw/domestic_stock_rank_analysis/overtime_volume.py +63 -0
  221. tooja/brokers/kis/raw/domestic_stock_rank_analysis/prefer_disparate_ratio.py +57 -0
  222. tooja/brokers/kis/raw/domestic_stock_rank_analysis/profit_asset_index.py +62 -0
  223. tooja/brokers/kis/raw/domestic_stock_rank_analysis/quote_balance.py +54 -0
  224. tooja/brokers/kis/raw/domestic_stock_rank_analysis/short_sale.py +56 -0
  225. tooja/brokers/kis/raw/domestic_stock_rank_analysis/top_interest_stock.py +55 -0
  226. tooja/brokers/kis/raw/domestic_stock_rank_analysis/traded_by_company.py +55 -0
  227. tooja/brokers/kis/raw/domestic_stock_rank_analysis/volume_power.py +51 -0
  228. tooja/brokers/kis/raw/domestic_stock_rank_analysis/volume_rank.py +60 -0
  229. tooja/brokers/kis/raw/domestic_stock_trading/__init__.py +0 -0
  230. tooja/brokers/kis/raw/domestic_stock_trading/inquire_account_balance.py +71 -0
  231. tooja/brokers/kis/raw/domestic_stock_trading/inquire_balance.py +100 -0
  232. tooja/brokers/kis/raw/domestic_stock_trading/inquire_balance_rlz_pl.py +99 -0
  233. tooja/brokers/kis/raw/domestic_stock_trading/inquire_balance_tttc2208r.py +64 -0
  234. tooja/brokers/kis/raw/domestic_stock_trading/inquire_credit_psamount.py +51 -0
  235. tooja/brokers/kis/raw/domestic_stock_trading/inquire_daily_ccld.py +95 -0
  236. tooja/brokers/kis/raw/domestic_stock_trading/inquire_daily_ccld_tttc2201r.py +59 -0
  237. tooja/brokers/kis/raw/domestic_stock_trading/inquire_deposit.py +38 -0
  238. tooja/brokers/kis/raw/domestic_stock_trading/inquire_period_profit.py +73 -0
  239. tooja/brokers/kis/raw/domestic_stock_trading/inquire_period_trade_profit.py +82 -0
  240. tooja/brokers/kis/raw/domestic_stock_trading/inquire_present_balance.py +61 -0
  241. tooja/brokers/kis/raw/domestic_stock_trading/inquire_psbl_order.py +51 -0
  242. tooja/brokers/kis/raw/domestic_stock_trading/inquire_psbl_order_tttc0503r.py +43 -0
  243. tooja/brokers/kis/raw/domestic_stock_trading/inquire_psbl_rvsecncl.py +58 -0
  244. tooja/brokers/kis/raw/domestic_stock_trading/inquire_psbl_sell.py +47 -0
  245. tooja/brokers/kis/raw/domestic_stock_trading/intgr_margin.py +140 -0
  246. tooja/brokers/kis/raw/domestic_stock_trading/order_cash.py +56 -0
  247. tooja/brokers/kis/raw/domestic_stock_trading/order_credit.py +58 -0
  248. tooja/brokers/kis/raw/domestic_stock_trading/order_resv.py +44 -0
  249. tooja/brokers/kis/raw/domestic_stock_trading/order_resv_ccnl.py +66 -0
  250. tooja/brokers/kis/raw/domestic_stock_trading/order_resv_rvsecncl.py +47 -0
  251. tooja/brokers/kis/raw/domestic_stock_trading/order_rvsecncl.py +65 -0
  252. tooja/brokers/kis/raw/domestic_stock_trading/period_rights.py +72 -0
  253. tooja/brokers/kis/raw/domestic_stock_ws/__init__.py +0 -0
  254. tooja/brokers/kis/raw/domestic_stock_ws/h0ewanc0.py +77 -0
  255. tooja/brokers/kis/raw/domestic_stock_ws/h0ewasp0.py +91 -0
  256. tooja/brokers/kis/raw/domestic_stock_ws/h0ewcnt0.py +81 -0
  257. tooja/brokers/kis/raw/domestic_stock_ws/h0nxanc0.py +64 -0
  258. tooja/brokers/kis/raw/domestic_stock_ws/h0nxasp0.py +83 -0
  259. tooja/brokers/kis/raw/domestic_stock_ws/h0nxcnt0.py +64 -0
  260. tooja/brokers/kis/raw/domestic_stock_ws/h0nxmbc0.py +96 -0
  261. tooja/brokers/kis/raw/domestic_stock_ws/h0nxmko0.py +29 -0
  262. tooja/brokers/kis/raw/domestic_stock_ws/h0nxpgm0.py +29 -0
  263. tooja/brokers/kis/raw/domestic_stock_ws/h0stanc0.py +63 -0
  264. tooja/brokers/kis/raw/domestic_stock_ws/h0stasp0.py +77 -0
  265. tooja/brokers/kis/raw/domestic_stock_ws/h0stcni0.py +44 -0
  266. tooja/brokers/kis/raw/domestic_stock_ws/h0stcnt0.py +64 -0
  267. tooja/brokers/kis/raw/domestic_stock_ws/h0stmbc0.py +95 -0
  268. tooja/brokers/kis/raw/domestic_stock_ws/h0stmko0.py +28 -0
  269. tooja/brokers/kis/raw/domestic_stock_ws/h0stnav0.py +26 -0
  270. tooja/brokers/kis/raw/domestic_stock_ws/h0stoaa0.py +72 -0
  271. tooja/brokers/kis/raw/domestic_stock_ws/h0stoac0.py +61 -0
  272. tooja/brokers/kis/raw/domestic_stock_ws/h0stoup0.py +61 -0
  273. tooja/brokers/kis/raw/domestic_stock_ws/h0stpgm0.py +28 -0
  274. tooja/brokers/kis/raw/domestic_stock_ws/h0unanc0.py +64 -0
  275. tooja/brokers/kis/raw/domestic_stock_ws/h0unasp0.py +83 -0
  276. tooja/brokers/kis/raw/domestic_stock_ws/h0uncnt0.py +64 -0
  277. tooja/brokers/kis/raw/domestic_stock_ws/h0unmbc0.py +96 -0
  278. tooja/brokers/kis/raw/domestic_stock_ws/h0unmko0.py +28 -0
  279. tooja/brokers/kis/raw/domestic_stock_ws/h0unpgm0.py +29 -0
  280. tooja/brokers/kis/raw/domestic_stock_ws/h0upanc0.py +47 -0
  281. tooja/brokers/kis/raw/domestic_stock_ws/h0upcnt0.py +47 -0
  282. tooja/brokers/kis/raw/domestic_stock_ws/h0uppgm0.py +105 -0
  283. tooja/brokers/kis/raw/oauth/__init__.py +0 -0
  284. tooja/brokers/kis/raw/oauth/approval.py +29 -0
  285. tooja/brokers/kis/raw/oauth/revokep.py +30 -0
  286. tooja/brokers/kis/raw/oauth/tokenp.py +32 -0
  287. tooja/brokers/kis/raw/overseas_futureoption_quotations/__init__.py +0 -0
  288. tooja/brokers/kis/raw/overseas_futureoption_quotations/daily_ccnl.py +58 -0
  289. tooja/brokers/kis/raw/overseas_futureoption_quotations/inquire_asking_price.py +53 -0
  290. tooja/brokers/kis/raw/overseas_futureoption_quotations/inquire_price.py +64 -0
  291. tooja/brokers/kis/raw/overseas_futureoption_quotations/inquire_time_futurechartprice.py +58 -0
  292. tooja/brokers/kis/raw/overseas_futureoption_quotations/inquire_time_optchartprice.py +58 -0
  293. tooja/brokers/kis/raw/overseas_futureoption_quotations/investor_unpd_trend.py +58 -0
  294. tooja/brokers/kis/raw/overseas_futureoption_quotations/market_time.py +52 -0
  295. tooja/brokers/kis/raw/overseas_futureoption_quotations/monthly_ccnl.py +58 -0
  296. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_asking_price.py +53 -0
  297. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_daily_ccnl.py +58 -0
  298. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_detail.py +53 -0
  299. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_monthly_ccnl.py +58 -0
  300. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_price.py +63 -0
  301. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_tick_ccnl.py +58 -0
  302. tooja/brokers/kis/raw/overseas_futureoption_quotations/opt_weekly_ccnl.py +58 -0
  303. tooja/brokers/kis/raw/overseas_futureoption_quotations/search_contract_detail.py +57 -0
  304. tooja/brokers/kis/raw/overseas_futureoption_quotations/search_opt_detail.py +56 -0
  305. tooja/brokers/kis/raw/overseas_futureoption_quotations/stock_detail.py +55 -0
  306. tooja/brokers/kis/raw/overseas_futureoption_quotations/tick_ccnl.py +58 -0
  307. tooja/brokers/kis/raw/overseas_futureoption_quotations/weekly_ccnl.py +58 -0
  308. tooja/brokers/kis/raw/overseas_futureoption_trading/__init__.py +0 -0
  309. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_ccld.py +69 -0
  310. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_daily_ccld.py +67 -0
  311. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_daily_order.py +68 -0
  312. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_deposit.py +60 -0
  313. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_period_ccld.py +77 -0
  314. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_period_trans.py +57 -0
  315. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_psamount.py +47 -0
  316. tooja/brokers/kis/raw/overseas_futureoption_trading/inquire_unpd.py +51 -0
  317. tooja/brokers/kis/raw/overseas_futureoption_trading/margin_detail.py +84 -0
  318. tooja/brokers/kis/raw/overseas_futureoption_trading/order.py +49 -0
  319. tooja/brokers/kis/raw/overseas_futureoption_trading/order_rvsecncl.py +43 -0
  320. tooja/brokers/kis/raw/overseas_futureoption_ws/__init__.py +0 -0
  321. tooja/brokers/kis/raw/overseas_futureoption_ws/hdfff010.py +52 -0
  322. tooja/brokers/kis/raw/overseas_futureoption_ws/hdfff020.py +43 -0
  323. tooja/brokers/kis/raw/overseas_futureoption_ws/hdfff1c0.py +50 -0
  324. tooja/brokers/kis/raw/overseas_futureoption_ws/hdfff2c0.py +50 -0
  325. tooja/brokers/kis/raw/overseas_stock_quotations/__init__.py +0 -0
  326. tooja/brokers/kis/raw/overseas_stock_quotations/countries_holiday.py +42 -0
  327. tooja/brokers/kis/raw/overseas_stock_quotations/dailyprice.py +60 -0
  328. tooja/brokers/kis/raw/overseas_stock_quotations/industry_price.py +41 -0
  329. tooja/brokers/kis/raw/overseas_stock_quotations/industry_theme.py +62 -0
  330. tooja/brokers/kis/raw/overseas_stock_quotations/inquire_asking_price.py +130 -0
  331. tooja/brokers/kis/raw/overseas_stock_quotations/inquire_ccnl.py +55 -0
  332. tooja/brokers/kis/raw/overseas_stock_quotations/inquire_daily_chartprice.py +60 -0
  333. tooja/brokers/kis/raw/overseas_stock_quotations/inquire_search.py +88 -0
  334. tooja/brokers/kis/raw/overseas_stock_quotations/inquire_time_indexchartprice.py +58 -0
  335. tooja/brokers/kis/raw/overseas_stock_quotations/inquire_time_itemchartprice.py +65 -0
  336. tooja/brokers/kis/raw/overseas_stock_quotations/multprice.py +89 -0
  337. tooja/brokers/kis/raw/overseas_stock_quotations/price.py +45 -0
  338. tooja/brokers/kis/raw/overseas_stock_quotations/price_detail.py +75 -0
  339. tooja/brokers/kis/raw/overseas_stock_quotations/search_info.py +89 -0
  340. tooja/brokers/kis/raw/overseas_stock_quote_analysis/__init__.py +0 -0
  341. tooja/brokers/kis/raw/overseas_stock_quote_analysis/brknews_title.py +67 -0
  342. tooja/brokers/kis/raw/overseas_stock_quote_analysis/colable_by_company.py +61 -0
  343. tooja/brokers/kis/raw/overseas_stock_quote_analysis/market_cap.py +60 -0
  344. tooja/brokers/kis/raw/overseas_stock_quote_analysis/new_highlow.py +62 -0
  345. tooja/brokers/kis/raw/overseas_stock_quote_analysis/news_title.py +51 -0
  346. tooja/brokers/kis/raw/overseas_stock_quote_analysis/period_rights.py +59 -0
  347. tooja/brokers/kis/raw/overseas_stock_quote_analysis/price_fluct.py +61 -0
  348. tooja/brokers/kis/raw/overseas_stock_quote_analysis/rights_by_ice.py +47 -0
  349. tooja/brokers/kis/raw/overseas_stock_quote_analysis/trade_growth.py +62 -0
  350. tooja/brokers/kis/raw/overseas_stock_quote_analysis/trade_pbmn.py +64 -0
  351. tooja/brokers/kis/raw/overseas_stock_quote_analysis/trade_turnover.py +63 -0
  352. tooja/brokers/kis/raw/overseas_stock_quote_analysis/trade_vol.py +64 -0
  353. tooja/brokers/kis/raw/overseas_stock_quote_analysis/updown_rate.py +64 -0
  354. tooja/brokers/kis/raw/overseas_stock_quote_analysis/volume_power.py +59 -0
  355. tooja/brokers/kis/raw/overseas_stock_quote_analysis/volume_surge.py +60 -0
  356. tooja/brokers/kis/raw/overseas_stock_trading/__init__.py +0 -0
  357. tooja/brokers/kis/raw/overseas_stock_trading/algo_ordno.py +47 -0
  358. tooja/brokers/kis/raw/overseas_stock_trading/daytime_order.py +44 -0
  359. tooja/brokers/kis/raw/overseas_stock_trading/daytime_order_rvsecncl.py +45 -0
  360. tooja/brokers/kis/raw/overseas_stock_trading/foreign_margin.py +44 -0
  361. tooja/brokers/kis/raw/overseas_stock_trading/inquire_algo_ccnl.py +64 -0
  362. tooja/brokers/kis/raw/overseas_stock_trading/inquire_balance.py +72 -0
  363. tooja/brokers/kis/raw/overseas_stock_trading/inquire_ccnl.py +80 -0
  364. tooja/brokers/kis/raw/overseas_stock_trading/inquire_nccs.py +68 -0
  365. tooja/brokers/kis/raw/overseas_stock_trading/inquire_paymt_stdr_balance.py +84 -0
  366. tooja/brokers/kis/raw/overseas_stock_trading/inquire_period_profit.py +69 -0
  367. tooja/brokers/kis/raw/overseas_stock_trading/inquire_period_trans.py +75 -0
  368. tooja/brokers/kis/raw/overseas_stock_trading/inquire_present_balance.py +110 -0
  369. tooja/brokers/kis/raw/overseas_stock_trading/inquire_psamount.py +48 -0
  370. tooja/brokers/kis/raw/overseas_stock_trading/order.py +49 -0
  371. tooja/brokers/kis/raw/overseas_stock_trading/order_resv.py +49 -0
  372. tooja/brokers/kis/raw/overseas_stock_trading/order_resv_ccnl.py +37 -0
  373. tooja/brokers/kis/raw/overseas_stock_trading/order_resv_list.py +66 -0
  374. tooja/brokers/kis/raw/overseas_stock_trading/order_rvsecncl.py +45 -0
  375. tooja/brokers/kis/raw/overseas_stock_ws/__init__.py +0 -0
  376. tooja/brokers/kis/raw/overseas_stock_ws/h0gscni0.py +43 -0
  377. tooja/brokers/kis/raw/overseas_stock_ws/hdfsasp0.py +94 -0
  378. tooja/brokers/kis/raw/overseas_stock_ws/hdfsasp1.py +35 -0
  379. tooja/brokers/kis/raw/overseas_stock_ws/hdfscnt0.py +44 -0
  380. tooja/brokers/kis/raw/ws_base.py +129 -0
  381. tooja/brokers/kis/raw_namespace.py +60 -0
  382. tooja/brokers/kis/stream.py +126 -0
  383. tooja/brokers/toss/__init__.py +3 -0
  384. tooja/brokers/toss/_call.py +142 -0
  385. tooja/brokers/toss/_mappers.py +308 -0
  386. tooja/brokers/toss/_rate_limit.py +20 -0
  387. tooja/brokers/toss/account.py +87 -0
  388. tooja/brokers/toss/analytics.py +22 -0
  389. tooja/brokers/toss/auth.py +89 -0
  390. tooja/brokers/toss/broker.py +123 -0
  391. tooja/brokers/toss/credentials.py +14 -0
  392. tooja/brokers/toss/info.py +114 -0
  393. tooja/brokers/toss/mapping.py +60 -0
  394. tooja/brokers/toss/market.py +167 -0
  395. tooja/brokers/toss/orders.py +191 -0
  396. tooja/brokers/toss/rankings.py +21 -0
  397. tooja/brokers/toss/raw/__init__.py +0 -0
  398. tooja/brokers/toss/raw/account/__init__.py +0 -0
  399. tooja/brokers/toss/raw/account/get_accounts.py +21 -0
  400. tooja/brokers/toss/raw/asset/__init__.py +0 -0
  401. tooja/brokers/toss/raw/asset/get_holdings.py +17 -0
  402. tooja/brokers/toss/raw/auth/__init__.py +0 -0
  403. tooja/brokers/toss/raw/auth/issue_o_auth2_token.py +16 -0
  404. tooja/brokers/toss/raw/base.py +167 -0
  405. tooja/brokers/toss/raw/market_data/__init__.py +0 -0
  406. tooja/brokers/toss/raw/market_data/get_candles.py +16 -0
  407. tooja/brokers/toss/raw/market_data/get_orderbook.py +16 -0
  408. tooja/brokers/toss/raw/market_data/get_price_limit.py +16 -0
  409. tooja/brokers/toss/raw/market_data/get_prices.py +22 -0
  410. tooja/brokers/toss/raw/market_data/get_trades.py +22 -0
  411. tooja/brokers/toss/raw/market_info/__init__.py +0 -0
  412. tooja/brokers/toss/raw/market_info/get_exchange_rate.py +16 -0
  413. tooja/brokers/toss/raw/market_info/get_kr_market_calendar.py +16 -0
  414. tooja/brokers/toss/raw/market_info/get_us_market_calendar.py +16 -0
  415. tooja/brokers/toss/raw/models.py +505 -0
  416. tooja/brokers/toss/raw/order/__init__.py +0 -0
  417. tooja/brokers/toss/raw/order/cancel_order.py +17 -0
  418. tooja/brokers/toss/raw/order/create_order.py +16 -0
  419. tooja/brokers/toss/raw/order/modify_order.py +17 -0
  420. tooja/brokers/toss/raw/order_history/__init__.py +0 -0
  421. tooja/brokers/toss/raw/order_history/get_order.py +17 -0
  422. tooja/brokers/toss/raw/order_history/get_orders.py +17 -0
  423. tooja/brokers/toss/raw/order_info/__init__.py +0 -0
  424. tooja/brokers/toss/raw/order_info/get_buying_power.py +17 -0
  425. tooja/brokers/toss/raw/order_info/get_commissions.py +22 -0
  426. tooja/brokers/toss/raw/order_info/get_sellable_quantity.py +17 -0
  427. tooja/brokers/toss/raw/stock_info/__init__.py +0 -0
  428. tooja/brokers/toss/raw/stock_info/get_stock_warnings.py +22 -0
  429. tooja/brokers/toss/raw/stock_info/get_stocks.py +22 -0
  430. tooja/brokers/toss/raw_namespace.py +96 -0
  431. tooja/brokers/toss/stream.py +21 -0
  432. tooja/core/__init__.py +110 -0
  433. tooja/core/broker.py +76 -0
  434. tooja/core/clients.py +283 -0
  435. tooja/core/enums.py +80 -0
  436. tooja/core/errors.py +109 -0
  437. tooja/core/models.py +407 -0
  438. tooja/core/money.py +115 -0
  439. tooja/core/rate_limit.py +84 -0
  440. tooja/core/stream.py +79 -0
  441. tooja/core/token_cache.py +89 -0
  442. tooja/portfolio/__init__.py +5 -0
  443. tooja/portfolio/rebalance.py +180 -0
  444. tooja/py.typed +0 -0
  445. tooja-0.1.0.dist-info/METADATA +313 -0
  446. tooja-0.1.0.dist-info/RECORD +448 -0
  447. tooja-0.1.0.dist-info/WHEEL +4 -0
  448. tooja-0.1.0.dist-info/licenses/LICENSE +21 -0
tooja/__init__.py ADDED
@@ -0,0 +1,9 @@
1
+ """tooja — unified Python client for Korean securities brokers.
2
+
3
+ A common, broker-agnostic abstraction with a raw escape hatch. The first
4
+ adapter targets Korea Investment & Securities (KIS).
5
+
6
+ from tooja.brokers.kis import KisBroker
7
+ """
8
+
9
+ __version__ = "0.1.0"
@@ -0,0 +1,5 @@
1
+ # src/tooja/brokers/__init__.py
2
+ """tooja.brokers — per-broker adapters.
3
+
4
+ Each adapter implements the tooja.core.Broker ABC.
5
+ """
@@ -0,0 +1,7 @@
1
+ # src/tooja/brokers/kis/__init__.py
2
+ """Korea Investment & Securities (KIS) adapter."""
3
+
4
+ from tooja.brokers.kis.broker import KisBroker
5
+ from tooja.core.rate_limit import RateLimitConfig
6
+
7
+ __all__ = ["KisBroker", "RateLimitConfig"]
@@ -0,0 +1,143 @@
1
+ """Shared call helper — wraps raw executor with auth header injection + error mapping.
2
+
3
+ Every subclient (market/account/orders/...) goes through `call(broker, executor)`:
4
+ 1. acquire token bucket (client-side rate limit)
5
+ 2. fetch access_token (retry once on EGW00123 token-expired)
6
+ 3. inject standard auth headers + tr_id
7
+ 4. execute
8
+ 5. translate KisApiError -> mapped BrokerError via classify_kis_error
9
+ 6. retry on EGW00201 (server-side rate limit) with exponential backoff
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import asyncio
15
+ import logging
16
+ from typing import TYPE_CHECKING, TypeVar
17
+
18
+ import httpx
19
+
20
+ from tooja.brokers.kis.mapping import classify_kis_error
21
+ from tooja.brokers.kis.raw.base import ApiExecutor, KisApiError, TokenExpiredError
22
+ from tooja.core.errors import BrokerAPIError, BrokerError, NetworkError
23
+
24
+ if TYPE_CHECKING:
25
+ from tooja.brokers.kis.broker import KisBroker
26
+
27
+ logger = logging.getLogger(__name__)
28
+
29
+ TResponse = TypeVar("TResponse")
30
+
31
+
32
+ async def call(
33
+ broker: "KisBroker",
34
+ executor_cls: type[ApiExecutor],
35
+ request,
36
+ *,
37
+ tr_id: str | None = None,
38
+ extra_headers: dict[str, str] | None = None,
39
+ ) -> object:
40
+ """Execute one KIS REST call with auth + error mapping + retries.
41
+
42
+ `tr_id` defaults to executor's TR_ID (resolved for real/virtual env).
43
+ """
44
+ broker._require_open() # noqa: SLF001 — peer module within the broker package
45
+ return await _call_with_retries(
46
+ broker, executor_cls, request, tr_id=tr_id, extra_headers=extra_headers,
47
+ )
48
+
49
+
50
+ async def _call_with_retries(
51
+ broker: "KisBroker",
52
+ executor_cls: type[ApiExecutor],
53
+ request,
54
+ *,
55
+ tr_id: str | None,
56
+ extra_headers: dict[str, str] | None,
57
+ ) -> object:
58
+ # Token-expiry retry is orthogonal to rate-limit retries: it doesn't
59
+ # consume an `attempt`. Otherwise a token expiring on the very last attempt
60
+ # would fall through to the unreachable branch instead of reissuing.
61
+ cfg = broker.rate_limit
62
+ token_retry_used = False
63
+ attempt = 0
64
+ while attempt <= cfg.max_retries:
65
+ try:
66
+ return await _call_once(
67
+ broker, executor_cls, request,
68
+ tr_id=tr_id, extra_headers=extra_headers,
69
+ )
70
+ except TokenExpiredError:
71
+ if token_retry_used:
72
+ raise
73
+ broker.invalidate_token()
74
+ token_retry_used = True
75
+ continue # do NOT increment attempt — token retry is free
76
+ except KisApiError as e:
77
+ if e.code != "EGW00201" or attempt == cfg.max_retries:
78
+ raise _translate(e, executor_cls.PATH) from e
79
+ backoff = cfg.base_backoff * (2 ** attempt)
80
+ logger.warning(
81
+ "KIS EGW00201 rate limited on %s; backing off %.2fs (attempt %d/%d)",
82
+ executor_cls.PATH, backoff, attempt + 1, cfg.max_retries,
83
+ )
84
+ await asyncio.sleep(backoff)
85
+ attempt += 1
86
+ # Unreachable: loop either returns or raises on every path above.
87
+ raise AssertionError("unreachable")
88
+
89
+
90
+ async def _call_once(
91
+ broker: "KisBroker",
92
+ executor_cls: type[ApiExecutor],
93
+ request,
94
+ *,
95
+ tr_id: str | None,
96
+ extra_headers: dict[str, str] | None,
97
+ ):
98
+ async with broker._rate_limiter: # noqa: SLF001 — peer module
99
+ token = await broker.get_access_token()
100
+ resolved_tr_id = tr_id or _resolve_tr_id(executor_cls, broker.is_virtual)
101
+ headers = broker.build_auth_headers(token, resolved_tr_id or "")
102
+ if extra_headers:
103
+ headers.update(extra_headers)
104
+
105
+ executor = executor_cls(
106
+ request=request,
107
+ headers=headers,
108
+ base_url=broker.base_url,
109
+ is_virtual=broker.is_virtual,
110
+ client=broker.http,
111
+ )
112
+ try:
113
+ return await executor.execute()
114
+ except httpx.TimeoutException as e:
115
+ from tooja.core.errors import TimeoutError as BTimeout
116
+ raise BTimeout(
117
+ f"KIS request timed out: {executor_cls.PATH}",
118
+ broker="kis",
119
+ endpoint=executor_cls.PATH,
120
+ ) from e
121
+ except httpx.HTTPError as e:
122
+ raise NetworkError(
123
+ f"KIS network error: {e}",
124
+ broker="kis",
125
+ endpoint=executor_cls.PATH,
126
+ ) from e
127
+
128
+
129
+ def _resolve_tr_id(executor_cls: type[ApiExecutor], is_virtual: bool) -> str | None:
130
+ if is_virtual:
131
+ return executor_cls.TR_ID_VIRTUAL or executor_cls.TR_ID
132
+ return executor_cls.TR_ID
133
+
134
+
135
+ def _translate(err: KisApiError, endpoint: str) -> BrokerError:
136
+ cls = classify_kis_error(err.rt_cd, err.code, err.message) or BrokerAPIError
137
+ return cls(
138
+ err.message,
139
+ broker="kis",
140
+ raw_code=err.code,
141
+ raw_message=err.message,
142
+ endpoint=endpoint,
143
+ )