crypticorn 2.3.0__tar.gz → 2.4.0__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 (288) hide show
  1. {crypticorn-2.3.0 → crypticorn-2.4.0}/PKG-INFO +2 -1
  2. crypticorn-2.4.0/crypticorn/cli/__init__.py +3 -0
  3. crypticorn-2.4.0/crypticorn/cli/__main__.py +14 -0
  4. crypticorn-2.4.0/crypticorn/cli/init.py +86 -0
  5. crypticorn-2.4.0/crypticorn/cli/templates/auth.py +34 -0
  6. crypticorn-2.4.0/crypticorn/common/enums.py +48 -0
  7. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/scopes.py +12 -2
  8. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/__init__.py +1 -1
  9. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/api_keys_api.py +41 -41
  10. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/__init__.py +1 -1
  11. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/api_error_identifier.py +11 -6
  12. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/exchange.py +1 -1
  13. crypticorn-2.4.0/crypticorn/trade/client/models/exchange_key_model.py +156 -0
  14. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/market_type.py +1 -1
  15. crypticorn-2.4.0/crypticorn/trade/client/py.typed +0 -0
  16. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/main.py +1 -1
  17. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn.egg-info/PKG-INFO +2 -1
  18. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn.egg-info/SOURCES.txt +8 -0
  19. crypticorn-2.4.0/crypticorn.egg-info/entry_points.txt +2 -0
  20. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn.egg-info/requires.txt +1 -0
  21. {crypticorn-2.3.0 → crypticorn-2.4.0}/pyproject.toml +4 -1
  22. {crypticorn-2.3.0 → crypticorn-2.4.0}/requirements/main.txt +1 -0
  23. crypticorn-2.4.0/tests/test_enums.py +42 -0
  24. crypticorn-2.3.0/crypticorn/common/enums.py +0 -28
  25. {crypticorn-2.3.0 → crypticorn-2.4.0}/README.md +0 -0
  26. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/__init__.py +0 -0
  27. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/__init__.py +0 -0
  28. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/__init__.py +0 -0
  29. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api/__init__.py +0 -0
  30. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api/admin_api.py +0 -0
  31. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api/auth_api.py +0 -0
  32. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api/service_api.py +0 -0
  33. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api/user_api.py +0 -0
  34. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api/wallet_api.py +0 -0
  35. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api_client.py +0 -0
  36. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/api_response.py +0 -0
  37. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/configuration.py +0 -0
  38. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/exceptions.py +0 -0
  39. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/__init__.py +0 -0
  40. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  41. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  42. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  43. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  44. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
  45. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  46. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/create_api_key_request.py +0 -0
  47. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/create_user_request.py +0 -0
  48. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +0 -0
  49. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  50. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  51. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  52. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  53. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  54. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  55. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  56. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  57. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  58. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  59. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  60. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  61. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
  62. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  63. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  64. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  65. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  66. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  67. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/update_user_request.py +0 -0
  68. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  69. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  70. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/verify200_response.py +0 -0
  71. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  72. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  73. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
  74. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  75. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  76. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  77. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/models/whoami200_response.py +0 -0
  78. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/py.typed +0 -0
  79. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/client/rest.py +0 -0
  80. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/auth/main.py +0 -0
  81. /crypticorn-2.3.0/crypticorn/hive/client/py.typed → /crypticorn-2.4.0/crypticorn/cli/templates/__init__.py +0 -0
  82. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/client.py +0 -0
  83. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/__init__.py +0 -0
  84. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/auth.py +0 -0
  85. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/errors.py +0 -0
  86. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/pydantic.py +0 -0
  87. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/sorter.py +0 -0
  88. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/common/urls.py +0 -0
  89. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/__init__.py +0 -0
  90. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/__init__.py +0 -0
  91. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/api/__init__.py +0 -0
  92. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/api/data_api.py +0 -0
  93. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/api/models_api.py +0 -0
  94. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/api/status_api.py +0 -0
  95. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/api_client.py +0 -0
  96. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/api_response.py +0 -0
  97. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/configuration.py +0 -0
  98. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/exceptions.py +0 -0
  99. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/__init__.py +0 -0
  100. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/coins.py +0 -0
  101. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/data_download_response.py +0 -0
  102. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/data_info.py +0 -0
  103. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/data_value_value_value_inner.py +0 -0
  104. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/data_version.py +0 -0
  105. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/download_links.py +0 -0
  106. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/evaluation.py +0 -0
  107. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  108. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/feature_size.py +0 -0
  109. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/http_validation_error.py +0 -0
  110. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/model.py +0 -0
  111. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/model_create.py +0 -0
  112. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/model_status.py +0 -0
  113. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/model_update.py +0 -0
  114. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/target.py +0 -0
  115. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/target_type.py +0 -0
  116. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/validation_error.py +0 -0
  117. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/models/validation_error_loc_inner.py +0 -0
  118. {crypticorn-2.3.0/crypticorn/klines → crypticorn-2.4.0/crypticorn/hive}/client/py.typed +0 -0
  119. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/client/rest.py +0 -0
  120. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/hive/main.py +0 -0
  121. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/__init__.py +0 -0
  122. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/__init__.py +0 -0
  123. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api/__init__.py +0 -0
  124. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
  125. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api/health_check_api.py +0 -0
  126. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
  127. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api/symbols_api.py +0 -0
  128. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api/udf_api.py +0 -0
  129. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api_client.py +0 -0
  130. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/api_response.py +0 -0
  131. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/configuration.py +0 -0
  132. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/exceptions.py +0 -0
  133. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/__init__.py +0 -0
  134. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/base_response_health_check_response.py +0 -0
  135. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/base_response_list_funding_rate_response.py +0 -0
  136. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/base_response_list_str.py +0 -0
  137. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/base_response_ohlcv_response.py +0 -0
  138. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/error_response.py +0 -0
  139. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/exchange.py +0 -0
  140. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
  141. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/health_check_response.py +0 -0
  142. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/history_error_response.py +0 -0
  143. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/history_no_data_response.py +0 -0
  144. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/history_success_response.py +0 -0
  145. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/http_validation_error.py +0 -0
  146. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/market.py +0 -0
  147. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/ohlcv_response.py +0 -0
  148. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/resolution.py +0 -0
  149. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/response_get_history_udf_history_get.py +0 -0
  150. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/search_symbol_response.py +0 -0
  151. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/sort_direction.py +0 -0
  152. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/symbol_group_response.py +0 -0
  153. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/symbol_info_response.py +0 -0
  154. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/symbol_type.py +0 -0
  155. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/timeframe.py +0 -0
  156. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/udf_config_response.py +0 -0
  157. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/validation_error.py +0 -0
  158. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/models/validation_error_loc_inner.py +0 -0
  159. {crypticorn-2.3.0/crypticorn/metrics → crypticorn-2.4.0/crypticorn/klines}/client/py.typed +0 -0
  160. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/client/rest.py +0 -0
  161. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/klines/main.py +0 -0
  162. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/__init__.py +0 -0
  163. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/__init__.py +0 -0
  164. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/__init__.py +0 -0
  165. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
  166. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/health_check_api.py +0 -0
  167. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/indicators_api.py +0 -0
  168. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/logs_api.py +0 -0
  169. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
  170. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/markets_api.py +0 -0
  171. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api/tokens_api.py +0 -0
  172. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api_client.py +0 -0
  173. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/api_response.py +0 -0
  174. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/configuration.py +0 -0
  175. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/exceptions.py +0 -0
  176. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/__init__.py +0 -0
  177. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/base_response_dict.py +0 -0
  178. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/base_response_health_check_response.py +0 -0
  179. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/base_response_list_dict.py +0 -0
  180. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/base_response_list_exchange_mapping.py +0 -0
  181. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/base_response_list_str.py +0 -0
  182. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/error_response.py +0 -0
  183. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
  184. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/health_check_response.py +0 -0
  185. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/http_validation_error.py +0 -0
  186. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/market.py +0 -0
  187. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/severity.py +0 -0
  188. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/validation_error.py +0 -0
  189. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/models/validation_error_loc_inner.py +0 -0
  190. {crypticorn-2.3.0/crypticorn/pay → crypticorn-2.4.0/crypticorn/metrics}/client/py.typed +0 -0
  191. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/client/rest.py +0 -0
  192. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/metrics/main.py +0 -0
  193. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/__init__.py +0 -0
  194. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/__init__.py +0 -0
  195. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api/__init__.py +0 -0
  196. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api/now_payments_api.py +0 -0
  197. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api/payments_api.py +0 -0
  198. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api/products_api.py +0 -0
  199. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api/status_api.py +0 -0
  200. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api_client.py +0 -0
  201. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/api_response.py +0 -0
  202. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/configuration.py +0 -0
  203. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/exceptions.py +0 -0
  204. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/__init__.py +0 -0
  205. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/api_status_res.py +0 -0
  206. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/body_create_now_invoice.py +0 -0
  207. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/body_create_product.py +0 -0
  208. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/body_get_products.py +0 -0
  209. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/body_handle_now_webhook.py +0 -0
  210. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/body_update_product.py +0 -0
  211. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/combined_payment_history.py +0 -0
  212. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/create_invoice_req.py +0 -0
  213. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/create_invoice_res.py +0 -0
  214. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/currency.py +0 -0
  215. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/estimate_price_req.py +0 -0
  216. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/estimate_price_res.py +0 -0
  217. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/get_currencies_res.py +0 -0
  218. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/get_payment_status_res.py +0 -0
  219. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/get_payments_list_res.py +0 -0
  220. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/http_validation_error.py +0 -0
  221. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/min_amount_req.py +0 -0
  222. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/min_amount_res.py +0 -0
  223. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_api_status_res.py +0 -0
  224. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  225. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  226. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_fee_structure.py +0 -0
  227. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_payment_model.py +0 -0
  228. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_payment_status.py +0 -0
  229. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/now_webhook_payload.py +0 -0
  230. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/partial_product_update_model.py +0 -0
  231. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/payment.py +0 -0
  232. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/payment_status.py +0 -0
  233. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/product.py +0 -0
  234. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/product_model.py +0 -0
  235. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/product_subs_model.py +0 -0
  236. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/product_update_model.py +0 -0
  237. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/scope.py +0 -0
  238. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/services.py +0 -0
  239. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/unified_payment_model.py +0 -0
  240. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/validation_error.py +0 -0
  241. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/models/validation_error_loc_inner.py +0 -0
  242. {crypticorn-2.3.0/crypticorn/trade → crypticorn-2.4.0/crypticorn/pay}/client/py.typed +0 -0
  243. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/client/rest.py +0 -0
  244. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/pay/main.py +0 -0
  245. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/__init__.py +0 -0
  246. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/__init__.py +0 -0
  247. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/bots_api.py +0 -0
  248. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/exchanges_api.py +0 -0
  249. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
  250. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/notifications_api.py +0 -0
  251. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/orders_api.py +0 -0
  252. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/status_api.py +0 -0
  253. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/strategies_api.py +0 -0
  254. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
  255. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api_client.py +0 -0
  256. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/api_response.py +0 -0
  257. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/configuration.py +0 -0
  258. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/exceptions.py +0 -0
  259. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/action_model.py +0 -0
  260. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/api_error_level.py +0 -0
  261. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/api_error_type.py +0 -0
  262. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/api_key_model.py +0 -0
  263. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/bot_model.py +0 -0
  264. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/bot_status.py +0 -0
  265. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/execution_ids.py +0 -0
  266. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/futures_balance.py +0 -0
  267. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  268. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/http_validation_error.py +0 -0
  269. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/margin_mode.py +0 -0
  270. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/notification_model.py +0 -0
  271. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/order_model.py +0 -0
  272. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/order_status.py +0 -0
  273. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  274. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
  275. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
  276. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
  277. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/tpsl.py +0 -0
  278. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  279. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/validation_error.py +0 -0
  280. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/models/validation_error_loc_inner.py +0 -0
  281. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn/trade/client/rest.py +0 -0
  282. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn.egg-info/dependency_links.txt +0 -0
  283. {crypticorn-2.3.0 → crypticorn-2.4.0}/crypticorn.egg-info/top_level.txt +0 -0
  284. {crypticorn-2.3.0 → crypticorn-2.4.0}/requirements/dev.txt +0 -0
  285. {crypticorn-2.3.0 → crypticorn-2.4.0}/requirements/test.txt +0 -0
  286. {crypticorn-2.3.0 → crypticorn-2.4.0}/setup.cfg +0 -0
  287. {crypticorn-2.3.0 → crypticorn-2.4.0}/tests/test_auth_client.py +0 -0
  288. {crypticorn-2.3.0 → crypticorn-2.4.0}/tests/test_errors.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: Maximise Your Crypto Trading Profits with AI Predictions
