unicex 0.2.0__py3-none-any.whl → 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- unicex/__init__.py +217 -12
- unicex/_abc/__init__.py +0 -2
- unicex/_abc/uni_client.py +44 -41
- unicex/_abc/uni_websocket_manager.py +6 -6
- unicex/_base/websocket.py +7 -7
- unicex/binance/__init__.py +7 -1
- unicex/binance/adapter.py +42 -123
- unicex/binance/client.py +69 -127
- unicex/binance/uni_client.py +75 -46
- unicex/binance/uni_websocket_manager.py +4 -4
- unicex/bitget/__init__.py +9 -1
- unicex/bitget/adapter.py +72 -136
- unicex/bitget/client.py +1648 -27
- unicex/bitget/uni_client.py +80 -41
- unicex/bitget/uni_websocket_manager.py +9 -4
- unicex/bitget/user_websocket.py +7 -0
- unicex/bitget/websocket_manager.py +143 -6
- unicex/bitrue/__init__.py +15 -0
- unicex/bitrue/adapter.py +8 -0
- unicex/bitrue/client.py +128 -0
- unicex/bitrue/uni_client.py +151 -0
- unicex/bitrue/uni_websocket_manager.py +269 -0
- unicex/bitrue/user_websocket.py +7 -0
- unicex/bitrue/websocket_manager.py +11 -0
- unicex/bitunix/__init__.py +15 -0
- unicex/bitunix/adapter.py +8 -0
- unicex/bitunix/client.py +8 -0
- unicex/bitunix/uni_client.py +151 -0
- unicex/bitunix/uni_websocket_manager.py +269 -0
- unicex/bitunix/user_websocket.py +7 -0
- unicex/bitunix/websocket_manager.py +11 -0
- unicex/btse/__init__.py +15 -0
- unicex/btse/adapter.py +8 -0
- unicex/btse/client.py +123 -0
- unicex/btse/uni_client.py +151 -0
- unicex/btse/uni_websocket_manager.py +269 -0
- unicex/btse/user_websocket.py +7 -0
- unicex/btse/websocket_manager.py +11 -0
- unicex/bybit/__init__.py +15 -0
- unicex/bybit/adapter.py +127 -0
- unicex/bybit/client.py +1869 -0
- unicex/bybit/uni_client.py +200 -0
- unicex/bybit/uni_websocket_manager.py +269 -0
- unicex/bybit/user_websocket.py +7 -0
- unicex/bybit/websocket_manager.py +11 -0
- unicex/enums.py +133 -9
- unicex/extra.py +56 -17
- unicex/gateio/__init__.py +15 -0
- unicex/gateio/adapter.py +178 -0
- unicex/gateio/client.py +1667 -0
- unicex/gateio/uni_client.py +214 -0
- unicex/gateio/uni_websocket_manager.py +269 -0
- unicex/gateio/user_websocket.py +7 -0
- unicex/gateio/websocket_manager.py +11 -0
- unicex/hyperliquid/__init__.py +15 -0
- unicex/hyperliquid/adapter.py +140 -0
- unicex/hyperliquid/client.py +232 -0
- unicex/hyperliquid/uni_client.py +171 -0
- unicex/hyperliquid/uni_websocket_manager.py +269 -0
- unicex/hyperliquid/user_websocket.py +7 -0
- unicex/hyperliquid/websocket_manager.py +11 -0
- unicex/kcex/__init__.py +15 -0
- unicex/kcex/adapter.py +8 -0
- unicex/kcex/client.py +8 -0
- unicex/kcex/uni_client.py +151 -0
- unicex/kcex/uni_websocket_manager.py +269 -0
- unicex/kcex/user_websocket.py +7 -0
- unicex/kcex/websocket_manager.py +11 -0
- unicex/kraken/__init__.py +15 -0
- unicex/kraken/adapter.py +8 -0
- unicex/kraken/client.py +165 -0
- unicex/kraken/uni_client.py +151 -0
- unicex/kraken/uni_websocket_manager.py +269 -0
- unicex/kraken/user_websocket.py +7 -0
- unicex/kraken/websocket_manager.py +11 -0
- unicex/kucoin/__init__.py +15 -0
- unicex/kucoin/adapter.py +8 -0
- unicex/kucoin/client.py +120 -0
- unicex/kucoin/uni_client.py +151 -0
- unicex/kucoin/uni_websocket_manager.py +269 -0
- unicex/kucoin/user_websocket.py +7 -0
- unicex/kucoin/websocket_manager.py +11 -0
- unicex/mapper.py +53 -1
- unicex/mexc/__init__.py +15 -0
- unicex/mexc/adapter.py +222 -0
- unicex/mexc/client.py +846 -0
- unicex/mexc/uni_client.py +205 -0
- unicex/mexc/uni_websocket_manager.py +269 -0
- unicex/mexc/user_websocket.py +7 -0
- unicex/mexc/websocket_manager.py +11 -0
- unicex/okx/__init__.py +15 -0
- unicex/okx/adapter.py +122 -0
- unicex/okx/client.py +280 -0
- unicex/okx/uni_client.py +202 -0
- unicex/okx/uni_websocket_manager.py +269 -0
- unicex/okx/user_websocket.py +7 -0
- unicex/okx/websocket_manager.py +11 -0
- unicex/types.py +24 -3
- unicex/utils.py +82 -6
- unicex/weex/__init__.py +15 -0
- unicex/weex/adapter.py +8 -0
- unicex/weex/client.py +8 -0
- unicex/weex/uni_client.py +151 -0
- unicex/weex/uni_websocket_manager.py +269 -0
- unicex/weex/user_websocket.py +7 -0
- unicex/weex/websocket_manager.py +11 -0
- unicex/xt/__init__.py +15 -0
- unicex/xt/adapter.py +8 -0
- unicex/xt/client.py +8 -0
- unicex/xt/uni_client.py +151 -0
- unicex/xt/uni_websocket_manager.py +269 -0
- unicex/xt/user_websocket.py +7 -0
- unicex/xt/websocket_manager.py +11 -0
- {unicex-0.2.0.dist-info → unicex-0.4.0.dist-info}/METADATA +63 -15
- unicex-0.4.0.dist-info/RECORD +123 -0
- unicex/_abc/adapter.py +0 -231
- unicex-0.2.0.dist-info/RECORD +0 -32
- {unicex-0.2.0.dist-info → unicex-0.4.0.dist-info}/WHEEL +0 -0
- {unicex-0.2.0.dist-info → unicex-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {unicex-0.2.0.dist-info → unicex-0.4.0.dist-info}/top_level.txt +0 -0
unicex/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""unicex - библиотека для работы с криптовалютными биржами, реализующая унифицированный интерфейс для работы с различными криптовалютными биржами."""
|
|
2
2
|
|
|
3
3
|
__all__ = [
|
|
4
4
|
# Mappers
|
|
@@ -19,7 +19,6 @@ __all__ = [
|
|
|
19
19
|
# Interfaces
|
|
20
20
|
"IUniClient",
|
|
21
21
|
"IUniWebsocketManager",
|
|
22
|
-
"IAdapter",
|
|
23
22
|
# Base clients and websockets
|
|
24
23
|
"Websocket",
|
|
25
24
|
"BaseClient",
|
|
@@ -28,23 +27,229 @@ __all__ = [
|
|
|
28
27
|
"BinanceUniClient",
|
|
29
28
|
"BinanceWebsocketManager",
|
|
30
29
|
"BinanceUniWebsocketManager",
|
|
30
|
+
"BinanceUserWebsocket",
|
|
31
31
|
# Bitget
|
|
32
32
|
"BitgetClient",
|
|
33
33
|
"BitgetUniClient",
|
|
34
34
|
"BitgetUniWebsocketManager",
|
|
35
35
|
"BitgetWebsocketManager",
|
|
36
|
+
"BitgetUserWebsocket",
|
|
37
|
+
# Bitrue
|
|
38
|
+
"BitrueClient",
|
|
39
|
+
"BitrueUniClient",
|
|
40
|
+
"BitrueUniWebsocketManager",
|
|
41
|
+
"BitrueWebsocketManager",
|
|
42
|
+
"BitrueUserWebsocket",
|
|
43
|
+
# Mexc
|
|
44
|
+
"MexcClient",
|
|
45
|
+
"MexcUniClient",
|
|
46
|
+
"MexcUniWebsocketManager",
|
|
47
|
+
"MexcWebsocketManager",
|
|
48
|
+
"MexcUserWebsocket",
|
|
49
|
+
# Bybit
|
|
50
|
+
"BybitClient",
|
|
51
|
+
"BybitUniClient",
|
|
52
|
+
"BybitUniWebsocketManager",
|
|
53
|
+
"BybitWebsocketManager",
|
|
54
|
+
"BybitUserWebsocket",
|
|
55
|
+
# Okx
|
|
56
|
+
"OkxClient",
|
|
57
|
+
"OkxUniClient",
|
|
58
|
+
"OkxUniWebsocketManager",
|
|
59
|
+
"OkxWebsocketManager",
|
|
60
|
+
"OkxUserWebsocket",
|
|
61
|
+
# Hyperliquid
|
|
62
|
+
"HyperliquidClient",
|
|
63
|
+
"HyperliquidUniClient",
|
|
64
|
+
"HyperliquidUniWebsocketManager",
|
|
65
|
+
"HyperliquidWebsocketManager",
|
|
66
|
+
"HyperliquidUserWebsocket",
|
|
67
|
+
# Gateio
|
|
68
|
+
"GateioClient",
|
|
69
|
+
"GateioUniClient",
|
|
70
|
+
"GateioUniWebsocketManager",
|
|
71
|
+
"GateioWebsocketManager",
|
|
72
|
+
"GateioUserWebsocket",
|
|
73
|
+
# Bitunix
|
|
74
|
+
"BitunixClient",
|
|
75
|
+
"BitunixUniClient",
|
|
76
|
+
"BitunixUniWebsocketManager",
|
|
77
|
+
"BitunixWebsocketManager",
|
|
78
|
+
"BitunixUserWebsocket",
|
|
79
|
+
# Btse
|
|
80
|
+
"BtseClient",
|
|
81
|
+
"BtseUniClient",
|
|
82
|
+
"BtseUniWebsocketManager",
|
|
83
|
+
"BtseWebsocketManager",
|
|
84
|
+
"BtseUserWebsocket",
|
|
85
|
+
# Kcex
|
|
86
|
+
"KcexClient",
|
|
87
|
+
"KcexUniClient",
|
|
88
|
+
"KcexUniWebsocketManager",
|
|
89
|
+
"KcexWebsocketManager",
|
|
90
|
+
"KcexUserWebsocket",
|
|
91
|
+
# Kraken
|
|
92
|
+
"KrakenClient",
|
|
93
|
+
"KrakenUniClient",
|
|
94
|
+
"KrakenUniWebsocketManager",
|
|
95
|
+
"KrakenWebsocketManager",
|
|
96
|
+
"KrakenUserWebsocket",
|
|
97
|
+
# Kucoin
|
|
98
|
+
"KucoinClient",
|
|
99
|
+
"KucoinUniClient",
|
|
100
|
+
"KucoinUniWebsocketManager",
|
|
101
|
+
"KucoinWebsocketManager",
|
|
102
|
+
"KucoinUserWebsocket",
|
|
103
|
+
# Weex
|
|
104
|
+
"WeexClient",
|
|
105
|
+
"WeexUniClient",
|
|
106
|
+
"WeexUniWebsocketManager",
|
|
107
|
+
"WeexWebsocketManager",
|
|
108
|
+
"WeexUserWebsocket",
|
|
109
|
+
# Xt
|
|
110
|
+
"XtClient",
|
|
111
|
+
"XtUniClient",
|
|
112
|
+
"XtUniWebsocketManager",
|
|
113
|
+
"XtWebsocketManager",
|
|
114
|
+
"XtUserWebsocket",
|
|
36
115
|
]
|
|
37
116
|
|
|
38
|
-
|
|
117
|
+
# ruff: noqa
|
|
118
|
+
|
|
119
|
+
# abstract & base
|
|
120
|
+
from ._abc import IUniClient, IUniWebsocketManager
|
|
39
121
|
from ._base import BaseClient, Websocket
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
from .binance import UniWebsocketManager as BinanceUniWebsocketManager
|
|
43
|
-
from .binance import WebsocketManager as BinanceWebsocketManager
|
|
44
|
-
from .bitget import Client as BitgetClient
|
|
45
|
-
from .bitget import UniClient as BitgetUniClient
|
|
46
|
-
from .bitget import UniWebsocketManager as BitgetUniWebsocketManager
|
|
47
|
-
from .bitget import WebsocketManager as BitgetWebsocketManager
|
|
122
|
+
|
|
123
|
+
# enums, mappers, types
|
|
48
124
|
from .enums import Exchange, MarketType, Side, Timeframe
|
|
49
125
|
from .mapper import get_uni_client, get_uni_websocket_manager
|
|
50
|
-
from .types import
|
|
126
|
+
from .types import (
|
|
127
|
+
AggTradeDict,
|
|
128
|
+
KlineDict,
|
|
129
|
+
LoggerLike,
|
|
130
|
+
RequestMethod,
|
|
131
|
+
TickerDailyDict,
|
|
132
|
+
TradeDict,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
# exchanges
|
|
136
|
+
|
|
137
|
+
from .binance import (
|
|
138
|
+
Client as BinanceClient,
|
|
139
|
+
UniClient as BinanceUniClient,
|
|
140
|
+
UniWebsocketManager as BinanceUniWebsocketManager,
|
|
141
|
+
UserWebsocket as BinanceUserWebsocket,
|
|
142
|
+
WebsocketManager as BinanceWebsocketManager,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
from .bitget import (
|
|
146
|
+
Client as BitgetClient,
|
|
147
|
+
UniClient as BitgetUniClient,
|
|
148
|
+
UniWebsocketManager as BitgetUniWebsocketManager,
|
|
149
|
+
UserWebsocket as BitgetUserWebsocket,
|
|
150
|
+
WebsocketManager as BitgetWebsocketManager,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
from .bitrue import (
|
|
154
|
+
Client as BitrueClient,
|
|
155
|
+
UniClient as BitrueUniClient,
|
|
156
|
+
UniWebsocketManager as BitrueUniWebsocketManager,
|
|
157
|
+
UserWebsocket as BitrueUserWebsocket,
|
|
158
|
+
WebsocketManager as BitrueWebsocketManager,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
from .bitunix import (
|
|
162
|
+
Client as BitunixClient,
|
|
163
|
+
UniClient as BitunixUniClient,
|
|
164
|
+
UniWebsocketManager as BitunixUniWebsocketManager,
|
|
165
|
+
UserWebsocket as BitunixUserWebsocket,
|
|
166
|
+
WebsocketManager as BitunixWebsocketManager,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
from .btse import (
|
|
170
|
+
Client as BtseClient,
|
|
171
|
+
UniClient as BtseUniClient,
|
|
172
|
+
UniWebsocketManager as BtseUniWebsocketManager,
|
|
173
|
+
UserWebsocket as BtseUserWebsocket,
|
|
174
|
+
WebsocketManager as BtseWebsocketManager,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
from .bybit import (
|
|
178
|
+
Client as BybitClient,
|
|
179
|
+
UniClient as BybitUniClient,
|
|
180
|
+
UniWebsocketManager as BybitUniWebsocketManager,
|
|
181
|
+
UserWebsocket as BybitUserWebsocket,
|
|
182
|
+
WebsocketManager as BybitWebsocketManager,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
from .gateio import (
|
|
186
|
+
Client as GateioClient,
|
|
187
|
+
UniClient as GateioUniClient,
|
|
188
|
+
UniWebsocketManager as GateioUniWebsocketManager,
|
|
189
|
+
UserWebsocket as GateioUserWebsocket,
|
|
190
|
+
WebsocketManager as GateioWebsocketManager,
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
from .hyperliquid import (
|
|
194
|
+
Client as HyperliquidClient,
|
|
195
|
+
UniClient as HyperliquidUniClient,
|
|
196
|
+
UniWebsocketManager as HyperliquidUniWebsocketManager,
|
|
197
|
+
UserWebsocket as HyperliquidUserWebsocket,
|
|
198
|
+
WebsocketManager as HyperliquidWebsocketManager,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
from .kcex import (
|
|
202
|
+
Client as KcexClient,
|
|
203
|
+
UniClient as KcexUniClient,
|
|
204
|
+
UniWebsocketManager as KcexUniWebsocketManager,
|
|
205
|
+
UserWebsocket as KcexUserWebsocket,
|
|
206
|
+
WebsocketManager as KcexWebsocketManager,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
from .kraken import (
|
|
210
|
+
Client as KrakenClient,
|
|
211
|
+
UniClient as KrakenUniClient,
|
|
212
|
+
UniWebsocketManager as KrakenUniWebsocketManager,
|
|
213
|
+
UserWebsocket as KrakenUserWebsocket,
|
|
214
|
+
WebsocketManager as KrakenWebsocketManager,
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
from .kucoin import (
|
|
218
|
+
Client as KucoinClient,
|
|
219
|
+
UniClient as KucoinUniClient,
|
|
220
|
+
UniWebsocketManager as KucoinUniWebsocketManager,
|
|
221
|
+
UserWebsocket as KucoinUserWebsocket,
|
|
222
|
+
WebsocketManager as KucoinWebsocketManager,
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
from .mexc import (
|
|
226
|
+
Client as MexcClient,
|
|
227
|
+
UniClient as MexcUniClient,
|
|
228
|
+
UniWebsocketManager as MexcUniWebsocketManager,
|
|
229
|
+
UserWebsocket as MexcUserWebsocket,
|
|
230
|
+
WebsocketManager as MexcWebsocketManager,
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
from .okx import (
|
|
234
|
+
Client as OkxClient,
|
|
235
|
+
UniClient as OkxUniClient,
|
|
236
|
+
UniWebsocketManager as OkxUniWebsocketManager,
|
|
237
|
+
UserWebsocket as OkxUserWebsocket,
|
|
238
|
+
WebsocketManager as OkxWebsocketManager,
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
from .weex import (
|
|
242
|
+
Client as WeexClient,
|
|
243
|
+
UniClient as WeexUniClient,
|
|
244
|
+
UniWebsocketManager as WeexUniWebsocketManager,
|
|
245
|
+
UserWebsocket as WeexUserWebsocket,
|
|
246
|
+
WebsocketManager as WeexWebsocketManager,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
from .xt import (
|
|
250
|
+
Client as XtClient,
|
|
251
|
+
UniClient as XtUniClient,
|
|
252
|
+
UniWebsocketManager as XtUniWebsocketManager,
|
|
253
|
+
UserWebsocket as XtUserWebsocket,
|
|
254
|
+
WebsocketManager as XtWebsocketManager,
|
|
255
|
+
)
|
unicex/_abc/__init__.py
CHANGED
unicex/_abc/uni_client.py
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
__all__ = ["IUniClient"]
|
|
2
2
|
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
|
-
from functools import cached_property
|
|
5
4
|
from typing import Generic, Self, TypeVar, overload
|
|
6
5
|
|
|
7
6
|
import aiohttp
|
|
8
7
|
|
|
9
8
|
from unicex._base import BaseClient
|
|
10
9
|
from unicex.enums import Timeframe
|
|
11
|
-
from unicex.types import KlineDict, LoggerLike, TickerDailyDict
|
|
10
|
+
from unicex.types import KlineDict, LoggerLike, OpenInterestDict, OpenInterestItem, TickerDailyDict
|
|
12
11
|
from unicex.utils import batched_list
|
|
13
12
|
|
|
14
|
-
from .adapter import IAdapter
|
|
15
|
-
|
|
16
13
|
TClient = TypeVar("TClient", bound="BaseClient")
|
|
17
14
|
|
|
18
15
|
|
|
@@ -149,17 +146,7 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
149
146
|
Возвращает:
|
|
150
147
|
`type[TClient]`: Класс клиента.
|
|
151
148
|
"""
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
@cached_property
|
|
155
|
-
@abstractmethod
|
|
156
|
-
def adapter(self) -> IAdapter:
|
|
157
|
-
"""Возвращает реализацию адаптера под конкретную биржу.
|
|
158
|
-
|
|
159
|
-
Возвращает:
|
|
160
|
-
`IAdapter`: Реализация адаптера.
|
|
161
|
-
"""
|
|
162
|
-
pass
|
|
149
|
+
...
|
|
163
150
|
|
|
164
151
|
@abstractmethod
|
|
165
152
|
async def tickers(self, only_usdt: bool = True) -> list[str]:
|
|
@@ -171,7 +158,7 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
171
158
|
Возвращает:
|
|
172
159
|
`list[str]`: Список тикеров.
|
|
173
160
|
"""
|
|
174
|
-
|
|
161
|
+
...
|
|
175
162
|
|
|
176
163
|
async def tickers_batched(
|
|
177
164
|
self, only_usdt: bool = True, batch_size: int = 20
|
|
@@ -198,7 +185,7 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
198
185
|
Возвращает:
|
|
199
186
|
`list[str]`: Список тикеров.
|
|
200
187
|
"""
|
|
201
|
-
|
|
188
|
+
...
|
|
202
189
|
|
|
203
190
|
async def futures_tickers_batched(
|
|
204
191
|
self, only_usdt: bool = True, batch_size: int = 20
|
|
@@ -222,7 +209,7 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
222
209
|
Возвращает:
|
|
223
210
|
`dict[str, float]`: Словарь с последними ценами для каждого тикера.
|
|
224
211
|
"""
|
|
225
|
-
|
|
212
|
+
...
|
|
226
213
|
|
|
227
214
|
@abstractmethod
|
|
228
215
|
async def futures_last_price(self) -> dict[str, float]:
|
|
@@ -231,31 +218,31 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
231
218
|
Возвращает:
|
|
232
219
|
`dict[str, float]`: Словарь с последними ценами для каждого тикера.
|
|
233
220
|
"""
|
|
234
|
-
|
|
221
|
+
...
|
|
235
222
|
|
|
236
223
|
@abstractmethod
|
|
237
|
-
async def
|
|
224
|
+
async def ticker_24hr(self) -> TickerDailyDict:
|
|
238
225
|
"""Возвращает статистику за последние 24 часа для каждого тикера.
|
|
239
226
|
|
|
240
227
|
Возвращает:
|
|
241
|
-
`
|
|
228
|
+
`TickerDailyDict`: Словарь с статистикой за последние 24 часа для каждого тикера.
|
|
242
229
|
"""
|
|
243
|
-
|
|
230
|
+
...
|
|
244
231
|
|
|
245
232
|
@abstractmethod
|
|
246
|
-
async def
|
|
233
|
+
async def futures_ticker_24hr(self) -> TickerDailyDict:
|
|
247
234
|
"""Возвращает статистику за последние 24 часа для каждого тикера.
|
|
248
235
|
|
|
249
236
|
Возвращает:
|
|
250
|
-
`
|
|
237
|
+
`TickerDailyDict`: Словарь с статистикой за последние 24 часа для каждого тикера.
|
|
251
238
|
"""
|
|
252
|
-
|
|
239
|
+
...
|
|
253
240
|
|
|
254
241
|
@abstractmethod
|
|
255
242
|
async def klines(
|
|
256
243
|
self,
|
|
257
244
|
symbol: str,
|
|
258
|
-
interval: Timeframe,
|
|
245
|
+
interval: Timeframe | str,
|
|
259
246
|
limit: int | None = None,
|
|
260
247
|
start_time: int | None = None,
|
|
261
248
|
end_time: int | None = None,
|
|
@@ -272,13 +259,13 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
272
259
|
Возвращает:
|
|
273
260
|
`list[KlineDict]`: Список свечей.
|
|
274
261
|
"""
|
|
275
|
-
|
|
262
|
+
...
|
|
276
263
|
|
|
277
264
|
@abstractmethod
|
|
278
265
|
async def futures_klines(
|
|
279
266
|
self,
|
|
280
267
|
symbol: str,
|
|
281
|
-
interval: Timeframe,
|
|
268
|
+
interval: Timeframe | str,
|
|
282
269
|
limit: int | None = None,
|
|
283
270
|
start_time: int | None = None,
|
|
284
271
|
end_time: int | None = None,
|
|
@@ -295,32 +282,48 @@ class IUniClient(ABC, Generic[TClient]):
|
|
|
295
282
|
Возвращает:
|
|
296
283
|
`list[KlineDict]`: Список свечей.
|
|
297
284
|
"""
|
|
298
|
-
|
|
285
|
+
...
|
|
286
|
+
|
|
287
|
+
@overload
|
|
288
|
+
async def funding_rate(self, symbol: str) -> float: ...
|
|
289
|
+
|
|
290
|
+
@overload
|
|
291
|
+
async def funding_rate(self, symbol: None) -> dict[str, float]: ...
|
|
292
|
+
|
|
293
|
+
@overload
|
|
294
|
+
async def funding_rate(self) -> dict[str, float]: ...
|
|
299
295
|
|
|
300
296
|
@abstractmethod
|
|
301
|
-
async def funding_rate(self) -> dict[str, float]:
|
|
302
|
-
"""Возвращает ставку финансирования для всех
|
|
297
|
+
async def funding_rate(self, symbol: str | None = None) -> dict[str, float] | float:
|
|
298
|
+
"""Возвращает ставку финансирования для тикера или всех тикеров, если тикер не указан.
|
|
299
|
+
|
|
300
|
+
Параметры:
|
|
301
|
+
symbol (`str | None`): Название тикера (Опционально).
|
|
303
302
|
|
|
304
303
|
Возвращает:
|
|
305
|
-
`dict[str, float]`: Ставка финансирования для
|
|
304
|
+
`dict[str, float] | float`: Ставка финансирования для тикера или словарь со ставками для всех тикеров.
|
|
306
305
|
"""
|
|
307
|
-
|
|
306
|
+
...
|
|
307
|
+
|
|
308
|
+
@overload
|
|
309
|
+
async def open_interest(self, symbol: str) -> OpenInterestItem: ...
|
|
308
310
|
|
|
309
311
|
@overload
|
|
310
|
-
async def open_interest(self, symbol:
|
|
312
|
+
async def open_interest(self, symbol: None) -> OpenInterestDict: ...
|
|
311
313
|
|
|
312
314
|
@overload
|
|
313
|
-
async def open_interest(self
|
|
315
|
+
async def open_interest(self) -> OpenInterestDict: ...
|
|
314
316
|
|
|
315
317
|
@abstractmethod
|
|
316
|
-
async def open_interest(self, symbol: str | None) ->
|
|
317
|
-
"""Возвращает объем открытого интереса для тикера или всех тикеров,
|
|
318
|
-
если тикер не указан.
|
|
318
|
+
async def open_interest(self, symbol: str | None = None) -> OpenInterestItem | OpenInterestDict:
|
|
319
|
+
"""Возвращает объем открытого интереса для тикера или всех тикеров, если тикер не указан.
|
|
319
320
|
|
|
320
321
|
Параметры:
|
|
321
|
-
symbol (`str | None`): Название тикера (
|
|
322
|
+
symbol (`str | None`): Название тикера (Опционально, но обязателен для следующих бирж: BINANCE).
|
|
322
323
|
|
|
323
324
|
Возвращает:
|
|
324
|
-
`
|
|
325
|
+
`OpenInterestItem | OpenInterestDict`: Если тикер передан - словарь со временем и объемом
|
|
326
|
+
открытого интереса в монетах. Если нет передан - то словарь, в котором ключ - тикер,
|
|
327
|
+
а значение - словарь с временем и объемом открытого интереса в монетах.
|
|
325
328
|
"""
|
|
326
|
-
|
|
329
|
+
...
|
|
@@ -92,7 +92,7 @@ class IUniWebsocketManager(ABC):
|
|
|
92
92
|
Возвращает:
|
|
93
93
|
`Websocket`: Экземпляр вебсокета для управления соединением.
|
|
94
94
|
"""
|
|
95
|
-
|
|
95
|
+
...
|
|
96
96
|
|
|
97
97
|
@overload
|
|
98
98
|
def futures_klines(
|
|
@@ -135,7 +135,7 @@ class IUniWebsocketManager(ABC):
|
|
|
135
135
|
Возвращает:
|
|
136
136
|
`Websocket`: Экземпляр вебсокета.
|
|
137
137
|
"""
|
|
138
|
-
|
|
138
|
+
...
|
|
139
139
|
|
|
140
140
|
@overload
|
|
141
141
|
def trades(
|
|
@@ -174,7 +174,7 @@ class IUniWebsocketManager(ABC):
|
|
|
174
174
|
Возвращает:
|
|
175
175
|
`Websocket`: Экземпляр вебсокета.
|
|
176
176
|
"""
|
|
177
|
-
|
|
177
|
+
...
|
|
178
178
|
|
|
179
179
|
@overload
|
|
180
180
|
def aggtrades(
|
|
@@ -213,7 +213,7 @@ class IUniWebsocketManager(ABC):
|
|
|
213
213
|
Возвращает:
|
|
214
214
|
`Websocket`: Экземпляр вебсокета.
|
|
215
215
|
"""
|
|
216
|
-
|
|
216
|
+
...
|
|
217
217
|
|
|
218
218
|
@overload
|
|
219
219
|
def futures_trades(
|
|
@@ -252,7 +252,7 @@ class IUniWebsocketManager(ABC):
|
|
|
252
252
|
Возвращает:
|
|
253
253
|
`Websocket`: Экземпляр вебсокета.
|
|
254
254
|
"""
|
|
255
|
-
|
|
255
|
+
...
|
|
256
256
|
|
|
257
257
|
@overload
|
|
258
258
|
def futures_aggtrades(
|
|
@@ -291,4 +291,4 @@ class IUniWebsocketManager(ABC):
|
|
|
291
291
|
Возвращает:
|
|
292
292
|
`Websocket`: Экземпляр вебсокета.
|
|
293
293
|
"""
|
|
294
|
-
|
|
294
|
+
...
|
unicex/_base/websocket.py
CHANGED
|
@@ -125,11 +125,15 @@ class Websocket:
|
|
|
125
125
|
|
|
126
126
|
# Проверяем размер очереди сообщений и выбрасываем ошибку, если он превышает максимальный размер
|
|
127
127
|
self._check_queue_size()
|
|
128
|
+
except QueueOverflowError:
|
|
129
|
+
self._logger.error("Message queue is overflow")
|
|
128
130
|
except orjson.JSONDecodeError as e:
|
|
129
131
|
if message in ["ping", "pong"]:
|
|
130
|
-
self._logger.debug(f"
|
|
132
|
+
self._logger.debug(f"Received ping message: {message}")
|
|
131
133
|
else:
|
|
132
134
|
self._logger.error(f"Failed to decode JSON message: {message}, error: {e}")
|
|
135
|
+
except Exception as e:
|
|
136
|
+
self._logger.error(f"Unexpected error: {e}")
|
|
133
137
|
|
|
134
138
|
def _check_queue_size(self) -> None:
|
|
135
139
|
"""Проверяет размер очереди и выбрасывает ошибку при переполнении."""
|
|
@@ -182,13 +186,9 @@ class Websocket:
|
|
|
182
186
|
except asyncio.exceptions.CancelledError:
|
|
183
187
|
break
|
|
184
188
|
except Exception as e:
|
|
185
|
-
self._logger.error(f"
|
|
189
|
+
self._logger.error(f"Error({type(e)}) while processing message: {e}")
|
|
186
190
|
|
|
187
|
-
|
|
188
|
-
self._queue.task_done()
|
|
189
|
-
except Exception as e:
|
|
190
|
-
if self._running:
|
|
191
|
-
self._logger.error(f"{self} Error({type(e)}) while marking task done: {e}")
|
|
191
|
+
self._queue.task_done()
|
|
192
192
|
|
|
193
193
|
def _generate_ws_kwargs(self) -> dict:
|
|
194
194
|
"""Генерирует аргументы для запуска вебсокета."""
|
unicex/binance/__init__.py
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"""Пакет, содержащий реализации клиентов и менеджеров для работы с биржей Binance."""
|
|
2
2
|
|
|
3
|
-
__all__ = [
|
|
3
|
+
__all__ = [
|
|
4
|
+
"Client",
|
|
5
|
+
"UniClient",
|
|
6
|
+
"UserWebsocket",
|
|
7
|
+
"WebsocketManager",
|
|
8
|
+
"UniWebsocketManager",
|
|
9
|
+
]
|
|
4
10
|
|
|
5
11
|
from .client import Client
|
|
6
12
|
from .uni_client import UniClient
|