bitget 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. {bitget-0.0.67 → bitget-0.0.70}/PKG-INFO +61 -1
  2. {bitget-0.0.67 → bitget-0.0.70}/README.md +60 -0
  3. {bitget-0.0.67 → bitget-0.0.70}/pyproject.toml +1 -1
  4. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/__init__.py +1 -1
  5. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/abstract/bitget.py +58 -0
  6. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/__init__.py +1 -1
  7. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/exchange.py +6 -3
  8. bitget-0.0.70/src/bitget/ccxt/async_support/base/ws/client.py +323 -0
  9. bitget-0.0.70/src/bitget/ccxt/async_support/base/ws/future.py +42 -0
  10. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/bitget.py +469 -147
  11. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/base/exchange.py +20 -8
  12. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/bitget.py +469 -147
  13. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/pro/__init__.py +1 -127
  14. bitget-0.0.67/src/bitget/ccxt/async_support/base/ws/aiohttp_client.py +0 -147
  15. bitget-0.0.67/src/bitget/ccxt/async_support/base/ws/client.py +0 -214
  16. bitget-0.0.67/src/bitget/ccxt/async_support/base/ws/future.py +0 -69
  17. {bitget-0.0.67 → bitget-0.0.70}/.gitignore +0 -0
  18. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/__init__.py +0 -0
  19. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/__init__.py +0 -0
  20. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/throttler.py +0 -0
  21. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/ws/__init__.py +0 -0
  22. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/ws/cache.py +0 -0
  23. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/ws/functions.py +0 -0
  24. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/ws/order_book.py +0 -0
  25. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/async_support/base/ws/order_book_side.py +0 -0
  26. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/base/__init__.py +0 -0
  27. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/base/decimal_to_precision.py +0 -0
  28. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/base/errors.py +0 -0
  29. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/base/precise.py +0 -0
  30. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/base/types.py +0 -0
  31. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/pro/bitget.py +0 -0
  32. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/README.md +0 -0
  33. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/__init__.py +0 -0
  34. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  35. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  36. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  37. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/der.py +0 -0
  38. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  39. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  40. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  41. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  42. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  43. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ecdsa/util.py +0 -0
  44. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/__init__.py +0 -0
  45. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
  46. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
  47. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
  48. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
  49. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
  50. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
  51. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
  52. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
  53. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
  54. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
  55. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  56. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
  57. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
  58. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
  59. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  60. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
  61. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
  62. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
  63. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
  64. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
  65. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
  66. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
  67. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
  68. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  69. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
  70. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
  71. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
  72. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  73. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
  74. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
  75. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
  76. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
  77. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
  78. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
  79. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
  80. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
  81. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
  82. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  83. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
  84. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
  85. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
  86. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
  87. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
  88. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
  89. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
  90. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
  91. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
  92. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
  93. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
  94. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
  95. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
  96. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
  97. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
  98. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
  99. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
  100. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  101. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
  102. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
  103. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
  104. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
  105. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
  106. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/keccak/__init__.py +0 -0
  107. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/keccak/keccak.py +0 -0
  108. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/__init__.py +0 -0
  109. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +0 -0
  110. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +0 -0
  111. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/ast_utils.py +0 -0
  112. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/common.py +0 -0
  113. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/exceptions.py +0 -0
  114. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/grammar.py +0 -0
  115. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  116. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/grammars/common.lark +0 -0
  117. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/grammars/lark.lark +0 -0
  118. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/grammars/python.lark +0 -0
  119. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/grammars/unicode.lark +0 -0
  120. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/indenter.py +0 -0
  121. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/lark.py +0 -0
  122. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/lexer.py +0 -0
  123. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/load_grammar.py +0 -0
  124. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parse_tree_builder.py +0 -0
  125. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parser_frontends.py +0 -0
  126. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  127. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/cyk.py +0 -0
  128. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/earley.py +0 -0
  129. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/earley_common.py +0 -0
  130. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/earley_forest.py +0 -0
  131. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +0 -0
  132. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +0 -0
  133. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +0 -0
  134. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/lalr_parser.py +0 -0
  135. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +0 -0
  136. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/parsers/xearley.py +0 -0
  137. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/py.typed +0 -0
  138. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/reconstruct.py +0 -0
  139. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tools/__init__.py +0 -0
  140. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tools/nearley.py +0 -0
  141. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tools/serialize.py +0 -0
  142. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tools/standalone.py +0 -0
  143. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tree.py +0 -0
  144. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tree_matcher.py +0 -0
  145. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/tree_templates.py +0 -0
  146. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/utils.py +0 -0
  147. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/lark/visitors.py +0 -0
  148. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/__init__.py +0 -0
  149. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/base.py +0 -0
  150. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/class_registry.py +0 -0
  151. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/decorators.py +0 -0
  152. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/error_store.py +0 -0
  153. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/exceptions.py +0 -0
  154. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/fields.py +0 -0
  155. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/orderedset.py +0 -0
  156. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  157. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/schema.py +0 -0
  158. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/types.py +0 -0
  159. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/utils.py +0 -0
  160. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/validate.py +0 -0
  161. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow/warnings.py +0 -0
  162. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +0 -0
  163. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +0 -0
  164. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +0 -0
  165. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +0 -0
  166. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  167. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/typing.py +0 -0
  168. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +0 -0
  169. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +0 -0
  170. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +0 -0
  171. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  172. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/__init__.py +0 -0
  173. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +0 -0
  174. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/_packer.pyx +0 -0
  175. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/_unpacker.pyx +0 -0
  176. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/buff_converter.h +0 -0
  177. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
  178. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/ext.py +0 -0
  179. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/fallback.py +0 -0
  180. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/pack.h +0 -0
  181. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/pack_template.h +0 -0
  182. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/sysdep.h +0 -0
  183. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/unpack.h +0 -0
  184. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/unpack_define.h +0 -0
  185. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/msgpack/unpack_template.h +0 -0
  186. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
  187. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
  188. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
  189. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
  190. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
  191. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/parsimonious/utils.py +0 -0
  192. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/__init__.py +0 -0
  193. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v0/__init__.py +0 -0
  194. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v0/model.py +0 -0
  195. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v0/parser.py +0 -0
  196. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v0/schemas.py +0 -0
  197. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v0/shape.py +0 -0
  198. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/__init__.py +0 -0
  199. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +0 -0
  200. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/model.py +0 -0
  201. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/parser.py +0 -0
  202. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +0 -0
  203. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/schemas.py +0 -0
  204. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v1/shape.py +0 -0
  205. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v2/__init__.py +0 -0
  206. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v2/model.py +0 -0
  207. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v2/parser.py +0 -0
  208. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +0 -0
  209. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v2/schemas.py +0 -0
  210. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/abi/v2/shape.py +0 -0
  211. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  212. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/data_types.py +0 -0
  213. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  214. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +0 -0
  215. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +0 -0
  216. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +0 -0
  217. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/felt.py +0 -0
  218. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/type_parser.py +0 -0
  219. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  220. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +0 -0
  221. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  222. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +0 -0
  223. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/ccxt_utils.py +0 -0
  224. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/common.py +0 -0
  225. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/constants.py +0 -0
  226. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  227. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/hash/address.py +0 -0
  228. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +0 -0
  229. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/hash/selector.py +0 -0
  230. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/hash/storage.py +0 -0
  231. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/hash/utils.py +0 -0
  232. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  233. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/models/typed_data.py +0 -0
  234. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/__init__.py +0 -0
  235. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +0 -0
  236. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/_context.py +0 -0
  237. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +0 -0
  238. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +0 -0
  239. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +0 -0
  240. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +0 -0
  241. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +0 -0
  242. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +0 -0
  243. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +0 -0
  244. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +0 -0
  245. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +0 -0
  246. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +0 -0
  247. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +0 -0
  248. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +0 -0
  249. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +0 -0
  250. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +0 -0
  251. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +0 -0
  252. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +0 -0
  253. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +0 -0
  254. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/errors.py +0 -0
  255. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/factory.py +0 -0
  256. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +0 -0
  257. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +0 -0
  258. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  259. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +0 -0
  260. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/utils/iterable.py +0 -0
  261. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/utils/schema.py +0 -0
  262. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starknet/utils/typed_data.py +0 -0
  263. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starkware/__init__.py +0 -0
  264. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  265. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +0 -0
  266. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starkware/crypto/math_utils.py +0 -0
  267. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starkware/crypto/signature.py +0 -0
  268. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/starkware/crypto/utils.py +0 -0
  269. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/__init__.py +0 -0
  270. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  271. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/core/intfunc.py +0 -0
  272. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  273. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/external/gmpy.py +0 -0
  274. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/external/importtools.py +0 -0
  275. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/external/ntheory.py +0 -0
  276. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/sympy/external/pythonmpq.py +0 -0
  277. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/__init__.py +0 -0
  278. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/_signatures.py +0 -0
  279. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/_version.py +0 -0
  280. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/compatibility.py +0 -0
  281. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
  282. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
  283. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
  284. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
  285. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/functoolz.py +0 -0
  286. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
  287. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/recipes.py +0 -0
  288. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/toolz/utils.py +0 -0
  289. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  290. {bitget-0.0.67 → bitget-0.0.70}/src/bitget/ccxt/static_dependencies/typing_inspect/typing_inspect.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bitget
