crypticorn 2.2.2__tar.gz → 2.2.4__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 (279) hide show
  1. {crypticorn-2.2.2 → crypticorn-2.2.4}/PKG-INFO +1 -1
  2. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/authorize_user_request.py +10 -4
  3. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/create_api_key_request.py +19 -19
  4. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +18 -10
  5. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +11 -7
  6. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/verify200_response.py +15 -9
  7. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +15 -9
  8. crypticorn-2.2.4/crypticorn/common/enums.py +26 -0
  9. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/errors.py +63 -16
  10. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/pydantic.py +2 -0
  11. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/scopes.py +3 -3
  12. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/sorter.py +8 -6
  13. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/api_keys_api.py +50 -50
  14. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/bots_api.py +3 -3
  15. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/futures_trading_panel_api.py +15 -15
  16. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn.egg-info/PKG-INFO +1 -1
  17. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn.egg-info/SOURCES.txt +3 -1
  18. {crypticorn-2.2.2 → crypticorn-2.2.4}/pyproject.toml +1 -1
  19. crypticorn-2.2.4/tests/test_errors.py +32 -0
  20. {crypticorn-2.2.2 → crypticorn-2.2.4}/README.md +0 -0
  21. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/__init__.py +0 -0
  22. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/__init__.py +0 -0
  23. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/__init__.py +0 -0
  24. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api/__init__.py +0 -0
  25. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api/admin_api.py +0 -0
  26. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api/auth_api.py +0 -0
  27. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api/service_api.py +0 -0
  28. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api/user_api.py +0 -0
  29. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api/wallet_api.py +0 -0
  30. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api_client.py +0 -0
  31. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/api_response.py +0 -0
  32. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/configuration.py +0 -0
  33. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/exceptions.py +0 -0
  34. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/__init__.py +0 -0
  35. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  36. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  37. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  38. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  39. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  40. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/create_user_request.py +0 -0
  41. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  42. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  43. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  44. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  45. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  46. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  47. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  48. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  49. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  50. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  51. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  52. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  53. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  54. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  55. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  56. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  57. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  58. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/update_user_request.py +0 -0
  59. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  60. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  61. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  62. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  63. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  64. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  65. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  66. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/models/whoami200_response.py +0 -0
  67. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/py.typed +0 -0
  68. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/client/rest.py +0 -0
  69. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/auth/main.py +0 -0
  70. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/client.py +0 -0
  71. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/__init__.py +0 -0
  72. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/auth.py +0 -0
  73. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/common/urls.py +0 -0
  74. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/__init__.py +0 -0
  75. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/__init__.py +0 -0
  76. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/api/__init__.py +0 -0
  77. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/api/data_api.py +0 -0
  78. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/api/models_api.py +0 -0
  79. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/api/status_api.py +0 -0
  80. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/api_client.py +0 -0
  81. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/api_response.py +0 -0
  82. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/configuration.py +0 -0
  83. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/exceptions.py +0 -0
  84. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/__init__.py +0 -0
  85. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/coins.py +0 -0
  86. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/data_download_response.py +0 -0
  87. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/data_info.py +0 -0
  88. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/data_value_value_value_inner.py +0 -0
  89. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/data_version.py +0 -0
  90. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/download_links.py +0 -0
  91. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/evaluation.py +0 -0
  92. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  93. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/feature_size.py +0 -0
  94. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/http_validation_error.py +0 -0
  95. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/model.py +0 -0
  96. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/model_create.py +0 -0
  97. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/model_status.py +0 -0
  98. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/model_update.py +0 -0
  99. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/target.py +0 -0
  100. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/target_type.py +0 -0
  101. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/validation_error.py +0 -0
  102. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/models/validation_error_loc_inner.py +0 -0
  103. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/py.typed +0 -0
  104. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/client/rest.py +0 -0
  105. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/hive/main.py +0 -0
  106. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/__init__.py +0 -0
  107. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/__init__.py +0 -0
  108. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api/__init__.py +0 -0
  109. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
  110. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api/health_check_api.py +0 -0
  111. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
  112. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api/symbols_api.py +0 -0
  113. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api/udf_api.py +0 -0
  114. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api_client.py +0 -0
  115. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/api_response.py +0 -0
  116. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/configuration.py +0 -0
  117. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/exceptions.py +0 -0
  118. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/__init__.py +0 -0
  119. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/base_response_health_check_response.py +0 -0
  120. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/base_response_list_funding_rate_response.py +0 -0
  121. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/base_response_list_str.py +0 -0
  122. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/base_response_ohlcv_response.py +0 -0
  123. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/error_response.py +0 -0
  124. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/exchange.py +0 -0
  125. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
  126. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/health_check_response.py +0 -0
  127. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/history_error_response.py +0 -0
  128. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/history_no_data_response.py +0 -0
  129. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/history_success_response.py +0 -0
  130. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/http_validation_error.py +0 -0
  131. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/market.py +0 -0
  132. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/ohlcv_response.py +0 -0
  133. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/resolution.py +0 -0
  134. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/response_get_history_udf_history_get.py +0 -0
  135. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/search_symbol_response.py +0 -0
  136. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/sort_direction.py +0 -0
  137. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/symbol_group_response.py +0 -0
  138. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/symbol_info_response.py +0 -0
  139. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/symbol_type.py +0 -0
  140. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/timeframe.py +0 -0
  141. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/udf_config_response.py +0 -0
  142. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/validation_error.py +0 -0
  143. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/models/validation_error_loc_inner.py +0 -0
  144. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/py.typed +0 -0
  145. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/client/rest.py +0 -0
  146. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/klines/main.py +0 -0
  147. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/__init__.py +0 -0
  148. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/__init__.py +0 -0
  149. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/__init__.py +0 -0
  150. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
  151. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/health_check_api.py +0 -0
  152. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/indicators_api.py +0 -0
  153. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/logs_api.py +0 -0
  154. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
  155. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/markets_api.py +0 -0
  156. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api/tokens_api.py +0 -0
  157. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api_client.py +0 -0
  158. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/api_response.py +0 -0
  159. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/configuration.py +0 -0
  160. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/exceptions.py +0 -0
  161. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/__init__.py +0 -0
  162. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/base_response_dict.py +0 -0
  163. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/base_response_health_check_response.py +0 -0
  164. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/base_response_list_dict.py +0 -0
  165. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/base_response_list_exchange_mapping.py +0 -0
  166. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/base_response_list_str.py +0 -0
  167. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/error_response.py +0 -0
  168. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
  169. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/health_check_response.py +0 -0
  170. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/http_validation_error.py +0 -0
  171. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/market.py +0 -0
  172. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/severity.py +0 -0
  173. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/validation_error.py +0 -0
  174. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/models/validation_error_loc_inner.py +0 -0
  175. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/py.typed +0 -0
  176. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/client/rest.py +0 -0
  177. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/metrics/main.py +0 -0
  178. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/__init__.py +0 -0
  179. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/__init__.py +0 -0
  180. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api/__init__.py +0 -0
  181. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api/now_payments_api.py +0 -0
  182. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api/payments_api.py +0 -0
  183. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api/products_api.py +0 -0
  184. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api/status_api.py +0 -0
  185. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api_client.py +0 -0
  186. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/api_response.py +0 -0
  187. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/configuration.py +0 -0
  188. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/exceptions.py +0 -0
  189. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/__init__.py +0 -0
  190. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/api_status_res.py +0 -0
  191. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/body_create_now_invoice.py +0 -0
  192. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/body_create_product.py +0 -0
  193. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/body_get_products.py +0 -0
  194. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/body_handle_now_webhook.py +0 -0
  195. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/body_update_product.py +0 -0
  196. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/combined_payment_history.py +0 -0
  197. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/create_invoice_req.py +0 -0
  198. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/create_invoice_res.py +0 -0
  199. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/currency.py +0 -0
  200. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/estimate_price_req.py +0 -0
  201. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/estimate_price_res.py +0 -0
  202. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/get_currencies_res.py +0 -0
  203. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/get_payment_status_res.py +0 -0
  204. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/get_payments_list_res.py +0 -0
  205. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/http_validation_error.py +0 -0
  206. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/min_amount_req.py +0 -0
  207. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/min_amount_res.py +0 -0
  208. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_api_status_res.py +0 -0
  209. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  210. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  211. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_fee_structure.py +0 -0
  212. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_payment_model.py +0 -0
  213. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_payment_status.py +0 -0
  214. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/now_webhook_payload.py +0 -0
  215. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/partial_product_update_model.py +0 -0
  216. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/payment.py +0 -0
  217. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/payment_status.py +0 -0
  218. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/product.py +0 -0
  219. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/product_model.py +0 -0
  220. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/product_subs_model.py +0 -0
  221. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/product_update_model.py +0 -0
  222. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/scope.py +0 -0
  223. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/services.py +0 -0
  224. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/unified_payment_model.py +0 -0
  225. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/validation_error.py +0 -0
  226. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/models/validation_error_loc_inner.py +0 -0
  227. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/py.typed +0 -0
  228. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/client/rest.py +0 -0
  229. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/pay/main.py +0 -0
  230. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/__init__.py +0 -0
  231. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/__init__.py +0 -0
  232. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/__init__.py +0 -0
  233. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/exchanges_api.py +0 -0
  234. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/notifications_api.py +0 -0
  235. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/orders_api.py +0 -0
  236. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/status_api.py +0 -0
  237. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/strategies_api.py +0 -0
  238. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
  239. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api_client.py +0 -0
  240. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/api_response.py +0 -0
  241. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/configuration.py +0 -0
  242. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/exceptions.py +0 -0
  243. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/__init__.py +0 -0
  244. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/action_model.py +0 -0
  245. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/api_error_identifier.py +0 -0
  246. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/api_error_level.py +0 -0
  247. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/api_error_type.py +0 -0
  248. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/api_key_model.py +0 -0
  249. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/bot_model.py +0 -0
  250. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/bot_status.py +0 -0
  251. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/exchange.py +0 -0
  252. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/execution_ids.py +0 -0
  253. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/futures_balance.py +0 -0
  254. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  255. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/http_validation_error.py +0 -0
  256. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/margin_mode.py +0 -0
  257. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/market_type.py +0 -0
  258. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/notification_model.py +0 -0
  259. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/order_model.py +0 -0
  260. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/order_status.py +0 -0
  261. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  262. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
  263. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
  264. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
  265. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/tpsl.py +0 -0
  266. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  267. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/validation_error.py +0 -0
  268. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/models/validation_error_loc_inner.py +0 -0
  269. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/py.typed +0 -0
  270. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/client/rest.py +0 -0
  271. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn/trade/main.py +0 -0
  272. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn.egg-info/dependency_links.txt +0 -0
  273. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn.egg-info/requires.txt +0 -0
  274. {crypticorn-2.2.2 → crypticorn-2.2.4}/crypticorn.egg-info/top_level.txt +0 -0
  275. {crypticorn-2.2.2 → crypticorn-2.2.4}/requirements/dev.txt +0 -0
  276. {crypticorn-2.2.2 → crypticorn-2.2.4}/requirements/main.txt +0 -0
  277. {crypticorn-2.2.2 → crypticorn-2.2.4}/requirements/test.txt +0 -0
  278. {crypticorn-2.2.2 → crypticorn-2.2.4}/setup.cfg +0 -0
  279. {crypticorn-2.2.2 → crypticorn-2.2.4}/tests/test_auth_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.2.2
3
+ Version: 2.2.4
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
@@ -29,11 +29,17 @@ class AuthorizeUserRequest(BaseModel):
29
29
  AuthorizeUserRequest
30
30
  """ # noqa: E501
31
31
 
32
- email: Annotated[str, Field(min_length=1, strict=True)]
33
- password: Annotated[str, Field(min_length=1, strict=True)]
34
- admin: Optional[StrictBool] = None
32
+ email: Annotated[str, Field(min_length=1, strict=True)] = Field(
33
+ description="Email of the user"
34
+ )
35
+ password: Annotated[str, Field(min_length=1, strict=True)] = Field(
36
+ description="Password of the user"
37
+ )
38
+ admin: Optional[StrictBool] = Field(
39
+ default=None, description="Whether the user is an admin"
40
+ )
35
41
  captcha_token: Annotated[str, Field(min_length=1, strict=True)] = Field(
36
- alias="captchaToken"
42
+ description="Captcha token of the authorization request", alias="captchaToken"
37
43
  )
38
44
  __properties: ClassVar[List[str]] = ["email", "password", "admin", "captchaToken"]
39
45
 
@@ -17,16 +17,9 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import (
21
- BaseModel,
22
- ConfigDict,
23
- Field,
24
- StrictFloat,
25
- StrictInt,
26
- StrictStr,
27
- field_validator,
28
- )
29
- from typing import Any, ClassVar, Dict, List, Optional, Union
20
+ from datetime import datetime
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
22
+ from typing import Any, ClassVar, Dict, List, Optional
30
23
  from typing_extensions import Annotated
31
24
  from typing import Optional, Set
32
25
  from typing_extensions import Self
@@ -37,12 +30,18 @@ class CreateApiKeyRequest(BaseModel):
37
30
  CreateApiKeyRequest
38
31
  """ # noqa: E501
