unicex 0.17.4__tar.gz → 0.17.5__tar.gz
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-0.17.4/unicex.egg-info → unicex-0.17.5}/PKG-INFO +1 -1
- {unicex-0.17.4 → unicex-0.17.5}/pyproject.toml +1 -1
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_abc/uni_websocket_manager.py +1 -1
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/uni_websocket_manager.py +7 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/uni_websocket_manager.py +7 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/uni_websocket_manager.py +7 -1
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/uni_websocket_manager.py +10 -6
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/websocket_manager.py +115 -119
- {unicex-0.17.4 → unicex-0.17.5/unicex.egg-info}/PKG-INFO +1 -1
- {unicex-0.17.4 → unicex-0.17.5}/LICENSE +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/README.md +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/setup.cfg +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_abc/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_abc/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_abc/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_base/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_base/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/_base/websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/uni_websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/aster/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/uni_websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/binance/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/uni_websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bingx/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bitget/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/uni_websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/bybit/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/enums.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/exceptions.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/extra.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/gate/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/uni_websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/hyperliquid/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/uni_websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/kucoin/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mapper.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicAggreBookTickerV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicAggreDealsV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicAggreDepthsV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicBookTickerBatchV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicBookTickerV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicDealsV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicFuture_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsBatchV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicLimitDepthsV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicMiniTickerV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicMiniTickersV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/websocket_manager.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/__init__.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/adapter.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/exchange_info.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/uni_client.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/okx/user_websocket.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/types.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex/utils.py +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex.egg-info/SOURCES.txt +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex.egg-info/dependency_links.txt +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex.egg-info/requires.txt +0 -0
- {unicex-0.17.4 → unicex-0.17.5}/unicex.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ name = "unicex"
|
|
|
4
4
|
# • PATCH (x.y.Z) → увеличивается при багфиксе, который не ломает совместимость.
|
|
5
5
|
# • MINOR (x.Y.z) → увеличивается при добавлении новой функциональности, но без ломающих изменений (backward-compatible).
|
|
6
6
|
# • MAJOR (X.y.z) → увеличивается при изменениях, которые ломают обратную совместимость.
|
|
7
|
-
version = "0.17.
|
|
7
|
+
version = "0.17.5"
|
|
8
8
|
|
|
9
9
|
description = "Unified Crypto Exchange API "
|
|
10
10
|
readme = "README.md"
|
|
@@ -49,7 +49,7 @@ class IUniWebsocketManager(ABC):
|
|
|
49
49
|
except Exception as err:
|
|
50
50
|
self._logger.error(f"Failed to handle adapter error: {e}")
|
|
51
51
|
raise err from e
|
|
52
|
-
self._logger.
|
|
52
|
+
self._logger.error(f"Failed to adapt message: {e}")
|
|
53
53
|
return
|
|
54
54
|
if isinstance(adapted, list):
|
|
55
55
|
for item in adapted:
|
|
@@ -36,6 +36,13 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
36
36
|
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
37
37
|
self._adapter = Adapter()
|
|
38
38
|
|
|
39
|
+
def _is_service_message(self, raw_msg: Any) -> bool:
|
|
40
|
+
"""Дополнительно обрабатывает ошибку адаптации сообщения на случай, если это сервисное сообщение, например `ping` или `subscribe`.
|
|
41
|
+
|
|
42
|
+
Переопределяется в каждом наследнике в связи с разным форматом входящих данных.
|
|
43
|
+
"""
|
|
44
|
+
return raw_msg.get("event") == "subscribe"
|
|
45
|
+
|
|
39
46
|
@overload
|
|
40
47
|
def klines(
|
|
41
48
|
self,
|
|
@@ -36,6 +36,13 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
36
36
|
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
37
37
|
self._adapter = Adapter()
|
|
38
38
|
|
|
39
|
+
def _is_service_message(self, raw_msg: Any) -> bool:
|
|
40
|
+
"""Дополнительно обрабатывает ошибку адаптации сообщения на случай, если это сервисное сообщение, например `ping` или `subscribe`.
|
|
41
|
+
|
|
42
|
+
Переопределяется в каждом наследнике в связи с разным форматом входящих данных.
|
|
43
|
+
"""
|
|
44
|
+
return raw_msg.get("channel") in ["futures.pong"]
|
|
45
|
+
|
|
39
46
|
def _normalize_symbols(
|
|
40
47
|
self,
|
|
41
48
|
symbol: str | None,
|
|
@@ -41,7 +41,13 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
41
41
|
|
|
42
42
|
Переопределяется в каждом наследнике в связи с разным форматом входящих данных.
|
|
43
43
|
"""
|
|
44
|
-
|
|
44
|
+
is_sub_msg = raw_msg.get("channel") == "rs.sub.deal" and raw_msg.get("data") == "success"
|
|
45
|
+
|
|
46
|
+
is_pong_1 = raw_msg.get("channel") == "pong"
|
|
47
|
+
|
|
48
|
+
is_pont_2 = raw_msg.get("msg") == "PONG"
|
|
49
|
+
|
|
50
|
+
return any([is_sub_msg, is_pong_1, is_pont_2])
|
|
45
51
|
|
|
46
52
|
@overload
|
|
47
53
|
def klines(
|
|
@@ -36,21 +36,25 @@ class UniWebsocketManager(IUniWebsocketManager):
|
|
|
36
36
|
self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
|
|
37
37
|
self._adapter = Adapter()
|
|
38
38
|
|
|
39
|
+
def _is_service_message(self, raw_msg: Any) -> bool:
|
|
40
|
+
"""Дополнительно обрабатывает ошибку адаптации сообщения на случай, если это сервисное сообщение, например `ping` или `subscribe`.
|
|
41
|
+
|
|
42
|
+
Переопределяется в каждом наследнике в связи с разным форматом входящих данных.
|
|
43
|
+
"""
|
|
44
|
+
return raw_msg.get("event") == "subscribe"
|
|
45
|
+
|
|
39
46
|
def _normalize_symbol(
|
|
40
47
|
self,
|
|
41
48
|
symbol: str | None,
|
|
42
49
|
symbols: Sequence[str] | None,
|
|
43
|
-
) -> str:
|
|
50
|
+
) -> list[str]:
|
|
44
51
|
"""Преобразует параметры symbol/symbols в один тикер."""
|
|
45
52
|
if symbol and symbols:
|
|
46
53
|
raise ValueError("Parameters symbol and symbols cannot be used together")
|
|
47
54
|
if symbol:
|
|
48
|
-
return symbol
|
|
55
|
+
return [symbol]
|
|
49
56
|
if symbols:
|
|
50
|
-
|
|
51
|
-
if len(normalized) != 1:
|
|
52
|
-
raise ValueError("OKX websocket поддерживает только один тикер на соединение")
|
|
53
|
-
return normalized[0]
|
|
57
|
+
return list(symbols)
|
|
54
58
|
raise ValueError("Either symbol or symbols must be provided")
|
|
55
59
|
|
|
56
60
|
@overload
|
|
@@ -43,6 +43,23 @@ class WebsocketManager:
|
|
|
43
43
|
}
|
|
44
44
|
)
|
|
45
45
|
|
|
46
|
+
def _normalize_inst_ids(self, inst_id: str | list[str]) -> list[str]:
|
|
47
|
+
"""Нормализует inst_id до списка."""
|
|
48
|
+
if isinstance(inst_id, str):
|
|
49
|
+
return [inst_id]
|
|
50
|
+
if not inst_id:
|
|
51
|
+
raise ValueError("inst_id list cannot be empty")
|
|
52
|
+
return list(inst_id)
|
|
53
|
+
|
|
54
|
+
def _build_inst_id_args(
|
|
55
|
+
self,
|
|
56
|
+
base_args: dict[str, str],
|
|
57
|
+
inst_id: str | list[str],
|
|
58
|
+
) -> list[dict[str, str]]:
|
|
59
|
+
"""Формирует args для списка inst_id."""
|
|
60
|
+
inst_ids = self._normalize_inst_ids(inst_id)
|
|
61
|
+
return [{**base_args, "instId": item} for item in inst_ids]
|
|
62
|
+
|
|
46
63
|
def instruments(
|
|
47
64
|
self,
|
|
48
65
|
callback: CallbackType,
|
|
@@ -75,30 +92,23 @@ class WebsocketManager:
|
|
|
75
92
|
**self._ws_kwargs,
|
|
76
93
|
)
|
|
77
94
|
|
|
78
|
-
def open_interest(
|
|
79
|
-
self,
|
|
80
|
-
callback: CallbackType,
|
|
81
|
-
inst_id: str,
|
|
82
|
-
) -> Websocket:
|
|
95
|
+
def open_interest(self, callback: CallbackType, inst_id: str | list[str]) -> Websocket:
|
|
83
96
|
"""Создает вебсокет для получения данных об открытом интересе.
|
|
84
97
|
|
|
85
98
|
https://www.okx.com/docs-v5/en/#public-data-websocket-open-interest-channel
|
|
86
99
|
|
|
87
100
|
Параметры:
|
|
88
101
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
89
|
-
inst_id (`str`): ID инструмента (например, "LTC-USD-SWAP").
|
|
102
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "LTC-USD-SWAP").
|
|
90
103
|
|
|
91
104
|
Возвращает:
|
|
92
105
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
93
106
|
"""
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"channel": "open-interest",
|
|
98
|
-
"instId": inst_id,
|
|
99
|
-
}
|
|
100
|
-
]
|
|
107
|
+
args = self._build_inst_id_args(
|
|
108
|
+
{"channel": "open-interest"},
|
|
109
|
+
inst_id,
|
|
101
110
|
)
|
|
111
|
+
subscription_message = self._build_subscription_message(args)
|
|
102
112
|
|
|
103
113
|
return Websocket(
|
|
104
114
|
callback=callback,
|
|
@@ -110,7 +120,7 @@ class WebsocketManager:
|
|
|
110
120
|
def funding_rate(
|
|
111
121
|
self,
|
|
112
122
|
callback: CallbackType,
|
|
113
|
-
inst_id: str,
|
|
123
|
+
inst_id: str | list[str],
|
|
114
124
|
) -> Websocket:
|
|
115
125
|
"""Создает вебсокет для получения данных о ставке финансирования.
|
|
116
126
|
|
|
@@ -118,19 +128,16 @@ class WebsocketManager:
|
|
|
118
128
|
|
|
119
129
|
Параметры:
|
|
120
130
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
121
|
-
inst_id (`str`): ID инструмента (например, "BTC-USD-SWAP").
|
|
131
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USD-SWAP").
|
|
122
132
|
|
|
123
133
|
Возвращает:
|
|
124
134
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
125
135
|
"""
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
"channel": "funding-rate",
|
|
130
|
-
"instId": inst_id,
|
|
131
|
-
}
|
|
132
|
-
]
|
|
136
|
+
args = self._build_inst_id_args(
|
|
137
|
+
{"channel": "funding-rate"},
|
|
138
|
+
inst_id,
|
|
133
139
|
)
|
|
140
|
+
subscription_message = self._build_subscription_message(args)
|
|
134
141
|
|
|
135
142
|
return Websocket(
|
|
136
143
|
callback=callback,
|
|
@@ -142,7 +149,7 @@ class WebsocketManager:
|
|
|
142
149
|
def price_limit(
|
|
143
150
|
self,
|
|
144
151
|
callback: CallbackType,
|
|
145
|
-
inst_id: str,
|
|
152
|
+
inst_id: str | list[str],
|
|
146
153
|
) -> Websocket:
|
|
147
154
|
"""Создает вебсокет для получения максимальной цены покупки и минимальной цены продажи инструментов.
|
|
148
155
|
|
|
@@ -150,19 +157,16 @@ class WebsocketManager:
|
|
|
150
157
|
|
|
151
158
|
Параметры:
|
|
152
159
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
153
|
-
inst_id (`str`): ID инструмента (например, "LTC-USD-190628").
|
|
160
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "LTC-USD-190628").
|
|
154
161
|
|
|
155
162
|
Возвращает:
|
|
156
163
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
157
164
|
"""
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
"channel": "price-limit",
|
|
162
|
-
"instId": inst_id,
|
|
163
|
-
}
|
|
164
|
-
]
|
|
165
|
+
args = self._build_inst_id_args(
|
|
166
|
+
{"channel": "price-limit"},
|
|
167
|
+
inst_id,
|
|
165
168
|
)
|
|
169
|
+
subscription_message = self._build_subscription_message(args)
|
|
166
170
|
|
|
167
171
|
return Websocket(
|
|
168
172
|
callback=callback,
|
|
@@ -208,7 +212,7 @@ class WebsocketManager:
|
|
|
208
212
|
callback: CallbackType,
|
|
209
213
|
inst_type: Literal["OPTION", "FUTURES"],
|
|
210
214
|
inst_family: str | None = None,
|
|
211
|
-
inst_id: str | None = None,
|
|
215
|
+
inst_id: str | list[str] | None = None,
|
|
212
216
|
) -> Websocket:
|
|
213
217
|
"""Создает вебсокет для получения расчетной цены поставки/исполнения/расчета для FUTURES и OPTION контрактов.
|
|
214
218
|
|
|
@@ -218,7 +222,7 @@ class WebsocketManager:
|
|
|
218
222
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
219
223
|
inst_type (`Literal["OPTION", "FUTURES"]`): Тип инструмента.
|
|
220
224
|
inst_family (`str | None`): Семейство инструментов (например, "BTC-USD"). Обязателен либо inst_family, либо inst_id.
|
|
221
|
-
inst_id (`str | None`): ID
|
|
225
|
+
inst_id (`str | list[str] | None`): ID инструмента или список ID. Обязателен либо inst_family, либо inst_id.
|
|
222
226
|
|
|
223
227
|
Возвращает:
|
|
224
228
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
@@ -228,17 +232,18 @@ class WebsocketManager:
|
|
|
228
232
|
if inst_family and inst_id:
|
|
229
233
|
raise ValueError("Only one of inst_family or inst_id should be provided")
|
|
230
234
|
|
|
231
|
-
|
|
235
|
+
base_args: dict[str, str] = {
|
|
232
236
|
"channel": "estimated-price",
|
|
233
237
|
"instType": inst_type,
|
|
234
238
|
}
|
|
235
239
|
|
|
236
240
|
if inst_family:
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
241
|
+
base_args["instFamily"] = inst_family
|
|
242
|
+
args = [base_args]
|
|
243
|
+
else:
|
|
244
|
+
args = self._build_inst_id_args(base_args, inst_id) # type: ignore
|
|
240
245
|
|
|
241
|
-
subscription_message = self._build_subscription_message(
|
|
246
|
+
subscription_message = self._build_subscription_message(args)
|
|
242
247
|
|
|
243
248
|
return Websocket(
|
|
244
249
|
callback=callback,
|
|
@@ -250,7 +255,7 @@ class WebsocketManager:
|
|
|
250
255
|
def mark_price(
|
|
251
256
|
self,
|
|
252
257
|
callback: CallbackType,
|
|
253
|
-
inst_id: str,
|
|
258
|
+
inst_id: str | list[str],
|
|
254
259
|
) -> Websocket:
|
|
255
260
|
"""Создает вебсокет для получения маркировочной цены.
|
|
256
261
|
|
|
@@ -258,19 +263,18 @@ class WebsocketManager:
|
|
|
258
263
|
|
|
259
264
|
Параметры:
|
|
260
265
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
261
|
-
inst_id (`str`): ID инструмента (например, "LTC-USD-190628").
|
|
266
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "LTC-USD-190628").
|
|
262
267
|
|
|
263
268
|
Возвращает:
|
|
264
269
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
265
270
|
"""
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
]
|
|
271
|
+
args = self._build_inst_id_args(
|
|
272
|
+
{
|
|
273
|
+
"channel": "mark-price",
|
|
274
|
+
},
|
|
275
|
+
inst_id,
|
|
273
276
|
)
|
|
277
|
+
subscription_message = self._build_subscription_message(args)
|
|
274
278
|
|
|
275
279
|
return Websocket(
|
|
276
280
|
callback=callback,
|
|
@@ -282,7 +286,7 @@ class WebsocketManager:
|
|
|
282
286
|
def index_tickers(
|
|
283
287
|
self,
|
|
284
288
|
callback: CallbackType,
|
|
285
|
-
inst_id: str,
|
|
289
|
+
inst_id: str | list[str],
|
|
286
290
|
) -> Websocket:
|
|
287
291
|
"""Создает вебсокет для получения данных индексных тикеров.
|
|
288
292
|
|
|
@@ -290,19 +294,18 @@ class WebsocketManager:
|
|
|
290
294
|
|
|
291
295
|
Параметры:
|
|
292
296
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
293
|
-
inst_id (`str`): Индекс
|
|
297
|
+
inst_id (`str | list[str]`): Индекс или список индексов (например, "BTC-USDT").
|
|
294
298
|
|
|
295
299
|
Возвращает:
|
|
296
300
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
297
301
|
"""
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
}
|
|
304
|
-
]
|
|
302
|
+
args = self._build_inst_id_args(
|
|
303
|
+
{
|
|
304
|
+
"channel": "index-tickers",
|
|
305
|
+
},
|
|
306
|
+
inst_id,
|
|
305
307
|
)
|
|
308
|
+
subscription_message = self._build_subscription_message(args)
|
|
306
309
|
|
|
307
310
|
return Websocket(
|
|
308
311
|
callback=callback,
|
|
@@ -343,7 +346,7 @@ class WebsocketManager:
|
|
|
343
346
|
"12Hutc",
|
|
344
347
|
"6Hutc",
|
|
345
348
|
],
|
|
346
|
-
inst_id: str,
|
|
349
|
+
inst_id: str | list[str],
|
|
347
350
|
) -> Websocket:
|
|
348
351
|
"""Создает вебсокет для получения данных свечей маркировочной цены.
|
|
349
352
|
|
|
@@ -352,20 +355,19 @@ class WebsocketManager:
|
|
|
352
355
|
Параметры:
|
|
353
356
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
354
357
|
interval (`Literal`): Интервал свечей.
|
|
355
|
-
inst_id (`str`): ID инструмента (например, "BTC-USD-190628").
|
|
358
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USD-190628").
|
|
356
359
|
|
|
357
360
|
Возвращает:
|
|
358
361
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
359
362
|
"""
|
|
360
363
|
channel = f"mark-price-candle{interval}"
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
]
|
|
364
|
+
args = self._build_inst_id_args(
|
|
365
|
+
{
|
|
366
|
+
"channel": channel,
|
|
367
|
+
},
|
|
368
|
+
inst_id,
|
|
368
369
|
)
|
|
370
|
+
subscription_message = self._build_subscription_message(args)
|
|
369
371
|
|
|
370
372
|
return Websocket(
|
|
371
373
|
callback=callback,
|
|
@@ -405,7 +407,7 @@ class WebsocketManager:
|
|
|
405
407
|
"12Hutc",
|
|
406
408
|
"6Hutc",
|
|
407
409
|
],
|
|
408
|
-
inst_id: str,
|
|
410
|
+
inst_id: str | list[str],
|
|
409
411
|
) -> Websocket:
|
|
410
412
|
"""Создает вебсокет для получения данных свечей индекса.
|
|
411
413
|
|
|
@@ -414,20 +416,19 @@ class WebsocketManager:
|
|
|
414
416
|
Параметры:
|
|
415
417
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
416
418
|
interval (`Literal`): Интервал свечей.
|
|
417
|
-
inst_id (`str`): Индекс (например, "BTC-USD").
|
|
419
|
+
inst_id (`str | list[str]`): Индекс или список индексов (например, "BTC-USD").
|
|
418
420
|
|
|
419
421
|
Возвращает:
|
|
420
422
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
421
423
|
"""
|
|
422
424
|
channel = f"index-candle{interval}"
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
}
|
|
429
|
-
]
|
|
425
|
+
args = self._build_inst_id_args(
|
|
426
|
+
{
|
|
427
|
+
"channel": channel,
|
|
428
|
+
},
|
|
429
|
+
inst_id,
|
|
430
430
|
)
|
|
431
|
+
subscription_message = self._build_subscription_message(args)
|
|
431
432
|
|
|
432
433
|
return Websocket(
|
|
433
434
|
callback=callback,
|
|
@@ -506,7 +507,7 @@ class WebsocketManager:
|
|
|
506
507
|
def tickers(
|
|
507
508
|
self,
|
|
508
509
|
callback: CallbackType,
|
|
509
|
-
inst_id: str,
|
|
510
|
+
inst_id: str | list[str],
|
|
510
511
|
) -> Websocket:
|
|
511
512
|
"""Создает вебсокет для получения последней цены сделки, цены bid, цены ask и 24-часового объема торгов.
|
|
512
513
|
|
|
@@ -514,19 +515,18 @@ class WebsocketManager:
|
|
|
514
515
|
|
|
515
516
|
Параметры:
|
|
516
517
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
517
|
-
inst_id (`str`): ID инструмента (например, "BTC-USDT").
|
|
518
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USDT").
|
|
518
519
|
|
|
519
520
|
Возвращает:
|
|
520
521
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
521
522
|
"""
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
}
|
|
528
|
-
]
|
|
523
|
+
args = self._build_inst_id_args(
|
|
524
|
+
{
|
|
525
|
+
"channel": "tickers",
|
|
526
|
+
},
|
|
527
|
+
inst_id,
|
|
529
528
|
)
|
|
529
|
+
subscription_message = self._build_subscription_message(args)
|
|
530
530
|
|
|
531
531
|
return Websocket(
|
|
532
532
|
callback=callback,
|
|
@@ -567,7 +567,7 @@ class WebsocketManager:
|
|
|
567
567
|
"12Hutc",
|
|
568
568
|
"6Hutc",
|
|
569
569
|
],
|
|
570
|
-
inst_id: str,
|
|
570
|
+
inst_id: str | list[str],
|
|
571
571
|
) -> Websocket:
|
|
572
572
|
"""Создает вебсокет для получения данных свечей инструмента.
|
|
573
573
|
|
|
@@ -576,19 +576,18 @@ class WebsocketManager:
|
|
|
576
576
|
Параметры:
|
|
577
577
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
578
578
|
interval (`Literal`): Интервал свечей.
|
|
579
|
-
inst_id (`str`): ID инструмента (например, "BTC-USDT").
|
|
579
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USDT").
|
|
580
580
|
|
|
581
581
|
Возвращает:
|
|
582
582
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
583
583
|
"""
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
{
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
}
|
|
590
|
-
]
|
|
584
|
+
args = self._build_inst_id_args(
|
|
585
|
+
{
|
|
586
|
+
"channel": f"candle{interval}",
|
|
587
|
+
},
|
|
588
|
+
inst_id,
|
|
591
589
|
)
|
|
590
|
+
subscription_message = self._build_subscription_message(args)
|
|
592
591
|
|
|
593
592
|
return Websocket(
|
|
594
593
|
callback=callback,
|
|
@@ -600,7 +599,7 @@ class WebsocketManager:
|
|
|
600
599
|
def trades(
|
|
601
600
|
self,
|
|
602
601
|
callback: CallbackType,
|
|
603
|
-
inst_id: str,
|
|
602
|
+
inst_id: str | list[str],
|
|
604
603
|
) -> Websocket:
|
|
605
604
|
"""Создает вебсокет для получения данных о последних сделках.
|
|
606
605
|
|
|
@@ -608,19 +607,18 @@ class WebsocketManager:
|
|
|
608
607
|
|
|
609
608
|
Параметры:
|
|
610
609
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
611
|
-
inst_id (`str`): ID инструмента (например, "BTC-USDT").
|
|
610
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USDT").
|
|
612
611
|
|
|
613
612
|
Возвращает:
|
|
614
613
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
615
614
|
"""
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
}
|
|
622
|
-
]
|
|
615
|
+
args = self._build_inst_id_args(
|
|
616
|
+
{
|
|
617
|
+
"channel": "trades",
|
|
618
|
+
},
|
|
619
|
+
inst_id,
|
|
623
620
|
)
|
|
621
|
+
subscription_message = self._build_subscription_message(args)
|
|
624
622
|
|
|
625
623
|
return Websocket(
|
|
626
624
|
callback=callback,
|
|
@@ -632,7 +630,7 @@ class WebsocketManager:
|
|
|
632
630
|
def all_trades(
|
|
633
631
|
self,
|
|
634
632
|
callback: CallbackType,
|
|
635
|
-
inst_id: str,
|
|
633
|
+
inst_id: str | list[str],
|
|
636
634
|
) -> Websocket:
|
|
637
635
|
"""Создает вебсокет для получения данных о всех сделках (по одной сделке на обновление).
|
|
638
636
|
|
|
@@ -640,19 +638,18 @@ class WebsocketManager:
|
|
|
640
638
|
|
|
641
639
|
Параметры:
|
|
642
640
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
643
|
-
inst_id (`str`): ID инструмента (например, "BTC-USDT").
|
|
641
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USDT").
|
|
644
642
|
|
|
645
643
|
Возвращает:
|
|
646
644
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
647
645
|
"""
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
}
|
|
654
|
-
]
|
|
646
|
+
args = self._build_inst_id_args(
|
|
647
|
+
{
|
|
648
|
+
"channel": "trades-all",
|
|
649
|
+
},
|
|
650
|
+
inst_id,
|
|
655
651
|
)
|
|
652
|
+
subscription_message = self._build_subscription_message(args)
|
|
656
653
|
|
|
657
654
|
return Websocket(
|
|
658
655
|
callback=callback,
|
|
@@ -665,7 +662,7 @@ class WebsocketManager:
|
|
|
665
662
|
self,
|
|
666
663
|
callback: CallbackType,
|
|
667
664
|
channel: Literal["books", "books5", "bbo-tbt", "books50-l2-tbt", "books-l2-tbt"],
|
|
668
|
-
inst_id: str,
|
|
665
|
+
inst_id: str | list[str],
|
|
669
666
|
) -> Websocket:
|
|
670
667
|
"""Создает вебсокет для получения данных ордербука.
|
|
671
668
|
|
|
@@ -674,19 +671,18 @@ class WebsocketManager:
|
|
|
674
671
|
Параметры:
|
|
675
672
|
callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
|
|
676
673
|
channel (`Literal["books", "books5", "bbo-tbt", "books50-l2-tbt", "books-l2-tbt"]`): Тип канала ордербука.
|
|
677
|
-
inst_id (`str`): ID инструмента (например, "BTC-USDT").
|
|
674
|
+
inst_id (`str | list[str]`): ID инструмента или список ID (например, "BTC-USDT").
|
|
678
675
|
|
|
679
676
|
Возвращает:
|
|
680
677
|
`Websocket`: Объект для управления вебсокет соединением.
|
|
681
678
|
"""
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
}
|
|
688
|
-
]
|
|
679
|
+
args = self._build_inst_id_args(
|
|
680
|
+
{
|
|
681
|
+
"channel": channel,
|
|
682
|
+
},
|
|
683
|
+
inst_id,
|
|
689
684
|
)
|
|
685
|
+
subscription_message = self._build_subscription_message(args)
|
|
690
686
|
|
|
691
687
|
return Websocket(
|
|
692
688
|
callback=callback,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicAggreBookTickerV3Api_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicBookTickerBatchV3Api_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unicex-0.17.4 → unicex-0.17.5}/unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsBatchV3Api_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|