crypticorn 2.10.3__tar.gz → 2.11.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 (289) hide show
  1. {crypticorn-2.10.3 → crypticorn-2.11.4}/CHANGELOG.md +83 -0
  2. {crypticorn-2.10.3 → crypticorn-2.11.4}/MANIFEST.in +1 -1
  3. {crypticorn-2.10.3/crypticorn.egg-info → crypticorn-2.11.4}/PKG-INFO +12 -21
  4. {crypticorn-2.10.3 → crypticorn-2.11.4}/README.md +8 -3
  5. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/configuration.py +2 -2
  6. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/create_api_key_request.py +2 -1
  7. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
  8. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/templates/merge-env.sh +3 -5
  9. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/client.py +2 -2
  10. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/ansi_colors.py +4 -1
  11. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/auth.py +9 -8
  12. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/enums.py +5 -1
  13. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/errors.py +6 -1
  14. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/exceptions.py +5 -1
  15. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/logging.py +5 -1
  16. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/scopes.py +14 -1
  17. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/urls.py +5 -1
  18. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/utils.py +3 -3
  19. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/warnings.py +2 -1
  20. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/main.py +13 -1
  21. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/__init__.py +4 -0
  22. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/exchanges_api.py +7 -6
  23. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/indicators_api.py +12 -6
  24. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/marketcap_api.py +49 -31
  25. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/configuration.py +2 -2
  26. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/__init__.py +4 -0
  27. crypticorn-2.11.4/crypticorn/metrics/client/models/exchange_availability.py +88 -0
  28. crypticorn-2.11.4/crypticorn/metrics/client/models/marketcap_ranking.py +89 -0
  29. crypticorn-2.10.3/crypticorn/metrics/client/models/marketcap_ranking.py → crypticorn-2.11.4/crypticorn/metrics/client/models/marketcap_symbol_ranking.py +4 -4
  30. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/main.py +12 -19
  31. {crypticorn-2.10.3 → crypticorn-2.11.4/crypticorn.egg-info}/PKG-INFO +12 -21
  32. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn.egg-info/SOURCES.txt +6 -0
  33. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn.egg-info/requires.txt +1 -0
  34. {crypticorn-2.10.3 → crypticorn-2.11.4}/pyproject.toml +8 -4
  35. {crypticorn-2.10.3 → crypticorn-2.11.4}/requirements/main.txt +1 -0
  36. crypticorn-2.11.4/static/favicon.svg +12 -0
  37. crypticorn-2.11.4/static/logo.svg +13 -0
  38. crypticorn-2.11.4/static/pip-structure.drawio +31 -0
  39. crypticorn-2.11.4/static/pip-structure.svg +4 -0
  40. {crypticorn-2.10.3 → crypticorn-2.11.4}/LICENSE +0 -0
  41. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/__init__.py +0 -0
  42. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/__init__.py +0 -0
  43. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/__init__.py +0 -0
  44. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api/__init__.py +0 -0
  45. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api/admin_api.py +0 -0
  46. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api/auth_api.py +0 -0
  47. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api/service_api.py +0 -0
  48. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api/user_api.py +0 -0
  49. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api/wallet_api.py +0 -0
  50. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api_client.py +0 -0
  51. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/api_response.py +0 -0
  52. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/exceptions.py +0 -0
  53. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/__init__.py +0 -0
  54. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  55. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  56. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  57. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  58. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
  59. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  60. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/create_user_request.py +0 -0
  61. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  62. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  63. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  64. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  65. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  66. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  67. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  68. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  69. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  70. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  71. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  72. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  73. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
  74. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  75. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  76. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  77. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  78. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  79. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/update_user_request.py +0 -0
  80. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
  81. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  82. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  83. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/verify200_response.py +0 -0
  84. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  85. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  86. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
  87. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  88. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  89. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  90. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/models/whoami200_response.py +0 -0
  91. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/py.typed +0 -0
  92. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/client/rest.py +0 -0
  93. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/auth/main.py +0 -0
  94. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/__init__.py +0 -0
  95. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/__main__.py +0 -0
  96. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/init.py +0 -0
  97. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/templates/Dockerfile +0 -0
  98. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/templates/__init__.py +0 -0
  99. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/templates/auth.py +0 -0
  100. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/templates/dependabot.yml +0 -0
  101. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/templates/ruff.yml +0 -0
  102. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/cli/version.py +0 -0
  103. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/__init__.py +0 -0
  104. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/decorators.py +0 -0
  105. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/middleware.py +0 -0
  106. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/mixins.py +0 -0
  107. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/openapi.py +0 -0
  108. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/pagination.py +0 -0
  109. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/router/admin_router.py +0 -0
  110. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/common/router/status_router.py +0 -0
  111. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/__init__.py +0 -0
  112. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/__init__.py +0 -0
  113. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api/__init__.py +0 -0
  114. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api/admin_api.py +0 -0
  115. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api/data_api.py +0 -0
  116. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api/models_api.py +0 -0
  117. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api/status_api.py +0 -0
  118. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api_client.py +0 -0
  119. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/api_response.py +0 -0
  120. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/configuration.py +0 -0
  121. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/exceptions.py +0 -0
  122. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/__init__.py +0 -0
  123. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/api_error_identifier.py +0 -0
  124. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/api_error_level.py +0 -0
  125. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/api_error_type.py +0 -0
  126. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/coins.py +0 -0
  127. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/data_download_response.py +0 -0
  128. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/data_info.py +0 -0
  129. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/data_options.py +0 -0
  130. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/data_version.py +0 -0
  131. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/data_version_info.py +0 -0
  132. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/download_links.py +0 -0
  133. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/evaluation.py +0 -0
  134. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  135. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/exception_detail.py +0 -0
  136. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/feature_size.py +0 -0
  137. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/log_level.py +0 -0
  138. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/model_create.py +0 -0
  139. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/model_read.py +0 -0
  140. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/model_status.py +0 -0
  141. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/model_update.py +0 -0
  142. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/target.py +0 -0
  143. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/target_info.py +0 -0
  144. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/models/target_type.py +0 -0
  145. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/py.typed +0 -0
  146. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/client/rest.py +0 -0
  147. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/main.py +0 -0
  148. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/hive/utils.py +0 -0
  149. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/__init__.py +0 -0
  150. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/__init__.py +0 -0
  151. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/__init__.py +0 -0
  152. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/admin_api.py +0 -0
  153. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
  154. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
  155. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
  156. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/status_api.py +0 -0
  157. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/symbols_api.py +0 -0
  158. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api/udf_api.py +0 -0
  159. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api_client.py +0 -0
  160. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/api_response.py +0 -0
  161. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/configuration.py +0 -0
  162. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/exceptions.py +0 -0
  163. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/__init__.py +0 -0
  164. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/api_error_identifier.py +0 -0
  165. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/api_error_level.py +0 -0
  166. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/api_error_type.py +0 -0
  167. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
  168. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/exception_detail.py +0 -0
  169. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/funding_rate.py +0 -0
  170. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
  171. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/internal_exchange.py +0 -0
  172. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/log_level.py +0 -0
  173. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/market_type.py +0 -0
  174. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/ohlcv.py +0 -0
  175. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/resolution.py +0 -0
  176. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/search_symbol.py +0 -0
  177. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/sort_direction.py +0 -0
  178. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/symbol_group.py +0 -0
  179. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/symbol_info.py +0 -0
  180. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/symbol_type.py +0 -0
  181. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/timeframe.py +0 -0
  182. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/models/udf_config.py +0 -0
  183. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/py.typed +0 -0
  184. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/klines/client/rest.py +0 -0
  185. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/__init__.py +0 -0
  186. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/__init__.py +0 -0
  187. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/admin_api.py +0 -0
  188. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/logs_api.py +0 -0
  189. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/markets_api.py +0 -0
  190. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/quote_currencies_api.py +0 -0
  191. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/status_api.py +0 -0
  192. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api/tokens_api.py +0 -0
  193. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api_client.py +0 -0
  194. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/api_response.py +0 -0
  195. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/exceptions.py +0 -0
  196. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/api_error_identifier.py +0 -0
  197. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/api_error_level.py +0 -0
  198. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/api_error_type.py +0 -0
  199. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/exception_detail.py +0 -0
  200. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
  201. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
  202. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/log_level.py +0 -0
  203. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/market_type.py +0 -0
  204. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/ohlcv.py +0 -0
  205. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/severity.py +0 -0
  206. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/time_interval.py +0 -0
  207. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/models/trading_status.py +0 -0
  208. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/py.typed +0 -0
  209. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/metrics/client/rest.py +0 -0
  210. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/__init__.py +0 -0
  211. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/__init__.py +0 -0
  212. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api/__init__.py +0 -0
  213. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api/admin_api.py +0 -0
  214. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api/now_payments_api.py +0 -0
  215. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api/payments_api.py +0 -0
  216. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api/products_api.py +0 -0
  217. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api/status_api.py +0 -0
  218. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api_client.py +0 -0
  219. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/api_response.py +0 -0
  220. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/configuration.py +0 -0
  221. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/exceptions.py +0 -0
  222. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/__init__.py +0 -0
  223. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/exception_detail.py +0 -0
  224. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/log_level.py +0 -0
  225. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  226. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  227. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/payment.py +0 -0
  228. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/payment_status.py +0 -0
  229. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/product_create.py +0 -0
  230. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/product_read.py +0 -0
  231. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/product_sub_read.py +0 -0
  232. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/product_update.py +0 -0
  233. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/provider.py +0 -0
  234. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/response_getuptime.py +0 -0
  235. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/models/scope.py +0 -0
  236. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/py.typed +0 -0
  237. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/client/rest.py +0 -0
  238. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/pay/main.py +0 -0
  239. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/__init__.py +0 -0
  240. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/__init__.py +0 -0
  241. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/__init__.py +0 -0
  242. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/api_keys_api.py +0 -0
  243. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/bots_api.py +0 -0
  244. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/exchanges_api.py +0 -0
  245. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
  246. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/notifications_api.py +0 -0
  247. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/orders_api.py +0 -0
  248. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/status_api.py +0 -0
  249. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/strategies_api.py +0 -0
  250. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
  251. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api_client.py +0 -0
  252. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/api_response.py +0 -0
  253. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/configuration.py +0 -0
  254. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/exceptions.py +0 -0
  255. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/__init__.py +0 -0
  256. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/action_model.py +0 -0
  257. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/bot_model.py +0 -0
  258. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/bot_status.py +0 -0
  259. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/exception_detail.py +0 -0
  260. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
  261. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/execution_ids.py +0 -0
  262. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/futures_balance.py +0 -0
  263. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  264. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/margin_mode.py +0 -0
  265. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/notification_model.py +0 -0
  266. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/order_model.py +0 -0
  267. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/order_status.py +0 -0
  268. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  269. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
  270. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
  271. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
  272. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
  273. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/tpsl.py +0 -0
  274. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  275. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/py.typed +0 -0
  276. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/client/rest.py +0 -0
  277. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn/trade/main.py +0 -0
  278. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn.egg-info/dependency_links.txt +0 -0
  279. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn.egg-info/entry_points.txt +0 -0
  280. {crypticorn-2.10.3 → crypticorn-2.11.4}/crypticorn.egg-info/top_level.txt +0 -0
  281. {crypticorn-2.10.3 → crypticorn-2.11.4}/requirements/dev.txt +0 -0
  282. {crypticorn-2.10.3 → crypticorn-2.11.4}/requirements/extra.txt +0 -0
  283. {crypticorn-2.10.3 → crypticorn-2.11.4}/requirements/test.txt +0 -0
  284. {crypticorn-2.10.3 → crypticorn-2.11.4}/setup.cfg +0 -0
  285. {crypticorn-2.10.3 → crypticorn-2.11.4}/tests/test_auth_client.py +0 -0
  286. {crypticorn-2.10.3 → crypticorn-2.11.4}/tests/test_config.py +0 -0
  287. {crypticorn-2.10.3 → crypticorn-2.11.4}/tests/test_enums.py +0 -0
  288. {crypticorn-2.10.3 → crypticorn-2.11.4}/tests/test_errors.py +0 -0
  289. {crypticorn-2.10.3 → crypticorn-2.11.4}/tests/test_pagination.py +0 -0