39
32
 
40
- name: StrictStr
41
- scopes: Annotated[List[StrictStr], Field(min_length=1)]
42
- expires_in: Optional[Union[StrictFloat, StrictInt]] = Field(
43
- default=None, alias="expiresIn"
33
+ name: StrictStr = Field(description="Name of the API key")
34
+ scopes: Annotated[List[StrictStr], Field(min_length=1)] = Field(
35
+ description="Scopes of the API key"
44
36
  )
45
- __properties: ClassVar[List[str]] = ["name", "scopes", "expiresIn"]
37
+ expires_at: Optional[datetime] = Field(
38
+ default=None, description="Expiration time of the API key as a date"
39
+ )
40
+ ip_whitelist: Optional[List[StrictStr]] = Field(
41
+ default=None,
42
+ description="IP addresses that can access the API key. If empty, the API key will be accessible from any IP address.",
43
+ )
44
+ __properties: ClassVar[List[str]] = ["name", "scopes", "expires_at", "ip_whitelist"]
46
45
 
47
46
  @field_validator("scopes")
48
47
  def scopes_validate_enum(cls, value):
@@ -55,8 +54,8 @@ class CreateApiKeyRequest(BaseModel):
55
54
  "write:hive:model",
56
55
  "read:trade:bots",
57
56
  "write:trade:bots",
58
- "read:trade:api_keys",
59
- "write:trade:api_keys",
57
+ "read:trade:exchangekeys",
58
+ "write:trade:exchangekeys",
60
59
  "read:trade:orders",
61
60
  "read:trade:actions",
62
61
  "write:trade:actions",
@@ -76,7 +75,7 @@ class CreateApiKeyRequest(BaseModel):
76
75
  ]
