bitmex-api 0.0.67__tar.gz → 0.0.70__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/PKG-INFO +1 -1
  2. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/pyproject.toml +1 -1
  3. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/__init__.py +1 -1
  4. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/__init__.py +1 -1
  5. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/exchange.py +6 -3
  6. bitmex_api-0.0.70/src/bitmex/ccxt/async_support/base/ws/client.py +323 -0
  7. bitmex_api-0.0.70/src/bitmex/ccxt/async_support/base/ws/future.py +42 -0
  8. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/bitmex.py +2 -1
  9. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/base/exchange.py +20 -8
  10. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/bitmex.py +2 -1
  11. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/pro/__init__.py +1 -127
  12. bitmex_api-0.0.67/src/bitmex/ccxt/async_support/base/ws/aiohttp_client.py +0 -147
  13. bitmex_api-0.0.67/src/bitmex/ccxt/async_support/base/ws/client.py +0 -214
  14. bitmex_api-0.0.67/src/bitmex/ccxt/async_support/base/ws/future.py +0 -69
  15. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/.gitignore +0 -0
  16. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/README.md +0 -0
  17. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/__init__.py +0 -0
  18. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/abstract/bitmex.py +0 -0
  19. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/__init__.py +0 -0
  20. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/throttler.py +0 -0
  21. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/ws/__init__.py +0 -0
  22. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/ws/cache.py +0 -0
  23. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/ws/functions.py +0 -0
  24. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/ws/order_book.py +0 -0
  25. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/async_support/base/ws/order_book_side.py +0 -0
  26. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/base/__init__.py +0 -0
  27. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/base/decimal_to_precision.py +0 -0
  28. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/base/errors.py +0 -0
  29. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/base/precise.py +0 -0
  30. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/base/types.py +0 -0
  31. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/pro/bitmex.py +0 -0
  32. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/README.md +0 -0
  33. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/__init__.py +0 -0
  34. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  35. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  36. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  37. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/der.py +0 -0
  38. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  39. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  40. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  41. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  42. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  43. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ecdsa/util.py +0 -0
  44. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/__init__.py +0 -0
  45. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
  46. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
  47. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
  48. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
  49. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
  50. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
  51. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
  52. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
  53. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
  54. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
  55. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  56. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
  57. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
  58. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
  59. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  60. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
  61. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
  62. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
  63. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
  64. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
  65. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
  66. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
  67. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
  68. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  69. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
  70. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
  71. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
  72. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  73. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
  74. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
  75. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
  76. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
  77. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
  78. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
  79. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
  80. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
  81. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
  82. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  83. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
  84. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
  85. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
  86. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
  87. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
  88. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
  89. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
  90. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
  91. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
  92. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
  93. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
  94. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
  95. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
  96. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
  97. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
  98. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
  99. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
  100. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  101. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
  102. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
  103. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
  104. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
  105. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
  106. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/keccak/__init__.py +0 -0
  107. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/keccak/keccak.py +0 -0
  108. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/__init__.py +0 -0
  109. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +0 -0
  110. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +0 -0
  111. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/ast_utils.py +0 -0
  112. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/common.py +0 -0
  113. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/exceptions.py +0 -0
  114. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/grammar.py +0 -0
  115. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  116. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/grammars/common.lark +0 -0
  117. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/grammars/lark.lark +0 -0
  118. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/grammars/python.lark +0 -0
  119. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/grammars/unicode.lark +0 -0
  120. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/indenter.py +0 -0
  121. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/lark.py +0 -0
  122. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/lexer.py +0 -0
  123. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/load_grammar.py +0 -0
  124. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parse_tree_builder.py +0 -0
  125. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parser_frontends.py +0 -0
  126. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  127. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/cyk.py +0 -0
  128. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/earley.py +0 -0
  129. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/earley_common.py +0 -0
  130. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/earley_forest.py +0 -0
  131. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +0 -0
  132. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +0 -0
  133. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +0 -0
  134. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/lalr_parser.py +0 -0
  135. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +0 -0
  136. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/parsers/xearley.py +0 -0
  137. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/py.typed +0 -0
  138. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/reconstruct.py +0 -0
  139. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tools/__init__.py +0 -0
  140. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tools/nearley.py +0 -0
  141. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tools/serialize.py +0 -0
  142. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tools/standalone.py +0 -0
  143. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tree.py +0 -0
  144. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tree_matcher.py +0 -0
  145. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/tree_templates.py +0 -0
  146. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/utils.py +0 -0
  147. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/lark/visitors.py +0 -0
  148. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/__init__.py +0 -0
  149. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/base.py +0 -0
  150. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/class_registry.py +0 -0
  151. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/decorators.py +0 -0
  152. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/error_store.py +0 -0
  153. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/exceptions.py +0 -0
  154. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/fields.py +0 -0
  155. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/orderedset.py +0 -0
  156. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  157. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/schema.py +0 -0
  158. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/types.py +0 -0
  159. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/utils.py +0 -0
  160. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/validate.py +0 -0
  161. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow/warnings.py +0 -0
  162. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +0 -0
  163. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +0 -0
  164. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +0 -0
  165. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +0 -0
  166. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  167. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/typing.py +0 -0
  168. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +0 -0
  169. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +0 -0
  170. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +0 -0
  171. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  172. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/__init__.py +0 -0
  173. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +0 -0
  174. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/_packer.pyx +0 -0
  175. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/_unpacker.pyx +0 -0
  176. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/buff_converter.h +0 -0
  177. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
  178. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/ext.py +0 -0
  179. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/fallback.py +0 -0
  180. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/pack.h +0 -0
  181. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/pack_template.h +0 -0
  182. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/sysdep.h +0 -0
  183. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/unpack.h +0 -0
  184. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/unpack_define.h +0 -0
  185. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/msgpack/unpack_template.h +0 -0
  186. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
  187. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
  188. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
  189. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
  190. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
  191. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/parsimonious/utils.py +0 -0
  192. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/__init__.py +0 -0
  193. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v0/__init__.py +0 -0
  194. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v0/model.py +0 -0
  195. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v0/parser.py +0 -0
  196. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v0/schemas.py +0 -0
  197. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v0/shape.py +0 -0
  198. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/__init__.py +0 -0
  199. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +0 -0
  200. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/model.py +0 -0
  201. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/parser.py +0 -0
  202. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +0 -0
  203. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/schemas.py +0 -0
  204. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v1/shape.py +0 -0
  205. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v2/__init__.py +0 -0
  206. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v2/model.py +0 -0
  207. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v2/parser.py +0 -0
  208. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +0 -0
  209. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v2/schemas.py +0 -0
  210. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/abi/v2/shape.py +0 -0
  211. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  212. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/data_types.py +0 -0
  213. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  214. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +0 -0
  215. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +0 -0
  216. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +0 -0
  217. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/felt.py +0 -0
  218. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/type_parser.py +0 -0
  219. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  220. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +0 -0
  221. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  222. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +0 -0
  223. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/ccxt_utils.py +0 -0
  224. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/common.py +0 -0
  225. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/constants.py +0 -0
  226. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  227. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/hash/address.py +0 -0
  228. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +0 -0
  229. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/hash/selector.py +0 -0
  230. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/hash/storage.py +0 -0
  231. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/hash/utils.py +0 -0
  232. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  233. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/models/typed_data.py +0 -0
  234. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/__init__.py +0 -0
  235. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +0 -0
  236. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/_context.py +0 -0
  237. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +0 -0
  238. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +0 -0
  239. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +0 -0
  240. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +0 -0
  241. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +0 -0
  242. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +0 -0
  243. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +0 -0
  244. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +0 -0
  245. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +0 -0
  246. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +0 -0
  247. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +0 -0
  248. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +0 -0
  249. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +0 -0
  250. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +0 -0
  251. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +0 -0
  252. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +0 -0
  253. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +0 -0
  254. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/errors.py +0 -0
  255. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/factory.py +0 -0
  256. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +0 -0
  257. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +0 -0
  258. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  259. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +0 -0
  260. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/utils/iterable.py +0 -0
  261. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/utils/schema.py +0 -0
  262. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starknet/utils/typed_data.py +0 -0
  263. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starkware/__init__.py +0 -0
  264. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  265. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +0 -0
  266. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starkware/crypto/math_utils.py +0 -0
  267. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starkware/crypto/signature.py +0 -0
  268. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/starkware/crypto/utils.py +0 -0
  269. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/__init__.py +0 -0
  270. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  271. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/core/intfunc.py +0 -0
  272. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  273. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/external/gmpy.py +0 -0
  274. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/external/importtools.py +0 -0
  275. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/external/ntheory.py +0 -0
  276. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/sympy/external/pythonmpq.py +0 -0
  277. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/__init__.py +0 -0
  278. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/_signatures.py +0 -0
  279. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/_version.py +0 -0
  280. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/compatibility.py +0 -0
  281. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
  282. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
  283. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
  284. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
  285. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/functoolz.py +0 -0
  286. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
  287. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/recipes.py +0 -0
  288. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/toolz/utils.py +0 -0
  289. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  290. {bitmex_api-0.0.67 → bitmex_api-0.0.70}/src/bitmex/ccxt/static_dependencies/typing_inspect/typing_inspect.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bitmex-api
