unicex 0.13.4__tar.gz → 0.13.6__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.
Files changed (98) hide show
  1. {unicex-0.13.4/unicex.egg-info → unicex-0.13.6}/PKG-INFO +1 -1
  2. {unicex-0.13.4 → unicex-0.13.6}/pyproject.toml +1 -1
  3. {unicex-0.13.4 → unicex-0.13.6}/unicex/_base/websocket.py +20 -7
  4. {unicex-0.13.4 → unicex-0.13.6/unicex.egg-info}/PKG-INFO +1 -1
  5. {unicex-0.13.4 → unicex-0.13.6}/LICENSE +0 -0
  6. {unicex-0.13.4 → unicex-0.13.6}/README.md +0 -0
  7. {unicex-0.13.4 → unicex-0.13.6}/setup.cfg +0 -0
  8. {unicex-0.13.4 → unicex-0.13.6}/unicex/__init__.py +0 -0
  9. {unicex-0.13.4 → unicex-0.13.6}/unicex/_abc/__init__.py +0 -0
  10. {unicex-0.13.4 → unicex-0.13.6}/unicex/_abc/exchange_info.py +0 -0
  11. {unicex-0.13.4 → unicex-0.13.6}/unicex/_abc/uni_client.py +0 -0
  12. {unicex-0.13.4 → unicex-0.13.6}/unicex/_abc/uni_websocket_manager.py +0 -0
  13. {unicex-0.13.4 → unicex-0.13.6}/unicex/_base/__init__.py +0 -0
  14. {unicex-0.13.4 → unicex-0.13.6}/unicex/_base/client.py +0 -0
  15. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/__init__.py +0 -0
  16. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/adapter.py +0 -0
  17. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/client.py +0 -0
  18. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/exchange_info.py +0 -0
  19. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/uni_client.py +0 -0
  20. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/uni_websocket_manager.py +0 -0
  21. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/user_websocket.py +0 -0
  22. {unicex-0.13.4 → unicex-0.13.6}/unicex/binance/websocket_manager.py +0 -0
  23. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/__init__.py +0 -0
  24. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/adapter.py +0 -0
  25. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/client.py +0 -0
  26. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/exchange_info.py +0 -0
  27. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/uni_client.py +0 -0
  28. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/uni_websocket_manager.py +0 -0
  29. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/user_websocket.py +0 -0
  30. {unicex-0.13.4 → unicex-0.13.6}/unicex/bitget/websocket_manager.py +0 -0
  31. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/__init__.py +0 -0
  32. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/adapter.py +0 -0
  33. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/client.py +0 -0
  34. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/exchange_info.py +0 -0
  35. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/uni_client.py +0 -0
  36. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/uni_websocket_manager.py +0 -0
  37. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/user_websocket.py +0 -0
  38. {unicex-0.13.4 → unicex-0.13.6}/unicex/bybit/websocket_manager.py +0 -0
  39. {unicex-0.13.4 → unicex-0.13.6}/unicex/enums.py +0 -0
  40. {unicex-0.13.4 → unicex-0.13.6}/unicex/exceptions.py +0 -0
  41. {unicex-0.13.4 → unicex-0.13.6}/unicex/extra.py +0 -0
  42. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/__init__.py +0 -0
  43. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/adapter.py +0 -0
  44. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/client.py +0 -0
  45. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/exchange_info.py +0 -0
  46. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/uni_client.py +0 -0
  47. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/uni_websocket_manager.py +0 -0
  48. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/user_websocket.py +0 -0
  49. {unicex-0.13.4 → unicex-0.13.6}/unicex/gate/websocket_manager.py +0 -0
  50. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/__init__.py +0 -0
  51. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/adapter.py +0 -0
  52. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/client.py +0 -0
  53. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/exchange_info.py +0 -0
  54. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/uni_client.py +0 -0
  55. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/uni_websocket_manager.py +0 -0
  56. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/user_websocket.py +0 -0
  57. {unicex-0.13.4 → unicex-0.13.6}/unicex/hyperliquid/websocket_manager.py +0 -0
  58. {unicex-0.13.4 → unicex-0.13.6}/unicex/mapper.py +0 -0
  59. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/__init__.py +0 -0
  60. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py +0 -0
  61. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py +0 -0
  62. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py +0 -0
  63. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicAggreBookTickerV3Api_pb2.py +0 -0
  64. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicAggreDealsV3Api_pb2.py +0 -0
  65. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicAggreDepthsV3Api_pb2.py +0 -0
  66. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicBookTickerBatchV3Api_pb2.py +0 -0
  67. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicBookTickerV3Api_pb2.py +0 -0
  68. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicDealsV3Api_pb2.py +0 -0
  69. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicFuture_pb2.py +0 -0
  70. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsBatchV3Api_pb2.py +0 -0
  71. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsV3Api_pb2.py +0 -0
  72. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicLimitDepthsV3Api_pb2.py +0 -0
  73. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicMiniTickerV3Api_pb2.py +0 -0
  74. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicMiniTickersV3Api_pb2.py +0 -0
  75. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py +0 -0
  76. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py +0 -0
  77. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/_spot_ws_proto/__init__.py +0 -0
  78. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/adapter.py +0 -0
  79. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/client.py +0 -0
  80. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/exchange_info.py +0 -0
  81. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/uni_client.py +0 -0
  82. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/uni_websocket_manager.py +0 -0
  83. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/user_websocket.py +0 -0
  84. {unicex-0.13.4 → unicex-0.13.6}/unicex/mexc/websocket_manager.py +0 -0
  85. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/__init__.py +0 -0
  86. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/adapter.py +0 -0
  87. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/client.py +0 -0
  88. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/exchange_info.py +0 -0
  89. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/uni_client.py +0 -0
  90. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/uni_websocket_manager.py +0 -0
  91. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/user_websocket.py +0 -0
  92. {unicex-0.13.4 → unicex-0.13.6}/unicex/okx/websocket_manager.py +0 -0
  93. {unicex-0.13.4 → unicex-0.13.6}/unicex/types.py +0 -0
  94. {unicex-0.13.4 → unicex-0.13.6}/unicex/utils.py +0 -0
  95. {unicex-0.13.4 → unicex-0.13.6}/unicex.egg-info/SOURCES.txt +0 -0
  96. {unicex-0.13.4 → unicex-0.13.6}/unicex.egg-info/dependency_links.txt +0 -0
  97. {unicex-0.13.4 → unicex-0.13.6}/unicex.egg-info/requires.txt +0 -0
  98. {unicex-0.13.4 → unicex-0.13.6}/unicex.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unicex