@@ -1,6 +1,89 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.11.4 (2025-05-15)
5
+
6
+ ### Bug Fixes
7
+
8
+ - Fixes dist build
9
+ ([`3913bd7`](https://github.com/crypticorn-ai/api-client/commit/3913bd74a12d50727197efe72a68f36c9165c068))
10
+
11
+
12
+ ## v2.11.3 (2025-05-15)
13
+
14
+ ### Bug Fixes
15
+
16
+ - Fixes ci permission error copying static folder to dist
17
+ ([`10f801b`](https://github.com/crypticorn-ai/api-client/commit/10f801b6f760c3f7de12fe830f9d3dc6895dde67))
18
+
19
+
20
+ ## v2.11.2 (2025-05-15)
21
+
22
+ ### Bug Fixes
23
+
24
+ - Fixes ohlc dataframe response
25
+ ([`a334782`](https://github.com/crypticorn-ai/api-client/commit/a33478251a80e6255a9d4c0a2c43d701403c3399))
26
+
27
+
28
+ ## v2.11.1 (2025-05-15)
29
+
30
+ ### Bug Fixes
31
+
32
+ - Fixes dataframe conversion for get_available_exchanges_fmt
33
+ ([`4c85d67`](https://github.com/crypticorn-ai/api-client/commit/4c85d67386fbda1b50a237df10a10a8eb2fb3531))
34
+
35
+ ### Build System
36
+
37
+ - Include static files in dist
38
+ ([`1b07130`](https://github.com/crypticorn-ai/api-client/commit/1b071302cb2f15f086b7812152cde8d425c2de9d))
39
+
40
+ ### Continuous Integration
41
+
42
+ - Run test only on dev/main
43
+ ([`dcc59e1`](https://github.com/crypticorn-ai/api-client/commit/dcc59e16e8138761c76da0cc936db7738058ac19))
44
+
45
+ ### Documentation
46
+
47
+ - Document scope structure
48
+ ([`fe0dca0`](https://github.com/crypticorn-ai/api-client/commit/fe0dca0d41ce79d0c1809a3d457a52a182cf37c4))
49
+
50
+ - Update docstring example `configure` method
51
+ ([`30f59b3`](https://github.com/crypticorn-ai/api-client/commit/30f59b37b5fe3ae8f22ee0a5e72e9a7274dee23c))
52
+
53
+ ### Refactoring
54
+
55
+ - Make merge-env script template more robust
56
+ ([`1314f71`](https://github.com/crypticorn-ai/api-client/commit/1314f718fd4299a37e55424b3ea14c573f746aeb))
57
+
58
+ ### Testing
59
+
60
+ - Add expiration to test api keys
61
+ ([`2e4044f`](https://github.com/crypticorn-ai/api-client/commit/2e4044f05caa2ae35fe9cadc05eeed8f65d0049b))
62
+
63
+
64
+ ## v2.11.0 (2025-05-13)
65
+
66
+ ### Bug Fixes
67
+
68
+ - Use strenum as backport for python < 3.11
69
+ ([`a14589b`](https://github.com/crypticorn-ai/api-client/commit/a14589b7c70a07b2a896526ee373d1136e07c675))
70
+
71
+ ### Continuous Integration
72
+
73
+ - Test on all supported python versions
74
+ ([`63e8006`](https://github.com/crypticorn-ai/api-client/commit/63e8006d2e226ddcf139f5ce25bd7edfc9a99ca3))
75
+
76
+ ### Features
77
+
78
+ - Add support for python 3.9
79
+ ([`d4ca2d2`](https://github.com/crypticorn-ai/api-client/commit/d4ca2d2723091756b31a70c1d851c0ab746b9bde))
80
+
81
+ ### Refactoring
82
+
83
+ - Update type annotations to use Union for compatibility
84
+ ([`4476864`](https://github.com/crypticorn-ai/api-client/commit/4476864fc52be5516e2d187254669b28da6d9202))
85
+
86
+
4
87
  ## v2.10.3 (2025-05-12)
5
88
 
6
89
  ### Bug Fixes
@@ -2,4 +2,4 @@ graft crypticorn/cli/templates
2
2
  include CHANGELOG.md
3
3
  include README.md
4
4
  include LICENSE
5
- include static
5
+ graft static
@@ -1,23 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.10.3
3
+ Version: 2.11.4
4
4
  Summary: Maximise Your Crypto Trading Profits with Machine Learning
5
5
  Author-email: Crypticorn <timon@crypticorn.com>
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.
6
+ License-Expression: MIT
21
7
  Project-URL: Homepage, https://crypticorn.com
22
8
  Project-URL: Documentation, https://docs.crypticorn.com
23
9
  Project-URL: Dashboard, https://app.crypticorn.com
@@ -26,19 +12,19 @@ Classifier: Topic :: Scientific/Engineering
26
12
  Classifier: Development Status :: 4 - Beta
27
13
  Classifier: Intended Audience :: Developers
28
14
  Classifier: Operating System :: OS Independent
29
- Classifier: License :: OSI Approved :: MIT License
30
15
  Classifier: Programming Language :: Python :: 3.10
31
16
  Classifier: Programming Language :: Python :: 3.11
32
17
  Classifier: Programming Language :: Python :: 3.12
33
18
  Classifier: Programming Language :: Python :: 3.13
34
19
  Classifier: Typing :: Typed
35
- Requires-Python: >=3.10
20
+ Requires-Python: >=3.9
36
21
  Description-Content-Type: text/markdown
37
22
  License-File: LICENSE
38
23
  Requires-Dist: fastapi<1.0.0,>=0.115.0
39
24
  Requires-Dist: click<9.0.0,>=8.0.0
40
25
  Requires-Dist: psutil<8.0.0,>=7.0.0
41
26
  Requires-Dist: setuptools<81.0.0,>=80.0.0
27
+ Requires-Dist: strenum
42
28
  Requires-Dist: urllib3<3.0.0,>=1.25.3
43
29
  Requires-Dist: python_dateutil<3.0.0,>=2.8.2
44
30
  Requires-Dist: aiohttp<4.0.0,>=3.8.4
@@ -76,7 +62,7 @@ crypto market - and programmatically interact with the entire Crypticorn ecosyst
76
62
 
77
63
  ## Installation
78
64
 
79
- You need Python 3.10+ installed to be able to use this library.
65
+ You need Python 3.9+ installed to be able to use this library.
80
66
 
81
67
  You can install the latest stable version from [PyPi](https://pypi.org/project/crypticorn/):
82
68
  ```bash
@@ -98,7 +84,7 @@ from crypticorn import ApiClient
98
84
  ```
99
85
  The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
100
86
 
101
- <img src="pip-structure.svg" alt="pip package structure" />
87
+ <img src="static/pip-structure.svg" alt="pip package structure" />
102
88
 
103
89
  You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
104
90
 
@@ -115,7 +101,12 @@ from crypticorn.common import Scope, Exchange
115
101
 
116
102
  ## Authentication
117
103
 
118
- To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer). Then instantiate the `ApiClient` class with your copied key.
104
+ To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer).
105
+
106
+ The scopes you can assign, resemble the [package structure](#structure). The first part defines if the scopes is for reading or writing a ressource, the second matches the API, the third the ROUTER being used. `read` scopes gives access to GET, `write` to PUT, PATCH, POST, DELETE endpoints.
107
+
108
+ There are scopes which don't follow this structure. Those are either scopes that must be purchased (e.g. `read:predictions`), give access to endpoints existing in all APIs (e.g. `read:admin`) or provide access to an entire service (e.g. `read:sentiment`).
109
+
119
110
 
120
111
  ## Basic Usage
121
112
 
@@ -7,7 +7,7 @@ crypto market - and programmatically interact with the entire Crypticorn ecosyst
7
7
 
8
8
  ## Installation
9
9
 
10
- You need Python 3.10+ installed to be able to use this library.
10
+ You need Python 3.9+ installed to be able to use this library.
11
11
 
12
12
  You can install the latest stable version from [PyPi](https://pypi.org/project/crypticorn/):
13
13
  ```bash
@@ -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="pip-structure.svg" alt="pip package structure" />
32
+ <img src="static/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
 
@@ -46,7 +46,12 @@ from crypticorn.common import Scope, Exchange
46
46
 
47
47
  ## Authentication
48
48
 
49
- To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer). Then instantiate the `ApiClient` class with your copied key.
49
+ To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer).
50
+
51
+ The scopes you can assign, resemble the [package structure](#structure). The first part defines if the scopes is for reading or writing a ressource, the second matches the API, the third the ROUTER being used. `read` scopes gives access to GET, `write` to PUT, PATCH, POST, DELETE endpoints.
52
+
53
+ There are scopes which don't follow this structure. Those are either scopes that must be purchased (e.g. `read:predictions`), give access to endpoints existing in all APIs (e.g. `read:admin`) or provide access to an entire service (e.g. `read:sentiment`).
54
+
50
55
 
51
56
  ## Basic Usage
52
57
 
@@ -195,7 +195,7 @@ class Configuration:
195
195
  debug: Optional[bool] = None,
196
196
  ) -> None:
197
197
  """Constructor"""
198
- self._base_path = "http://localhost/v1/auth" if host is None else host
198
+ self._base_path = "https://api.crypticorn.dev/v1/auth" if host is None else host
199
199
  """Default Base url
200
200
  """
201
201
  self.server_index = 0 if server_index is None and host is None else server_index
@@ -528,7 +528,7 @@ class Configuration:
528
528
  """
529
529
  return [
530
530
  {
531
- "url": "http://localhost/v1/auth",
531
+ "url": "https://api.crypticorn.dev/v1/auth",
532
532
  "description": "No description provided",
533
533
  }
534
534
  ]
@@ -78,12 +78,13 @@ class CreateApiKeyRequest(BaseModel):
78
78
  "read:metrics:tokens",
79
79
  "read:metrics:markets",
80
80
  "read:sentiment",
81
+ "read:klines",
81
82
  "read:admin",
82
83
  "write:admin",
83
84
  ]
84
85
  ):
85
86
  raise ValueError(
86
- "each list item must be one of ('read:predictions', '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:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:admin', 'write:admin')"
87
+ "each list item must be one of ('read:predictions', '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:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:klines', 'read:admin', 'write:admin')"
87
88
  )
88
89
  return value
89
90
 
@@ -86,12 +86,13 @@ class GetApiKeys200ResponseInner(BaseModel):
86
86
  "read:metrics:tokens",
87
87
  "read:metrics:markets",
88
88
  "read:sentiment",
89
+ "read:klines",
89
90
  "read:admin",
90
91
  "write:admin",
91
92
  ]
92
93
  ):
93
94
  raise ValueError(
94
- "each list item must be one of ('read:predictions', '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:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:admin', 'write:admin')"
95
+ "each list item must be one of ('read:predictions', '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:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:klines', 'read:admin', 'write:admin')"
95
96
  )
96
97
  return value
97
98
 
@@ -1,17 +1,15 @@
1
1
  #!/usr/bin/env bash
2
-
3
2
  # this script merges the env variables from the environment and the .env.example file into the .env file
4
3
  # the appended variables take precedence over the .env.example variables (if both are set)
5
4
 
6
- # Make executable before running in github actions
7
- # chmod +x scripts/merge-env.sh
8
-
9
5
  # Usage in a github action:
10
6
  # - name: Generate .env
11
7
  # run: ./scripts/merge-env.sh
8
+ # add this after checkout before copying files to the host
12
9
 
13
10
  set -e
14
11
 
15
12
  cp .env.example .env
16
13
  echo >> .env
17
- printenv | awk -F= '{print $1"=\""substr($0, index($0,$2))"\""}' >> .env
14
+ echo "# Environment variables" >> .env
15
+ printenv | awk -F= '/^[a-zA-Z_][a-zA-Z0-9_]*=/{print $1"=\""substr($0, index($0,$2))"\""}' | sort | uniq >> .env
@@ -119,8 +119,8 @@ class ApiClient:
119
119
  :param service: The service to configure.
120
120
 
121
121
  Example:
122
- >>> async with ApiClient(base_url=BaseUrl.DEV, jwt=jwt) as client:
123
- >>> client.configure(config=HiveConfig(host="http://localhost:8000"), client=client.hive)
122
+ >>> async with ApiClient() as client:
123
+ ... client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
124
124
  """
125
125
  assert Service.validate(service), f"Invalid service: {service}"
126
126
  client = self._services[service]
@@ -1,4 +1,7 @@
1
- from enum import StrEnum
1
+ try:
2
+ from enum import StrEnum
3
+ except ImportError:
4
+ from strenum import StrEnum
2
5
 
3
6
 
4
7
  class AnsiColors(StrEnum):
@@ -18,6 +18,7 @@ from fastapi.security import (
18
18
  APIKeyHeader,
19
19
  )
20
20
  from typing_extensions import Annotated
21
+ from typing import Union
21
22
 
22
23
  # Auth Schemes
23
24
  http_bearer = HTTPBearer(
@@ -132,7 +133,7 @@ class AuthHandler:
132
133
 
133
134
  async def api_key_auth(
134
135
  self,
135
- api_key: Annotated[str | None, Depends(apikey_header)] = None,
136
+ api_key: Annotated[Union[str, None], Depends(apikey_header)] = None,
136
137
  sec: SecurityScopes = SecurityScopes(),
137
138
  ) -> Verify200Response:
138
139
  """
@@ -144,7 +145,7 @@ class AuthHandler:
144
145
  async def bearer_auth(
145
146
  self,
146
147
  bearer: Annotated[
147
- HTTPAuthorizationCredentials | None,
148
+ Union[HTTPAuthorizationCredentials, None],
148
149
  Depends(http_bearer),
149
150
  ] = None,
150
151
  sec: SecurityScopes = SecurityScopes(),
@@ -158,9 +159,9 @@ class AuthHandler:
158
159
  async def combined_auth(
159
160
  self,
160
161
  bearer: Annotated[
161
- HTTPAuthorizationCredentials | None, Depends(http_bearer)
162
+ Union[HTTPAuthorizationCredentials, None], Depends(http_bearer)
162
163
  ] = None,
163
- api_key: Annotated[str | None, Depends(apikey_header)] = None,
164
+ api_key: Annotated[Union[str, None], Depends(apikey_header)] = None,
164
165
  sec: SecurityScopes = SecurityScopes(),
165
166
  ) -> Verify200Response:
166
167
  """
@@ -202,7 +203,7 @@ class AuthHandler:
202
203
 
203
204
  async def ws_api_key_auth(
204
205
  self,
205
- api_key: Annotated[str | None, Query()] = None,
206
+ api_key: Annotated[Union[str, None], Query()] = None,
206
207
  sec: SecurityScopes = SecurityScopes(),
207
208
  ) -> Verify200Response:
208
209
  """
@@ -213,7 +214,7 @@ class AuthHandler:
213
214
 
214
215
  async def ws_bearer_auth(
215
216
  self,
216
- bearer: Annotated[str | None, Query()] = None,
217
+ bearer: Annotated[Union[str, None], Query()] = None,
217
218
  sec: SecurityScopes = SecurityScopes(),
218
219
  ) -> Verify200Response:
219
220
  """
@@ -224,8 +225,8 @@ class AuthHandler:
224
225
 
225
226
  async def ws_combined_auth(
226
227
  self,
227
- bearer: Annotated[str | None, Query()] = None,
228
- api_key: Annotated[str | None, Query()] = None,
228
+ bearer: Annotated[Union[str, None], Query()] = None,
229
+ api_key: Annotated[Union[str, None], Query()] = None,
229
230
  sec: SecurityScopes = SecurityScopes(),
230
231
  ) -> Verify200Response:
231
232
  """
@@ -1,6 +1,10 @@
1
1
  """Defines common enumerations used throughout the codebase for type safety and consistency."""
2
2
 
3
- from enum import StrEnum
3
+ try:
4
+ from enum import StrEnum
5
+ except ImportError:
6
+ from strenum import StrEnum
7
+
4
8
  from crypticorn.common.mixins import ValidateEnumMixin
5
9
 
6
10
 
@@ -1,9 +1,14 @@
1
1
  """Comprehensive error handling system defining various API error types, HTTP exceptions, and error content structures."""
2
2
 
3
- from enum import Enum, StrEnum
3
+ from enum import Enum
4
4
  from fastapi import status
5
5
  from crypticorn.common.mixins import ApiErrorFallback
6
6
 
7
+ try:
8
+ from enum import StrEnum
9
+ except ImportError:
10
+ from strenum import StrEnum
11
+
7
12
 
8
13
  class ApiErrorType(StrEnum):
9
14
  """Type of the API error."""
@@ -1,5 +1,4 @@
1
1
  from typing import Optional, Dict, Any
2
- from enum import StrEnum
3
2
  from pydantic import BaseModel, Field
4
3
  from fastapi import HTTPException as FastAPIHTTPException, Request, FastAPI
5
4
  from fastapi.exceptions import RequestValidationError, ResponseValidationError
@@ -8,6 +7,11 @@ from crypticorn.common import ApiError, ApiErrorIdentifier, ApiErrorType, ApiErr
8
7
  import logging
9
8
  import json
10
9
 
10
+ try:
11
+ from enum import StrEnum
12
+ except ImportError:
13
+ from strenum import StrEnum
14
+
11
15
  _logger = logging.getLogger("crypticorn")
12
16
 
13
17
 
@@ -2,12 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import sys
5
- from enum import StrEnum
6
5
  from crypticorn.common.mixins import ValidateEnumMixin
7
6
  from crypticorn.common.ansi_colors import AnsiColors as C
8
7
  from datetime import datetime
9
8
  import os
10
9
 
10
+ try:
11
+ from enum import StrEnum
12
+ except ImportError:
13
+ from strenum import StrEnum
14
+
11
15
 
12
16
  class LogLevel(ValidateEnumMixin, StrEnum):
13
17
  DEBUG = "DEBUG"
@@ -1,4 +1,7 @@
1
- from enum import StrEnum
1
+ try:
2
+ from enum import StrEnum
3
+ except ImportError:
4
+ from strenum import StrEnum
2
5
 
3
6
 
4
7
  class Scope(StrEnum):
@@ -52,6 +55,9 @@ class Scope(StrEnum):
52
55
  # Sentiment scopes
53
56
  READ_SENTIMENT = "read:sentiment"
54
57
 
58
+ # Klines scopes
59
+ READ_KLINES = "read:klines"
60
+
55
61
  @classmethod
56
62
  def admin_scopes(cls) -> list["Scope"]:
57
63
  """Scopes that are only available to admins."""
@@ -74,4 +80,11 @@ class Scope(StrEnum):
74
80
  """Scopes that can be purchased."""
75
81
  return [
76
82
  cls.READ_PREDICTIONS,
83
+ cls.READ_METRICS_MARKETCAP,
84
+ cls.READ_METRICS_INDICATORS,
85
+ cls.READ_METRICS_EXCHANGES,
86
+ cls.READ_METRICS_TOKENS,
87
+ cls.READ_METRICS_MARKETS,
88
+ cls.READ_KLINES,
89
+ cls.READ_SENTIMENT,
77
90
  ]
@@ -1,6 +1,10 @@
1
- from enum import StrEnum
2
1
  from crypticorn.common.enums import ValidateEnumMixin
3
2
 
3
+ try:
4
+ from enum import StrEnum
5
+ except ImportError:
6
+ from strenum import StrEnum
7
+
4
8
 
5
9
  class ApiEnv(StrEnum):
6
10
  """The environment the API is being used with."""
@@ -1,7 +1,7 @@
1
1
  """General utility functions and helper methods used across the codebase."""
2
2
 
3
3
  from datetime import datetime
4
- from typing import Any
4
+ from typing import Any, Union
5
5
  from decimal import Decimal
6
6
  import string
7
7
  import random
@@ -41,8 +41,8 @@ def gen_random_id(length: int = 20) -> str:
41
41
  "The `is_equal` method is deprecated; use `math.is_close` instead.", category=None
42
42
  )
43
43
  def is_equal(
44
- a: float | Decimal,
45
- b: float | Decimal,
44
+ a: Union[float, Decimal],
45
+ b: Union[float, Decimal],
46
46
  rel_tol: float = 1e-9,
47
47
  abs_tol: float = 0.0,
48
48
  ) -> bool:
@@ -1,6 +1,7 @@
1
1
  """Crypticorn-specific warnings."""
2
2
 
3
3
  from __future__ import annotations
4
+ from typing import Union
4
5
 
5
6
 
6
7
  class CrypticornDeprecationWarning(DeprecationWarning):
@@ -24,7 +25,7 @@ class CrypticornDeprecationWarning(DeprecationWarning):
24
25
  message: str,
25
26
  *args: object,
26
27
  since: tuple[int, int],
27
- expected_removal: tuple[int, int] | None = None,
28
+ expected_removal: Union[tuple[int, int], None] = None,
28
29
  ) -> None:
29
30
  super().__init__(message, *args)
30
31
  self.message = message.rstrip(".")
@@ -65,7 +65,19 @@ class OHLCVDataApiWrapper(OHLCVDataApi):
65
65
  """
66
66
  pd = optional_import("pandas", "extra")
67
67
  response = await self.get_ohlcv(*args, **kwargs)
68
- return pd.DataFrame(response)
68
+ rows = []
69
+ for item in response:
70
+ row = {
71
+ 'timestamp': item.timestamp,
72
+ 'open': item.open,
73
+ 'high': item.high,
74
+ 'low': item.low,
75
+ 'close': item.close,
76
+ 'volume': item.volume
77
+ }
78
+ rows.append(row)
79
+ df = pd.DataFrame(rows)
80
+ return df
69
81
 
70
82
 
71
83
  class SymbolsApiWrapper(SymbolsApi):
@@ -43,11 +43,15 @@ from crypticorn.metrics.client.models.api_error_identifier import ApiErrorIdenti
43
43
  from crypticorn.metrics.client.models.api_error_level import ApiErrorLevel
44
44
  from crypticorn.metrics.client.models.api_error_type import ApiErrorType
45
45
  from crypticorn.metrics.client.models.exception_detail import ExceptionDetail
46
+ from crypticorn.metrics.client.models.exchange_availability import ExchangeAvailability
46
47
  from crypticorn.metrics.client.models.exchange_mapping import ExchangeMapping
47
48
  from crypticorn.metrics.client.models.internal_exchange import InternalExchange
48
49
  from crypticorn.metrics.client.models.log_level import LogLevel
49
50
  from crypticorn.metrics.client.models.market_type import MarketType
50
51
  from crypticorn.metrics.client.models.marketcap_ranking import MarketcapRanking
52
+ from crypticorn.metrics.client.models.marketcap_symbol_ranking import (
53
+ MarketcapSymbolRanking,
54
+ )
51
55
  from crypticorn.metrics.client.models.ohlcv import OHLCV
52
56
  from crypticorn.metrics.client.models.severity import Severity
53
57
  from crypticorn.metrics.client.models.time_interval import TimeInterval
@@ -17,8 +17,9 @@ from typing import Any, Dict, List, Optional, Tuple, Union
17
17
  from typing_extensions import Annotated
18
18
 
19
19
  from pydantic import Field, StrictInt, StrictStr
20
- from typing import Any, Dict, List, Optional
20
+ from typing import List, Optional
21
21
  from typing_extensions import Annotated
22
+ from crypticorn.metrics.client.models.exchange_availability import ExchangeAvailability
22
23
  from crypticorn.metrics.client.models.exchange_mapping import ExchangeMapping
23
24
  from crypticorn.metrics.client.models.internal_exchange import InternalExchange
24
25
  from crypticorn.metrics.client.models.market_type import MarketType
@@ -88,7 +89,7 @@ class ExchangesApi:
88
89
  _content_type: Optional[StrictStr] = None,
89
90
  _headers: Optional[Dict[StrictStr, Any]] = None,
90
91
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
91
- ) -> List[Dict[str, object]]:
92
+ ) -> List[ExchangeAvailability]:
92
93
  """Get Available Exchanges
93
94
 
94
95
  Get available exchanges for a symbol with various filtering options.
@@ -144,7 +145,7 @@ class ExchangesApi:
144
145
  )
145
146
 
146
147
  _response_types_map: Dict[str, Optional[str]] = {
147
- "200": "List[Dict[str, object]]",
148
+ "200": "List[ExchangeAvailability]",
148
149
  }
149
150
  response_data = await self.api_client.call_api(
150
151
  *_param, _request_timeout=_request_timeout
@@ -201,7 +202,7 @@ class ExchangesApi:
201
202
  _content_type: Optional[StrictStr] = None,
202
203
  _headers: Optional[Dict[StrictStr, Any]] = None,
203
204
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
204
- ) -> ApiResponse[List[Dict[str, object]]]:
205
+ ) -> ApiResponse[List[ExchangeAvailability]]:
205
206
  """Get Available Exchanges
206
207
 
207
208
  Get available exchanges for a symbol with various filtering options.
@@ -257,7 +258,7 @@ class ExchangesApi:
257
258
  )
258
259
 
259
260
  _response_types_map: Dict[str, Optional[str]] = {
260
- "200": "List[Dict[str, object]]",
261
+ "200": "List[ExchangeAvailability]",
261
262
  }
262
263
  response_data = await self.api_client.call_api(
263
264
  *_param, _request_timeout=_request_timeout
@@ -370,7 +371,7 @@ class ExchangesApi:
370
371
  )
371
372
 
372
373
  _response_types_map: Dict[str, Optional[str]] = {
373
- "200": "List[Dict[str, object]]",
374
+ "200": "List[ExchangeAvailability]",
374
375
  }
375
376
  response_data = await self.api_client.call_api(
376
377
  *_param, _request_timeout=_request_timeout