3
- Version: 0.0.67
3
+ Version: 0.0.70
4
4
  Summary: bitmex crypto exchange api client
5
5
  Project-URL: Homepage, https://github.com/ccxt/ccxt
6
6
  Project-URL: Issues, https://github.com/ccxt/ccxt
@@ -11,7 +11,7 @@ only-include = ["src/bitmex"]
11
11
 
12
12
  [project]
13
13
  name = "bitmex-api"
14
- version = "0.0.67"
14
+ version = "0.0.70"
15
15
  authors = [
16
16
  { name="CCXT", email="info@ccxt.trade" },
17
17
  ]
@@ -26,7 +26,7 @@ sys.modules['ccxt'] = ccxt_module
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
29
- __version__ = '4.4.88'
29
+ __version__ = '4.4.91'
30
30
 
31
31
  # ----------------------------------------------------------------------------
32
32
 
@@ -8,7 +8,7 @@ sys.modules['ccxt'] = ccxt_module
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
11
- __version__ = '4.4.88'
11
+ __version__ = '4.4.91'
12
12
 
13
13
  # -----------------------------------------------------------------------------
14
14
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.88'
5
+ __version__ = '4.4.91'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -34,7 +34,7 @@ from ccxt.base.exchange import Exchange as BaseExchange, ArgumentsRequired
34
34
  # -----------------------------------------------------------------------------
