crypticorn 2.9.0rc1__tar.gz → 2.10.1__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 (286) hide show
  1. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/CHANGELOG.md +71 -5
  2. crypticorn-2.10.1/LICENSE +15 -0
  3. crypticorn-2.10.1/MANIFEST.in +5 -0
  4. {crypticorn-2.9.0rc1/crypticorn.egg-info → crypticorn-2.10.1}/PKG-INFO +20 -5
  5. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/README.md +1 -1
  6. crypticorn-2.10.1/crypticorn/cli/__init__.py +4 -0
  7. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/__main__.py +2 -1
  8. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/init.py +22 -7
  9. crypticorn-2.10.1/crypticorn/cli/templates/merge-env.sh +17 -0
  10. crypticorn-2.10.1/crypticorn/cli/version.py +8 -0
  11. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/enums.py +4 -4
  12. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/errors.py +6 -7
  13. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/mixins.py +8 -5
  14. crypticorn-2.10.1/crypticorn/common/openapi.py +10 -0
  15. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/router/admin_router.py +13 -5
  16. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/router/status_router.py +1 -1
  17. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/__init__.py +1 -1
  18. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/admin_api.py +30 -27
  19. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/data_api.py +36 -18
  20. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/models_api.py +87 -72
  21. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/__init__.py +1 -1
  22. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/api_error_identifier.py +1 -1
  23. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/api_error_level.py +1 -1
  24. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/api_error_type.py +1 -1
  25. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/exception_detail.py +1 -1
  26. crypticorn-2.9.0rc1/crypticorn/hive/client/models/model.py → crypticorn-2.10.1/crypticorn/hive/client/models/model_read.py +3 -3
  27. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/admin_api.py +14 -14
  28. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/status_api.py +6 -6
  29. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/api_error_identifier.py +1 -1
  30. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/api_error_level.py +1 -1
  31. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/api_error_type.py +1 -1
  32. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/exception_detail.py +1 -1
  33. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/marketcap_ranking.py +2 -2
  34. {crypticorn-2.9.0rc1 → crypticorn-2.10.1/crypticorn.egg-info}/PKG-INFO +20 -5
  35. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/SOURCES.txt +4 -1
  36. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/requires.txt +1 -2
  37. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/pyproject.toml +2 -2
  38. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/dev.txt +1 -2
  39. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_errors.py +9 -0
  40. crypticorn-2.9.0rc1/MANIFEST.in +0 -2
  41. crypticorn-2.9.0rc1/crypticorn/cli/__init__.py +0 -3
  42. crypticorn-2.9.0rc1/crypticorn/common/openapi.py +0 -11
  43. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/__init__.py +0 -0
  44. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/__init__.py +0 -0
  45. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/__init__.py +0 -0
  46. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/__init__.py +0 -0
  47. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/admin_api.py +0 -0
  48. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/auth_api.py +0 -0
  49. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/service_api.py +0 -0
  50. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/user_api.py +0 -0
  51. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/wallet_api.py +0 -0
  52. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api_client.py +0 -0
  53. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api_response.py +0 -0
  54. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/configuration.py +0 -0
  55. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/exceptions.py +0 -0
  56. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/__init__.py +0 -0
  57. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  58. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  59. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  60. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  61. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
  62. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  63. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/create_api_key_request.py +0 -0
  64. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/create_user_request.py +0 -0
  65. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +0 -0
  66. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  67. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  68. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  69. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  70. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  71. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  72. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  73. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  74. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  75. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  76. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  77. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  78. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
  79. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  80. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  81. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  82. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  83. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  84. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/update_user_request.py +0 -0
  85. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
  86. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  87. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  88. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify200_response.py +0 -0
  89. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  90. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  91. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
  92. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  93. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  94. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  95. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/whoami200_response.py +0 -0
  96. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/py.typed +0 -0
  97. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/rest.py +0 -0
  98. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/main.py +0 -0
  99. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/Dockerfile +0 -0
  100. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/__init__.py +0 -0
  101. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/auth.py +0 -0
  102. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/dependabot.yml +0 -0
  103. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/ruff.yml +0 -0
  104. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/client.py +0 -0
  105. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/__init__.py +0 -0
  106. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/ansi_colors.py +0 -0
  107. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/auth.py +0 -0
  108. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/decorators.py +0 -0
  109. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/exceptions.py +0 -0
  110. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/logging.py +0 -0
  111. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/middleware.py +0 -0
  112. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/pagination.py +0 -0
  113. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/scopes.py +0 -0
  114. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/urls.py +0 -0
  115. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/utils.py +0 -0
  116. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/warnings.py +0 -0
  117. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/__init__.py +0 -0
  118. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/__init__.py +0 -0
  119. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/status_api.py +0 -0
  120. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api_client.py +0 -0
  121. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api_response.py +0 -0
  122. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/configuration.py +0 -0
  123. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/exceptions.py +0 -0
  124. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/coins.py +0 -0
  125. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_download_response.py +0 -0
  126. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_info.py +0 -0
  127. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_options.py +0 -0
  128. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_version.py +0 -0
  129. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_version_info.py +0 -0
  130. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/download_links.py +0 -0
  131. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/evaluation.py +0 -0
  132. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  133. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/feature_size.py +0 -0
  134. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/log_level.py +0 -0
  135. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/model_create.py +0 -0
  136. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/model_status.py +0 -0
  137. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/model_update.py +0 -0
  138. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/target.py +0 -0
  139. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/target_info.py +0 -0
  140. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/target_type.py +0 -0
  141. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/py.typed +0 -0
  142. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/rest.py +0 -0
  143. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/main.py +0 -0
  144. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/utils.py +0 -0
  145. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/__init__.py +0 -0
  146. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/__init__.py +0 -0
  147. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/__init__.py +0 -0
  148. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/admin_api.py +0 -0
  149. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
  150. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
  151. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
  152. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/status_api.py +0 -0
  153. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/symbols_api.py +0 -0
  154. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/udf_api.py +0 -0
  155. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api_client.py +0 -0
  156. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api_response.py +0 -0
  157. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/configuration.py +0 -0
  158. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/exceptions.py +0 -0
  159. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/__init__.py +0 -0
  160. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/api_error_identifier.py +0 -0
  161. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/api_error_level.py +0 -0
  162. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/api_error_type.py +0 -0
  163. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
  164. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/exception_detail.py +0 -0
  165. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/funding_rate.py +0 -0
  166. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
  167. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/internal_exchange.py +0 -0
  168. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/log_level.py +0 -0
  169. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/market_type.py +0 -0
  170. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/ohlcv.py +0 -0
  171. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/resolution.py +0 -0
  172. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/search_symbol.py +0 -0
  173. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/sort_direction.py +0 -0
  174. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/symbol_group.py +0 -0
  175. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/symbol_info.py +0 -0
  176. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/symbol_type.py +0 -0
  177. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/timeframe.py +0 -0
  178. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/udf_config.py +0 -0
  179. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/py.typed +0 -0
  180. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/rest.py +0 -0
  181. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/main.py +0 -0
  182. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/__init__.py +0 -0
  183. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/__init__.py +0 -0
  184. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/__init__.py +0 -0
  185. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
  186. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/indicators_api.py +0 -0
  187. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/logs_api.py +0 -0
  188. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
  189. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/markets_api.py +0 -0
  190. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/quote_currencies_api.py +0 -0
  191. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/tokens_api.py +0 -0
  192. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api_client.py +0 -0
  193. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api_response.py +0 -0
  194. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/configuration.py +0 -0
  195. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/exceptions.py +0 -0
  196. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/__init__.py +0 -0
  197. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
  198. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
  199. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/log_level.py +0 -0
  200. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/market_type.py +0 -0
  201. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/ohlcv.py +0 -0
  202. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/severity.py +0 -0
  203. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/time_interval.py +0 -0
  204. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/trading_status.py +0 -0
  205. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/py.typed +0 -0
  206. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/rest.py +0 -0
  207. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/main.py +0 -0
  208. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/__init__.py +0 -0
  209. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/__init__.py +0 -0
  210. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/__init__.py +0 -0
  211. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/admin_api.py +0 -0
  212. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/now_payments_api.py +0 -0
  213. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/payments_api.py +0 -0
  214. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/products_api.py +0 -0
  215. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/status_api.py +0 -0
  216. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api_client.py +0 -0
  217. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api_response.py +0 -0
  218. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/configuration.py +0 -0
  219. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/exceptions.py +0 -0
  220. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/__init__.py +0 -0
  221. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/exception_detail.py +0 -0
  222. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/log_level.py +0 -0
  223. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  224. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  225. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/payment.py +0 -0
  226. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/payment_status.py +0 -0
  227. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_create.py +0 -0
  228. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_read.py +0 -0
  229. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_sub_read.py +0 -0
  230. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_update.py +0 -0
  231. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/provider.py +0 -0
  232. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/response_getuptime.py +0 -0
  233. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/scope.py +0 -0
  234. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/py.typed +0 -0
  235. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/rest.py +0 -0
  236. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/main.py +0 -0
  237. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/__init__.py +0 -0
  238. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/__init__.py +0 -0
  239. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/__init__.py +0 -0
  240. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/api_keys_api.py +0 -0
  241. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/bots_api.py +0 -0
  242. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/exchanges_api.py +0 -0
  243. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
  244. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/notifications_api.py +0 -0
  245. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/orders_api.py +0 -0
  246. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/status_api.py +0 -0
  247. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/strategies_api.py +0 -0
  248. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
  249. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api_client.py +0 -0
  250. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api_response.py +0 -0
  251. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/configuration.py +0 -0
  252. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/exceptions.py +0 -0
  253. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/__init__.py +0 -0
  254. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/action_model.py +0 -0
  255. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/bot_model.py +0 -0
  256. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/bot_status.py +0 -0
  257. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/exception_detail.py +0 -0
  258. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
  259. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/execution_ids.py +0 -0
  260. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/futures_balance.py +0 -0
  261. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  262. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/margin_mode.py +0 -0
  263. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/notification_model.py +0 -0
  264. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/order_model.py +0 -0
  265. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/order_status.py +0 -0
  266. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  267. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
  268. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
  269. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
  270. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
  271. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/tpsl.py +0 -0
  272. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  273. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/py.typed +0 -0
  274. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/rest.py +0 -0
  275. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/main.py +0 -0
  276. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/dependency_links.txt +0 -0
  277. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/entry_points.txt +0 -0
  278. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/top_level.txt +0 -0
  279. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/extra.txt +0 -0
  280. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/main.txt +0 -0
  281. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/test.txt +0 -0
  282. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/setup.cfg +0 -0
  283. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_auth_client.py +0 -0
  284. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_config.py +0 -0
  285. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_enums.py +0 -0
  286. {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_pagination.py +0 -0
@@ -1,28 +1,94 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.10.1 (2025-05-12)
5
+
6
+ ### Bug Fixes
7
+
8
+ - Fixes optional symbol in get_marketcap_symbols function
9
+ ([`3522a09`](https://github.com/crypticorn-ai/api-client/commit/3522a097cb159d638c717b26f9d607e813d210a9))
10
+
11
+ ### Build System
12
+
13
+ - Include static files in the structure in the distribution
14
+ ([`eb87ab4`](https://github.com/crypticorn-ai/api-client/commit/eb87ab44edb7558b09835ffe092d4a4d9517b79d))
15
+
16
+ ### Refactoring
17
+
18
+ - Remove usage of deprecated `ExcludeEnumMixin`
19
+ ([`bf4f4fb`](https://github.com/crypticorn-ai/api-client/commit/bf4f4fb4dc092a9909a6e536c5e5455244e13aac))
20
+
21
+
22
+ ## v2.10.0 (2025-05-09)
23
+
24
+ ### Build System
25
+
26
+ - Include info .md files and license in distribution
27
+ ([`3c3d065`](https://github.com/crypticorn-ai/api-client/commit/3c3d0655b67478f98d970e7ad218e8947b8a9ec0))
28
+
29
+ ### Continuous Integration
30
+
31
+ - Fix typo in testing workflow
32
+ ([`e0fd734`](https://github.com/crypticorn-ai/api-client/commit/e0fd73450efda0c41ed583a771e0b6774e6a8dbd))
33
+
34
+ - Properly read env vars
35
+ ([`6d25286`](https://github.com/crypticorn-ai/api-client/commit/6d252865986b974789831e91cedd45e9a594ebbc))
36
+
37
+ - Update test workflow
38
+ ([`97b7b8b`](https://github.com/crypticorn-ai/api-client/commit/97b7b8b76691e91d788030e603e2fc65ac7ba8c8))
39
+
40
+ ### Features
41
+
42
+ - Add new init template to the CLI for generating a env merging script
43
+ ([`7e3a71a`](https://github.com/crypticorn-ai/api-client/commit/7e3a71a0f67eceb1ab1f8545eeba0a390736e129))
44
+
45
+ - Add version command in the CLI (crypticorn version)
46
+ ([`289eef4`](https://github.com/crypticorn-ai/api-client/commit/289eef48fa51f771c9b461206a93470f35ce2369))
47
+
48
+
49
+ ## v2.9.0 (2025-05-08)
50
+
51
+ ### Build System
52
+
53
+ - Add python-semantic-release as an dev dependency
54
+ ([`72dfc09`](https://github.com/crypticorn-ai/api-client/commit/72dfc092b7b4fde231e6c62d3bcca33ec270bf30))
55
+
56
+ ### Features
57
+
58
+ - Use regex pattern in /dependencies endpoint
59
+ ([`7a7792f`](https://github.com/crypticorn-ai/api-client/commit/7a7792f33460b5fe4404d6f46ab680cca204a8f5))
60
+
61
+
4
62
  ## v2.9.0-rc.1 (2025-05-08)
5
63
 
6
64
  ### Bug Fixes
7
65
 
8
66
  - Capture and format warnings in logging output
9
- ([`6eabac6`](https://github.com/crypticorn-ai/api-client/commit/6eabac6fc6f9565b214ba354947c25c8b37bac36))
67
+ ([`5a1d317`](https://github.com/crypticorn-ai/api-client/commit/5a1d31721507dae015e9d9568579e91b12906ee4))
10
68
 
11
69
  - Use `contextlib.asynccontextmanager` for starlette lifespan
12
- ([`1778b85`](https://github.com/crypticorn-ai/api-client/commit/1778b85da213fa5e6b8b26b462aad73ea9f0a330))
70
+ ([`c253dd1`](https://github.com/crypticorn-ai/api-client/commit/c253dd133dff5073f355ed8f93c0be1814b739f2))
13
71
 
14
72
  ### Documentation
15
73
 
16
74
  - Update docstrings and module descriptions
17
- ([`34a1b44`](https://github.com/crypticorn-ai/api-client/commit/34a1b44db18a987c5a741a9b829b7a79597558bc))
75
+ ([`c80f306`](https://github.com/crypticorn-ai/api-client/commit/c80f30614641f09366ca3566295e9bce8eee828d))
18
76
 
19
77
  ### Features
20
78
 
21
79
  - Add deprecation warnings in call and in-code support
22
- ([`0f5acee`](https://github.com/crypticorn-ai/api-client/commit/0f5aceeb53b34f1d7676d9bb0d3667d69f1b43b2))
80
+ ([`b3100e6`](https://github.com/crypticorn-ai/api-client/commit/b3100e69874b8fca439778351c2834b5ae2b91b6))
23
81
 
24
82
  - Provide default openapi tags from the status and admin router
25
- ([`dc23701`](https://github.com/crypticorn-ai/api-client/commit/dc23701f0b3493dab677608d8ce80c59fcf15269))
83
+ ([`e8ef966`](https://github.com/crypticorn-ai/api-client/commit/e8ef966bc9ee60a17ef8842a041d5e1800c32d93))
84
+
85
+
86
+ ## v2.8.2 (2025-05-08)
87
+
88
+ ### Bug Fixes
89
+
90
+ - Hotfix response type error
91
+ ([`7cc14fc`](https://github.com/crypticorn-ai/api-client/commit/7cc14fcced66441d9e320ad754a164ca016cda26))
26
92
 
27
93
 
28
94
  ## v2.8.1 (2025-05-07)
@@ -0,0 +1,15 @@
1
+ Copyright © 2025 Crypticorn
2
+
3
+ All rights reserved. This software and accompanying documentation files (collectively referred to as "the Software") are the proprietary property of Crypticorn. Any unauthorised reproduction, modification, integration, publication, distribution, sublicensing, sale, or enabling access to the Software without explicit written permission from Crypticorn is strictly prohibited, subject to the conditions outlined herein:
4
+
5
+ 1. The aforementioned copyright notice and this permission notice must be included unaltered in all copies, or significant portions, of the Software.
6
+
7
+ 2. The Software is provided "AS IS", without any warranty, whether express or implied. Crypticorn expressly disclaims any guarantees, including but not limited to those of satisfactory quality, fitness for a particular purpose, or non-infringement of third-party rights.
8
+
9
+ 3. In no event shall Crypticorn, its authors, or copyright holders be held liable for any claim, damages, or other liability arising from or associated with the use of the Software or any other dealings involving the Software, to the extent that such liability can be limited or excluded by applicable law.
10
+
11
+ Changes to this agreement may be made without notice, and it is the user's responsibility to keep abreast of any changes. This agreement and its interpretation are subject to the laws of the Federal Republic of Germany.
12
+
13
+ If any provision of this license agreement is held to be invalid or unenforceable under applicable law, the remaining provisions will continue in full force and effect. Crypticorn's failure to enforce any provision of this agreement does not constitute a waiver of its right to do so in the future.
14
+
15
+ This agreement is written in English. In the event of any discrepancy between the English version and any translation, the English version shall prevail.
@@ -0,0 +1,5 @@
1
+ graft crypticorn/cli/templates
2
+ include CHANGELOG.md
3
+ include README.md
4
+ include LICENSE
5
+ include static
@@ -1,9 +1,23 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.9.0rc1
3
+ Version: 2.10.1
4
4
  Summary: Maximise Your Crypto Trading Profits with Machine Learning
5
5
  Author-email: Crypticorn <timon@crypticorn.com>
6
- License: MIT
6
+ License: Copyright © 2025 Crypticorn
7
+
8
+ All rights reserved. This software and accompanying documentation files (collectively referred to as "the Software") are the proprietary property of Crypticorn. Any unauthorised reproduction, modification, integration, publication, distribution, sublicensing, sale, or enabling access to the Software without explicit written permission from Crypticorn is strictly prohibited, subject to the conditions outlined herein:
9
+
10
+ 1. The aforementioned copyright notice and this permission notice must be included unaltered in all copies, or significant portions, of the Software.
11
+
12
+ 2. The Software is provided "AS IS", without any warranty, whether express or implied. Crypticorn expressly disclaims any guarantees, including but not limited to those of satisfactory quality, fitness for a particular purpose, or non-infringement of third-party rights.
13
+
14
+ 3. In no event shall Crypticorn, its authors, or copyright holders be held liable for any claim, damages, or other liability arising from or associated with the use of the Software or any other dealings involving the Software, to the extent that such liability can be limited or excluded by applicable law.
15
+
16
+ Changes to this agreement may be made without notice, and it is the user's responsibility to keep abreast of any changes. This agreement and its interpretation are subject to the laws of the Federal Republic of Germany.
17
+
18
+ If any provision of this license agreement is held to be invalid or unenforceable under applicable law, the remaining provisions will continue in full force and effect. Crypticorn's failure to enforce any provision of this agreement does not constitute a waiver of its right to do so in the future.
19
+
20
+ This agreement is written in English. In the event of any discrepancy between the English version and any translation, the English version shall prevail.
7
21
  Project-URL: Homepage, https://crypticorn.com
8
22
  Project-URL: Documentation, https://docs.crypticorn.com
9
23
  Project-URL: Dashboard, https://app.crypticorn.com
@@ -20,6 +34,7 @@ Classifier: Programming Language :: Python :: 3.13
20
34
  Classifier: Typing :: Typed
21
35
  Requires-Python: >=3.10
22
36
  Description-Content-Type: text/markdown
37
+ License-File: LICENSE
23
38
  Requires-Dist: fastapi<1.0.0,>=0.115.0
24
39
  Requires-Dist: click<9.0.0,>=8.0.0
25
40
  Requires-Dist: psutil<8.0.0,>=7.0.0
@@ -35,14 +50,13 @@ Requires-Dist: tqdm<5.0.0,>=4.67.0
35
50
  Provides-Extra: dev
36
51
  Requires-Dist: build; extra == "dev"
37
52
  Requires-Dist: twine; extra == "dev"
38
- Requires-Dist: streamlit; extra == "dev"
39
- Requires-Dist: httpx; extra == "dev"
40
53
  Requires-Dist: black; extra == "dev"
41
54
  Requires-Dist: ruff; extra == "dev"
42
55
  Requires-Dist: isort; extra == "dev"
43
56
  Requires-Dist: mypy; extra == "dev"
44
57
  Requires-Dist: openapi-generator-cli<8.0.0,>=7.12.0; extra == "dev"
45
58
  Requires-Dist: pdoc==15.0.3; extra == "dev"
59
+ Requires-Dist: python-semantic-release==9.21.0; extra == "dev"
46
60
  Provides-Extra: test
47
61
  Requires-Dist: pytest==8.3.5; extra == "test"
48
62
  Requires-Dist: pytest-asyncio==0.26.0; extra == "test"
@@ -51,6 +65,7 @@ Requires-Dist: python-dotenv==1.0.1; extra == "test"
51
65
  Requires-Dist: PyJWT==2.10.0; extra == "test"
52
66
  Provides-Extra: extra
53
67
  Requires-Dist: pandas<3.0.0,>=2.2.0; extra == "extra"
68
+ Dynamic: license-file
54
69
 
55
70
  ## What is Crypticorn?
56
71
 
@@ -83,7 +98,7 @@ from crypticorn import ApiClient
83
98
  ```
84
99
  The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
85
100
 
86
- <img src="../static/pip-structure.svg" alt="pip package structure" />
101
+ <img src="pip-structure.svg" alt="pip package structure" />
87
102
 
88
103
  You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
89
104
 
@@ -29,7 +29,7 @@ from crypticorn import ApiClient
29
29
  ```
30
30
  The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
31
31
 
32
- <img src="../static/pip-structure.svg" alt="pip package structure" />
32
+ <img src="pip-structure.svg" alt="pip package structure" />
33
33
 
34
34
  You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
35
35
 
@@ -0,0 +1,4 @@
1
+ from crypticorn.cli.init import init_group
2
+ from crypticorn.cli.version import version
3
+
4
+ __all__ = ["init_group", "version"]
@@ -1,7 +1,7 @@
1
1
  # crypticorn/cli.py
2
2
 
3
3
  import click
4
- from crypticorn.cli import init_group
4
+ from crypticorn.cli import init_group, version
5
5
 
6
6
 
7
7
  @click.group()
@@ -11,6 +11,7 @@ def cli():
11
11
 
12
12
 
13
13
  cli.add_command(init_group, name="init")
14
+ cli.add_command(version, name="version")
14
15
 
15
16
  if __name__ == "__main__":
16
17
  cli()
@@ -31,6 +31,13 @@ def copy_template(template_name: str, target_path: Path):
31
31
  click.secho(f"✅ Created: {target_path}", fg="green")
32
32
 
33
33
 
34
+ def check_file_exists(path: Path, force: bool):
35
+ if path.exists() and not force:
36
+ click.secho(f"File already exists, use --force / -f to overwrite", fg="red")
37
+ return False
38
+ return True
39
+
40
+
34
41
  @click.group()
35
42
  def init_group():
36
43
  """Initialize files like CI configs, linters, etc."""
@@ -61,8 +68,7 @@ def init_docker(output, force):
61
68
  click.secho("Output path is a file, please provide a directory path", fg="red")
62
69
  return
63
70
  target = (Path(output) if output else root) / "Dockerfile"
64
- if target.exists() and not force:
65
- click.secho("File already exists, use --force / -f to overwrite", fg="red")
71
+ if not check_file_exists(target, force):
66
72
  return
67
73
  copy_template("Dockerfile", target)
68
74
  click.secho("Make sure to update the Dockerfile", fg="yellow")
@@ -80,13 +86,12 @@ def init_auth(output, force):
80
86
  click.secho("Output path is a file, please provide a directory path", fg="red")
81
87
  return
82
88
  target = (Path(output) if output else root) / "auth.py"
83
- if target.exists() and not force:
84
- click.secho("File already exists, use --force / -f to overwrite", fg="red")
89
+ if not check_file_exists(target, force):
85
90
  return
86
91
  copy_template("auth.py", target)
87
92
  click.secho(
88
93
  """
89
- Make sure to update the .env file with:
94
+ Make sure to update the .env and .env.example files with:
90
95
  IS_DOCKER=0
91
96
  API_ENV=local
92
97
  and the docker-compose.yml file with:
@@ -106,7 +111,17 @@ def init_dependabot(force):
106
111
  """Add dependabot.yml"""
107
112
  root = get_git_root()
108
113
  target = root / ".github/dependabot.yml"
109
- if target.exists() and not force:
110
- click.secho("File already exists, use --force / -f to overwrite", fg="red")
114
+ if not check_file_exists(target, force):
111
115
  return
112
116
  copy_template("dependabot.yml", target)
117
+
118
+
119
+ @init_group.command("merge-env")
120
+ @click.option("-f", "--force", is_flag=True, help="Force overwrite the .env file")
121
+ def init_merge_env(force):
122
+ """Add script to merge environment and file variables into .env"""
123
+ root = get_git_root()
124
+ target = root / "scripts/merge-env.sh"
125
+ if not check_file_exists(target, force):
126
+ return
127
+ copy_template("merge-env.sh", target)
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # this script merges the env variables from the environment and the .env.example file into the .env file
4
+ # the appended variables take precedence over the .env.example variables (if both are set)
5
+
6
+ # Make executable before running in github actions
7
+ # chmod +x scripts/merge-env.sh
8
+
9
+ # Usage in a github action:
10
+ # - name: Generate .env
11
+ # run: ./scripts/merge-env.sh
12
+
13
+ set -e
14
+
15
+ cp .env.example .env
16
+ echo >> .env
17
+ printenv | awk -F= '{print $1"=\""substr($0, index($0,$2))"\""}' >> .env
@@ -0,0 +1,8 @@
1
+ import importlib.metadata
2
+ import click
3
+
4
+
5
+ @click.command("version")
6
+ def version():
7
+ """Print the version of the crypticorn package"""
8
+ click.echo(importlib.metadata.distribution("crypticorn").version)
@@ -1,17 +1,17 @@
1
1
  """Defines common enumerations used throughout the codebase for type safety and consistency."""
2
2
 
3
3
  from enum import StrEnum
4
- from crypticorn.common.mixins import ValidateEnumMixin, ExcludeEnumMixin
4
+ from crypticorn.common.mixins import ValidateEnumMixin
5
5
 
6
6
 
7
- class Exchange(ValidateEnumMixin, ExcludeEnumMixin, StrEnum):
7
+ class Exchange(ValidateEnumMixin, StrEnum):
8
8
  """Supported exchanges for trading"""
9
9
 
10
10
  KUCOIN = "kucoin"
11
11
  BINGX = "bingx"
12
12
 
13
13
 
14
- class InternalExchange(ValidateEnumMixin, ExcludeEnumMixin, StrEnum):
14
+ class InternalExchange(ValidateEnumMixin, StrEnum):
15
15
  """All exchanges we are using, including public (Exchange)"""
16
16
 
17
17
  KUCOIN = "kucoin"
@@ -22,7 +22,7 @@ class InternalExchange(ValidateEnumMixin, ExcludeEnumMixin, StrEnum):
22
22
  BITGET = "bitget"
23
23
 
24
24
 
25
- class MarketType(ValidateEnumMixin, ExcludeEnumMixin, StrEnum):
25
+ class MarketType(ValidateEnumMixin, StrEnum):
26
26
  """
27
27
  Market types
28
28
  """
@@ -2,10 +2,10 @@
2
2
 
3
3
  from enum import Enum, StrEnum
4
4
  from fastapi import status
5
- from crypticorn.common.mixins import ExcludeEnumMixin, ApiErrorFallback
5
+ from crypticorn.common.mixins import ApiErrorFallback
6
6
 
7
7
 
8
- class ApiErrorType(ExcludeEnumMixin, StrEnum):
8
+ class ApiErrorType(StrEnum):
9
9
  """Type of the API error."""
10
10
 
11
11
  USER_ERROR = "user error"
@@ -18,7 +18,7 @@ class ApiErrorType(ExcludeEnumMixin, StrEnum):
18
18
  """error that does not need to be handled or does not affect the program or is a placeholder."""
19
19
 
20
20
 
21
- class ApiErrorIdentifier(ExcludeEnumMixin, StrEnum):
21
+ class ApiErrorIdentifier(StrEnum):
22
22
  """Unique identifier of the API error."""
23
23
 
24
24
  ALLOCATION_BELOW_EXPOSURE = "allocation_below_current_exposure"
@@ -98,13 +98,12 @@ class ApiErrorIdentifier(ExcludeEnumMixin, StrEnum):
98
98
  UNKNOWN_ERROR = "unknown_error_occurred"
99
99
  URL_NOT_FOUND = "requested_resource_not_found"
100
100
 
101
- @property
102
101
  def get_error(self) -> "ApiError":
103
102
  """Get the corresponding ApiError."""
104
- return ApiError[self.value]
103
+ return getattr(ApiError, self.name)
105
104
 
106
105
 
107
- class ApiErrorLevel(ExcludeEnumMixin, StrEnum):
106
+ class ApiErrorLevel(StrEnum):
108
107
  """Level of the API error."""
109
108
 
110
109
  ERROR = "error"
@@ -113,7 +112,7 @@ class ApiErrorLevel(ExcludeEnumMixin, StrEnum):
113
112
  WARNING = "warning"
114
113
 
115
114
 
116
- class ApiError(ExcludeEnumMixin, Enum, metaclass=ApiErrorFallback):
115
+ class ApiError(Enum, metaclass=ApiErrorFallback):
117
116
  # Fallback to UNKNOWN_ERROR for error codes not yet published to PyPI.
118
117
  """Crypticorn API error enumeration."""
119
118
 
@@ -39,10 +39,13 @@ class ValidateEnumMixin:
39
39
  class ExcludeEnumMixin:
40
40
  """(deprecated) Mixin to exclude enum from OpenAPI schema. We use this to avoid duplicating enums when generating client code from the openapi spec."""
41
41
 
42
- warnings.warn(
43
- "The `ExcludeEnumMixin` class is deprecated. Should be removed from enums inheriting this class.",
44
- category=CrypticornDeprecatedSince28,
45
- )
42
+ def __init_subclass__(cls, **kwargs):
43
+ super().__init_subclass__(**kwargs)
44
+ if cls.__name__.startswith("ExcludeEnumMixin"):
45
+ warnings.warn(
46
+ "The `ExcludeEnumMixin` class is deprecated. Should be removed from enums inheriting this class.",
47
+ category=CrypticornDeprecatedSince28,
48
+ )
46
49
 
47
50
  @classmethod
48
51
  def __get_pydantic_json_schema__(cls, core_schema, handler):
@@ -56,7 +59,7 @@ class ApiErrorFallback(EnumMeta):
56
59
 
57
60
  def __getattr__(cls, name):
58
61
  # Let Pydantic/internal stuff pass silently ! fragile
59
- if name.startswith("__"):
62
+ if name.startswith("__") or name.startswith("_pytest"):
60
63
  raise AttributeError(name)
61
64
  _logger.warning(
62
65
  f"Unknown enum member '{name}' - update crypticorn package or check for typos"
@@ -0,0 +1,10 @@
1
+ default_tags = [
2
+ {
3
+ "name": "Status",
4
+ "description": "These endpoints contain status operations.",
5
+ },
6
+ {
7
+ "name": "Admin",
8
+ "description": "These endpoints contain debugging and monitoring operations. They require admin scopes.",
9
+ },
10
+ ]
@@ -10,8 +10,9 @@ import importlib.metadata
10
10
  import threading
11
11
  import time
12
12
  import psutil
13
+ import re
13
14
  from fastapi import APIRouter, Query
14
- from typing import Literal, Union
15
+ from typing import Literal
15
16
  from crypticorn.common.logging import LogLevel
16
17
  import logging
17
18
 
@@ -86,13 +87,20 @@ def get_container_limits() -> dict:
86
87
  def list_installed_packages(
87
88
  include: list[str] = Query(
88
89
  default=None,
89
- description="List of dependencies to include in the response. If not provided, all installed packages will be returned.",
90
+ description="List of regex patterns to match against package names. If not provided, all installed packages will be returned.",
90
91
  )
91
- ) -> list:
92
- """Return a list of installed packages and versions."""
92
+ ) -> dict[str, str]:
93
+ """Return a list of installed packages and versions.
94
+
95
+ The include parameter accepts regex patterns to match against package names.
96
+ For example:
97
+ - crypticorn.* will match all packages starting with 'crypticorn'
98
+ - .*tic.* will match all packages containing 'tic' in their name
99
+ """
93
100
  packages = {
94
101
  dist.metadata["Name"]: dist.version
95
102
  for dist in importlib.metadata.distributions()
96
- if include is None or dist.metadata["Name"] in include
103
+ if include is None
104
+ or any(re.match(pattern, dist.metadata["Name"]) for pattern in include)
97
105
  }
98
106
  return dict(sorted(packages.items()))
@@ -13,7 +13,7 @@ router = APIRouter(tags=["Status"], prefix="")
13
13
 
14
14
 
15
15
  @router.get("/", operation_id="ping")
16
- async def ping(request: Request) -> dict:
16
+ async def ping(request: Request) -> str:
17
17
  """
18
18
  Returns 'OK' if the API is running.
19
19
  """
@@ -49,8 +49,8 @@ from crypticorn.hive.client.models.evaluation_response import EvaluationResponse
49
49
  from crypticorn.hive.client.models.exception_detail import ExceptionDetail
50
50
  from crypticorn.hive.client.models.feature_size import FeatureSize
51
51
  from crypticorn.hive.client.models.log_level import LogLevel
52
- from crypticorn.hive.client.models.model import Model
53
52
  from crypticorn.hive.client.models.model_create import ModelCreate
53
+ from crypticorn.hive.client.models.model_read import ModelRead
54
54
  from crypticorn.hive.client.models.model_status import ModelStatus
55
55
  from crypticorn.hive.client.models.model_update import ModelUpdate
56
56
  from crypticorn.hive.client.models.target import Target