3
- Version: 0.0.67
3
+ Version: 0.0.70
4
4
  Summary: bitget crypto exchange api client
5
5
  Project-URL: Homepage, https://github.com/ccxt/ccxt
6
6
  Project-URL: Issues, https://github.com/ccxt/ccxt
@@ -141,6 +141,7 @@ You can also construct custom requests to available "implicit" endpoints
141
141
  - `fetch_convert_trade_history(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
142
142
  - `fetch_cross_borrow_rate(self, code: str, params={})`
143
143
  - `fetch_currencies(self, params={})`
144
+ - `fetch_default_markets(self, params)`
144
145
  - `fetch_deposit_address(self, code: str, params={})`
145
146
  - `fetch_deposit_withdraw_fees(self, codes: Strings = None, params={})`
146
147
  - `fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
@@ -174,6 +175,7 @@ You can also construct custom requests to available "implicit" endpoints
174
175
  - `fetch_trading_fee(self, symbol: str, params={})`
175
176
  - `fetch_trading_fees(self, params={})`
176
177
  - `fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
178
+ - `fetch_uta_markets(self, params)`
177
179
  - `fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
178
180
  - `add_margin(self, symbol: str, amount: float, params={})`
179
181
  - `borrow_cross_margin(self, code: str, amount: float, params={})`