35
35
 
36
36
  from ccxt.async_support.base.ws.functions import inflate, inflate64, gunzip
37
- from ccxt.async_support.base.ws.aiohttp_client import AiohttpClient
37
+ from ccxt.async_support.base.ws.client import Client
38
38
  from ccxt.async_support.base.ws.future import Future
39
39
  from ccxt.async_support.base.ws.order_book import OrderBook, IndexedOrderBook, CountedOrderBook
40
40
 
@@ -419,7 +419,7 @@ class Exchange(BaseExchange):
419
419
  }, ws_options)
420
420
  # we use aiohttp instead of fastClient now because of this
421
421
  # https://github.com/ccxt/ccxt/pull/25995
422
- self.clients[url] = AiohttpClient(url, on_message, on_error, on_close, on_connected, options)
422
+ self.clients[url] = Client(url, on_message, on_error, on_close, on_connected, options)
423
423
  # set http/s proxy (socks proxy should be set in other place)
424
424
  httpProxy, httpsProxy, socksProxy = self.check_ws_proxy_settings()
425
425
  if (httpProxy or httpsProxy):
@@ -638,6 +638,9 @@ class Exchange(BaseExchange):
638
638
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}):
639
639
  raise NotSupported(self.id + ' watchTrades() is not supported yet')
640
640
 
641
+ async def un_watch_orders(self, symbol: Str = None, params={}):
642
+ raise NotSupported(self.id + ' unWatchOrders() is not supported yet')
643
+
641
644
  async def un_watch_trades(self, symbol: str, params={}):
642
645
  raise NotSupported(self.id + ' unWatchTrades() is not supported yet')
643
646
 
