unicex 0.13.0__py3-none-any.whl → 0.13.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
unicex/__init__.py CHANGED
@@ -139,7 +139,7 @@ from .bybit import (
139
139
  ExchangeInfo as BybitExchangeInfo,
140
140
  )
141
141
 
142
- from .gateio import (
142
+ from .gate import (
143
143
  Client as GateioClient,
144
144
  UniClient as GateioUniClient,
145
145
  UniWebsocketManager as GateioUniWebsocketManager,
unicex/bitget/client.py CHANGED
@@ -247,14 +247,16 @@ class Client(BaseClient):
247
247
  """
248
248
  params = {"coin": coin}
249
249
 
250
- return await self._make_request("GET", "/api/v2/account/funding-assets", params=params)
250
+ return await self._make_request(
251
+ "GET", "/api/v2/account/funding-assets", params=params, signed=True
252
+ )
251
253
 
252
254
  async def all_account_balance(self) -> dict:
253
255
  """Получение балансов по всем типам аккаунтов.
254
256
 
255
257
  https://www.bitget.com/api-doc/common/account/All-Account-Balance
256
258
  """
257
- return await self._make_request("GET", "/api/v2/account/all-account-balance")
259
+ return await self._make_request("GET", "/api/v2/account/all-account-balance", signed=True)
258
260
 
259
261
  # topic: market
260
262
 
unicex/enums.py CHANGED
@@ -28,7 +28,7 @@ class Exchange(StrEnum):
28
28
  BITGET = "BITGET"
29
29
  BITUNIX = "BITUNIX"
30
30
  BYBIT = "BYBIT"
31
- GATEIO = "GATEIO"
31
+ GATE = "GATE"
32
32
  HYPERLIQUID = "HYPERLIQUID"
33
33
  KCEX = "KCEX"
34
34
  MEXC = "MEXC"
@@ -194,7 +194,7 @@ class Timeframe(StrEnum):
194
194
  Timeframe.WEEK_1: "1W",
195
195
  Timeframe.MONTH_1: "1M",
196
196
  },
197
- (Exchange.GATEIO, MarketType.FUTURES): {
197
+ (Exchange.GATE, MarketType.FUTURES): {
198
198
  Timeframe.SECOND_1: "1s",
199
199
  Timeframe.MIN_1: "1m",
200
200
  Timeframe.MIN_5: "5m",
@@ -210,7 +210,7 @@ class Timeframe(StrEnum):
210
210
  Timeframe.WEEK_1: "1w",
211
211
  Timeframe.MONTH_1: "30d",
212
212
  },
213
- (Exchange.GATEIO, MarketType.SPOT): {
213
+ (Exchange.GATE, MarketType.SPOT): {
214
214
  Timeframe.MIN_1: "1m",
215
215
  Timeframe.MIN_5: "5m",
216
216
  Timeframe.MIN_15: "15m",
unicex/extra.py CHANGED
@@ -201,7 +201,7 @@ def generate_ex_link(exchange: Exchange, market_type: MarketType, symbol: str):
201
201
  return f"https://www.mexc.com/ru-RU/futures/{ticker}_USDT?type=linear_swap"
202
202
  else:
203
203
  return f"https://www.mexc.com/ru-RU/exchange/{ticker}_USDT"
204
- elif exchange == Exchange.GATEIO:
204
+ elif exchange == Exchange.GATE:
205
205
  if market_type == MarketType.FUTURES:
206
206
  return f"https://www.gate.com/ru/futures/USDT/{ticker}_USDT"
207
207
  else:
@@ -242,10 +242,11 @@ def generate_tv_link(exchange: Exchange, market_type: MarketType, symbol: str) -
242
242
  `str`: Ссылка для TradingView.
243
243
  """
244
244
  symbol = normalize_symbol(symbol)
245
+ exchange_str = "GATEIO" if exchange == Exchange.GATE else str(exchange)
245
246
  if market_type == MarketType.FUTURES:
246
- return f"https://www.tradingview.com/chart/?symbol={exchange}:{symbol}.P"
247
+ return f"https://www.tradingview.com/chart/?symbol={exchange_str}:{symbol}.P"
247
248
  else:
248
- return f"https://www.tradingview.com/chart/?symbol={exchange}:{symbol}"
249
+ return f"https://www.tradingview.com/chart/?symbol={exchange_str}:{symbol}"
249
250
 
250
251
 
251
252
  def generate_cg_link(exchange: Exchange, market_type: MarketType, symbol: str) -> str:
@@ -266,17 +267,17 @@ def generate_cg_link(exchange: Exchange, market_type: MarketType, symbol: str) -
266
267
  if market_type == MarketType.FUTURES:
267
268
  match exchange:
268
269
  case Exchange.OKX:
269
- return f"{base_url}/{exchange.upper()}_{symbol.replace('USDT', '-USDT')}-SWAP"
270
+ return f"{base_url}/OKX_{symbol.replace('USDT', '-USDT')}-SWAP"
270
271
  case Exchange.MEXC:
271
- return f"{base_url}/{exchange.upper()}_{symbol.replace('USDT', '_USDT')}"
272
+ return f"{base_url}/MEXC_{symbol.replace('USDT', '_USDT')}"
272
273
  case Exchange.BITGET:
273
- return f"{base_url}/{exchange.capitalize()}_{symbol}_UMCBL"
274
- case Exchange.GATEIO:
274
+ return f"{base_url}/Bitget_{symbol}_UMCBL"
275
+ case Exchange.GATE:
275
276
  return f"{base_url}/Gate_{symbol.replace('USDT', '_USDT')}"
276
277
  case Exchange.BITUNIX:
277
- return f"{base_url}/{exchange.capitalize()}_{symbol}"
278
+ return f"{base_url}/Bitunix_{symbol}"
278
279
  case Exchange.HYPERLIQUID:
279
- return f"{base_url}/{exchange.capitalize()}_{symbol.replace('USDT', '-USD')}"
280
+ return f"{base_url}/Hyperliquid_{symbol.replace('USDT', '-USD')}"
280
281
  case _:
281
282
  return f"{base_url}/{exchange.capitalize()}_{symbol}"
282
283
  else:
@@ -104,7 +104,7 @@ class UniClient(IUniClient[Client]):
104
104
  list[KlineDict]: Список свечей для тикера.
105
105
  """
106
106
  interval = (
107
- interval.to_exchange_format(Exchange.GATEIO, MarketType.SPOT)
107
+ interval.to_exchange_format(Exchange.GATE, MarketType.SPOT)
108
108
  if isinstance(interval, Timeframe)
109
109
  else interval
110
110
  )
@@ -138,7 +138,7 @@ class UniClient(IUniClient[Client]):
138
138
  list[KlineDict]: Список свечей для тикера.
139
139
  """
140
140
  interval = (
141
- interval.to_exchange_format(Exchange.GATEIO, MarketType.FUTURES)
141
+ interval.to_exchange_format(Exchange.GATE, MarketType.FUTURES)
142
142
  if isinstance(interval, Timeframe)
143
143
  else interval
144
144
  )
unicex/mapper.py CHANGED
@@ -19,9 +19,9 @@ from .bybit import UniClient as BybitUniClient
19
19
  from .bybit import UniWebsocketManager as BybitUniWebsocketManager
20
20
  from .enums import Exchange
21
21
  from .exceptions import NotSupported
22
- from .gateio import ExchangeInfo as GateioExchangeInfo
23
- from .gateio import UniClient as GateioUniClient
24
- from .gateio import UniWebsocketManager as GateioUniWebsocketManager
22
+ from .gate import ExchangeInfo as GateioExchangeInfo
23
+ from .gate import UniClient as GateioUniClient
24
+ from .gate import UniWebsocketManager as GateioUniWebsocketManager
25
25
  from .hyperliquid import ExchangeInfo as HyperliquidExchangeInfo
26
26
  from .hyperliquid import UniClient as HyperliquidUniClient
27
27
  from .hyperliquid import UniWebsocketManager as HyperliquidUniWebsocketManager
@@ -36,7 +36,7 @@ _UNI_CLIENT_MAPPER: dict[Exchange, type[IUniClient]] = {
36
36
  Exchange.BINANCE: BinanceUniClient,
37
37
  Exchange.BITGET: BitgetUniClient,
38
38
  Exchange.BYBIT: BybitUniClient,
39
- Exchange.GATEIO: GateioUniClient,
39
+ Exchange.GATE: GateioUniClient,
40
40
  Exchange.HYPERLIQUID: HyperliquidUniClient,
41
41
  Exchange.MEXC: MexcUniClient,
42
42
  Exchange.OKX: OkxUniClient,
@@ -47,7 +47,7 @@ _UNI_WS_MANAGER_MAPPER: dict[Exchange, type[IUniWebsocketManager]] = {
47
47
  Exchange.BINANCE: BinanceUniWebsocketManager,
48
48
  Exchange.BITGET: BitgetUniWebsocketManager,
49
49
  Exchange.BYBIT: BybitUniWebsocketManager,
50
- Exchange.GATEIO: GateioUniWebsocketManager,
50
+ Exchange.GATE: GateioUniWebsocketManager,
51
51
  Exchange.HYPERLIQUID: HyperliquidUniWebsocketManager,
52
52
  Exchange.MEXC: MexcUniWebsocketManager,
53
53
  Exchange.OKX: OkxUniWebsocketManager,
@@ -58,7 +58,7 @@ _EXCHANGE_INFO_MAPPER: dict[Exchange, type[IExchangeInfo]] = {
58
58
  Exchange.BINANCE: BinanceExchangeInfo,
59
59
  Exchange.BITGET: BitgetExchangeInfo,
60
60
  Exchange.BYBIT: BybitExchangeInfo,
61
- Exchange.GATEIO: GateioExchangeInfo,
61
+ Exchange.GATE: GateioExchangeInfo,
62
62
  Exchange.HYPERLIQUID: HyperliquidExchangeInfo,
63
63
  Exchange.MEXC: MexcExchangeInfo,
64
64
  Exchange.OKX: OkxExchangeInfo,
unicex/okx/adapter.py CHANGED
@@ -57,16 +57,22 @@ class Adapter:
57
57
 
58
58
  # NOTE: Обратите внимание, изменение цены в случае с OKX возвращается относительно открытия 1 day свечи.
59
59
  """
60
- return {
61
- item["instId"]: TickerDailyItem(
62
- p=round(
63
- (float(item["last"]) - float(item["open24h"])) / float(item["open24h"]) * 100, 2
64
- ),
65
- v=float(item["vol24h"]),
66
- q=float(item["volCcy24h"]),
67
- )
68
- for item in raw_data["data"]
69
- }
60
+ result = {}
61
+ for item in raw_data["data"]:
62
+ try:
63
+ result[item["instId"]] = TickerDailyItem(
64
+ p=round(
65
+ (float(item["last"]) - float(item["open24h"]))
66
+ / float(item["open24h"])
67
+ * 100,
68
+ 2,
69
+ ),
70
+ v=float(item["vol24h"]),
71
+ q=float(item["volCcy24h"]),
72
+ )
73
+ except (ValueError, TypeError, KeyError):
74
+ continue
75
+ return result
70
76
 
71
77
  @staticmethod
72
78
  def futures_ticker_24hr(raw_data: dict) -> TickerDailyDict:
@@ -88,7 +94,13 @@ class Adapter:
88
94
  @staticmethod
89
95
  def last_price(raw_data: dict) -> dict[str, float]:
90
96
  """Преобразует данные о последней цене в унифицированный формат."""
91
- return {item["instId"]: float(item["last"]) for item in raw_data["data"]}
97
+ result = {}
98
+ for item in raw_data["data"]:
99
+ try:
100
+ result[item["instId"]] = float(item["last"])
101
+ except (ValueError, TypeError, KeyError):
102
+ continue
103
+ return result
92
104
 
93
105
  @staticmethod
94
106
  def klines(raw_data: dict, symbol: str) -> list[KlineDict]:
unicex/utils.py CHANGED
@@ -208,7 +208,7 @@ def symbol_to_exchange_format(
208
208
  return symbol_upper.replace("USDT", "-USDT-SWAP")
209
209
  elif market_type == MarketType.SPOT:
210
210
  return symbol_upper.replace("USDT", "-USDT")
211
- elif exchange == Exchange.GATEIO:
211
+ elif exchange == Exchange.GATE:
212
212
  return symbol_upper.replace("USDT", "_USDT")
213
213
  elif exchange == Exchange.HYPERLIQUID:
214
214
  if market_type == MarketType.FUTURES:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unicex
3
- Version: 0.13.0
3
+ Version: 0.13.2
4
4
  Summary: Unified Crypto Exchange API
5
5
  Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
6
6
  License: BSD 3-Clause License
@@ -1,10 +1,10 @@
1
- unicex/__init__.py,sha256=v3yO0P9GqC88cV4L-YSJ6h2YzlyOTnt1NPNLSJwhIRE,5806
2
- unicex/enums.py,sha256=8E_Nb57kriOif57XSLnW8joFufbthZTJ7tcExKWf1Wg,9633
1
+ unicex/__init__.py,sha256=fnJ6Z68MRZKLY3SSz8Q2yhraq5t22QDagIvZKbVq3Uk,5804
2
+ unicex/enums.py,sha256=8S72iJvD1Hd8i9EmF8KshJEEfAYe9dITVcIxBLREjn0,9625
3
3
  unicex/exceptions.py,sha256=r-xZzX78VuxVnI5pe99AM8FIiGcdIUDcF5CaTkQ4NE0,2213
4
- unicex/extra.py,sha256=MZRSsDRok05KZCqKur-hjOexZuoZ-tC9J6e-EIZr_lw,13824
5
- unicex/mapper.py,sha256=zOuInRQGJnSnwRI5yJ_axx-0svGn-nOqgLr7XXSlq14,4915
4
+ unicex/extra.py,sha256=bU88Oh4-9Cvc2vuuf2fDGksUR7gvdluDh99O0m-vDFo,13830
5
+ unicex/mapper.py,sha256=PPMC5E8smjmhXwiOCQG3WIc_-8wZ3iZGey6HiLiN7TQ,4903
6
6
  unicex/types.py,sha256=quGNpQm-_lSkijRKz04A5lPVxQ2PYrFzggYSPiJGzXI,4728
7
- unicex/utils.py,sha256=dwU1VYuP2xcMpzaETtNQerL1V8Y_JH8H8EsLJ__-M4s,8050
7
+ unicex/utils.py,sha256=xzeP8E2bBoie8GvxW97FPEu_QPYMxiNgc9zX7yrdsfk,8048
8
8
  unicex/_abc/__init__.py,sha256=fxZjNFJFeFwWTXz8iSDe7eCWwE6xfFwFwAuG6l-TI8A,289
9
9
  unicex/_abc/exchange_info.py,sha256=NHBQAjknIRebyjl3musrvneN5u9vKYXjAca5PmTvJTw,9545
10
10
  unicex/_abc/uni_client.py,sha256=ZjxK8aqCGLUUYy1UQTM9EvWn1IXwMkH2Db8sZrs1e_I,13728
@@ -22,7 +22,7 @@ unicex/binance/user_websocket.py,sha256=HJ_3VZV0Bil0vfsdLrZElXm-gUqd8mGzXzfQ0_sH
22
22
  unicex/binance/websocket_manager.py,sha256=Idrq0Qzi14QgpIG5d77S-r1h_BvRXphcxY2BT2IOQXA,45511
23
23
  unicex/bitget/__init__.py,sha256=8govSOEyWjA62js-ZTQIiSYWSmcEUFSC9hVTpS8eosk,929
24
24
  unicex/bitget/adapter.py,sha256=frQBOKFsIB8mXc_Ime2-Iby_nRQlSpzXjshC5AxoDTA,7741
25
- unicex/bitget/client.py,sha256=RbOrW8Q21OwYFac2xrKQURdYSAkVQ0jj18cDoLj5Edk,90155
25
+ unicex/bitget/client.py,sha256=AMlHqEdPrBdXNxiUwK_0Whk9sS8THnt1kXpJez-T-Sg,90203
26
26
  unicex/bitget/exchange_info.py,sha256=_UMvAqP0zcpmv9dkovkFxrXLlol6q8_v7-0sy6FSfrE,1959
27
27
  unicex/bitget/uni_client.py,sha256=MrXAmthTDTEQZ1ZY3LuqkCKL1bw_mKHMdiV4XiRFO-M,8641
28
28
  unicex/bitget/uni_websocket_manager.py,sha256=y-HXrREy_ruNeUzdRv5nHwBZQgbupxzp1UV-IFOpN_8,9793
@@ -36,14 +36,14 @@ unicex/bybit/uni_client.py,sha256=0wmIRRgofuJXWvZMB1gHwuIEfoWuPhLJXthmK1f9w40,83
36
36
  unicex/bybit/uni_websocket_manager.py,sha256=OpnvWD0xZ8T_By0HZCSg3jWoZqScRATAsku4IIBqhlw,10252
37
37
  unicex/bybit/user_websocket.py,sha256=IGGEnwyWs5jOppgK_R7SisBDvsiF1_piTswBrdQOgDg,128
38
38
  unicex/bybit/websocket_manager.py,sha256=ePHvngoqoVPr6p-BayoEGhCuRK-cJ69CAPzF94qTalQ,15404
39
- unicex/gateio/__init__.py,sha256=dsKvhQhDcw4_w0S4c9IjKkCoOg4DCUtSecEUOlfstug,929
40
- unicex/gateio/adapter.py,sha256=PE5lXQORAKLhzFZBtxcarNIt2xEcDrPrphxWS0k0wEk,6842
41
- unicex/gateio/client.py,sha256=bhWkYBn5B4JKpLRfQERTVzisiCSg7mMi6mM0kh4Hes4,53760
42
- unicex/gateio/exchange_info.py,sha256=ANzfe4mqxtLnj2TBJJxoc31KUosvxdApp1_xYrRNQDs,2300
43
- unicex/gateio/uni_client.py,sha256=btfI-dozBRsbjEMvSlUX8zp6SOvIS1xDxk_5hNqRfz4,9648
44
- unicex/gateio/uni_websocket_manager.py,sha256=3KAHhgJNISTOZRBTwbZPigc8iq_IHS19NwnuAsnfeXg,9329
45
- unicex/gateio/user_websocket.py,sha256=4qZX9N2RjlJ-e25Eszz12OeCM17j5DdXVimBVaLj53w,129
46
- unicex/gateio/websocket_manager.py,sha256=phtHbvAGQD3mtewCUxBuuD1Nj0FXN6oZrd7tnmT7c2c,25832
39
+ unicex/gate/__init__.py,sha256=dsKvhQhDcw4_w0S4c9IjKkCoOg4DCUtSecEUOlfstug,929
40
+ unicex/gate/adapter.py,sha256=PE5lXQORAKLhzFZBtxcarNIt2xEcDrPrphxWS0k0wEk,6842
41
+ unicex/gate/client.py,sha256=bhWkYBn5B4JKpLRfQERTVzisiCSg7mMi6mM0kh4Hes4,53760
42
+ unicex/gate/exchange_info.py,sha256=ANzfe4mqxtLnj2TBJJxoc31KUosvxdApp1_xYrRNQDs,2300
43
+ unicex/gate/uni_client.py,sha256=zJrxzWqp0g4hYV0kUKQRfWxMHcWoAnhgB4B5t_MfOng,9644
44
+ unicex/gate/uni_websocket_manager.py,sha256=3KAHhgJNISTOZRBTwbZPigc8iq_IHS19NwnuAsnfeXg,9329
45
+ unicex/gate/user_websocket.py,sha256=4qZX9N2RjlJ-e25Eszz12OeCM17j5DdXVimBVaLj53w,129
46
+ unicex/gate/websocket_manager.py,sha256=phtHbvAGQD3mtewCUxBuuD1Nj0FXN6oZrd7tnmT7c2c,25832
47
47
  unicex/hyperliquid/__init__.py,sha256=qGTAkwfXLvknvHET_iA7Qml3jkxxxA0moU_98nGTcVU,944
48
48
  unicex/hyperliquid/adapter.py,sha256=0aULPGDhppjbRvShbR49GNt6qmw4o_CmrFi_xGVRLHg,10612
49
49
  unicex/hyperliquid/client.py,sha256=8YnPh_6Hj8vFYcPbMaPae6OfroFzn28VI6iL3FQfa84,84255
@@ -79,15 +79,15 @@ unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py,sha256=0FOMsSO4jzMQ6446yZ
79
79
  unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py,sha256=_V0StMrDE7-bsdRPQdTC2XLGDGqJ5U_scx8ZjcyCGgk,3735
80
80
  unicex/mexc/_spot_ws_proto/__init__.py,sha256=L8Jft1713_M8CLR9drgSjLBdY_46sPT3O9zDFlxYvgc,11431
81
81
  unicex/okx/__init__.py,sha256=Ljbw3AP0YrPF5bIPJi_3JP3B_czR9xurYHI24rgWk9M,920
82
- unicex/okx/adapter.py,sha256=zXSLieRC80KY56ey1X-ss51uQ0QzouDxXppjcofLNRQ,5351
82
+ unicex/okx/adapter.py,sha256=0sQ_7pYdUEBfXMUtNj8wJ9ECt-DJQ9ozUXi0WPAYevU,5724
83
83
  unicex/okx/client.py,sha256=2XL4YWPdRZYRMfLF1vSpkmwSd8Dxn8uyw5vCwDJab48,90969
84
84
  unicex/okx/exchange_info.py,sha256=gkTwYnXgswa1FGLXdKo9qLYqZA0BS9VefpALhR4_t-Q,1772
85
85
  unicex/okx/uni_client.py,sha256=E_Wod0JSGt1K6k1mAIWnOv350pELbv-nic7g1KgOuos,8694
86
86
  unicex/okx/uni_websocket_manager.py,sha256=b4f_QjA64DJmENQdIGb5IOVc7kvit7KMCdWeCmRbxGY,9326
87
87
  unicex/okx/user_websocket.py,sha256=8c9kpm-xVa729pW93OKUGLHaE9MY0uzEpjIgNIFRF80,126
88
88
  unicex/okx/websocket_manager.py,sha256=wROXTUDqKzOE-wDnCtXso_MC4SzfPuPols5aPg_Z3y4,26027
89
- unicex-0.13.0.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
90
- unicex-0.13.0.dist-info/METADATA,sha256=mcRAXzA8_-E8J4FPnOX8HStWwYigLbvL_6E9IyCvt90,11752
91
- unicex-0.13.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
92
- unicex-0.13.0.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
93
- unicex-0.13.0.dist-info/RECORD,,
89
+ unicex-0.13.2.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
90
+ unicex-0.13.2.dist-info/METADATA,sha256=fgCfUXJoozTkutNdOQ8VwzYfQtoqS693WP7Z2Jg7INw,11752
91
+ unicex-0.13.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
92
+ unicex-0.13.2.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
93
+ unicex-0.13.2.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes