coinex-api 0.0.12__py3-none-any.whl → 0.0.14__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. coinex/__init__.py +7 -0
  2. coinex/ccxt/__init__.py +101 -0
  3. coinex/ccxt/abstract/coinex.py +237 -0
  4. coinex/ccxt/async_support/__init__.py +80 -0
  5. coinex/ccxt/async_support/base/__init__.py +1 -0
  6. coinex/ccxt/async_support/base/exchange.py +2100 -0
  7. coinex/ccxt/async_support/base/throttler.py +50 -0
  8. coinex/ccxt/async_support/base/ws/__init__.py +38 -0
  9. coinex/ccxt/async_support/base/ws/aiohttp_client.py +147 -0
  10. coinex/ccxt/async_support/base/ws/cache.py +213 -0
  11. coinex/ccxt/async_support/base/ws/client.py +214 -0
  12. coinex/ccxt/async_support/base/ws/fast_client.py +97 -0
  13. coinex/ccxt/async_support/base/ws/functions.py +59 -0
  14. coinex/ccxt/async_support/base/ws/future.py +69 -0
  15. coinex/ccxt/async_support/base/ws/order_book.py +78 -0
  16. coinex/ccxt/async_support/base/ws/order_book_side.py +174 -0
  17. coinex/ccxt/async_support/coinex.py +5833 -0
  18. coinex/ccxt/base/__init__.py +27 -0
  19. coinex/ccxt/base/decimal_to_precision.py +174 -0
  20. coinex/ccxt/base/errors.py +267 -0
  21. coinex/ccxt/base/exchange.py +6769 -0
  22. coinex/ccxt/base/precise.py +297 -0
  23. coinex/ccxt/base/types.py +577 -0
  24. coinex/ccxt/coinex.py +5832 -0
  25. coinex/ccxt/pro/__init__.py +21 -0
  26. coinex/ccxt/pro/coinex.py +1366 -0
  27. coinex/ccxt/static_dependencies/README.md +1 -0
  28. coinex/ccxt/static_dependencies/__init__.py +1 -0
  29. coinex/ccxt/static_dependencies/ecdsa/__init__.py +14 -0
  30. coinex/ccxt/static_dependencies/ecdsa/_version.py +520 -0
  31. coinex/ccxt/static_dependencies/ecdsa/curves.py +56 -0
  32. coinex/ccxt/static_dependencies/ecdsa/der.py +221 -0
  33. coinex/ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
  34. coinex/ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
  35. coinex/ccxt/static_dependencies/ecdsa/keys.py +332 -0
  36. coinex/ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
  37. coinex/ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
  38. coinex/ccxt/static_dependencies/ecdsa/util.py +266 -0
  39. coinex/ccxt/static_dependencies/ethereum/__init__.py +7 -0
  40. coinex/ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
  41. coinex/ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
  42. coinex/ccxt/static_dependencies/ethereum/abi/base.py +152 -0
  43. coinex/ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
  44. coinex/ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
  45. coinex/ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
  46. coinex/ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
  47. coinex/ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
  48. coinex/ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
  49. coinex/ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
  50. coinex/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  51. coinex/ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
  52. coinex/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
  53. coinex/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
  54. coinex/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  55. coinex/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
  56. coinex/ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
  57. coinex/ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
  58. coinex/ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
  59. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
  60. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
  61. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
  62. coinex/ccxt/static_dependencies/ethereum/account/messages.py +263 -0
  63. coinex/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  64. coinex/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
  65. coinex/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
  66. coinex/ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
  67. coinex/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  68. coinex/ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
  69. coinex/ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
  70. coinex/ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
  71. coinex/ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
  72. coinex/ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
  73. coinex/ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
  74. coinex/ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
  75. coinex/ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
  76. coinex/ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
  77. coinex/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  78. coinex/ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
  79. coinex/ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
  80. coinex/ccxt/static_dependencies/ethereum/utils/address.py +171 -0
  81. coinex/ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
  82. coinex/ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
  83. coinex/ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
  84. coinex/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
  85. coinex/ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
  86. coinex/ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
  87. coinex/ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
  88. coinex/ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
  89. coinex/ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
  90. coinex/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
  91. coinex/ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
  92. coinex/ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
  93. coinex/ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
  94. coinex/ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
  95. coinex/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  96. coinex/ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
  97. coinex/ccxt/static_dependencies/ethereum/utils/types.py +54 -0
  98. coinex/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
  99. coinex/ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
  100. coinex/ccxt/static_dependencies/ethereum/utils/units.py +31 -0
  101. coinex/ccxt/static_dependencies/keccak/__init__.py +3 -0
  102. coinex/ccxt/static_dependencies/keccak/keccak.py +197 -0
  103. coinex/ccxt/static_dependencies/lark/__init__.py +38 -0
  104. coinex/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  105. coinex/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  106. coinex/ccxt/static_dependencies/lark/ast_utils.py +59 -0
  107. coinex/ccxt/static_dependencies/lark/common.py +86 -0
  108. coinex/ccxt/static_dependencies/lark/exceptions.py +292 -0
  109. coinex/ccxt/static_dependencies/lark/grammar.py +130 -0
  110. coinex/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  111. coinex/ccxt/static_dependencies/lark/grammars/common.lark +59 -0
  112. coinex/ccxt/static_dependencies/lark/grammars/lark.lark +62 -0
  113. coinex/ccxt/static_dependencies/lark/grammars/python.lark +302 -0
  114. coinex/ccxt/static_dependencies/lark/grammars/unicode.lark +7 -0
  115. coinex/ccxt/static_dependencies/lark/indenter.py +143 -0
  116. coinex/ccxt/static_dependencies/lark/lark.py +658 -0
  117. coinex/ccxt/static_dependencies/lark/lexer.py +678 -0
  118. coinex/ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  119. coinex/ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  120. coinex/ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  121. coinex/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  122. coinex/ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  123. coinex/ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  124. coinex/ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  125. coinex/ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  126. coinex/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  127. coinex/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  128. coinex/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  129. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  130. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  131. coinex/ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  132. coinex/ccxt/static_dependencies/lark/py.typed +0 -0
  133. coinex/ccxt/static_dependencies/lark/reconstruct.py +107 -0
  134. coinex/ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  135. coinex/ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  136. coinex/ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  137. coinex/ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  138. coinex/ccxt/static_dependencies/lark/tree.py +267 -0
  139. coinex/ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  140. coinex/ccxt/static_dependencies/lark/tree_templates.py +180 -0
  141. coinex/ccxt/static_dependencies/lark/utils.py +343 -0
  142. coinex/ccxt/static_dependencies/lark/visitors.py +596 -0
  143. coinex/ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  144. coinex/ccxt/static_dependencies/marshmallow/base.py +65 -0
  145. coinex/ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  146. coinex/ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  147. coinex/ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  148. coinex/ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  149. coinex/ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  150. coinex/ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  151. coinex/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  152. coinex/ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  153. coinex/ccxt/static_dependencies/marshmallow/types.py +12 -0
  154. coinex/ccxt/static_dependencies/marshmallow/utils.py +378 -0
  155. coinex/ccxt/static_dependencies/marshmallow/validate.py +678 -0
  156. coinex/ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  157. coinex/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  158. coinex/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  159. coinex/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  160. coinex/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  161. coinex/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  162. coinex/ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  163. coinex/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  164. coinex/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  165. coinex/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  166. coinex/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  167. coinex/ccxt/static_dependencies/msgpack/__init__.py +55 -0
  168. coinex/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +11 -0
  169. coinex/ccxt/static_dependencies/msgpack/_packer.pyx +374 -0
  170. coinex/ccxt/static_dependencies/msgpack/_unpacker.pyx +547 -0
  171. coinex/ccxt/static_dependencies/msgpack/buff_converter.h +8 -0
  172. coinex/ccxt/static_dependencies/msgpack/exceptions.py +48 -0
  173. coinex/ccxt/static_dependencies/msgpack/ext.py +168 -0
  174. coinex/ccxt/static_dependencies/msgpack/fallback.py +951 -0
  175. coinex/ccxt/static_dependencies/msgpack/pack.h +89 -0
  176. coinex/ccxt/static_dependencies/msgpack/pack_template.h +820 -0
  177. coinex/ccxt/static_dependencies/msgpack/sysdep.h +194 -0
  178. coinex/ccxt/static_dependencies/msgpack/unpack.h +391 -0
  179. coinex/ccxt/static_dependencies/msgpack/unpack_define.h +95 -0
  180. coinex/ccxt/static_dependencies/msgpack/unpack_template.h +464 -0
  181. coinex/ccxt/static_dependencies/parsimonious/__init__.py +10 -0
  182. coinex/ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
  183. coinex/ccxt/static_dependencies/parsimonious/expressions.py +479 -0
  184. coinex/ccxt/static_dependencies/parsimonious/grammar.py +487 -0
  185. coinex/ccxt/static_dependencies/parsimonious/nodes.py +325 -0
  186. coinex/ccxt/static_dependencies/parsimonious/utils.py +40 -0
  187. coinex/ccxt/static_dependencies/starknet/__init__.py +0 -0
  188. coinex/ccxt/static_dependencies/starknet/abi/v0/__init__.py +2 -0
  189. coinex/ccxt/static_dependencies/starknet/abi/v0/model.py +44 -0
  190. coinex/ccxt/static_dependencies/starknet/abi/v0/parser.py +216 -0
  191. coinex/ccxt/static_dependencies/starknet/abi/v0/schemas.py +72 -0
  192. coinex/ccxt/static_dependencies/starknet/abi/v0/shape.py +63 -0
  193. coinex/ccxt/static_dependencies/starknet/abi/v1/__init__.py +2 -0
  194. coinex/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +14 -0
  195. coinex/ccxt/static_dependencies/starknet/abi/v1/model.py +39 -0
  196. coinex/ccxt/static_dependencies/starknet/abi/v1/parser.py +220 -0
  197. coinex/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +179 -0
  198. coinex/ccxt/static_dependencies/starknet/abi/v1/schemas.py +66 -0
  199. coinex/ccxt/static_dependencies/starknet/abi/v1/shape.py +47 -0
  200. coinex/ccxt/static_dependencies/starknet/abi/v2/__init__.py +2 -0
  201. coinex/ccxt/static_dependencies/starknet/abi/v2/model.py +89 -0
  202. coinex/ccxt/static_dependencies/starknet/abi/v2/parser.py +293 -0
  203. coinex/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +192 -0
  204. coinex/ccxt/static_dependencies/starknet/abi/v2/schemas.py +132 -0
  205. coinex/ccxt/static_dependencies/starknet/abi/v2/shape.py +107 -0
  206. coinex/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  207. coinex/ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  208. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  209. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  210. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  211. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  212. coinex/ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  213. coinex/ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  214. coinex/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  215. coinex/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  216. coinex/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  217. coinex/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  218. coinex/ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  219. coinex/ccxt/static_dependencies/starknet/common.py +15 -0
  220. coinex/ccxt/static_dependencies/starknet/constants.py +39 -0
  221. coinex/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  222. coinex/ccxt/static_dependencies/starknet/hash/address.py +79 -0
  223. coinex/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  224. coinex/ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  225. coinex/ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  226. coinex/ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  227. coinex/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  228. coinex/ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  229. coinex/ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  230. coinex/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  231. coinex/ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  232. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  233. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  234. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  235. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  236. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  237. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  238. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  239. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  240. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  241. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  242. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  243. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  244. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  245. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  246. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  247. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  248. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  249. coinex/ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  250. coinex/ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  251. coinex/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  252. coinex/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  253. coinex/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  254. coinex/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  255. coinex/ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  256. coinex/ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  257. coinex/ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  258. coinex/ccxt/static_dependencies/starkware/__init__.py +0 -0
  259. coinex/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  260. coinex/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  261. coinex/ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  262. coinex/ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  263. coinex/ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  264. coinex/ccxt/static_dependencies/sympy/__init__.py +0 -0
  265. coinex/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  266. coinex/ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  267. coinex/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  268. coinex/ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  269. coinex/ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  270. coinex/ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  271. coinex/ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  272. coinex/ccxt/static_dependencies/toolz/__init__.py +26 -0
  273. coinex/ccxt/static_dependencies/toolz/_signatures.py +784 -0
  274. coinex/ccxt/static_dependencies/toolz/_version.py +520 -0
  275. coinex/ccxt/static_dependencies/toolz/compatibility.py +30 -0
  276. coinex/ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
  277. coinex/ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
  278. coinex/ccxt/static_dependencies/toolz/curried/operator.py +22 -0
  279. coinex/ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
  280. coinex/ccxt/static_dependencies/toolz/functoolz.py +1049 -0
  281. coinex/ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
  282. coinex/ccxt/static_dependencies/toolz/recipes.py +46 -0
  283. coinex/ccxt/static_dependencies/toolz/utils.py +9 -0
  284. coinex/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  285. coinex/ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  286. {coinex_api-0.0.12.dist-info → coinex_api-0.0.14.dist-info}/METADATA +1 -1
  287. coinex_api-0.0.14.dist-info/RECORD +288 -0
  288. coinex_api-0.0.12.dist-info/RECORD +0 -3
  289. {coinex_api-0.0.12.dist-info → coinex_api-0.0.14.dist-info}/WHEEL +0 -0
