unicex 0.1.18__tar.gz → 0.4.0__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 (166) hide show
  1. unicex-0.4.0/PKG-INFO +170 -0
  2. unicex-0.4.0/README.md +124 -0
  3. {unicex-0.1.18 → unicex-0.4.0}/pyproject.toml +1 -5
  4. unicex-0.4.0/unicex/__init__.py +255 -0
  5. {unicex-0.1.18/unicex/_abc/asyncio → unicex-0.4.0/unicex/_abc}/__init__.py +4 -1
  6. {unicex-0.1.18/unicex/_abc/asyncio → unicex-0.4.0/unicex/_abc}/uni_client.py +45 -42
  7. {unicex-0.1.18/unicex/_abc/asyncio → unicex-0.4.0/unicex/_abc}/uni_websocket_manager.py +7 -7
  8. {unicex-0.1.18/unicex/_base/asyncio → unicex-0.4.0/unicex/_base}/websocket.py +7 -7
  9. unicex-0.4.0/unicex/binance/__init__.py +15 -0
  10. {unicex-0.1.18 → unicex-0.4.0}/unicex/binance/adapter.py +42 -123
  11. {unicex-0.1.18/unicex/binance/asyncio → unicex-0.4.0/unicex/binance}/client.py +141 -131
  12. unicex-0.4.0/unicex/binance/uni_client.py +188 -0
  13. {unicex-0.1.18/unicex/binance/asyncio → unicex-0.4.0/unicex/binance}/uni_websocket_manager.py +7 -7
  14. {unicex-0.1.18/unicex/binance/asyncio → unicex-0.4.0/unicex/binance}/user_websocket.py +21 -4
  15. {unicex-0.1.18/unicex/binance/asyncio → unicex-0.4.0/unicex/binance}/websocket_manager.py +39 -4
  16. unicex-0.4.0/unicex/bitget/__init__.py +17 -0
  17. unicex-0.4.0/unicex/bitget/adapter.py +188 -0
  18. unicex-0.4.0/unicex/bitget/client.py +2497 -0
  19. unicex-0.4.0/unicex/bitget/uni_client.py +198 -0
  20. unicex-0.4.0/unicex/bitget/uni_websocket_manager.py +275 -0
  21. unicex-0.4.0/unicex/bitget/user_websocket.py +7 -0
  22. unicex-0.4.0/unicex/bitget/websocket_manager.py +232 -0
  23. unicex-0.4.0/unicex/bitrue/__init__.py +15 -0
  24. unicex-0.4.0/unicex/bitrue/adapter.py +8 -0
  25. unicex-0.4.0/unicex/bitrue/client.py +128 -0
  26. {unicex-0.1.18/unicex/binance/asyncio → unicex-0.4.0/unicex/bitrue}/uni_client.py +54 -62
  27. unicex-0.4.0/unicex/bitrue/uni_websocket_manager.py +269 -0
  28. unicex-0.4.0/unicex/bitrue/user_websocket.py +7 -0
  29. unicex-0.4.0/unicex/bitrue/websocket_manager.py +11 -0
  30. unicex-0.4.0/unicex/bitunix/__init__.py +15 -0
  31. unicex-0.4.0/unicex/bitunix/adapter.py +8 -0
  32. unicex-0.4.0/unicex/bitunix/client.py +8 -0
  33. unicex-0.4.0/unicex/bitunix/uni_client.py +151 -0
  34. {unicex-0.1.18/unicex/bitget/asyncio → unicex-0.4.0/unicex/bitunix}/uni_websocket_manager.py +5 -6
  35. unicex-0.4.0/unicex/bitunix/user_websocket.py +7 -0
  36. unicex-0.4.0/unicex/bitunix/websocket_manager.py +11 -0
  37. unicex-0.4.0/unicex/btse/__init__.py +15 -0
  38. unicex-0.4.0/unicex/btse/adapter.py +8 -0
  39. unicex-0.4.0/unicex/btse/client.py +123 -0
  40. unicex-0.4.0/unicex/btse/uni_client.py +151 -0
  41. {unicex-0.1.18/unicex/_abc/sync → unicex-0.4.0/unicex/btse}/uni_websocket_manager.py +27 -52
  42. unicex-0.4.0/unicex/btse/user_websocket.py +7 -0
  43. unicex-0.4.0/unicex/btse/websocket_manager.py +11 -0
  44. unicex-0.4.0/unicex/bybit/__init__.py +15 -0
  45. unicex-0.4.0/unicex/bybit/adapter.py +127 -0
  46. unicex-0.4.0/unicex/bybit/client.py +1869 -0
  47. unicex-0.4.0/unicex/bybit/uni_client.py +200 -0
  48. unicex-0.4.0/unicex/bybit/uni_websocket_manager.py +269 -0
  49. unicex-0.4.0/unicex/bybit/user_websocket.py +7 -0
  50. unicex-0.4.0/unicex/bybit/websocket_manager.py +11 -0
  51. unicex-0.4.0/unicex/enums.py +262 -0
  52. {unicex-0.1.18 → unicex-0.4.0}/unicex/extra.py +56 -17
  53. unicex-0.4.0/unicex/gateio/__init__.py +15 -0
  54. unicex-0.4.0/unicex/gateio/adapter.py +178 -0
  55. unicex-0.4.0/unicex/gateio/client.py +1667 -0
  56. unicex-0.4.0/unicex/gateio/uni_client.py +214 -0
  57. unicex-0.4.0/unicex/gateio/uni_websocket_manager.py +269 -0
  58. unicex-0.4.0/unicex/gateio/user_websocket.py +7 -0
  59. unicex-0.4.0/unicex/gateio/websocket_manager.py +11 -0
  60. unicex-0.4.0/unicex/hyperliquid/__init__.py +15 -0
  61. unicex-0.4.0/unicex/hyperliquid/adapter.py +140 -0
  62. unicex-0.4.0/unicex/hyperliquid/client.py +232 -0
  63. unicex-0.4.0/unicex/hyperliquid/uni_client.py +171 -0
  64. unicex-0.4.0/unicex/hyperliquid/uni_websocket_manager.py +269 -0
  65. unicex-0.4.0/unicex/hyperliquid/user_websocket.py +7 -0
  66. unicex-0.4.0/unicex/hyperliquid/websocket_manager.py +11 -0
  67. unicex-0.4.0/unicex/kcex/__init__.py +15 -0
  68. unicex-0.4.0/unicex/kcex/adapter.py +8 -0
  69. unicex-0.4.0/unicex/kcex/client.py +8 -0
  70. unicex-0.4.0/unicex/kcex/uni_client.py +151 -0
  71. unicex-0.4.0/unicex/kcex/uni_websocket_manager.py +269 -0
  72. unicex-0.4.0/unicex/kcex/user_websocket.py +7 -0
  73. unicex-0.4.0/unicex/kcex/websocket_manager.py +11 -0
  74. unicex-0.4.0/unicex/kraken/__init__.py +15 -0
  75. unicex-0.4.0/unicex/kraken/adapter.py +8 -0
  76. unicex-0.4.0/unicex/kraken/client.py +165 -0
  77. unicex-0.4.0/unicex/kraken/uni_client.py +151 -0
  78. unicex-0.4.0/unicex/kraken/uni_websocket_manager.py +269 -0
  79. unicex-0.4.0/unicex/kraken/user_websocket.py +7 -0
  80. unicex-0.4.0/unicex/kraken/websocket_manager.py +11 -0
  81. unicex-0.4.0/unicex/kucoin/__init__.py +15 -0
  82. unicex-0.4.0/unicex/kucoin/adapter.py +8 -0
  83. unicex-0.4.0/unicex/kucoin/client.py +120 -0
  84. unicex-0.4.0/unicex/kucoin/uni_client.py +151 -0
  85. unicex-0.4.0/unicex/kucoin/uni_websocket_manager.py +269 -0
  86. unicex-0.4.0/unicex/kucoin/user_websocket.py +7 -0
  87. unicex-0.4.0/unicex/kucoin/websocket_manager.py +11 -0
  88. unicex-0.4.0/unicex/mapper.py +109 -0
  89. unicex-0.4.0/unicex/mexc/__init__.py +15 -0
  90. unicex-0.4.0/unicex/mexc/adapter.py +222 -0
  91. unicex-0.4.0/unicex/mexc/client.py +846 -0
  92. unicex-0.4.0/unicex/mexc/uni_client.py +205 -0
  93. unicex-0.4.0/unicex/mexc/uni_websocket_manager.py +269 -0
  94. unicex-0.4.0/unicex/mexc/user_websocket.py +7 -0
  95. unicex-0.4.0/unicex/mexc/websocket_manager.py +11 -0
  96. unicex-0.4.0/unicex/okx/__init__.py +15 -0
  97. unicex-0.4.0/unicex/okx/adapter.py +122 -0
  98. unicex-0.4.0/unicex/okx/client.py +280 -0
  99. unicex-0.4.0/unicex/okx/uni_client.py +202 -0
  100. unicex-0.4.0/unicex/okx/uni_websocket_manager.py +269 -0
  101. unicex-0.4.0/unicex/okx/user_websocket.py +7 -0
  102. unicex-0.4.0/unicex/okx/websocket_manager.py +11 -0
  103. {unicex-0.1.18 → unicex-0.4.0}/unicex/types.py +24 -3
  104. {unicex-0.1.18 → unicex-0.4.0}/unicex/utils.py +82 -6
  105. unicex-0.4.0/unicex/weex/__init__.py +15 -0
  106. unicex-0.4.0/unicex/weex/adapter.py +8 -0
  107. unicex-0.4.0/unicex/weex/client.py +8 -0
  108. unicex-0.4.0/unicex/weex/uni_client.py +151 -0
  109. unicex-0.4.0/unicex/weex/uni_websocket_manager.py +269 -0
  110. unicex-0.4.0/unicex/weex/user_websocket.py +7 -0
  111. unicex-0.4.0/unicex/weex/websocket_manager.py +11 -0
  112. unicex-0.4.0/unicex/xt/__init__.py +15 -0
  113. unicex-0.4.0/unicex/xt/adapter.py +8 -0
  114. unicex-0.4.0/unicex/xt/client.py +8 -0
  115. unicex-0.4.0/unicex/xt/uni_client.py +151 -0
  116. unicex-0.4.0/unicex/xt/uni_websocket_manager.py +269 -0
  117. unicex-0.4.0/unicex/xt/user_websocket.py +7 -0
  118. unicex-0.4.0/unicex/xt/websocket_manager.py +11 -0
  119. unicex-0.4.0/unicex.egg-info/PKG-INFO +170 -0
  120. unicex-0.4.0/unicex.egg-info/SOURCES.txt +126 -0
  121. {unicex-0.1.18 → unicex-0.4.0}/unicex.egg-info/requires.txt +0 -2
  122. unicex-0.1.18/PKG-INFO +0 -114
  123. unicex-0.1.18/README.md +0 -66
  124. unicex-0.1.18/unicex/__init__.py +0 -40
  125. unicex-0.1.18/unicex/_abc/__init__.py +0 -8
  126. unicex-0.1.18/unicex/_abc/adapter.py +0 -231
  127. unicex-0.1.18/unicex/_abc/sync/__init__.py +0 -4
  128. unicex-0.1.18/unicex/_abc/sync/uni_client.py +0 -275
  129. unicex-0.1.18/unicex/_base/__init__.py +0 -6
  130. unicex-0.1.18/unicex/_base/sync/__init__.py +0 -7
  131. unicex-0.1.18/unicex/_base/sync/client.py +0 -186
  132. unicex-0.1.18/unicex/_base/sync/websocket.py +0 -239
  133. unicex-0.1.18/unicex/binance/__init__.py +0 -13
  134. unicex-0.1.18/unicex/binance/_mixins/__init__.py +0 -7
  135. unicex-0.1.18/unicex/binance/_mixins/client.py +0 -78
  136. unicex-0.1.18/unicex/binance/_mixins/user_websocket.py +0 -27
  137. unicex-0.1.18/unicex/binance/_mixins/websocket_manager.py +0 -45
  138. unicex-0.1.18/unicex/binance/asyncio/__init__.py +0 -9
  139. unicex-0.1.18/unicex/binance/sync/__init__.py +0 -9
  140. unicex-0.1.18/unicex/binance/sync/client.py +0 -1536
  141. unicex-0.1.18/unicex/binance/sync/uni_client.py +0 -176
  142. unicex-0.1.18/unicex/binance/sync/uni_websocket_manager.py +0 -166
  143. unicex-0.1.18/unicex/binance/sync/user_websocket.py +0 -165
  144. unicex-0.1.18/unicex/binance/sync/websocket_manager.py +0 -876
  145. unicex-0.1.18/unicex/bitget/__init__.py +0 -1
  146. unicex-0.1.18/unicex/bitget/_mixins/__init__.py +0 -7
  147. unicex-0.1.18/unicex/bitget/_mixins/client.py +0 -125
  148. unicex-0.1.18/unicex/bitget/_mixins/user_websocket.py +0 -0
  149. unicex-0.1.18/unicex/bitget/_mixins/websocket_manager.py +0 -47
  150. unicex-0.1.18/unicex/bitget/adapter.py +0 -252
  151. unicex-0.1.18/unicex/bitget/asyncio/__init__.py +0 -6
  152. unicex-0.1.18/unicex/bitget/asyncio/client.py +0 -762
  153. unicex-0.1.18/unicex/bitget/asyncio/uni_client.py +0 -159
  154. unicex-0.1.18/unicex/bitget/asyncio/websocket_manager.py +0 -57
  155. unicex-0.1.18/unicex/bitget/sync/__init__.py +0 -0
  156. unicex-0.1.18/unicex/enums.py +0 -138
  157. unicex-0.1.18/unicex/mapper.py +0 -110
  158. unicex-0.1.18/unicex.egg-info/PKG-INFO +0 -114
  159. unicex-0.1.18/unicex.egg-info/SOURCES.txt +0 -60
  160. {unicex-0.1.18 → unicex-0.4.0}/LICENSE +0 -0
  161. {unicex-0.1.18 → unicex-0.4.0}/setup.cfg +0 -0
  162. {unicex-0.1.18/unicex/_base/asyncio → unicex-0.4.0/unicex/_base}/__init__.py +0 -0
  163. {unicex-0.1.18/unicex/_base/asyncio → unicex-0.4.0/unicex/_base}/client.py +0 -0
  164. {unicex-0.1.18 → unicex-0.4.0}/unicex/exceptions.py +0 -0
  165. {unicex-0.1.18 → unicex-0.4.0}/unicex.egg-info/dependency_links.txt +0 -0
  166. {unicex-0.1.18 → unicex-0.4.0}/unicex.egg-info/top_level.txt +0 -0