@@ -0,0 +1,323 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ orjson = None
4
+ try:
5
+ import orjson as orjson
6
+ except ImportError:
7
+ pass
8
+
9
+ import json
10
+
11
+ from asyncio import sleep, ensure_future, wait_for, TimeoutError, BaseEventLoop, Future as asyncioFuture
12
+ from .functions import milliseconds, iso8601, deep_extend, is_json_encoded_object
13
+ from ccxt import NetworkError, RequestTimeout
14
+ from ccxt.async_support.base.ws.future import Future
15
+ from ccxt.async_support.base.ws.functions import gunzip, inflate
16
+ from typing import Dict
17
+
18
+ from aiohttp import WSMsgType
19
+
20
+
21
+ class Client(object):
22
+
23
+ url = None
24
+ ws = None
25
+ futures: Dict[str, Future] = {}
26
+ options = {} # ws-specific options
27
+ subscriptions = {}
28
+ rejections = {}
29
+ on_message_callback = None
30
+ on_error_callback = None
31
+ on_close_callback = None
32
+ on_connected_callback = None
33
+ connectionStarted = None
34
+ connectionEstablished = None
35
+ isConnected = False
36
+ connectionTimeout = 10000 # ms, false to disable
37
+ connection = None
38
+ error = None # low-level networking exception, if any
39
+ connected = None # connection-related Future
40
+ keepAlive = 5000
41
+ heartbeat = True
42
+ maxPingPongMisses = 2.0 # how many missed pongs to raise a timeout
43
+ lastPong = None
44
+ ping = None # ping-function if defined
45
+ proxy = None
46
+ verbose = False # verbose output
47
+ gunzip = False
48
+ inflate = False
49
+ throttle = None
50
+ connecting = False
51
+ asyncio_loop: BaseEventLoop = None
52
+ ping_looper = None
53
+
54
+ def __init__(self, url, on_message_callback, on_error_callback, on_close_callback, on_connected_callback, config={}):
55
+ defaults = {
56
+ 'url': url,
57
+ 'futures': {},
58
+ 'subscriptions': {},
59
+ 'rejections': {},
60
+ 'on_message_callback': on_message_callback,
61
+ 'on_error_callback': on_error_callback,
62
+ 'on_close_callback': on_close_callback,
63
+ 'on_connected_callback': on_connected_callback,
64
+ }
65
+ settings = {}
66
+ settings.update(defaults)
67
+ settings.update(config)
68
+ for key in settings:
69
+ if hasattr(self, key) and isinstance(getattr(self, key), dict):
70
+ setattr(self, key, deep_extend(getattr(self, key), settings[key]))
71
+ else:
72
+ setattr(self, key, settings[key])
73
+ # connection-related Future
74
+ self.connected = Future()
75
+
76
+ def future(self, message_hash):
77
+ if message_hash not in self.futures or self.futures[message_hash].cancelled():
78
+ self.futures[message_hash] = Future()
79
+ future = self.futures[message_hash]
80
+ if message_hash in self.rejections:
81
+ future.reject(self.rejections[message_hash])
82
+ del self.rejections[message_hash]
83
+ return future
84
+
85
+ def resolve(self, result, message_hash):
86
+ if self.verbose and message_hash is None:
87
+ self.log(iso8601(milliseconds()), 'resolve received None messageHash')
88
+ if message_hash in self.futures:
89
+ future = self.futures[message_hash]
90
+ future.resolve(result)
91
+ del self.futures[message_hash]
92
+ return result
93
+
94
+ def reject(self, result, message_hash=None):
95
+ if message_hash is not None:
96
+ if message_hash in self.futures:
97
+ future = self.futures[message_hash]
98
+ future.reject(result)
99
+ del self.futures[message_hash]
100
+ else:
101
+ self.rejections[message_hash] = result
102
+ else:
103
+ message_hashes = list(self.futures.keys())
104
+ for message_hash in message_hashes:
105
+ self.reject(result, message_hash)
106
+ return result
107
+
108
+ def receive_loop(self):
109
+ if self.verbose:
110
+ self.log(iso8601(milliseconds()), 'receive loop')
111
+ if not self.closed():
112
+ # let's drain the aiohttp buffer to avoid latency
113
+ if len(self.buffer) > 1:
114
+ size_delta = 0
115
+ while len(self.buffer) > 1:
116
+ message, size = self.buffer.popleft()
117
+ size_delta += size
118
+ self.handle_message(message)
119
+ # we must update the size of the last message inside WebSocketDataQueue
120
+ # self.receive() calls WebSocketDataQueue.read() that calls WebSocketDataQueue._read_from_buffer()
121
+ # which updates the size of the buffer, the _size will overflow and pause the transport
122
+ # make sure to set the enviroment variable AIOHTTP_NO_EXTENSIONS=Y to check
123
+ # print(self.connection._conn.protocol._payload._size)
124
+ self.buffer[0] = (self.buffer[0][0], self.buffer[0][1] + size_delta)
125
+
126
+ task = self.asyncio_loop.create_task(self.receive())
127
+
128
+ def after_interrupt(resolved: asyncioFuture):
129
+ exception = resolved.exception()
130
+ if exception is None:
131
+ self.handle_message(resolved.result())
132
+ self.asyncio_loop.call_soon(self.receive_loop)
133
+ else:
134
+ error = NetworkError(str(exception))
135
+ if self.verbose:
136
+ self.log(iso8601(milliseconds()), 'receive_loop', 'Exception', error)
137
+ self.reset(error)
138
+
139
+ task.add_done_callback(after_interrupt)
140
+
141
+ async def open(self, session, backoff_delay=0):
142
+ # exponential backoff for consequent connections if necessary
143
+ if backoff_delay:
144
+ await sleep(backoff_delay)
145
+ if self.verbose:
146
+ self.log(iso8601(milliseconds()), 'connecting to', self.url, 'with timeout', self.connectionTimeout, 'ms')
147
+ self.connectionStarted = milliseconds()
148
+ try:
149
+ coroutine = self.create_connection(session)
150
+ self.connection = await wait_for(coroutine, timeout=int(self.connectionTimeout / 1000))
151
+ self.connecting = False
152
+ self.connectionEstablished = milliseconds()
153
+ self.isConnected = True
154
+ if self.verbose:
155
+ self.log(iso8601(milliseconds()), 'connected')
156
+ self.connected.resolve(self.url)
157
+ self.on_connected_callback(self)
158
+ # run both loops forever
159
+ self.ping_looper = ensure_future(self.ping_loop(), loop=self.asyncio_loop)
160
+ self.asyncio_loop.call_soon(self.receive_loop)
161
+ except TimeoutError:
162
+ # connection timeout
163
+ error = RequestTimeout('Connection timeout')
164
+ if self.verbose:
165
+ self.log(iso8601(milliseconds()), 'RequestTimeout', error)
166
+ self.on_error(error)
167
+ except Exception as e:
168
+ # connection failed or rejected (ConnectionRefusedError, ClientConnectorError)
169
+ error = NetworkError(e)
170
+ if self.verbose:
171
+ self.log(iso8601(milliseconds()), 'NetworkError', error)
172
+ self.on_error(error)
173
+
174
+ @property
175
+ def buffer(self):
176
+ # looks like they exposed it in C
177
+ # this means we can bypass it
178
+ # https://github.com/aio-libs/aiohttp/blob/master/aiohttp/_websocket/reader_c.pxd#L53C24-L53C31
179
+ return self.connection._conn.protocol._payload._buffer
180
+
181
+ def connect(self, session, backoff_delay=0):
182
+ if not self.connection and not self.connecting:
183
+ self.connecting = True
184
+ ensure_future(self.open(session, backoff_delay), loop=self.asyncio_loop)
185
+ return self.connected
186
+
187
+ def on_error(self, error):
188
+ if self.verbose:
189
+ self.log(iso8601(milliseconds()), 'on_error', error)
190
+ self.error = error
191
+ self.reject(error)
192
+ self.on_error_callback(self, error)
193
+ if not self.closed():
194
+ ensure_future(self.close(1006), loop=self.asyncio_loop)
195
+
196
+ def on_close(self, code):
197
+ if self.verbose:
198
+ self.log(iso8601(milliseconds()), 'on_close', code)
199
+ if not self.error:
200
+ self.reject(NetworkError('Connection closed by remote server, closing code ' + str(code)))
201
+ self.on_close_callback(self, code)
202
+ ensure_future(self.aiohttp_close(), loop=self.asyncio_loop)
203
+
204
+ def log(self, *args):
205
+ print(*args)
206
+
207
+ def closed(self):
208
+ return (self.connection is None) or self.connection.closed
209
+
210
+ def receive(self):
211
+ return self.connection.receive()
212
+
213
+ # helper method for binary and text messages
214
+ def handle_text_or_binary_message(self, data):
215
+ if self.verbose:
216
+ self.log(iso8601(milliseconds()), 'message', data)
217
+ if isinstance(data, bytes):
218
+ data = data.decode()
219
+ # decoded = json.loads(data) if is_json_encoded_object(data) else data
220
+ decode = None
221
+ if is_json_encoded_object(data):
222
+ if orjson is None:
223
+ decode = json.loads(data)
224
+ else:
225
+ decode = orjson.loads(data)
226
+ else:
227
+ decode = data
228
+ self.on_message_callback(self, decode)
229
+
230
+ def handle_message(self, message):
231
+ # self.log(iso8601(milliseconds()), message)
232
+ if message.type == WSMsgType.TEXT:
233
+ self.handle_text_or_binary_message(message.data)
234
+ elif message.type == WSMsgType.BINARY:
235
+ data = message.data
236
+ if self.gunzip:
237
+ data = gunzip(data)
238
+ elif self.inflate:
239
+ data = inflate(data)
240
+ self.handle_text_or_binary_message(data)
241
+ # autoping is responsible for automatically replying with pong
242
+ # to a ping incoming from a server, we have to disable autoping
243
+ # with aiohttp's websockets and respond with pong manually
244
+ # otherwise aiohttp's websockets client won't trigger WSMsgType.PONG
245
+ elif message.type == WSMsgType.PING:
246
+ if self.verbose:
247
+ self.log(iso8601(milliseconds()), 'ping', message)
248
+ ensure_future(self.connection.pong(message.data), loop=self.asyncio_loop)
249
+ elif message.type == WSMsgType.PONG:
250
+ self.lastPong = milliseconds()
251
+ if self.verbose:
252
+ self.log(iso8601(milliseconds()), 'pong', message)
253
+ pass
254
+ elif message.type == WSMsgType.CLOSE:
255
+ if self.verbose:
256
+ self.log(iso8601(milliseconds()), 'close', self.closed(), message)
257
+ self.on_close(message.data)
258
+ elif message.type == WSMsgType.ERROR:
259
+ if self.verbose:
260
+ self.log(iso8601(milliseconds()), 'error', message)
261
+ error = NetworkError(str(message))
262
+ self.on_error(error)
263
+
264
+ def create_connection(self, session):
265
+ # autoping is responsible for automatically replying with pong
266
+ # to a ping incoming from a server, we have to disable autoping
267
+ # with aiohttp's websockets and respond with pong manually
268
+ # otherwise aiohttp's websockets client won't trigger WSMsgType.PONG
269
+ # call aenter here to simulate async with otherwise we get the error "await not called with future"
270
+ # if connecting to a non-existent endpoint
271
+ if (self.proxy):
272
+ return session.ws_connect(self.url, autoping=False, autoclose=False, headers=self.options.get('headers'), proxy=self.proxy, max_msg_size=10485760).__aenter__()
273
+ return session.ws_connect(self.url, autoping=False, autoclose=False, headers=self.options.get('headers'), max_msg_size=10485760).__aenter__()
274
+
275
+ async def send(self, message):
276
+ if self.verbose:
277
+ self.log(iso8601(milliseconds()), 'sending', message)
278
+ send_msg = None
279
+ if isinstance(message, str):
280
+ send_msg = message
281
+ else:
282
+ if orjson is None:
283
+ send_msg = json.dumps(message, separators=(',', ':'))
284
+ else:
285
+ send_msg = orjson.dumps(message).decode('utf-8')
286
+ return await self.connection.send_str(send_msg)
287
+
288
+ async def close(self, code=1000):
289
+ if self.verbose:
290
+ self.log(iso8601(milliseconds()), 'closing', code)
291
+ for future in self.futures.values():
292
+ future.cancel()
293
+ await self.aiohttp_close()
294
+
295
+ async def aiohttp_close(self):
296
+ if not self.closed():
297
+ await self.connection.close()
298
+ # these will end automatically once self.closed() = True
299
+ # so we don't need to cancel them
300
+ if self.ping_looper:
301
+ self.ping_looper.cancel()
302
+
303
+ async def ping_loop(self):
304
+ if self.verbose:
305
+ self.log(iso8601(milliseconds()), 'ping loop')
306
+ while self.keepAlive and not self.closed():
307
+ now = milliseconds()
308
+ self.lastPong = now if self.lastPong is None else self.lastPong
309
+ if (self.lastPong + self.keepAlive * self.maxPingPongMisses) < now:
310
+ self.on_error(RequestTimeout('Connection to ' + self.url + ' timed out due to a ping-pong keepalive missing on time'))
311
+ # the following ping-clause is not necessary with aiohttp's built-in ws
312
+ # since it has a heartbeat option (see create_connection above)
313
+ # however some exchanges require a text-type ping message
314
+ # therefore we need this clause anyway
315
+ else:
316
+ if self.ping:
317
+ try:
318
+ await self.send(self.ping(self))
319
+ except Exception as e:
320
+ self.on_error(e)
321
+ else:
322
+ await self.connection.ping()
323
+ await sleep(self.keepAlive / 1000)
@@ -0,0 +1,42 @@
1
+ import asyncio
2
+
3
+
4
+ class Future(asyncio.Future):
5
+
6
+ def resolve(self, result=None):
7
+ if not self.done():
8
+ self.set_result(result)
9
+
10
+ def reject(self, error=None):
11
+ if not self.done():
12
+ self.set_exception(error)
13
+
14
+ @classmethod
15
+ def race(cls, futures):
16
+ future = Future()
17
+ coro = asyncio.wait(futures, return_when=asyncio.FIRST_COMPLETED)
18
+ task = asyncio.create_task(coro)
19
+
20
+ def callback(done):
21
+ complete, _ = done.result()
22
+ # check for exceptions
23
+ exceptions = []
24
+ cancelled = False
25
+ for f in complete:
26
+ if f.cancelled():
27
+ cancelled = True
28
+ else:
29
+ err = f.exception()
30
+ if err:
31
+ exceptions.append(err)
32
+ # if any exceptions return with first exception
33
+ if len(exceptions) > 0:
34
+ future.set_exception(exceptions[0])
35
+ # else return first result
36
+ elif cancelled:
37
+ future.cancel()
38
+ else:
39
+ first_result = list(complete)[0].result()
40
+ future.set_result(first_result)
41
+ task.add_done_callback(callback)
42
+ return future
@@ -101,6 +101,7 @@ class bitmex(Exchange, ImplicitAPI):
101
101
  'fetchTransactions': 'emulated',
