crypticorn 2.16.0__tar.gz → 2.17.0rc2__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 (328) hide show
  1. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/CHANGELOG.md +33 -0
  2. {crypticorn-2.16.0/crypticorn.egg-info → crypticorn-2.17.0rc2}/PKG-INFO +65 -20
  3. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/README.md +62 -20
  4. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/__init__.py +2 -2
  5. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/admin_api.py +415 -13
  6. crypticorn-2.17.0rc2/crypticorn/auth/client/api/auth_api.py +5575 -0
  7. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/service_api.py +258 -7
  8. crypticorn-2.17.0rc2/crypticorn/auth/client/api/user_api.py +5002 -0
  9. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/wallet_api.py +1518 -77
  10. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/create_api_key_request.py +2 -1
  11. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
  12. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/rest.py +23 -4
  13. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/main.py +8 -5
  14. crypticorn-2.17.0rc2/crypticorn/client.py +330 -0
  15. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/__init__.py +1 -0
  16. crypticorn-2.17.0rc2/crypticorn/common/metrics.py +18 -0
  17. crypticorn-2.17.0rc2/crypticorn/common/middleware.py +74 -0
  18. crypticorn-2.17.0rc2/crypticorn/common/pagination.py +172 -0
  19. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/router/admin_router.py +12 -2
  20. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/utils.py +2 -1
  21. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/warnings.py +7 -0
  22. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/admin_api.py +1234 -51
  23. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/data_api.py +517 -13
  24. crypticorn-2.17.0rc2/crypticorn/hive/client/api/models_api.py +3460 -0
  25. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/status_api.py +415 -13
  26. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/api_error_identifier.py +1 -1
  27. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/rest.py +23 -4
  28. crypticorn-2.17.0rc2/crypticorn/hive/main.py +172 -0
  29. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/admin_api.py +1234 -51
  30. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/change_in_timeframe_api.py +278 -7
  31. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/funding_rates_api.py +324 -7
  32. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/ohlcv_data_api.py +399 -7
  33. crypticorn-2.17.0rc2/crypticorn/klines/client/api/status_api.py +910 -0
  34. crypticorn-2.16.0/crypticorn/klines/client/api/status_api.py → crypticorn-2.17.0rc2/crypticorn/klines/client/api/symbols_api.py +206 -213
  35. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/udf_api.py +1393 -120
  36. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/api_error_identifier.py +3 -1
  37. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/rest.py +23 -4
  38. crypticorn-2.17.0rc2/crypticorn/klines/main.py +178 -0
  39. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/admin_api.py +1234 -51
  40. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/exchanges_api.py +1405 -140
  41. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/indicators_api.py +640 -13
  42. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/logs_api.py +305 -7
  43. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/marketcap_api.py +1240 -60
  44. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/markets_api.py +352 -7
  45. crypticorn-2.16.0/crypticorn/metrics/client/api/tokens_api.py → crypticorn-2.17.0rc2/crypticorn/metrics/client/api/quote_currencies_api.py +223 -194
  46. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/status_api.py +415 -13
  47. crypticorn-2.16.0/crypticorn/trade/client/api/exchanges_api.py → crypticorn-2.17.0rc2/crypticorn/metrics/client/api/tokens_api.py +381 -222
  48. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/configuration.py +4 -2
  49. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/rest.py +23 -4
  50. crypticorn-2.17.0rc2/crypticorn/metrics/main.py +206 -0
  51. crypticorn-2.16.0/crypticorn/auth/client/api/auth_api.py → crypticorn-2.17.0rc2/crypticorn/pay/client/api/admin_api.py +1500 -1517
  52. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/now_payments_api.py +1013 -42
  53. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/payments_api.py +580 -13
  54. crypticorn-2.16.0/crypticorn/hive/client/api/models_api.py → crypticorn-2.17.0rc2/crypticorn/pay/client/api/products_api.py +1045 -963
  55. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/status_api.py +415 -13
  56. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/configuration.py +2 -2
  57. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/api_error_identifier.py +7 -7
  58. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/scope.py +1 -0
  59. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/rest.py +23 -4
  60. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/main.py +10 -6
  61. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/__init__.py +2 -1
  62. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/__init__.py +0 -1
  63. crypticorn-2.16.0/crypticorn/auth/client/api/user_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/admin_api.py +1524 -1261
  64. crypticorn-2.17.0rc2/crypticorn/trade/client/api/api_keys_api.py +2824 -0
  65. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/bots_api.py +1106 -47
  66. crypticorn-2.16.0/crypticorn/trade/client/api/futures_trading_panel_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/exchanges_api.py +548 -542
  67. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/notifications_api.py +1340 -112
  68. crypticorn-2.16.0/crypticorn/trade/client/api/status_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/orders_api.py +237 -213
  69. crypticorn-2.16.0/crypticorn/trade/client/api/trading_actions_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/status_api.py +410 -304
  70. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/strategies_api.py +1170 -69
  71. crypticorn-2.16.0/crypticorn/trade/client/api/api_keys_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/trading_actions_api.py +690 -586
  72. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/__init__.py +2 -0
  73. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange.py +6 -1
  74. crypticorn-2.17.0rc2/crypticorn/trade/client/models/exchange_key_balance.py +111 -0
  75. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/futures_balance.py +27 -25
  76. crypticorn-2.17.0rc2/crypticorn/trade/client/models/spot_balance.py +110 -0
  77. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy.py +5 -3
  78. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy_create.py +6 -4
  79. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy_exchange_info.py +16 -4
  80. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy_update.py +2 -2
  81. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/rest.py +23 -4
  82. crypticorn-2.17.0rc2/crypticorn/trade/main.py +47 -0
  83. {crypticorn-2.16.0 → crypticorn-2.17.0rc2/crypticorn.egg-info}/PKG-INFO +65 -20
  84. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/SOURCES.txt +9 -3
  85. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/requires.txt +3 -0
  86. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/pyproject.toml +1 -1
  87. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/main.txt +2 -0
  88. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/test.txt +1 -0
  89. crypticorn-2.17.0rc2/tests/test_async_client.py +189 -0
  90. crypticorn-2.16.0/tests/test_custom_session.py → crypticorn-2.17.0rc2/tests/test_async_custom_session.py +10 -10
  91. crypticorn-2.17.0rc2/tests/test_common_routers.py +111 -0
  92. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_config.py +3 -3
  93. crypticorn-2.17.0rc2/tests/test_pagination.py +161 -0
  94. crypticorn-2.17.0rc2/tests/test_sync_client.py +96 -0
  95. crypticorn-2.17.0rc2/tests/test_sync_custom_session.py +190 -0
  96. crypticorn-2.16.0/crypticorn/client.py +0 -162
  97. crypticorn-2.16.0/crypticorn/common/middleware.py +0 -28
  98. crypticorn-2.16.0/crypticorn/common/pagination.py +0 -53
  99. crypticorn-2.16.0/crypticorn/hive/main.py +0 -98
  100. crypticorn-2.16.0/crypticorn/klines/client/api/symbols_api.py +0 -283
  101. crypticorn-2.16.0/crypticorn/klines/main.py +0 -101
  102. crypticorn-2.16.0/crypticorn/metrics/client/api/quote_currencies_api.py +0 -289
  103. crypticorn-2.16.0/crypticorn/metrics/main.py +0 -112
  104. crypticorn-2.16.0/crypticorn/pay/client/api/admin_api.py +0 -1455
  105. crypticorn-2.16.0/crypticorn/pay/client/api/products_api.py +0 -1078
  106. crypticorn-2.16.0/crypticorn/trade/client/api/admin_api.py +0 -1455
  107. crypticorn-2.16.0/crypticorn/trade/client/api/orders_api.py +0 -299
  108. crypticorn-2.16.0/crypticorn/trade/main.py +0 -44
  109. crypticorn-2.16.0/tests/test_pagination.py +0 -62
  110. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/LICENSE +0 -0
  111. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/MANIFEST.in +0 -0
  112. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/__init__.py +0 -0
  113. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/__init__.py +0 -0
  114. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/__init__.py +0 -0
  115. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api_client.py +0 -0
  116. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api_response.py +0 -0
  117. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/configuration.py +0 -0
  118. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/exceptions.py +0 -0
  119. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/__init__.py +0 -0
  120. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  121. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  122. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  123. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  124. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
  125. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  126. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/create_user_request.py +0 -0
  127. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  128. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  129. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  130. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  131. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  132. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  133. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  134. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  135. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  136. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  137. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  138. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  139. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
  140. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  141. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  142. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  143. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  144. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  145. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/update_user_request.py +0 -0
  146. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
  147. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  148. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  149. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify200_response.py +0 -0
  150. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  151. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  152. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
  153. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  154. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  155. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  156. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/whoami200_response.py +0 -0
  157. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/py.typed +0 -0
  158. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/__init__.py +0 -0
  159. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/__main__.py +0 -0
  160. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/init.py +0 -0
  161. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/Dockerfile +0 -0
  162. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/__init__.py +0 -0
  163. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/auth.py +0 -0
  164. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/dependabot.yml +0 -0
  165. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/merge-env.sh +0 -0
  166. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/ruff.yml +0 -0
  167. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/version.py +0 -0
  168. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/ansi_colors.py +0 -0
  169. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/auth.py +0 -0
  170. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/decorators.py +0 -0
  171. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/enums.py +0 -0
  172. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/errors.py +0 -0
  173. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/exceptions.py +0 -0
  174. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/logging.py +0 -0
  175. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/mixins.py +0 -0
  176. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/openapi.py +0 -0
  177. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/router/status_router.py +0 -0
  178. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/scopes.py +0 -0
  179. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/urls.py +0 -0
  180. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/__init__.py +0 -0
  181. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/__init__.py +0 -0
  182. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/__init__.py +0 -0
  183. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api_client.py +0 -0
  184. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api_response.py +0 -0
  185. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/configuration.py +0 -0
  186. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/exceptions.py +0 -0
  187. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/__init__.py +0 -0
  188. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/api_error_level.py +0 -0
  189. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/api_error_type.py +0 -0
  190. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/coin_info.py +0 -0
  191. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/coins.py +0 -0
  192. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_download_response.py +0 -0
  193. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_info.py +0 -0
  194. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_options.py +0 -0
  195. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_version.py +0 -0
  196. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_version_info.py +0 -0
  197. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/download_links.py +0 -0
  198. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/evaluation.py +0 -0
  199. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  200. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/exception_detail.py +0 -0
  201. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/feature_size.py +0 -0
  202. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/log_level.py +0 -0
  203. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_create.py +0 -0
  204. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_read.py +0 -0
  205. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_status.py +0 -0
  206. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_update.py +0 -0
  207. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/target.py +0 -0
  208. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/target_info.py +0 -0
  209. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/target_type.py +0 -0
  210. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/py.typed +0 -0
  211. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/utils.py +0 -0
  212. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/__init__.py +0 -0
  213. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/__init__.py +0 -0
  214. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/__init__.py +0 -0
  215. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api_client.py +0 -0
  216. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api_response.py +0 -0
  217. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/configuration.py +0 -0
  218. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/exceptions.py +0 -0
  219. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/__init__.py +0 -0
  220. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/api_error_level.py +0 -0
  221. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/api_error_type.py +0 -0
  222. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
  223. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/exception_detail.py +0 -0
  224. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/funding_rate.py +0 -0
  225. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
  226. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/internal_exchange.py +0 -0
  227. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/log_level.py +0 -0
  228. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/market_type.py +0 -0
  229. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/ohlcv.py +0 -0
  230. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/resolution.py +0 -0
  231. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/search_symbol.py +0 -0
  232. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/sort_direction.py +0 -0
  233. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/symbol_group.py +0 -0
  234. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/symbol_info.py +0 -0
  235. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/symbol_type.py +0 -0
  236. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/timeframe.py +0 -0
  237. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/udf_config.py +0 -0
  238. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/py.typed +0 -0
  239. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/__init__.py +0 -0
  240. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/__init__.py +0 -0
  241. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/__init__.py +0 -0
  242. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api_client.py +0 -0
  243. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api_response.py +0 -0
  244. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/exceptions.py +0 -0
  245. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/__init__.py +0 -0
  246. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/api_error_identifier.py +0 -0
  247. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/api_error_level.py +0 -0
  248. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/api_error_type.py +0 -0
  249. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/exception_detail.py +0 -0
  250. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/exchange_availability.py +0 -0
  251. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
  252. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
  253. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/log_level.py +0 -0
  254. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/market_type.py +0 -0
  255. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/marketcap_ranking.py +0 -0
  256. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/marketcap_symbol_ranking.py +0 -0
  257. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/ohlcv.py +0 -0
  258. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/severity.py +0 -0
  259. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/time_interval.py +0 -0
  260. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/trading_status.py +0 -0
  261. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/py.typed +0 -0
  262. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/__init__.py +0 -0
  263. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/__init__.py +0 -0
  264. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/__init__.py +0 -0
  265. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api_client.py +0 -0
  266. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api_response.py +0 -0
  267. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/exceptions.py +0 -0
  268. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/__init__.py +0 -0
  269. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/api_error_level.py +0 -0
  270. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/api_error_type.py +0 -0
  271. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/exception_detail.py +0 -0
  272. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/log_level.py +0 -0
  273. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  274. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  275. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/payment.py +0 -0
  276. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/payment_status.py +0 -0
  277. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/product.py +0 -0
  278. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/product_create.py +0 -0
  279. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/product_update.py +0 -0
  280. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/provider.py +0 -0
  281. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/subscription.py +0 -0
  282. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/py.typed +0 -0
  283. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/__init__.py +0 -0
  284. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api_client.py +0 -0
  285. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api_response.py +0 -0
  286. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/configuration.py +0 -0
  287. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/exceptions.py +0 -0
  288. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/api_error_identifier.py +0 -0
  289. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/api_error_level.py +0 -0
  290. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/api_error_type.py +0 -0
  291. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot.py +0 -0
  292. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot_create.py +0 -0
  293. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot_status.py +0 -0
  294. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot_update.py +0 -0
  295. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exception_detail.py +0 -0
  296. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange_key.py +0 -0
  297. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange_key_create.py +0 -0
  298. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange_key_update.py +0 -0
  299. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/execution_ids.py +0 -0
  300. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  301. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/futures_trading_action_create.py +0 -0
  302. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/log_level.py +0 -0
  303. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/margin_mode.py +0 -0
  304. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/market_type.py +0 -0
  305. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/notification.py +0 -0
  306. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/notification_create.py +0 -0
  307. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/notification_update.py +0 -0
  308. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/order.py +0 -0
  309. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/order_status.py +0 -0
  310. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  311. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/spot_trading_action_create.py +0 -0
  312. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/tpsl.py +0 -0
  313. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/tpsl_create.py +0 -0
  314. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  315. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/py.typed +0 -0
  316. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/dependency_links.txt +0 -0
  317. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/entry_points.txt +0 -0
  318. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/top_level.txt +0 -0
  319. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/dev.txt +0 -0
  320. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/extra.txt +0 -0
  321. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/setup.cfg +0 -0
  322. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/favicon.svg +0 -0
  323. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/logo.svg +0 -0
  324. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/pip-structure.drawio +0 -0
  325. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/pip-structure.svg +0 -0
  326. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_auth_client.py +0 -0
  327. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_enums.py +0 -0
  328. {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_errors.py +0 -0
@@ -1,6 +1,39 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.17.0-rc.2 (2025-06-05)
5
+
6
+ ### Documentation
7
+
8
+ - Document SyncClient support
9
+ ([`8935d22`](https://github.com/crypticorn-ai/api-client/commit/8935d221afe6cb6da2529a05341e104b98bb9fbb))
10
+
11
+ ### Features
12
+
13
+ - Add support for pagination, sorting and filtering query parameters
14
+ ([`3afcf2b`](https://github.com/crypticorn-ai/api-client/commit/3afcf2bb8eff65a1c38c738f19e7480550f91798))
15
+
16
+ - Add support for synchronous usage with `SyncClient`. Both API clients are compatible with each
17
+ other.
18
+ ([`02e7622`](https://github.com/crypticorn-ai/api-client/commit/02e7622669bd590a853b12c9aa10183db06a73f1))
19
+
20
+ - Deprecate ApiClient for Async and SyncClient
21
+ ([`a00b450`](https://github.com/crypticorn-ai/api-client/commit/a00b4502197fb2287aca893042d197d5f9811076))
22
+
23
+ ### Testing
24
+
25
+ - Improve tests for pagination query params
26
+ ([`de1f82a`](https://github.com/crypticorn-ai/api-client/commit/de1f82ae6f5461e172459ec4558dd29c0b2646ad))
27
+
28
+
29
+ ## v2.17.0-rc.1 (2025-06-01)
30
+
31
+ ### Features
32
+
33
+ - Add metrics router
34
+ ([`9b4a9bd`](https://github.com/crypticorn-ai/api-client/commit/9b4a9bd33e16d70d4338f7d458e2d405cb1d22dd))
35
+
36
+
4
37
  ## v2.16.0 (2025-05-31)
5
38
 
6
39
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.16.0
3
+ Version: 2.17.0rc2
4
4
  Summary: Maximise Your Crypto Trading Profits with Machine Learning
5
5
  Author-email: Crypticorn <timon@crypticorn.com>
6
6
  License-Expression: MIT
@@ -25,6 +25,8 @@ Requires-Dist: click<9.0.0,>=8.0.0
25
25
  Requires-Dist: psutil<8.0.0,>=7.0.0
26
26
  Requires-Dist: setuptools<81.0.0,>=80.0.0
27
27
  Requires-Dist: strenum
28
+ Requires-Dist: prometheus-client<1.0.0,>=0.22.0
29
+ Requires-Dist: asgiref<4.0.0,>=3.6.0
28
30
  Requires-Dist: urllib3<3.0.0,>=1.25.3
29
31
  Requires-Dist: python_dateutil<3.0.0,>=2.8.2
30
32
  Requires-Dist: aiohttp<4.0.0,>=3.8.4
@@ -49,6 +51,7 @@ Requires-Dist: pytest-asyncio==0.26.0; extra == "test"
49
51
  Requires-Dist: pytest-cov==6.1.1; extra == "test"
50
52
  Requires-Dist: python-dotenv==1.0.1; extra == "test"
51
53
  Requires-Dist: PyJWT==2.10.0; extra == "test"
54
+ Requires-Dist: httpx>=0.27.0; extra == "test"
52
55
  Provides-Extra: extra
53
56
  Requires-Dist: pandas<3.0.0,>=2.2.0; extra == "extra"
54
57
  Dynamic: license-file
@@ -78,11 +81,15 @@ You can install extra dependencies grouped in the extras `extra`, `dev` (develop
78
81
 
79
82
  ## Structure
80
83
 
81
- Our API is available as an asynchronous Python SDK. The main entry point you need is the `ApiClient` class, which you would import like this:
84
+ Our API is available as both an asynchronous and synchronous Python SDK. The main entry points are:
85
+
86
+ - `AsyncClient` - Asynchronous client for async/await usage
87
+ - `SyncClient` - Synchronous client for traditional blocking calls
88
+
82
89
  ```python
83
- from crypticorn import ApiClient
90
+ from crypticorn import AsyncClient, SyncClient
84
91
  ```
85
- The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
92
+ Both clients serve as the central interface for API operations and instantiate multiple API wrappers corresponding to our micro services. These are structured the following:
86
93
 
87
94
  <img src="static/pip-structure.svg" alt="pip package structure" />
88
95
 
@@ -110,20 +117,22 @@ There are scopes which don't follow this structure. Those are either scopes that
110
117
 
111
118
  ## Basic Usage
112
119
 
113
- You can use the client with the async context protocol...
120
+ ### Asynchronous Client
121
+
122
+ You can use the async client with the context manager protocol...
114
123
  ```python
115
- async with ApiClient(api_key="your-api-key") as client:
116
- await client.pay.products.get_products()
124
+ async with AsyncClient(api_key="your-api-key") as client:
125
+ await client.pay.products.get_products()
117
126
  ```
118
127
  ...or without it like this...
119
128
  ```python
120
- client = ApiClient(api_key="your-api-key")
121
- asyncio.run(client.pay.models.get_products())
129
+ client = AsyncClient(api_key="your-api-key")
130
+ asyncio.run(client.pay.products.get_products())
122
131
  asyncio.run(client.close())
123
132
  ```
124
133
  ...or this.
125
134
  ```python
126
- client = ApiClient(api_key="your-api-key")
135
+ client = AsyncClient(api_key="your-api-key")
127
136
 
128
137
  async def main():
129
138
  await client.pay.products.get_products()
@@ -132,6 +141,29 @@ asyncio.run(main())
132
141
  asyncio.run(client.close())
133
142
  ```
134
143
 
144
+ ### Synchronous Client
145
+
146
+ For traditional synchronous usage without async/await, use the `SyncClient`:
147
+
148
+ ```python
149
+ from crypticorn import SyncClient
150
+
151
+ # With context manager (recommended)
152
+ with SyncClient(api_key="your-api-key") as client:
153
+ products = client.pay.products.get_products()
154
+ status = client.trade.status.ping()
155
+
156
+ # Or without context manager
157
+ client = SyncClient(api_key="your-api-key")
158
+ try:
159
+ products = client.pay.products.get_products()
160
+ status = client.trade.status.ping()
161
+ finally:
162
+ client.close() # Manual cleanup required
163
+ ```
164
+
165
+ The sync client provides the same API surface as the async client, but all methods return results directly instead of coroutines. Under the hood, it uses `asgiref.async_to_sync` to bridge async operations to synchronous calls, ensuring reliable operation without requiring async/await syntax.
166
+
135
167
  ## Response Types
136
168
 
137
169
  There are three different available output formats you can choose from:
@@ -139,7 +171,10 @@ There are three different available output formats you can choose from:
139
171
  ### Serialized Response
140
172
  You can get fully serialized responses as pydantic models. Using this, you get the full benefits of pydantic's type checking.
141
173
  ```python
174
+ # Async client
142
175
  res = await client.pay.products.get_products()
176
+ # Sync client
177
+ res = client.pay.products.get_products()
143
178
  print(res)
144
179
  ```
145
180
  The output would look like this:
@@ -149,7 +184,10 @@ The output would look like this:
149
184
 
150
185
  ### Serialized Response with HTTP Info
151
186
  ```python
187
+ # Async client
152
188
  res = await client.pay.products.get_products_with_http_info()
189
+ # Sync client
190
+ res = client.pay.products.get_products_with_http_info()
153
191
  print(res)
154
192
  ```
155
193
  The output would look like this:
@@ -170,8 +208,12 @@ print(res.headers)
170
208
  ### JSON Response
171
209
  You can receive a classical JSON response by suffixing the function name with `_without_preload_content`
172
210
  ```python
211
+ # Async client
173
212
  response = await client.pay.products.get_products_without_preload_content()
174
213
  print(await response.json())
214
+
215
+ # Sync client - Note: use regular methods instead as response.json() returns a coroutine
216
+ response = client.pay.products.get_products_without_preload_content()
175
217
  ```
176
218
  The output would look like this:
177
219
  ```python
@@ -201,33 +243,34 @@ To override e.g. the host for the Hive client to connect to localhost:8000 inste
201
243
  from crypticorn.hive import Configuration as HiveConfig
202
244
  from crypticorn.common import Service
203
245
 
204
- async with ApiClient() as client:
246
+ # Async client
247
+ async with AsyncClient() as client:
248
+ client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
249
+
250
+ # Sync client
251
+ with SyncClient() as client:
205
252
  client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
206
253
  ```
207
254
 
208
255
  ### Session Management
209
256
 
210
- By default, `ApiClient` manages a single shared `aiohttp.ClientSession` for all service wrappers.
257
+ By default, `AsyncClient` manages a single shared `aiohttp.ClientSession` for all service wrappers.
211
258
  However, you can pass your own pre-configured `aiohttp.ClientSession` if you need advanced control — for example, to add retries, custom headers, logging, or mocking behavior.
212
259
 
213
260
  When you inject a custom session, you are responsible for managing its lifecycle, including closing when you're done.
214
261
 
215
262
  ```python
216
263
  import aiohttp
217
- from crypticorn import ApiClient
264
+ from crypticorn import AsyncClient
218
265
 
219
266
  async def main():
220
267
  custom_session = aiohttp.ClientSession()
221
- async with ApiClient(api_key="your-key", http_client=custom_session) as client:
268
+ async with AsyncClient(api_key="your-key", http_client=custom_session) as client:
222
269
  await client.trade.status.ping()
223
270
  await custom_session.close()
224
- # or
225
- custom_session = aiohttp.ClientSession()
226
- client = ApiClient(api_key="your-key", http_client=custom_session)
227
- await client.trade.status.ping()
228
- await custom_session.close()
271
+
229
272
  ```
230
- If you don’t pass a session, `ApiClient` will create and manage one internally. In that case, it will be automatically closed when using `async with` or when calling `await client.close()` manually.
273
+ If you don’t pass a session, `AsyncClient` will create and manage one internally. In that case, it will be automatically closed when using `async with` or when calling `await client.close()` manually.
231
274
 
232
275
  ### Disable Logging
233
276
 
@@ -237,3 +280,5 @@ In case you don't want any logging statements by the `crypticorn` logger to be l
237
280
  from crypticorn.common import disable_logging
238
281
  disable_logging()
239
282
  ```
283
+
284
+ **Note on Sync Client**: The `SyncClient` uses per-operation sessions (creates and closes a session for each API call) to ensure reliable synchronous behavior. Custom sessions are accepted but not used. This approach prevents event loop conflicts at the cost of slightly higher overhead per operation.
@@ -23,11 +23,15 @@ You can install extra dependencies grouped in the extras `extra`, `dev` (develop
23
23
 
24
24
  ## Structure
25
25
 
26
- Our API is available as an asynchronous Python SDK. The main entry point you need is the `ApiClient` class, which you would import like this:
26
+ Our API is available as both an asynchronous and synchronous Python SDK. The main entry points are:
27
+
28
+ - `AsyncClient` - Asynchronous client for async/await usage
29
+ - `SyncClient` - Synchronous client for traditional blocking calls
30
+
27
31
  ```python
28
- from crypticorn import ApiClient
32
+ from crypticorn import AsyncClient, SyncClient
29
33
  ```
30
- The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
34
+ Both clients serve as the central interface for API operations and instantiate multiple API wrappers corresponding to our micro services. These are structured the following:
31
35
 
32
36
  <img src="static/pip-structure.svg" alt="pip package structure" />
33
37
 
@@ -55,20 +59,22 @@ There are scopes which don't follow this structure. Those are either scopes that
55
59
 
56
60
  ## Basic Usage
57
61
 
58
- You can use the client with the async context protocol...
62
+ ### Asynchronous Client
63
+
64
+ You can use the async client with the context manager protocol...
59
65
  ```python
60
- async with ApiClient(api_key="your-api-key") as client:
61
- await client.pay.products.get_products()
66
+ async with AsyncClient(api_key="your-api-key") as client:
67
+ await client.pay.products.get_products()
62
68
  ```
63
69
  ...or without it like this...
64
70
  ```python
65
- client = ApiClient(api_key="your-api-key")
66
- asyncio.run(client.pay.models.get_products())
71
+ client = AsyncClient(api_key="your-api-key")
72
+ asyncio.run(client.pay.products.get_products())
67
73
  asyncio.run(client.close())
68
74
  ```
69
75
  ...or this.
70
76
  ```python
71
- client = ApiClient(api_key="your-api-key")
77
+ client = AsyncClient(api_key="your-api-key")
72
78
 
73
79
  async def main():
74
80
  await client.pay.products.get_products()
@@ -77,6 +83,29 @@ asyncio.run(main())
77
83
  asyncio.run(client.close())
78
84
  ```
79
85
 
86
+ ### Synchronous Client
87
+
88
+ For traditional synchronous usage without async/await, use the `SyncClient`:
89
+
90
+ ```python
91
+ from crypticorn import SyncClient
92
+
93
+ # With context manager (recommended)
94
+ with SyncClient(api_key="your-api-key") as client:
95
+ products = client.pay.products.get_products()
96
+ status = client.trade.status.ping()
97
+
98
+ # Or without context manager
99
+ client = SyncClient(api_key="your-api-key")
100
+ try:
101
+ products = client.pay.products.get_products()
102
+ status = client.trade.status.ping()
103
+ finally:
104
+ client.close() # Manual cleanup required
105
+ ```
106
+
107
+ The sync client provides the same API surface as the async client, but all methods return results directly instead of coroutines. Under the hood, it uses `asgiref.async_to_sync` to bridge async operations to synchronous calls, ensuring reliable operation without requiring async/await syntax.
108
+
80
109
  ## Response Types
81
110
 
82
111
  There are three different available output formats you can choose from:
@@ -84,7 +113,10 @@ There are three different available output formats you can choose from:
84
113
  ### Serialized Response
85
114
  You can get fully serialized responses as pydantic models. Using this, you get the full benefits of pydantic's type checking.
86
115
  ```python
116
+ # Async client
87
117
  res = await client.pay.products.get_products()
118
+ # Sync client
119
+ res = client.pay.products.get_products()
88
120
  print(res)
89
121
  ```
90
122
  The output would look like this:
@@ -94,7 +126,10 @@ The output would look like this:
94
126
 
95
127
  ### Serialized Response with HTTP Info
96
128
  ```python
129
+ # Async client
97
130
  res = await client.pay.products.get_products_with_http_info()
131
+ # Sync client
132
+ res = client.pay.products.get_products_with_http_info()
98
133
  print(res)
99
134
  ```
100
135
  The output would look like this:
@@ -115,8 +150,12 @@ print(res.headers)
115
150
  ### JSON Response
116
151
  You can receive a classical JSON response by suffixing the function name with `_without_preload_content`
117
152
  ```python
153
+ # Async client
118
154
  response = await client.pay.products.get_products_without_preload_content()
119
155
  print(await response.json())
156
+
157
+ # Sync client - Note: use regular methods instead as response.json() returns a coroutine
158
+ response = client.pay.products.get_products_without_preload_content()
120
159
  ```
121
160
  The output would look like this:
122
161
  ```python
@@ -146,33 +185,34 @@ To override e.g. the host for the Hive client to connect to localhost:8000 inste
146
185
  from crypticorn.hive import Configuration as HiveConfig
147
186
  from crypticorn.common import Service
148
187
 
149
- async with ApiClient() as client:
188
+ # Async client
189
+ async with AsyncClient() as client:
190
+ client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
191
+
192
+ # Sync client
193
+ with SyncClient() as client:
150
194
  client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
151
195
  ```
152
196
 
153
197
  ### Session Management
154
198
 
155
- By default, `ApiClient` manages a single shared `aiohttp.ClientSession` for all service wrappers.
199
+ By default, `AsyncClient` manages a single shared `aiohttp.ClientSession` for all service wrappers.
156
200
  However, you can pass your own pre-configured `aiohttp.ClientSession` if you need advanced control — for example, to add retries, custom headers, logging, or mocking behavior.
157
201
 
158
202
  When you inject a custom session, you are responsible for managing its lifecycle, including closing when you're done.
159
203
 
160
204
  ```python
161
205
  import aiohttp
162
- from crypticorn import ApiClient
206
+ from crypticorn import AsyncClient
163
207
 
164
208
  async def main():
165
209
  custom_session = aiohttp.ClientSession()
166
- async with ApiClient(api_key="your-key", http_client=custom_session) as client:
210
+ async with AsyncClient(api_key="your-key", http_client=custom_session) as client:
167
211
  await client.trade.status.ping()
168
212
  await custom_session.close()
169
- # or
170
- custom_session = aiohttp.ClientSession()
171
- client = ApiClient(api_key="your-key", http_client=custom_session)
172
- await client.trade.status.ping()
173
- await custom_session.close()
213
+
174
214
  ```
175
- If you don’t pass a session, `ApiClient` will create and manage one internally. In that case, it will be automatically closed when using `async with` or when calling `await client.close()` manually.
215
+ If you don’t pass a session, `AsyncClient` will create and manage one internally. In that case, it will be automatically closed when using `async with` or when calling `await client.close()` manually.
176
216
 
177
217
  ### Disable Logging
178
218
 
@@ -181,4 +221,6 @@ In case you don't want any logging statements by the `crypticorn` logger to be l
181
221
  ```python
182
222
  from crypticorn.common import disable_logging
183
223
  disable_logging()
184
- ```
224
+ ```
225
+
226
+ **Note on Sync Client**: The `SyncClient` uses per-operation sessions (creates and closes a session for each API call) to ensure reliable synchronous behavior. Custom sessions are accepted but not used. This approach prevents event loop conflicts at the cost of slightly higher overhead per operation.
@@ -14,6 +14,6 @@ warnings.filterwarnings("default", "", DeprecationWarning)
14
14
  configure_logging()
15
15
  logging.captureWarnings(True)
16
16
 
17
- from crypticorn.client import ApiClient
17
+ from crypticorn.client import AsyncClient, SyncClient, ApiClient
18
18
 
19
- __all__ = ["ApiClient"]
19
+ __all__ = ["AsyncClient", "SyncClient", "ApiClient"]