@@ -275,6 +277,20 @@ You can also construct custom requests to available "implicit" endpoints
275
277
  - `public_margin_get_v2_margin_market_long_short_ratio(request)`
276
278
  - `public_earn_get_v2_earn_loan_public_coininfos(request)`
277
279
  - `public_earn_get_v2_earn_loan_public_hour_interest(request)`
280
+ - `public_uta_get_v3_market_instruments(request)`
281
+ - `public_uta_get_v3_market_tickers(request)`
282
+ - `public_uta_get_v3_market_orderbook(request)`
283
+ - `public_uta_get_v3_market_fills(request)`
284
+ - `public_uta_get_v3_market_open_interest(request)`
285
+ - `public_uta_get_v3_market_candles(request)`
286
+ - `public_uta_get_v3_market_history_candles(request)`
287
+ - `public_uta_get_v3_market_current_fund_rate(request)`
288
+ - `public_uta_get_v3_market_history_fund_rate(request)`
289
+ - `public_uta_get_v3_market_risk_reserve(request)`
290
+ - `public_uta_get_v3_market_discount_rate(request)`
291
+ - `public_uta_get_v3_market_margin_loans(request)`
292
+ - `public_uta_get_v3_market_position_tier(request)`
293
+ - `public_uta_get_v3_market_oi_limit(request)`
278
294
  - `private_spot_get_spot_v1_wallet_deposit_address(request)`
279
295
  - `private_spot_get_spot_v1_wallet_withdrawal_list(request)`
280
296
  - `private_spot_get_spot_v1_wallet_deposit_list(request)`
@@ -706,6 +722,50 @@ You can also construct custom requests to available "implicit" endpoints
706
722
  - `private_earn_post_v2_earn_loan_repay(request)`
707
723
  - `private_earn_post_v2_earn_loan_revise_pledge(request)`
708
724
  - `private_common_get_v2_common_trade_rate(request)`
