unicex 0.17.8__py3-none-any.whl → 0.17.10__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.
@@ -43,7 +43,7 @@ class UniWebsocketManager(IUniWebsocketManager):
43
43
  """
44
44
  is_sub_msg = raw_msg.get("event") == "subscribe"
45
45
  is_pong_msg = raw_msg.get("event") == "pong"
46
- is_pong_msg_2 = raw_msg.get("channel") == "spot.pong"
46
+ is_pong_msg_2 = raw_msg.get("channel") in ["spot.pong", "futures.pong"]
47
47
  return is_sub_msg or is_pong_msg or is_pong_msg_2
48
48
 
49
49
  def _normalize_symbols(
@@ -1,11 +1,121 @@
1
1
  __all__ = ["WebsocketManager"]
2
2
 
3
+ import json
4
+ import time
5
+ from collections.abc import Awaitable, Callable, Sequence
6
+ from typing import Any, Literal
3
7
 
4
- from collections.abc import Awaitable, Callable
5
- from typing import Any
8
+ from unicex._base import Websocket
9
+ from unicex.utils import validate_single_symbol_args
10
+
11
+ from .client import Client
6
12
 
7
13
  type CallbackType = Callable[[Any], Awaitable[None]]
8
14
 
9
15
 
10
16
  class WebsocketManager:
11
17
  """Менеджер асинхронных вебсокетов для Kucoin."""
18
+
19
+ _SPOT_URL: str = "wss://x-push-spot.kucoin.com"
20
+ """Базовый URL для вебсокета на спот."""
21
+
22
+ _FUTURES_URL: str = "wss://x-push-futures.kucoin.com"
23
+ """Базовый URL для вебсокета на фьючерсы."""
24
+
25
+ def __init__(self, client: Client | None = None, **ws_kwargs: Any) -> None:
26
+ """Инициализирует менеджер вебсокетов для Kucoin.
27
+
28
+ Параметры:
29
+ client (`Client | None`): Клиент для выполнения запросов. Нужен, чтобы открыть приватные вебсокеты.
30
+ ws_kwargs (`dict[str, Any]`): Дополнительные аргументы, которые прокидываются в `Websocket`.
31
+ """
32
+ self.client = client
33
+ self._ws_kwargs = ws_kwargs
34
+
35
+ def _get_url(self, trade_type: Literal["SPOT", "FUTURES"]) -> str:
36
+ """Возвращает URL для указанного типа рынка."""
37
+ if trade_type == "SPOT":
38
+ return self._SPOT_URL
39
+ if trade_type == "FUTURES":
40
+ return self._FUTURES_URL
41
+ raise ValueError(f"Unsupported trade type: {trade_type}")
42
+
43
+ def _normalize_depth(self, depth: str | int) -> str:
44
+ """Нормализует значение глубины стакана."""
45
+ depth_value = str(depth)
46
+ if depth_value not in {"1", "5", "50", "increment"}:
47
+ raise ValueError("depth must be one of: 1, 5, 50, increment")
48
+ return depth_value
49
+
50
+ def _build_subscription_messages(
51
+ self,
52
+ trade_type: Literal["SPOT", "FUTURES"],
53
+ depth: str,
54
+ symbols: Sequence[str],
55
+ rpi_filter: Literal[0, 1],
56
+ request_id: str | None = None,
57
+ ) -> list[str]:
58
+ """Формирует сообщения для подписки."""
59
+ base_id = int(time.time() * 1000)
60
+ messages: list[str] = []
61
+ for index, symbol in enumerate(symbols):
62
+ payload = {
63
+ "id": request_id or str(base_id + index),
64
+ "action": "SUBSCRIBE",
65
+ "channel": "obu",
66
+ "tradeType": trade_type,
67
+ "symbol": symbol.upper(),
68
+ "depth": depth,
69
+ "rpiFilter": rpi_filter,
70
+ }
71
+ messages.append(json.dumps(payload))
72
+ return messages
73
+
74
+ def orderbook(
75
+ self,
76
+ callback: CallbackType,
77
+ trade_type: Literal["SPOT", "FUTURES"],
78
+ depth: Literal["1", "5", "50", "increment"] | int = "1",
79
+ symbol: str | None = None,
80
+ symbols: Sequence[str] | None = None,
81
+ rpi_filter: Literal[0, 1] = 0,
82
+ request_id: str | None = None,
83
+ ) -> Websocket:
84
+ """Создает вебсокет для получения order book.
85
+
86
+ Параметры:
87
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
88
+ trade_type (`Literal["SPOT", "FUTURES"]`): Тип рынка.
89
+ depth (`Literal["1", "5", "50", "increment"] | int`): Глубина стакана.
90
+ symbol (`str | None`): Один символ для подписки.
91
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
92
+ rpi_filter (`Literal[0, 1]`): Фильтр RPI. Доступен только для фьючерсов (depth=5/50).
93
+ request_id (`str | None`): Опциональный идентификатор запроса.
94
+
95
+ Возвращает:
96
+ `Websocket`: Объект для управления вебсокет соединением.
97
+ """
98
+ validate_single_symbol_args(symbol, symbols)
99
+
100
+ depth_value = self._normalize_depth(depth)
101
+ if rpi_filter not in (0, 1):
102
+ raise ValueError("rpi_filter must be 0 or 1")
103
+ if trade_type == "SPOT" and rpi_filter == 1:
104
+ raise ValueError("rpi_filter=1 is supported only for FUTURES")
105
+ if rpi_filter == 1 and depth_value not in {"5", "50"}:
106
+ raise ValueError("rpi_filter=1 supports only depth=5 or depth=50")
107
+
108
+ tickers = [symbol] if symbol else symbols
109
+ subscription_messages = self._build_subscription_messages(
110
+ trade_type=trade_type,
111
+ depth=depth_value,
112
+ symbols=tickers, # type: ignore[arg-type]
113
+ rpi_filter=rpi_filter,
114
+ request_id=request_id,
115
+ )
116
+ return Websocket(
117
+ callback=callback,
118
+ url=self._get_url(trade_type),
119
+ subscription_messages=subscription_messages,
120
+ **self._ws_kwargs,
121
+ )
@@ -1,335 +1,335 @@
1
- from __future__ import annotations
2
- from typing import Any, Literal, Optional, Self, Union
3
-
4
-
5
- # from proto import PublicDealsV3Api_pb2 as PublicDealsV3Api__pb2
6
- # from proto import PublicIncreaseDepthsV3Api_pb2 as PublicIncreaseDepthsV3Api__pb2
7
- # from proto import PublicLimitDepthsV3Api_pb2 as PublicLimitDepthsV3Api__pb2
8
- # from proto import PrivateOrdersV3Api_pb2 as PrivateOrdersV3Api__pb2
9
- # from proto import PublicBookTickerV3Api_pb2 as PublicBookTickerV3Api__pb2
10
- # from proto import PrivateDealsV3Api_pb2 as PrivateDealsV3Api__pb2
11
- # from proto import PrivateAccountV3Api_pb2 as PrivateAccountV3Api__pb2
12
- # from proto import PublicSpotKlineV3Api_pb2 as PublicSpotKlineV3Api__pb2
13
- # from proto import PublicMiniTickerV3Api_pb2 as PublicMiniTickerV3Api__pb2
14
- # from proto import PublicMiniTickersV3Api_pb2 as PublicMiniTickersV3Api__pb2
15
- # from proto import PublicBookTickerBatchV3Api_pb2 as PublicBookTickerBatchV3Api__pb2
16
- # from proto import PublicIncreaseDepthsBatchV3Api_pb2 as PublicIncreaseDepthsBatchV3Api__pb2
17
- # from proto import PublicAggreDepthsV3Api_pb2 as PublicAggreDepthsV3Api__pb2
18
- # from proto import PublicAggreDealsV3Api_pb2 as PublicAggreDealsV3Api__pb2
19
- # from proto import PublicAggreBookTickerV3Api_pb2 as PublicAggreBookTickerV3Api__pb2
20
- # from proto import PushDataV3ApiWrapper_pb2 as PushDataV3ApiWrapper__pb2
21
-
22
- from . import PublicDealsV3Api_pb2 as PublicDealsV3Api__pb2
23
- from . import PublicIncreaseDepthsV3Api_pb2 as PublicIncreaseDepthsV3Api__pb2
24
- from . import PublicLimitDepthsV3Api_pb2 as PublicLimitDepthsV3Api__pb2
25
- from . import PrivateOrdersV3Api_pb2 as PrivateOrdersV3Api__pb2
26
- from . import PublicBookTickerV3Api_pb2 as PublicBookTickerV3Api__pb2
27
- from . import PrivateDealsV3Api_pb2 as PrivateDealsV3Api__pb2
28
- from . import PrivateAccountV3Api_pb2 as PrivateAccountV3Api__pb2
29
- from . import PublicSpotKlineV3Api_pb2 as PublicSpotKlineV3Api__pb2
30
- from . import PublicMiniTickerV3Api_pb2 as PublicMiniTickerV3Api__pb2
31
- from . import PublicMiniTickersV3Api_pb2 as PublicMiniTickersV3Api__pb2
32
- from . import PublicBookTickerBatchV3Api_pb2 as PublicBookTickerBatchV3Api__pb2
33
- from . import PublicIncreaseDepthsBatchV3Api_pb2 as PublicIncreaseDepthsBatchV3Api__pb2
34
- from . import PublicAggreDepthsV3Api_pb2 as PublicAggreDepthsV3Api__pb2
35
- from . import PublicAggreDealsV3Api_pb2 as PublicAggreDealsV3Api__pb2
36
- from . import PublicAggreBookTickerV3Api_pb2 as PublicAggreBookTickerV3Api__pb2
37
- from . import PushDataV3ApiWrapper_pb2 as PushDataV3ApiWrapper__pb2
38
-
39
-
40
- class ProtoTyping:
41
- class protoc:
42
- def __call__(self, *args: Any, **kwds: Any) -> Self: ...
43
- def ParseFromString(self, data: bytes) -> Self: ...
44
-
45
- # PublicDealsV3Api__pb2
46
-
47
- class PublicDealsV3ApiItem:
48
- price: str
49
- quantity: str
50
- tradeType: int
51
- time: int
52
-
53
- class PublicDealsV3Api(protoc):
54
- deals: list[ProtoTyping.PublicDealsV3ApiItem]
55
- eventType: str
56
-
57
- # PublicIncreaseDepthsV3Api__pb2
58
-
59
- class PublicIncreaseDepthV3ApiItem(protoc):
60
- price: str
61
- quantity: str
62
-
63
- class PublicIncreaseDepthsV3Api(protoc):
64
- asks: list[ProtoTyping.PublicIncreaseDepthV3ApiItem]
65
- bids: list[ProtoTyping.PublicIncreaseDepthV3ApiItem]
66
- eventType: str
67
- version: str
68
-
69
- # PublicLimitDepthsV3Api__pb2
70
-
71
- class PublicLimitDepthV3ApiItem(protoc):
72
- price: str
73
- quantity: str
74
-
75
- class PublicLimitDepthsV3Api(protoc):
76
- asks: list[ProtoTyping.PublicLimitDepthV3ApiItem]
77
- bids: list[ProtoTyping.PublicLimitDepthV3ApiItem]
78
- eventType: str
79
- version: str
80
-
81
- # PrivateOrdersV3Api__pb2
82
-
83
- class PrivateOrdersV3Api(protoc):
84
- id: str
85
- clientId: str
86
- price: str
87
- quantity: str
88
- amount: str
89
- avgPrice: str
90
- orderType: int
91
- tradeType: int
92
- isMaker: bool
93
- remainAmount: str
94
- remainQuantity: str
95
- lastDealQuantity: Optional[str]
96
- cumulativeQuantity: str
97
- cumulativeAmount: str
98
- status: int
99
- createTime: int
100
- market: Optional[str]
101
- triggerType: Optional[int]
102
- triggerPrice: Optional[str]
103
- state: Optional[int]
104
- ocoId: Optional[str]
105
- routeFactor: Optional[str]
106
- symbolId: Optional[str]
107
- marketId: Optional[str]
108
- marketCurrencyId: Optional[str]
109
- currencyId: Optional[str]
110
-
111
- # PublicBookTickerV3Api__pb2
112
-
113
- class PublicBookTickerV3Api(protoc):
114
- bidPrice: str
115
- bidQuantity: str
116
- askPrice: str
117
- askQuantity: str
118
-
119
- # PrivateDealsV3Api__pb2
120
-
121
- class PrivateDealsV3Api(protoc):
122
- price: str
123
- quantity: str
124
- amount: str
125
- tradeType: int
126
- isMaker: bool
127
- isSelfTrade: bool
128
- tradeId: str
129
- clientOrderId: str
130
- orderId: str
131
- feeAmount: str
132
- feeCurrency: str
133
- time: int
134
-
135
- # PrivateAccountV3Api__pb2
136
-
137
- class PrivateAccountV3Api(protoc):
138
- vcoinName: str
139
- coinId: str
140
- balanceAmount: str
141
- balanceAmountChange: str
142
- frozenAmount: str
143
- frozenAmountChange: str
144
- type: str
145
- time: int
146
-
147
- # PublicSpotKlineV3Api__pb2
148
-
149
- class PublicSpotKlineV3Api(protoc):
150
- interval: Literal[
151
- "Min1",
152
- "Min5",
153
- "Min15",
154
- "Min30",
155
- "Min60",
156
- "Hour4",
157
- "Hour8",
158
- "Day1",
159
- "Week1",
160
- "Month1",
161
- ]
162
- windowStart: int
163
- openingPrice: str
164
- closingPrice: str
165
- highestPrice: str
166
- lowestPrice: str
167
- volume: str
168
- amount: str
169
- windowEnd: int
170
-
171
- # PublicMiniTickerV3Api__pb2
172
-
173
- class PublicMiniTickerV3Api(protoc):
174
- symbol: str
175
- price: str
176
- rate: str
177
- zonedRate: str
178
- high: str
179
- low: str
180
- volume: str
181
- quantity: str
182
- lastCloseRate: str
183
- lastCloseZonedRate: str
184
- lastCloseHigh: str
185
- lastCloseLow: str
186
-
187
- # PublicMiniTickersV3Api__pb2
188
-
189
- class PublicMiniTickersV3Api(protoc):
190
- items: list[ProtoTyping.PublicMiniTickerV3Api]
191
-
192
- # PublicBookTickerBatchV3Api__pb2
193
-
194
- class PublicBookTickerBatchV3Api(protoc):
195
- items: list[ProtoTyping.PublicBookTickerV3Api]
196
-
197
- # PublicIncreaseDepthsBatchV3Api__pb2
198
-
199
- class PublicIncreaseDepthsBatchV3Api(protoc):
200
- items: list[ProtoTyping.PublicIncreaseDepthsV3Api]
201
- eventType: str
202
-
203
- # PublicAggreDepthsV3Api__pb2
204
-
205
- class PublicAggreDepthV3ApiItem(protoc):
206
- price: str
207
- quantity: str
208
-
209
- class PublicAggreDepthsV3Api(protoc):
210
- asks: list[ProtoTyping.PublicAggreDepthV3ApiItem]
211
- bids: list[ProtoTyping.PublicAggreDepthV3ApiItem]
212
- eventType: str
213
- fromVersion: str
214
- toVersion: str
215
-
216
- # PublicAggreDealsV3Api__pb2
217
-
218
- class PublicAggreDealsV3ApiItem(protoc):
219
- price: str
220
- quantity: str
221
- tradeType: int
222
- time: int
223
-
224
- class PublicAggreDealsV3Api(protoc):
225
- deals: list[ProtoTyping.PublicAggreDealsV3ApiItem]
226
- eventType: str
227
-
228
- # PublicAggreBookTickerV3Api__pb2
229
-
230
- class PublicAggreBookTickerV3Api(protoc):
231
- bidPrice: str
232
- bidQuantity: str
233
- askPrice: str
234
- askQuantity: str
235
-
236
- class PushDataV3ApiWrapper(protoc):
237
- channel: str
238
-
239
- publicDeals: ProtoTyping.PublicDealsV3Api
240
- publicIncreaseDepths: ProtoTyping.PublicIncreaseDepthsV3Api
241
- publicLimitDepths: ProtoTyping.PublicLimitDepthsV3Api
242
- privateOrders: ProtoTyping.PrivateOrdersV3Api
243
- publicBookTicker: ProtoTyping.PublicBookTickerV3Api
244
- privateDeals: ProtoTyping.PrivateDealsV3Api
245
- privateAccount: ProtoTyping.PrivateAccountV3Api
246
- publicSpotKline: ProtoTyping.PublicSpotKlineV3Api
247
- publicMiniTicker: ProtoTyping.PublicMiniTickerV3Api
248
- publicMiniTickers: ProtoTyping.PublicMiniTickersV3Api
249
- publicBookTickerBatch: ProtoTyping.PublicBookTickerBatchV3Api
250
- publicIncreaseDepthsBatch: ProtoTyping.PublicIncreaseDepthsBatchV3Api
251
- publicAggreDepths: ProtoTyping.PublicAggreDepthsV3Api
252
- publicAggreDeals: ProtoTyping.PublicAggreDealsV3Api
253
- publicAggreBookTicker: ProtoTyping.PublicAggreBookTickerV3Api
254
-
255
- symbol: Optional[str]
256
- symbolId: Optional[str]
257
- createTime: Optional[int]
258
- sendTime: Optional[int]
259
-
260
-
261
- PublicSpotKlineV3Api: ProtoTyping.PublicSpotKlineV3Api = (
262
- PublicSpotKlineV3Api__pb2.PublicSpotKlineV3Api
263
- )
264
- PublicDealsV3Api: ProtoTyping.PublicDealsV3Api = PublicDealsV3Api__pb2.PublicDealsV3Api
265
- PublicIncreaseDepthV3ApiItem: ProtoTyping.PublicIncreaseDepthV3ApiItem = (
266
- PublicIncreaseDepthsV3Api__pb2.PublicIncreaseDepthV3ApiItem
267
- )
268
- PublicIncreaseDepthsV3Api: ProtoTyping.PublicIncreaseDepthsV3Api = (
269
- PublicIncreaseDepthsV3Api__pb2.PublicIncreaseDepthsV3Api
270
- )
271
- PublicLimitDepthV3ApiItem: ProtoTyping.PublicLimitDepthV3ApiItem = (
272
- PublicLimitDepthsV3Api__pb2.PublicLimitDepthV3ApiItem
273
- )
274
- PublicLimitDepthsV3Api: ProtoTyping.PublicLimitDepthsV3Api = (
275
- PublicLimitDepthsV3Api__pb2.PublicLimitDepthsV3Api
276
- )
277
- PrivateOrdersV3Api: ProtoTyping.PrivateOrdersV3Api = (
278
- PrivateOrdersV3Api__pb2.PrivateOrdersV3Api
279
- )
280
- PublicBookTickerV3Api: ProtoTyping.PublicBookTickerV3Api = (
281
- PublicBookTickerV3Api__pb2.PublicBookTickerV3Api
282
- )
283
- PrivateDealsV3Api: ProtoTyping.PrivateDealsV3Api = (
284
- PrivateDealsV3Api__pb2.PrivateDealsV3Api
285
- )
286
- PrivateAccountV3Api: ProtoTyping.PrivateAccountV3Api = (
287
- PrivateAccountV3Api__pb2.PrivateAccountV3Api
288
- )
289
- PublicMiniTickerV3Api: ProtoTyping.PublicMiniTickerV3Api = (
290
- PublicMiniTickerV3Api__pb2.PublicMiniTickerV3Api
291
- )
292
- PublicMiniTickersV3Api: ProtoTyping.PublicMiniTickersV3Api = (
293
- PublicMiniTickersV3Api__pb2.PublicMiniTickersV3Api
294
- )
295
- PublicBookTickerBatchV3Api: ProtoTyping.PublicBookTickerBatchV3Api = (
296
- PublicBookTickerBatchV3Api__pb2.PublicBookTickerBatchV3Api
297
- )
298
- PublicIncreaseDepthsBatchV3Api: ProtoTyping.PublicIncreaseDepthsBatchV3Api = (
299
- PublicIncreaseDepthsBatchV3Api__pb2.PublicIncreaseDepthsBatchV3Api
300
- )
301
- PublicAggreDepthsV3Api: ProtoTyping.PublicAggreDepthsV3Api = (
302
- PublicAggreDepthsV3Api__pb2.PublicAggreDepthsV3Api
303
- )
304
- PublicAggreDealsV3Api: ProtoTyping.PublicAggreDealsV3Api = (
305
- PublicAggreDealsV3Api__pb2.PublicAggreDealsV3Api
306
- )
307
- PublicAggreBookTickerV3Api: ProtoTyping.PublicAggreBookTickerV3Api = (
308
- PublicAggreBookTickerV3Api__pb2.PublicAggreBookTickerV3Api
309
- )
310
- PushDataV3ApiWrapper: ProtoTyping.PushDataV3ApiWrapper = (
311
- PushDataV3ApiWrapper__pb2.PushDataV3ApiWrapper
312
- )
313
-
314
-
315
- __all__ = [
316
- "PublicSpotKlineV3Api",
317
- "PublicDealsV3Api",
318
- "PublicIncreaseDepthV3ApiItem",
319
- "PublicIncreaseDepthsV3Api",
320
- "PublicLimitDepthV3ApiItem",
321
- "PublicLimitDepthsV3Api",
322
- "PrivateOrdersV3Api",
323
- "PublicBookTickerV3Api",
324
- "PrivateDealsV3Api",
325
- "PrivateAccountV3Api",
326
- "PublicMiniTickerV3Api",
327
- "PublicMiniTickersV3Api",
328
- "PublicBookTickerBatchV3Api",
329
- "PublicIncreaseDepthsBatchV3Api",
330
- "PublicAggreDepthsV3Api",
331
- "PublicAggreDealsV3Api",
332
- "PublicAggreBookTickerV3Api",
333
- "PushDataV3ApiWrapper",
334
- "ProtoTyping",
335
- ]
1
+ from __future__ import annotations
2
+ from typing import Any, Literal, Optional, Self, Union
3
+
4
+
5
+ # from proto import PublicDealsV3Api_pb2 as PublicDealsV3Api__pb2
6
+ # from proto import PublicIncreaseDepthsV3Api_pb2 as PublicIncreaseDepthsV3Api__pb2
7
+ # from proto import PublicLimitDepthsV3Api_pb2 as PublicLimitDepthsV3Api__pb2
8
+ # from proto import PrivateOrdersV3Api_pb2 as PrivateOrdersV3Api__pb2
9
+ # from proto import PublicBookTickerV3Api_pb2 as PublicBookTickerV3Api__pb2
10
+ # from proto import PrivateDealsV3Api_pb2 as PrivateDealsV3Api__pb2
11
+ # from proto import PrivateAccountV3Api_pb2 as PrivateAccountV3Api__pb2
12
+ # from proto import PublicSpotKlineV3Api_pb2 as PublicSpotKlineV3Api__pb2
13
+ # from proto import PublicMiniTickerV3Api_pb2 as PublicMiniTickerV3Api__pb2
14
+ # from proto import PublicMiniTickersV3Api_pb2 as PublicMiniTickersV3Api__pb2
15
+ # from proto import PublicBookTickerBatchV3Api_pb2 as PublicBookTickerBatchV3Api__pb2
16
+ # from proto import PublicIncreaseDepthsBatchV3Api_pb2 as PublicIncreaseDepthsBatchV3Api__pb2
17
+ # from proto import PublicAggreDepthsV3Api_pb2 as PublicAggreDepthsV3Api__pb2
18
+ # from proto import PublicAggreDealsV3Api_pb2 as PublicAggreDealsV3Api__pb2
19
+ # from proto import PublicAggreBookTickerV3Api_pb2 as PublicAggreBookTickerV3Api__pb2
20
+ # from proto import PushDataV3ApiWrapper_pb2 as PushDataV3ApiWrapper__pb2
21
+
22
+ from . import PublicDealsV3Api_pb2 as PublicDealsV3Api__pb2
23
+ from . import PublicIncreaseDepthsV3Api_pb2 as PublicIncreaseDepthsV3Api__pb2
24
+ from . import PublicLimitDepthsV3Api_pb2 as PublicLimitDepthsV3Api__pb2
25
+ from . import PrivateOrdersV3Api_pb2 as PrivateOrdersV3Api__pb2
26
+ from . import PublicBookTickerV3Api_pb2 as PublicBookTickerV3Api__pb2
27
+ from . import PrivateDealsV3Api_pb2 as PrivateDealsV3Api__pb2
28
+ from . import PrivateAccountV3Api_pb2 as PrivateAccountV3Api__pb2
29
+ from . import PublicSpotKlineV3Api_pb2 as PublicSpotKlineV3Api__pb2
30
+ from . import PublicMiniTickerV3Api_pb2 as PublicMiniTickerV3Api__pb2
31
+ from . import PublicMiniTickersV3Api_pb2 as PublicMiniTickersV3Api__pb2
32
+ from . import PublicBookTickerBatchV3Api_pb2 as PublicBookTickerBatchV3Api__pb2
33
+ from . import PublicIncreaseDepthsBatchV3Api_pb2 as PublicIncreaseDepthsBatchV3Api__pb2
34
+ from . import PublicAggreDepthsV3Api_pb2 as PublicAggreDepthsV3Api__pb2
35
+ from . import PublicAggreDealsV3Api_pb2 as PublicAggreDealsV3Api__pb2
36
+ from . import PublicAggreBookTickerV3Api_pb2 as PublicAggreBookTickerV3Api__pb2
37
+ from . import PushDataV3ApiWrapper_pb2 as PushDataV3ApiWrapper__pb2
38
+
39
+
40
+ class ProtoTyping:
41
+ class protoc:
42
+ def __call__(self, *args: Any, **kwds: Any) -> Self: ...
43
+ def ParseFromString(self, data: bytes) -> Self: ...
44
+
45
+ # PublicDealsV3Api__pb2
46
+
47
+ class PublicDealsV3ApiItem:
48
+ price: str
49
+ quantity: str
50
+ tradeType: int
51
+ time: int
52
+
53
+ class PublicDealsV3Api(protoc):
54
+ deals: list[ProtoTyping.PublicDealsV3ApiItem]
55
+ eventType: str
56
+
57
+ # PublicIncreaseDepthsV3Api__pb2
58
+
59
+ class PublicIncreaseDepthV3ApiItem(protoc):
60
+ price: str
61
+ quantity: str
62
+
63
+ class PublicIncreaseDepthsV3Api(protoc):
64
+ asks: list[ProtoTyping.PublicIncreaseDepthV3ApiItem]
65
+ bids: list[ProtoTyping.PublicIncreaseDepthV3ApiItem]
66
+ eventType: str
67
+ version: str
68
+
69
+ # PublicLimitDepthsV3Api__pb2
70
+
71
+ class PublicLimitDepthV3ApiItem(protoc):
72
+ price: str
73
+ quantity: str
74
+
75
+ class PublicLimitDepthsV3Api(protoc):
76
+ asks: list[ProtoTyping.PublicLimitDepthV3ApiItem]
77
+ bids: list[ProtoTyping.PublicLimitDepthV3ApiItem]
78
+ eventType: str
79
+ version: str
80
+
81
+ # PrivateOrdersV3Api__pb2
82
+
83
+ class PrivateOrdersV3Api(protoc):
84
+ id: str
85
+ clientId: str
86
+ price: str
87
+ quantity: str
88
+ amount: str
89
+ avgPrice: str
90
+ orderType: int
91
+ tradeType: int
92
+ isMaker: bool
93
+ remainAmount: str
94
+ remainQuantity: str
95
+ lastDealQuantity: Optional[str]
96
+ cumulativeQuantity: str
97
+ cumulativeAmount: str
98
+ status: int
99
+ createTime: int
100
+ market: Optional[str]
101
+ triggerType: Optional[int]
102
+ triggerPrice: Optional[str]
103
+ state: Optional[int]
104
+ ocoId: Optional[str]
105
+ routeFactor: Optional[str]
106
+ symbolId: Optional[str]
107
+ marketId: Optional[str]
108
+ marketCurrencyId: Optional[str]
109
+ currencyId: Optional[str]
110
+
111
+ # PublicBookTickerV3Api__pb2
112
+
113
+ class PublicBookTickerV3Api(protoc):
114
+ bidPrice: str
115
+ bidQuantity: str
116
+ askPrice: str
117
+ askQuantity: str
118
+
119
+ # PrivateDealsV3Api__pb2
120
+
121
+ class PrivateDealsV3Api(protoc):
122
+ price: str
123
+ quantity: str
124
+ amount: str
125
+ tradeType: int
126
+ isMaker: bool
127
+ isSelfTrade: bool
128
+ tradeId: str
129
+ clientOrderId: str
130
+ orderId: str
131
+ feeAmount: str
132
+ feeCurrency: str
133
+ time: int
134
+
135
+ # PrivateAccountV3Api__pb2
136
+
137
+ class PrivateAccountV3Api(protoc):
138
+ vcoinName: str
139
+ coinId: str
140
+ balanceAmount: str
141
+ balanceAmountChange: str
142
+ frozenAmount: str
143
+ frozenAmountChange: str
144
+ type: str
145
+ time: int
146
+
147
+ # PublicSpotKlineV3Api__pb2
148
+
149
+ class PublicSpotKlineV3Api(protoc):
150
+ interval: Literal[
151
+ "Min1",
152
+ "Min5",
153
+ "Min15",
154
+ "Min30",
155
+ "Min60",
156
+ "Hour4",
157
+ "Hour8",
158
+ "Day1",
159
+ "Week1",
160
+ "Month1",
161
+ ]
162
+ windowStart: int
163
+ openingPrice: str
164
+ closingPrice: str
165
+ highestPrice: str
166
+ lowestPrice: str
167
+ volume: str
168
+ amount: str
169
+ windowEnd: int
170
+
171
+ # PublicMiniTickerV3Api__pb2
172
+
173
+ class PublicMiniTickerV3Api(protoc):
174
+ symbol: str
175
+ price: str
176
+ rate: str
177
+ zonedRate: str
178
+ high: str
179
+ low: str
180
+ volume: str
181
+ quantity: str
182
+ lastCloseRate: str
183
+ lastCloseZonedRate: str
184
+ lastCloseHigh: str
185
+ lastCloseLow: str
186
+
187
+ # PublicMiniTickersV3Api__pb2
188
+
189
+ class PublicMiniTickersV3Api(protoc):
190
+ items: list[ProtoTyping.PublicMiniTickerV3Api]
191
+
192
+ # PublicBookTickerBatchV3Api__pb2
193
+
194
+ class PublicBookTickerBatchV3Api(protoc):
195
+ items: list[ProtoTyping.PublicBookTickerV3Api]
196
+
197
+ # PublicIncreaseDepthsBatchV3Api__pb2
198
+
199
+ class PublicIncreaseDepthsBatchV3Api(protoc):
200
+ items: list[ProtoTyping.PublicIncreaseDepthsV3Api]
201
+ eventType: str
202
+
203
+ # PublicAggreDepthsV3Api__pb2
204
+
205
+ class PublicAggreDepthV3ApiItem(protoc):
206
+ price: str
207
+ quantity: str
208
+
209
+ class PublicAggreDepthsV3Api(protoc):
210
+ asks: list[ProtoTyping.PublicAggreDepthV3ApiItem]
211
+ bids: list[ProtoTyping.PublicAggreDepthV3ApiItem]
212
+ eventType: str
213
+ fromVersion: str
214
+ toVersion: str
215
+
216
+ # PublicAggreDealsV3Api__pb2
217
+
218
+ class PublicAggreDealsV3ApiItem(protoc):
219
+ price: str
220
+ quantity: str
221
+ tradeType: int
222
+ time: int
223
+
224
+ class PublicAggreDealsV3Api(protoc):
225
+ deals: list[ProtoTyping.PublicAggreDealsV3ApiItem]
226
+ eventType: str
227
+
228
+ # PublicAggreBookTickerV3Api__pb2
229
+
230
+ class PublicAggreBookTickerV3Api(protoc):
231
+ bidPrice: str
232
+ bidQuantity: str
233
+ askPrice: str
234
+ askQuantity: str
235
+
236
+ class PushDataV3ApiWrapper(protoc):
237
+ channel: str
238
+
239
+ publicDeals: ProtoTyping.PublicDealsV3Api
240
+ publicIncreaseDepths: ProtoTyping.PublicIncreaseDepthsV3Api
241
+ publicLimitDepths: ProtoTyping.PublicLimitDepthsV3Api
242
+ privateOrders: ProtoTyping.PrivateOrdersV3Api
243
+ publicBookTicker: ProtoTyping.PublicBookTickerV3Api
244
+ privateDeals: ProtoTyping.PrivateDealsV3Api
245
+ privateAccount: ProtoTyping.PrivateAccountV3Api
246
+ publicSpotKline: ProtoTyping.PublicSpotKlineV3Api
247
+ publicMiniTicker: ProtoTyping.PublicMiniTickerV3Api
248
+ publicMiniTickers: ProtoTyping.PublicMiniTickersV3Api
249
+ publicBookTickerBatch: ProtoTyping.PublicBookTickerBatchV3Api
250
+ publicIncreaseDepthsBatch: ProtoTyping.PublicIncreaseDepthsBatchV3Api
251
+ publicAggreDepths: ProtoTyping.PublicAggreDepthsV3Api
252
+ publicAggreDeals: ProtoTyping.PublicAggreDealsV3Api
253
+ publicAggreBookTicker: ProtoTyping.PublicAggreBookTickerV3Api
254
+
255
+ symbol: Optional[str]
256
+ symbolId: Optional[str]
257
+ createTime: Optional[int]
258
+ sendTime: Optional[int]
259
+
260
+
261
+ PublicSpotKlineV3Api: ProtoTyping.PublicSpotKlineV3Api = (
262
+ PublicSpotKlineV3Api__pb2.PublicSpotKlineV3Api
263
+ )
264
+ PublicDealsV3Api: ProtoTyping.PublicDealsV3Api = PublicDealsV3Api__pb2.PublicDealsV3Api
265
+ PublicIncreaseDepthV3ApiItem: ProtoTyping.PublicIncreaseDepthV3ApiItem = (
266
+ PublicIncreaseDepthsV3Api__pb2.PublicIncreaseDepthV3ApiItem
267
+ )
268
+ PublicIncreaseDepthsV3Api: ProtoTyping.PublicIncreaseDepthsV3Api = (
269
+ PublicIncreaseDepthsV3Api__pb2.PublicIncreaseDepthsV3Api
270
+ )
271
+ PublicLimitDepthV3ApiItem: ProtoTyping.PublicLimitDepthV3ApiItem = (
272
+ PublicLimitDepthsV3Api__pb2.PublicLimitDepthV3ApiItem
273
+ )
274
+ PublicLimitDepthsV3Api: ProtoTyping.PublicLimitDepthsV3Api = (
275
+ PublicLimitDepthsV3Api__pb2.PublicLimitDepthsV3Api
276
+ )
277
+ PrivateOrdersV3Api: ProtoTyping.PrivateOrdersV3Api = (
278
+ PrivateOrdersV3Api__pb2.PrivateOrdersV3Api
279
+ )
280
+ PublicBookTickerV3Api: ProtoTyping.PublicBookTickerV3Api = (
281
+ PublicBookTickerV3Api__pb2.PublicBookTickerV3Api
282
+ )
283
+ PrivateDealsV3Api: ProtoTyping.PrivateDealsV3Api = (
284
+ PrivateDealsV3Api__pb2.PrivateDealsV3Api
285
+ )
286
+ PrivateAccountV3Api: ProtoTyping.PrivateAccountV3Api = (
287
+ PrivateAccountV3Api__pb2.PrivateAccountV3Api
288
+ )
289
+ PublicMiniTickerV3Api: ProtoTyping.PublicMiniTickerV3Api = (
290
+ PublicMiniTickerV3Api__pb2.PublicMiniTickerV3Api
291
+ )
292
+ PublicMiniTickersV3Api: ProtoTyping.PublicMiniTickersV3Api = (
293
+ PublicMiniTickersV3Api__pb2.PublicMiniTickersV3Api
294
+ )
295
+ PublicBookTickerBatchV3Api: ProtoTyping.PublicBookTickerBatchV3Api = (
296
+ PublicBookTickerBatchV3Api__pb2.PublicBookTickerBatchV3Api
297
+ )
298
+ PublicIncreaseDepthsBatchV3Api: ProtoTyping.PublicIncreaseDepthsBatchV3Api = (
299
+ PublicIncreaseDepthsBatchV3Api__pb2.PublicIncreaseDepthsBatchV3Api
300
+ )
301
+ PublicAggreDepthsV3Api: ProtoTyping.PublicAggreDepthsV3Api = (
302
+ PublicAggreDepthsV3Api__pb2.PublicAggreDepthsV3Api
303
+ )
304
+ PublicAggreDealsV3Api: ProtoTyping.PublicAggreDealsV3Api = (
305
+ PublicAggreDealsV3Api__pb2.PublicAggreDealsV3Api
306
+ )
307
+ PublicAggreBookTickerV3Api: ProtoTyping.PublicAggreBookTickerV3Api = (
308
+ PublicAggreBookTickerV3Api__pb2.PublicAggreBookTickerV3Api
309
+ )
310
+ PushDataV3ApiWrapper: ProtoTyping.PushDataV3ApiWrapper = (
311
+ PushDataV3ApiWrapper__pb2.PushDataV3ApiWrapper
312
+ )
313
+
314
+
315
+ __all__ = [
316
+ "PublicSpotKlineV3Api",
317
+ "PublicDealsV3Api",
318
+ "PublicIncreaseDepthV3ApiItem",
319
+ "PublicIncreaseDepthsV3Api",
320
+ "PublicLimitDepthV3ApiItem",
321
+ "PublicLimitDepthsV3Api",
322
+ "PrivateOrdersV3Api",
323
+ "PublicBookTickerV3Api",
324
+ "PrivateDealsV3Api",
325
+ "PrivateAccountV3Api",
326
+ "PublicMiniTickerV3Api",
327
+ "PublicMiniTickersV3Api",
328
+ "PublicBookTickerBatchV3Api",
329
+ "PublicIncreaseDepthsBatchV3Api",
330
+ "PublicAggreDepthsV3Api",
331
+ "PublicAggreDealsV3Api",
332
+ "PublicAggreBookTickerV3Api",
333
+ "PushDataV3ApiWrapper",
334
+ "ProtoTyping",
335
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unicex
3
- Version: 0.17.8
3
+ Version: 0.17.10
4
4
  Summary: Unified Crypto Exchange API
5
5
  Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
6
6
  License: BSD 3-Clause License
@@ -57,7 +57,7 @@ unicex/gate/adapter.py,sha256=pPp4Syz99gmfkceoaA5rLcApPNj099SNtQNalFLA-ek,11163
57
57
  unicex/gate/client.py,sha256=Mu8qropad8DTSDuG6mxyn6ZW2hwQK47PZnfb5yOEt2M,53828
58
58
  unicex/gate/exchange_info.py,sha256=ANzfe4mqxtLnj2TBJJxoc31KUosvxdApp1_xYrRNQDs,2300
59
59
  unicex/gate/uni_client.py,sha256=wqYj6mh7htMXW3a7Kl39d2zWObNhBUrfH2_QmsJa9qI,9621
60
- unicex/gate/uni_websocket_manager.py,sha256=-JPz0q-XWXtcxH186OEnH_8DcbsmaKZE-tBbdODIjqI,11974
60
+ unicex/gate/uni_websocket_manager.py,sha256=WsX-qPe9LLH2TwX_aPwGiczqOrxwW2Udv_vcDwZAqdY,11992
61
61
  unicex/gate/user_websocket.py,sha256=4qZX9N2RjlJ-e25Eszz12OeCM17j5DdXVimBVaLj53w,129
62
62
  unicex/gate/websocket_manager.py,sha256=phtHbvAGQD3mtewCUxBuuD1Nj0FXN6oZrd7tnmT7c2c,25832
63
63
  unicex/hyperliquid/__init__.py,sha256=qGTAkwfXLvknvHET_iA7Qml3jkxxxA0moU_98nGTcVU,944
@@ -75,7 +75,7 @@ unicex/kucoin/exchange_info.py,sha256=DNraBMxgMiZVSZwDmgg7v7D11_cBnqMsO95u9ITFxF
75
75
  unicex/kucoin/uni_client.py,sha256=6l62zwudGBkJ2sfiDZ1HAlk1Dq_NwW4LiOKfKNUzpIo,9385
76
76
  unicex/kucoin/uni_websocket_manager.py,sha256=rvrhQkvktZhbfb505KmkiBtf7Y4drClgtq5ysaiXoYk,9574
77
77
  unicex/kucoin/user_websocket.py,sha256=Tx0yuGpf2HrPbcOHHZioYjVp6LBfagOKF-zzD3UM0Ok,129
78
- unicex/kucoin/websocket_manager.py,sha256=GNNpzxONgTuTByrsGk1MNMlj5-zx5vs_WBTgssYSYDQ,270
78
+ unicex/kucoin/websocket_manager.py,sha256=PfO6TvshsdFINYy7sGx_xjDuPMBEBM1tCUPnb2eM-to,5224
79
79
  unicex/mexc/__init__.py,sha256=lltANqM_2P-fmF5j8o5-pjmORPuK6C5sVjcQhuUU_R0,923
80
80
  unicex/mexc/adapter.py,sha256=OGlTAJ0IRg4YVu9cMKDH9orPd6FnIUDqKO8jHa_BpQs,13631
81
81
  unicex/mexc/client.py,sha256=FBUSs4Hu2DExVKPKJG9OawbqidACPFJ1U_1md05E3Mc,31004
@@ -101,7 +101,7 @@ unicex/mexc/_spot_ws_proto/PublicMiniTickerV3Api_pb2.py,sha256=-58JJVYtPJxwMdmHW
101
101
  unicex/mexc/_spot_ws_proto/PublicMiniTickersV3Api_pb2.py,sha256=jSN0IgXGJ2AS3Otv2GAdu0a0zUVW1gvZ4_PRCg9BlWY,1657
102
102
  unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py,sha256=0FOMsSO4jzMQ6446yZRF69KHCj9Kd4N0J8UPN9CYwnI,1913
103
103
  unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py,sha256=_V0StMrDE7-bsdRPQdTC2XLGDGqJ5U_scx8ZjcyCGgk,3735
104
- unicex/mexc/_spot_ws_proto/__init__.py,sha256=L8Jft1713_M8CLR9drgSjLBdY_46sPT3O9zDFlxYvgc,11431
104
+ unicex/mexc/_spot_ws_proto/__init__.py,sha256=GaTX5Uys7uhFYp--_YpVOmBO5YuEyHdv1i0i0qwUvYg,11096
105
105
  unicex/okx/__init__.py,sha256=Ljbw3AP0YrPF5bIPJi_3JP3B_czR9xurYHI24rgWk9M,920
106
106
  unicex/okx/adapter.py,sha256=4MpQh12nzlzB0HbOCHItYoWNFXbFCe9DntVC0smm-PY,7609
107
107
  unicex/okx/client.py,sha256=N7ma49ToMGjYiTvuoV52-NaG-vLx3s087KF67dQCRBs,91079
@@ -110,8 +110,8 @@ unicex/okx/uni_client.py,sha256=fQVR4kz_2UvWD6V-MRlVVyAfaNIh2Q3PxpIgJrXY5hc,8702
110
110
  unicex/okx/uni_websocket_manager.py,sha256=7sDkZgmAyiWj3_3SfEHcPlFSVBhxSOuhOXTZlb0h3eY,11934
111
111
  unicex/okx/user_websocket.py,sha256=8c9kpm-xVa729pW93OKUGLHaE9MY0uzEpjIgNIFRF80,126
112
112
  unicex/okx/websocket_manager.py,sha256=Rk1GM_zdX5wRa92KCizduHnAGi2shXB9oEZFQJUbeAc,26070
113
- unicex-0.17.8.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
114
- unicex-0.17.8.dist-info/METADATA,sha256=OV6FRknCEK-QO7vAEouJQBeiB2bGB1Q0bgGye3wmMwU,12090
115
- unicex-0.17.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
116
- unicex-0.17.8.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
117
- unicex-0.17.8.dist-info/RECORD,,
113
+ unicex-0.17.10.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
114
+ unicex-0.17.10.dist-info/METADATA,sha256=0JLlZTw_Q4IgzY9bF9rk4LPrbUuKM5-7R6K9N5AZ9d0,12091
115
+ unicex-0.17.10.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
116
+ unicex-0.17.10.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
117
+ unicex-0.17.10.dist-info/RECORD,,