@@ -0,0 +1,97 @@
1
+ """A faster version of aiohttp's websocket client that uses select and other optimizations"""
2
+
3
+ import asyncio
4
+ import socket
5
+ import collections
6
+ from ccxt.async_support.base.ws.aiohttp_client import AiohttpClient
7
+ from ccxt.base.errors import NetworkError
8
+
9
+
10
+ class FastClient(AiohttpClient):
11
+ transport = None
12
+
13
+ def __init__(self, url, on_message_callback, on_error_callback, on_close_callback, on_connected_callback, config={}):
14
+ super(FastClient, self).__init__(url, on_message_callback, on_error_callback, on_close_callback, on_connected_callback, config)
15
+ # instead of using the deque in aiohttp we implement our own for speed
16
+ # https://github.com/aio-libs/aiohttp/blob/1d296d549050aa335ef542421b8b7dad788246d5/aiohttp/streams.py#L534
17
+ self.stack = collections.deque()
18
+ self.callback_scheduled = False
19
+
20
+ def receive_loop(self):
21
+ def handler():
22
+ if not self.stack:
23
+ self.callback_scheduled = False
24
+ return
25
+ message = self.stack.popleft()
26
+ try:
27
+ self.handle_message(message)
28
+ except Exception as error:
29
+ self.reject(error)
30
+ self.asyncio_loop.call_soon(handler)
31
+
32
+ def feed_data(message, size):
33
+ if not self.callback_scheduled:
34
+ self.callback_scheduled = True
35
+ self.asyncio_loop.call_soon(handler)
36
+ self.stack.append(message)
37
+
38
+ def feed_eof():
39
+ if self.connection._close_code == 1000: # OK close
40
+ self.on_close(1000)
41
+ else:
42
+ self.on_error(NetworkError("Abnormal closure of client")) # ABNORMAL_CLOSURE
43
+
44
+ def wrapper(func):
45
+ def parse_frame(buf):
46
+ while self.stack:
47
+ self.handle_message(self.stack.popleft())
48
+ return func(buf)
49
+ return parse_frame
50
+
51
+ async def close(code=1000, message=b''):
52
+ # this is needed because our other wrappers break the closing process
53
+ # we also don't wait for a response to the close message to speed it up
54
+ # this code is adapted from aiohttp client_ws.py
55
+ _self = self.connection
56
+ if not _self._closed:
57
+ _self._cancel_heartbeat()
58
+ _self._closed = True
59
+ try:
60
+ await _self._writer.close(code, message)
61
+ _self._response.close()
62
+ _self._close_code = 1000
63
+ except asyncio.CancelledError:
64
+ _self._response.close()
65
+ _self._close_code = 1006
66
+ raise
67
+ except Exception as exc:
68
+ _self._close_code = 1006
69
+ _self._exception = exc
70
+ return True
71
+
72
+ connection = self.connection._conn
73
+ if connection.closed:
74
+ # connection got terminated after the connection was made and before the receive loop ran
75
+ self.on_close(1006)
76
+ return
77
+ self.transport = connection.transport
78
+ # increase the RCVBUF so that the tcp window size can be larger
79
+ sock = self.transport.get_extra_info('socket')
80
+ current_size = sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
81
+ # 2 mebibytes is a performance value
82
+ new_size = max(current_size, 2097152)
83
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, new_size)
84
+
85
+ ws_reader = connection.protocol._payload_parser
86
+ ws_reader.parse_frame = wrapper(ws_reader.parse_frame)
87
+ ws_reader.queue.feed_data = feed_data
88
+ ws_reader.queue.feed_eof = feed_eof
89
+ self.connection.close = close
90
+ # return a future so super class won't complain
91
+ return asyncio.sleep(0)
92
+
93
+ def reset(self, error):
94
+ super(FastClient, self).reset(error)
95
+ self.stack.clear()
96
+ if self.transport:
97
+ self.transport.abort()
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from zlib import decompress, MAX_WBITS
4
+ from base64 import b64decode
5
+ from gzip import GzipFile
6
+ from io import BytesIO
7
+ import time
8
+ import datetime
9
+
10
+
11
+ def inflate(data):
12
+ return decompress(data, -MAX_WBITS)
13
+
14
+
15
+ def inflate64(data):
16
+ return inflate(b64decode(data))
17
+
18
+
19
+ def gunzip(data):
20
+ return GzipFile('', 'rb', 9, BytesIO(data)).read().decode('utf-8')
21
+
22
+
23
+ # Tmp : added methods below to avoid circular imports between exchange.py and aiohttp.py
24
+
25
+ def milliseconds():
26
+ return int(time.time() * 1000)
27
+
28
+
29
+ def iso8601(timestamp=None):
30
+ if timestamp is None:
31
+ return timestamp
32
+ if not isinstance(timestamp, int):
33
+ return None
34
+ if int(timestamp) < 0:
35
+ return None
36
+ try:
37
+ utc = datetime.datetime.fromtimestamp(timestamp // 1000, datetime.timezone.utc)
38
+ return utc.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-6] + "{:03d}".format(int(timestamp) % 1000) + 'Z'
39
+ except (TypeError, OverflowError, OSError):
40
+ return None
41
+
42
+
43
+ def is_json_encoded_object(input):
44
+ return (isinstance(input, str) and
45
+ (len(input) >= 2) and
46
+ ((input[0] == '{') or (input[0] == '[')))
47
+
48
+
49
+ def deep_extend(*args):
50
+ result = None
51
+ for arg in args:
52
+ if isinstance(arg, dict):
53
+ if not isinstance(result, dict):
54
+ result = {}
55
+ for key in arg:
56
+ result[key] = deep_extend(result[key] if key in result else None, arg[key])
57
+ else:
58
+ result = arg
59
+ return result
@@ -0,0 +1,69 @@
1
+ import asyncio
2
+ from ccxt import ExchangeClosedByUser
3
+
4
+ class Future(asyncio.Future):
5
+
6
+ is_race_future = False
7
+
8
+ def resolve(self, result=None):
9
+ if not self.done():
10
+ try:
11
+ self.set_result(result)
12
+ except BaseException as e:
13
+ print("Error in Future.resolve")
14
+ raise e
15
+
16
+ def reject(self, error=None):
17
+ if not self.done():
18
+ # If not an exception, wrap it in a generic Exception
19
+ if not isinstance(error, BaseException):
20
+ error = Exception(error)
21
+ try:
22
+ self.set_exception(error)
23
+ except BaseException as e:
24
+ print("Error in Future.reject")
25
+ raise e
26
+
27
+ @classmethod
28
+ def race(cls, futures):
29
+ future = Future()
30
+ for f in futures:
31
+ f.is_race_future = True
32
+ coro = asyncio.wait(futures, return_when=asyncio.FIRST_COMPLETED)
33
+ task = asyncio.create_task(coro)
34
+
35
+ def callback(done):
36
+ try:
37
+ complete, pending = done.result()
38
+ # check for exceptions
39
+ for i, f in enumerate(complete):
40
+ try:
41
+ f.result()
42
+ except ExchangeClosedByUser as e:
43
+ if len(pending) == 0 and i == len(complete) - 1:
44
+ future.reject(e)
45
+ # wait for all the sub promises to be reject before rejecting future
46
+ continue
47
+ except asyncio.CancelledError as e:
48
+ continue
49
+ except Exception as e:
50
+ future.reject(e)
51
+ return
52
+ # no exceptions return first result
53
+ futures_list = list(complete)
54
+
55
+ are_all_canceled = all([f.cancelled() for f in futures_list])
56
+ if are_all_canceled:
57
+ future.reject(ExchangeClosedByUser('Connection closed by the user'))
58
+ return
59
+
60
+ first = futures_list[0]
61
+
62
+ first_result = first.result()
63
+ future.resolve(first_result)
64
+ except asyncio.CancelledError as e:
65
+ future.reject(e)
66
+ except Exception as e:
67
+ future.reject(e)
68
+ task.add_done_callback(callback)
69
+ return future
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ccxt.async_support.base.ws import order_book_side
4
+ from ccxt import Exchange
5
+ import sys
6
+
7
+
8
+ class OrderBook(dict):
9
+ def __init__(self, snapshot={}, depth=None):
10
+ self.cache = []
11
+ depth = depth or sys.maxsize
12
+ defaults = {
13
+ 'bids': [],
14
+ 'asks': [],
15
+ 'timestamp': None,
16
+ 'datetime': None,
17
+ 'nonce': None,
18
+ 'symbol': None,
19
+ }
20
+ # do not mutate snapshot
21
+ defaults.update(snapshot)
22
+ if not isinstance(defaults['asks'], order_book_side.OrderBookSide):
23
+ defaults['asks'] = order_book_side.Asks(defaults['asks'], depth)
24
+ if not isinstance(defaults['bids'], order_book_side.OrderBookSide):
25
+ defaults['bids'] = order_book_side.Bids(defaults['bids'], depth)
26
+ defaults['datetime'] = Exchange.iso8601(defaults.get('timestamp'))
27
+ # merge to self
28
+ super(OrderBook, self).__init__(defaults)
29
+
30
+ def limit(self):
31
+ self['asks'].limit()
32
+ self['bids'].limit()
33
+ return self
34
+
35
+ def reset(self, snapshot={}):
36
+ self['asks']._index.clear()
37
+ self['asks'].clear()
38
+ for ask in snapshot.get('asks', []):
39
+ self['asks'].storeArray(ask)
40
+ self['bids']._index.clear()
41
+ self['bids'].clear()
42
+ for bid in snapshot.get('bids', []):
43
+ self['bids'].storeArray(bid)
44
+ self['nonce'] = snapshot.get('nonce')
45
+ self['timestamp'] = snapshot.get('timestamp')
46
+ self['datetime'] = Exchange.iso8601(self['timestamp'])
47
+ self['symbol'] = snapshot.get('symbol')
48
+
49
+ def update(self, snapshot):
50
+ nonce = snapshot.get('nonce')
51
+ if nonce is not None and self['nonce'] is not None and nonce < self['nonce']:
52
+ return self
53
+ self.reset(snapshot)
54
+
55
+ # -----------------------------------------------------------------------------
56
+ # overwrites absolute volumes at price levels
57
+ # or deletes price levels based on order counts (3rd value in a bidask delta)
58
+
59
+
60
+ class CountedOrderBook(OrderBook):
61
+ def __init__(self, snapshot={}, depth=None):
62
+ copy = Exchange.extend(snapshot, {
63
+ 'asks': order_book_side.CountedAsks(snapshot.get('asks', []), depth),
64
+ 'bids': order_book_side.CountedBids(snapshot.get('bids', []), depth),
65
+ })
66
+ super(CountedOrderBook, self).__init__(copy, depth)
67
+
68
+ # -----------------------------------------------------------------------------
69
+ # indexed by order ids (3rd value in a bidask delta)
70
+
71
+
72
+ class IndexedOrderBook(OrderBook):
73
+ def __init__(self, snapshot={}, depth=None):
74
+ copy = Exchange.extend(snapshot, {
75
+ 'asks': order_book_side.IndexedAsks(snapshot.get('asks', []), depth),
76
+ 'bids': order_book_side.IndexedBids(snapshot.get('bids', []), depth),
77
+ })
78
+ super(IndexedOrderBook, self).__init__(copy, depth)
@@ -0,0 +1,174 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ import sys
4
+ import bisect
5
+
6
+ """Author: Carlo Revelli"""
7
+ """Fast bisect bindings"""
8
+ """https://github.com/python/cpython/blob/master/Modules/_bisectmodule.c"""
9
+ """Performs a binary search when inserting keys in sorted order"""
10
+
11
+
12
+ class OrderBookSide(list):
13
+ side = None # set to True for bids and False for asks
14
+
15
+ def __init__(self, deltas=[], depth=None):
16
+ super(OrderBookSide, self).__init__()
17
+ self._depth = depth or sys.maxsize
18
+ self._n = sys.maxsize
19
+ # parallel to self
20
+ self._index = []
21
+ for delta in deltas:
22
+ self.storeArray(list(delta))
23
+
24
+ def store_array(self, delta):
25
+ return self.storeArray(delta)
26
+
27
+ def storeArray(self, delta):
28
+ price = delta[0]
29
+ size = delta[1]
30
+ index_price = -price if self.side else price
31
+ index = bisect.bisect_left(self._index, index_price)
32
+ if size:
33
+ if index < len(self._index) and self._index[index] == index_price:
34
+ self[index][1] = size
35
+ else:
36
+ self._index.insert(index, index_price)
37
+ self.insert(index, delta)
38
+ elif index < len(self._index) and self._index[index] == index_price:
39
+ del self._index[index]
40
+ del self[index]
41
+
42
+ def store(self, price, size):
43
+ self.storeArray([price, size])
44
+
45
+ def limit(self):
46
+ difference = len(self) - self._depth
47
+ for _ in range(difference):
48
+ self.remove_index(self.pop())
49
+ self._index.pop()
50
+
51
+ def remove_index(self, order):
52
+ pass
53
+
54
+ def __len__(self):
55
+ length = super(OrderBookSide, self).__len__()
56
+ return min(length, self._n)
57
+
58
+ def __getitem__(self, item):
59
+ if isinstance(item, slice):
60
+ start, stop, step = item.indices(len(self))
61
+ return [self[i] for i in range(start, stop, step)]
62
+ else:
63
+ return super(OrderBookSide, self).__getitem__(item)
64
+
65
+ def __eq__(self, other):
66
+ if isinstance(other, list):
67
+ return list(self) == other
68
+ return super(OrderBookSide, self).__eq__(other)
69
+
70
+ def __repr__(self):
71
+ return str(list(self))
72
+
73
+ # -----------------------------------------------------------------------------
74
+ # overwrites absolute volumes at price levels
75
+ # or deletes price levels based on order counts (3rd value in a bidask delta)
76
+ # this class stores vector arrays of values indexed by price
77
+
78
+
79
+ class CountedOrderBookSide(OrderBookSide):
80
+ def __init__(self, deltas=[], depth=None):
81
+ super(CountedOrderBookSide, self).__init__(deltas, depth)
82
+
83
+ def storeArray(self, delta):
84
+ price = delta[0]
85
+ size = delta[1]
86
+ count = delta[2]
87
+ index_price = -price if self.side else price
88
+ index = bisect.bisect_left(self._index, index_price)
89
+ if size and count:
90
+ if index < len(self._index) and self._index[index] == index_price:
91
+ self[index][1] = size
92
+ self[index][2] = count
93
+ else:
94
+ self._index.insert(index, index_price)
95
+ self.insert(index, delta)
96
+ elif index < len(self._index) and self._index[index] == index_price:
97
+ del self._index[index]
98
+ del self[index]
99
+
100
+ def store(self, price, size, count):
101
+ self.storeArray([price, size, count])
102
+
103
+ # -----------------------------------------------------------------------------
104
+ # indexed by order ids (3rd value in a bidask delta)
105
+
106
+
107
+ class IndexedOrderBookSide(OrderBookSide):
108
+ def __init__(self, deltas=[], depth=None):
109
+ self._hashmap = {}
110
+ super(IndexedOrderBookSide, self).__init__(deltas, depth)
111
+
112
+ def storeArray(self, delta):
113
+ price = delta[0]
114
+ if price is not None:
115
+ index_price = -price if self.side else price
116
+ else:
117
+ index_price = None
118
+ size = delta[1]
119
+ order_id = delta[2]
120
+ if size:
121
+ if order_id in self._hashmap:
122
+ old_price = self._hashmap[order_id]
123
+ index_price = index_price or old_price
124
+ # in case the price is not defined
125
+ delta[0] = abs(index_price)
126
+ # matches if price is not defined or if price matches
127
+ if index_price == old_price:
128
+ # just overwrite the old index
129
+ index = bisect.bisect_left(self._index, index_price)
130
+ while self[index][2] != order_id:
131
+ index += 1
132
+ self._index[index] = index_price
133
+ self[index] = delta
134
+ return
135
+ else:
136
+ # remove old price level
137
+ old_index = bisect.bisect_left(self._index, old_price)
138
+ while self[old_index][2] != order_id:
139
+ old_index += 1
140
+ del self._index[old_index]
141
+ del self[old_index]
142
+ # insert new price level
143
+ self._hashmap[order_id] = index_price
144
+ index = bisect.bisect_left(self._index, index_price)
145
+ while index < len (self._index) and self._index[index] == index_price and self[index][2] < order_id:
146
+ index += 1
147
+ self._index.insert(index, index_price)
148
+ self.insert(index, delta)
149
+ elif order_id in self._hashmap:
150
+ old_price = self._hashmap[order_id]
151
+ index = bisect.bisect_left(self._index, old_price)
152
+ while self[index][2] != order_id:
153
+ index += 1
154
+ del self._index[index]
155
+ del self[index]
156
+ del self._hashmap[order_id]
157
+
158
+ def remove_index(self, order):
159
+ order_id = order[2]
160
+ if order_id in self._hashmap:
161
+ del self._hashmap[order_id]
162
+
163
+ def store(self, price, size, order_id):
164
+ self.storeArray([price, size, order_id])
165
+
166
+ # -----------------------------------------------------------------------------
167
+ # a more elegant syntax is possible here, but native inheritance is portable
168
+
169
+ class Asks(OrderBookSide): side = False # noqa
170
+ class Bids(OrderBookSide): side = True # noqa
171
+ class CountedAsks(CountedOrderBookSide): side = False # noqa
172
+ class CountedBids(CountedOrderBookSide): side = True # noqa
173
+ class IndexedAsks(IndexedOrderBookSide): side = False # noqa
174
+ class IndexedBids(IndexedOrderBookSide): side = True # noqa