725
+ - `private_uta_get_v3_account_assets(request)`
726
+ - `private_uta_get_v3_account_settings(request)`
727
+ - `private_uta_get_v3_account_financial_records(request)`
728
+ - `private_uta_get_v3_account_repayable_coins(request)`
729
+ - `private_uta_get_v3_account_payment_coins(request)`
730
+ - `private_uta_get_v3_account_convert_records(request)`
731
+ - `private_uta_get_v3_account_transferable_coins(request)`
732
+ - `private_uta_get_v3_account_sub_transfer_record(request)`
733
+ - `private_uta_get_v3_ins_loan_transfered(request)`
734
+ - `private_uta_get_v3_ins_loan_symbols(request)`
735
+ - `private_uta_get_v3_ins_loan_risk_unit(request)`
736
+ - `private_uta_get_v3_ins_loan_repaid_history(request)`
737
+ - `private_uta_get_v3_ins_loan_product_infos(request)`
738
+ - `private_uta_get_v3_ins_loan_loan_order(request)`
739
+ - `private_uta_get_v3_ins_loan_ltv_convert(request)`
740
+ - `private_uta_get_v3_ins_loan_ensure_coins_convert(request)`
741
+ - `private_uta_get_v3_position_current_position(request)`
742
+ - `private_uta_get_v3_position_history_position(request)`
743
+ - `private_uta_get_v3_trade_order_info(request)`
744
+ - `private_uta_get_v3_trade_unfilled_orders(request)`
745
+ - `private_uta_get_v3_trade_history_orders(request)`
746
+ - `private_uta_get_v3_trade_fills(request)`
747
+ - `private_uta_get_v3_user_sub_list(request)`
748
+ - `private_uta_get_v3_user_sub_api_list(request)`
749
+ - `private_uta_post_v3_account_set_leverage(request)`
750
+ - `private_uta_post_v3_account_set_hold_mode(request)`
751
+ - `private_uta_post_v3_account_repay(request)`
752
+ - `private_uta_post_v3_account_transfer(request)`
753
+ - `private_uta_post_v3_account_sub_transfer(request)`
754
+ - `private_uta_post_v3_account_max_open_available(request)`
755
+ - `private_uta_post_v3_ins_loan_bind_uid(request)`
756
+ - `private_uta_post_v3_trade_place_order(request)`
757
+ - `private_uta_post_v3_trade_modify_order(request)`
758
+ - `private_uta_post_v3_trade_cancel_order(request)`
759
+ - `private_uta_post_v3_trade_place_batch(request)`
760
+ - `private_uta_post_v3_trade_batch_modify_order(request)`
761
+ - `private_uta_post_v3_trade_cancel_batch(request)`
762
+ - `private_uta_post_v3_trade_cancel_symbol_order(request)`
763
+ - `private_uta_post_v3_trade_close_positions(request)`
764
+ - `private_uta_post_v3_user_create_sub(request)`
765
+ - `private_uta_post_v3_user_freeze_sub(request)`
766
+ - `private_uta_post_v3_user_create_sub_api(request)`
767
+ - `private_uta_post_v3_user_update_sub_api(request)`
768
+ - `private_uta_post_v3_user_delete_sub_api(request)`
709
769
 
710
770
  ### WS Unified
711
771
 
@@ -122,6 +122,7 @@ You can also construct custom requests to available "implicit" endpoints
122
122
  - `fetch_convert_trade_history(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
123
123
  - `fetch_cross_borrow_rate(self, code: str, params={})`
124
124
  - `fetch_currencies(self, params={})`
125
+ - `fetch_default_markets(self, params)`
125
126
  - `fetch_deposit_address(self, code: str, params={})`
126
127
  - `fetch_deposit_withdraw_fees(self, codes: Strings = None, params={})`
127
128
  - `fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
@@ -155,6 +156,7 @@ You can also construct custom requests to available "implicit" endpoints
155
156
  - `fetch_trading_fee(self, symbol: str, params={})`
156
157
  - `fetch_trading_fees(self, params={})`