5
5
  Author-email: Crypticorn <timon@crypticorn.com>
6
6
  Project-URL: Homepage, https://crypticorn.com
@@ -14,6 +14,7 @@ Classifier: Typing :: Typed
14
14
  Requires-Python: >=3.10
15
15
  Description-Content-Type: text/markdown
16
16
  Requires-Dist: fastapi
17
+ Requires-Dist: click
17
18
  Requires-Dist: urllib3<3.0.0,>=1.25.3
18
19
  Requires-Dist: python_dateutil<3.0.0,>=2.8.2
19
20
  Requires-Dist: aiohttp<4.0.0,>=3.8.4
@@ -0,0 +1,3 @@
1
+ from crypticorn.cli.init import init_group
2
+
3
+ __all__ = ["init_group"]
@@ -0,0 +1,14 @@
1
+ # crypticorn/cli.py
2
+
3
+ import click
4
+ from crypticorn.cli import init_group
5
+
6
+ @click.group()
7
+ def cli():
8
+ """🧙 Crypticorn CLI — magic for our microservices."""
9
+ pass
10
+
11
+ cli.add_command(init_group, name="init")
12
+
13
+ if __name__ == "__main__":
14
+ cli()
@@ -0,0 +1,86 @@
1
+ import click
2
+ from pathlib import Path
3
+ import subprocess
4
+ import importlib.resources as pkg_resources
5
+ import crypticorn.cli.templates as templates
6
+
7
+ def get_git_root() -> Path:
8
+ '''Get the root directory of the git repository.'''
9
+ try:
10
+ return Path(subprocess.check_output(["git", "rev-parse", "--show-toplevel"], text=True).strip())
11
+ except Exception:
12
+ return Path.cwd()
13
+
14
+ def copy_template(template_name: str, target_path: Path):
15
+ '''Copy a template file to the target path.'''
16
+ with pkg_resources.files(templates).joinpath(template_name).open("r") as template_file:
17
+ content = template_file.read()
18
+
19
+ target_path.parent.mkdir(parents=True, exist_ok=True)
20
+ with target_path.open("w") as f:
21
+ f.write(content)
22
+
23
+ click.secho(f"✅ Created: {target_path}", fg="green")
24
+
25
+ @click.group()
26
+ def init_group():
27
+ """Initialize files like CI configs, linters, etc."""
28
+ pass
29
+
30
+ @init_group.command("ruff")
31
+ @click.option('-f', '--force', is_flag=True, help='Force overwrite the ruff.yml')
32
+ def init_ruff(force):
33
+ """Add .github/workflows/ruff.yml"""
34
+ root = get_git_root()
35
+ target = root / ".github/workflows/ruff.yml"
36
+ if target.exists() and not force:
37
+ click.secho("File already exists, use --force / -f to overwrite", fg="red")
38
+ return
39
+ copy_template("ruff.yml", target)
40
+
41
+ @init_group.command("docker")
42
+ @click.option('-o', '--output', type=click.Path(), help='Custom output path for the Dockerfile')
43
+ @click.option('-f', '--force', is_flag=True, help='Force overwrite the Dockerfile')
44
+ def init_docker(output, force):
45
+ """Add Dockerfile"""
46
+ root = get_git_root()
47
+ target = Path(output) if output else root / "Dockerfile"
48
+ if target.exists() and not force:
49
+ click.secho("File already exists, use --force / -f to overwrite", fg="red")
50
+ return
51
+ copy_template("Dockerfile", target)
52
+ click.secho("Make sure to update the Dockerfile", fg="yellow")
53
+
54
+ @init_group.command("auth")
55
+ @click.option('-o', '--output', type=click.Path(), help='Custom output path for the auth handler')
56
+ @click.option('-f', '--force', is_flag=True, help='Force overwrite the auth handler')
57
+ def init_auth(output, force):
58
+ """Add auth.py with auth handler. Everything you need to start using the auth service."""
59
+ root = get_git_root()
60
+ if Path(output).is_dir():
61
+ click.secho("Output path is a directory, please provide a file path", fg="red")
62
+ return
63
+ target = Path(output) if output else root / "src/auth.py"
64
+ if target.exists() and not force:
65
+ click.secho("File already exists, use --force / -f to overwrite", fg="red")
66
+ return
67
+ copy_template("auth.py", target)
68
+ click.secho('''
69
+ Make sure to update the .env file with:
70
+ IS_DOCKER=0
71
+ API_ENV=local
72
+ and the docker-compose.yml file with:
73
+ environment:
74
+ - IS_DOCKER=1
75
+ ''', fg="yellow")
76
+
77
+ @init_group.command("dependabot")
78
+ @click.option('-f', '--force', is_flag=True, help='Force overwrite the dependabot.yml')
79
+ def init_dependabot(force):
80
+ """Add dependabot.yml"""
81
+ root = get_git_root()
82
+ target = root / ".github/dependabot.yml"
83
+ if target.exists() and not force:
84
+ click.secho("File already exists, use --force / -f to overwrite", fg="red")
85
+ return
86
+ copy_template("dependabot.yml", target)
@@ -0,0 +1,34 @@
1
+ from crypticorn.common import (
2
+ AuthHandler as AuthHandler,
3
+ Scope as Scope,
4
+ Verify200Response as Verify200Response,
5
+ BaseUrl as BaseUrl,
6
+ ApiEnv as ApiEnv,
7
+ )
8
+ from fastapi import Security as Security
9
+ import os
10
+ import dotenv
11
+ import logging
12
+
13
+ dotenv.load_dotenv()
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+ DOCKER_ENV = os.getenv("IS_DOCKER")
18
+ API_ENV = os.getenv("API_ENV")
19
+
20
+ if not DOCKER_ENV:
21
+ raise ValueError("IS_DOCKER is not set. Please set it to '0' in .env and '1' in the docker-compose.yml file.")
22
+
23
+ if not API_ENV:
24
+ raise ValueError("API_ENV is not set. Please set it to 'prod', 'dev' or 'local' in .env (of type ApiEnv).")
25
+
26
+ if DOCKER_ENV == "0":
27
+ logger.info(f"Using {API_ENV} environment")
28
+ base_url = BaseUrl.from_env(ApiEnv(API_ENV))
29
+ else:
30
+ base_url = BaseUrl.DOCKER
31
+ logger.info("Using docker environment")
32
+
33
+ auth_handler = AuthHandler(base_url=base_url)
34
+ logger.info(f"Auth URL: {auth_handler.client.config.host}")
@@ -0,0 +1,48 @@
1
+ from enum import StrEnum
2
+
3
+ class ValidateEnumMixin:
4
+ """
5
+ Mixin for validating enum values manually.
6
+
7
+ ⚠️ Note:
8
+ This does NOT enforce validation automatically on enum creation.
9
+ It's up to the developer to call `Class.validate(value)` where needed.
10
+
11
+ Usage:
12
+ >>> class Color(ValidateEnumMixin, StrEnum):
13
+ >>> RED = "red"
14
+ >>> GREEN = "green"
15
+
16
+ >>> Color.validate("red") # True
17
+ >>> Color.validate("yellow") # False
18
+
19
+ Order of inheritance matters — the mixin must come first.
20
+ """
21
+ @classmethod
22
+ def validate(cls, value) -> bool:
23
+ try:
24
+ cls(value)
25
+ return True
26
+ except ValueError:
27
+ return False
28
+
29
+ class Exchange(ValidateEnumMixin, StrEnum):
30
+ """Supported exchanges for trading"""
31
+ KUCOIN = "kucoin"
32
+ BINGX = "bingx"
33
+
34
+ class InternalExchange(ValidateEnumMixin, StrEnum):
35
+ """All exchanges we are using, including public (Exchange)"""
36
+ KUCOIN = "kucoin"
37
+ BINGX = "bingx"
38
+ BINANCE = "binance"
39
+ BYBIT = "bybit"
40
+ HYPERLIQUID = "hyperliquid"
41
+ BITGET = "bitget"
42
+
43
+ class MarketType(ValidateEnumMixin, StrEnum):
44
+ """
45
+ Market types
46
+ """
47
+ SPOT = "spot"
48
+ FUTURES = "futures"
@@ -1,7 +1,17 @@
1
- from enum import StrEnum
1
+ from enum import StrEnum, EnumMeta
2
+ import logging
2
3
 
