ccxt 4.3.54__py2.py3-none-any.whl → 4.3.55__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.
Files changed (254) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/kucoin.py +3 -0
  3. ccxt/abstract/kucoinfutures.py +3 -0
  4. ccxt/ace.py +1 -1
  5. ccxt/alpaca.py +1 -1
  6. ccxt/ascendex.py +6 -4
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/ace.py +1 -1
  9. ccxt/async_support/alpaca.py +1 -1
  10. ccxt/async_support/ascendex.py +6 -4
  11. ccxt/async_support/base/exchange.py +1 -1
  12. ccxt/async_support/bigone.py +1 -1
  13. ccxt/async_support/binance.py +6 -6
  14. ccxt/async_support/bingx.py +3 -3
  15. ccxt/async_support/bit2c.py +1 -1
  16. ccxt/async_support/bitbank.py +1 -1
  17. ccxt/async_support/bitbns.py +1 -1
  18. ccxt/async_support/bitfinex.py +1 -1
  19. ccxt/async_support/bitfinex2.py +1 -1
  20. ccxt/async_support/bitflyer.py +1 -1
  21. ccxt/async_support/bitget.py +2 -2
  22. ccxt/async_support/bithumb.py +1 -1
  23. ccxt/async_support/bitmart.py +3 -3
  24. ccxt/async_support/bitmex.py +1 -1
  25. ccxt/async_support/bitopro.py +1 -1
  26. ccxt/async_support/bitrue.py +1 -1
  27. ccxt/async_support/bitso.py +1 -1
  28. ccxt/async_support/bitstamp.py +1 -1
  29. ccxt/async_support/bitteam.py +1 -1
  30. ccxt/async_support/bitvavo.py +2 -2
  31. ccxt/async_support/bl3p.py +1 -1
  32. ccxt/async_support/blockchaincom.py +28 -28
  33. ccxt/async_support/blofin.py +1 -1
  34. ccxt/async_support/btcalpha.py +4 -11
  35. ccxt/async_support/btcbox.py +1 -1
  36. ccxt/async_support/btcmarkets.py +1 -1
  37. ccxt/async_support/btcturk.py +1 -1
  38. ccxt/async_support/bybit.py +2 -2
  39. ccxt/async_support/cex.py +2 -2
  40. ccxt/async_support/coinbase.py +33 -33
  41. ccxt/async_support/coinbaseexchange.py +1 -1
  42. ccxt/async_support/coinbaseinternational.py +1 -1
  43. ccxt/async_support/coincheck.py +1 -1
  44. ccxt/async_support/coinex.py +2 -2
  45. ccxt/async_support/coinlist.py +2 -2
  46. ccxt/async_support/coinmate.py +1 -1
  47. ccxt/async_support/coinmetro.py +1 -1
  48. ccxt/async_support/coinone.py +1 -1
  49. ccxt/async_support/coinsph.py +1 -1
  50. ccxt/async_support/coinspot.py +1 -1
  51. ccxt/async_support/cryptocom.py +1 -1
  52. ccxt/async_support/currencycom.py +1 -1
  53. ccxt/async_support/delta.py +2 -2
  54. ccxt/async_support/deribit.py +4 -4
  55. ccxt/async_support/digifinex.py +2 -2
  56. ccxt/async_support/exmo.py +2 -2
  57. ccxt/async_support/gate.py +2 -2
  58. ccxt/async_support/gemini.py +1 -1
  59. ccxt/async_support/hitbtc.py +1 -1
  60. ccxt/async_support/hollaex.py +1 -1
  61. ccxt/async_support/htx.py +3 -3
  62. ccxt/async_support/huobijp.py +1 -1
  63. ccxt/async_support/hyperliquid.py +2 -2
  64. ccxt/async_support/idex.py +1 -1
  65. ccxt/async_support/independentreserve.py +1 -1
  66. ccxt/async_support/indodax.py +1 -1
  67. ccxt/async_support/kraken.py +2 -2
  68. ccxt/async_support/kucoin.py +127 -46
  69. ccxt/async_support/kucoinfutures.py +1 -1
  70. ccxt/async_support/kuna.py +1 -1
  71. ccxt/async_support/latoken.py +1 -1
  72. ccxt/async_support/lbank.py +1 -1
  73. ccxt/async_support/luno.py +1 -1
  74. ccxt/async_support/lykke.py +1 -1
  75. ccxt/async_support/mercado.py +1 -1
  76. ccxt/async_support/mexc.py +1 -1
  77. ccxt/async_support/ndax.py +1 -1
  78. ccxt/async_support/novadax.py +1 -1
  79. ccxt/async_support/oceanex.py +1 -1
  80. ccxt/async_support/okcoin.py +1 -1
  81. ccxt/async_support/okx.py +3 -3
  82. ccxt/async_support/onetrading.py +1 -1
  83. ccxt/async_support/oxfun.py +2 -2
  84. ccxt/async_support/p2b.py +1 -1
  85. ccxt/async_support/paymium.py +1 -1
  86. ccxt/async_support/phemex.py +2 -2
  87. ccxt/async_support/poloniex.py +4 -3
  88. ccxt/async_support/poloniexfutures.py +1 -1
  89. ccxt/async_support/probit.py +1 -1
  90. ccxt/async_support/timex.py +1 -1
  91. ccxt/async_support/tokocrypto.py +1 -1
  92. ccxt/async_support/tradeogre.py +1 -1
  93. ccxt/async_support/upbit.py +1 -1
  94. ccxt/async_support/vertex.py +2 -2
  95. ccxt/async_support/wavesexchange.py +1 -1
  96. ccxt/async_support/wazirx.py +1 -1
  97. ccxt/async_support/whitebit.py +2 -2
  98. ccxt/async_support/woo.py +5 -5
  99. ccxt/async_support/woofipro.py +3 -3
  100. ccxt/async_support/yobit.py +1 -1
  101. ccxt/async_support/zaif.py +1 -1
  102. ccxt/async_support/zonda.py +1 -1
  103. ccxt/base/exchange.py +1 -1
  104. ccxt/base/types.py +4 -1
  105. ccxt/bigone.py +1 -1
  106. ccxt/binance.py +6 -6
  107. ccxt/bingx.py +3 -3
  108. ccxt/bit2c.py +1 -1
  109. ccxt/bitbank.py +1 -1
  110. ccxt/bitbns.py +1 -1
  111. ccxt/bitfinex.py +1 -1
  112. ccxt/bitfinex2.py +1 -1
  113. ccxt/bitflyer.py +1 -1
  114. ccxt/bitget.py +2 -2
  115. ccxt/bithumb.py +1 -1
  116. ccxt/bitmart.py +3 -3
  117. ccxt/bitmex.py +1 -1
  118. ccxt/bitopro.py +1 -1
  119. ccxt/bitrue.py +1 -1
  120. ccxt/bitso.py +1 -1
  121. ccxt/bitstamp.py +1 -1
  122. ccxt/bitteam.py +1 -1
  123. ccxt/bitvavo.py +2 -2
  124. ccxt/bl3p.py +1 -1
  125. ccxt/blockchaincom.py +28 -28
  126. ccxt/blofin.py +1 -1
  127. ccxt/btcalpha.py +4 -11
  128. ccxt/btcbox.py +1 -1
  129. ccxt/btcmarkets.py +1 -1
  130. ccxt/btcturk.py +1 -1
  131. ccxt/bybit.py +2 -2
  132. ccxt/cex.py +2 -2
  133. ccxt/coinbase.py +33 -33
  134. ccxt/coinbaseexchange.py +1 -1
  135. ccxt/coinbaseinternational.py +1 -1
  136. ccxt/coincheck.py +1 -1
  137. ccxt/coinex.py +2 -2
  138. ccxt/coinlist.py +2 -2
  139. ccxt/coinmate.py +1 -1
  140. ccxt/coinmetro.py +1 -1
  141. ccxt/coinone.py +1 -1
  142. ccxt/coinsph.py +1 -1
  143. ccxt/coinspot.py +1 -1
  144. ccxt/cryptocom.py +1 -1
  145. ccxt/currencycom.py +1 -1
  146. ccxt/delta.py +2 -2
  147. ccxt/deribit.py +4 -4
  148. ccxt/digifinex.py +2 -2
  149. ccxt/exmo.py +2 -2
  150. ccxt/gate.py +2 -2
  151. ccxt/gemini.py +1 -1
  152. ccxt/hitbtc.py +1 -1
  153. ccxt/hollaex.py +1 -1
  154. ccxt/htx.py +3 -3
  155. ccxt/huobijp.py +1 -1
  156. ccxt/hyperliquid.py +2 -2
  157. ccxt/idex.py +1 -1
  158. ccxt/independentreserve.py +1 -1
  159. ccxt/indodax.py +1 -1
  160. ccxt/kraken.py +2 -2
  161. ccxt/kucoin.py +127 -46
  162. ccxt/kucoinfutures.py +1 -1
  163. ccxt/kuna.py +1 -1
  164. ccxt/latoken.py +1 -1
  165. ccxt/lbank.py +1 -1
  166. ccxt/luno.py +1 -1
  167. ccxt/lykke.py +1 -1
  168. ccxt/mercado.py +1 -1
  169. ccxt/mexc.py +1 -1
  170. ccxt/ndax.py +1 -1
  171. ccxt/novadax.py +1 -1
  172. ccxt/oceanex.py +1 -1
  173. ccxt/okcoin.py +1 -1
  174. ccxt/okx.py +3 -3
  175. ccxt/onetrading.py +1 -1
  176. ccxt/oxfun.py +2 -2
  177. ccxt/p2b.py +1 -1
  178. ccxt/paymium.py +1 -1
  179. ccxt/phemex.py +2 -2
  180. ccxt/poloniex.py +4 -3
  181. ccxt/poloniexfutures.py +1 -1
  182. ccxt/pro/__init__.py +1 -1
  183. ccxt/pro/binance.py +2 -2
  184. ccxt/pro/bitvavo.py +2 -2
  185. ccxt/pro/bybit.py +2 -2
  186. ccxt/pro/cex.py +3 -3
  187. ccxt/pro/coinbase.py +22 -1
  188. ccxt/pro/cryptocom.py +1 -1
  189. ccxt/pro/gate.py +2 -2
  190. ccxt/pro/hitbtc.py +1 -1
  191. ccxt/pro/kraken.py +2 -2
  192. ccxt/pro/kucoin.py +2 -2
  193. ccxt/pro/okx.py +2 -2
  194. ccxt/pro/oxfun.py +2 -2
  195. ccxt/pro/poloniex.py +1 -1
  196. ccxt/pro/vertex.py +1 -1
  197. ccxt/probit.py +1 -1
  198. ccxt/test/{test_async.py → tests_async.py} +27 -280
  199. ccxt/test/tests_helpers.py +284 -0
  200. ccxt/test/tests_init.py +35 -0
  201. ccxt/test/{test_sync.py → tests_sync.py} +27 -282
  202. ccxt/timex.py +1 -1
  203. ccxt/tokocrypto.py +1 -1
  204. ccxt/tradeogre.py +1 -1
  205. ccxt/upbit.py +1 -1
  206. ccxt/vertex.py +2 -2
  207. ccxt/wavesexchange.py +1 -1
  208. ccxt/wazirx.py +1 -1
  209. ccxt/whitebit.py +2 -2
  210. ccxt/woo.py +5 -5
  211. ccxt/woofipro.py +3 -3
  212. ccxt/yobit.py +1 -1
  213. ccxt/zaif.py +1 -1
  214. ccxt/zonda.py +1 -1
  215. {ccxt-4.3.54.dist-info → ccxt-4.3.55.dist-info}/METADATA +5 -5
  216. {ccxt-4.3.54.dist-info → ccxt-4.3.55.dist-info}/RECORD +219 -252
  217. ccxt/test/base/__init__.py +0 -29
  218. ccxt/test/base/test_account.py +0 -26
  219. ccxt/test/base/test_balance.py +0 -56
  220. ccxt/test/base/test_borrow_interest.py +0 -35
  221. ccxt/test/base/test_borrow_rate.py +0 -32
  222. ccxt/test/base/test_calculate_fee.py +0 -51
  223. ccxt/test/base/test_crypto.py +0 -127
  224. ccxt/test/base/test_currency.py +0 -76
  225. ccxt/test/base/test_datetime.py +0 -109
  226. ccxt/test/base/test_decimal_to_precision.py +0 -392
  227. ccxt/test/base/test_deep_extend.py +0 -68
  228. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  229. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  230. ccxt/test/base/test_funding_rate_history.py +0 -29
  231. ccxt/test/base/test_last_price.py +0 -31
  232. ccxt/test/base/test_ledger_entry.py +0 -45
  233. ccxt/test/base/test_ledger_item.py +0 -48
  234. ccxt/test/base/test_leverage_tier.py +0 -33
  235. ccxt/test/base/test_liquidation.py +0 -50
  236. ccxt/test/base/test_margin_mode.py +0 -24
  237. ccxt/test/base/test_margin_modification.py +0 -35
  238. ccxt/test/base/test_market.py +0 -193
  239. ccxt/test/base/test_number.py +0 -411
  240. ccxt/test/base/test_ohlcv.py +0 -33
  241. ccxt/test/base/test_open_interest.py +0 -32
  242. ccxt/test/base/test_order.py +0 -64
  243. ccxt/test/base/test_order_book.py +0 -69
  244. ccxt/test/base/test_position.py +0 -60
  245. ccxt/test/base/test_shared_methods.py +0 -353
  246. ccxt/test/base/test_status.py +0 -24
  247. ccxt/test/base/test_throttle.py +0 -126
  248. ccxt/test/base/test_ticker.py +0 -92
  249. ccxt/test/base/test_trade.py +0 -47
  250. ccxt/test/base/test_trading_fee.py +0 -26
  251. ccxt/test/base/test_transaction.py +0 -39
  252. {ccxt-4.3.54.dist-info → ccxt-4.3.55.dist-info}/LICENSE.txt +0 -0
  253. {ccxt-4.3.54.dist-info → ccxt-4.3.55.dist-info}/WHEEL +0 -0
  254. {ccxt-4.3.54.dist-info → ccxt-4.3.55.dist-info}/top_level.txt +0 -0