157
158
  - `fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
159
+ - `fetch_uta_markets(self, params)`
158
160
  - `fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={})`
159
161
  - `add_margin(self, symbol: str, amount: float, params={})`
160
162
  - `borrow_cross_margin(self, code: str, amount: float, params={})`
@@ -256,6 +258,20 @@ You can also construct custom requests to available "implicit" endpoints
256
258
  - `public_margin_get_v2_margin_market_long_short_ratio(request)`
257
259
  - `public_earn_get_v2_earn_loan_public_coininfos(request)`
258
260
  - `public_earn_get_v2_earn_loan_public_hour_interest(request)`
261
+ - `public_uta_get_v3_market_instruments(request)`
262
+ - `public_uta_get_v3_market_tickers(request)`
263
+ - `public_uta_get_v3_market_orderbook(request)`
264
+ - `public_uta_get_v3_market_fills(request)`
265
+ - `public_uta_get_v3_market_open_interest(request)`
266
+ - `public_uta_get_v3_market_candles(request)`
267
+ - `public_uta_get_v3_market_history_candles(request)`
268
+ - `public_uta_get_v3_market_current_fund_rate(request)`
269
+ - `public_uta_get_v3_market_history_fund_rate(request)`
270
+ - `public_uta_get_v3_market_risk_reserve(request)`
271
+ - `public_uta_get_v3_market_discount_rate(request)`
272
+ - `public_uta_get_v3_market_margin_loans(request)`
273
+ - `public_uta_get_v3_market_position_tier(request)`
274
+ - `public_uta_get_v3_market_oi_limit(request)`
259
275
  - `private_spot_get_spot_v1_wallet_deposit_address(request)`
260
276
  - `private_spot_get_spot_v1_wallet_withdrawal_list(request)`
261
277
  - `private_spot_get_spot_v1_wallet_deposit_list(request)`
@@ -687,6 +703,50 @@ You can also construct custom requests to available "implicit" endpoints
687
703
  - `private_earn_post_v2_earn_loan_repay(request)`
688
704
  - `private_earn_post_v2_earn_loan_revise_pledge(request)`
689
705
  - `private_common_get_v2_common_trade_rate(request)`
706
+ - `private_uta_get_v3_account_assets(request)`
707
+ - `private_uta_get_v3_account_settings(request)`
708
+ - `private_uta_get_v3_account_financial_records(request)`
709
+ - `private_uta_get_v3_account_repayable_coins(request)`
710
+ - `private_uta_get_v3_account_payment_coins(request)`
711
+ - `private_uta_get_v3_account_convert_records(request)`
712
+ - `private_uta_get_v3_account_transferable_coins(request)`
713
+ - `private_uta_get_v3_account_sub_transfer_record(request)`
714
+ - `private_uta_get_v3_ins_loan_transfered(request)`
715
+ - `private_uta_get_v3_ins_loan_symbols(request)`
716
+ - `private_uta_get_v3_ins_loan_risk_unit(request)`
717
+ - `private_uta_get_v3_ins_loan_repaid_history(request)`
718
+ - `private_uta_get_v3_ins_loan_product_infos(request)`
719
+ - `private_uta_get_v3_ins_loan_loan_order(request)`
720
+ - `private_uta_get_v3_ins_loan_ltv_convert(request)`
721
+ - `private_uta_get_v3_ins_loan_ensure_coins_convert(request)`
722
+ - `private_uta_get_v3_position_current_position(request)`
723
+ - `private_uta_get_v3_position_history_position(request)`
724
+ - `private_uta_get_v3_trade_order_info(request)`
725
+ - `private_uta_get_v3_trade_unfilled_orders(request)`
726
+ - `private_uta_get_v3_trade_history_orders(request)`
727
+ - `private_uta_get_v3_trade_fills(request)`
728
+ - `private_uta_get_v3_user_sub_list(request)`
729
+ - `private_uta_get_v3_user_sub_api_list(request)`
730
+ - `private_uta_post_v3_account_set_leverage(request)`
731
+ - `private_uta_post_v3_account_set_hold_mode(request)`
732
+ - `private_uta_post_v3_account_repay(request)`
733
+ - `private_uta_post_v3_account_transfer(request)`
734
+ - `private_uta_post_v3_account_sub_transfer(request)`
735
+ - `private_uta_post_v3_account_max_open_available(request)`
736
+ - `private_uta_post_v3_ins_loan_bind_uid(request)`
737
+ - `private_uta_post_v3_trade_place_order(request)`
738
+ - `private_uta_post_v3_trade_modify_order(request)`
739
+ - `private_uta_post_v3_trade_cancel_order(request)`
740
+ - `private_uta_post_v3_trade_place_batch(request)`
741
+ - `private_uta_post_v3_trade_batch_modify_order(request)`
742
+ - `private_uta_post_v3_trade_cancel_batch(request)`
743
+ - `private_uta_post_v3_trade_cancel_symbol_order(request)`
744
+ - `private_uta_post_v3_trade_close_positions(request)`
745
+ - `private_uta_post_v3_user_create_sub(request)`
746
+ - `private_uta_post_v3_user_freeze_sub(request)`
747
+ - `private_uta_post_v3_user_create_sub_api(request)`
748
+ - `private_uta_post_v3_user_update_sub_api(request)`
749
+ - `private_uta_post_v3_user_delete_sub_api(request)`
690
750
 
691
751
  ### WS Unified
692
752
 
@@ -11,7 +11,7 @@ only-include = ["src/bitget"]
11
11
 
12
12
  [project]
13
13
  name = "bitget"
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
 
@@ -78,6 +78,20 @@ class ImplicitAPI:
78
78
  public_margin_get_v2_margin_market_long_short_ratio = publicMarginGetV2MarginMarketLongShortRatio = Entry('v2/margin/market/long-short-ratio', ['public', 'margin'], 'GET', {'cost': 20})
79
79
  public_earn_get_v2_earn_loan_public_coininfos = publicEarnGetV2EarnLoanPublicCoinInfos = Entry('v2/earn/loan/public/coinInfos', ['public', 'earn'], 'GET', {'cost': 2})
80
80
  public_earn_get_v2_earn_loan_public_hour_interest = publicEarnGetV2EarnLoanPublicHourInterest = Entry('v2/earn/loan/public/hour-interest', ['public', 'earn'], 'GET', {'cost': 2})
81
+ public_uta_get_v3_market_instruments = publicUtaGetV3MarketInstruments = Entry('v3/market/instruments', ['public', 'uta'], 'GET', {'cost': 1})
82
+ public_uta_get_v3_market_tickers = publicUtaGetV3MarketTickers = Entry('v3/market/tickers', ['public', 'uta'], 'GET', {'cost': 1})
83
+ public_uta_get_v3_market_orderbook = publicUtaGetV3MarketOrderbook = Entry('v3/market/orderbook', ['public', 'uta'], 'GET', {'cost': 1})
84
+ public_uta_get_v3_market_fills = publicUtaGetV3MarketFills = Entry('v3/market/fills', ['public', 'uta'], 'GET', {'cost': 1})
85
+ public_uta_get_v3_market_open_interest = publicUtaGetV3MarketOpenInterest = Entry('v3/market/open-interest', ['public', 'uta'], 'GET', {'cost': 1})
86
+ public_uta_get_v3_market_candles = publicUtaGetV3MarketCandles = Entry('v3/market/candles', ['public', 'uta'], 'GET', {'cost': 1})
87
+ public_uta_get_v3_market_history_candles = publicUtaGetV3MarketHistoryCandles = Entry('v3/market/history-candles', ['public', 'uta'], 'GET', {'cost': 1})
88
+ public_uta_get_v3_market_current_fund_rate = publicUtaGetV3MarketCurrentFundRate = Entry('v3/market/current-fund-rate', ['public', 'uta'], 'GET', {'cost': 1})
89
+ public_uta_get_v3_market_history_fund_rate = publicUtaGetV3MarketHistoryFundRate = Entry('v3/market/history-fund-rate', ['public', 'uta'], 'GET', {'cost': 1})
90
+ public_uta_get_v3_market_risk_reserve = publicUtaGetV3MarketRiskReserve = Entry('v3/market/risk-reserve', ['public', 'uta'], 'GET', {'cost': 1})
91
+ public_uta_get_v3_market_discount_rate = publicUtaGetV3MarketDiscountRate = Entry('v3/market/discount-rate', ['public', 'uta'], 'GET', {'cost': 1})
92
+ public_uta_get_v3_market_margin_loans = publicUtaGetV3MarketMarginLoans = Entry('v3/market/margin-loans', ['public', 'uta'], 'GET', {'cost': 1})
93
+ public_uta_get_v3_market_position_tier = publicUtaGetV3MarketPositionTier = Entry('v3/market/position-tier', ['public', 'uta'], 'GET', {'cost': 1})
94
+ public_uta_get_v3_market_oi_limit = publicUtaGetV3MarketOiLimit = Entry('v3/market/oi-limit', ['public', 'uta'], 'GET', {'cost': 2})
81
95
  private_spot_get_spot_v1_wallet_deposit_address = privateSpotGetSpotV1WalletDepositAddress = Entry('spot/v1/wallet/deposit-address', ['private', 'spot'], 'GET', {'cost': 4})
82
96
  private_spot_get_spot_v1_wallet_withdrawal_list = privateSpotGetSpotV1WalletWithdrawalList = Entry('spot/v1/wallet/withdrawal-list', ['private', 'spot'], 'GET', {'cost': 1})
83
97
  private_spot_get_spot_v1_wallet_deposit_list = privateSpotGetSpotV1WalletDepositList = Entry('spot/v1/wallet/deposit-list', ['private', 'spot'], 'GET', {'cost': 1})
@@ -509,3 +523,47 @@ class ImplicitAPI:
509
523
  private_earn_post_v2_earn_loan_repay = privateEarnPostV2EarnLoanRepay = Entry('v2/earn/loan/repay', ['private', 'earn'], 'POST', {'cost': 2})
510
524
  private_earn_post_v2_earn_loan_revise_pledge = privateEarnPostV2EarnLoanRevisePledge = Entry('v2/earn/loan/revise-pledge', ['private', 'earn'], 'POST', {'cost': 2})
511
525
  private_common_get_v2_common_trade_rate = privateCommonGetV2CommonTradeRate = Entry('v2/common/trade-rate', ['private', 'common'], 'GET', {'cost': 2})
526
+ private_uta_get_v3_account_assets = privateUtaGetV3AccountAssets = Entry('v3/account/assets', ['private', 'uta'], 'GET', {'cost': 1})
527
+ private_uta_get_v3_account_settings = privateUtaGetV3AccountSettings = Entry('v3/account/settings', ['private', 'uta'], 'GET', {'cost': 1})
528
+ private_uta_get_v3_account_financial_records = privateUtaGetV3AccountFinancialRecords = Entry('v3/account/financial-records', ['private', 'uta'], 'GET', {'cost': 1})
529
+ private_uta_get_v3_account_repayable_coins = privateUtaGetV3AccountRepayableCoins = Entry('v3/account/repayable-coins', ['private', 'uta'], 'GET', {'cost': 2})
530
+ private_uta_get_v3_account_payment_coins = privateUtaGetV3AccountPaymentCoins = Entry('v3/account/payment-coins', ['private', 'uta'], 'GET', {'cost': 2})
531
+ private_uta_get_v3_account_convert_records = privateUtaGetV3AccountConvertRecords = Entry('v3/account/convert-records', ['private', 'uta'], 'GET', {'cost': 1})
532
+ private_uta_get_v3_account_transferable_coins = privateUtaGetV3AccountTransferableCoins = Entry('v3/account/transferable-coins', ['private', 'uta'], 'GET', {'cost': 2})
533
+ private_uta_get_v3_account_sub_transfer_record = privateUtaGetV3AccountSubTransferRecord = Entry('v3/account/sub-transfer-record', ['private', 'uta'], 'GET', {'cost': 4})
534
+ private_uta_get_v3_ins_loan_transfered = privateUtaGetV3InsLoanTransfered = Entry('v3/ins-loan/transfered', ['private', 'uta'], 'GET', {'cost': 6.6667})
535
+ private_uta_get_v3_ins_loan_symbols = privateUtaGetV3InsLoanSymbols = Entry('v3/ins-loan/symbols', ['private', 'uta'], 'GET', {'cost': 6.6667})
536
+ private_uta_get_v3_ins_loan_risk_unit = privateUtaGetV3InsLoanRiskUnit = Entry('v3/ins-loan/risk-unit', ['private', 'uta'], 'GET', {'cost': 6.6667})
537
+ private_uta_get_v3_ins_loan_repaid_history = privateUtaGetV3InsLoanRepaidHistory = Entry('v3/ins-loan/repaid-history', ['private', 'uta'], 'GET', {'cost': 6.6667})
538
+ private_uta_get_v3_ins_loan_product_infos = privateUtaGetV3InsLoanProductInfos = Entry('v3/ins-loan/product-infos', ['private', 'uta'], 'GET', {'cost': 6.6667})
539
+ private_uta_get_v3_ins_loan_loan_order = privateUtaGetV3InsLoanLoanOrder = Entry('v3/ins-loan/loan-order', ['private', 'uta'], 'GET', {'cost': 6.6667})
540
+ private_uta_get_v3_ins_loan_ltv_convert = privateUtaGetV3InsLoanLtvConvert = Entry('v3/ins-loan/ltv-convert', ['private', 'uta'], 'GET', {'cost': 6.6667})
541
+ private_uta_get_v3_ins_loan_ensure_coins_convert = privateUtaGetV3InsLoanEnsureCoinsConvert = Entry('v3/ins-loan/ensure-coins-convert', ['private', 'uta'], 'GET', {'cost': 6.6667})
542
+ private_uta_get_v3_position_current_position = privateUtaGetV3PositionCurrentPosition = Entry('v3/position/current-position', ['private', 'uta'], 'GET', {'cost': 1})
543
+ private_uta_get_v3_position_history_position = privateUtaGetV3PositionHistoryPosition = Entry('v3/position/history-position', ['private', 'uta'], 'GET', {'cost': 1})
544
+ private_uta_get_v3_trade_order_info = privateUtaGetV3TradeOrderInfo = Entry('v3/trade/order-info', ['private', 'uta'], 'GET', {'cost': 1})
545
+ private_uta_get_v3_trade_unfilled_orders = privateUtaGetV3TradeUnfilledOrders = Entry('v3/trade/unfilled-orders', ['private', 'uta'], 'GET', {'cost': 1})
546
+ private_uta_get_v3_trade_history_orders = privateUtaGetV3TradeHistoryOrders = Entry('v3/trade/history-orders', ['private', 'uta'], 'GET', {'cost': 1})
547
+ private_uta_get_v3_trade_fills = privateUtaGetV3TradeFills = Entry('v3/trade/fills', ['private', 'uta'], 'GET', {'cost': 1})
548
+ private_uta_get_v3_user_sub_list = privateUtaGetV3UserSubList = Entry('v3/user/sub-list', ['private', 'uta'], 'GET', {'cost': 2})
549
+ private_uta_get_v3_user_sub_api_list = privateUtaGetV3UserSubApiList = Entry('v3/user/sub-api-list', ['private', 'uta'], 'GET', {'cost': 2})
550
+ private_uta_post_v3_account_set_leverage = privateUtaPostV3AccountSetLeverage = Entry('v3/account/set-leverage', ['private', 'uta'], 'POST', {'cost': 2})
551
+ private_uta_post_v3_account_set_hold_mode = privateUtaPostV3AccountSetHoldMode = Entry('v3/account/set-hold-mode', ['private', 'uta'], 'POST', {'cost': 2})
552
+ private_uta_post_v3_account_repay = privateUtaPostV3AccountRepay = Entry('v3/account/repay', ['private', 'uta'], 'POST', {'cost': 4})
553
+ private_uta_post_v3_account_transfer = privateUtaPostV3AccountTransfer = Entry('v3/account/transfer', ['private', 'uta'], 'POST', {'cost': 4})
554
+ private_uta_post_v3_account_sub_transfer = privateUtaPostV3AccountSubTransfer = Entry('v3/account/sub-transfer', ['private', 'uta'], 'POST', {'cost': 4})
555
+ private_uta_post_v3_account_max_open_available = privateUtaPostV3AccountMaxOpenAvailable = Entry('v3/account/max-open-available', ['private', 'uta'], 'POST', {'cost': 4})
556
+ private_uta_post_v3_ins_loan_bind_uid = privateUtaPostV3InsLoanBindUid = Entry('v3/ins-loan/bind-uid', ['private', 'uta'], 'POST', {'cost': 6.6667})
557
+ private_uta_post_v3_trade_place_order = privateUtaPostV3TradePlaceOrder = Entry('v3/trade/place-order', ['private', 'uta'], 'POST', {'cost': 2})
558
+ private_uta_post_v3_trade_modify_order = privateUtaPostV3TradeModifyOrder = Entry('v3/trade/modify-order', ['private', 'uta'], 'POST', {'cost': 2})
559
+ private_uta_post_v3_trade_cancel_order = privateUtaPostV3TradeCancelOrder = Entry('v3/trade/cancel-order', ['private', 'uta'], 'POST', {'cost': 2})
560
+ private_uta_post_v3_trade_place_batch = privateUtaPostV3TradePlaceBatch = Entry('v3/trade/place-batch', ['private', 'uta'], 'POST', {'cost': 4})
561
+ private_uta_post_v3_trade_batch_modify_order = privateUtaPostV3TradeBatchModifyOrder = Entry('v3/trade/batch-modify-order', ['private', 'uta'], 'POST', {'cost': 2})
562
+ private_uta_post_v3_trade_cancel_batch = privateUtaPostV3TradeCancelBatch = Entry('v3/trade/cancel-batch', ['private', 'uta'], 'POST', {'cost': 4})
563
+ private_uta_post_v3_trade_cancel_symbol_order = privateUtaPostV3TradeCancelSymbolOrder = Entry('v3/trade/cancel-symbol-order', ['private', 'uta'], 'POST', {'cost': 4})
564
+ private_uta_post_v3_trade_close_positions = privateUtaPostV3TradeClosePositions = Entry('v3/trade/close-positions', ['private', 'uta'], 'POST', {'cost': 4})
565
+ private_uta_post_v3_user_create_sub = privateUtaPostV3UserCreateSub = Entry('v3/user/create-sub', ['private', 'uta'], 'POST', {'cost': 2})
566
+ private_uta_post_v3_user_freeze_sub = privateUtaPostV3UserFreezeSub = Entry('v3/user/freeze-sub', ['private', 'uta'], 'POST', {'cost': 2})
567
+ private_uta_post_v3_user_create_sub_api = privateUtaPostV3UserCreateSubApi = Entry('v3/user/create-sub-api', ['private', 'uta'], 'POST', {'cost': 2})
568
+ private_uta_post_v3_user_update_sub_api = privateUtaPostV3UserUpdateSubApi = Entry('v3/user/update-sub-api', ['private', 'uta'], 'POST', {'cost': 2})
569
+ private_uta_post_v3_user_delete_sub_api = privateUtaPostV3UserDeleteSubApi = Entry('v3/user/delete-sub-api', ['private', 'uta'], 'POST', {'cost': 2})
@@ -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)