4
+ logger = logging.getLogger('uvicorn')
3
5
 
4
- class Scope(StrEnum):
6
+ class Fallback(EnumMeta):
7
+ """Fallback to no scope for unknown scopes."""
8
+ def __getattr__(cls, name):
9
+ logger.warning(
10
+ f"Unknown scope '{name}' - falling back to no scope - update crypticorn package or check for typos"
11
+ )
12
+ return None
13
+
14
+ class Scope(StrEnum, metaclass=Fallback):
5
15
  """
6
16
  The permission scopes for the API.
7
17
  """
@@ -39,7 +39,6 @@ from crypticorn.trade.client.exceptions import ApiAttributeError
39
39
  from crypticorn.trade.client.exceptions import ApiException
40
40
 
41
41
  # import models into sdk package
42
- from crypticorn.trade.client.models.api_key_model import APIKeyModel
43
42
  from crypticorn.trade.client.models.action_model import ActionModel
44
43
  from crypticorn.trade.client.models.api_error_identifier import ApiErrorIdentifier
45
44
  from crypticorn.trade.client.models.api_error_level import ApiErrorLevel
@@ -47,6 +46,7 @@ from crypticorn.trade.client.models.api_error_type import ApiErrorType
47
46
  from crypticorn.trade.client.models.bot_model import BotModel
