unicex 0.15.4__py3-none-any.whl → 0.16.2__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/__init__.py +0 -2
- unicex/binance/adapter.py +2 -3
- unicex/bingx/uni_websocket_manager.py +2 -2
- unicex/bitget/adapter.py +1 -2
- unicex/bitget/uni_websocket_manager.py +21 -4
- unicex/gate/adapter.py +112 -0
- unicex/gate/uni_websocket_manager.py +41 -7
- unicex/mexc/adapter.py +103 -0
- unicex/mexc/uni_websocket_manager.py +25 -7
- unicex/mexc/websocket_manager.py +24 -1
- unicex/okx/adapter.py +60 -0
- unicex/okx/exchange_info.py +2 -2
- unicex/okx/uni_websocket_manager.py +44 -7
- unicex/okx/websocket_manager.py +116 -163
- unicex/types.py +2 -9
- {unicex-0.15.4.dist-info → unicex-0.16.2.dist-info}/METADATA +5 -5
- {unicex-0.15.4.dist-info → unicex-0.16.2.dist-info}/RECORD +20 -20
- {unicex-0.15.4.dist-info → unicex-0.16.2.dist-info}/WHEEL +0 -0
- {unicex-0.15.4.dist-info → unicex-0.16.2.dist-info}/licenses/LICENSE +0 -0
- {unicex-0.15.4.dist-info → unicex-0.16.2.dist-info}/top_level.txt +0 -0
|
@@ -5,7 +5,7 @@ from typing import Any, overload
|
|
|
5
5
|
|
|
6
6
|
from unicex._abc import IUniWebsocketManager
|
|
7
7
|
from unicex._base import Websocket
|
|
8
|
-
from unicex.enums import Timeframe
|
|
8
|
+
from unicex.enums import Exchange, Timeframe
|
|
9
9
|
from unicex.types import LoggerLike
|
|
10
10
|
|
|
11
11
|
from .adapter import Adapter
|
|
@@ -36,6 +36,23 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
36
36
|
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
37
37
|
self._adapter = Adapter()
|
|
38
38
|
|
|
39
|
+
def _normalize_symbol(
|
|
40
|
+
self,
|
|
41
|
+
symbol: str | None,
|
|
42
|
+
symbols: Sequence[str] | None,
|
|
43
|
+
) -> str:
|
|
44
|
+
"""Преобразует параметры symbol/symbols в один тикер."""
|
|
45
|
+
if symbol and symbols:
|
|
46
|
+
raise ValueError("Parameters symbol and symbols cannot be used together")
|
|
47
|
+
if symbol:
|
|
48
|
+
return symbol
|
|
49
|
+
if symbols:
|
|
50
|
+
normalized = list(symbols)
|
|
51
|
+
if len(normalized) != 1:
|
|
52
|
+
raise ValueError("OKX websocket поддерживает только один тикер на соединение")
|
|
53
|
+
return normalized[0]
|
|
54
|
+
raise ValueError("Either symbol or symbols must be provided")
|
|
55
|
+
|
|
39
56
|
@overload
|
|
40
57
|
def klines(
|
|
41
58
|
self,
|
|
@@ -76,7 +93,13 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
76
93
|
Возвращает:
|
|
77
94
|
`Websocket`: Экземпляр вебсокета для управления соединением.
|
|
78
95
|
"""
|
|
79
|
-
|
|
96
|
+
inst_id = self._normalize_symbol(symbol, symbols)
|
|
97
|
+
wrapper = self._make_wrapper(self._adapter.klines_message, callback)
|
|
98
|
+
return self._websocket_manager.candlesticks(
|
|
99
|
+
callback=wrapper,
|
|
100
|
+
interval=timeframe.to_exchange_format(Exchange.OKX), # type: ignore
|
|
101
|
+
inst_id=inst_id,
|
|
102
|
+
)
|
|
80
103
|
|
|
81
104
|
@overload
|
|
82
105
|
def futures_klines(
|
|
@@ -118,7 +141,13 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
118
141
|
Возвращает:
|
|
119
142
|
`Websocket`: Экземпляр вебсокета.
|
|
120
143
|
"""
|
|
121
|
-
|
|
144
|
+
inst_id = self._normalize_symbol(symbol, symbols)
|
|
145
|
+
wrapper = self._make_wrapper(self._adapter.klines_message, callback)
|
|
146
|
+
return self._websocket_manager.candlesticks(
|
|
147
|
+
callback=wrapper,
|
|
148
|
+
interval=timeframe.to_exchange_format(Exchange.OKX), # type: ignore
|
|
149
|
+
inst_id=inst_id,
|
|
150
|
+
)
|
|
122
151
|
|
|
123
152
|
@overload
|
|
124
153
|
def trades(
|
|
@@ -156,7 +185,9 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
156
185
|
Возвращает:
|
|
157
186
|
`Websocket`: Экземпляр вебсокета.
|
|
158
187
|
"""
|
|
159
|
-
|
|
188
|
+
inst_id = self._normalize_symbol(symbol, symbols)
|
|
189
|
+
wrapper = self._make_wrapper(self._adapter.trades_message, callback)
|
|
190
|
+
return self._websocket_manager.all_trades(callback=wrapper, inst_id=inst_id)
|
|
160
191
|
|
|
161
192
|
@overload
|
|
162
193
|
def aggtrades(
|
|
@@ -194,7 +225,9 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
194
225
|
Возвращает:
|
|
195
226
|
`Websocket`: Экземпляр вебсокета.
|
|
196
227
|
"""
|
|
197
|
-
|
|
228
|
+
inst_id = self._normalize_symbol(symbol, symbols)
|
|
229
|
+
wrapper = self._make_wrapper(self._adapter.trades_message, callback)
|
|
230
|
+
return self._websocket_manager.trades(callback=wrapper, inst_id=inst_id)
|
|
198
231
|
|
|
199
232
|
@overload
|
|
200
233
|
def futures_trades(
|
|
@@ -232,7 +265,9 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
232
265
|
Возвращает:
|
|
233
266
|
`Websocket`: Экземпляр вебсокета.
|
|
234
267
|
"""
|
|
235
|
-
|
|
268
|
+
inst_id = self._normalize_symbol(symbol, symbols)
|
|
269
|
+
wrapper = self._make_wrapper(self._adapter.trades_message, callback)
|
|
270
|
+
return self._websocket_manager.all_trades(callback=wrapper, inst_id=inst_id)
|
|
236
271
|
|
|
237
272
|
@overload
|
|
238
273
|
def futures_aggtrades(
|
|
@@ -270,4 +305,6 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
270
305
|
Возвращает:
|
|
271
306
|
`Websocket`: Экземпляр вебсокета.
|
|
272
307
|
"""
|
|
273
|
-
|
|
308
|
+
inst_id = self._normalize_symbol(symbol, symbols)
|
|
309
|
+
wrapper = self._make_wrapper(self._adapter.trades_message, callback)
|
|
310
|
+
return self._websocket_manager.trades(callback=wrapper, inst_id=inst_id)
|
unicex/okx/websocket_manager.py
CHANGED
|
@@ -34,6 +34,15 @@ class WebsocketManager:
|
|
|
34
34
|
self.client = client
|
|
35
35
|
self._ws_kwargs = {"ping_message": "ping", **ws_kwargs}
|
|
36
36
|
|
|
37
|
+
def _build_subscription_message(self, args: list[dict[str, Any]]) -> str:
|
|
38
|
+
"""Формирует JSON-сообщение подписки."""
|
|
39
|
+
return json.dumps(
|
|
40
|
+
{
|
|
41
|
+
"op": "subscribe",
|
|
42
|
+
"args": args,
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
|
|
37
46
|
def instruments(
|
|
38
47
|
self,
|
|
39
48
|
callback: CallbackType,
|
|
@@ -50,16 +59,13 @@ class WebsocketManager:
|
|
|
50
59
|
Возвращает:
|
|
51
60
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
52
61
|
"""
|
|
53
|
-
subscription_message =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
],
|
|
62
|
-
}
|
|
62
|
+
subscription_message = self._build_subscription_message(
|
|
63
|
+
[
|
|
64
|
+
{
|
|
65
|
+
"channel": "instruments",
|
|
66
|
+
"instType": inst_type,
|
|
67
|
+
}
|
|
68
|
+
]
|
|
63
69
|
)
|
|
64
70
|
|
|
65
71
|
return Websocket(
|
|
@@ -85,16 +91,13 @@ class WebsocketManager:
|
|
|
85
91
|
Возвращает:
|
|
86
92
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
87
93
|
"""
|
|
88
|
-
subscription_message =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
}
|
|
94
|
+
subscription_message = self._build_subscription_message(
|
|
95
|
+
[
|
|
96
|
+
{
|
|
97
|
+
"channel": "open-interest",
|
|
98
|
+
"instId": inst_id,
|
|
99
|
+
}
|
|
100
|
+
]
|
|
98
101
|
)
|
|
99
102
|
|
|
100
103
|
return Websocket(
|
|
@@ -120,16 +123,13 @@ class WebsocketManager:
|
|
|
120
123
|
Возвращает:
|
|
121
124
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
122
125
|
"""
|
|
123
|
-
subscription_message =
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
],
|
|
132
|
-
}
|
|
126
|
+
subscription_message = self._build_subscription_message(
|
|
127
|
+
[
|
|
128
|
+
{
|
|
129
|
+
"channel": "funding-rate",
|
|
130
|
+
"instId": inst_id,
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
133
|
)
|
|
134
134
|
|
|
135
135
|
return Websocket(
|
|
@@ -155,16 +155,13 @@ class WebsocketManager:
|
|
|
155
155
|
Возвращает:
|
|
156
156
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
157
157
|
"""
|
|
158
|
-
subscription_message =
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
],
|
|
167
|
-
}
|
|
158
|
+
subscription_message = self._build_subscription_message(
|
|
159
|
+
[
|
|
160
|
+
{
|
|
161
|
+
"channel": "price-limit",
|
|
162
|
+
"instId": inst_id,
|
|
163
|
+
}
|
|
164
|
+
]
|
|
168
165
|
)
|
|
169
166
|
|
|
170
167
|
return Websocket(
|
|
@@ -190,16 +187,13 @@ class WebsocketManager:
|
|
|
190
187
|
Возвращает:
|
|
191
188
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
192
189
|
"""
|
|
193
|
-
subscription_message =
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
],
|
|
202
|
-
}
|
|
190
|
+
subscription_message = self._build_subscription_message(
|
|
191
|
+
[
|
|
192
|
+
{
|
|
193
|
+
"channel": "opt-summary",
|
|
194
|
+
"instFamily": inst_family,
|
|
195
|
+
}
|
|
196
|
+
]
|
|
203
197
|
)
|
|
204
198
|
|
|
205
199
|
return Websocket(
|
|
@@ -244,12 +238,7 @@ class WebsocketManager:
|
|
|
244
238
|
if inst_id:
|
|
245
239
|
args["instId"] = inst_id
|
|
246
240
|
|
|
247
|
-
subscription_message =
|
|
248
|
-
{
|
|
249
|
-
"op": "subscribe",
|
|
250
|
-
"args": [args],
|
|
251
|
-
}
|
|
252
|
-
)
|
|
241
|
+
subscription_message = self._build_subscription_message([args])
|
|
253
242
|
|
|
254
243
|
return Websocket(
|
|
255
244
|
callback=callback,
|
|
@@ -274,16 +263,13 @@ class WebsocketManager:
|
|
|
274
263
|
Возвращает:
|
|
275
264
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
276
265
|
"""
|
|
277
|
-
subscription_message =
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
],
|
|
286
|
-
}
|
|
266
|
+
subscription_message = self._build_subscription_message(
|
|
267
|
+
[
|
|
268
|
+
{
|
|
269
|
+
"channel": "mark-price",
|
|
270
|
+
"instId": inst_id,
|
|
271
|
+
}
|
|
272
|
+
]
|
|
287
273
|
)
|
|
288
274
|
|
|
289
275
|
return Websocket(
|
|
@@ -309,16 +295,13 @@ class WebsocketManager:
|
|
|
309
295
|
Возвращает:
|
|
310
296
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
311
297
|
"""
|
|
312
|
-
subscription_message =
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
],
|
|
321
|
-
}
|
|
298
|
+
subscription_message = self._build_subscription_message(
|
|
299
|
+
[
|
|
300
|
+
{
|
|
301
|
+
"channel": "index-tickers",
|
|
302
|
+
"instId": inst_id,
|
|
303
|
+
}
|
|
304
|
+
]
|
|
322
305
|
)
|
|
323
306
|
|
|
324
307
|
return Websocket(
|
|
@@ -375,16 +358,13 @@ class WebsocketManager:
|
|
|
375
358
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
376
359
|
"""
|
|
377
360
|
channel = f"mark-price-candle{interval}"
|
|
378
|
-
subscription_message =
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
],
|
|
387
|
-
}
|
|
361
|
+
subscription_message = self._build_subscription_message(
|
|
362
|
+
[
|
|
363
|
+
{
|
|
364
|
+
"channel": channel,
|
|
365
|
+
"instId": inst_id,
|
|
366
|
+
}
|
|
367
|
+
]
|
|
388
368
|
)
|
|
389
369
|
|
|
390
370
|
return Websocket(
|
|
@@ -440,16 +420,13 @@ class WebsocketManager:
|
|
|
440
420
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
441
421
|
"""
|
|
442
422
|
channel = f"index-candle{interval}"
|
|
443
|
-
subscription_message =
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
451
|
-
],
|
|
452
|
-
}
|
|
423
|
+
subscription_message = self._build_subscription_message(
|
|
424
|
+
[
|
|
425
|
+
{
|
|
426
|
+
"channel": channel,
|
|
427
|
+
"instId": inst_id,
|
|
428
|
+
}
|
|
429
|
+
]
|
|
453
430
|
)
|
|
454
431
|
|
|
455
432
|
return Websocket(
|
|
@@ -475,16 +452,13 @@ class WebsocketManager:
|
|
|
475
452
|
Возвращает:
|
|
476
453
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
477
454
|
"""
|
|
478
|
-
subscription_message =
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
}
|
|
486
|
-
],
|
|
487
|
-
}
|
|
455
|
+
subscription_message = self._build_subscription_message(
|
|
456
|
+
[
|
|
457
|
+
{
|
|
458
|
+
"channel": "liquidation-orders",
|
|
459
|
+
"instType": inst_type,
|
|
460
|
+
}
|
|
461
|
+
]
|
|
488
462
|
)
|
|
489
463
|
|
|
490
464
|
return Websocket(
|
|
@@ -520,12 +494,7 @@ class WebsocketManager:
|
|
|
520
494
|
if inst_family:
|
|
521
495
|
args["instFamily"] = inst_family
|
|
522
496
|
|
|
523
|
-
subscription_message =
|
|
524
|
-
{
|
|
525
|
-
"op": "subscribe",
|
|
526
|
-
"args": [args],
|
|
527
|
-
}
|
|
528
|
-
)
|
|
497
|
+
subscription_message = self._build_subscription_message([args])
|
|
529
498
|
|
|
530
499
|
return Websocket(
|
|
531
500
|
callback=callback,
|
|
@@ -550,16 +519,13 @@ class WebsocketManager:
|
|
|
550
519
|
Возвращает:
|
|
551
520
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
552
521
|
"""
|
|
553
|
-
subscription_message =
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
}
|
|
561
|
-
],
|
|
562
|
-
}
|
|
522
|
+
subscription_message = self._build_subscription_message(
|
|
523
|
+
[
|
|
524
|
+
{
|
|
525
|
+
"channel": "tickers",
|
|
526
|
+
"instId": inst_id,
|
|
527
|
+
}
|
|
528
|
+
]
|
|
563
529
|
)
|
|
564
530
|
|
|
565
531
|
return Websocket(
|
|
@@ -615,17 +581,13 @@ class WebsocketManager:
|
|
|
615
581
|
Возвращает:
|
|
616
582
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
617
583
|
"""
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
"instId": inst_id,
|
|
626
|
-
}
|
|
627
|
-
],
|
|
628
|
-
}
|
|
584
|
+
subscription_message = self._build_subscription_message(
|
|
585
|
+
[
|
|
586
|
+
{
|
|
587
|
+
"channel": f"candle{interval}",
|
|
588
|
+
"instId": inst_id,
|
|
589
|
+
}
|
|
590
|
+
]
|
|
629
591
|
)
|
|
630
592
|
|
|
631
593
|
return Websocket(
|
|
@@ -651,16 +613,13 @@ class WebsocketManager:
|
|
|
651
613
|
Возвращает:
|
|
652
614
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
653
615
|
"""
|
|
654
|
-
subscription_message =
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
}
|
|
662
|
-
],
|
|
663
|
-
}
|
|
616
|
+
subscription_message = self._build_subscription_message(
|
|
617
|
+
[
|
|
618
|
+
{
|
|
619
|
+
"channel": "trades",
|
|
620
|
+
"instId": inst_id,
|
|
621
|
+
}
|
|
622
|
+
]
|
|
664
623
|
)
|
|
665
624
|
|
|
666
625
|
return Websocket(
|
|
@@ -686,16 +645,13 @@ class WebsocketManager:
|
|
|
686
645
|
Возвращает:
|
|
687
646
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
688
647
|
"""
|
|
689
|
-
subscription_message =
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
}
|
|
697
|
-
],
|
|
698
|
-
}
|
|
648
|
+
subscription_message = self._build_subscription_message(
|
|
649
|
+
[
|
|
650
|
+
{
|
|
651
|
+
"channel": "trades-all",
|
|
652
|
+
"instId": inst_id,
|
|
653
|
+
}
|
|
654
|
+
]
|
|
699
655
|
)
|
|
700
656
|
|
|
701
657
|
return Websocket(
|
|
@@ -723,16 +679,13 @@ class WebsocketManager:
|
|
|
723
679
|
Возвращает:
|
|
724
680
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
725
681
|
"""
|
|
726
|
-
subscription_message =
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
}
|
|
734
|
-
],
|
|
735
|
-
}
|
|
682
|
+
subscription_message = self._build_subscription_message(
|
|
683
|
+
[
|
|
684
|
+
{
|
|
685
|
+
"channel": channel,
|
|
686
|
+
"instId": inst_id,
|
|
687
|
+
}
|
|
688
|
+
]
|
|
736
689
|
)
|
|
737
690
|
|
|
738
691
|
return Websocket(
|
unicex/types.py
CHANGED
|
@@ -5,7 +5,6 @@ __all__ = [
|
|
|
5
5
|
"TickerDailyItem",
|
|
6
6
|
"KlineDict",
|
|
7
7
|
"TradeDict",
|
|
8
|
-
"AggTradeDict",
|
|
9
8
|
"RequestMethod",
|
|
10
9
|
"LoggerLike",
|
|
11
10
|
"NumberLike",
|
|
@@ -79,10 +78,10 @@ class KlineDict(TypedDict):
|
|
|
79
78
|
q: float
|
|
80
79
|
"""Объем свечи. В долларах."""
|
|
81
80
|
|
|
82
|
-
T: int | None
|
|
81
|
+
T: int | None # `None` means untrackable
|
|
83
82
|
"""Время закрытия. В миллисекундах."""
|
|
84
83
|
|
|
85
|
-
x: bool | None
|
|
84
|
+
x: bool | None # `None` means untrackable
|
|
86
85
|
"""Флаг закрыта ли свеча."""
|
|
87
86
|
|
|
88
87
|
|
|
@@ -105,12 +104,6 @@ class TradeDict(TypedDict):
|
|
|
105
104
|
"""Объем сделки. В монетах."""
|
|
106
105
|
|
|
107
106
|
|
|
108
|
-
class AggTradeDict(TradeDict):
|
|
109
|
-
"""Модель агрегированной сделки."""
|
|
110
|
-
|
|
111
|
-
pass
|
|
112
|
-
|
|
113
|
-
|
|
114
107
|
class OpenInterestItem(TypedDict):
|
|
115
108
|
"""Модель одного элемента открытого интереса."""
|
|
116
109
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: unicex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Summary: Unified Crypto Exchange API
|
|
5
5
|
Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -56,12 +56,12 @@ Dynamic: license-file
|
|
|
56
56
|
| Exchange | Client | Auth | WS Manager | User WS | Uni Client | Uni WS Manager | ExchangeInfo |
|
|
57
57
|
|-----------------|--------|------|------------|---------|------------|----------------|--------------|
|
|
58
58
|
| **Binance** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
59
|
-
| **Bitget** | ✓ | ✓ | ✓ | | ✓ |
|
|
59
|
+
| **Bitget** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
|
|
60
60
|
| **Bybit** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
|
|
61
|
-
| **Gateio** | ✓ | ✓ | ✓ | | ✓ |
|
|
61
|
+
| **Gateio** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
|
|
62
62
|
| **Hyperliquid** | ✓ | ✓ | ✓ | ✓ | ✓ | | |
|
|
63
|
-
| **Mexc** | ✓ | ✓ | ✓ | | ✓ |
|
|
64
|
-
| **Okx** | ✓ | ✓ | ✓ | | ✓ |
|
|
63
|
+
| **Mexc** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
|
|
64
|
+
| **Okx** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
|
|
65
65
|
| **Kucoin** | | | | | ✓ | | |
|
|
66
66
|
| **BingX** | | | | | ✓ | | |
|
|
67
67
|
---
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
unicex/__init__.py,sha256=
|
|
1
|
+
unicex/__init__.py,sha256=oP1ymnNwVqd6R2K8slN4UHn42I77bzRB-nKxN0TiU1g,6814
|
|
2
2
|
unicex/enums.py,sha256=5iJo1uokNlS9FQQtomK0LiEcXuHqF9cBEg2aPAX3QDk,10296
|
|
3
3
|
unicex/exceptions.py,sha256=r-xZzX78VuxVnI5pe99AM8FIiGcdIUDcF5CaTkQ4NE0,2213
|
|
4
4
|
unicex/extra.py,sha256=YJKl2X-T1BtaSR0t-CpvxaGE0emNpgts807lmD_3ejA,13686
|
|
5
5
|
unicex/mapper.py,sha256=b4a99_VVpEBGzctUJxvxLvu8urSrIQEziCt9cKlfg6w,5331
|
|
6
|
-
unicex/types.py,sha256=
|
|
6
|
+
unicex/types.py,sha256=dyWCZpiUkSwrsk8H8bf9rE8pkNZkokoddn6VRV4_NSk,5001
|
|
7
7
|
unicex/utils.py,sha256=1iK-ifZ-hUaU4Z-YCLoZsjAZREfJO7amYsjzG70JEk8,9963
|
|
8
8
|
unicex/_abc/__init__.py,sha256=fxZjNFJFeFwWTXz8iSDe7eCWwE6xfFwFwAuG6l-TI8A,289
|
|
9
9
|
unicex/_abc/exchange_info.py,sha256=TP_theOj1JS3Dcx5hqGT1yma1Jed776N4okOKXB7ePw,9537
|
|
@@ -13,7 +13,7 @@ unicex/_base/__init__.py,sha256=0TmevATGnRB3qow6tkCR8dQKNZCWKeib6YQjNJ4a1b0,236
|
|
|
13
13
|
unicex/_base/client.py,sha256=GuWfNNO6jVLAN-YUNKLmd-W5AfRelJIgKUe7vIQ12Qk,9318
|
|
14
14
|
unicex/_base/websocket.py,sha256=J_okxWq1CiDqU64_GlcwE7Vgq8LZKsSRYpCoXVazJGk,13279
|
|
15
15
|
unicex/binance/__init__.py,sha256=sDk4ZjakRdpFMaMSpOCfqjf6ZPfAS9tlrt4WlDHtDkw,932
|
|
16
|
-
unicex/binance/adapter.py,sha256=
|
|
16
|
+
unicex/binance/adapter.py,sha256=adRi2XxF-VyU0nmjgigx6I1MiQHHtsGPtSxzx3_bX9I,8220
|
|
17
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
|
|
@@ -25,15 +25,15 @@ unicex/bingx/adapter.py,sha256=1QZSfrpgMlTu-ZuLWtO61caqC6ygRTViI5Plt25Ybi4,11937
|
|
|
25
25
|
unicex/bingx/client.py,sha256=VPPIDKH86i1KR-6Xr8RXO7nSt7KhKNnp7Sz4spnZm-E,16899
|
|
26
26
|
unicex/bingx/exchange_info.py,sha256=dfUl2V7ec82eEDE_u6AuMB9dQ8iAWh03HcaUPaOo_mo,786
|
|
27
27
|
unicex/bingx/uni_client.py,sha256=NKJVq2ce4UbK1jnKTLOIX2X2a5LzhPh_oG6_JrH4P6o,8196
|
|
28
|
-
unicex/bingx/uni_websocket_manager.py,sha256=
|
|
28
|
+
unicex/bingx/uni_websocket_manager.py,sha256=Hg1XXyAO1FW3_4PmoTB3Z0KuRt7traLBYHWtPqy7-YQ,10068
|
|
29
29
|
unicex/bingx/user_websocket.py,sha256=UgWt2hMaNqEUibf-1MfCIkJijx7Vb_HN8DiXaclMCog,128
|
|
30
30
|
unicex/bingx/websocket_manager.py,sha256=Is9aurewMICA0n90YTGK3ET4J269bvklJFwDJRzQKNg,4855
|
|
31
31
|
unicex/bitget/__init__.py,sha256=8govSOEyWjA62js-ZTQIiSYWSmcEUFSC9hVTpS8eosk,929
|
|
32
|
-
unicex/bitget/adapter.py,sha256=
|
|
32
|
+
unicex/bitget/adapter.py,sha256=uxBO9fI_3DPP6BsZHMYO0qIufWSGev2sGoidgOSnves,7747
|
|
33
33
|
unicex/bitget/client.py,sha256=0NFOixkMb0AcC5e-LytUd4Y1jxCO6Lv6-I4XlOGNtxQ,90618
|
|
34
34
|
unicex/bitget/exchange_info.py,sha256=_UMvAqP0zcpmv9dkovkFxrXLlol6q8_v7-0sy6FSfrE,1959
|
|
35
35
|
unicex/bitget/uni_client.py,sha256=MrXAmthTDTEQZ1ZY3LuqkCKL1bw_mKHMdiV4XiRFO-M,8641
|
|
36
|
-
unicex/bitget/uni_websocket_manager.py,sha256=
|
|
36
|
+
unicex/bitget/uni_websocket_manager.py,sha256=BAeH6GwVdYjpxe5xw1K7jrAyH6Lj02xawiv9kXvksLE,11105
|
|
37
37
|
unicex/bitget/user_websocket.py,sha256=tlkv7Rmsw_FSfCJnEMOK_9jRsXRk2Ah_slqG8C-uhuo,129
|
|
38
38
|
unicex/bitget/websocket_manager.py,sha256=Tra_E_z1QQ_snFYwqa49FmU-uWISYnbyJK5e7zqb48o,9765
|
|
39
39
|
unicex/bybit/__init__.py,sha256=SrMBh6K5zUt4JheWUpNUYNb1NCDr2ujTFv4IDguaGZI,926
|
|
@@ -45,11 +45,11 @@ unicex/bybit/uni_websocket_manager.py,sha256=HhgFcGo2yQLT5knU3cFaKN85jJP0Z9EIwZ-
|
|
|
45
45
|
unicex/bybit/user_websocket.py,sha256=IGGEnwyWs5jOppgK_R7SisBDvsiF1_piTswBrdQOgDg,128
|
|
46
46
|
unicex/bybit/websocket_manager.py,sha256=y8YiQEPtVg3Xj7seuNSbQMt5FrM-snWx9KlNioKeNVo,14413
|
|
47
47
|
unicex/gate/__init__.py,sha256=dsKvhQhDcw4_w0S4c9IjKkCoOg4DCUtSecEUOlfstug,929
|
|
48
|
-
unicex/gate/adapter.py,sha256=
|
|
48
|
+
unicex/gate/adapter.py,sha256=pPp4Syz99gmfkceoaA5rLcApPNj099SNtQNalFLA-ek,11163
|
|
49
49
|
unicex/gate/client.py,sha256=Mu8qropad8DTSDuG6mxyn6ZW2hwQK47PZnfb5yOEt2M,53828
|
|
50
50
|
unicex/gate/exchange_info.py,sha256=ANzfe4mqxtLnj2TBJJxoc31KUosvxdApp1_xYrRNQDs,2300
|
|
51
51
|
unicex/gate/uni_client.py,sha256=EVhQ4KF7F6y67b2oARcYzSrSnHTFsUjoXK1vLntK6u0,9649
|
|
52
|
-
unicex/gate/uni_websocket_manager.py,sha256=
|
|
52
|
+
unicex/gate/uni_websocket_manager.py,sha256=dESHYEPf832b5tdMwo_9wdMaE6I_ZOKwEtnhnuofx_c,11285
|
|
53
53
|
unicex/gate/user_websocket.py,sha256=4qZX9N2RjlJ-e25Eszz12OeCM17j5DdXVimBVaLj53w,129
|
|
54
54
|
unicex/gate/websocket_manager.py,sha256=phtHbvAGQD3mtewCUxBuuD1Nj0FXN6oZrd7tnmT7c2c,25832
|
|
55
55
|
unicex/hyperliquid/__init__.py,sha256=qGTAkwfXLvknvHET_iA7Qml3jkxxxA0moU_98nGTcVU,944
|
|
@@ -69,13 +69,13 @@ unicex/kucoin/uni_websocket_manager.py,sha256=rvrhQkvktZhbfb505KmkiBtf7Y4drClgtq
|
|
|
69
69
|
unicex/kucoin/user_websocket.py,sha256=Tx0yuGpf2HrPbcOHHZioYjVp6LBfagOKF-zzD3UM0Ok,129
|
|
70
70
|
unicex/kucoin/websocket_manager.py,sha256=GNNpzxONgTuTByrsGk1MNMlj5-zx5vs_WBTgssYSYDQ,270
|
|
71
71
|
unicex/mexc/__init__.py,sha256=lltANqM_2P-fmF5j8o5-pjmORPuK6C5sVjcQhuUU_R0,923
|
|
72
|
-
unicex/mexc/adapter.py,sha256=
|
|
72
|
+
unicex/mexc/adapter.py,sha256=OGlTAJ0IRg4YVu9cMKDH9orPd6FnIUDqKO8jHa_BpQs,13631
|
|
73
73
|
unicex/mexc/client.py,sha256=FBUSs4Hu2DExVKPKJG9OawbqidACPFJ1U_1md05E3Mc,31004
|
|
74
74
|
unicex/mexc/exchange_info.py,sha256=z2bQsVU0ciXV2_DFkueZHo1X35KIK2alD-7ZZjNg5Kc,1763
|
|
75
75
|
unicex/mexc/uni_client.py,sha256=_nYIl46-yvyUVKZxkSLCHRxgTnM75TmZqaxCsUp8woI,9482
|
|
76
|
-
unicex/mexc/uni_websocket_manager.py,sha256=
|
|
76
|
+
unicex/mexc/uni_websocket_manager.py,sha256=4doElI-dPvAXs8a5HpU8gtpZznWf7YtAXTl8lTLjsiU,10804
|
|
77
77
|
unicex/mexc/user_websocket.py,sha256=l77-e6i0B2btd7a5IcCytbgswnV171NqOhunTcbaq48,127
|
|
78
|
-
unicex/mexc/websocket_manager.py,sha256=
|
|
78
|
+
unicex/mexc/websocket_manager.py,sha256=0VhgXJil4xXm-YLuW2WVT7REv0oaivd9nZ4VI14rUzI,22926
|
|
79
79
|
unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py,sha256=3bP1pGjeO-Norp7DhhdrQ4FcQTEKkCiL2mLagyoJHp8,1879
|
|
80
80
|
unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py,sha256=mamFaZHymW5HhoTO8_mZz9y8kQcIsguCpaLf6xpC4Cc,1991
|
|
81
81
|
unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py,sha256=HsQUfInnjlsn8SJkobN-5FK1PS_0NsIvyuT1ABtbdTY,2982
|
|
@@ -95,15 +95,15 @@ unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py,sha256=0FOMsSO4jzMQ6446yZ
|
|
|
95
95
|
unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py,sha256=_V0StMrDE7-bsdRPQdTC2XLGDGqJ5U_scx8ZjcyCGgk,3735
|
|
96
96
|
unicex/mexc/_spot_ws_proto/__init__.py,sha256=L8Jft1713_M8CLR9drgSjLBdY_46sPT3O9zDFlxYvgc,11431
|
|
97
97
|
unicex/okx/__init__.py,sha256=Ljbw3AP0YrPF5bIPJi_3JP3B_czR9xurYHI24rgWk9M,920
|
|
98
|
-
unicex/okx/adapter.py,sha256=
|
|
98
|
+
unicex/okx/adapter.py,sha256=4MpQh12nzlzB0HbOCHItYoWNFXbFCe9DntVC0smm-PY,7609
|
|
99
99
|
unicex/okx/client.py,sha256=N7ma49ToMGjYiTvuoV52-NaG-vLx3s087KF67dQCRBs,91079
|
|
100
|
-
unicex/okx/exchange_info.py,sha256=
|
|
100
|
+
unicex/okx/exchange_info.py,sha256=z2GrMkhZSJLdLsscqIfwQnWlnsX-RWPqGIbVfVbOVg4,1786
|
|
101
101
|
unicex/okx/uni_client.py,sha256=E_Wod0JSGt1K6k1mAIWnOv350pELbv-nic7g1KgOuos,8694
|
|
102
|
-
unicex/okx/uni_websocket_manager.py,sha256=
|
|
102
|
+
unicex/okx/uni_websocket_manager.py,sha256=wrROl5RmxCJC8o_k6mc1UufbNsOKTRhIFqq5yinXUBQ,11626
|
|
103
103
|
unicex/okx/user_websocket.py,sha256=8c9kpm-xVa729pW93OKUGLHaE9MY0uzEpjIgNIFRF80,126
|
|
104
|
-
unicex/okx/websocket_manager.py,sha256=
|
|
105
|
-
unicex-0.
|
|
106
|
-
unicex-0.
|
|
107
|
-
unicex-0.
|
|
108
|
-
unicex-0.
|
|
109
|
-
unicex-0.
|
|
104
|
+
unicex/okx/websocket_manager.py,sha256=3sXjN0BJGyj2aK05J4WJ_-hhwaSX9PvzhaZri86OlZg,25038
|
|
105
|
+
unicex-0.16.2.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
|
|
106
|
+
unicex-0.16.2.dist-info/METADATA,sha256=SagvkivMkeSaclaawc09cIbOMOit1jIXucHlZMKz7q8,11972
|
|
107
|
+
unicex-0.16.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
108
|
+
unicex-0.16.2.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
|
|
109
|
+
unicex-0.16.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|