77
76
  ):
78
77
  raise ValueError(
79
- "each list item must be one of ('read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:api_keys', 'write:trade:api_keys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:predictions')"
78
+ "each list item must be one of ('read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:exchangekeys', 'write:trade:exchangekeys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:predictions')"
80
79
  )
81
80
  return value
82
81
 
@@ -132,7 +131,8 @@ class CreateApiKeyRequest(BaseModel):
132
131
  {
133
132
  "name": obj.get("name"),
134
133
  "scopes": obj.get("scopes"),
135
- "expiresIn": obj.get("expiresIn"),
134
+ "expires_at": obj.get("expires_at"),
135
+ "ip_whitelist": obj.get("ip_whitelist"),
136
136
  }
137
137
  )
138
138
  return _obj
@@ -18,7 +18,7 @@ import re # noqa: F401
18
18
  import json
19
19
 
20
20
  from datetime import datetime
21
- from pydantic import BaseModel, ConfigDict, StrictStr, field_validator
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
22
22
  from typing import Any, ClassVar, Dict, List, Optional
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
@@ -29,12 +29,18 @@ class GetApiKeys200ResponseInner(BaseModel):
29
29
  GetApiKeys200ResponseInner
30
30
  """ # noqa: E501
31
31
 
32
- id: StrictStr
33
- user_id: StrictStr
34
- scopes: List[StrictStr]
35
- name: StrictStr
36
- expires_at: Optional[datetime] = None
37
- created_at: datetime
32
+ id: StrictStr = Field(description="ID of the API key")
33
+ user_id: StrictStr = Field(description="User ID of the API key")
34
+ scopes: List[StrictStr] = Field(description="Scopes of the API key")
35
+ name: StrictStr = Field(description="Name of the API key")
36
+ expires_at: Optional[datetime] = Field(
37
+ default=None, description="Expiration time of the API key as a date"
38
+ )
39
+ created_at: datetime = Field(description="Creation time of the API key as a date")
40
+ ip_whitelist: Optional[List[StrictStr]] = Field(
41
+ default=None,
42
+ description="IP addresses that can access the API key. If empty, the API key will be accessible from any IP address.",
43
+ )
38
44
  __properties: ClassVar[List[str]] = [
39
45
  "id",
40
46
  "user_id",
@@ -42,6 +48,7 @@ class GetApiKeys200ResponseInner(BaseModel):
42
48
  "name",
43
49
  "expires_at",
44
50
  "created_at",
51
+ "ip_whitelist",
45
52
  ]
46
53
 
47
54
  @field_validator("scopes")
@@ -55,8 +62,8 @@ class GetApiKeys200ResponseInner(BaseModel):
55
62
  "write:hive:model",
56
63
  "read:trade:bots",
57
64
  "write:trade:bots",
58
- "read:trade:api_keys",
59
- "write:trade:api_keys",
65
+ "read:trade:exchangekeys",
66
+ "write:trade:exchangekeys",
60
67
  "read:trade:orders",
61
68
  "read:trade:actions",
62
69
  "write:trade:actions",
@@ -76,7 +83,7 @@ class GetApiKeys200ResponseInner(BaseModel):
76
83
  ]
77
84
  ):
78
85
  raise ValueError(
79
- "each list item must be one of ('read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:api_keys', 'write:trade:api_keys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:predictions')"
86
+ "each list item must be one of ('read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:exchangekeys', 'write:trade:exchangekeys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:predictions')"
80
87
  )
81
88
  return value
82
89
 
@@ -136,6 +143,7 @@ class GetApiKeys200ResponseInner(BaseModel):
136
143
  "name": obj.get("name"),
137
144
  "expires_at": obj.get("expires_at"),
138
145
  "created_at": obj.get("created_at"),
146
+ "ip_whitelist": obj.get("ip_whitelist"),
139
147
  }
140
148
  )
141
149
  return _obj
@@ -18,7 +18,7 @@ import re # noqa: F401
18
18
  import json
19
19
 
20
20
  from datetime import datetime
21
- from pydantic import BaseModel, ConfigDict, StrictStr
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
22
  from typing import Any, ClassVar, Dict, List, Optional
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
@@ -29,12 +29,16 @@ class RefreshTokenInfo200ResponseUserSession(BaseModel):
29
29
  RefreshTokenInfo200ResponseUserSession
30
30
  """ # noqa: E501