48
47
  from crypticorn.trade.client.models.bot_status import BotStatus
49
48
  from crypticorn.trade.client.models.exchange import Exchange
49
+ from crypticorn.trade.client.models.exchange_key_model import ExchangeKeyModel
50
50
  from crypticorn.trade.client.models.execution_ids import ExecutionIds
51
51
  from crypticorn.trade.client.models.futures_balance import FuturesBalance
52
52
  from crypticorn.trade.client.models.futures_trading_action import FuturesTradingAction
@@ -18,7 +18,7 @@ from typing_extensions import Annotated
18
18
 
19
19
  from pydantic import StrictInt, StrictStr
20
20
  from typing import Any, List, Optional
21
- from crypticorn.trade.client.models.api_key_model import APIKeyModel
21
+ from crypticorn.trade.client.models.exchange_key_model import ExchangeKeyModel
22
22
 
23
23
  from crypticorn.trade.client.api_client import ApiClient, RequestSerialized
24
24
  from crypticorn.trade.client.api_response import ApiResponse
@@ -40,7 +40,7 @@ class APIKeysApi:
40
40
  @validate_call
41
41
  async def create_exchange_key(
42
42
  self,
43
- api_key_model: APIKeyModel,
43
+ exchange_key_model: ExchangeKeyModel,
44
44
  _request_timeout: Union[
45
45
  None,
46
46
  Annotated[StrictFloat, Field(gt=0)],
@@ -56,8 +56,8 @@ class APIKeysApi:
56
56
  """Post Exchange Key
57
57
 
58
58
 
59
- :param api_key_model: (required)
60
- :type api_key_model: APIKeyModel
59
+ :param exchange_key_model: (required)
60
+ :type exchange_key_model: ExchangeKeyModel
61
61
  :param _request_timeout: timeout setting for this request. If one
62
62
  number provided, it will be total request
63
63
  timeout. It can also be a pair (tuple) of
@@ -81,7 +81,7 @@ class APIKeysApi:
81
81
  """ # noqa: E501
82
82
 
83
83
  _param = self._create_exchange_key_serialize(
84
- api_key_model=api_key_model,
84
+ exchange_key_model=exchange_key_model,
85
85
  _request_auth=_request_auth,
86
86
  _content_type=_content_type,
87
87
  _headers=_headers,
@@ -104,7 +104,7 @@ class APIKeysApi:
104
104
  @validate_call
105
105
  async def create_exchange_key_with_http_info(
106
106
  self,
107
- api_key_model: APIKeyModel,
107
+ exchange_key_model: ExchangeKeyModel,
108
108
  _request_timeout: Union[
109
109
  None,
110
110
  Annotated[StrictFloat, Field(gt=0)],
@@ -120,8 +120,8 @@ class APIKeysApi:
120
120
  """Post Exchange Key
121
121
 
122
122
 
123
- :param api_key_model: (required)
124
- :type api_key_model: APIKeyModel
123
+ :param exchange_key_model: (required)
124
+ :type exchange_key_model: ExchangeKeyModel
125
125
  :param _request_timeout: timeout setting for this request. If one
126
126
  number provided, it will be total request
127
127
  timeout. It can also be a pair (tuple) of
@@ -145,7 +145,7 @@ class APIKeysApi:
145
145
  """ # noqa: E501
146
146
 
147
147
  _param = self._create_exchange_key_serialize(
148
- api_key_model=api_key_model,
148
+ exchange_key_model=exchange_key_model,
149
149
  _request_auth=_request_auth,
150
150
  _content_type=_content_type,
151
151
  _headers=_headers,
@@ -168,7 +168,7 @@ class APIKeysApi:
168
168
  @validate_call
169
169
  async def create_exchange_key_without_preload_content(
170
170
  self,
171
- api_key_model: APIKeyModel,
171
+ exchange_key_model: ExchangeKeyModel,
172
172
  _request_timeout: Union[
173
173
  None,
174
174
  Annotated[StrictFloat, Field(gt=0)],
@@ -184,8 +184,8 @@ class APIKeysApi:
184
184
  """Post Exchange Key
185
185
 
186
186
 
187
- :param api_key_model: (required)
188
- :type api_key_model: APIKeyModel
187
+ :param exchange_key_model: (required)
188
+ :type exchange_key_model: ExchangeKeyModel
189
189
  :param _request_timeout: timeout setting for this request. If one
190
190
  number provided, it will be total request
191
191
  timeout. It can also be a pair (tuple) of
@@ -209,7 +209,7 @@ class APIKeysApi:
209
209
  """ # noqa: E501
210
210
 
211
211
  _param = self._create_exchange_key_serialize(
212
- api_key_model=api_key_model,
212
+ exchange_key_model=exchange_key_model,
213
213
  _request_auth=_request_auth,
214
214
  _content_type=_content_type,
215
215
  _headers=_headers,
@@ -227,7 +227,7 @@ class APIKeysApi:
227
227
 
228
228
  def _create_exchange_key_serialize(
229
229
  self,
230
- api_key_model,
230
+ exchange_key_model,
231
231
  _request_auth,
232
232
  _content_type,
233
233
  _headers,
@@ -252,8 +252,8 @@ class APIKeysApi:
252
252
  # process the header parameters
253
253
  # process the form parameters
254
254
  # process the body parameter
255
- if api_key_model is not None:
256
- _body_params = api_key_model
255
+ if exchange_key_model is not None:
256
+ _body_params = exchange_key_model
257
257
 
258
258
  # set the HTTP header `Accept`
259
259
  if "Accept" not in _header_params:
@@ -546,7 +546,7 @@ class APIKeysApi:
546
546
  _content_type: Optional[StrictStr] = None,
547
547
  _headers: Optional[Dict[StrictStr, Any]] = None,
548
548
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
549
- ) -> APIKeyModel:
549
+ ) -> ExchangeKeyModel:
550
550
  """Get Exchange Key By Id
551
551
 
552
552
 
@@ -583,7 +583,7 @@ class APIKeysApi:
583
583
  )
584
584
 
585
585
  _response_types_map: Dict[str, Optional[str]] = {
586
- "200": "APIKeyModel",
586
+ "200": "ExchangeKeyModel",
587
587
  "422": "HTTPValidationError",
588
588
  }
589
589
  response_data = await self.api_client.call_api(
@@ -610,7 +610,7 @@ class APIKeysApi:
610
610
  _content_type: Optional[StrictStr] = None,
611
611
  _headers: Optional[Dict[StrictStr, Any]] = None,
612
612
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
613
- ) -> ApiResponse[APIKeyModel]:
613
+ ) -> ApiResponse[ExchangeKeyModel]:
614
614
  """Get Exchange Key By Id
615
615
 
616
616
 
@@ -647,7 +647,7 @@ class APIKeysApi:
647
647
  )
648
648
 
649
649
  _response_types_map: Dict[str, Optional[str]] = {
650
- "200": "APIKeyModel",
650
+ "200": "ExchangeKeyModel",
651
651
  "422": "HTTPValidationError",
652
652
  }
653
653
  response_data = await self.api_client.call_api(
@@ -711,7 +711,7 @@ class APIKeysApi:
711
711
  )
712
712
 
713
713
  _response_types_map: Dict[str, Optional[str]] = {
714
- "200": "APIKeyModel",
714
+ "200": "ExchangeKeyModel",
715
715
  "422": "HTTPValidationError",
716
716
  }
717
717
  response_data = await self.api_client.call_api(
@@ -789,7 +789,7 @@ class APIKeysApi:
789
789
  _content_type: Optional[StrictStr] = None,
790
790
  _headers: Optional[Dict[StrictStr, Any]] = None,
791
791
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
792
- ) -> List[APIKeyModel]:
792
+ ) -> List[ExchangeKeyModel]:
793
793
  """Get Exchange Keys
794
794
 
795
795
 
@@ -829,7 +829,7 @@ class APIKeysApi:
829
829
  )
830
830
 
831
831
  _response_types_map: Dict[str, Optional[str]] = {
832
- "200": "List[APIKeyModel]",
832
+ "200": "List[ExchangeKeyModel]",
833
833
  "422": "HTTPValidationError",
834
834
  }
835
835
  response_data = await self.api_client.call_api(
@@ -857,7 +857,7 @@ class APIKeysApi:
857
857
  _content_type: Optional[StrictStr] = None,
858
858
  _headers: Optional[Dict[StrictStr, Any]] = None,
859
859
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
860
- ) -> ApiResponse[List[APIKeyModel]]:
860
+ ) -> ApiResponse[List[ExchangeKeyModel]]:
861
861
  """Get Exchange Keys
862
862
 
863
863
 
@@ -897,7 +897,7 @@ class APIKeysApi:
897
897
  )
898
898
 
899
899
  _response_types_map: Dict[str, Optional[str]] = {
900
- "200": "List[APIKeyModel]",
900
+ "200": "List[ExchangeKeyModel]",
901
901
  "422": "HTTPValidationError",
902
902
  }
903
903
  response_data = await self.api_client.call_api(
@@ -965,7 +965,7 @@ class APIKeysApi:
965
965
  )
966
966
 
967
967
  _response_types_map: Dict[str, Optional[str]] = {
968
- "200": "List[APIKeyModel]",
968
+ "200": "List[ExchangeKeyModel]",
969
969
  "422": "HTTPValidationError",
970
970
  }
971
971
  response_data = await self.api_client.call_api(
@@ -1038,7 +1038,7 @@ class APIKeysApi:
1038
1038
  async def update_exchange_key(
1039
1039
  self,
1040
1040
  id: StrictStr,
1041
- api_key_model: APIKeyModel,
1041
+ exchange_key_model: ExchangeKeyModel,
1042
1042
  _request_timeout: Union[
1043
1043
  None,
1044
1044
  Annotated[StrictFloat, Field(gt=0)],
@@ -1056,8 +1056,8 @@ class APIKeysApi:
1056
1056
 
1057
1057
  :param id: (required)
1058
1058
  :type id: str
1059
- :param api_key_model: (required)
1060
- :type api_key_model: APIKeyModel
1059
+ :param exchange_key_model: (required)
1060
+ :type exchange_key_model: ExchangeKeyModel
1061
1061
  :param _request_timeout: timeout setting for this request. If one
1062
1062
  number provided, it will be total request
1063
1063
  timeout. It can also be a pair (tuple) of
@@ -1082,7 +1082,7 @@ class APIKeysApi:
1082
1082
 
1083
1083
  _param = self._update_exchange_key_serialize(
1084
1084
  id=id,
1085
- api_key_model=api_key_model,
1085
+ exchange_key_model=exchange_key_model,
1086
1086
  _request_auth=_request_auth,
1087
1087
  _content_type=_content_type,
1088
1088
  _headers=_headers,
@@ -1106,7 +1106,7 @@ class APIKeysApi:
1106
1106
  async def update_exchange_key_with_http_info(
1107
1107
  self,
1108
1108
  id: StrictStr,
1109
- api_key_model: APIKeyModel,
1109
+ exchange_key_model: ExchangeKeyModel,
1110
1110
  _request_timeout: Union[
1111
1111
  None,
1112
1112
  Annotated[StrictFloat, Field(gt=0)],
@@ -1124,8 +1124,8 @@ class APIKeysApi:
1124
1124
 
1125
1125
  :param id: (required)
1126
1126
  :type id: str
1127
- :param api_key_model: (required)
1128
- :type api_key_model: APIKeyModel
1127
+ :param exchange_key_model: (required)
1128
+ :type exchange_key_model: ExchangeKeyModel
1129
1129
  :param _request_timeout: timeout setting for this request. If one
1130
1130
  number provided, it will be total request
1131
1131
  timeout. It can also be a pair (tuple) of
@@ -1150,7 +1150,7 @@ class APIKeysApi:
1150
1150
 
1151
1151
  _param = self._update_exchange_key_serialize(
1152
1152
  id=id,
1153
- api_key_model=api_key_model,
1153
+ exchange_key_model=exchange_key_model,
1154
1154
  _request_auth=_request_auth,
1155
1155
  _content_type=_content_type,
1156
1156
  _headers=_headers,
@@ -1174,7 +1174,7 @@ class APIKeysApi:
1174
1174
  async def update_exchange_key_without_preload_content(
1175
1175
  self,
1176
1176
  id: StrictStr,
1177
- api_key_model: APIKeyModel,
1177
+ exchange_key_model: ExchangeKeyModel,
1178
1178
  _request_timeout: Union[
1179
1179
  None,
1180
1180
  Annotated[StrictFloat, Field(gt=0)],
@@ -1192,8 +1192,8 @@ class APIKeysApi:
1192
1192
 
1193
1193
  :param id: (required)
1194
1194
  :type id: str
1195
- :param api_key_model: (required)
1196
- :type api_key_model: APIKeyModel
1195
+ :param exchange_key_model: (required)
1196
+ :type exchange_key_model: ExchangeKeyModel
1197
1197
  :param _request_timeout: timeout setting for this request. If one
1198
1198
  number provided, it will be total request
1199
1199
  timeout. It can also be a pair (tuple) of
@@ -1218,7 +1218,7 @@ class APIKeysApi:
1218
1218
 
1219
1219
  _param = self._update_exchange_key_serialize(
1220
1220
  id=id,
1221
- api_key_model=api_key_model,
1221
+ exchange_key_model=exchange_key_model,
1222
1222
  _request_auth=_request_auth,
1223
1223
  _content_type=_content_type,
1224
1224
  _headers=_headers,
@@ -1237,7 +1237,7 @@ class APIKeysApi:
1237
1237
  def _update_exchange_key_serialize(
1238
1238
  self,
1239
1239
  id,
1240
- api_key_model,
1240
+ exchange_key_model,
1241
1241
  _request_auth,
1242
1242
  _content_type,
1243
1243
  _headers,
@@ -1264,8 +1264,8 @@ class APIKeysApi:
1264
1264
  # process the header parameters
1265
1265
  # process the form parameters
1266
1266
  # process the body parameter
1267
- if api_key_model is not None:
1268
- _body_params = api_key_model
1267
+ if exchange_key_model is not None:
1268
+ _body_params = exchange_key_model
1269
1269
 
1270
1270
  # set the HTTP header `Accept`
1271
1271
  if "Accept" not in _header_params:
@@ -14,7 +14,6 @@
14
14
 
15
15
 
16
16
  # import models into model package
17
- from crypticorn.trade.client.models.api_key_model import APIKeyModel
18
17
  from crypticorn.trade.client.models.action_model import ActionModel
19
18
  from crypticorn.trade.client.models.api_error_identifier import ApiErrorIdentifier
20
19
  from crypticorn.trade.client.models.api_error_level import ApiErrorLevel
@@ -22,6 +21,7 @@ from crypticorn.trade.client.models.api_error_type import ApiErrorType
22
21
  from crypticorn.trade.client.models.bot_model import BotModel
23
22
  from crypticorn.trade.client.models.bot_status import BotStatus
24
23
  from crypticorn.trade.client.models.exchange import Exchange
24
+ from crypticorn.trade.client.models.exchange_key_model import ExchangeKeyModel
25
25
  from crypticorn.trade.client.models.execution_ids import ExecutionIds
26
26
  from crypticorn.trade.client.models.futures_balance import FuturesBalance
27
27
  from crypticorn.trade.client.models.futures_trading_action import FuturesTradingAction
@@ -26,7 +26,8 @@ class ApiErrorIdentifier(str, Enum):
26
26
  """
27
27
  allowed enum values
28
28
  """
29
- API_KEY_ALREADY_EXISTS = "api_key_already_exists"
29
+ ALLOCATION_BELOW_CURRENT_EXPOSURE = "allocation_below_current_exposure"
30
+ ALLOCATION_BELOW_MIN_AMOUNT = "allocation_below_min_amount"
30
31
  BLACK_SWAN = "black_swan"
31
32
  BOT_ALREADY_DELETED = "bot_already_deleted"
32
33
  BOT_DISABLED = "bot_disabled"
@@ -34,12 +35,16 @@ class ApiErrorIdentifier(str, Enum):
34
35
  CLIENT_ORDER_ID_ALREADY_EXISTS = "client_order_id_already_exists"
35
36
  INVALID_CONTENT_TYPE = "invalid_content_type"
36
37
  DELETE_BOT_ERROR = "delete_bot_error"
37
- EXCHANGE_API_KEY_IN_USE = "exchange_api_key_in_use"
38
38
  EXCHANGE_INVALID_SIGNATURE = "exchange_invalid_signature"
39
39
  EXCHANGE_INVALID_TIMESTAMP = "exchange_invalid_timestamp"
40
40
  EXCHANGE_IP_ADDRESS_IS_NOT_AUTHORIZED = "exchange_ip_address_is_not_authorized"
41
+ EXCHANGE_KEY_ALREADY_EXISTS = "exchange_key_already_exists"
42
+ EXCHANGE_KEY_IN_USE = "exchange_key_in_use"
41
43
  EXCHANGE_SYSTEM_UNDER_MAINTENANCE = "exchange_system_under_maintenance"
42
44
  EXCHANGE_RATE_LIMIT_EXCEEDED = "exchange_rate_limit_exceeded"
45
+ INSUFFICIENT_PERMISSIONS_SPOT_AND_FUTURES_REQUIRED = (
46
+ "insufficient_permissions_spot_and_futures_required"
47
+ )
43
48
  EXCHANGE_SERVICE_TEMPORARILY_UNAVAILABLE = (
44
49
  "exchange_service_temporarily_unavailable"
45
50
  )
@@ -47,9 +52,6 @@ class ApiErrorIdentifier(str, Enum):
47
52
  EXCHANGE_SYSTEM_CONFIGURATION_ERROR = "exchange_system_configuration_error"
48
53
  EXCHANGE_INTERNAL_SYSTEM_ERROR = "exchange_internal_system_error"
49
54
  EXCHANGE_USER_ACCOUNT_IS_FROZEN = "exchange_user_account_is_frozen"
50
- INSUFFICIENT_PERMISSIONS_SPOT_AND_FUTURES_REQUIRED = (
51
- "insufficient_permissions_spot_and_futures_required"
52
- )
53
55
  HEDGE_MODE_NOT_ACTIVE = "hedge_mode_not_active"
54
56
  HTTP_REQUEST_ERROR = "http_request_error"
55
57
  INSUFFICIENT_BALANCE = "insufficient_balance"
@@ -66,6 +68,7 @@ class ApiErrorIdentifier(str, Enum):
66
68
  "order_violates_liquidation_price_constraints"
67
69
  )
68
70
  NO_CREDENTIALS = "no_credentials"
71
+ NOW_API_DOWN = "now_api_down"
69
72
  OBJECT_NOT_FOUND = "object_not_found"
70
73
  ORDER_IS_ALREADY_FILLED = "order_is_already_filled"
71
74
  ORDER_IS_BEING_PROCESSED = "order_is_being_processed"
@@ -83,11 +86,13 @@ class ApiErrorIdentifier(str, Enum):
83
86
  RPC_TIMEOUT = "rpc_timeout"
84
87
  SYSTEM_SETTLEMENT_IN_PROCESS = "system_settlement_in_process"
85
88
  STRATEGY_DISABLED = "strategy_disabled"
89
+ STRATEGY_LEVERAGE_MISMATCH = "strategy_leverage_mismatch"
90
+ STRATEGY_NOT_SUPPORTING_EXCHANGE = "strategy_not_supporting_exchange"
86
91
  SUCCESS = "success"
87
92
  SYMBOL_DOES_NOT_EXIST = "symbol_does_not_exist"
88
- TRADING_HAS_BEEN_LOCKED = "trading_has_been_locked"
89
93
  TRADING_ACTION_EXPIRED = "trading_action_expired"
90
94
  TRADING_ACTION_SKIPPED = "trading_action_skipped"
95
+ TRADING_HAS_BEEN_LOCKED = "trading_has_been_locked"
91
96
  TRADING_IS_SUSPENDED = "trading_is_suspended"
92
97
  UNKNOWN_ERROR_OCCURRED = "unknown_error_occurred"
93
98
  REQUESTED_RESOURCE_NOT_FOUND = "requested_resource_not_found"
@@ -20,7 +20,7 @@ from typing_extensions import Self
20
20
 
21
21
  class Exchange(str, Enum):
22
22
  """
23
- Supported exchanges
23
+ Supported exchanges for trading
24
24
  """
25
25
 
26
26
  """