3
- Version: 0.13.4
3
+ Version: 0.13.6
4
4
  Summary: Unified Crypto Exchange API
5
5
  Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
6
6
  License: BSD 3-Clause License
@@ -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.13.4"
7
+ version = "0.13.6"
8
8
 
9
9
  description = "Unified Crypto Exchange API "
10
10
  readme = "README.md"
@@ -95,12 +95,7 @@ class Websocket:
95
95
  async def stop(self) -> None:
96
96
  """Останавливает вебсокет и рабочие задачи."""
97
97
  self._running = False
98
- for task in self._tasks:
99
- task.cancel()
100
- self._tasks.clear()
101
-
102
- # Очистка очереди
103
- self._queue = asyncio.Queue()
98
+ await self._after_disconnect()
104
99
 
105
100
  async def restart(self) -> None:
106
101
  """Перезапускает вебсокет."""
@@ -184,11 +179,29 @@ class Websocket:
184
179
 
185
180
  async def _after_disconnect(self) -> None:
186
181
  """Вызывается после отключения от вебсокета."""
182
+ current_task = asyncio.current_task()
183
+
184
+ # Останавливаем воркеров, исключая задачу, которая уже выполняет остановку
185
+ tasks_to_wait: list[asyncio.Task] = []
187
186
  for task in self._tasks:
187
+ if task is current_task:
188
+ continue
189
+
188
190
  task.cancel()
191
+ tasks_to_wait.append(task)
192
+
193
+ # Дожидаемся завершения задач (в т.ч. воркеров)
194
+ if tasks_to_wait:
195
+ results = await asyncio.gather(*tasks_to_wait, return_exceptions=True)
196
+ for task_result in results:
197
+ if isinstance(task_result, asyncio.CancelledError):
198
+ continue
199
+ if isinstance(task_result, Exception):
200
+ self._logger.warning(f"Worker raised during shutdown: {task_result}")
201
+
189
202
  self._tasks.clear()
190
203
 
191
- # Очистить очередь
204
+ # Очистить очередь уже безопасно, после остановки воркеров
192
205
  self._queue = asyncio.Queue()
193
206
 
194
207
  async def _send_subscribe_messages(self, conn: ClientConnection) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unicex
3
- Version: 0.13.4
3
+ Version: 0.13.6
4
4
  Summary: Unified Crypto Exchange API
5
5
  Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
6
6
  License: BSD 3-Clause License
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