102
102
  'fetchTransfer': False,
103
103
  'fetchTransfers': False,
104
+ 'index': True,
104
105
  'reduceMargin': None,
105
106
  'sandbox': True,
106
107
  'setLeverage': True,
@@ -427,8 +428,8 @@ class bitmex(Exchange, ImplicitAPI):
427
428
  # # "mediumPrecision": "8",
428
429
  # # "shorterPrecision": "4",
429
430
  # # "symbol": "₿",
430
- # # "weight": "1",
431
431
  # # "tickLog": "0",
432
+ # # "weight": "1",
432
433
  # "enabled": True,
433
434
  # "isMarginCurrency": True,
434
435
  # "minDepositAmount": "10000",
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.88'
7
+ __version__ = '4.4.91'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -906,6 +906,10 @@ class Exchange(object):
906
906
  def keysort(dictionary):
907
907
  return collections.OrderedDict(sorted(dictionary.items(), key=lambda t: t[0]))
908
908
 
909
+ @staticmethod
910
+ def sort(array):
911
+ return sorted(array)
912
+
909
913
  @staticmethod
910
914
  def extend(*args):
911
915
  if args is not None:
@@ -956,6 +960,11 @@ class Exchange(object):
956
960
  def groupBy(array, key):
957
961
  return Exchange.group_by(array, key)
