unicex 0.14.2__py3-none-any.whl → 0.14.7__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.
- unicex/_abc/uni_client.py +30 -0
- unicex/binance/client.py +25 -25
- unicex/binance/uni_websocket_manager.py +6 -2
- unicex/bitget/client.py +64 -64
- unicex/bitget/uni_websocket_manager.py +6 -2
- unicex/bybit/client.py +29 -29
- unicex/bybit/uni_websocket_manager.py +8 -4
- unicex/enums.py +17 -0
- unicex/gate/client.py +9 -9
- unicex/gate/uni_client.py +1 -2
- unicex/gate/uni_websocket_manager.py +6 -2
- unicex/hyperliquid/client.py +12 -12
- unicex/hyperliquid/uni_client.py +4 -7
- unicex/hyperliquid/uni_websocket_manager.py +6 -2
- unicex/kucoin/adapter.py +108 -13
- unicex/kucoin/client.py +80 -12
- unicex/kucoin/exchange_info.py +12 -9
- unicex/kucoin/uni_client.py +68 -8
- unicex/kucoin/uni_websocket_manager.py +6 -2
- unicex/mexc/client.py +7 -7
- unicex/mexc/uni_client.py +1 -2
- unicex/mexc/uni_websocket_manager.py +6 -2
- unicex/okx/client.py +15 -15
- unicex/okx/uni_websocket_manager.py +6 -2
- unicex/types.py +8 -0
- unicex/utils.py +5 -0
- {unicex-0.14.2.dist-info → unicex-0.14.7.dist-info}/METADATA +2 -1
- {unicex-0.14.2.dist-info → unicex-0.14.7.dist-info}/RECORD +31 -31
- {unicex-0.14.2.dist-info → unicex-0.14.7.dist-info}/WHEEL +0 -0
- {unicex-0.14.2.dist-info → unicex-0.14.7.dist-info}/licenses/LICENSE +0 -0
- {unicex-0.14.2.dist-info → unicex-0.14.7.dist-info}/top_level.txt +0 -0
unicex/kucoin/uni_client.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
__all__ = ["UniClient"]
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
import time
|
|
4
5
|
from typing import overload
|
|
5
6
|
|
|
6
7
|
from unicex._abc import IUniClient
|
|
7
|
-
from unicex.enums import Timeframe
|
|
8
|
+
from unicex.enums import Exchange, Timeframe
|
|
8
9
|
from unicex.types import KlineDict, OpenInterestDict, OpenInterestItem, TickerDailyDict
|
|
9
10
|
|
|
10
11
|
from .adapter import Adapter
|
|
@@ -45,7 +46,7 @@ class UniClient(IUniClient[Client]):
|
|
|
45
46
|
list[str]: Список тикеров.
|
|
46
47
|
"""
|
|
47
48
|
raw_data = await self._client.ticker("FUTURES")
|
|
48
|
-
return Adapter.
|
|
49
|
+
return Adapter.futures_tickers(raw_data, only_usdt)
|
|
49
50
|
|
|
50
51
|
async def last_price(self) -> dict[str, float]:
|
|
51
52
|
"""Возвращает последнюю цену для каждого тикера.
|
|
@@ -103,7 +104,28 @@ class UniClient(IUniClient[Client]):
|
|
|
103
104
|
Возвращает:
|
|
104
105
|
list[KlineDict]: Список свечей для тикера.
|
|
105
106
|
"""
|
|
106
|
-
|
|
107
|
+
if not limit and not all([start_time, end_time]):
|
|
108
|
+
raise ValueError("limit or (start_time and end_time) must be provided")
|
|
109
|
+
|
|
110
|
+
if limit: # Перезаписываем start_time и end_time если указан limit, т.к. по умолчанию HyperLiquid не принимают этот параметр
|
|
111
|
+
if not isinstance(interval, Timeframe):
|
|
112
|
+
raise ValueError("interval must be a Timeframe if limit param provided")
|
|
113
|
+
start_time, end_time = self.limit_to_start_and_end_time(
|
|
114
|
+
interval, limit, use_milliseconds=False
|
|
115
|
+
)
|
|
116
|
+
interval = (
|
|
117
|
+
interval.to_exchange_format(Exchange.KUCOIN)
|
|
118
|
+
if isinstance(interval, Timeframe)
|
|
119
|
+
else interval
|
|
120
|
+
)
|
|
121
|
+
raw_data = await self._client.kline(
|
|
122
|
+
trade_type="SPOT",
|
|
123
|
+
symbol=symbol,
|
|
124
|
+
interval=interval,
|
|
125
|
+
start_at=self.to_seconds(start_time),
|
|
126
|
+
end_at=self.to_seconds(end_time),
|
|
127
|
+
)
|
|
128
|
+
return Adapter.klines(raw_data=raw_data, symbol=symbol)
|
|
107
129
|
|
|
108
130
|
async def futures_klines(
|
|
109
131
|
self,
|
|
@@ -125,15 +147,53 @@ class UniClient(IUniClient[Client]):
|
|
|
125
147
|
Возвращает:
|
|
126
148
|
list[KlineDict]: Список свечей для тикера.
|
|
127
149
|
"""
|
|
128
|
-
|
|
150
|
+
if not limit and not all([start_time, end_time]):
|
|
151
|
+
raise ValueError("limit or (start_time and end_time) must be provided")
|
|
152
|
+
|
|
153
|
+
if limit: # Перезаписываем start_time и end_time если указан limit, т.к. по умолчанию HyperLiquid не принимают этот параметр
|
|
154
|
+
if not isinstance(interval, Timeframe):
|
|
155
|
+
raise ValueError("interval must be a Timeframe if limit param provided")
|
|
156
|
+
start_time, end_time = self.limit_to_start_and_end_time(
|
|
157
|
+
interval, limit, use_milliseconds=False
|
|
158
|
+
)
|
|
159
|
+
interval = (
|
|
160
|
+
interval.to_exchange_format(Exchange.KUCOIN)
|
|
161
|
+
if isinstance(interval, Timeframe)
|
|
162
|
+
else interval
|
|
163
|
+
)
|
|
164
|
+
raw_data = await self._client.kline(
|
|
165
|
+
trade_type="FUTURES",
|
|
166
|
+
symbol=symbol,
|
|
167
|
+
interval=interval,
|
|
168
|
+
start_at=self.to_seconds(start_time),
|
|
169
|
+
end_at=self.to_seconds(end_time),
|
|
170
|
+
)
|
|
171
|
+
return Adapter.klines(raw_data=raw_data, symbol=symbol)
|
|
172
|
+
|
|
173
|
+
async def funding_rate(self, symbol: str | None = None) -> dict[str, float] | float:
|
|
174
|
+
"""Возвращает ставку финансирования для тикера.
|
|
129
175
|
|
|
130
|
-
|
|
131
|
-
|
|
176
|
+
Параметры:
|
|
177
|
+
symbol (`str | None`): Название тикера. На Kucoin параметр обязателен.
|
|
132
178
|
|
|
133
179
|
Возвращает:
|
|
134
|
-
dict[str, float]
|
|
180
|
+
`dict[str, float] | float`: Ставка финансирования в процентах.
|
|
135
181
|
"""
|
|
136
|
-
|
|
182
|
+
if not symbol:
|
|
183
|
+
raise ValueError("Symbol is required to fetch Kucoin funding rate")
|
|
184
|
+
|
|
185
|
+
end_time = int(time.time() * 1000)
|
|
186
|
+
# Kucoin публикует ставку каждые 8 часов, берем окно в 24 часа для гарантии наличия записи.
|
|
187
|
+
start_time = end_time - 24 * 60 * 60 * 1000
|
|
188
|
+
raw_data = await self._client.funding_rate_history(
|
|
189
|
+
symbol=symbol,
|
|
190
|
+
start_at=start_time,
|
|
191
|
+
end_at=end_time,
|
|
192
|
+
)
|
|
193
|
+
adapted_data = Adapter.funding_rate(raw_data)
|
|
194
|
+
if symbol not in adapted_data:
|
|
195
|
+
raise ValueError(f"Kucoin funding rate history is empty for {symbol}")
|
|
196
|
+
return adapted_data[symbol]
|
|
137
197
|
|
|
138
198
|
@overload
|
|
139
199
|
async def open_interest(self, symbol: str) -> OpenInterestItem: ...
|
|
@@ -20,16 +20,20 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
20
20
|
"""Реализация менеджера асинхронных унифицированных вебсокетов."""
|
|
21
21
|
|
|
22
22
|
def __init__(
|
|
23
|
-
self,
|
|
23
|
+
self,
|
|
24
|
+
client: Client | UniClient | None = None,
|
|
25
|
+
logger: LoggerLike | None = None,
|
|
26
|
+
**ws_kwargs: Any,
|
|
24
27
|
) -> None:
|
|
25
28
|
"""Инициализирует унифицированный менеджер вебсокетов.
|
|
26
29
|
|
|
27
30
|
Параметры:
|
|
28
31
|
client (`Client | UniClient | None`): Клиент Kucoin или унифицированный клиент. Нужен для подключения к приватным топикам.
|
|
29
32
|
logger (`LoggerLike | None`): Логгер для записи логов.
|
|
33
|
+
ws_kwargs (`dict[str, Any]`): Дополнительные параметры инициализации, которые будут переданы WebsocketManager/Websocket.
|
|
30
34
|
"""
|
|
31
35
|
super().__init__(client=client, logger=logger)
|
|
32
|
-
self._websocket_manager = WebsocketManager(self._client) # type: ignore
|
|
36
|
+
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
33
37
|
self._adapter = Adapter()
|
|
34
38
|
|
|
35
39
|
@overload
|
unicex/mexc/client.py
CHANGED
|
@@ -6,7 +6,7 @@ from typing import Any
|
|
|
6
6
|
|
|
7
7
|
from unicex._base import BaseClient
|
|
8
8
|
from unicex.exceptions import NotAuthorized
|
|
9
|
-
from unicex.types import RequestMethod
|
|
9
|
+
from unicex.types import NumberLike, RequestMethod
|
|
10
10
|
from unicex.utils import dict_to_query_string, filter_params, generate_hmac_sha256_signature
|
|
11
11
|
|
|
12
12
|
|
|
@@ -289,9 +289,9 @@ class Client(BaseClient):
|
|
|
289
289
|
symbol: str,
|
|
290
290
|
side: str,
|
|
291
291
|
type: str,
|
|
292
|
-
quantity:
|
|
293
|
-
quote_order_quantity:
|
|
294
|
-
price:
|
|
292
|
+
quantity: NumberLike | None = None,
|
|
293
|
+
quote_order_quantity: NumberLike | None = None,
|
|
294
|
+
price: NumberLike | None = None,
|
|
295
295
|
new_client_order_id: str | None = None,
|
|
296
296
|
stp_mode: str | None = None,
|
|
297
297
|
) -> dict:
|
|
@@ -319,9 +319,9 @@ class Client(BaseClient):
|
|
|
319
319
|
symbol: str,
|
|
320
320
|
side: str,
|
|
321
321
|
type: str,
|
|
322
|
-
quantity:
|
|
323
|
-
quote_order_quantity:
|
|
324
|
-
price:
|
|
322
|
+
quantity: NumberLike | None = None,
|
|
323
|
+
quote_order_quantity: NumberLike | None = None,
|
|
324
|
+
price: NumberLike | None = None,
|
|
325
325
|
new_client_order_id: str | None = None,
|
|
326
326
|
stp_mode: str | None = None,
|
|
327
327
|
) -> dict:
|
unicex/mexc/uni_client.py
CHANGED
|
@@ -180,8 +180,7 @@ class UniClient(IUniClient[Client]):
|
|
|
180
180
|
"""
|
|
181
181
|
raw_data = await self._client.futures_ticker()
|
|
182
182
|
adapted_data = Adapter.funding_rate(raw_data=raw_data) # type: ignore[reportArgumentType]
|
|
183
|
-
if symbol
|
|
184
|
-
return adapted_data[symbol]
|
|
183
|
+
return adapted_data[symbol] if symbol else adapted_data
|
|
185
184
|
return adapted_data
|
|
186
185
|
|
|
187
186
|
@overload
|
|
@@ -20,16 +20,20 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
20
20
|
"""Реализация менеджера асинхронных унифицированных вебсокетов."""
|
|
21
21
|
|
|
22
22
|
def __init__(
|
|
23
|
-
self,
|
|
23
|
+
self,
|
|
24
|
+
client: Client | UniClient | None = None,
|
|
25
|
+
logger: LoggerLike | None = None,
|
|
26
|
+
**ws_kwargs: Any,
|
|
24
27
|
) -> None:
|
|
25
28
|
"""Инициализирует унифицированный менеджер вебсокетов.
|
|
26
29
|
|
|
27
30
|
Параметры:
|
|
28
31
|
client (`Client | UniClient | None`): Клиент Mexc или унифицированный клиент. Нужен для подключения к приватным топикам.
|
|
29
32
|
logger (`LoggerLike | None`): Логгер для записи логов.
|
|
33
|
+
ws_kwargs (`dict[str, Any]`): Дополнительные параметры инициализации, которые будут переданы WebsocketManager/Websocket.
|
|
30
34
|
"""
|
|
31
35
|
super().__init__(client=client, logger=logger)
|
|
32
|
-
self._websocket_manager = WebsocketManager(self._client) # type: ignore
|
|
36
|
+
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
33
37
|
self._adapter = Adapter()
|
|
34
38
|
|
|
35
39
|
@overload
|
unicex/okx/client.py
CHANGED
|
@@ -6,7 +6,7 @@ from typing import Any, Literal
|
|
|
6
6
|
|
|
7
7
|
from unicex._base import BaseClient
|
|
8
8
|
from unicex.exceptions import NotAuthorized
|
|
9
|
-
from unicex.types import RequestMethod
|
|
9
|
+
from unicex.types import NumberLike, RequestMethod
|
|
10
10
|
from unicex.utils import filter_params, generate_hmac_sha256_signature
|
|
11
11
|
|
|
12
12
|
|
|
@@ -510,7 +510,7 @@ class Client(BaseClient):
|
|
|
510
510
|
inst_id: str,
|
|
511
511
|
td_mode: Literal["cross", "isolated", "cash", "spot_isolated"],
|
|
512
512
|
ccy: str | None = None,
|
|
513
|
-
px:
|
|
513
|
+
px: NumberLike | None = None,
|
|
514
514
|
leverage: str | None = None,
|
|
515
515
|
trade_quote_ccy: str | None = None,
|
|
516
516
|
) -> dict:
|
|
@@ -540,7 +540,7 @@ class Client(BaseClient):
|
|
|
540
540
|
td_mode: Literal["cross", "isolated", "cash", "spot_isolated"],
|
|
541
541
|
ccy: str | None = None,
|
|
542
542
|
reduce_only: bool | None = None,
|
|
543
|
-
px:
|
|
543
|
+
px: NumberLike | None = None,
|
|
544
544
|
trade_quote_ccy: str | None = None,
|
|
545
545
|
) -> dict:
|
|
546
546
|
"""Получение максимального доступного баланса/эквити.
|
|
@@ -1313,14 +1313,14 @@ class Client(BaseClient):
|
|
|
1313
1313
|
"mmp_and_post_only",
|
|
1314
1314
|
"op_fok",
|
|
1315
1315
|
],
|
|
1316
|
-
sz:
|
|
1316
|
+
sz: NumberLike,
|
|
1317
1317
|
ccy: str | None = None,
|
|
1318
1318
|
cl_ord_id: str | None = None,
|
|
1319
1319
|
tag: str | None = None,
|
|
1320
1320
|
pos_side: Literal["net", "long", "short"] | None = None,
|
|
1321
|
-
px:
|
|
1322
|
-
px_usd:
|
|
1323
|
-
px_vol:
|
|
1321
|
+
px: NumberLike | None = None,
|
|
1322
|
+
px_usd: NumberLike | None = None,
|
|
1323
|
+
px_vol: NumberLike | None = None,
|
|
1324
1324
|
reduce_only: bool | None = None,
|
|
1325
1325
|
tgt_ccy: Literal["base_ccy", "quote_ccy"] | None = None,
|
|
1326
1326
|
ban_amend: bool | None = None,
|
|
@@ -1430,10 +1430,10 @@ class Client(BaseClient):
|
|
|
1430
1430
|
ord_id: str | None = None,
|
|
1431
1431
|
cl_ord_id: str | None = None,
|
|
1432
1432
|
*,
|
|
1433
|
-
new_sz:
|
|
1434
|
-
new_px:
|
|
1435
|
-
new_px_usd:
|
|
1436
|
-
new_px_vol:
|
|
1433
|
+
new_sz: NumberLike | None = None,
|
|
1434
|
+
new_px: NumberLike | None = None,
|
|
1435
|
+
new_px_usd: NumberLike | None = None,
|
|
1436
|
+
new_px_vol: NumberLike | None = None,
|
|
1437
1437
|
cxl_on_fail: bool | None = None,
|
|
1438
1438
|
req_id: str | None = None,
|
|
1439
1439
|
px_amend_type: Literal["0", "1"] | None = None,
|
|
@@ -1987,9 +1987,9 @@ class Client(BaseClient):
|
|
|
1987
1987
|
"ioc",
|
|
1988
1988
|
"optimal_limit_ioc",
|
|
1989
1989
|
],
|
|
1990
|
-
sz:
|
|
1990
|
+
sz: NumberLike,
|
|
1991
1991
|
pos_side: Literal["net", "long", "short"] | None = None,
|
|
1992
|
-
px:
|
|
1992
|
+
px: NumberLike | None = None,
|
|
1993
1993
|
reduce_only: bool | None = None,
|
|
1994
1994
|
tgt_ccy: Literal["base_ccy", "quote_ccy"] | None = None,
|
|
1995
1995
|
attach_algo_orders: list[dict[str, Any]] | None = None,
|
|
@@ -2592,9 +2592,9 @@ class Client(BaseClient):
|
|
|
2592
2592
|
async def convert_contract_coin(
|
|
2593
2593
|
self,
|
|
2594
2594
|
inst_id: str,
|
|
2595
|
-
sz:
|
|
2595
|
+
sz: NumberLike,
|
|
2596
2596
|
type_: Literal["1", "2"] | None = None,
|
|
2597
|
-
px:
|
|
2597
|
+
px: NumberLike | None = None,
|
|
2598
2598
|
unit: Literal["coin", "usds"] | None = None,
|
|
2599
2599
|
op_type: Literal["open", "close"] | None = None,
|
|
2600
2600
|
) -> dict:
|
|
@@ -20,16 +20,20 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
20
20
|
"""Реализация менеджера асинхронных унифицированных вебсокетов."""
|
|
21
21
|
|
|
22
22
|
def __init__(
|
|
23
|
-
self,
|
|
23
|
+
self,
|
|
24
|
+
client: Client | UniClient | None = None,
|
|
25
|
+
logger: LoggerLike | None = None,
|
|
26
|
+
**ws_kwargs: Any,
|
|
24
27
|
) -> None:
|
|
25
28
|
"""Инициализирует унифицированный менеджер вебсокетов.
|
|
26
29
|
|
|
27
30
|
Параметры:
|
|
28
31
|
client (`Client | UniClient | None`): Клиент Okx или унифицированный клиент. Нужен для подключения к приватным топикам.
|
|
29
32
|
logger (`LoggerLike | None`): Логгер для записи логов.
|
|
33
|
+
ws_kwargs (`dict[str, Any]`): Дополнительные параметры инициализации, которые будут переданы WebsocketManager/Websocket.
|
|
30
34
|
"""
|
|
31
35
|
super().__init__(client=client, logger=logger)
|
|
32
|
-
self._websocket_manager = WebsocketManager(self._client) # type: ignore
|
|
36
|
+
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
33
37
|
self._adapter = Adapter()
|
|
34
38
|
|
|
35
39
|
@overload
|
unicex/types.py
CHANGED
|
@@ -8,6 +8,7 @@ __all__ = [
|
|
|
8
8
|
"AggTradeDict",
|
|
9
9
|
"RequestMethod",
|
|
10
10
|
"LoggerLike",
|
|
11
|
+
"NumberLike",
|
|
11
12
|
"OpenInterestDict",
|
|
12
13
|
"OpenInterestItem",
|
|
13
14
|
"TickerInfoItem",
|
|
@@ -26,6 +27,13 @@ type LoggerLike = LoggingLogger | loguru.Logger
|
|
|
26
27
|
type RequestMethod = Literal["GET", "POST", "PUT", "DELETE", "PATCH"]
|
|
27
28
|
"""Типы методов HTTP запросов."""
|
|
28
29
|
|
|
30
|
+
type NumberLike = str | int | float
|
|
31
|
+
"""
|
|
32
|
+
Числовое значение для аргументов API-клиентов.
|
|
33
|
+
API бирж принимают числа как str, int или float — значение
|
|
34
|
+
передаётся без преобразований и сериализуется HTTP-клиентом.
|
|
35
|
+
"""
|
|
36
|
+
|
|
29
37
|
|
|
30
38
|
class TickerDailyItem(TypedDict):
|
|
31
39
|
"""Статистика одного тикера за последние 24 часа."""
|
unicex/utils.py
CHANGED
|
@@ -215,4 +215,9 @@ def symbol_to_exchange_format(
|
|
|
215
215
|
return symbol.removesuffix("USDT") # Вот тут мб и не так, там вроде что-то к USDC
|
|
216
216
|
else:
|
|
217
217
|
return symbol.removesuffix("USDT") # Вот тут мб и не так, там вроде что-то к USDC
|
|
218
|
+
elif exchange == Exchange.KUCOIN:
|
|
219
|
+
if market_type == MarketType.FUTURES:
|
|
220
|
+
return symbol_upper + "M"
|
|
221
|
+
else:
|
|
222
|
+
return symbol_upper.replace("USDT", "-USDT")
|
|
218
223
|
return symbol_upper
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: unicex
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.7
|
|
4
4
|
Summary: Unified Crypto Exchange API
|
|
5
5
|
Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -62,6 +62,7 @@ Dynamic: license-file
|
|
|
62
62
|
| **Hyperliquid** | ✓ | ✓ | ✓ | ✓ | ✓ | | |
|
|
63
63
|
| **Mexc** | ✓ | ✓ | ✓ | | ✓ | | ✓ |
|
|
64
64
|
| **Okx** | ✓ | ✓ | ✓ | | ✓ | | ✓ |
|
|
65
|
+
| **Kucoin** | | | | | ✓ | | |
|
|
65
66
|
---
|
|
66
67
|
|
|
67
68
|
|
|
@@ -1,71 +1,71 @@
|
|
|
1
1
|
unicex/__init__.py,sha256=todVh-ePhe2HSqndToGZtpIk5fUow4pbzTFmL3X98tQ,6318
|
|
2
|
-
unicex/enums.py,sha256=
|
|
2
|
+
unicex/enums.py,sha256=0PCSOyeTTMZ40d5x7qeJ2SfrTeUYQvPhQFw8ElbzIMM,10276
|
|
3
3
|
unicex/exceptions.py,sha256=r-xZzX78VuxVnI5pe99AM8FIiGcdIUDcF5CaTkQ4NE0,2213
|
|
4
4
|
unicex/extra.py,sha256=Ki0ZvF88BNpnt-k-c-AgdUig80f-Yi1gTt8qqO7M5ss,13492
|
|
5
5
|
unicex/mapper.py,sha256=yncbMCecZ3nvGtUyvWaiQAQ3RWGAAmm3MEi6Y7YJUG4,5203
|
|
6
|
-
unicex/types.py,sha256
|
|
7
|
-
unicex/utils.py,sha256=
|
|
6
|
+
unicex/types.py,sha256=-ajW_vV-3Pt04PEOiTYPvJR4QtV0gYnsjD4_9bxd1xM,4980
|
|
7
|
+
unicex/utils.py,sha256=43Sp61NJuO50HRbtBlZJW_yO_PRgp8Jgg4vxj64oRM8,8241
|
|
8
8
|
unicex/_abc/__init__.py,sha256=fxZjNFJFeFwWTXz8iSDe7eCWwE6xfFwFwAuG6l-TI8A,289
|
|
9
9
|
unicex/_abc/exchange_info.py,sha256=NHBQAjknIRebyjl3musrvneN5u9vKYXjAca5PmTvJTw,9545
|
|
10
|
-
unicex/_abc/uni_client.py,sha256=
|
|
10
|
+
unicex/_abc/uni_client.py,sha256=Ccp_zKFAzu9eUO7G-6WJnOjN61id0iSeWn6xqxMyHQ8,14992
|
|
11
11
|
unicex/_abc/uni_websocket_manager.py,sha256=yYKypPkIe3rKfWBuTsS8rkwIPljpd1588CYDkeTOYqE,9905
|
|
12
12
|
unicex/_base/__init__.py,sha256=0TmevATGnRB3qow6tkCR8dQKNZCWKeib6YQjNJ4a1b0,236
|
|
13
13
|
unicex/_base/client.py,sha256=asIIQLZlRwwmUDvxveSv7aCvth54iiSRJdz19bxGorI,8904
|
|
14
14
|
unicex/_base/websocket.py,sha256=haSV3dSgkT352n8knpLm_iI4ZlUGWWKFCB3k5Ua2esU,12542
|
|
15
15
|
unicex/binance/__init__.py,sha256=sDk4ZjakRdpFMaMSpOCfqjf6ZPfAS9tlrt4WlDHtDkw,932
|
|
16
16
|
unicex/binance/adapter.py,sha256=JbUFyjnDAFtyuYYrh90YeOvQOZQ6faim0nWS6U0NxXw,8799
|
|
17
|
-
unicex/binance/client.py,sha256=
|
|
17
|
+
unicex/binance/client.py,sha256=LXHZJpX7HpaUTlQcjuGEjm3qin4mczemJnCay1LncZo,62444
|
|
18
18
|
unicex/binance/exchange_info.py,sha256=LNDkgBC5HB3JxtIBi39puqDg6LIVWqIWjT-6akDxtMs,2437
|
|
19
19
|
unicex/binance/uni_client.py,sha256=W4yxiU0kkJKPJjimhv4KAWreuEBwt7GgrWXefcw5BEA,8365
|
|
20
|
-
unicex/binance/uni_websocket_manager.py,sha256=
|
|
20
|
+
unicex/binance/uni_websocket_manager.py,sha256=KnSz3o0iKx-o4ktkM7DTJZ_9xHTXFzwWnOb2pxmAe5Y,8941
|
|
21
21
|
unicex/binance/user_websocket.py,sha256=jVTId_fSAF0VKKD2matPlE1fBpYT8HQ6WqHxGxcVdKw,7887
|
|
22
22
|
unicex/binance/websocket_manager.py,sha256=Idrq0Qzi14QgpIG5d77S-r1h_BvRXphcxY2BT2IOQXA,45511
|
|
23
23
|
unicex/bitget/__init__.py,sha256=8govSOEyWjA62js-ZTQIiSYWSmcEUFSC9hVTpS8eosk,929
|
|
24
24
|
unicex/bitget/adapter.py,sha256=frQBOKFsIB8mXc_Ime2-Iby_nRQlSpzXjshC5AxoDTA,7741
|
|
25
|
-
unicex/bitget/client.py,sha256=
|
|
25
|
+
unicex/bitget/client.py,sha256=0NFOixkMb0AcC5e-LytUd4Y1jxCO6Lv6-I4XlOGNtxQ,90618
|
|
26
26
|
unicex/bitget/exchange_info.py,sha256=_UMvAqP0zcpmv9dkovkFxrXLlol6q8_v7-0sy6FSfrE,1959
|
|
27
27
|
unicex/bitget/uni_client.py,sha256=MrXAmthTDTEQZ1ZY3LuqkCKL1bw_mKHMdiV4XiRFO-M,8641
|
|
28
|
-
unicex/bitget/uni_websocket_manager.py,sha256=
|
|
28
|
+
unicex/bitget/uni_websocket_manager.py,sha256=ybf-_HPU-aQy7M27rfKDPSdxjI5ZzkfKCzzim-WA5l8,10038
|
|
29
29
|
unicex/bitget/user_websocket.py,sha256=tlkv7Rmsw_FSfCJnEMOK_9jRsXRk2Ah_slqG8C-uhuo,129
|
|
30
30
|
unicex/bitget/websocket_manager.py,sha256=2OhH2gKy2gN03oYeCFvf3_l6RA29dDOvpajGhbXI9Zw,9886
|
|
31
31
|
unicex/bybit/__init__.py,sha256=SrMBh6K5zUt4JheWUpNUYNb1NCDr2ujTFv4IDguaGZI,926
|
|
32
32
|
unicex/bybit/adapter.py,sha256=U6QP2eGefZqfXq7H4P1G9M23HieAjmylb5FnrHISn5s,8147
|
|
33
|
-
unicex/bybit/client.py,sha256=
|
|
33
|
+
unicex/bybit/client.py,sha256=XBIQ0ERQ1fZ53_8vPUHHQN0SqIx3ZbOTIoPQInit194,61789
|
|
34
34
|
unicex/bybit/exchange_info.py,sha256=S5IrN5c-jW0QbuO4LGH5rluO6qo7ib-wL-8LJWNOZgI,2422
|
|
35
35
|
unicex/bybit/uni_client.py,sha256=0wmIRRgofuJXWvZMB1gHwuIEfoWuPhLJXthmK1f9w40,8382
|
|
36
|
-
unicex/bybit/uni_websocket_manager.py,sha256=
|
|
36
|
+
unicex/bybit/uni_websocket_manager.py,sha256=HhgFcGo2yQLT5knU3cFaKN85jJP0Z9EIwZ-zFlMQhDo,10621
|
|
37
37
|
unicex/bybit/user_websocket.py,sha256=IGGEnwyWs5jOppgK_R7SisBDvsiF1_piTswBrdQOgDg,128
|
|
38
38
|
unicex/bybit/websocket_manager.py,sha256=ePHvngoqoVPr6p-BayoEGhCuRK-cJ69CAPzF94qTalQ,15404
|
|
39
39
|
unicex/gate/__init__.py,sha256=dsKvhQhDcw4_w0S4c9IjKkCoOg4DCUtSecEUOlfstug,929
|
|
40
40
|
unicex/gate/adapter.py,sha256=Oj9_wt-6EkRIlxjwGv2knuH5t4BwHyo1M58abR_1Oak,6929
|
|
41
|
-
unicex/gate/client.py,sha256=
|
|
41
|
+
unicex/gate/client.py,sha256=Mu8qropad8DTSDuG6mxyn6ZW2hwQK47PZnfb5yOEt2M,53828
|
|
42
42
|
unicex/gate/exchange_info.py,sha256=ANzfe4mqxtLnj2TBJJxoc31KUosvxdApp1_xYrRNQDs,2300
|
|
43
|
-
unicex/gate/uni_client.py,sha256=
|
|
44
|
-
unicex/gate/uni_websocket_manager.py,sha256=
|
|
43
|
+
unicex/gate/uni_client.py,sha256=EVhQ4KF7F6y67b2oARcYzSrSnHTFsUjoXK1vLntK6u0,9649
|
|
44
|
+
unicex/gate/uni_websocket_manager.py,sha256=_baRRpC0zUgAqpn6PygULhGkO1mhlepyIo0kOpUItRM,9574
|
|
45
45
|
unicex/gate/user_websocket.py,sha256=4qZX9N2RjlJ-e25Eszz12OeCM17j5DdXVimBVaLj53w,129
|
|
46
46
|
unicex/gate/websocket_manager.py,sha256=phtHbvAGQD3mtewCUxBuuD1Nj0FXN6oZrd7tnmT7c2c,25832
|
|
47
47
|
unicex/hyperliquid/__init__.py,sha256=qGTAkwfXLvknvHET_iA7Qml3jkxxxA0moU_98nGTcVU,944
|
|
48
48
|
unicex/hyperliquid/adapter.py,sha256=0aULPGDhppjbRvShbR49GNt6qmw4o_CmrFi_xGVRLHg,10612
|
|
49
|
-
unicex/hyperliquid/client.py,sha256=
|
|
49
|
+
unicex/hyperliquid/client.py,sha256=Arpu58t4y7CIHIukCu5Y13cKpvFdgKPEDeK80C8FLMo,84320
|
|
50
50
|
unicex/hyperliquid/exchange_info.py,sha256=D1h1fvH9DycRq-xDTZ_-Y1NC2JCp165IyWMXs39VjFI,4936
|
|
51
|
-
unicex/hyperliquid/uni_client.py,sha256=
|
|
52
|
-
unicex/hyperliquid/uni_websocket_manager.py,sha256=
|
|
51
|
+
unicex/hyperliquid/uni_client.py,sha256=lNR0r4nQduiH9uPZ1uw2mNg94ULfsTM7OF95HpNjC7M,15496
|
|
52
|
+
unicex/hyperliquid/uni_websocket_manager.py,sha256=cGpIu3OMcCc07ATOt6-Fu10f4sc_83bG455YaNdU57Y,9579
|
|
53
53
|
unicex/hyperliquid/user_websocket.py,sha256=BKD9ap2bx5DwpkkwwecfOTVedrZBR9eMAITgCBgg02w,134
|
|
54
54
|
unicex/hyperliquid/websocket_manager.py,sha256=mlsQYykFHfQr-k6AZ3b6JfK7DnnhGtt4MRemZg4O9X4,17991
|
|
55
55
|
unicex/kucoin/__init__.py,sha256=7RSMUDiqjmj8T1cvotlRu8LKH-Ok9UlajSrlXyq1mnc,929
|
|
56
|
-
unicex/kucoin/adapter.py,sha256=
|
|
57
|
-
unicex/kucoin/client.py,sha256=
|
|
58
|
-
unicex/kucoin/exchange_info.py,sha256=
|
|
59
|
-
unicex/kucoin/uni_client.py,sha256=
|
|
60
|
-
unicex/kucoin/uni_websocket_manager.py,sha256=
|
|
56
|
+
unicex/kucoin/adapter.py,sha256=pswk93o6KuVt-j9-P9i5URqdhegQLR7h1Rh-KnZqXU0,7210
|
|
57
|
+
unicex/kucoin/client.py,sha256=16WzbNZ9ZmepZfz7OHwbV5NkBnphIjjAvlAXZZXd71c,3789
|
|
58
|
+
unicex/kucoin/exchange_info.py,sha256=DNraBMxgMiZVSZwDmgg7v7D11_cBnqMsO95u9ITFxFk,1933
|
|
59
|
+
unicex/kucoin/uni_client.py,sha256=KBEAs-5B8mU4QmaCGKy87i2GimJklkvKaAH3_F-JEOg,9916
|
|
60
|
+
unicex/kucoin/uni_websocket_manager.py,sha256=rvrhQkvktZhbfb505KmkiBtf7Y4drClgtq5ysaiXoYk,9574
|
|
61
61
|
unicex/kucoin/user_websocket.py,sha256=Tx0yuGpf2HrPbcOHHZioYjVp6LBfagOKF-zzD3UM0Ok,129
|
|
62
62
|
unicex/kucoin/websocket_manager.py,sha256=GNNpzxONgTuTByrsGk1MNMlj5-zx5vs_WBTgssYSYDQ,270
|
|
63
63
|
unicex/mexc/__init__.py,sha256=lltANqM_2P-fmF5j8o5-pjmORPuK6C5sVjcQhuUU_R0,923
|
|
64
64
|
unicex/mexc/adapter.py,sha256=6Ioy6IvXHDRKVBTXnofUYWubVvGx5lUCOxKA8R_ynxY,9862
|
|
65
|
-
unicex/mexc/client.py,sha256=
|
|
65
|
+
unicex/mexc/client.py,sha256=FBUSs4Hu2DExVKPKJG9OawbqidACPFJ1U_1md05E3Mc,31004
|
|
66
66
|
unicex/mexc/exchange_info.py,sha256=z2bQsVU0ciXV2_DFkueZHo1X35KIK2alD-7ZZjNg5Kc,1763
|
|
67
|
-
unicex/mexc/uni_client.py,sha256=
|
|
68
|
-
unicex/mexc/uni_websocket_manager.py,sha256=
|
|
67
|
+
unicex/mexc/uni_client.py,sha256=_nYIl46-yvyUVKZxkSLCHRxgTnM75TmZqaxCsUp8woI,9482
|
|
68
|
+
unicex/mexc/uni_websocket_manager.py,sha256=zN9U7geR1jO5VLWsjsTdITrlhyCnan5hiKO2p0gBhBQ,9572
|
|
69
69
|
unicex/mexc/user_websocket.py,sha256=l77-e6i0B2btd7a5IcCytbgswnV171NqOhunTcbaq48,127
|
|
70
70
|
unicex/mexc/websocket_manager.py,sha256=cBfgCSnSs3XrcMBXb9awnalvKutSjs97DhTyWn0ZEQk,21853
|
|
71
71
|
unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py,sha256=3bP1pGjeO-Norp7DhhdrQ4FcQTEKkCiL2mLagyoJHp8,1879
|
|
@@ -88,14 +88,14 @@ unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py,sha256=_V0StMrDE7-bsdRPQd
|
|
|
88
88
|
unicex/mexc/_spot_ws_proto/__init__.py,sha256=L8Jft1713_M8CLR9drgSjLBdY_46sPT3O9zDFlxYvgc,11431
|
|
89
89
|
unicex/okx/__init__.py,sha256=Ljbw3AP0YrPF5bIPJi_3JP3B_czR9xurYHI24rgWk9M,920
|
|
90
90
|
unicex/okx/adapter.py,sha256=FSyLLHX7BlCp3chsloAdRAeUM5WBFkdaxWKCHTbXJYs,5346
|
|
91
|
-
unicex/okx/client.py,sha256=
|
|
91
|
+
unicex/okx/client.py,sha256=N7ma49ToMGjYiTvuoV52-NaG-vLx3s087KF67dQCRBs,91079
|
|
92
92
|
unicex/okx/exchange_info.py,sha256=gkTwYnXgswa1FGLXdKo9qLYqZA0BS9VefpALhR4_t-Q,1772
|
|
93
93
|
unicex/okx/uni_client.py,sha256=E_Wod0JSGt1K6k1mAIWnOv350pELbv-nic7g1KgOuos,8694
|
|
94
|
-
unicex/okx/uni_websocket_manager.py,sha256=
|
|
94
|
+
unicex/okx/uni_websocket_manager.py,sha256=CR877hj4pKwJbYlmKJvETl1Zlezpd81ZdzHkAMCYIwA,9571
|
|
95
95
|
unicex/okx/user_websocket.py,sha256=8c9kpm-xVa729pW93OKUGLHaE9MY0uzEpjIgNIFRF80,126
|
|
96
96
|
unicex/okx/websocket_manager.py,sha256=wROXTUDqKzOE-wDnCtXso_MC4SzfPuPols5aPg_Z3y4,26027
|
|
97
|
-
unicex-0.14.
|
|
98
|
-
unicex-0.14.
|
|
99
|
-
unicex-0.14.
|
|
100
|
-
unicex-0.14.
|
|
101
|
-
unicex-0.14.
|
|
97
|
+
unicex-0.14.7.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
|
|
98
|
+
unicex-0.14.7.dist-info/METADATA,sha256=30HlV0w9TFPBO42DKS-BqaE8ApYhn9D7J1hAg7kXoGE,11858
|
|
99
|
+
unicex-0.14.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
100
|
+
unicex-0.14.7.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
|
|
101
|
+
unicex-0.14.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|