ccxt 4.2.96__tar.gz → 4.2.98__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.
- {ccxt-4.2.96/ccxt.egg-info → ccxt-4.2.98}/PKG-INFO +4 -4
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/__init__.py +1 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/__init__.py +1 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/exchange.py +1 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/binance.py +9 -9
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinbase.py +10 -6
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/deribit.py +7 -3
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/okx.py +3 -2
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/poloniexfutures.py +4 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/base/exchange.py +16 -4
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/binance.py +9 -9
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinbase.py +10 -6
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/deribit.py +7 -3
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/okx.py +3 -2
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/poloniexfutures.py +4 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/__init__.py +1 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/binance.py +9 -5
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/poloniexfutures.py +5 -2
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_order_book.py +21 -15
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/test_async.py +32 -6
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/test_sync.py +32 -6
- {ccxt-4.2.96 → ccxt-4.2.98/ccxt.egg-info}/PKG-INFO +4 -4
- {ccxt-4.2.96 → ccxt-4.2.98}/package.json +1 -1
- {ccxt-4.2.96 → ccxt-4.2.98}/LICENSE.txt +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/MANIFEST.in +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/README.rst +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/ace.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/alpaca.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/ascendex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bequant.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bigone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/binance.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/binancecoinm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/binanceus.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/binanceusdm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bingx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bit2c.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitbay.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitbns.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitcoincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitfinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitfinex2.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitflyer.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitget.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bithumb.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitmart.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitmex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitopro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitpanda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitrue.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitso.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitstamp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitteam.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bitvavo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bl3p.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/blockchaincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/blofin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/btcalpha.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/btcbox.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/btcmarkets.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/btcturk.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/bybit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/cex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinbase.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinbaseinternational.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinbasepro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coincheck.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinlist.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinmate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinmetro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinsph.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/coinspot.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/cryptocom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/currencycom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/delta.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/deribit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/digifinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/exmo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/fmfwio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/gate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/gateio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/gemini.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/hitbtc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/hitbtc3.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/hollaex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/htx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/huobi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/huobijp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/hyperliquid.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/idex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/independentreserve.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/indodax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/kraken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/krakenfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/kucoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/kucoinfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/kuna.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/latoken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/lbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/luno.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/lykke.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/mercado.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/mexc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/ndax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/novadax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/oceanex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/okcoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/okx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/onetrading.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/p2b.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/paymium.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/phemex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/poloniex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/poloniexfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/probit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/timex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/tokocrypto.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/tradeogre.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/upbit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/wavesexchange.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/wazirx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/whitebit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/woo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/yobit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/zaif.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/abstract/zonda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/ace.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/alpaca.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/ascendex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/ace.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/alpaca.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/ascendex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/throttler.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/cache.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/client.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/fast_client.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/functions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/future.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/order_book.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/base/ws/order_book_side.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bequant.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bigone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/binancecoinm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/binanceus.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/binanceusdm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bingx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bit2c.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitbay.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitbns.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitcoincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitfinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitfinex2.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitflyer.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitget.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bithumb.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitmart.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitmex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitopro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitpanda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitrue.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitso.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitstamp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitteam.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bitvavo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bl3p.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/blockchaincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/blofin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/btcalpha.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/btcbox.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/btcmarkets.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/btcturk.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/bybit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/cex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinbaseinternational.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinbasepro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coincheck.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinlist.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinmate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinmetro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinsph.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/coinspot.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/cryptocom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/currencycom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/delta.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/digifinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/exmo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/flowbtc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/fmfwio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/gate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/gateio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/gemini.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/hitbtc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/hitbtc3.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/hollaex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/htx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/huobi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/huobijp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/hyperliquid.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/idex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/independentreserve.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/indodax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/kraken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/krakenfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/kucoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/kucoinfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/kuna.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/latoken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/lbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/luno.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/lykke.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/mercado.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/mexc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/ndax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/novadax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/oceanex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/okcoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/onetrading.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/p2b.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/paymium.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/phemex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/poloniex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/probit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/timex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/tokocrypto.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/tradeogre.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/upbit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/wavesexchange.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/wazirx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/whitebit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/woo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/yobit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/zaif.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/async_support/zonda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/base/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/base/decimal_to_precision.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/base/errors.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/base/precise.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/base/types.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bequant.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bigone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/binancecoinm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/binanceus.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/binanceusdm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bingx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bit2c.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitbay.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitbns.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitcoincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitfinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitfinex2.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitflyer.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitget.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bithumb.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitmart.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitmex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitopro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitpanda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitrue.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitso.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitstamp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitteam.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bitvavo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bl3p.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/blockchaincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/blofin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/btcalpha.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/btcbox.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/btcmarkets.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/btcturk.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/bybit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/cex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinbaseinternational.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinbasepro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coincheck.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinlist.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinmate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinmetro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinsph.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/coinspot.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/cryptocom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/currencycom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/delta.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/digifinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/exmo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/flowbtc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/fmfwio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/gate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/gateio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/gemini.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/hitbtc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/hitbtc3.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/hollaex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/htx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/huobi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/huobijp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/hyperliquid.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/idex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/independentreserve.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/indodax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/kraken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/krakenfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/kucoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/kucoinfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/kuna.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/latoken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/lbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/luno.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/lykke.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/mercado.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/mexc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/ndax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/novadax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/oceanex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/okcoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/onetrading.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/p2b.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/paymium.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/phemex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/poloniex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/alpaca.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/ascendex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bequant.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/binancecoinm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/binanceus.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/binanceusdm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bingx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitcoincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitfinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitfinex2.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitget.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bithumb.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitmart.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitmex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitopro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitpanda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitrue.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitstamp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bitvavo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/blockchaincom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/bybit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/cex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/coinbase.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/coinbaseinternational.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/coinbasepro.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/coincheck.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/coinex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/coinone.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/cryptocom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/currencycom.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/deribit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/exmo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/gate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/gateio.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/gemini.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/hitbtc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/hollaex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/htx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/huobi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/huobijp.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/hyperliquid.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/idex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/independentreserve.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/kraken.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/krakenfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/kucoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/kucoinfutures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/lbank.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/luno.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/mexc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/ndax.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/okcoin.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/okx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/onetrading.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/p2b.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/phemex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/poloniex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/probit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/upbit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/wazirx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/whitebit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/pro/woo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/probit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/der.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ecdsa/util.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/keccak/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/keccak/keccak.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/msgpack/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/msgpack/ext.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/msgpack/fallback.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/parsimonious/utils.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/_signatures.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/_version.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/compatibility.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/functoolz.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/recipes.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/static_dependencies/toolz/utils.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/__init__.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_account.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_balance.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_borrow_interest.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_borrow_rate.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_calculate_fee.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_crypto.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_currency.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_datetime.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_decimal_to_precision.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_deep_extend.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_funding_rate_history.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_last_price.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_ledger_entry.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_ledger_item.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_leverage_tier.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_margin_mode.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_margin_modification.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_market.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_number.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_ohlcv.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_open_interest.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_order.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_position.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_shared_methods.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_status.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_throttle.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_ticker.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_trade.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_trading_fee.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/test/base/test_transaction.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/timex.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/tokocrypto.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/tradeogre.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/upbit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/wavesexchange.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/wazirx.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/whitebit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/woo.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/yobit.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/zaif.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt/zonda.py +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt.egg-info/SOURCES.txt +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt.egg-info/dependency_links.txt +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt.egg-info/requires.txt +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/ccxt.egg-info/top_level.txt +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/setup.cfg +0 -0
- {ccxt-4.2.96 → ccxt-4.2.98}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.98
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -225,13 +225,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
|
|
225
225
|
|
226
226
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
227
227
|
|
228
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
229
|
-
* unpkg: https://unpkg.com/ccxt@4.2.
|
228
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.98/dist/ccxt.browser.js
|
229
|
+
* unpkg: https://unpkg.com/ccxt@4.2.98/dist/ccxt.browser.js
|
230
230
|
|
231
231
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
232
232
|
|
233
233
|
```HTML
|
234
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.
|
234
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.98/dist/ccxt.browser.js"></script>
|
235
235
|
```
|
236
236
|
|
237
237
|
Creates a global `ccxt` object:
|
@@ -5549,7 +5549,7 @@ class binance(Exchange, ImplicitAPI):
|
|
5549
5549
|
response = await self.papiPostCmOrder(request)
|
5550
5550
|
else:
|
5551
5551
|
response = await self.dapiPrivatePostOrder(request)
|
5552
|
-
elif marketType == 'margin' or marginMode is not None:
|
5552
|
+
elif marketType == 'margin' or marginMode is not None or isPortfolioMargin:
|
5553
5553
|
if isPortfolioMargin:
|
5554
5554
|
response = await self.papiPostMarginOrder(request)
|
5555
5555
|
else:
|
@@ -5631,12 +5631,6 @@ class binance(Exchange, ImplicitAPI):
|
|
5631
5631
|
uppercaseType = 'TAKE_PROFIT_MARKET' if market['contract'] else 'TAKE_PROFIT'
|
5632
5632
|
elif isLimitOrder:
|
5633
5633
|
uppercaseType = 'TAKE_PROFIT' if market['contract'] else 'TAKE_PROFIT_LIMIT'
|
5634
|
-
if (marketType == 'spot') or (marketType == 'margin'):
|
5635
|
-
request['newOrderRespType'] = self.safe_string(self.options['newOrderRespType'], type, 'RESULT') # 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
|
5636
|
-
else:
|
5637
|
-
# swap, futures and options
|
5638
|
-
if not isPortfolioMargin:
|
5639
|
-
request['newOrderRespType'] = 'RESULT' # "ACK", "RESULT", default "ACK"
|
5640
5634
|
if market['option']:
|
5641
5635
|
if type == 'market':
|
5642
5636
|
raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
|
@@ -5664,6 +5658,12 @@ class binance(Exchange, ImplicitAPI):
|
|
5664
5658
|
uppercaseType = 'LIMIT_MAKER'
|
5665
5659
|
if marginMode == 'isolated':
|
5666
5660
|
request['isIsolated'] = True
|
5661
|
+
# handle newOrderRespType response type
|
5662
|
+
if ((marketType == 'spot') or (marketType == 'margin')) and not isPortfolioMargin:
|
5663
|
+
request['newOrderRespType'] = self.safe_string(self.options['newOrderRespType'], type, 'FULL') # 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
|
5664
|
+
else:
|
5665
|
+
# swap, futures and options
|
5666
|
+
request['newOrderRespType'] = 'RESULT' # "ACK", "RESULT", default "ACK"
|
5667
5667
|
typeRequest = 'strategyType' if isPortfolioMarginConditional else 'type'
|
5668
5668
|
request[typeRequest] = uppercaseType
|
5669
5669
|
# additional required fields depending on the order type
|
@@ -6217,7 +6217,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6217
6217
|
response = await self.papiGetCmOpenOrders(self.extend(request, params))
|
6218
6218
|
else:
|
6219
6219
|
response = await self.dapiPrivateGetOpenOrders(self.extend(request, params))
|
6220
|
-
elif type == 'margin' or marginMode is not None:
|
6220
|
+
elif type == 'margin' or marginMode is not None or isPortfolioMargin:
|
6221
6221
|
if isPortfolioMargin:
|
6222
6222
|
response = await self.papiGetMarginOpenOrders(self.extend(request, params))
|
6223
6223
|
else:
|
@@ -6646,7 +6646,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6646
6646
|
response = await self.papiDeleteCmAllOpenOrders(self.extend(request, params))
|
6647
6647
|
else:
|
6648
6648
|
response = await self.dapiPrivateDeleteAllOpenOrders(self.extend(request, params))
|
6649
|
-
elif (type == 'margin') or (marginMode is not None):
|
6649
|
+
elif (type == 'margin') or (marginMode is not None) or isPortfolioMargin:
|
6650
6650
|
if isPortfolioMargin:
|
6651
6651
|
response = await self.papiDeleteMarginAllOpenOrders(self.extend(request, params))
|
6652
6652
|
else:
|
@@ -1145,12 +1145,16 @@ class coinbase(Exchange, ImplicitAPI):
|
|
1145
1145
|
self.v3PrivateGetBrokerageProducts(params),
|
1146
1146
|
self.v3PrivateGetBrokerageTransactionSummary(params),
|
1147
1147
|
]
|
1148
|
-
unresolvedContractPromises = [
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1148
|
+
unresolvedContractPromises = []
|
1149
|
+
try:
|
1150
|
+
unresolvedContractPromises = [
|
1151
|
+
self.v3PrivateGetBrokerageProducts(self.extend(params, {'product_type': 'FUTURE'})),
|
1152
|
+
self.v3PrivateGetBrokerageProducts(self.extend(params, {'product_type': 'FUTURE', 'contract_expiry_type': 'PERPETUAL'})),
|
1153
|
+
self.v3PrivateGetBrokerageTransactionSummary(self.extend(params, {'product_type': 'FUTURE'})),
|
1154
|
+
self.v3PrivateGetBrokerageTransactionSummary(self.extend(params, {'product_type': 'FUTURE', 'contract_expiry_type': 'PERPETUAL'})),
|
1155
|
+
]
|
1156
|
+
except Exception as e:
|
1157
|
+
unresolvedContractPromises = [] # the sync version of ccxt won't have the promise.all line so the request is made here
|
1154
1158
|
promises = await asyncio.gather(*spotUnresolvedPromises)
|
1155
1159
|
contractPromises = None
|
1156
1160
|
try:
|
@@ -1184,13 +1184,17 @@ class deribit(Exchange, ImplicitAPI):
|
|
1184
1184
|
"""
|
1185
1185
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
1186
1186
|
:see: https://docs.deribit.com/#public-get_book_summary_by_currency
|
1187
|
-
:param str[]
|
1187
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
1188
1188
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1189
|
+
:param str [params.code]: *required* the currency code to fetch the tickers for, eg. 'BTC', 'ETH'
|
1189
1190
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
1190
1191
|
"""
|
1191
1192
|
await self.load_markets()
|
1192
1193
|
symbols = self.market_symbols(symbols)
|
1193
|
-
code = self.
|
1194
|
+
code = self.safe_string_2(params, 'code', 'currency')
|
1195
|
+
params = self.omit(params, ['code'])
|
1196
|
+
if code is None:
|
1197
|
+
raise ArgumentsRequired(self.id + ' fetchTickers requires a currency/code(eg: BTC/ETH/USDT) parameter to fetch tickers for')
|
1194
1198
|
currency = self.currency(code)
|
1195
1199
|
request = {
|
1196
1200
|
'currency': currency['id'],
|
@@ -1226,7 +1230,7 @@ class deribit(Exchange, ImplicitAPI):
|
|
1226
1230
|
# "testnet": False
|
1227
1231
|
# }
|
1228
1232
|
#
|
1229
|
-
result = self.
|
1233
|
+
result = self.safe_list(response, 'result', [])
|
1230
1234
|
tickers = {}
|
1231
1235
|
for i in range(0, len(result)):
|
1232
1236
|
ticker = self.parse_ticker(result[i])
|
@@ -9,6 +9,7 @@ import asyncio
|
|
9
9
|
import hashlib
|
10
10
|
from ccxt.base.types import Account, Balances, Conversion, Currencies, Currency, Greeks, Int, Leverage, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
|
11
11
|
from typing import List
|
12
|
+
from typing import Any
|
12
13
|
from ccxt.base.errors import ExchangeError
|
13
14
|
from ccxt.base.errors import AuthenticationError
|
14
15
|
from ccxt.base.errors import PermissionDenied
|
@@ -1130,13 +1131,13 @@ class okx(Exchange, ImplicitAPI):
|
|
1130
1131
|
},
|
1131
1132
|
})
|
1132
1133
|
|
1133
|
-
def handle_market_type_and_params(self, methodName, market=None, params={}):
|
1134
|
+
def handle_market_type_and_params(self, methodName: str, market: Market = None, params={}, defaultValue=None) -> Any:
|
1134
1135
|
instType = self.safe_string(params, 'instType')
|
1135
1136
|
params = self.omit(params, 'instType')
|
1136
1137
|
type = self.safe_string(params, 'type')
|
1137
1138
|
if (type is None) and (instType is not None):
|
1138
1139
|
params['type'] = instType
|
1139
|
-
return super(okx, self).handle_market_type_and_params(methodName, market, params)
|
1140
|
+
return super(okx, self).handle_market_type_and_params(methodName, market, params, defaultValue)
|
1140
1141
|
|
1141
1142
|
def convert_to_instrument_type(self, type):
|
1142
1143
|
exchangeTypes = self.safe_dict(self.options, 'exchangeType', {})
|
@@ -382,7 +382,10 @@ class poloniexfutures(Exchange, ImplicitAPI):
|
|
382
382
|
#
|
383
383
|
marketId = self.safe_string(ticker, 'symbol')
|
384
384
|
symbol = self.safe_symbol(marketId, market)
|
385
|
-
|
385
|
+
timestampString = self.safe_string(ticker, 'ts')
|
386
|
+
# check timestamp bcz bug: https://app.travis-ci.com/github/ccxt/ccxt/builds/269959181#L4011
|
387
|
+
multiplier = 0.00001 if (len(timestampString) == 18) else 0.000001
|
388
|
+
timestamp = self.safe_integer_product(ticker, 'ts', multiplier)
|
386
389
|
last = self.safe_string_2(ticker, 'price', 'lastPrice')
|
387
390
|
percentage = Precise.string_mul(self.safe_string(ticker, 'priceChgPct'), '100')
|
388
391
|
return self.safe_ticker({
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.2.
|
7
|
+
__version__ = '4.2.98'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -3971,11 +3971,23 @@ class Exchange(object):
|
|
3971
3971
|
result, empty = self.handle_option_and_params({}, methodName, optionName, defaultValue)
|
3972
3972
|
return result
|
3973
3973
|
|
3974
|
-
def handle_market_type_and_params(self, methodName: str, market: Market = None, params={}):
|
3974
|
+
def handle_market_type_and_params(self, methodName: str, market: Market = None, params={}, defaultValue=None):
|
3975
|
+
"""
|
3976
|
+
* @ignore
|
3977
|
+
* @param methodName the method calling handleMarketTypeAndParams
|
3978
|
+
:param Market market:
|
3979
|
+
:param dict params:
|
3980
|
+
:param str [params.type]: type assigned by user
|
3981
|
+
:param str [params.defaultType]: same.type
|
3982
|
+
:param str [defaultValue]: assigned programatically in the method calling handleMarketTypeAndParams
|
3983
|
+
:returns [str, dict]: the market type and params with type and defaultType omitted
|
3984
|
+
"""
|
3975
3985
|
defaultType = self.safe_string_2(self.options, 'defaultType', 'type', 'spot')
|
3986
|
+
if defaultValue is None: # defaultValue takes precendence over exchange wide defaultType
|
3987
|
+
defaultValue = defaultType
|
3976
3988
|
methodOptions = self.safe_dict(self.options, methodName)
|
3977
|
-
methodType =
|
3978
|
-
if methodOptions is not None:
|
3989
|
+
methodType = defaultValue
|
3990
|
+
if methodOptions is not None: # user defined methodType takes precedence over defaultValue
|
3979
3991
|
if isinstance(methodOptions, str):
|
3980
3992
|
methodType = methodOptions
|
3981
3993
|
else:
|
@@ -5548,7 +5548,7 @@ class binance(Exchange, ImplicitAPI):
|
|
5548
5548
|
response = self.papiPostCmOrder(request)
|
5549
5549
|
else:
|
5550
5550
|
response = self.dapiPrivatePostOrder(request)
|
5551
|
-
elif marketType == 'margin' or marginMode is not None:
|
5551
|
+
elif marketType == 'margin' or marginMode is not None or isPortfolioMargin:
|
5552
5552
|
if isPortfolioMargin:
|
5553
5553
|
response = self.papiPostMarginOrder(request)
|
5554
5554
|
else:
|
@@ -5630,12 +5630,6 @@ class binance(Exchange, ImplicitAPI):
|
|
5630
5630
|
uppercaseType = 'TAKE_PROFIT_MARKET' if market['contract'] else 'TAKE_PROFIT'
|
5631
5631
|
elif isLimitOrder:
|
5632
5632
|
uppercaseType = 'TAKE_PROFIT' if market['contract'] else 'TAKE_PROFIT_LIMIT'
|
5633
|
-
if (marketType == 'spot') or (marketType == 'margin'):
|
5634
|
-
request['newOrderRespType'] = self.safe_string(self.options['newOrderRespType'], type, 'RESULT') # 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
|
5635
|
-
else:
|
5636
|
-
# swap, futures and options
|
5637
|
-
if not isPortfolioMargin:
|
5638
|
-
request['newOrderRespType'] = 'RESULT' # "ACK", "RESULT", default "ACK"
|
5639
5633
|
if market['option']:
|
5640
5634
|
if type == 'market':
|
5641
5635
|
raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
|
@@ -5663,6 +5657,12 @@ class binance(Exchange, ImplicitAPI):
|
|
5663
5657
|
uppercaseType = 'LIMIT_MAKER'
|
5664
5658
|
if marginMode == 'isolated':
|
5665
5659
|
request['isIsolated'] = True
|
5660
|
+
# handle newOrderRespType response type
|
5661
|
+
if ((marketType == 'spot') or (marketType == 'margin')) and not isPortfolioMargin:
|
5662
|
+
request['newOrderRespType'] = self.safe_string(self.options['newOrderRespType'], type, 'FULL') # 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills
|
5663
|
+
else:
|
5664
|
+
# swap, futures and options
|
5665
|
+
request['newOrderRespType'] = 'RESULT' # "ACK", "RESULT", default "ACK"
|
5666
5666
|
typeRequest = 'strategyType' if isPortfolioMarginConditional else 'type'
|
5667
5667
|
request[typeRequest] = uppercaseType
|
5668
5668
|
# additional required fields depending on the order type
|
@@ -6216,7 +6216,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6216
6216
|
response = self.papiGetCmOpenOrders(self.extend(request, params))
|
6217
6217
|
else:
|
6218
6218
|
response = self.dapiPrivateGetOpenOrders(self.extend(request, params))
|
6219
|
-
elif type == 'margin' or marginMode is not None:
|
6219
|
+
elif type == 'margin' or marginMode is not None or isPortfolioMargin:
|
6220
6220
|
if isPortfolioMargin:
|
6221
6221
|
response = self.papiGetMarginOpenOrders(self.extend(request, params))
|
6222
6222
|
else:
|
@@ -6645,7 +6645,7 @@ class binance(Exchange, ImplicitAPI):
|
|
6645
6645
|
response = self.papiDeleteCmAllOpenOrders(self.extend(request, params))
|
6646
6646
|
else:
|
6647
6647
|
response = self.dapiPrivateDeleteAllOpenOrders(self.extend(request, params))
|
6648
|
-
elif (type == 'margin') or (marginMode is not None):
|
6648
|
+
elif (type == 'margin') or (marginMode is not None) or isPortfolioMargin:
|
6649
6649
|
if isPortfolioMargin:
|
6650
6650
|
response = self.papiDeleteMarginAllOpenOrders(self.extend(request, params))
|
6651
6651
|
else:
|
@@ -1144,12 +1144,16 @@ class coinbase(Exchange, ImplicitAPI):
|
|
1144
1144
|
self.v3PrivateGetBrokerageProducts(params),
|
1145
1145
|
self.v3PrivateGetBrokerageTransactionSummary(params),
|
1146
1146
|
]
|
1147
|
-
unresolvedContractPromises = [
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1147
|
+
unresolvedContractPromises = []
|
1148
|
+
try:
|
1149
|
+
unresolvedContractPromises = [
|
1150
|
+
self.v3PrivateGetBrokerageProducts(self.extend(params, {'product_type': 'FUTURE'})),
|
1151
|
+
self.v3PrivateGetBrokerageProducts(self.extend(params, {'product_type': 'FUTURE', 'contract_expiry_type': 'PERPETUAL'})),
|
1152
|
+
self.v3PrivateGetBrokerageTransactionSummary(self.extend(params, {'product_type': 'FUTURE'})),
|
1153
|
+
self.v3PrivateGetBrokerageTransactionSummary(self.extend(params, {'product_type': 'FUTURE', 'contract_expiry_type': 'PERPETUAL'})),
|
1154
|
+
]
|
1155
|
+
except Exception as e:
|
1156
|
+
unresolvedContractPromises = [] # the sync version of ccxt won't have the promise.all line so the request is made here
|
1153
1157
|
promises = spotUnresolvedPromises
|
1154
1158
|
contractPromises = None
|
1155
1159
|
try:
|
@@ -1184,13 +1184,17 @@ class deribit(Exchange, ImplicitAPI):
|
|
1184
1184
|
"""
|
1185
1185
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
1186
1186
|
:see: https://docs.deribit.com/#public-get_book_summary_by_currency
|
1187
|
-
:param str[]
|
1187
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
1188
1188
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1189
|
+
:param str [params.code]: *required* the currency code to fetch the tickers for, eg. 'BTC', 'ETH'
|
1189
1190
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
1190
1191
|
"""
|
1191
1192
|
self.load_markets()
|
1192
1193
|
symbols = self.market_symbols(symbols)
|
1193
|
-
code = self.
|
1194
|
+
code = self.safe_string_2(params, 'code', 'currency')
|
1195
|
+
params = self.omit(params, ['code'])
|
1196
|
+
if code is None:
|
1197
|
+
raise ArgumentsRequired(self.id + ' fetchTickers requires a currency/code(eg: BTC/ETH/USDT) parameter to fetch tickers for')
|
1194
1198
|
currency = self.currency(code)
|
1195
1199
|
request = {
|
1196
1200
|
'currency': currency['id'],
|
@@ -1226,7 +1230,7 @@ class deribit(Exchange, ImplicitAPI):
|
|
1226
1230
|
# "testnet": False
|
1227
1231
|
# }
|
1228
1232
|
#
|
1229
|
-
result = self.
|
1233
|
+
result = self.safe_list(response, 'result', [])
|
1230
1234
|
tickers = {}
|
1231
1235
|
for i in range(0, len(result)):
|
1232
1236
|
ticker = self.parse_ticker(result[i])
|
@@ -8,6 +8,7 @@ from ccxt.abstract.okx import ImplicitAPI
|
|
8
8
|
import hashlib
|
9
9
|
from ccxt.base.types import Account, Balances, Conversion, Currencies, Currency, Greeks, Int, Leverage, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
|
+
from typing import Any
|
11
12
|
from ccxt.base.errors import ExchangeError
|
12
13
|
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import PermissionDenied
|
@@ -1129,13 +1130,13 @@ class okx(Exchange, ImplicitAPI):
|
|
1129
1130
|
},
|
1130
1131
|
})
|
1131
1132
|
|
1132
|
-
def handle_market_type_and_params(self, methodName, market=None, params={}):
|
1133
|
+
def handle_market_type_and_params(self, methodName: str, market: Market = None, params={}, defaultValue=None) -> Any:
|
1133
1134
|
instType = self.safe_string(params, 'instType')
|
1134
1135
|
params = self.omit(params, 'instType')
|
1135
1136
|
type = self.safe_string(params, 'type')
|
1136
1137
|
if (type is None) and (instType is not None):
|
1137
1138
|
params['type'] = instType
|
1138
|
-
return super(okx, self).handle_market_type_and_params(methodName, market, params)
|
1139
|
+
return super(okx, self).handle_market_type_and_params(methodName, market, params, defaultValue)
|
1139
1140
|
|
1140
1141
|
def convert_to_instrument_type(self, type):
|
1141
1142
|
exchangeTypes = self.safe_dict(self.options, 'exchangeType', {})
|
@@ -382,7 +382,10 @@ class poloniexfutures(Exchange, ImplicitAPI):
|
|
382
382
|
#
|
383
383
|
marketId = self.safe_string(ticker, 'symbol')
|
384
384
|
symbol = self.safe_symbol(marketId, market)
|
385
|
-
|
385
|
+
timestampString = self.safe_string(ticker, 'ts')
|
386
|
+
# check timestamp bcz bug: https://app.travis-ci.com/github/ccxt/ccxt/builds/269959181#L4011
|
387
|
+
multiplier = 0.00001 if (len(timestampString) == 18) else 0.000001
|
388
|
+
timestamp = self.safe_integer_product(ticker, 'ts', multiplier)
|
386
389
|
last = self.safe_string_2(ticker, 'price', 'lastPrice')
|
387
390
|
percentage = Precise.string_mul(self.safe_string(ticker, 'priceChgPct'), '100')
|
388
391
|
return self.safe_ticker({
|
@@ -9,10 +9,10 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
11
11
|
from typing import List
|
12
|
-
from ccxt.base.errors import ExchangeError
|
13
12
|
from ccxt.base.errors import ArgumentsRequired
|
14
13
|
from ccxt.base.errors import BadRequest
|
15
14
|
from ccxt.base.errors import NotSupported
|
15
|
+
from ccxt.base.errors import InvalidNonce
|
16
16
|
from ccxt.base.precise import Precise
|
17
17
|
|
18
18
|
|
@@ -400,8 +400,10 @@ class binance(ccxt.async_support.binance):
|
|
400
400
|
if nonce < orderbook['nonce']:
|
401
401
|
client.resolve(orderbook, messageHash)
|
402
402
|
else:
|
403
|
-
|
404
|
-
|
403
|
+
checksum = self.safe_bool(self.options, 'checksum', True)
|
404
|
+
if checksum:
|
405
|
+
# todo: client.reject from handleOrderBookMessage properly
|
406
|
+
raise InvalidNonce(self.id + ' handleOrderBook received an out-of-order nonce')
|
405
407
|
else:
|
406
408
|
# future
|
407
409
|
# 4. Drop any event where u is < lastUpdateId in the snapshot
|
@@ -413,8 +415,10 @@ class binance(ccxt.async_support.binance):
|
|
413
415
|
if nonce <= orderbook['nonce']:
|
414
416
|
client.resolve(orderbook, messageHash)
|
415
417
|
else:
|
416
|
-
|
417
|
-
|
418
|
+
checksum = self.safe_bool(self.options, 'checksum', True)
|
419
|
+
if checksum:
|
420
|
+
# todo: client.reject from handleOrderBookMessage properly
|
421
|
+
raise InvalidNonce(self.id + ' handleOrderBook received an out-of-order nonce')
|
418
422
|
except Exception as e:
|
419
423
|
del self.orderbooks[symbol]
|
420
424
|
del client.subscriptions[messageHash]
|
@@ -8,9 +8,9 @@ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
|
|
8
8
|
from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Ticker, Trade
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
10
10
|
from typing import List
|
11
|
-
from ccxt.base.errors import ExchangeError
|
12
11
|
from ccxt.base.errors import AuthenticationError
|
13
12
|
from ccxt.base.errors import BadRequest
|
13
|
+
from ccxt.base.errors import InvalidNonce
|
14
14
|
|
15
15
|
|
16
16
|
class poloniexfutures(ccxt.async_support.poloniexfutures):
|
@@ -817,7 +817,10 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
817
817
|
sequence = self.safe_integer(delta, 'sequence')
|
818
818
|
nonce = self.safe_integer(orderbook, 'nonce')
|
819
819
|
if nonce != sequence - 1:
|
820
|
-
|
820
|
+
checksum = self.safe_bool(self.options, 'checksum', True)
|
821
|
+
if checksum:
|
822
|
+
# todo: client.reject from handleOrderBookMessage properly
|
823
|
+
raise InvalidNonce(self.id + ' watchOrderBook received an out-of-order nonce')
|
821
824
|
change = self.safe_string(delta, 'change')
|
822
825
|
splitChange = change.split(',')
|
823
826
|
price = self.safe_number(splitChange, 0)
|
@@ -24,7 +24,9 @@ def test_order_book(exchange, skipped_properties, method, orderbook, symbol):
|
|
24
24
|
'datetime': '2017-09-01T00:00:00',
|
25
25
|
'nonce': 134234234,
|
26
26
|
}
|
27
|
-
empty_allowed_for = ['
|
27
|
+
empty_allowed_for = ['nonce']
|
28
|
+
# turn into copy: https://discord.com/channels/690203284119617602/921046068555313202/1220626834887282728
|
29
|
+
orderbook = exchange.deep_extend({}, orderbook)
|
28
30
|
test_shared_methods.assert_structure(exchange, skipped_properties, method, orderbook, format, empty_allowed_for)
|
29
31
|
test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, orderbook)
|
30
32
|
test_shared_methods.assert_symbol(exchange, skipped_properties, method, orderbook, 'symbol', symbol)
|
@@ -37,24 +39,28 @@ def test_order_book(exchange, skipped_properties, method, orderbook, symbol):
|
|
37
39
|
bids_length = len(bids)
|
38
40
|
for i in range(0, bids_length):
|
39
41
|
current_bid_string = exchange.safe_string(bids[i], 0)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
if not ('compareToNextItem' in skipped_properties):
|
43
|
+
next_i = i + 1
|
44
|
+
if bids_length > next_i:
|
45
|
+
next_bid_string = exchange.safe_string(bids[next_i], 0)
|
46
|
+
assert Precise.string_gt(current_bid_string, next_bid_string), 'current bid should be > than the next one: ' + current_bid_string + '>' + next_bid_string + log_text
|
47
|
+
if not ('compareToZero' in skipped_properties):
|
48
|
+
# compare price & volume to zero
|
49
|
+
test_shared_methods.assert_greater(exchange, skipped_properties, method, bids[i], 0, '0')
|
50
|
+
test_shared_methods.assert_greater(exchange, skipped_properties, method, bids[i], 1, '0')
|
47
51
|
asks = orderbook['asks']
|
48
52
|
asks_length = len(asks)
|
49
53
|
for i in range(0, asks_length):
|
50
54
|
current_ask_string = exchange.safe_string(asks[i], 0)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
if not ('compareToNextItem' in skipped_properties):
|
56
|
+
next_i = i + 1
|
57
|
+
if asks_length > next_i:
|
58
|
+
next_ask_string = exchange.safe_string(asks[next_i], 0)
|
59
|
+
assert Precise.string_lt(current_ask_string, next_ask_string), 'current ask should be < than the next one: ' + current_ask_string + '<' + next_ask_string + log_text
|
60
|
+
if not ('compareToZero' in skipped_properties):
|
61
|
+
# compare price & volume to zero
|
62
|
+
test_shared_methods.assert_greater(exchange, skipped_properties, method, asks[i], 0, '0')
|
63
|
+
test_shared_methods.assert_greater(exchange, skipped_properties, method, asks[i], 1, '0')
|
58
64
|
if not ('spread' in skipped_properties):
|
59
65
|
if bids_length and asks_length:
|
60
66
|
first_bid = exchange.safe_string(bids[0], 0)
|
@@ -422,9 +422,13 @@ class testMainClass(baseMainTestClass):
|
|
422
422
|
return result
|
423
423
|
|
424
424
|
async def test_method(self, method_name, exchange, args, is_public):
|
425
|
+
# todo: temporary skip for c#
|
426
|
+
if 'OrderBook' in method_name and self.ext == 'cs':
|
427
|
+
exchange.options['checksum'] = False
|
425
428
|
# todo: temporary skip for php
|
426
429
|
if 'OrderBook' in method_name and self.ext == 'php':
|
427
430
|
return
|
431
|
+
skipped_properties_for_method = self.get_skips(exchange, method_name)
|
428
432
|
is_load_markets = (method_name == 'loadMarkets')
|
429
433
|
is_fetch_currencies = (method_name == 'fetchCurrencies')
|
430
434
|
is_proxy_test = (method_name == self.proxy_test_file_name)
|
@@ -437,7 +441,7 @@ class testMainClass(baseMainTestClass):
|
|
437
441
|
skip_message = '[INFO] IGNORED_TEST'
|
438
442
|
elif not is_load_markets and not supported_by_exchange and not is_proxy_test:
|
439
443
|
skip_message = '[INFO] UNSUPPORTED_TEST' # keep it aligned with the longest message
|
440
|
-
elif
|
444
|
+
elif isinstance(skipped_properties_for_method, str):
|
441
445
|
skip_message = '[INFO] SKIPPED_TEST'
|
442
446
|
elif not (method_name in self.test_files):
|
443
447
|
skip_message = '[INFO] UNIMPLEMENTED_TEST'
|
@@ -451,15 +455,24 @@ class testMainClass(baseMainTestClass):
|
|
451
455
|
if self.info:
|
452
456
|
args_stringified = '(' + ','.join(args) + ')'
|
453
457
|
dump(self.add_padding('[INFO] TESTING', 25), self.exchange_hint(exchange), method_name, args_stringified)
|
454
|
-
await call_method(self.test_files, method_name, exchange,
|
458
|
+
await call_method(self.test_files, method_name, exchange, skipped_properties_for_method, args)
|
455
459
|
# if it was passed successfully, add to the list of successfull tests
|
456
460
|
if is_public:
|
457
461
|
self.checked_public_tests[method_name] = True
|
458
462
|
return
|
459
463
|
|
460
464
|
def get_skips(self, exchange, method_name):
|
461
|
-
|
462
|
-
|
465
|
+
final_skips = {}
|
466
|
+
# check the exact method (i.e. `fetchTrades`) and language-specific (i.e. `fetchTrades.php`)
|
467
|
+
method_names = [method_name, method_name + '.' + self.ext]
|
468
|
+
for i in range(0, len(method_names)):
|
469
|
+
m_name = method_names[i]
|
470
|
+
if m_name in self.skipped_methods:
|
471
|
+
# if whole method is skipped, by assigning a string to it, i.e. "fetchOrders":"blabla"
|
472
|
+
if isinstance(self.skipped_methods[m_name], str):
|
473
|
+
return self.skipped_methods[m_name]
|
474
|
+
else:
|
475
|
+
final_skips = exchange.deep_extend(final_skips, self.skipped_methods[m_name])
|
463
476
|
# get "object-specific" skips
|
464
477
|
object_skips = {
|
465
478
|
'orderBook': ['fetchOrderBook', 'fetchOrderBooks', 'fetchL2OrderBook', 'watchOrderBook', 'watchOrderBookForSymbols'],
|
@@ -475,9 +488,19 @@ class testMainClass(baseMainTestClass):
|
|
475
488
|
object_name = object_names[i]
|
476
489
|
object_methods = object_skips[object_name]
|
477
490
|
if exchange.in_array(method_name, object_methods):
|
491
|
+
# if whole object is skipped, by assigning a string to it, i.e. "orderBook":"blabla"
|
492
|
+
if (object_name in self.skipped_methods) and (isinstance(self.skipped_methods[object_name], str)):
|
493
|
+
return self.skipped_methods[object_name]
|
478
494
|
extra_skips = exchange.safe_dict(self.skipped_methods, object_name, {})
|
479
|
-
|
480
|
-
|
495
|
+
final_skips = exchange.deep_extend(final_skips, extra_skips)
|
496
|
+
# extend related skips
|
497
|
+
# - if 'timestamp' is skipped, we should do so for 'datetime' too
|
498
|
+
# - if 'bid' is skipped, skip 'ask' too
|
499
|
+
if ('timestamp' in final_skips) and not ('datetime' in final_skips):
|
500
|
+
final_skips['datetime'] = final_skips['timestamp']
|
501
|
+
if ('bid' in final_skips) and not ('ask' in final_skips):
|
502
|
+
final_skips['ask'] = final_skips['bid']
|
503
|
+
return final_skips
|
481
504
|
|
482
505
|
async def test_safe(self, method_name, exchange, args=[], is_public=False):
|
483
506
|
# `testSafe` method does not throw an exception, instead mutes it. The reason we
|
@@ -569,11 +592,14 @@ class testMainClass(baseMainTestClass):
|
|
569
592
|
if self.ws_tests:
|
570
593
|
tests = {
|
571
594
|
'watchOHLCV': [symbol],
|
595
|
+
'watchOHLCVForSymbols': [symbol],
|
572
596
|
'watchTicker': [symbol],
|
573
597
|
'watchTickers': [symbol],
|
574
598
|
'watchBidsAsks': [symbol],
|
575
599
|
'watchOrderBook': [symbol],
|
600
|
+
'watchOrderBookForSymbols': [[symbol]],
|
576
601
|
'watchTrades': [symbol],
|
602
|
+
'watchTradesForSymbols': [[symbol]],
|
577
603
|
}
|
578
604
|
market = exchange.market(symbol)
|
579
605
|
is_spot = market['spot']
|