958
962
 
963
+
964
+ @staticmethod
965
+ def index_by_safe(array, key):
966
+ return Exchange.index_by(array, key) # wrapper for go
967
+
959
968
  @staticmethod
960
969
  def index_by(array, key):
961
970
  result = {}
@@ -1037,7 +1046,7 @@ class Exchange(object):
1037
1046
  return _urlencode.urlencode(result, quote_via=_urlencode.quote)
1038
1047
 
1039
1048
  @staticmethod
1040
- def rawencode(params={}):
1049
+ def rawencode(params={}, sort=False):
1041
1050
  return _urlencode.unquote(Exchange.urlencode(params))
1042
1051
 
1043
1052
  @staticmethod
@@ -2571,6 +2580,9 @@ class Exchange(object):
2571
2580
  def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}):
2572
2581
  raise NotSupported(self.id + ' watchTrades() is not supported yet')
2573
2582
 
2583
+ def un_watch_orders(self, symbol: Str = None, params={}):
2584
+ raise NotSupported(self.id + ' unWatchOrders() is not supported yet')
2585
+
2574
2586
  def un_watch_trades(self, symbol: str, params={}):
2575
2587
  raise NotSupported(self.id + ' unWatchTrades() is not supported yet')
2576
2588
 
@@ -3187,7 +3199,7 @@ class Exchange(object):
3187
3199
 
