ksxt 1.0.7__py3-none-any.whl → 1.0.9__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 (63) hide show
  1. ksxt/async_/base/async_exchange.py +64 -0
  2. ksxt/async_/bithumb.py +2 -2
  3. ksxt/async_/koreainvest.py +1 -1
  4. ksxt/bithumb.py +2 -2
  5. ksxt/config/token.toml +3 -3
  6. {ksxt-1.0.7.dist-info → ksxt-1.0.9.dist-info}/METADATA +2 -1
  7. ksxt-1.0.9.dist-info/RECORD +67 -0
  8. {ksxt-1.0.7.dist-info → ksxt-1.0.9.dist-info}/WHEEL +1 -1
  9. ksxt/__pycache__/__init__.cpython-312.pyc +0 -0
  10. ksxt/__pycache__/bithumb.cpython-312.pyc +0 -0
  11. ksxt/__pycache__/koreainvest.cpython-312.pyc +0 -0
  12. ksxt/__pycache__/upbit.cpython-312.pyc +0 -0
  13. ksxt/api/__pycache__/__init__.cpython-312.pyc +0 -0
  14. ksxt/api/__pycache__/bithumb.cpython-312.pyc +0 -0
  15. ksxt/api/__pycache__/koreainvest.cpython-312.pyc +0 -0
  16. ksxt/api/__pycache__/upbit.cpython-312.pyc +0 -0
  17. ksxt/async_/__pycache__/__init__.cpython-312.pyc +0 -0
  18. ksxt/async_/__pycache__/bithumb.cpython-312.pyc +0 -0
  19. ksxt/async_/__pycache__/koreainvest.cpython-312.pyc +0 -0
  20. ksxt/async_/__pycache__/upbit.cpython-312.pyc +0 -0
  21. ksxt/async_/base/__pycache__/__init__.cpython-312.pyc +0 -0
  22. ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc +0 -0
  23. ksxt/base/__pycache__/__init__.cpython-312.pyc +0 -0
  24. ksxt/base/__pycache__/errors.cpython-312.pyc +0 -0
  25. ksxt/base/__pycache__/exchange.cpython-312.pyc +0 -0
  26. ksxt/base/__pycache__/rate_limiter.cpython-312.pyc +0 -0
  27. ksxt/base/__pycache__/rest_exchange.cpython-312.pyc +0 -0
  28. ksxt/base/__pycache__/types.cpython-312.pyc +0 -0
  29. ksxt/config/__pycache__/__init__.cpython-312.pyc +0 -0
  30. ksxt/market/__pycache__/base.cpython-312.pyc +0 -0
  31. ksxt/market/__pycache__/db.cpython-312.pyc +0 -0
  32. ksxt/market/__pycache__/logging.cpython-312.pyc +0 -0
  33. ksxt/market/__pycache__/manager.cpython-312.pyc +0 -0
  34. ksxt/market/__pycache__/markets.cpython-312.pyc +0 -0
  35. ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc +0 -0
  36. ksxt/market/krx/__pycache__/kospi.cpython-312.pyc +0 -0
  37. ksxt/market/krx/__pycache__/stock.cpython-312.pyc +0 -0
  38. ksxt/market/us/__pycache__/amex.cpython-312.pyc +0 -0
  39. ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc +0 -0
  40. ksxt/market/us/__pycache__/nyse.cpython-312.pyc +0 -0
  41. ksxt/market/us/__pycache__/stock.cpython-312.pyc +0 -0
  42. ksxt/models/__pycache__/__init__.cpython-312.pyc +0 -0
  43. ksxt/models/__pycache__/balance.cpython-312.pyc +0 -0
  44. ksxt/models/__pycache__/cash.cpython-312.pyc +0 -0
  45. ksxt/models/__pycache__/common.cpython-312.pyc +0 -0
  46. ksxt/models/__pycache__/error.cpython-312.pyc +0 -0
  47. ksxt/models/__pycache__/historical.cpython-312.pyc +0 -0
  48. ksxt/models/__pycache__/market.cpython-312.pyc +0 -0
  49. ksxt/models/__pycache__/order.cpython-312.pyc +0 -0
  50. ksxt/models/__pycache__/orderbook.cpython-312.pyc +0 -0
  51. ksxt/models/__pycache__/ticker.cpython-312.pyc +0 -0
  52. ksxt/models/__pycache__/token.cpython-312.pyc +0 -0
  53. ksxt/models/__pycache__/transaction.cpython-312.pyc +0 -0
  54. ksxt/parser/__pycache__/bithumb.cpython-312.pyc +0 -0
  55. ksxt/parser/__pycache__/koreainvest.cpython-312.pyc +0 -0
  56. ksxt/parser/__pycache__/parser.cpython-312.pyc +0 -0
  57. ksxt/parser/__pycache__/upbit.cpython-312.pyc +0 -0
  58. ksxt/utils/__pycache__/safer.cpython-312.pyc +0 -0
  59. ksxt/utils/__pycache__/sorter.cpython-312.pyc +0 -0
  60. ksxt/utils/__pycache__/timer.cpython-312.pyc +0 -0
  61. ksxt-1.0.7.dist-info/RECORD +0 -119
  62. {ksxt-1.0.7.dist-info → ksxt-1.0.9.dist-info}/LICENSE.txt +0 -0
  63. {ksxt-1.0.7.dist-info → ksxt-1.0.9.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,8 @@
1
+ import logging
1
2
  import asyncio
3
+ import toml
4
+ import os
5
+ import aiofiles
2
6
  import time
3
7
  import aiohttp
4
8
  from datetime import datetime
@@ -8,6 +12,7 @@ from typing import Any, Dict, Literal, Optional
8
12
  from ksxt.base.errors import NotSupportedError
9
13
  from ksxt.base.rate_limiter import RateLimiterContext
10
14
  from ksxt.base.rest_exchange import RestExchange
15
+ from ksxt.config import CONFIG_DIR
11
16
  from ksxt.config import VALID_METHODS
12
17
  import ksxt.models
13
18
 
@@ -46,6 +51,65 @@ class AsyncExchange(RestExchange):
46
51
  async def __aexit__(self, *args):
47
52
  await self.close()
48
53
 
54
+ def check_token(func):
55
+ async def wrapper(self, *args, **kwargs):
56
+ if not await self.is_valid_token():
57
+ await self.create_token()
58
+
59
+ return await func(self, *args, **kwargs)
60
+
61
+ return wrapper
62
+
63
+ async def is_valid_token(self) -> bool:
64
+ await self.load_token()
65
+ if self.token_expired is None:
66
+ return False
67
+
68
+ return datetime.now(self.timezone) <= self.timezone.localize(self.token_expired)
69
+
70
+ async def read_token(self):
71
+ try:
72
+ token_path = os.path.join(CONFIG_DIR, "token.toml")
73
+ async with aiofiles.open(token_path, mode="r") as f:
74
+ c = toml.loads(await f.read())
75
+ return c
76
+ except Exception as e:
77
+ return {}
78
+
79
+ async def load_token(self):
80
+ try:
81
+ data = await self.read_token()
82
+
83
+ if self.open_key in data.keys():
84
+ self.token = data[self.open_key]["token"]
85
+ self.token_expired = data[self.open_key]["expired"]
86
+ except Exception as e:
87
+ pass
88
+
89
+ async def save_token(self, open_key, token, expired):
90
+ try:
91
+ logging.info("save token")
92
+ logging.info(open_key)
93
+ logging.info(token)
94
+ logging.info(expired)
95
+
96
+ data = await self.read_token()
97
+ if open_key not in data:
98
+ data[open_key] = {}
99
+ data[open_key]["token"] = token
100
+ data[open_key]["expired"] = expired
101
+
102
+ token_path = os.path.join(CONFIG_DIR, "token.toml")
103
+ async with aiofiles.open(token_path, "w") as file:
104
+ await file.write(toml.dumps(data))
105
+
106
+ await self.load_token()
107
+ except Exception as e:
108
+ pass
109
+
110
+ async def create_token(self):
111
+ pass
112
+
49
113
  async def fetch(self, url, method="GET", headers=None, body=None, params=None):
50
114
  # Ensure that resources are initialized before the request
51
115
  await self.initialize()
ksxt/async_/bithumb.py CHANGED
@@ -167,7 +167,7 @@ class Bithumb(AsyncExchange, ImplicitAPI):
167
167
 
168
168
  # 실패 시 오류 응답 반환
169
169
  if common_response.success != "0":
170
- return ksxt.models.KsxtTickerResponse(header=common_header, response=common_response, info=[])
170
+ return ksxt.models.KsxtTickerResponse(header=common_header, response=common_response, info=None)
171
171
 
172
172
  # 데이터 파싱
173
173
  parsed_info = self.parser.parse_ticker(response, base_market)
@@ -186,7 +186,7 @@ class Bithumb(AsyncExchange, ImplicitAPI):
186
186
 
187
187
  # 실패 시 오류 응답 반환
188
188
  if common_response.success != "0":
189
- return ksxt.models.KsxtTickersResponse(header=common_header, response=common_response, info=[])
189
+ return ksxt.models.KsxtTickersResponse(header=common_header, response=common_response, info=None)
190
190
 
191
191
  # 데이터 파싱
192
192
  parsed_info = self.parser.parse_tickers(response, base_market)
@@ -87,7 +87,7 @@ class KoreaInvest(AsyncExchange, ImplicitAPI):
87
87
 
88
88
  parsed_info = self.parser.parse_token(response=response)
89
89
 
90
- self.save_token(self.open_key, parsed_info.access_token, expired=parsed_info.expired_datetime)
90
+ await self.save_token(self.open_key, parsed_info.access_token, expired=parsed_info.expired_datetime)
91
91
 
92
92
  return ksxt.models.KsxtTokenResponse(header=common_header, response=common_response, info=parsed_info)
93
93
 
ksxt/bithumb.py CHANGED
@@ -169,7 +169,7 @@ class Bithumb(RestExchange, ImplicitAPI):
169
169
 
170
170
  # 실패 시 오류 응답 반환
171
171
  if common_response.success != "0":
172
- return ksxt.models.KsxtTickerResponse(header=common_header, response=common_response, info=[])
172
+ return ksxt.models.KsxtTickerResponse(header=common_header, response=common_response, info=None)
173
173
 
174
174
  # 데이터 파싱
175
175
  parsed_info = self.parser.parse_ticker(response, base_market)
@@ -188,7 +188,7 @@ class Bithumb(RestExchange, ImplicitAPI):
188
188
 
189
189
  # 실패 시 오류 응답 반환
190
190
  if common_response.success != "0":
191
- return ksxt.models.KsxtTickersResponse(header=common_header, response=common_response, info=[])
191
+ return ksxt.models.KsxtTickersResponse(header=common_header, response=common_response, info=None)
192
192
 
193
193
  # 데이터 파싱
194
194
  parsed_info = self.parser.parse_tickers(response, base_market)
ksxt/config/token.toml CHANGED
@@ -1,3 +1,3 @@
1
- [PSXkvBM1hQXJDRHg2rLvC7Tr8SoyPudlbx9o]
2
- token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0b2tlbiIsImF1ZCI6IjEyYzYxZWIxLTU3YzQtNGFiZC1iN2JhLTM0OGIwOTBjY2NlMyIsInByZHRfY2QiOiIiLCJpc3MiOiJ1bm9ndyIsImV4cCI6MTcxOTM1OTE1NiwiaWF0IjoxNzE5MjcyNzU2LCJqdGkiOiJQU1hrdkJNMWhRWEpEUkhnMnJMdkM3VHI4U295UHVkbGJ4OW8ifQ.B1CJ7IMEkkqVpQ7ECM8otr6lVVmV2Yp_bRaBBRlcOo29MIQZ5z8g5oEcXyO-ghaUa8UJZguuo8Q7iQreRBYkZg"
3
- expired = "2024-06-26 08:45:56"
1
+ [PSCWKArP3T1L4qMgyZ4DXIDlqcaK48jJW1J5]
2
+ token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0b2tlbiIsImF1ZCI6IjAyNjhmZDU2LWU4YzgtNDQyZS1hOWU5LTI2YjNiOGVkNGYwYiIsInByZHRfY2QiOiIiLCJpc3MiOiJ1bm9ndyIsImV4cCI6MTc0Mzc3NDk0OSwiaWF0IjoxNzQzNjg4NTQ5LCJqdGkiOiJQU0NXS0FyUDNUMUw0cU1neVo0RFhJRGxxY2FLNDhqSlcxSjUifQ.ILzpskgzsz9igynOuTrxGOYUCWknEoEar6AAPL3DdBGWM8pi1SkU7pcNgkx6eZ1k9nsvs2YeB1OsFTJtVp6kCQ"
3
+ expired = 2025-04-04T22:55:49
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ksxt
3
- Version: 1.0.7
3
+ Version: 1.0.9
4
4
  License: MIT License
5
5
 
6
6
  Copyright © 2025 AMOSA
@@ -29,6 +29,7 @@ Requires-Dist: pandas
29
29
  Requires-Dist: sqlalchemy
30
30
  Requires-Dist: yarl
31
31
  Requires-Dist: aiohttp
32
+ Requires-Dist: aiofiles
32
33
  Requires-Dist: toml
33
34
  Requires-Dist: pyjwt
34
35
  Requires-Dist: pydantic
@@ -0,0 +1,67 @@
1
+ ksxt/__init__.py,sha256=Q4kbXuxaCcQg5Z1T2z31lrUc5Cr95RIyv-y6hNf3R0E,131
2
+ ksxt/bithumb.py,sha256=KZEdoU9F1L7L_gyvAn5PVHTBvGWEFi_mdd-qn9KC9ZU,22645
3
+ ksxt/koreainvest.py,sha256=_3ZbMw7O-I0lWhMcDMRTcb3lCcuUFFp-OeDtUs8S5hA,20805
4
+ ksxt/upbit.py,sha256=2nfO-x_1C9XOoXRm2_cB4hXRV7jxoTP-s7Eqm8u8EJc,22861
5
+ ksxt/api/__init__.py,sha256=CZ8AedRG8O9vEdSqTaot5sV3nwpxPZoVOYwrFCLUo6M,736
6
+ ksxt/api/bithumb.py,sha256=6apoSNoiEOIkR6xQu4rtCSz7sdNdx3BHeu8-m8omh6E,2177
7
+ ksxt/api/koreainvest.py,sha256=93BASTUUsw39APRFxVqlaOu-keEFuIO3MvHX_6g-AAs,2159
8
+ ksxt/api/upbit.py,sha256=CQN-A0gVoeNoHTZhH8kCaGk1svaOvo5HDyVFfXou_6A,2704
9
+ ksxt/api/auto/api_generator.py,sha256=R8Q7uFN1wDr_0CUsJJ1nmZhoDBwzjPlKUXrNCsY9QKU,2540
10
+ ksxt/api/auto/bithumb.py,sha256=n6ctGefq28i5CMiItLF1xOZgeDP9F9em4HXfoPUcmqw,1261
11
+ ksxt/api/auto/koreainvest.py,sha256=z4Bf3C7g2W-eQP99oBeM_J0mq2D3PkbQaulrDwxJB04,1582
12
+ ksxt/api/auto/upbit.py,sha256=CtSG0jziqJR4FInHvwDisJfMWCUrUIQQcNPuCGGR7Do,1467
13
+ ksxt/async_/__init__.py,sha256=ztfV65aN2mXamQSfVm3GLYB6cszkvsCSlUyhfe2H_2M,186
14
+ ksxt/async_/bithumb.py,sha256=W5tpmmkp6fBahxHAtoMFGyYVlq5pcNS5KQYgJvcQn60,20538
15
+ ksxt/async_/koreainvest.py,sha256=oT0553kpEmiIn0iMUy7prXlAfZhCXsyeEJzZrkvJcFU,23138
16
+ ksxt/async_/upbit.py,sha256=Y0cPAkiZluBCpNj2jX1d-V0olzMZMT8Dyzup2BAnSH0,22783
17
+ ksxt/async_/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ ksxt/async_/base/async_exchange.py,sha256=NtcojJx1HeglOv3OPZbsshD4Raah0sSDiSk87ZWPkVA,11688
19
+ ksxt/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ ksxt/base/com_exchange.py,sha256=q7C3Bc5q4ENvNGoghnQCN7YLttgwmFoNj9WsH5qxXNQ,287
21
+ ksxt/base/errors.py,sha256=msGHmm9YGUOXOaK_VhOUEt5LvIDMMm6G-io8nQbNgA0,141
22
+ ksxt/base/exchange.py,sha256=tKU37qlYarwGmTySzGu_kQGowc_QRMdm31SGSjeLoZI,16598
23
+ ksxt/base/rate_limiter.py,sha256=9iF6OB-2u0q4nqtng8Tafn-fM3CVQ-DvdNRJ1aSCS3w,3005
24
+ ksxt/base/rest_exchange.py,sha256=_fQqoq7LkJIR8S2YkMF8PqWH-Zx4ibth_f_0BuI8PTo,16103
25
+ ksxt/base/types.py,sha256=3bd3obJhhX1njy_o4LW8hSAHX2MThOI-mZm6iifwno4,59
26
+ ksxt/config/__init__.py,sha256=hkQx56FVJD8Gq1A_KzfOqO8BoqJRTX5TnUmqIignnlc,148
27
+ ksxt/config/bithumb.toml,sha256=JgKgHQVATsLcbxKYvekSRonJ4PjJ5x2ejp1eZHHusrQ,11693
28
+ ksxt/config/koreainvest.toml,sha256=XQRSdEgkWlhbfS6AvJRqQJ_8210i__nfFSI9n3GcgqY,11526
29
+ ksxt/config/token.toml,sha256=sRf2gsb_cm3qs7VGFwGfEBJVpBve8Ksk8aTRN7gjUQ0,429
30
+ ksxt/config/upbit.toml,sha256=1aGKZ3HAV28rrTVGZQ418I9NJwhoRh70Vx03oKacIfY,13439
31
+ ksxt/market/base.py,sha256=SzNPJECU2iWaQEUesI_REW_A0by_Tv4hs4Hv8p_sr0I,6856
32
+ ksxt/market/db.py,sha256=ZPr2WlQRUOjhJm1fwFBrdwWG7UJkEpy5Pr0oEQ3Nqb0,386
33
+ ksxt/market/logging.py,sha256=hkyAhzA72-KCGcVavSOHFSz2FU5QJq_gn6WA6kXs_Pw,698
34
+ ksxt/market/manager.py,sha256=kgXrsjFw4O_BPVM2VxQJbm5ryWPG3L-NX1Pm-pN68jE,7301
35
+ ksxt/market/markets.py,sha256=pExEvlLhoLvs2Ipkp-p8_yG3tFgz3U3yB5VAVqD8qdM,545
36
+ ksxt/market/krx/kosdaq.py,sha256=CJDKMPp3utH-bmPrrEAzmFx5GSXk_KVhLDdGCAaxaBQ,18626
37
+ ksxt/market/krx/kospi.py,sha256=lRyA-xCjqdyuB87eHFGooIHtpbjy7WcrQ0Rk2ZnCt40,20466
38
+ ksxt/market/krx/stock.py,sha256=IXx4xNYsQgKhuLz1_S0Bd9Scqd6fip75gafRePAFW7U,8111
39
+ ksxt/market/us/amex.py,sha256=ZYlfh1x2eiA8P3DfO2PKj6nIE-O4WQNgDM-CsLqFUVs,5510
40
+ ksxt/market/us/nasdaq.py,sha256=OIBJn16veH36Um-Bhr14K0qBu3ZZwPSWi5sj6zxmkVA,5524
41
+ ksxt/market/us/nyse.py,sha256=eCAcz0saj1RFuyfmJc8cjecwGEDIhvkYVkUp941ZOIw,5507
42
+ ksxt/market/us/stock.py,sha256=hRb4RH2kf-1RaNcWLvE5tg2uCcu6LoPZ0Nc1u6Wpzbc,3675
43
+ ksxt/models/__init__.py,sha256=V7Nr0RHOOXithVTQW12hveavnapS8nGhWQ3JIMwDFTc,706
44
+ ksxt/models/balance.py,sha256=YarLzTXuqqdXYHoOWDx5Hh_K2DXqEoKtNgdii0UINjM,1138
45
+ ksxt/models/cash.py,sha256=sNexdR6Ek-YZ6cVAmre-zf3K30R-6hreHuBQKYzMsPU,303
46
+ ksxt/models/common.py,sha256=HvsNa2wlTeLdnB67untL0UzOQ5r6f2s6Gkfxeh7LTpM,827
47
+ ksxt/models/error.py,sha256=yzpTweHMB-bi7hzD8ATKsK2klJAsbfPEBBa1A5tY6tw,291
48
+ ksxt/models/historical.py,sha256=fWcst4WPimI2Avb4b1kOswfyf3nB4XSMgpTSmm7uTpY,655
49
+ ksxt/models/market.py,sha256=kkH-P1m1HQjJOPT1k4bk9ZgW-_kwIBO_fXHcrRlWlVE,2013
50
+ ksxt/models/order.py,sha256=LJJd-licLirI5WrAM1MItViOX_u5U_fmpBFPpDSdHxE,867
51
+ ksxt/models/orderbook.py,sha256=S1c03QBu1hupN87CMWLgEsh8u2GrZ_Z_BcTUuiKGnR0,773
52
+ ksxt/models/ticker.py,sha256=pPc7GqUOJchLg7qOpKfxhTVpXygF1Otc_M9_KfHFEgY,544
53
+ ksxt/models/token.py,sha256=eUBoX7O0ffC63BN12-1aUjcfE_R1Ylyxr6_U79FLDv0,319
54
+ ksxt/models/transaction.py,sha256=E086NQkIfTuVhmJNmr8_vYGn84c1Vf8_8sgHyBMZFU0,1491
55
+ ksxt/parser/bithumb.py,sha256=jPNISv-LBKjATGPx-ukyoZcpurSjCBlHoHva5UBEj8E,18152
56
+ ksxt/parser/koreainvest.py,sha256=6sJ_yMmDb4IVZnEI4facxdTybtW45s9kEeiWrVXxEzs,17328
57
+ ksxt/parser/parser.py,sha256=xdqRS69VMxFupv5dNE4Cb6vq-rmDjlIOuouHj4RP72I,5801
58
+ ksxt/parser/upbit.py,sha256=8C4TYwYgdu8tOiIlrJ4QhBhUVYI57hmXwMMD2GPxObM,18908
59
+ ksxt/sample/symbol_sync.ipynb,sha256=dnUOgEKdUuEkDo_6LZjmDtVuNh4PPmCN4Ht7Pz-0L9Y,640081
60
+ ksxt/utils/safer.py,sha256=tlXDU9KDxrrM0HT2bv45hkblIgbEYr02NygdYS0jj6c,1289
61
+ ksxt/utils/sorter.py,sha256=j7eN1Qy7Wx3cXcWyRWyO1fVq-M24TrXvcfewPR5axF4,227
62
+ ksxt/utils/timer.py,sha256=4_rhXdQDFkKshS5utWrgTteIe71tVSTL1zNW-IjOngM,1228
63
+ ksxt-1.0.9.dist-info/LICENSE.txt,sha256=p2JwEVHDRuJx8UL5Xnt_pFhdC73ppwp7rYQhHqviWB8,1080
64
+ ksxt-1.0.9.dist-info/METADATA,sha256=gj-126j2l_QW7nCtC71WAir_ZMBSfI0sMGWQ_jy7xZ0,1674
65
+ ksxt-1.0.9.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
66
+ ksxt-1.0.9.dist-info/top_level.txt,sha256=XLUhkZCur5Pe0BPUV3J0syngIPz7jBb2YlQR4epo5kI,5
67
+ ksxt-1.0.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.3.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,119 +0,0 @@
1
- ksxt/__init__.py,sha256=Q4kbXuxaCcQg5Z1T2z31lrUc5Cr95RIyv-y6hNf3R0E,131
2
- ksxt/bithumb.py,sha256=jiN9hIopmXwUTQn71mR13Z_c0ZDJOXhbJhgpzHRniLs,22641
3
- ksxt/koreainvest.py,sha256=_3ZbMw7O-I0lWhMcDMRTcb3lCcuUFFp-OeDtUs8S5hA,20805
4
- ksxt/upbit.py,sha256=2nfO-x_1C9XOoXRm2_cB4hXRV7jxoTP-s7Eqm8u8EJc,22861
5
- ksxt/__pycache__/__init__.cpython-312.pyc,sha256=99OafUFiZDEhtstgud7UXpCCcOfy20LUICQC7vNbNPc,310
6
- ksxt/__pycache__/bithumb.cpython-312.pyc,sha256=SI-IV1_1cTRt54m0z5G_Qys0f2jqJ_e91QIGucD1Jrg,25686
7
- ksxt/__pycache__/koreainvest.cpython-312.pyc,sha256=38FJ1f8w7PnSCALogXBPjVTAoRursY6sIKmNqOxlx08,22472
8
- ksxt/__pycache__/upbit.cpython-312.pyc,sha256=C3Bv5Gw5FvBjK3hgKeu4Loh7em94wyqTV9qgAdYhhC0,26035
9
- ksxt/api/__init__.py,sha256=CZ8AedRG8O9vEdSqTaot5sV3nwpxPZoVOYwrFCLUo6M,736
10
- ksxt/api/bithumb.py,sha256=6apoSNoiEOIkR6xQu4rtCSz7sdNdx3BHeu8-m8omh6E,2177
11
- ksxt/api/koreainvest.py,sha256=93BASTUUsw39APRFxVqlaOu-keEFuIO3MvHX_6g-AAs,2159
12
- ksxt/api/upbit.py,sha256=CQN-A0gVoeNoHTZhH8kCaGk1svaOvo5HDyVFfXou_6A,2704
13
- ksxt/api/__pycache__/__init__.cpython-312.pyc,sha256=1tMXRXoUs6u2hiKjL8_5209aEWMLxAIEABmUj8iNqw4,1374
14
- ksxt/api/__pycache__/bithumb.cpython-312.pyc,sha256=-tF6txgvtDIqXxIroDh28pgIrEvA9DK_NCzw6DBKcgk,2559
15
- ksxt/api/__pycache__/koreainvest.cpython-312.pyc,sha256=VftBw8Krzp9VYAZ3RSeBWrqiNkAUyqQfinE2ZjxRueM,2087
16
- ksxt/api/__pycache__/upbit.cpython-312.pyc,sha256=38hbV6oBqrh4hXrkooxTJluIryuDuSBkbv119mq3Ewg,3014
17
- ksxt/api/auto/api_generator.py,sha256=R8Q7uFN1wDr_0CUsJJ1nmZhoDBwzjPlKUXrNCsY9QKU,2540
18
- ksxt/api/auto/bithumb.py,sha256=n6ctGefq28i5CMiItLF1xOZgeDP9F9em4HXfoPUcmqw,1261
19
- ksxt/api/auto/koreainvest.py,sha256=z4Bf3C7g2W-eQP99oBeM_J0mq2D3PkbQaulrDwxJB04,1582
20
- ksxt/api/auto/upbit.py,sha256=CtSG0jziqJR4FInHvwDisJfMWCUrUIQQcNPuCGGR7Do,1467
21
- ksxt/async_/__init__.py,sha256=ztfV65aN2mXamQSfVm3GLYB6cszkvsCSlUyhfe2H_2M,186
22
- ksxt/async_/bithumb.py,sha256=sVGUSHSm9CKLbhUoz9bDkpxlSJAzqnRaNt30ocWBsKI,20534
23
- ksxt/async_/koreainvest.py,sha256=6HV-miG50khuvyr634eQb9GlaIIfo8asI_qfDATX90E,23132
24
- ksxt/async_/upbit.py,sha256=Y0cPAkiZluBCpNj2jX1d-V0olzMZMT8Dyzup2BAnSH0,22783
25
- ksxt/async_/__pycache__/__init__.cpython-312.pyc,sha256=JMmqx3WOUqRd8bNVJetVrh4iuOE0ihwajLyI0OaHB7U,379
26
- ksxt/async_/__pycache__/bithumb.cpython-312.pyc,sha256=qL2X3-e3ulLiWHWJQrCYhsNDkxK1mqT4GdH_nVF8GDM,24418
27
- ksxt/async_/__pycache__/koreainvest.cpython-312.pyc,sha256=Oy71u-nws5BJEiT0mBgi_AxlmqM1Bn7LRRGjguFwCNM,25680
28
- ksxt/async_/__pycache__/upbit.cpython-312.pyc,sha256=ssF1mktP57F243a0IEogVCuXFoIfYANZvpmCs95DNoo,27751
29
- ksxt/async_/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- ksxt/async_/base/async_exchange.py,sha256=wUZySn7TE5FMMmJpi1Whpm6pXPObxVaS87HS0jJ35R8,9721
31
- ksxt/async_/base/__pycache__/__init__.cpython-312.pyc,sha256=S4bPuB8OeLTMdU22fAKRges3VlhAuVM6EBIbb_92gOM,152
32
- ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc,sha256=ZiEzacI9o9ppGsg8B9vuyD9F3ZHzMXHwOLlJ4NXtXyw,15858
33
- ksxt/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- ksxt/base/com_exchange.py,sha256=q7C3Bc5q4ENvNGoghnQCN7YLttgwmFoNj9WsH5qxXNQ,287
35
- ksxt/base/errors.py,sha256=msGHmm9YGUOXOaK_VhOUEt5LvIDMMm6G-io8nQbNgA0,141
36
- ksxt/base/exchange.py,sha256=tKU37qlYarwGmTySzGu_kQGowc_QRMdm31SGSjeLoZI,16598
37
- ksxt/base/rate_limiter.py,sha256=9iF6OB-2u0q4nqtng8Tafn-fM3CVQ-DvdNRJ1aSCS3w,3005
38
- ksxt/base/rest_exchange.py,sha256=_fQqoq7LkJIR8S2YkMF8PqWH-Zx4ibth_f_0BuI8PTo,16103
39
- ksxt/base/types.py,sha256=3bd3obJhhX1njy_o4LW8hSAHX2MThOI-mZm6iifwno4,59
40
- ksxt/base/__pycache__/__init__.cpython-312.pyc,sha256=sRTaTlUmf1BjkcBImIDu9hF2H1CO1uFRqOTXjkpSeMo,145
41
- ksxt/base/__pycache__/errors.cpython-312.pyc,sha256=AcQa0ZFWVvPHzZ_qo7uMQUOTQwwt71FLroolBT77Tgw,621
42
- ksxt/base/__pycache__/exchange.cpython-312.pyc,sha256=ZjDZ29l8IDEU8GZrw4cnDwBwB9tUYIIDMf4JUIRQCPw,21760
43
- ksxt/base/__pycache__/rate_limiter.cpython-312.pyc,sha256=b-OiLzKiXR8I8GcuPAYjpDGwHOgywFfOMPJDTxHDDgA,5417
44
- ksxt/base/__pycache__/rest_exchange.cpython-312.pyc,sha256=dRotNlB7p_iuLMOu9yeQ5_veOr5chTjpmv7TSnuUuS4,23248
45
- ksxt/base/__pycache__/types.cpython-312.pyc,sha256=JZdcCrwjXkLpp1F5kPwUb8M2Rs3HJxpx0WuhJk-X0kc,231
46
- ksxt/config/__init__.py,sha256=hkQx56FVJD8Gq1A_KzfOqO8BoqJRTX5TnUmqIignnlc,148
47
- ksxt/config/bithumb.toml,sha256=JgKgHQVATsLcbxKYvekSRonJ4PjJ5x2ejp1eZHHusrQ,11693
48
- ksxt/config/koreainvest.toml,sha256=XQRSdEgkWlhbfS6AvJRqQJ_8210i__nfFSI9n3GcgqY,11526
49
- ksxt/config/token.toml,sha256=L71hM8EBBcZmMtuHUKPGa8sQqg7SUxKCL_ecu98SU1I,431
50
- ksxt/config/upbit.toml,sha256=1aGKZ3HAV28rrTVGZQ418I9NJwhoRh70Vx03oKacIfY,13439
51
- ksxt/config/__pycache__/__init__.cpython-312.pyc,sha256=1jLyeKuG_1Uy5_K3mrBPd8h4uRR_9psing5ZdeOKUkw,424
52
- ksxt/market/base.py,sha256=SzNPJECU2iWaQEUesI_REW_A0by_Tv4hs4Hv8p_sr0I,6856
53
- ksxt/market/db.py,sha256=ZPr2WlQRUOjhJm1fwFBrdwWG7UJkEpy5Pr0oEQ3Nqb0,386
54
- ksxt/market/logging.py,sha256=hkyAhzA72-KCGcVavSOHFSz2FU5QJq_gn6WA6kXs_Pw,698
55
- ksxt/market/manager.py,sha256=kgXrsjFw4O_BPVM2VxQJbm5ryWPG3L-NX1Pm-pN68jE,7301
56
- ksxt/market/markets.py,sha256=pExEvlLhoLvs2Ipkp-p8_yG3tFgz3U3yB5VAVqD8qdM,545
57
- ksxt/market/__pycache__/base.cpython-312.pyc,sha256=rKw82jppSUh3WKj-ZTwMe7f0bb45S7BiS0QJVYIf6Ag,11238
58
- ksxt/market/__pycache__/db.cpython-312.pyc,sha256=UqAmDamjS6fG0HAPbgq9ZZAB1gbmkIgVpvPpdXQTByI,691
59
- ksxt/market/__pycache__/logging.cpython-312.pyc,sha256=cF9xFQUauuncKAumkOk7ZTOogfwvS_W6xgJ6OBF7gGA,1401
60
- ksxt/market/__pycache__/manager.cpython-312.pyc,sha256=KBjTJ90x1dSo4_8Vc4pRngsMldrioBsduFXgNlmeh-4,11783
61
- ksxt/market/__pycache__/markets.cpython-312.pyc,sha256=kuzNGgwZoNVwZ4pC_VdiIek9hxP7yarLxR5YltUYkgs,744
62
- ksxt/market/krx/kosdaq.py,sha256=CJDKMPp3utH-bmPrrEAzmFx5GSXk_KVhLDdGCAaxaBQ,18626
63
- ksxt/market/krx/kospi.py,sha256=lRyA-xCjqdyuB87eHFGooIHtpbjy7WcrQ0Rk2ZnCt40,20466
64
- ksxt/market/krx/stock.py,sha256=IXx4xNYsQgKhuLz1_S0Bd9Scqd6fip75gafRePAFW7U,8111
65
- ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc,sha256=rk9C1APZmW42WH8OISrlR-EwpMHrgyGCMRGbaOtPMEE,7516
66
- ksxt/market/krx/__pycache__/kospi.cpython-312.pyc,sha256=vEzv-Mg9Jq0lwWRySoJIh9g13LOLkpzyxys3mxJJ6CQ,8608
67
- ksxt/market/krx/__pycache__/stock.cpython-312.pyc,sha256=k9hUlFzTKcTa1pY_VMKOVKvIlzJxdoGYx9APJUjEloA,9012
68
- ksxt/market/us/amex.py,sha256=ZYlfh1x2eiA8P3DfO2PKj6nIE-O4WQNgDM-CsLqFUVs,5510
69
- ksxt/market/us/nasdaq.py,sha256=OIBJn16veH36Um-Bhr14K0qBu3ZZwPSWi5sj6zxmkVA,5524
70
- ksxt/market/us/nyse.py,sha256=eCAcz0saj1RFuyfmJc8cjecwGEDIhvkYVkUp941ZOIw,5507
71
- ksxt/market/us/stock.py,sha256=hRb4RH2kf-1RaNcWLvE5tg2uCcu6LoPZ0Nc1u6Wpzbc,3675
72
- ksxt/market/us/__pycache__/amex.cpython-312.pyc,sha256=ISJeRZ9bQHYmH9ltf7aHXUdpGaq2MgRriFm0m182iGU,3380
73
- ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc,sha256=CmTxTMsNZFWUFkZo_S7pkGWmMQoIQ-gnsfjefvz389k,3394
74
- ksxt/market/us/__pycache__/nyse.cpython-312.pyc,sha256=ERLmlKoyXwbcK1A1Tep8i-K7v3MUvAlKQrh2pANzZqo,3377
75
- ksxt/market/us/__pycache__/stock.cpython-312.pyc,sha256=AAb5L9s3z8F7OT0WZl20lWUKg6iEyIifU-Yc1hGsO2w,4975
76
- ksxt/models/__init__.py,sha256=V7Nr0RHOOXithVTQW12hveavnapS8nGhWQ3JIMwDFTc,706
77
- ksxt/models/balance.py,sha256=YarLzTXuqqdXYHoOWDx5Hh_K2DXqEoKtNgdii0UINjM,1138
78
- ksxt/models/cash.py,sha256=sNexdR6Ek-YZ6cVAmre-zf3K30R-6hreHuBQKYzMsPU,303
79
- ksxt/models/common.py,sha256=HvsNa2wlTeLdnB67untL0UzOQ5r6f2s6Gkfxeh7LTpM,827
80
- ksxt/models/error.py,sha256=yzpTweHMB-bi7hzD8ATKsK2klJAsbfPEBBa1A5tY6tw,291
81
- ksxt/models/historical.py,sha256=fWcst4WPimI2Avb4b1kOswfyf3nB4XSMgpTSmm7uTpY,655
82
- ksxt/models/market.py,sha256=kkH-P1m1HQjJOPT1k4bk9ZgW-_kwIBO_fXHcrRlWlVE,2013
83
- ksxt/models/order.py,sha256=LJJd-licLirI5WrAM1MItViOX_u5U_fmpBFPpDSdHxE,867
84
- ksxt/models/orderbook.py,sha256=S1c03QBu1hupN87CMWLgEsh8u2GrZ_Z_BcTUuiKGnR0,773
85
- ksxt/models/ticker.py,sha256=pPc7GqUOJchLg7qOpKfxhTVpXygF1Otc_M9_KfHFEgY,544
86
- ksxt/models/token.py,sha256=eUBoX7O0ffC63BN12-1aUjcfE_R1Ylyxr6_U79FLDv0,319
87
- ksxt/models/transaction.py,sha256=E086NQkIfTuVhmJNmr8_vYGn84c1Vf8_8sgHyBMZFU0,1491
88
- ksxt/models/__pycache__/__init__.cpython-312.pyc,sha256=juNSOa40CKXj3FcqX7uufkG-nGRv7BeymAsD5iFbtDg,1032
89
- ksxt/models/__pycache__/balance.cpython-312.pyc,sha256=ojawyH9i68QXJ1ZiQ8KtS2F0iQdSYIahundVhdghYns,2118
90
- ksxt/models/__pycache__/cash.cpython-312.pyc,sha256=PNyyB9eKOU0OyaMP7p3dg3BYDb21wA0v8zzkXUXTg5E,721
91
- ksxt/models/__pycache__/common.cpython-312.pyc,sha256=UiwBy-d1G_BCST5Ercj3HnBEO3uURPc1K71nQ25_xjs,1362
92
- ksxt/models/__pycache__/error.cpython-312.pyc,sha256=PaFS6ijLZsNmHeIEd6M2RKAElyZ1GdmufAspqE1Y78A,773
93
- ksxt/models/__pycache__/historical.cpython-312.pyc,sha256=9mcQEc1p9YyVovIKOYQlGwYk4s6AdPlg9WY2WQlyMIQ,1290
94
- ksxt/models/__pycache__/market.cpython-312.pyc,sha256=1JH7CXMZ8kvbdlHqrongsmoq99p5S-vqTYhqK5eMfYQ,3077
95
- ksxt/models/__pycache__/order.cpython-312.pyc,sha256=2pcwKS9_-I25plh92Gii3d67noYABixnrOjpkMZPnsc,1790
96
- ksxt/models/__pycache__/orderbook.cpython-312.pyc,sha256=YL_iiIMMfKdjlkNIN4lC-olNrK8LmCBoj56GGpe9ghM,1516
97
- ksxt/models/__pycache__/ticker.cpython-312.pyc,sha256=SQ4PMAMdWrUomHeyBY-P5STecg1EC46wRmwcCvdx0Sc,1164
98
- ksxt/models/__pycache__/token.cpython-312.pyc,sha256=NuH6VnrVsPRhUFUspVJwcEl4KyA8hMHdZwsguCxD6M8,794
99
- ksxt/models/__pycache__/transaction.cpython-312.pyc,sha256=_3vlu_CTVyFd5Zvil8DrDWnc9QODYCg-K3xyhOmZhdQ,2435
100
- ksxt/parser/bithumb.py,sha256=jPNISv-LBKjATGPx-ukyoZcpurSjCBlHoHva5UBEj8E,18152
101
- ksxt/parser/koreainvest.py,sha256=6sJ_yMmDb4IVZnEI4facxdTybtW45s9kEeiWrVXxEzs,17328
102
- ksxt/parser/parser.py,sha256=xdqRS69VMxFupv5dNE4Cb6vq-rmDjlIOuouHj4RP72I,5801
103
- ksxt/parser/upbit.py,sha256=8C4TYwYgdu8tOiIlrJ4QhBhUVYI57hmXwMMD2GPxObM,18908
104
- ksxt/parser/__pycache__/bithumb.cpython-312.pyc,sha256=sOd7Q5S7o6PmvuV1i1Hn1WHj6wUB7Vt13YTR_XuCMvA,21763
105
- ksxt/parser/__pycache__/koreainvest.cpython-312.pyc,sha256=hLywsOyhmk0sI7-P9y7VYGd5icB1FVjGYc5ULgIKFW4,20909
106
- ksxt/parser/__pycache__/parser.cpython-312.pyc,sha256=tyRu43UBQ7e4T-y1Pk2R4SOVWPPjUmuEdaxvGODxq6Y,9029
107
- ksxt/parser/__pycache__/upbit.cpython-312.pyc,sha256=HU4xvFJ-sxJJTbtnwAGLqDo5rVB856u-YWhcKjHq8IY,23406
108
- ksxt/sample/symbol_sync.ipynb,sha256=dnUOgEKdUuEkDo_6LZjmDtVuNh4PPmCN4Ht7Pz-0L9Y,640081
109
- ksxt/utils/safer.py,sha256=tlXDU9KDxrrM0HT2bv45hkblIgbEYr02NygdYS0jj6c,1289
110
- ksxt/utils/sorter.py,sha256=j7eN1Qy7Wx3cXcWyRWyO1fVq-M24TrXvcfewPR5axF4,227
111
- ksxt/utils/timer.py,sha256=4_rhXdQDFkKshS5utWrgTteIe71tVSTL1zNW-IjOngM,1228
112
- ksxt/utils/__pycache__/safer.cpython-312.pyc,sha256=w-dkk_sa768g7ViIk-YrnhaxKmOu1loBlDFfjHu4PxM,1990
113
- ksxt/utils/__pycache__/sorter.cpython-312.pyc,sha256=fg2obPlufrTQZLqIrzDKkX6bZQkUbdXyzZNqLjZiG3A,625
114
- ksxt/utils/__pycache__/timer.cpython-312.pyc,sha256=9YXIdgCoGYeTR2gV86pZO9dG6_ZZ_IUNjJ318Tnb0m0,2004
115
- ksxt-1.0.7.dist-info/LICENSE.txt,sha256=p2JwEVHDRuJx8UL5Xnt_pFhdC73ppwp7rYQhHqviWB8,1080
116
- ksxt-1.0.7.dist-info/METADATA,sha256=2Yw99Tp0SO2JBNo3-WqphruPpxmkhj3QHCql9BBbcuI,1649
117
- ksxt-1.0.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
118
- ksxt-1.0.7.dist-info/top_level.txt,sha256=XLUhkZCur5Pe0BPUV3J0syngIPz7jBb2YlQR4epo5kI,5
119
- ksxt-1.0.7.dist-info/RECORD,,