ccxt-ir 4.3.46.0.2__py2.py3-none-any.whl → 4.5.0__py2.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.
- ccxt/__init__.py +39 -35
- ccxt/abantether.py +9 -9
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/apex.py +31 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +106 -48
- ccxt/abstract/binancecoinm.py +106 -48
- ccxt/abstract/binanceus.py +141 -83
- ccxt/abstract/binanceusdm.py +106 -48
- ccxt/abstract/bingx.py +50 -1
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +67 -0
- ccxt/abstract/bitmart.py +19 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitrue.py +68 -68
- ccxt/abstract/bitstamp.py +1 -0
- ccxt/abstract/blofin.py +30 -0
- ccxt/abstract/btcbox.py +2 -0
- ccxt/abstract/bybit.py +28 -13
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbaseexchange.py +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/cryptocom.py +16 -0
- ccxt/abstract/cryptomus.py +20 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/derive.py +117 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/foxbit.py +26 -0
- ccxt/abstract/gate.py +19 -0
- ccxt/abstract/gateio.py +19 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hibachi.py +26 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +1 -0
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +10 -0
- ccxt/abstract/kucoinfutures.py +18 -0
- ccxt/abstract/lbank.py +2 -1
- ccxt/abstract/luno.py +1 -0
- ccxt/abstract/mexc.py +2 -0
- ccxt/abstract/modetrade.py +119 -0
- ccxt/abstract/myokx.py +349 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +25 -0
- ccxt/abstract/okxus.py +349 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/paradex.py +23 -0
- ccxt/abstract/phemex.py +2 -0
- ccxt/abstract/poloniex.py +36 -0
- ccxt/abstract/tradeogre.py +3 -1
- ccxt/abstract/upbit.py +51 -34
- ccxt/abstract/whitebit.py +16 -0
- ccxt/abstract/woo.py +64 -6
- ccxt/abstract/xt.py +10 -5
- ccxt/afratether.py +7 -7
- ccxt/alpaca.py +828 -51
- ccxt/apex.py +1875 -0
- ccxt/arzinja.py +7 -7
- ccxt/arzplus.py +9 -9
- ccxt/ascendex.py +501 -306
- ccxt/async_support/__init__.py +39 -35
- ccxt/async_support/abantether.py +10 -10
- ccxt/async_support/afratether.py +9 -9
- ccxt/async_support/alpaca.py +828 -51
- ccxt/async_support/apex.py +1875 -0
- ccxt/async_support/arzinja.py +10 -10
- ccxt/async_support/arzplus.py +12 -12
- ccxt/async_support/ascendex.py +502 -306
- ccxt/async_support/base/exchange.py +303 -89
- ccxt/async_support/base/ws/cache.py +9 -3
- ccxt/async_support/base/ws/client.py +173 -38
- ccxt/async_support/base/ws/future.py +25 -37
- ccxt/async_support/bequant.py +5 -3
- ccxt/async_support/bigone.py +279 -144
- ccxt/async_support/binance.py +2347 -1158
- ccxt/async_support/binancecoinm.py +9 -3
- ccxt/async_support/binanceus.py +17 -3
- ccxt/async_support/binanceusdm.py +9 -4
- ccxt/async_support/bingx.py +2962 -920
- ccxt/async_support/bit2c.py +147 -27
- ccxt/async_support/bitbank.py +151 -23
- ccxt/async_support/bitbns.py +104 -30
- ccxt/async_support/bitfinex.py +3291 -1113
- ccxt/async_support/bitflyer.py +202 -27
- ccxt/async_support/bitget.py +3683 -1538
- ccxt/async_support/bithumb.py +195 -38
- ccxt/async_support/bitimen.py +12 -12
- ccxt/async_support/bitir.py +38 -38
- ccxt/async_support/bitmart.py +1288 -350
- ccxt/async_support/bitmex.py +260 -75
- ccxt/async_support/bitopro.py +262 -62
- ccxt/async_support/bitpin.py +17 -16
- ccxt/async_support/bitrue.py +459 -290
- ccxt/async_support/bitso.py +199 -54
- ccxt/async_support/bitstamp.py +230 -96
- ccxt/async_support/bitteam.py +167 -25
- ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
- ccxt/async_support/bitvavo.py +213 -49
- ccxt/async_support/blockchaincom.py +160 -46
- ccxt/async_support/blofin.py +502 -120
- ccxt/async_support/btcalpha.py +169 -31
- ccxt/async_support/btcbox.py +292 -23
- ccxt/async_support/btcmarkets.py +211 -58
- ccxt/async_support/btcturk.py +161 -38
- ccxt/async_support/bybit.py +1775 -1030
- ccxt/async_support/cex.py +1440 -1303
- ccxt/async_support/coinbase.py +724 -212
- ccxt/async_support/coinbaseadvanced.py +2 -1
- ccxt/async_support/coinbaseexchange.py +388 -89
- ccxt/async_support/coinbaseinternational.py +412 -57
- ccxt/async_support/coincatch.py +177 -78
- ccxt/async_support/coincheck.py +135 -19
- ccxt/async_support/coinex.py +606 -232
- ccxt/async_support/coinmate.py +189 -63
- ccxt/async_support/coinmetro.py +195 -54
- ccxt/async_support/coinone.py +158 -51
- ccxt/async_support/coinsph.py +336 -61
- ccxt/async_support/coinspot.py +151 -52
- ccxt/async_support/cryptocom.py +661 -111
- ccxt/async_support/cryptomus.py +1137 -0
- ccxt/async_support/defx.py +2071 -0
- ccxt/async_support/delta.py +299 -99
- ccxt/async_support/deribit.py +348 -126
- ccxt/async_support/derive.py +2572 -0
- ccxt/async_support/digifinex.py +430 -214
- ccxt/async_support/ellipx.py +2029 -0
- ccxt/async_support/eterex.py +10 -10
- ccxt/async_support/excoino.py +31 -31
- ccxt/async_support/exir.py +14 -14
- ccxt/async_support/exmo.py +344 -131
- ccxt/async_support/exnovin.py +10 -10
- ccxt/async_support/farhadexchange.py +12 -12
- ccxt/async_support/fmfwio.py +2 -1
- ccxt/async_support/foxbit.py +1935 -0
- ccxt/async_support/gate.py +1351 -529
- ccxt/async_support/gateio.py +2 -1
- ccxt/async_support/gemini.py +144 -39
- ccxt/async_support/hashkey.py +152 -109
- ccxt/async_support/hibachi.py +2080 -0
- ccxt/async_support/hitbtc.py +395 -167
- ccxt/async_support/hitobit.py +12 -12
- ccxt/async_support/hollaex.py +307 -119
- ccxt/async_support/htx.py +851 -383
- ccxt/async_support/huobi.py +2 -1
- ccxt/async_support/hyperliquid.py +1848 -536
- ccxt/async_support/independentreserve.py +288 -15
- ccxt/async_support/indodax.py +190 -33
- ccxt/async_support/jibitex.py +12 -12
- ccxt/async_support/kraken.py +795 -351
- ccxt/async_support/krakenfutures.py +214 -62
- ccxt/async_support/kucoin.py +715 -396
- ccxt/async_support/kucoinfutures.py +652 -89
- ccxt/async_support/latoken.py +217 -113
- ccxt/async_support/lbank.py +425 -97
- ccxt/async_support/luno.py +382 -35
- ccxt/async_support/mercado.py +113 -6
- ccxt/async_support/mexc.py +874 -437
- ccxt/async_support/modetrade.py +2818 -0
- ccxt/async_support/myokx.py +54 -0
- ccxt/async_support/ndax.py +221 -64
- ccxt/async_support/nobitex.py +31 -37
- ccxt/async_support/novadax.py +190 -34
- ccxt/async_support/oceanex.py +217 -28
- ccxt/async_support/okcoin.py +253 -145
- ccxt/async_support/okexchange.py +11 -11
- ccxt/async_support/okx.py +1088 -351
- ccxt/async_support/okxus.py +54 -0
- ccxt/async_support/ompfinex.py +25 -24
- ccxt/async_support/onetrading.py +213 -392
- ccxt/async_support/oxfun.py +245 -166
- ccxt/async_support/p2b.py +151 -29
- ccxt/async_support/paradex.py +562 -49
- ccxt/async_support/paymium.py +82 -19
- ccxt/async_support/phemex.py +713 -172
- ccxt/async_support/poloniex.py +1602 -283
- ccxt/async_support/probit.py +224 -95
- ccxt/async_support/ramzinex.py +30 -27
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +14 -13
- ccxt/async_support/tetherland.py +9 -9
- ccxt/async_support/timex.py +210 -51
- ccxt/async_support/tokocrypto.py +167 -47
- ccxt/async_support/tradeogre.py +266 -31
- ccxt/async_support/twox.py +9 -9
- ccxt/async_support/ubitex.py +12 -12
- ccxt/async_support/upbit.py +568 -165
- ccxt/async_support/vertex.py +160 -32
- ccxt/async_support/wallex.py +12 -12
- ccxt/async_support/wavesexchange.py +165 -30
- ccxt/async_support/whitebit.py +975 -127
- ccxt/async_support/woo.py +1918 -1016
- ccxt/async_support/woofipro.py +433 -141
- ccxt/async_support/xt.py +649 -193
- ccxt/async_support/yobit.py +195 -70
- ccxt/async_support/zaif.py +91 -15
- ccxt/async_support/zonda.py +151 -36
- ccxt/base/decimal_to_precision.py +14 -10
- ccxt/base/errors.py +49 -18
- ccxt/base/exchange.py +1556 -450
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +114 -6
- ccxt/bequant.py +5 -3
- ccxt/bigone.py +279 -144
- ccxt/binance.py +2347 -1158
- ccxt/binancecoinm.py +9 -3
- ccxt/binanceus.py +17 -3
- ccxt/binanceusdm.py +9 -4
- ccxt/bingx.py +2962 -920
- ccxt/bit2c.py +147 -27
- ccxt/bitbank.py +151 -23
- ccxt/bitbns.py +104 -30
- ccxt/bitfinex.py +3290 -1113
- ccxt/bitflyer.py +202 -27
- ccxt/bitget.py +3683 -1538
- ccxt/bithumb.py +194 -38
- ccxt/bitimen.py +9 -9
- ccxt/bitir.py +35 -35
- ccxt/bitmart.py +1288 -350
- ccxt/bitmex.py +260 -75
- ccxt/bitopro.py +262 -62
- ccxt/bitpin.py +15 -14
- ccxt/bitrue.py +459 -290
- ccxt/bitso.py +199 -54
- ccxt/bitstamp.py +230 -96
- ccxt/bitteam.py +167 -25
- ccxt/{huobijp.py → bittrade.py} +158 -30
- ccxt/bitvavo.py +213 -49
- ccxt/blockchaincom.py +160 -46
- ccxt/blofin.py +502 -120
- ccxt/btcalpha.py +169 -31
- ccxt/btcbox.py +291 -23
- ccxt/btcmarkets.py +211 -58
- ccxt/btcturk.py +161 -38
- ccxt/bybit.py +1775 -1030
- ccxt/cex.py +1439 -1303
- ccxt/coinbase.py +724 -212
- ccxt/coinbaseadvanced.py +2 -1
- ccxt/coinbaseexchange.py +388 -89
- ccxt/coinbaseinternational.py +412 -57
- ccxt/coincatch.py +177 -78
- ccxt/coincheck.py +135 -19
- ccxt/coinex.py +606 -232
- ccxt/coinmate.py +189 -63
- ccxt/coinmetro.py +194 -54
- ccxt/coinone.py +158 -51
- ccxt/coinsph.py +336 -61
- ccxt/coinspot.py +151 -52
- ccxt/cryptocom.py +661 -111
- ccxt/cryptomus.py +1137 -0
- ccxt/defx.py +2070 -0
- ccxt/delta.py +299 -99
- ccxt/deribit.py +348 -126
- ccxt/derive.py +2571 -0
- ccxt/digifinex.py +430 -214
- ccxt/ellipx.py +2029 -0
- ccxt/eterex.py +7 -7
- ccxt/excoino.py +29 -29
- ccxt/exir.py +11 -11
- ccxt/exmo.py +343 -131
- ccxt/exnovin.py +8 -8
- ccxt/farhadexchange.py +10 -10
- ccxt/fmfwio.py +2 -1
- ccxt/foxbit.py +1935 -0
- ccxt/gate.py +1351 -529
- ccxt/gateio.py +2 -1
- ccxt/gemini.py +144 -39
- ccxt/hashkey.py +152 -109
- ccxt/hibachi.py +2079 -0
- ccxt/hitbtc.py +395 -167
- ccxt/hitobit.py +9 -9
- ccxt/hollaex.py +307 -119
- ccxt/htx.py +851 -383
- ccxt/huobi.py +2 -1
- ccxt/hyperliquid.py +1848 -536
- ccxt/independentreserve.py +287 -15
- ccxt/indodax.py +190 -33
- ccxt/jibitex.py +9 -9
- ccxt/kraken.py +794 -351
- ccxt/krakenfutures.py +214 -62
- ccxt/kucoin.py +715 -396
- ccxt/kucoinfutures.py +652 -89
- ccxt/latoken.py +217 -113
- ccxt/lbank.py +425 -97
- ccxt/luno.py +382 -35
- ccxt/mercado.py +113 -6
- ccxt/mexc.py +873 -437
- ccxt/modetrade.py +2818 -0
- ccxt/myokx.py +54 -0
- ccxt/ndax.py +221 -64
- ccxt/nobitex.py +29 -35
- ccxt/novadax.py +190 -34
- ccxt/oceanex.py +217 -28
- ccxt/okcoin.py +253 -145
- ccxt/okexchange.py +9 -9
- ccxt/okx.py +1088 -351
- ccxt/okxus.py +54 -0
- ccxt/ompfinex.py +22 -21
- ccxt/onetrading.py +213 -392
- ccxt/oxfun.py +245 -166
- ccxt/p2b.py +151 -29
- ccxt/paradex.py +562 -49
- ccxt/paymium.py +82 -19
- ccxt/phemex.py +712 -172
- ccxt/poloniex.py +1601 -283
- ccxt/pro/__init__.py +76 -17
- ccxt/pro/alpaca.py +21 -6
- ccxt/pro/apex.py +984 -0
- ccxt/pro/ascendex.py +58 -10
- ccxt/pro/bequant.py +6 -1
- ccxt/pro/binance.py +728 -156
- ccxt/pro/binancecoinm.py +6 -2
- ccxt/pro/binanceus.py +8 -4
- ccxt/pro/binanceusdm.py +7 -2
- ccxt/pro/bingx.py +333 -142
- ccxt/pro/bitfinex.py +727 -262
- ccxt/pro/bitget.py +570 -79
- ccxt/pro/bithumb.py +20 -6
- ccxt/pro/bitmart.py +216 -87
- ccxt/pro/bitmex.py +47 -9
- ccxt/pro/bitopro.py +26 -14
- ccxt/pro/bitrue.py +22 -22
- ccxt/pro/bitstamp.py +54 -21
- ccxt/pro/{huobijp.py → bittrade.py} +7 -6
- ccxt/pro/bitvavo.py +191 -67
- ccxt/pro/blockchaincom.py +21 -8
- ccxt/pro/blofin.py +9 -1
- ccxt/pro/bybit.py +632 -245
- ccxt/pro/cex.py +59 -24
- ccxt/pro/coinbase.py +102 -73
- ccxt/pro/coinbaseadvanced.py +2 -1
- ccxt/pro/coinbaseexchange.py +8 -8
- ccxt/pro/coinbaseinternational.py +181 -25
- ccxt/pro/coincatch.py +6 -7
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -665
- ccxt/pro/coinone.py +16 -9
- ccxt/pro/cryptocom.py +448 -45
- ccxt/pro/defx.py +831 -0
- ccxt/pro/deribit.py +150 -14
- ccxt/pro/derive.py +704 -0
- ccxt/pro/exmo.py +239 -6
- ccxt/pro/gate.py +623 -65
- ccxt/pro/gateio.py +2 -1
- ccxt/pro/gemini.py +27 -11
- ccxt/pro/hashkey.py +2 -2
- ccxt/pro/hitbtc.py +196 -91
- ccxt/pro/hollaex.py +23 -7
- ccxt/pro/htx.py +51 -14
- ccxt/pro/huobi.py +2 -1
- ccxt/pro/hyperliquid.py +591 -27
- ccxt/pro/independentreserve.py +9 -6
- ccxt/pro/kraken.py +640 -320
- ccxt/pro/krakenfutures.py +62 -35
- ccxt/pro/kucoin.py +267 -46
- ccxt/pro/kucoinfutures.py +165 -21
- ccxt/pro/lbank.py +102 -21
- ccxt/pro/luno.py +12 -8
- ccxt/pro/mexc.py +877 -111
- ccxt/pro/modetrade.py +1271 -0
- ccxt/pro/myokx.py +38 -0
- ccxt/pro/ndax.py +15 -2
- ccxt/pro/okcoin.py +23 -4
- ccxt/pro/okx.py +573 -98
- ccxt/pro/okxus.py +38 -0
- ccxt/pro/onetrading.py +30 -13
- ccxt/pro/oxfun.py +131 -27
- ccxt/pro/p2b.py +88 -22
- ccxt/pro/paradex.py +3 -3
- ccxt/pro/phemex.py +75 -21
- ccxt/pro/poloniex.py +124 -41
- ccxt/pro/probit.py +87 -80
- ccxt/pro/tradeogre.py +272 -0
- ccxt/pro/upbit.py +152 -12
- ccxt/pro/vertex.py +8 -3
- ccxt/pro/whitebit.py +58 -5
- ccxt/pro/woo.py +228 -37
- ccxt/pro/woofipro.py +106 -18
- ccxt/pro/xt.py +111 -5
- ccxt/probit.py +224 -95
- ccxt/protobuf/__init__.py +0 -0
- ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
- ccxt/protobuf/mexc/__init__.py +0 -0
- ccxt/ramzinex.py +28 -25
- ccxt/sarmayex.py +7 -7
- ccxt/sarrafex.py +10 -10
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/tabdeal.py +12 -11
- ccxt/test/tests_async.py +261 -57
- ccxt/test/tests_helpers.py +1 -3
- ccxt/test/tests_init.py +4 -3
- ccxt/test/tests_sync.py +261 -57
- ccxt/tetherland.py +7 -7
- ccxt/timex.py +210 -51
- ccxt/tokocrypto.py +167 -47
- ccxt/tradeogre.py +266 -31
- ccxt/twox.py +7 -7
- ccxt/ubitex.py +9 -9
- ccxt/upbit.py +568 -165
- ccxt/vertex.py +160 -32
- ccxt/wallex.py +9 -9
- ccxt/wavesexchange.py +165 -30
- ccxt/whitebit.py +975 -127
- ccxt/woo.py +1917 -1016
- ccxt/woofipro.py +432 -141
- ccxt/xt.py +649 -193
- ccxt/yobit.py +194 -70
- ccxt/zaif.py +91 -15
- ccxt/zonda.py +151 -36
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.0.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- ccxt/abstract/ace.py +0 -15
- ccxt/abstract/bitbay.py +0 -53
- ccxt/abstract/bitcoincom.py +0 -115
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/bitpanda.py +0 -35
- ccxt/abstract/bl3p.py +0 -19
- ccxt/abstract/coinlist.py +0 -54
- ccxt/abstract/currencycom.py +0 -68
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/abstract/idex.py +0 -26
- ccxt/abstract/kuna.py +0 -182
- ccxt/abstract/lykke.py +0 -29
- ccxt/abstract/poloniexfutures.py +0 -48
- ccxt/abstract/wazirx.py +0 -30
- ccxt/ace.py +0 -1012
- ccxt/async_support/ace.py +0 -1012
- ccxt/async_support/base/ws/aiohttp_client.py +0 -125
- ccxt/async_support/base/ws/fast_client.py +0 -96
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitcoincom.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3552
- ccxt/async_support/bitpanda.py +0 -16
- ccxt/async_support/bl3p.py +0 -485
- ccxt/async_support/coinlist.py +0 -2243
- ccxt/async_support/currencycom.py +0 -1950
- ccxt/async_support/hitbtc3.py +0 -16
- ccxt/async_support/idex.py +0 -1766
- ccxt/async_support/kuna.py +0 -1841
- ccxt/async_support/lykke.py +0 -1270
- ccxt/async_support/poloniexfutures.py +0 -1717
- ccxt/async_support/wazirx.py +0 -1224
- ccxt/bitbay.py +0 -17
- ccxt/bitcoincom.py +0 -17
- ccxt/bitfinex2.py +0 -3552
- ccxt/bitpanda.py +0 -16
- ccxt/bl3p.py +0 -485
- ccxt/coinlist.py +0 -2243
- ccxt/currencycom.py +0 -1950
- ccxt/hitbtc3.py +0 -16
- ccxt/idex.py +0 -1766
- ccxt/kuna.py +0 -1841
- ccxt/lykke.py +0 -1270
- ccxt/poloniexfutures.py +0 -1717
- ccxt/pro/bitcoincom.py +0 -34
- ccxt/pro/bitfinex2.py +0 -1083
- ccxt/pro/bitpanda.py +0 -15
- ccxt/pro/currencycom.py +0 -536
- ccxt/pro/idex.py +0 -672
- ccxt/pro/poloniexfutures.py +0 -990
- ccxt/pro/wazirx.py +0 -749
- ccxt/test/base/__init__.py +0 -29
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -109
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -31
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_liquidation.py +0 -50
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -193
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -33
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -69
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -353
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -92
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt/test/test_async.py +0 -1649
- ccxt/test/test_sync.py +0 -1648
- ccxt/wazirx.py +0 -1224
- ccxt_ir-4.3.46.0.2.dist-info/RECORD +0 -772
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/poloniex.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
|
9
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
|
11
11
|
from typing import List
|
|
12
12
|
from ccxt.base.errors import ExchangeError
|
|
@@ -18,7 +18,7 @@ from ccxt.base.precise import Precise
|
|
|
18
18
|
|
|
19
19
|
class poloniex(ccxt.async_support.poloniex):
|
|
20
20
|
|
|
21
|
-
def describe(self):
|
|
21
|
+
def describe(self) -> Any:
|
|
22
22
|
return self.deep_extend(super(poloniex, self).describe(), {
|
|
23
23
|
'has': {
|
|
24
24
|
'ws': True,
|
|
@@ -27,6 +27,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
27
27
|
'watchTicker': True,
|
|
28
28
|
'watchTickers': True,
|
|
29
29
|
'watchTrades': True,
|
|
30
|
+
'watchTradesForSymbols': True,
|
|
30
31
|
'watchBalance': True,
|
|
31
32
|
'watchStatus': False,
|
|
32
33
|
'watchOrders': True,
|
|
@@ -84,9 +85,11 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
84
85
|
|
|
85
86
|
async def authenticate(self, params={}):
|
|
86
87
|
"""
|
|
87
|
-
|
|
88
|
+
@ignore
|
|
88
89
|
authenticates the user to access private web socket channels
|
|
89
|
-
|
|
90
|
+
|
|
91
|
+
https://api-docs.poloniex.com/spot/websocket/authentication
|
|
92
|
+
|
|
90
93
|
:returns dict: response from exchange
|
|
91
94
|
"""
|
|
92
95
|
self.check_required_credentials()
|
|
@@ -137,11 +140,12 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
137
140
|
|
|
138
141
|
async def subscribe(self, name: str, messageHash: str, isPrivate: bool, symbols: Strings = None, params={}):
|
|
139
142
|
"""
|
|
140
|
-
|
|
143
|
+
@ignore
|
|
141
144
|
Connects to a websocket channel
|
|
142
145
|
:param str name: name of the channel
|
|
146
|
+
:param str messageHash: unique identifier for the message
|
|
143
147
|
:param boolean isPrivate: True for the authenticated url, False for the public url
|
|
144
|
-
:param str[]
|
|
148
|
+
:param str[] [symbols]: CCXT market symbols
|
|
145
149
|
:param dict [params]: extra parameters specific to the poloniex api
|
|
146
150
|
:returns dict: data from the websocket stream
|
|
147
151
|
"""
|
|
@@ -166,10 +170,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
166
170
|
|
|
167
171
|
async def trade_request(self, name: str, params={}):
|
|
168
172
|
"""
|
|
169
|
-
|
|
173
|
+
@ignore
|
|
170
174
|
Connects to a websocket channel
|
|
171
175
|
:param str name: name of the channel
|
|
172
|
-
:param str[]|None symbols: CCXT market symbols
|
|
173
176
|
:param dict [params]: extra parameters specific to the poloniex api
|
|
174
177
|
:returns dict: data from the websocket stream
|
|
175
178
|
"""
|
|
@@ -184,19 +187,21 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
184
187
|
|
|
185
188
|
async def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
|
|
186
189
|
"""
|
|
187
|
-
|
|
190
|
+
|
|
191
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#create-order
|
|
192
|
+
|
|
188
193
|
create a trade order
|
|
189
194
|
:param str symbol: unified symbol of the market to create an order in
|
|
190
195
|
:param str type: 'market' or 'limit'
|
|
191
196
|
:param str side: 'buy' or 'sell'
|
|
192
197
|
:param float amount: how much of currency you want to trade in units of base currency
|
|
193
|
-
:param float [price]: the price at which the order is to be
|
|
198
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
194
199
|
:param dict [params]: extra parameters specific to the poloniex api endpoint
|
|
195
200
|
:param str [params.timeInForce]: GTC(default), IOC, FOK
|
|
196
201
|
:param str [params.clientOrderId]: Maximum 64-character length.*
|
|
197
202
|
:param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
|
|
198
|
-
|
|
199
|
-
|
|
203
|
+
|
|
204
|
+
EXCHANGE SPECIFIC PARAMETERS
|
|
200
205
|
:param str [params.amount]: quote units for the order
|
|
201
206
|
:param boolean [params.allowBorrow]: allow order to be placed by borrowing funds(Default: False)
|
|
202
207
|
:param str [params.stpMode]: self-trade prevention, defaults to expire_taker, none: enable self-trade; expire_taker: taker order will be canceled when self-trade happens
|
|
@@ -239,11 +244,15 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
239
244
|
request['quantity'] = self.amount_to_precision(market['symbol'], amount)
|
|
240
245
|
if price is not None:
|
|
241
246
|
request['price'] = self.price_to_precision(symbol, price)
|
|
242
|
-
|
|
247
|
+
orders = await self.trade_request('createOrder', self.extend(request, params))
|
|
248
|
+
order = self.safe_dict(orders, 0)
|
|
249
|
+
return order
|
|
243
250
|
|
|
244
251
|
async def cancel_order_ws(self, id: str, symbol: Str = None, params={}):
|
|
245
252
|
"""
|
|
246
|
-
|
|
253
|
+
|
|
254
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#cancel-multiple-orders
|
|
255
|
+
|
|
247
256
|
cancel multiple orders
|
|
248
257
|
:param str id: order id
|
|
249
258
|
:param str [symbol]: unified market symbol
|
|
@@ -255,11 +264,15 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
255
264
|
if clientOrderId is not None:
|
|
256
265
|
clientOrderIds = self.safe_value(params, 'clientOrderId', [])
|
|
257
266
|
params['clientOrderIds'] = self.array_concat(clientOrderIds, [clientOrderId])
|
|
258
|
-
|
|
267
|
+
orders = await self.cancel_orders_ws([id], symbol, params)
|
|
268
|
+
order = self.safe_dict(orders, 0)
|
|
269
|
+
return order
|
|
259
270
|
|
|
260
271
|
async def cancel_orders_ws(self, ids: List[str], symbol: Str = None, params={}):
|
|
261
272
|
"""
|
|
262
|
-
|
|
273
|
+
|
|
274
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#cancel-multiple-orders
|
|
275
|
+
|
|
263
276
|
cancel multiple orders
|
|
264
277
|
:param str[] ids: order ids
|
|
265
278
|
:param str symbol: unified market symbol, default is None
|
|
@@ -276,7 +289,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
276
289
|
|
|
277
290
|
async def cancel_all_orders_ws(self, symbol: Str = None, params={}):
|
|
278
291
|
"""
|
|
279
|
-
|
|
292
|
+
|
|
293
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#cancel-all-orders
|
|
294
|
+
|
|
280
295
|
cancel all open orders of a type. Only applicable to Option in Portfolio Margin mode, and MMP privilege is required.
|
|
281
296
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
|
282
297
|
:param dict [params]: extra parameters specific to the poloniex api endpoint
|
|
@@ -310,7 +325,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
310
325
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
311
326
|
"""
|
|
312
327
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
313
|
-
|
|
328
|
+
|
|
329
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#candlesticks
|
|
330
|
+
|
|
314
331
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
315
332
|
:param str timeframe: the length of time each candle represents
|
|
316
333
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -331,7 +348,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
331
348
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
332
349
|
"""
|
|
333
350
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
334
|
-
|
|
351
|
+
|
|
352
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#ticker
|
|
353
|
+
|
|
335
354
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
336
355
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
337
356
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -344,8 +363,10 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
344
363
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
345
364
|
"""
|
|
346
365
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
347
|
-
|
|
348
|
-
|
|
366
|
+
|
|
367
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#ticker
|
|
368
|
+
|
|
369
|
+
:param str[] symbols:
|
|
349
370
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
350
371
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
351
372
|
"""
|
|
@@ -360,25 +381,59 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
360
381
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
361
382
|
"""
|
|
362
383
|
get the list of most recent trades for a particular symbol
|
|
363
|
-
|
|
384
|
+
|
|
385
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#trades
|
|
386
|
+
|
|
364
387
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
365
388
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
366
389
|
:param int [limit]: the maximum amount of trades to fetch
|
|
367
390
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
368
391
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
|
369
392
|
"""
|
|
393
|
+
return await self.watch_trades_for_symbols([symbol], since, limit, params)
|
|
394
|
+
|
|
395
|
+
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
396
|
+
"""
|
|
397
|
+
get the list of most recent trades for a list of symbols
|
|
398
|
+
|
|
399
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#trades
|
|
400
|
+
|
|
401
|
+
:param str[] symbols: unified symbol of the market to fetch trades for
|
|
402
|
+
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
403
|
+
:param int [limit]: the maximum amount of trades to fetch
|
|
404
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
405
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
|
406
|
+
"""
|
|
370
407
|
await self.load_markets()
|
|
371
|
-
|
|
408
|
+
symbols = self.market_symbols(symbols, None, False, True, True)
|
|
372
409
|
name = 'trades'
|
|
373
|
-
|
|
410
|
+
url = self.urls['api']['ws']['public']
|
|
411
|
+
marketIds = self.market_ids(symbols)
|
|
412
|
+
subscribe: dict = {
|
|
413
|
+
'event': 'subscribe',
|
|
414
|
+
'channel': [
|
|
415
|
+
name,
|
|
416
|
+
],
|
|
417
|
+
'symbols': marketIds,
|
|
418
|
+
}
|
|
419
|
+
request = self.extend(subscribe, params)
|
|
420
|
+
messageHashes = []
|
|
421
|
+
if symbols is not None:
|
|
422
|
+
for i in range(0, len(symbols)):
|
|
423
|
+
messageHashes.append(name + '::' + symbols[i])
|
|
424
|
+
trades = await self.watch_multiple(url, messageHashes, request, messageHashes)
|
|
374
425
|
if self.newUpdates:
|
|
375
|
-
|
|
426
|
+
first = self.safe_value(trades, 0)
|
|
427
|
+
tradeSymbol = self.safe_string(first, 'symbol')
|
|
428
|
+
limit = trades.getLimit(tradeSymbol, limit)
|
|
376
429
|
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
377
430
|
|
|
378
431
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
379
432
|
"""
|
|
380
433
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
381
|
-
|
|
434
|
+
|
|
435
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#book-level-2
|
|
436
|
+
|
|
382
437
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
383
438
|
:param int [limit]: not used by poloniex watchOrderBook
|
|
384
439
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -394,7 +449,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
394
449
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
395
450
|
"""
|
|
396
451
|
watches information on multiple orders made by the user
|
|
397
|
-
|
|
452
|
+
|
|
453
|
+
https://api-docs.poloniex.com/spot/websocket/order
|
|
454
|
+
|
|
398
455
|
:param str symbol: unified market symbol of the market orders were made in
|
|
399
456
|
:param int [since]: not used by poloniex watchOrders
|
|
400
457
|
:param int [limit]: not used by poloniex watchOrders
|
|
@@ -415,7 +472,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
415
472
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
416
473
|
"""
|
|
417
474
|
watches information on multiple trades made by the user using orders stream
|
|
418
|
-
|
|
475
|
+
|
|
476
|
+
https://api-docs.poloniex.com/spot/websocket/order
|
|
477
|
+
|
|
419
478
|
:param str symbol: unified market symbol of the market orders were made in
|
|
420
479
|
:param int [since]: not used by poloniex watchMyTrades
|
|
421
480
|
:param int [limit]: not used by poloniex watchMyTrades
|
|
@@ -437,7 +496,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
437
496
|
async def watch_balance(self, params={}) -> Balances:
|
|
438
497
|
"""
|
|
439
498
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
440
|
-
|
|
499
|
+
|
|
500
|
+
https://api-docs.poloniex.com/spot/websocket/balance
|
|
501
|
+
|
|
441
502
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
442
503
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
443
504
|
"""
|
|
@@ -1100,20 +1161,14 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
1100
1161
|
if type == 'auth':
|
|
1101
1162
|
self.handle_authenticate(client, message)
|
|
1102
1163
|
elif type is None:
|
|
1103
|
-
|
|
1104
|
-
item = self.safe_value(data, 0)
|
|
1105
|
-
orderId = self.safe_string(item, 'orderId')
|
|
1106
|
-
if orderId == '0':
|
|
1107
|
-
self.handle_error_message(client, item)
|
|
1108
|
-
else:
|
|
1109
|
-
self.handle_order_request(client, message)
|
|
1164
|
+
self.handle_order_request(client, message)
|
|
1110
1165
|
else:
|
|
1111
1166
|
data = self.safe_value(message, 'data', [])
|
|
1112
1167
|
dataLength = len(data)
|
|
1113
1168
|
if dataLength > 0:
|
|
1114
1169
|
method(client, message)
|
|
1115
1170
|
|
|
1116
|
-
def handle_error_message(self, client: Client, message):
|
|
1171
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1117
1172
|
#
|
|
1118
1173
|
# {
|
|
1119
1174
|
# message: 'Invalid channel value ["ordersss"]',
|
|
@@ -1131,12 +1186,40 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
1131
1186
|
# "event": "error",
|
|
1132
1187
|
# "message": "Platform in maintenance mode"
|
|
1133
1188
|
# }
|
|
1189
|
+
# {
|
|
1190
|
+
# "id":"1722386782048",
|
|
1191
|
+
# "data":[
|
|
1192
|
+
# {
|
|
1193
|
+
# "orderId":0,
|
|
1194
|
+
# "clientOrderId":null,
|
|
1195
|
+
# "message":"available insufficient",
|
|
1196
|
+
# "code":21721
|
|
1197
|
+
# }
|
|
1198
|
+
# ]
|
|
1199
|
+
# }
|
|
1134
1200
|
#
|
|
1201
|
+
id = self.safe_string(message, 'id')
|
|
1135
1202
|
event = self.safe_string(message, 'event')
|
|
1136
|
-
|
|
1203
|
+
data = self.safe_list(message, 'data')
|
|
1204
|
+
first = self.safe_dict(data, 0)
|
|
1205
|
+
orderId = self.safe_string(first, 'orderId')
|
|
1137
1206
|
if (event == 'error') or (orderId == '0'):
|
|
1138
|
-
|
|
1139
|
-
|
|
1207
|
+
try:
|
|
1208
|
+
error = self.safe_string(first, 'message')
|
|
1209
|
+
code = self.safe_string(first, 'code')
|
|
1210
|
+
feedback = self.id + ' ' + self.json(message)
|
|
1211
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], code, feedback)
|
|
1212
|
+
self.throw_broadly_matched_exception(self.exceptions['broad'], error, feedback)
|
|
1213
|
+
raise ExchangeError(feedback)
|
|
1214
|
+
except Exception as e:
|
|
1215
|
+
if isinstance(e, AuthenticationError):
|
|
1216
|
+
messageHash = 'authenticated'
|
|
1217
|
+
client.reject(e, messageHash)
|
|
1218
|
+
if messageHash in client.subscriptions:
|
|
1219
|
+
del client.subscriptions[messageHash]
|
|
1220
|
+
else:
|
|
1221
|
+
client.reject(e, id)
|
|
1222
|
+
return True
|
|
1140
1223
|
return False
|
|
1141
1224
|
|
|
1142
1225
|
def handle_authenticate(self, client: Client, message):
|
|
@@ -1160,7 +1243,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
|
1160
1243
|
del client.subscriptions[messageHash]
|
|
1161
1244
|
return message
|
|
1162
1245
|
|
|
1163
|
-
def ping(self, client):
|
|
1246
|
+
def ping(self, client: Client):
|
|
1164
1247
|
return {
|
|
1165
1248
|
'event': 'ping',
|
|
1166
1249
|
}
|