3188
3200
  def set_markets(self, markets, currencies=None):
3189
3201
  values = []
3190
- self.markets_by_id = {}
3202
+ self.markets_by_id = self.create_safe_dictionary()
3191
3203
  # handle marketId conflicts
3192
3204
  # we insert spot markets first
3193
3205
  marketValues = self.sort_by(self.to_array(markets), 'spot', True, True)
@@ -3262,7 +3274,7 @@ class Exchange(object):
3262
3274
  resultingCurrencies.append(highestPrecisionCurrency)
3263
3275
  sortedCurrencies = self.sort_by(resultingCurrencies, 'code')
3264
3276
  self.currencies = self.deep_extend(self.currencies, self.index_by(sortedCurrencies, 'code'))
3265
- self.currencies_by_id = self.index_by(self.currencies, 'id')
3277
+ self.currencies_by_id = self.index_by_safe(self.currencies, 'id')
3266
3278
  currenciesSortedByCode = self.keysort(self.currencies)
3267
3279
  self.codes = list(currenciesSortedByCode.keys())
3268
3280
  return self.markets
@@ -6885,7 +6897,7 @@ class Exchange(object):
6885
6897
  symbolAndTimeFrame = symbolsAndTimeFrames[i]
6886
6898
  symbol = self.safe_string(symbolAndTimeFrame, 0)