unicex-0.4.0/PKG-INFO ADDED
@@ -0,0 +1,170 @@
1
+ Metadata-Version: 2.4
2
+ Name: unicex
3
+ Version: 0.4.0
4
+ Summary: Unified Crypto Exchange API
5
+ Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
6
+ License: BSD 3-Clause License
7
+
8
+ Copyright (c) 2025, LoveBloodAndDiamonds
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions are met:
12
+
13
+ 1. Redistributions of source code must retain the above copyright notice, this
14
+ list of conditions and the following disclaimer.
15
+
16
+ 2. Redistributions in binary form must reproduce the above copyright notice,
17
+ this list of conditions and the following disclaimer in the documentation
18
+ and/or other materials provided with the distribution.
19
+
20
+ 3. Neither the name of the copyright holder nor the names of its
21
+ contributors may be used to endorse or promote products derived from
22
+ this software without specific prior written permission.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+
35
+ Project-URL: Github, https://github.com/LoveBloodAndDiamonds/uni-cex-api
36
+ Project-URL: Author, https://t.me/LoveBloodAndDiamonds
37
+ Project-URL: Readthedocs, https://unicex.readthedocs.io/ru/latest/
38
+ Requires-Python: >=3.12
39
+ Description-Content-Type: text/markdown
40
+ License-File: LICENSE
41
+ Requires-Dist: aiohttp>=3.12.15
42
+ Requires-Dist: loguru>=0.7.3
43
+ Requires-Dist: orjson>=3.11.3
44
+ Requires-Dist: websockets>=15.0.1
45
+ Dynamic: license-file
46
+
47
+ # Unified Crypto Exchange API
48
+
49
+ `unicex` — асинхронная библиотека для работы с криптовалютными биржами, реализующая унифицированный интерфейс поверх «сырых» REST и WebSocket API разных бирж.
50
+
51
+ ## ✅ Статус реализации
52
+
53
+ ## ✅ Статус реализации
54
+
55
+ | Exchange | Client | Client Auth | Client Generic | WS Manager | User WS |
56
+ |-------------|--------|-------------|----------------|------------|---------|
57
+ | Binance | ✅ | ✅ | ✅ | ✅ | ✅ |
58
+ | Bitget | ✅ | ✅ | ✅ | ✅ | |
59
+ | Bitrue | | ✅ | ✅ | | |
60
+ | Bitunix | | | | | |
61
+ | Btse | | ✅ | ✅ | | |
62
+ | Bybit | ✅ | ✅ | ✅ | | |
63
+ | Gateio | ✅ | ✅ | ✅ | | |
64
+ | Hyperliquid | | | | | |
65
+ | Kcex | | | | | |
66
+ | Kraken | | ✅ | ✅ | | |
67
+ | Kucoin | | ✅ | ✅ | | |
68
+ | Mexc | ✅ | ✅ | ✅ | | |
69
+ | Okx | | ✅ | ✅ | | |
70
+ | Weex | | | | | |
71
+ | Xt | | | | | |
72
+
73
+ ---
74
+
75
+ ### 📖 Описание колонок
76
+
77
+ - **Client** – Обертки над HTTP методами следующих разделов: market, order, position, account.
78
+ - **Client Auth** – Поддержка авторизации и приватных эндпоинтов.
79
+ - **Client Generic** – Универсальная функция для вызова не обернутых методов API.
80
+ - **WS Manager** – Обертки над вебсокетами биржи.
81
+ - **User WS** – Поддержка пользовательских вебсокетов.
82
+
83
+ ---
84
+
85
+ ## ✅ Статус реализации (Унифицированный интерфейс)
86
+
87
+ | Exchange | UniClient | UniWebsocketManager |
88
+ |-------------|-----------|----------------------|
89
+ | Binance | ✅ | ✅ |
90
+ | Bitget | ✅ | |
91
+ | Bitrue | | |
92
+ | Bitunix | | |
93
+ | Btse | | |
94
+ | Bybit | ✅ | |
95
+ | Gateio | ✅ | |
96
+ | Hyperliquid | | |
97
+ | Kcex | | |
98
+ | Kraken | | |
99
+ | Kucoin | | |
100
+ | Mexc | ✅ | |
101
+ | Okx | ✅ | |
102
+ | Weex | | |
103
+ | Xt | | |
104
+
105
+ ---
106
+
107
+ ## 🚀 Быстрый старт
108
+
109
+ - Установка: `pip install unicex` или из исходников: `pip install -e .`
110
+ - Библиотека полностью асинхронная. Примеры импорта:
111
+ - Сырые клиенты: `from unicex.binance import Client`
112
+ - Унифицированные клиенты: `from unicex.binance import UniClient`
113
+ - Вебсокет менеджеры: `from unicex.binance import WebsocketManager, UniWebsocketManager`
114
+
115
+ Пример: получить последние цены через унифицированный клиент Binance
116
+
117
+ ```
118
+ import asyncio
119
+ from unicex.binance import UniClient
120
+
121
+
122
+ async def main():
123
+ client = await UniClient.create()
124
+ prices = await client.last_price()
125
+ print(prices["BTCUSDT"])
126
+ await client.close()
127
+
128
+
129
+ if __name__ == "__main__":
130
+ asyncio.run(main())
131
+ ```
132
+
133
+ Пример: подписаться на трейды через унифицированный WS‑менеджер Bitget
134
+
135
+ ```
136
+ import asyncio
137
+ from unicex.bitget import UniWebsocketManager
138
+ from unicex import TradeDict
139
+
140
+
141
+ async def on_trade(msg: TradeDict):
142
+ print(msg)
143
+
144
+
145
+ async def main():
146
+ uwm = UniWebsocketManager()
147
+ socket = uwm.trades(callback=on_trade, symbol="BTCUSDT")
148
+ await socket.start()
149
+
150
+
151
+ if __name__ == "__main__":
152
+ asyncio.run(main())
153
+ ```
154
+
155
+ ---
156
+
157
+ ## 🧑‍💻 Блок для разработчика
158
+
159
+ ### 📋 Todo
160
+ - Написать 1–2 примера
161
+ - На фьючерсах OKX ticker24hr и klines возвращают объем в контрактах
162
+ - Как реализовать типы в сырых клиентах? str | int | float?
163
+ - в klines и futures_klines нужно дать возможность передавать строки, чтобы они не маппились автоматически. Либо расширить список таймфреймов
164
+ + В mexc клиенте неправильные ссылки на документацию на фьючах
165
+ + Доделать BitgetClient и проверить типы
166
+ + Пересмотреть вопрос: должен ли быть адаптер интерфейсом?
167
+ + Добавить overload к методам с `None, None`
168
+ + Определить порядок полей, возвращаемых адаптером
169
+ + Не делать .get в адаптере
170
+ + нужно ли как-то изменять тикер в юни клиенте и ападетере?
unicex-0.4.0/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # Unified Crypto Exchange API
2
+
3
+ `unicex` — асинхронная библиотека для работы с криптовалютными биржами, реализующая унифицированный интерфейс поверх «сырых» REST и WebSocket API разных бирж.
4
+
5
+ ## ✅ Статус реализации
6
+
7
+ ## ✅ Статус реализации
8
+
9
+ | Exchange | Client | Client Auth | Client Generic | WS Manager | User WS |
10
+ |-------------|--------|-------------|----------------|------------|---------|
11
+ | Binance | ✅ | ✅ | ✅ | ✅ | ✅ |
12
+ | Bitget | ✅ | ✅ | ✅ | ✅ | |
13
+ | Bitrue | | ✅ | ✅ | | |
14
+ | Bitunix | | | | | |
15
+ | Btse | | ✅ | ✅ | | |
16
+ | Bybit | ✅ | ✅ | ✅ | | |
17
+ | Gateio | ✅ | ✅ | ✅ | | |
18
+ | Hyperliquid | | | | | |
19
+ | Kcex | | | | | |
20
+ | Kraken | | ✅ | ✅ | | |
21
+ | Kucoin | | ✅ | ✅ | | |
22
+ | Mexc | ✅ | ✅ | ✅ | | |
23
+ | Okx | | ✅ | ✅ | | |
24
+ | Weex | | | | | |
25
+ | Xt | | | | | |
26
+
27
+ ---
28
+
29
+ ### 📖 Описание колонок
30
+
31
+ - **Client** – Обертки над HTTP методами следующих разделов: market, order, position, account.
32
+ - **Client Auth** – Поддержка авторизации и приватных эндпоинтов.
33
+ - **Client Generic** – Универсальная функция для вызова не обернутых методов API.
34
+ - **WS Manager** – Обертки над вебсокетами биржи.
35
+ - **User WS** – Поддержка пользовательских вебсокетов.
36
+
37
+ ---
38
+
39
+ ## ✅ Статус реализации (Унифицированный интерфейс)
40
+
41
+ | Exchange | UniClient | UniWebsocketManager |
42
+ |-------------|-----------|----------------------|
43
+ | Binance | ✅ | ✅ |
44
+ | Bitget | ✅ | |
45
+ | Bitrue | | |
46
+ | Bitunix | | |
47
+ | Btse | | |
48
+ | Bybit | ✅ | |
49
+ | Gateio | ✅ | |
50
+ | Hyperliquid | | |
51
+ | Kcex | | |
52
+ | Kraken | | |
53
+ | Kucoin | | |
54
+ | Mexc | ✅ | |
55
+ | Okx | ✅ | |
56
+ | Weex | | |
57
+ | Xt | | |
58
+
59
+ ---
60
+
61
+ ## 🚀 Быстрый старт
62
+
63
+ - Установка: `pip install unicex` или из исходников: `pip install -e .`
64
+ - Библиотека полностью асинхронная. Примеры импорта:
65
+ - Сырые клиенты: `from unicex.binance import Client`
66
+ - Унифицированные клиенты: `from unicex.binance import UniClient`
67
+ - Вебсокет менеджеры: `from unicex.binance import WebsocketManager, UniWebsocketManager`
68
+
69
+ Пример: получить последние цены через унифицированный клиент Binance
70
+
71
+ ```
72
+ import asyncio
73
+ from unicex.binance import UniClient
74
+
75
+
76
+ async def main():
77
+ client = await UniClient.create()
78
+ prices = await client.last_price()
79
+ print(prices["BTCUSDT"])
80
+ await client.close()
81
+
82
+
83
+ if __name__ == "__main__":
84
+ asyncio.run(main())
85
+ ```
86
+
87
+ Пример: подписаться на трейды через унифицированный WS‑менеджер Bitget
88
+
89
+ ```
90
+ import asyncio
91
+ from unicex.bitget import UniWebsocketManager
92
+ from unicex import TradeDict
93
+
94
+
95
+ async def on_trade(msg: TradeDict):
96
+ print(msg)
97
+
98
+
99
+ async def main():
100
+ uwm = UniWebsocketManager()
101
+ socket = uwm.trades(callback=on_trade, symbol="BTCUSDT")
102
+ await socket.start()
103
+
104
+
105
+ if __name__ == "__main__":
106
+ asyncio.run(main())
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 🧑‍💻 Блок для разработчика
112
+
113
+ ### 📋 Todo
114
+ - Написать 1–2 примера
115
+ - На фьючерсах OKX ticker24hr и klines возвращают объем в контрактах
116
+ - Как реализовать типы в сырых клиентах? str | int | float?
117
+ - в klines и futures_klines нужно дать возможность передавать строки, чтобы они не маппились автоматически. Либо расширить список таймфреймов
118
+ + В mexc клиенте неправильные ссылки на документацию на фьючах
119
+ + Доделать BitgetClient и проверить типы
120
+ + Пересмотреть вопрос: должен ли быть адаптер интерфейсом?
121
+ + Добавить overload к методам с `None, None`
122
+ + Определить порядок полей, возвращаемых адаптером
123
+ + Не делать .get в адаптере
124
+ + нужно ли как-то изменять тикер в юни клиенте и ападетере?
@@ -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.1.18"
7
+ version = "0.4.0"
8
8
 
9
9
  description = "Unified Crypto Exchange API "
10
10
  readme = "README.md"
@@ -17,8 +17,6 @@ dependencies = [
17
17
  "aiohttp>=3.12.15",
18
18
  "loguru>=0.7.3",
19
19
  "orjson>=3.11.3",
20
- "requests>=2.32.5",
21
- "websocket-client>=1.8.0",
22
20
  "websockets>=15.0.1",
23
21
  ]
24
22
 
@@ -31,7 +29,5 @@ Readthedocs = "https://unicex.readthedocs.io/ru/latest/"
31
29
  dev = [
32
30
  "build>=1.3.0",
33
31
  "pre-commit>=4.3.0",
34
- "sphinx>=8.2.3",
35
- "sphinx-rtd-theme>=3.0.2",
36
32
  "twine>=6.2.0",
37
33
  ]
@@ -0,0 +1,255 @@
1
+ """unicex - библиотека для работы с криптовалютными биржами, реализующая унифицированный интерфейс для работы с различными криптовалютными биржами."""
2
+
3
+ __all__ = [
4
+ # Mappers
5
+ "get_uni_client",
6
+ "get_uni_websocket_manager",
7
+ # Enums
8
+ "MarketType",
9
+ "Exchange",
10
+ "Timeframe",
11
+ "Side",
12
+ # Types
13
+ "KlineDict",
14
+ "AggTradeDict",
15
+ "TradeDict",
16
+ "TickerDailyDict",
17
+ "RequestMethod",
18
+ "LoggerLike",
19
+ # Interfaces
20
+ "IUniClient",
21
+ "IUniWebsocketManager",
22
+ # Base clients and websockets
23
+ "Websocket",
24
+ "BaseClient",
25
+ # Binance
26
+ "BinanceClient",
27
+ "BinanceUniClient",
28
+ "BinanceWebsocketManager",
29
+ "BinanceUniWebsocketManager",
30
+ "BinanceUserWebsocket",
31
+ # Bitget
32
+ "BitgetClient",
33
+ "BitgetUniClient",
34
+ "BitgetUniWebsocketManager",
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",
115
+ ]
116
+
117
+ # ruff: noqa
118
+
119
+ # abstract & base
120
+ from ._abc import IUniClient, IUniWebsocketManager
121
+ from ._base import BaseClient, Websocket
122
+
123
+ # enums, mappers, types
124
+ from .enums import Exchange, MarketType, Side, Timeframe
125
+ from .mapper import get_uni_client, get_uni_websocket_manager
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
+ )
@@ -1,4 +1,7 @@
1
- __all__ = ["IUniClient", "IUniWebsocketManager"]
1
+ __all__ = [
2
+ "IUniClient",
3
+ "IUniWebsocketManager",
4
+ ]
2
5
 
3
6
  from .uni_client import IUniClient
4
7
  from .uni_websocket_manager import IUniWebsocketManager