31
31
 
32
- id: StrictStr
33
- user_id: StrictStr
34
- token: StrictStr
35
- expires_at: datetime
36
- client_ip: Optional[StrictStr] = None
37
- user_agent: Optional[StrictStr] = None
32
+ id: StrictStr = Field(description="ID of the user session")
33
+ user_id: StrictStr = Field(description="User ID of the user session")
34
+ token: StrictStr = Field(description="Token of the user session")
35
+ expires_at: datetime = Field(description="Expiration time of the user session")
36
+ client_ip: Optional[StrictStr] = Field(
37
+ default=None, description="Client IP address of the user session"
38
+ )
39
+ user_agent: Optional[StrictStr] = Field(
40
+ default=None, description="User agent of the user session"
41
+ )
38
42
  __properties: ClassVar[List[str]] = [
39
43
  "id",
40
44
  "user_id",
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional, Union
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
@@ -28,14 +28,20 @@ class Verify200Response(BaseModel):
28
28
  Verify200Response
29
29
  """ # noqa: E501
30
30
 
31
- iss: Optional[StrictStr] = None
32
- sub: Optional[StrictStr] = None
33
- aud: Optional[StrictStr] = None
34
- exp: Optional[Union[StrictFloat, StrictInt]] = None
35
- nbf: Optional[Union[StrictFloat, StrictInt]] = None
36
- iat: Optional[Union[StrictFloat, StrictInt]] = None
37
- jti: Optional[StrictStr] = None
38
- scopes: Optional[List[StrictStr]] = None
31
+ iss: Optional[StrictStr] = Field(default=None, description="Issuer")
32
+ sub: Optional[StrictStr] = Field(default=None, description="Subject")
33
+ aud: Optional[StrictStr] = Field(default=None, description="Audience")
34
+ exp: Optional[Union[StrictFloat, StrictInt]] = Field(
35
+ default=None, description="Expiration time"
36
+ )
37
+ nbf: Optional[Union[StrictFloat, StrictInt]] = Field(
38
+ default=None, description="Not valid before time"
39
+ )
40
+ iat: Optional[Union[StrictFloat, StrictInt]] = Field(
41
+ default=None, description="Issued at time"
42
+ )
43
+ jti: Optional[StrictStr] = Field(default=None, description="JWT ID")
44
+ scopes: Optional[List[StrictStr]] = Field(default=None, description="Scopes")
39
45
  __properties: ClassVar[List[str]] = [
40
46
  "iss",
41
47
  "sub",
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional, Union
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
@@ -28,14 +28,20 @@ class VerifyEmail200ResponseAuthAuth(BaseModel):
28
28
  VerifyEmail200ResponseAuthAuth
29
29
  """ # noqa: E501
30
30
 
31
- iss: Optional[StrictStr] = None
32
- sub: Optional[StrictStr] = None
33
- aud: Optional[StrictStr] = None
34
- exp: Optional[Union[StrictFloat, StrictInt]] = None
35
- nbf: Optional[Union[StrictFloat, StrictInt]] = None
36
- iat: Optional[Union[StrictFloat, StrictInt]] = None
37
- jti: Optional[StrictStr] = None
38
- scopes: Optional[List[StrictStr]] = None
31
+ iss: Optional[StrictStr] = Field(default=None, description="Issuer")
32
+ sub: Optional[StrictStr] = Field(default=None, description="Subject")
33
+ aud: Optional[StrictStr] = Field(default=None, description="Audience")
34
+ exp: Optional[Union[StrictFloat, StrictInt]] = Field(
35
+ default=None, description="Expiration time"
36
+ )
37
+ nbf: Optional[Union[StrictFloat, StrictInt]] = Field(
38
+ default=None, description="Not valid before time"
39
+ )
40
+ iat: Optional[Union[StrictFloat, StrictInt]] = Field(
41
+ default=None, description="Issued at time"
42
+ )
43
+ jti: Optional[StrictStr] = Field(default=None, description="JWT ID")
44
+ scopes: Optional[List[StrictStr]] = Field(default=None, description="Scopes")
39
45
  __properties: ClassVar[List[str]] = [
40
46
  "iss",
41
47
  "sub",
@@ -0,0 +1,26 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class Exchange(StrEnum):
5
+ """Supported exchanges for trading"""
6
+
7
+ KUCOIN = "kucoin"
8
+ BINGX = "bingx"
9
+
10
+
11
+ class InternalExchange(Exchange):
12
+ """All exchanges we are using, including public (Exchange)"""
13
+
14
+ BINANCE = "binance"
15
+ BYBIT = "bybit"
16
+ HYPERLIQUID = "hyperliquid"
17
+ BITGET = "bitget"
18
+
19
+
20
+ class MarketType(StrEnum):
21
+ """
22
+ Market types
23
+ """
24
+
25
+ SPOT = "spot"
26
+ FUTURES = "futures"
@@ -1,4 +1,16 @@
1
- from enum import Enum
1
+ from enum import Enum, EnumMeta
2
+ import logging
3
+
4
+ logger = logging.getLogger(__name__)
5
+
6
+
7
+ class Fallback(EnumMeta):
8
+ def __getattr__(cls, name):
9
+ """Fallback to UNKNOWN_ERROR for error codes not yet published to PyPI."""
10
+ logger.warning(
11
+ f"Unknown error code '{name}' - update crypticorn package or check for typos"
12
+ )
13
+ return cls.UNKNOWN_ERROR
2
14
 
3
15
 
4
16
  class ApiErrorType(str, Enum):
@@ -17,7 +29,8 @@ class ApiErrorType(str, Enum):
17
29
  class ApiErrorIdentifier(str, Enum):
18
30
  """API error identifiers"""
19
31
 
20
- API_KEY_ALREADY_EXISTS = "api_key_already_exists"
32
+ ALLOCATION_BELOW_EXPOSURE = "allocation_below_current_exposure"
33
+ ALLOCATION_BELOW_MINIMUM = "allocation_below_min_amount"
21
34
  BLACK_SWAN = "black_swan"
22
35
  BOT_ALREADY_DELETED = "bot_already_deleted"
23
36
  BOT_DISABLED = "bot_disabled"
@@ -25,18 +38,19 @@ class ApiErrorIdentifier(str, Enum):
25
38
  CLIENT_ORDER_ID_REPEATED = "client_order_id_already_exists"
26
39
  CONTENT_TYPE_ERROR = "invalid_content_type"
27
40
  DELETE_BOT_ERROR = "delete_bot_error"
28
- EXCHANGE_API_KEY_IN_USE = "exchange_api_key_in_use"
29
41
  EXCHANGE_INVALID_SIGNATURE = "exchange_invalid_signature"
30
42
  EXCHANGE_INVALID_TIMESTAMP = "exchange_invalid_timestamp"
31
43
  EXCHANGE_IP_RESTRICTED = "exchange_ip_address_is_not_authorized"
44
+ EXCHANGE_KEY_ALREADY_EXISTS = "exchange_key_already_exists"
45
+ EXCHANGE_KEY_IN_USE = "exchange_key_in_use"
32
46
  EXCHANGE_MAINTENANCE = "exchange_system_under_maintenance"
33
47
  EXCHANGE_RATE_LIMIT = "exchange_rate_limit_exceeded"
48
+ EXCHANGE_PERMISSION_DENIED = "insufficient_permissions_spot_and_futures_required"
34
49
  EXCHANGE_SERVICE_UNAVAILABLE = "exchange_service_temporarily_unavailable"
35
50
  EXCHANGE_SYSTEM_BUSY = "exchange_system_is_busy"
36
51
  EXCHANGE_SYSTEM_CONFIG_ERROR = "exchange_system_configuration_error"
37
52
  EXCHANGE_SYSTEM_ERROR = "exchange_internal_system_error"
38
53
  EXCHANGE_USER_FROZEN = "exchange_user_account_is_frozen"
39
- EXCHANGE_PERMISSION_DENIED = "insufficient_permissions_spot_and_futures_required"
40
54
  HEDGE_MODE_NOT_ACTIVE = "hedge_mode_not_active"
41
55
  HTTP_ERROR = "http_request_error"
42
56
  INSUFFICIENT_BALANCE = "insufficient_balance"
@@ -51,6 +65,7 @@ class ApiErrorIdentifier(str, Enum):
51
65
  LEVERAGE_EXCEEDED = "leverage_limit_exceeded"
52
66
  LIQUIDATION_PRICE_VIOLATION = "order_violates_liquidation_price_constraints"
53
67
  NO_CREDENTIALS = "no_credentials"
68
+ NOW_API_DOWN = "now_api_down"
54
69
  OBJECT_NOT_FOUND = "object_not_found"
55
70
  ORDER_ALREADY_FILLED = "order_is_already_filled"
56
71
  ORDER_IN_PROCESS = "order_is_being_processed"
@@ -68,11 +83,13 @@ class ApiErrorIdentifier(str, Enum):
68
83
  RPC_TIMEOUT = "rpc_timeout"
69
84
  SETTLEMENT_IN_PROGRESS = "system_settlement_in_process"
70
85
  STRATEGY_DISABLED = "strategy_disabled"
86
+ STRATEGY_LEVERAGE_MISMATCH = "strategy_leverage_mismatch"
87
+ STRATEGY_NOT_SUPPORTING_EXCHANGE = "strategy_not_supporting_exchange"
71
88
  SUCCESS = "success"
72
89
  SYMBOL_NOT_FOUND = "symbol_does_not_exist"
73
- TRADING_LOCKED = "trading_has_been_locked"
74
90
  TRADING_ACTION_EXPIRED = "trading_action_expired"
75
91
  TRADING_ACTION_SKIPPED = "trading_action_skipped"
92
+ TRADING_LOCKED = "trading_has_been_locked"
76
93
  TRADING_SUSPENDED = "trading_is_suspended"
77
94
  UNKNOWN_ERROR = "unknown_error_occurred"
78
95
  URL_NOT_FOUND = "requested_resource_not_found"
@@ -87,11 +104,16 @@ class ApiErrorLevel(str, Enum):
87
104
  WARNING = "warning"
88
105
 
89
106
 
90
- class ApiError(Enum):
107
+ class ApiError(Enum, metaclass=Fallback):
91
108
  """API error codes"""
92
109
 
93
- API_KEY_ALREADY_EXISTS = (
94
- ApiErrorIdentifier.API_KEY_ALREADY_EXISTS,
110
+ ALLOCATION_BELOW_EXPOSURE = (
111
+ ApiErrorIdentifier.ALLOCATION_BELOW_EXPOSURE,
112
+ ApiErrorType.USER_ERROR,
113
+ ApiErrorLevel.ERROR,
114
+ )
115
+ ALLOCATION_BELOW_MINIMUM = (
116
+ ApiErrorIdentifier.ALLOCATION_BELOW_MINIMUM,
95
117
  ApiErrorType.USER_ERROR,
96
118
  ApiErrorLevel.ERROR,
97
119
  )
@@ -145,8 +167,13 @@ class ApiError(Enum):
145
167
  ApiErrorType.SERVER_ERROR,
146
168
  ApiErrorLevel.ERROR,
147
169
  )
148
- EXCHANGE_API_KEY_IN_USE = (
149
- ApiErrorIdentifier.EXCHANGE_API_KEY_IN_USE,
170
+ EXCHANGE_KEY_ALREADY_EXISTS = (
171
+ ApiErrorIdentifier.EXCHANGE_KEY_ALREADY_EXISTS,
172
+ ApiErrorType.USER_ERROR,
173
+ ApiErrorLevel.ERROR,
174
+ )
175
+ EXCHANGE_KEY_IN_USE = (
176
+ ApiErrorIdentifier.EXCHANGE_KEY_IN_USE,
150
177
  ApiErrorType.SERVER_ERROR,
151
178
  ApiErrorLevel.ERROR,
152
179
  )
@@ -155,16 +182,16 @@ class ApiError(Enum):
155
182
  ApiErrorType.EXCHANGE_ERROR,
156
183
  ApiErrorLevel.ERROR,
157
184
  )
158
- EXCHANGE_PERMISSION_DENIED = (
159
- ApiErrorIdentifier.EXCHANGE_PERMISSION_DENIED,
160
- ApiErrorType.USER_ERROR,
161
- ApiErrorLevel.ERROR,
162
- )
163
185
  EXCHANGE_RATE_LIMIT = (
164
186
  ApiErrorIdentifier.EXCHANGE_RATE_LIMIT,
165
187
  ApiErrorType.EXCHANGE_ERROR,
166
188
  ApiErrorLevel.ERROR,
167
189
  )
190
+ EXCHANGE_PERMISSION_DENIED = (
191
+ ApiErrorIdentifier.EXCHANGE_PERMISSION_DENIED,
192
+ ApiErrorType.USER_ERROR,
193
+ ApiErrorLevel.ERROR,
194
+ )
168
195
  EXCHANGE_SERVICE_UNAVAILABLE = (
169
196
  ApiErrorIdentifier.EXCHANGE_SERVICE_UNAVAILABLE,
170
197
  ApiErrorType.EXCHANGE_ERROR,
@@ -260,6 +287,11 @@ class ApiError(Enum):
260
287
  ApiErrorType.USER_ERROR,
261
288
  ApiErrorLevel.ERROR,
262
289
  )
290
+ NOW_API_DOWN = (
291
+ ApiErrorIdentifier.NOW_API_DOWN,
292
+ ApiErrorType.SERVER_ERROR,
293
+ ApiErrorLevel.ERROR,
294
+ )
263
295
  OBJECT_NOT_FOUND = (
264
296
  ApiErrorIdentifier.OBJECT_NOT_FOUND,
265
297
  ApiErrorType.SERVER_ERROR,
@@ -342,7 +374,17 @@ class ApiError(Enum):
342
374
  )
343
375
  STRATEGY_DISABLED = (
344
376
  ApiErrorIdentifier.STRATEGY_DISABLED,
345
- ApiErrorType.SERVER_ERROR,
377
+ ApiErrorType.USER_ERROR,
378
+ ApiErrorLevel.ERROR,
379
+ )
380
+ STRATEGY_LEVERAGE_MISMATCH = (
381
+ ApiErrorIdentifier.STRATEGY_LEVERAGE_MISMATCH,
382
+ ApiErrorType.USER_ERROR,
383
+ ApiErrorLevel.ERROR,
384
+ )
385
+ STRATEGY_NOT_SUPPORTING_EXCHANGE = (
386
+ ApiErrorIdentifier.STRATEGY_NOT_SUPPORTING_EXCHANGE,
387
+ ApiErrorType.USER_ERROR,
346
388
  ApiErrorLevel.ERROR,
347
389
  )
348
390
  SUCCESS = (ApiErrorIdentifier.SUCCESS, ApiErrorType.NO_ERROR, ApiErrorLevel.SUCCESS)
@@ -393,3 +435,8 @@ class ApiError(Enum):
393
435
  @property
394
436
  def level(self) -> ApiErrorLevel:
395
437
  return self.value[2]
438
+
439
+
440
+ assert len(list(ApiErrorIdentifier)) == len(
441
+ list(ApiError)
442
+ ), f"{len(list(ApiErrorIdentifier))} != {len(list(ApiError))}"
@@ -7,6 +7,7 @@ from pydantic.fields import FieldInfo
7
7
 
8
8
  def partial_model(model: Type[BaseModel]) -> Type[BaseModel]:
9
9
  """Marks all fields of a model as optional. Useful for updating models.
10
+ Inherits all fields, docstrings, and the model name.
10
11
 
11
12
  >>> @partial_model
12
13
  >>> class Model(BaseModel):
@@ -29,6 +30,7 @@ def partial_model(model: Type[BaseModel]) -> Type[BaseModel]:
29
30
  model.__name__,
30
31
  __base__=model,
31
32
  __module__=model.__module__,
33
+ __doc__=model.__doc__,
32
34
  **{
33
35
  field_name: make_field_optional(field_info)
34
36
  for field_name, field_info in model.model_fields.items()
@@ -20,8 +20,8 @@ class Scope(StrEnum):
20
20
  # Trade scopes
21
21
  READ_TRADE_BOTS = "read:trade:bots"
22
22
  WRITE_TRADE_BOTS = "write:trade:bots"
23
- READ_TRADE_APIKEYS = "read:trade:api_keys"
24
- WRITE_TRADE_APIKEYS = "write:trade:api_keys"
23
+ READ_TRADE_EXCHANGEKEYS = "read:trade:exchangekeys"
24
+ WRITE_TRADE_EXCHANGEKEYS = "write:trade:exchangekeys"
25
25
  READ_TRADE_ORDERS = "read:trade:orders"
26
26
  READ_TRADE_ACTIONS = "read:trade:actions"
27
27
  WRITE_TRADE_ACTIONS = "write:trade:actions"
@@ -40,5 +40,5 @@ class Scope(StrEnum):
40
40
  READ_PAY_NOW = "read:pay:now"
41
41
  WRITE_PAY_NOW = "write:pay:now"
42
42
 
43
- # Read projections
43
+ # Scopes that can be purchased - these actually exist in the jwt token
44
44
  READ_PREDICTIONS = "read:predictions"
@@ -2,11 +2,11 @@ import re
2
2
  import pyperclip
3
3
 
4
4
 
5
- def sort_api_errors(file_content):
5
+ def sort_api_errors(file_content, class_name="ApiErrorIdentifier"):
6
6
  # Find the start of the ApiError class definition
7
- class_start = file_content.find("class ApiErrorIdentifier(str, Enum):")
7
+ class_start = file_content.find(f"class {class_name}(str, Enum):")
8
8
  if class_start == -1:
9
- return "Could not find ApiErrorIdentifier class"
9
+ return f"Could not find {class_name} class"
10
10
 
11
11
  # Find all enum definitions
12
12
  enum_pattern = r' ([A-Z_]+)\s*=\s*"([a-z_]+)"'
@@ -23,7 +23,7 @@ def sort_api_errors(file_content):
23
23
  sorted_entries = sorted(enum_entries, key=lambda x: x[0])
24
24
 
25
25
  # Reconstruct the class content
26
- class_header = "class ApiErrorIdentifier(str, Enum):\n\n"
26
+ class_header = f"class {class_name}(str, Enum):\n\n"
27
27
  sorted_content = class_header + "\n ".join(entry[1] for entry in sorted_entries)
28
28
 
29
29
  return sorted_content
@@ -34,5 +34,7 @@ if __name__ == "__main__":
34
34
  with open("python/crypticorn/common/errors.py", "r") as f:
35
35
  content = f.read()
36
36
 
37
- sorted_content = sort_api_errors(content)
38
- pyperclip.copy(sorted_content)
37
+ sorted_content = sort_api_errors(content, "ApiErrorIdentifier")
38
+ print(sorted_content)
39
+ sorted_content = sort_api_errors(content, "ApiError")
40
+ print(sorted_content)