6887
6899
  timeframe = self.safe_string(symbolAndTimeFrame, 1)
6888
- if symbol in self.ohlcvs:
6900
+ if (self.ohlcvs is not None) and (symbol in self.ohlcvs):
6889
6901
  if timeframe in self.ohlcvs[symbol]:
6890
6902
  del self.ohlcvs[symbol][timeframe]
6891
6903
  elif symbolsLength > 0:
@@ -6901,7 +6913,7 @@ class Exchange(object):
6901
6913
  if symbol in self.tickers:
6902
6914
  del self.tickers[symbol]
6903
6915
  else:
6904
- if topic == 'myTrades':
6916
+ if topic == 'myTrades' and (self.myTrades is not None):
6905
6917
  # don't reset self.myTrades directly here
6906
6918
  # because in c# we need to use a different object(thread-safe dict)
6907
6919
  keys = list(self.myTrades.keys())
@@ -6909,13 +6921,13 @@ class Exchange(object):
6909
6921
  key = keys[i]
6910
6922
  if key in self.myTrades:
6911
6923
  del self.myTrades[key]
6912
- elif topic == 'orders':
6924
+ elif topic == 'orders' and (self.orders is not None):
6913
6925
  orderSymbols = list(self.orders.keys())
6914
6926
  for i in range(0, len(orderSymbols)):
6915
6927
  orderSymbol = orderSymbols[i]
6916
6928
  if orderSymbol in self.orders:
6917
6929
  del self.orders[orderSymbol]
6918
- elif topic == 'ticker':
6930
+ elif topic == 'ticker' and (self.tickers is not None):
6919
6931
  tickerSymbols = list(self.tickers.keys())
6920
6932
  for i in range(0, len(tickerSymbols)):
6921
6933
  tickerSymbol = tickerSymbols[i]
@@ -101,6 +101,7 @@ class bitmex(Exchange, ImplicitAPI):
101
101
  'fetchTransactions': 'emulated',
102
102
  'fetchTransfer': False,
103
103
  'fetchTransfers': False,
104
+ 'index': True,
104
105
  'reduceMargin': None,
105
106
  'sandbox': True,
106
107
  'setLeverage': True,
@@ -427,8 +428,8 @@ class bitmex(Exchange, ImplicitAPI):
427
428
  # # "mediumPrecision": "8",
428
429
  # # "shorterPrecision": "4",
429
430
  # # "symbol": "₿",
430
- # # "weight": "1",
431
431
  # # "tickLog": "0",
432
+ # # "weight": "1",
432
433
  # "enabled": True,
433
434
  # "isMarginCurrency": True,
434
435
  # "minDepositAmount": "10000",