@@ -1,45 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_ledger_entry(exchange, skipped_properties, method, entry, requested_code, now):
18
- format = {
19
- 'info': {},
20
- 'id': 'x1234',
21
- 'currency': 'BTC',
22
- 'account': 'spot',
23
- 'referenceId': 'foo',
24
- 'referenceAccount': 'bar',
25
- 'status': 'ok',
26
- 'amount': exchange.parse_number('22'),
27
- 'before': exchange.parse_number('111'),
28
- 'after': exchange.parse_number('133'),
29
- 'fee': {},
30
- 'direction': 'in',
31
- 'timestamp': 1638230400000,
32
- 'datetime': '2021-11-30T00:00:00.000Z',
33
- 'type': 'deposit',
34
- }
35
- empty_allowed_for = ['referenceId', 'referenceAccount', 'id']
36
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
37
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry, now)
38
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['currency'], requested_code)
39
- #
40
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'direction', ['in', 'out'])
41
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'type', ['trade', 'transaction', 'margin', 'cashback', 'referral', 'transfer', 'fee'])
42
- # testSharedMethods.assertInArray (exchange, skippedProperties, method, entry, 'account', ['spot', 'swap', .. ]); # todo
43
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', '0')
44
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'before', '0')
45
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'after', '0')
@@ -1,48 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
-
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
-
19
- def test_ledger_item(exchange, method, entry, requested_code, now):
20
- format = {
21
- 'info': {},
22
- 'id': 'x1234',
23
- 'currency': 'BTC',
24
- 'account': 'spot',
25
- 'referenceId': '',
26
- 'referenceAccount': '',
27
- 'status': 'ok',
28
- 'amount': exchange.parse_number('22'),
29
- 'before': exchange.parse_number('111'),
30
- 'after': exchange.parse_number('133'),
31
- 'fee': {},
32
- 'direction': 'in',
33
- 'timestamp': 1638230400000,
34
- 'datetime': '2021-11-30T00:00:00.000Z',
35
- 'type': 'deposit',
36
- }
37
- empty_not_allowed_for = ['id', 'currency', 'account', 'status', 'direction']
38
- test_shared_methods.assert_structure(exchange, method, entry, format, empty_not_allowed_for)
39
- test_shared_methods.assert_timestamp(exchange, method, entry, now)
40
- test_shared_methods.assert_currency_code(exchange, method, entry, entry['currency'], requested_code)
41
- #
42
- test_shared_methods.assert_in_array(exchange, method, entry, 'direction', ['in', 'out'])
43
- # testSharedMethods.assertInArray (exchange, method, entry, 'type', ['trade', 'transaction', 'margin', 'cashback', 'referral', 'transfer', 'fee', ]);
44
- # testSharedMethods.assertInArray (exchange, method, entry, 'account', ['spot', 'swap', .. ]);
45
- test_shared_methods.assert_greater_or_equal(exchange, method, entry, 'amount', '0')
46
- test_shared_methods.assert_greater_or_equal(exchange, method, entry, 'before', '0')
47
- test_shared_methods.assert_greater_or_equal(exchange, method, entry, 'after', '0')
48
- test_shared_methods.assert_fee(exchange, method, entry['fee'])
@@ -1,33 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_leverage_tier(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'tier': exchange.parse_number('1'),
20
- 'minNotional': exchange.parse_number('0'),
21
- 'maxNotional': exchange.parse_number('5000'),
22
- 'maintenanceMarginRate': exchange.parse_number('0.01'),
23
- 'maxLeverage': exchange.parse_number('25'),
24
- 'info': {},
25
- }
26
- empty_allowed_for = ['maintenanceMarginRate']
27
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
28
- #
29
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'tier', '0')
30
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'minNotional', '0')
31
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'maxNotional', '0')
32
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'maxLeverage', '1')
33
- test_shared_methods.assert_less_or_equal(exchange, skipped_properties, method, entry, 'maintenanceMarginRate', '1')
@@ -1,50 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.base.precise import Precise # noqa E402
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
- def test_liquidation(exchange, skipped_properties, method, entry, symbol):
19
- format = {
20
- 'info': {},
21
- 'symbol': 'ETH/BTC',
22
- 'contracts': exchange.parse_number('1.234'),
23
- 'contractSize': exchange.parse_number('1.234'),
24
- 'price': exchange.parse_number('1.234'),
25
- 'baseValue': exchange.parse_number('1.234'),
26
- 'quoteValue': exchange.parse_number('1.234'),
27
- 'timestamp': 1502962946216,
28
- 'datetime': '2017-09-01T00:00:00',
29
- }
30
- # todo: atm, many exchanges fail, so temporarily decrease stict mode
31
- empty_allowed_for = ['timestamp', 'datetime', 'quoteValue', 'baseValue', 'previousClose', 'price', 'contractSize', 'contracts']
32
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
33
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry)
34
- log_text = test_shared_methods.log_template(exchange, method, entry)
35
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'contracts', '0')
36
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'contractSize', '0')
37
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'price', '0')
38
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'baseValue', '0')
39
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'quoteValue', '0')
40
- contracts = exchange.safe_string(entry, 'contracts')
41
- contract_size = exchange.safe_string(entry, 'contractSize')
42
- price = exchange.safe_string(entry, 'price')
43
- base_value = exchange.safe_string(entry, 'baseValue')
44
- if contracts and contract_size:
45
- assert Precise.string_eq(base_value, Precise.string_mul(contracts, contract_size)), 'baseValue == contracts * contractSize' + log_text
46
- if price:
47
- assert Precise.string_eq(base_value, Precise.string_mul(Precise.string_mul(contracts, contract_size), price)), 'quoteValue == contracts * contractSize * price' + log_text
48
- # if singular was called, then symbol needs to be asserted
49
- if method == 'watchLiquidations' or method == 'fetchLiquidations':
50
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, 'symbol', symbol)
@@ -1,24 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_margin_mode(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'info': {},
20
- 'symbol': 'BTC/USDT:USDT',
21
- 'marginMode': 'cross',
22
- }
23
- empty_allowed_for = ['symbol']
24
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
@@ -1,35 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_margin_modification(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'info': {},
20
- 'type': 'add',
21
- 'amount': exchange.parse_number('0.1'),
22
- 'total': exchange.parse_number('0.29934828'),
23
- 'code': 'USDT',
24
- 'symbol': 'ADA/USDT:USDT',
25
- 'status': 'ok',
26
- }
27
- empty_allowed_for = ['status', 'symbol', 'code', 'total', 'amount']
28
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
29
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['code'])
30
- #
31
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', '0')
32
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'total', '0')
33
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'type', ['add', 'reduce', 'set'])
34
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'status', ['ok', 'pending', 'canceled', 'failed'])
35
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, 'symbol')
@@ -1,193 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.base.precise import Precise # noqa E402
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
- def test_market(exchange, skipped_properties, method, market):
19
- format = {
20
- 'id': 'btcusd',
21
- 'symbol': 'BTC/USD',
22
- 'base': 'BTC',
23
- 'quote': 'USD',
24
- 'taker': exchange.parse_number('0.0011'),
25
- 'maker': exchange.parse_number('0.0009'),
26
- 'baseId': 'btc',
27
- 'quoteId': 'usd',
28
- 'active': False,
29
- 'type': 'spot',
30
- 'linear': False,
31
- 'inverse': False,
32
- 'spot': False,
33
- 'swap': False,
34
- 'future': False,
35
- 'option': False,
36
- 'margin': False,
37
- 'contract': False,
38
- 'contractSize': exchange.parse_number('0.001'),
39
- 'expiry': 1656057600000,
40
- 'expiryDatetime': '2022-06-24T08:00:00.000Z',
41
- 'optionType': 'put',
42
- 'strike': exchange.parse_number('56000'),
43
- 'settle': 'XYZ',
44
- 'settleId': 'Xyz',
45
- 'precision': {
46
- 'price': exchange.parse_number('0.001'),
47
- 'amount': exchange.parse_number('0.001'),
48
- 'cost': exchange.parse_number('0.001'),
49
- },
50
- 'limits': {
51
- 'amount': {
52
- 'min': exchange.parse_number('0.01'),
53
- 'max': exchange.parse_number('1000'),
54
- },
55
- 'price': {
56
- 'min': exchange.parse_number('0.01'),
57
- 'max': exchange.parse_number('1000'),
58
- },
59
- 'cost': {
60
- 'min': exchange.parse_number('0.01'),
61
- 'max': exchange.parse_number('1000'),
62
- },
63
- },
64
- 'info': {},
65
- }
66
- empty_allowed_for = ['linear', 'inverse', 'settle', 'settleId', 'expiry', 'expiryDatetime', 'optionType', 'strike', 'margin', 'contractSize']
67
- test_shared_methods.assert_structure(exchange, skipped_properties, method, market, format, empty_allowed_for)
68
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, market, 'symbol')
69
- log_text = test_shared_methods.log_template(exchange, method, market)
70
- #
71
- valid_types = ['spot', 'margin', 'swap', 'future', 'option', 'index']
72
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'type', valid_types)
73
- has_index = ('index' in market) # todo: add in all
74
- # check if string is consistent with 'type'
75
- if market['spot']:
76
- assert market['type'] == 'spot', '\"type\" string should be \"spot\" when spot is true' + log_text
77
- elif market['swap']:
78
- assert market['type'] == 'swap', '\"type\" string should be \"swap\" when swap is true' + log_text
79
- elif market['future']:
80
- assert market['type'] == 'future', '\"type\" string should be \"future\" when future is true' + log_text
81
- elif market['option']:
82
- assert market['type'] == 'option', '\"type\" string should be \"option\" when option is true' + log_text
83
- elif has_index and market['index']:
84
- # todo: add index in all implementations
85
- assert market['type'] == 'index', '\"type\" string should be \"index\" when index is true' + log_text
86
- # margin check (todo: add margin as mandatory, instead of undefined)
87
- if market['spot']:
88
- # for spot market, 'margin' can be either true/false or undefined
89
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'margin', [True, False, None])
90
- else:
91
- # otherwise, it must be false or undefined
92
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'margin', [False, None])
93
- if not ('contractSize' in skipped_properties):
94
- if not market['spot']:
95
- # if not spot, then contractSize should be defined
96
- assert market['contractSize'] is not None, '\"contractSize\" must be defined when \"spot\" is false' + log_text
97
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'contractSize', '0')
98
- # typical values
99
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'expiry', '0')
100
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'strike', '0')
101
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'optionType', ['put', 'call'])
102
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'taker', '-100')
103
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'maker', '-100')
104
- # 'contract' boolean check
105
- if market['future'] or market['swap'] or market['option'] or (has_index and market['index']):
106
- # if it's some kind of contract market, then `conctract` should be true
107
- assert market['contract'], '\"contract\" must be true when \"future\", \"swap\", \"option\" or \"index\" is true' + log_text
108
- else:
109
- assert not market['contract'], '\"contract\" must be false when neither \"future\", \"swap\",\"option\" or \"index\" is true' + log_text
110
- is_swap_or_future = market['swap'] or market['future']
111
- contract_size = exchange.safe_string(market, 'contractSize')
112
- # contract fields
113
- if market['contract']:
114
- # linear & inverse should have different values (true/false)
115
- # todo: expand logic on other market types
116
- if is_swap_or_future:
117
- assert market['linear'] != market['inverse'], 'market linear and inverse must not be the same' + log_text
118
- if not ('contractSize' in skipped_properties):
119
- # contract size should be defined
120
- assert contract_size is not None, '\"contractSize\" must be defined when \"contract\" is true' + log_text
121
- # contract size should be above zero
122
- assert Precise.string_gt(contract_size, '0'), '\"contractSize\" must be > 0 when \"contract\" is true' + log_text
123
- if not ('settle' in skipped_properties):
124
- # settle should be defined
125
- assert (market['settle'] is not None) and (market['settleId'] is not None), '\"settle\" & \"settleId\" must be defined when \"contract\" is true' + log_text
126
- # spot should be false
127
- assert not market['spot'], '\"spot\" must be false when \"contract\" is true' + log_text
128
- else:
129
- # linear & inverse needs to be undefined
130
- assert (market['linear'] is None) and (market['inverse'] is None), 'market linear and inverse must be undefined when \"contract\" is false' + log_text
131
- # contract size should be undefined
132
- if not ('contractSize' in skipped_properties):
133
- assert contract_size is None, '\"contractSize\" must be undefined when \"contract\" is false' + log_text
134
- # settle should be undefined
135
- assert (market['settle'] is None) and (market['settleId'] is None), '\"settle\" must be undefined when \"contract\" is false' + log_text
136
- # spot should be true
137
- assert market['spot'], '\"spot\" must be true when \"contract\" is false' + log_text
138
- # option fields
139
- if market['option']:
140
- # if option, then strike and optionType should be defined
141
- assert market['strike'] is not None, '\"strike\" must be defined when \"option\" is true' + log_text
142
- assert market['optionType'] is not None, '\"optionType\" must be defined when \"option\" is true' + log_text
143
- else:
144
- # if not option, then strike and optionType should be undefined
145
- assert market['strike'] is None, '\"strike\" must be undefined when \"option\" is false' + log_text
146
- assert market['optionType'] is None, '\"optionType\" must be undefined when \"option\" is false' + log_text
147
- # future, swap and option should be mutually exclusive
148
- if market['future']:
149
- assert not market['swap'] and not market['option'], 'market swap and option must be false when \"future\" is true' + log_text
150
- elif market['swap']:
151
- assert not market['future'] and not market['option'], 'market future and option must be false when \"swap\" is true' + log_text
152
- elif market['option']:
153
- assert not market['future'] and not market['swap'], 'market future and swap must be false when \"option\" is true' + log_text
154
- # expiry field
155
- if market['future'] or market['option']:
156
- # future or option markets need 'expiry' and 'expiryDatetime'
157
- assert market['expiry'] is not None, '\"expiry\" must be defined when \"future\" is true' + log_text
158
- assert market['expiryDatetime'] is not None, '\"expiryDatetime\" must be defined when \"future\" is true' + log_text
159
- # expiry datetime should be correct
160
- iso_string = exchange.iso8601(market['expiry'])
161
- assert market['expiryDatetime'] == iso_string, 'expiryDatetime (\"' + market['expiryDatetime'] + '\") must be equal to expiry in iso8601 format \"' + iso_string + '\"' + log_text
162
- else:
163
- # otherwise, they need to be undefined
164
- assert (market['expiry'] is None) and (market['expiryDatetime'] is None), '\"expiry\" and \"expiryDatetime\" must be undefined when it is not future|option market' + log_text
165
- # check precisions
166
- if not ('precision' in skipped_properties):
167
- precision_keys = list(market['precision'].keys())
168
- keys_length = len(precision_keys)
169
- assert keys_length >= 2, 'precision should have \"amount\" and \"price\" keys at least' + log_text
170
- for i in range(0, len(precision_keys)):
171
- test_shared_methods.check_precision_accuracy(exchange, skipped_properties, method, market['precision'], precision_keys[i])
172
- # check limits
173
- if not ('limits' in skipped_properties):
174
- limits_keys = list(market['limits'].keys())
175
- keys_length = len(limits_keys)
176
- assert keys_length >= 3, 'limits should have \"amount\", \"price\" and \"cost\" keys at least' + log_text
177
- for i in range(0, len(limits_keys)):
178
- key = limits_keys[i]
179
- limit_entry = market['limits'][key]
180
- # min >= 0
181
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, limit_entry, 'min', '0')
182
- # max >= 0
183
- test_shared_methods.assert_greater(exchange, skipped_properties, method, limit_entry, 'max', '0')
184
- # max >= min
185
- min_string = exchange.safe_string(limit_entry, 'min')
186
- if min_string is not None:
187
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, limit_entry, 'max', min_string)
188
- # check whether valid currency ID and CODE is used
189
- if not ('currency' in skipped_properties) and not ('currencyIdAndCode' in skipped_properties):
190
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, market, market['baseId'], market['base'])
191
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, market, market['quoteId'], market['quote'])
192
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, market, market['settleId'], market['settle'])
193
- test_shared_methods.assert_timestamp(exchange, skipped_properties, method, market, None, 'created')