crypticorn 2.11.0__tar.gz → 2.11.5__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.11.0 → crypticorn-2.11.5}/CHANGELOG.md +68 -0
  2. {crypticorn-2.11.0 → crypticorn-2.11.5}/MANIFEST.in +1 -1
  3. {crypticorn-2.11.0/crypticorn.egg-info → crypticorn-2.11.5}/PKG-INFO +9 -19
  4. {crypticorn-2.11.0 → crypticorn-2.11.5}/README.md +7 -2
  5. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/configuration.py +2 -2
  6. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_api_key_request.py +2 -1
  7. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
  8. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/merge-env.sh +3 -5
  9. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/client.py +2 -2
  10. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/ansi_colors.py +1 -0
  11. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/auth.py +2 -3
  12. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/errors.py +1 -0
  13. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/exceptions.py +1 -0
  14. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/scopes.py +10 -0
  15. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/warnings.py +1 -0
  16. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/admin_api.py +14 -14
  17. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/status_api.py +6 -6
  18. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/configuration.py +4 -2
  19. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/api_error_identifier.py +1 -1
  20. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/api_error_level.py +1 -1
  21. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/api_error_type.py +1 -1
  22. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/exception_detail.py +1 -1
  23. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/ohlcv.py +31 -6
  24. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/main.py +13 -1
  25. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/__init__.py +4 -0
  26. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/exchanges_api.py +7 -6
  27. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/indicators_api.py +12 -6
  28. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/marketcap_api.py +49 -31
  29. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/configuration.py +2 -2
  30. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/__init__.py +4 -0
  31. crypticorn-2.11.5/crypticorn/metrics/client/models/exchange_availability.py +88 -0
  32. crypticorn-2.11.5/crypticorn/metrics/client/models/marketcap_ranking.py +89 -0
  33. crypticorn-2.11.0/crypticorn/metrics/client/models/marketcap_ranking.py → crypticorn-2.11.5/crypticorn/metrics/client/models/marketcap_symbol_ranking.py +4 -4
  34. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/main.py +12 -19
  35. {crypticorn-2.11.0 → crypticorn-2.11.5/crypticorn.egg-info}/PKG-INFO +9 -19
  36. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/SOURCES.txt +6 -0
  37. {crypticorn-2.11.0 → crypticorn-2.11.5}/pyproject.toml +7 -3
  38. crypticorn-2.11.5/static/favicon.svg +12 -0
  39. crypticorn-2.11.5/static/logo.svg +13 -0
  40. crypticorn-2.11.5/static/pip-structure.drawio +31 -0
  41. crypticorn-2.11.5/static/pip-structure.svg +4 -0
  42. {crypticorn-2.11.0 → crypticorn-2.11.5}/LICENSE +0 -0
  43. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/__init__.py +0 -0
  44. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/__init__.py +0 -0
  45. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/__init__.py +0 -0
  46. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/__init__.py +0 -0
  47. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/admin_api.py +0 -0
  48. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/auth_api.py +0 -0
  49. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/service_api.py +0 -0
  50. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/user_api.py +0 -0
  51. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/wallet_api.py +0 -0
  52. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api_client.py +0 -0
  53. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api_response.py +0 -0
  54. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/exceptions.py +0 -0
  55. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/__init__.py +0 -0
  56. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  57. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  58. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  59. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  60. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
  61. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  62. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_user_request.py +0 -0
  63. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  64. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  65. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  66. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  67. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  68. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  69. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  70. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  71. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  72. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  73. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  74. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  75. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
  76. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  77. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  78. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  79. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  80. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  81. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/update_user_request.py +0 -0
  82. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
  83. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  84. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  85. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify200_response.py +0 -0
  86. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  87. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  88. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
  89. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  90. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  91. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  92. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/whoami200_response.py +0 -0
  93. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/py.typed +0 -0
  94. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/rest.py +0 -0
  95. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/main.py +0 -0
  96. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/__init__.py +0 -0
  97. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/__main__.py +0 -0
  98. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/init.py +0 -0
  99. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/Dockerfile +0 -0
  100. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/__init__.py +0 -0
  101. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/auth.py +0 -0
  102. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/dependabot.yml +0 -0
  103. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/ruff.yml +0 -0
  104. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/version.py +0 -0
  105. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/__init__.py +0 -0
  106. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/decorators.py +0 -0
  107. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/enums.py +0 -0
  108. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/logging.py +0 -0
  109. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/middleware.py +0 -0
  110. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/mixins.py +0 -0
  111. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/openapi.py +0 -0
  112. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/pagination.py +0 -0
  113. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/router/admin_router.py +0 -0
  114. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/router/status_router.py +0 -0
  115. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/urls.py +0 -0
  116. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/utils.py +0 -0
  117. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/__init__.py +0 -0
  118. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/__init__.py +0 -0
  119. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/__init__.py +0 -0
  120. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/admin_api.py +0 -0
  121. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/data_api.py +0 -0
  122. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/models_api.py +0 -0
  123. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/status_api.py +0 -0
  124. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api_client.py +0 -0
  125. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api_response.py +0 -0
  126. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/configuration.py +0 -0
  127. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/exceptions.py +0 -0
  128. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/__init__.py +0 -0
  129. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/api_error_identifier.py +0 -0
  130. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/api_error_level.py +0 -0
  131. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/api_error_type.py +0 -0
  132. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/coins.py +0 -0
  133. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_download_response.py +0 -0
  134. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_info.py +0 -0
  135. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_options.py +0 -0
  136. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_version.py +0 -0
  137. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_version_info.py +0 -0
  138. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/download_links.py +0 -0
  139. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/evaluation.py +0 -0
  140. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  141. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/exception_detail.py +0 -0
  142. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/feature_size.py +0 -0
  143. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/log_level.py +0 -0
  144. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_create.py +0 -0
  145. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_read.py +0 -0
  146. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_status.py +0 -0
  147. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_update.py +0 -0
  148. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/target.py +0 -0
  149. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/target_info.py +0 -0
  150. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/target_type.py +0 -0
  151. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/py.typed +0 -0
  152. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/rest.py +0 -0
  153. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/main.py +0 -0
  154. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/utils.py +0 -0
  155. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/__init__.py +0 -0
  156. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/__init__.py +0 -0
  157. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/__init__.py +0 -0
  158. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
  159. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
  160. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
  161. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/symbols_api.py +0 -0
  162. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/udf_api.py +0 -0
  163. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api_client.py +0 -0
  164. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api_response.py +0 -0
  165. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/exceptions.py +0 -0
  166. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/__init__.py +0 -0
  167. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
  168. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/funding_rate.py +0 -0
  169. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
  170. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/internal_exchange.py +0 -0
  171. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/log_level.py +0 -0
  172. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/market_type.py +0 -0
  173. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/resolution.py +0 -0
  174. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/search_symbol.py +0 -0
  175. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/sort_direction.py +0 -0
  176. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/symbol_group.py +0 -0
  177. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/symbol_info.py +0 -0
  178. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/symbol_type.py +0 -0
  179. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/timeframe.py +0 -0
  180. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/udf_config.py +0 -0
  181. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/py.typed +0 -0
  182. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/rest.py +0 -0
  183. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/__init__.py +0 -0
  184. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/__init__.py +0 -0
  185. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/admin_api.py +0 -0
  186. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/logs_api.py +0 -0
  187. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/markets_api.py +0 -0
  188. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/quote_currencies_api.py +0 -0
  189. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/status_api.py +0 -0
  190. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/tokens_api.py +0 -0
  191. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api_client.py +0 -0
  192. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api_response.py +0 -0
  193. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/exceptions.py +0 -0
  194. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/api_error_identifier.py +0 -0
  195. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/api_error_level.py +0 -0
  196. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/api_error_type.py +0 -0
  197. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/exception_detail.py +0 -0
  198. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
  199. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
  200. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/log_level.py +0 -0
  201. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/market_type.py +0 -0
  202. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/ohlcv.py +0 -0
  203. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/severity.py +0 -0
  204. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/time_interval.py +0 -0
  205. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/trading_status.py +0 -0
  206. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/py.typed +0 -0
  207. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/rest.py +0 -0
  208. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/__init__.py +0 -0
  209. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/__init__.py +0 -0
  210. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/__init__.py +0 -0
  211. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/admin_api.py +0 -0
  212. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/now_payments_api.py +0 -0
  213. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/payments_api.py +0 -0
  214. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/products_api.py +0 -0
  215. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/status_api.py +0 -0
  216. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api_client.py +0 -0
  217. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api_response.py +0 -0
  218. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/configuration.py +0 -0
  219. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/exceptions.py +0 -0
  220. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/__init__.py +0 -0
  221. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/exception_detail.py +0 -0
  222. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/log_level.py +0 -0
  223. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  224. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  225. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/payment.py +0 -0
  226. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/payment_status.py +0 -0
  227. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_create.py +0 -0
  228. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_read.py +0 -0
  229. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_sub_read.py +0 -0
  230. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_update.py +0 -0
  231. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/provider.py +0 -0
  232. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/response_getuptime.py +0 -0
  233. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/scope.py +0 -0
  234. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/py.typed +0 -0
  235. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/rest.py +0 -0
  236. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/main.py +0 -0
  237. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/__init__.py +0 -0
  238. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/__init__.py +0 -0
  239. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/__init__.py +0 -0
  240. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/api_keys_api.py +0 -0
  241. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/bots_api.py +0 -0
  242. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/exchanges_api.py +0 -0
  243. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
  244. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/notifications_api.py +0 -0
  245. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/orders_api.py +0 -0
  246. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/status_api.py +0 -0
  247. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/strategies_api.py +0 -0
  248. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
  249. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api_client.py +0 -0
  250. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api_response.py +0 -0
  251. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/configuration.py +0 -0
  252. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/exceptions.py +0 -0
  253. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/__init__.py +0 -0
  254. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/action_model.py +0 -0
  255. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/bot_model.py +0 -0
  256. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/bot_status.py +0 -0
  257. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/exception_detail.py +0 -0
  258. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
  259. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/execution_ids.py +0 -0
  260. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/futures_balance.py +0 -0
  261. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  262. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/margin_mode.py +0 -0
  263. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/notification_model.py +0 -0
  264. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/order_model.py +0 -0
  265. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/order_status.py +0 -0
  266. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  267. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
  268. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
  269. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
  270. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
  271. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/tpsl.py +0 -0
  272. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  273. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/py.typed +0 -0
  274. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/rest.py +0 -0
  275. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/main.py +0 -0
  276. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/dependency_links.txt +0 -0
  277. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/entry_points.txt +0 -0
  278. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/requires.txt +0 -0
  279. {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/top_level.txt +0 -0
  280. {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/dev.txt +0 -0
  281. {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/extra.txt +0 -0
  282. {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/main.txt +0 -0
  283. {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/test.txt +0 -0
  284. {crypticorn-2.11.0 → crypticorn-2.11.5}/setup.cfg +0 -0
  285. {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_auth_client.py +0 -0
  286. {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_config.py +0 -0
  287. {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_enums.py +0 -0
  288. {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_errors.py +0 -0
  289. {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_pagination.py +0 -0
@@ -1,6 +1,74 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.11.5 (2025-05-15)
5
+
6
+ ### Bug Fixes
7
+
8
+ - Klines OHLCV response fields can be None
9
+ ([`2c10e38`](https://github.com/crypticorn-ai/api-client/commit/2c10e38b4cd1f5304f276978b658a619e4cec171))
10
+
11
+
12
+ ## v2.11.4 (2025-05-15)
13
+
14
+ ### Bug Fixes
15
+
16
+ - Fixes dist build
17
+ ([`3913bd7`](https://github.com/crypticorn-ai/api-client/commit/3913bd74a12d50727197efe72a68f36c9165c068))
18
+
19
+
20
+ ## v2.11.3 (2025-05-15)
21
+
22
+ ### Bug Fixes
23
+
24
+ - Fixes ci permission error copying static folder to dist
25
+ ([`10f801b`](https://github.com/crypticorn-ai/api-client/commit/10f801b6f760c3f7de12fe830f9d3dc6895dde67))
26
+
27
+
28
+ ## v2.11.2 (2025-05-15)
29
+
30
+ ### Bug Fixes
31
+
32
+ - Fixes ohlc dataframe response
33
+ ([`a334782`](https://github.com/crypticorn-ai/api-client/commit/a33478251a80e6255a9d4c0a2c43d701403c3399))
34
+
35
+
36
+ ## v2.11.1 (2025-05-15)
37
+
38
+ ### Bug Fixes
39
+
40
+ - Fixes dataframe conversion for get_available_exchanges_fmt
41
+ ([`4c85d67`](https://github.com/crypticorn-ai/api-client/commit/4c85d67386fbda1b50a237df10a10a8eb2fb3531))
42
+
43
+ ### Build System
44
+
45
+ - Include static files in dist
46
+ ([`1b07130`](https://github.com/crypticorn-ai/api-client/commit/1b071302cb2f15f086b7812152cde8d425c2de9d))
47
+
48
+ ### Continuous Integration
49
+
50
+ - Run test only on dev/main
51
+ ([`dcc59e1`](https://github.com/crypticorn-ai/api-client/commit/dcc59e16e8138761c76da0cc936db7738058ac19))
52
+
53
+ ### Documentation
54
+
55
+ - Document scope structure
56
+ ([`fe0dca0`](https://github.com/crypticorn-ai/api-client/commit/fe0dca0d41ce79d0c1809a3d457a52a182cf37c4))
57
+
58
+ - Update docstring example `configure` method
59
+ ([`30f59b3`](https://github.com/crypticorn-ai/api-client/commit/30f59b37b5fe3ae8f22ee0a5e72e9a7274dee23c))
60
+
61
+ ### Refactoring
62
+
63
+ - Make merge-env script template more robust
64
+ ([`1314f71`](https://github.com/crypticorn-ai/api-client/commit/1314f718fd4299a37e55424b3ea14c573f746aeb))
65
+
66
+ ### Testing
67
+
68
+ - Add expiration to test api keys
69
+ ([`2e4044f`](https://github.com/crypticorn-ai/api-client/commit/2e4044f05caa2ae35fe9cadc05eeed8f65d0049b))
70
+
71
+
4
72
  ## v2.11.0 (2025-05-13)
5
73
 
6
74
  ### 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.11.0
3
+ Version: 2.11.5
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,7 +12,6 @@ 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
@@ -99,7 +84,7 @@ from crypticorn import ApiClient
99
84
  ```
100
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:
101
86
 
102
- <img src="pip-structure.svg" alt="pip package structure" />
87
+ <img src="static/pip-structure.svg" alt="pip package structure" />
103
88
 
104
89
  You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
105
90
 
@@ -116,7 +101,12 @@ from crypticorn.common import Scope, Exchange
116
101
 
117
102
  ## Authentication
118
103
 
119
- 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
+
120
110
 
121
111
  ## Basic Usage
122
112
 
@@ -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]
@@ -3,6 +3,7 @@ try:
3
3
  except ImportError:
4
4
  from strenum import StrEnum
5
5
 
6
+
6
7
  class AnsiColors(StrEnum):
7
8
  """Provides a collection of ANSI color codes for terminal text formatting, including regular, bright, and bold text colors. Useful for creating colorful and readable console output."""
8
9
 
@@ -19,6 +19,7 @@ from fastapi.security import (
19
19
  )
20
20
  from typing_extensions import Annotated
21
21
  from typing import Union
22
+
22
23
  # Auth Schemes
23
24
  http_bearer = HTTPBearer(
24
25
  bearerFormat="JWT",
@@ -160,9 +161,7 @@ class AuthHandler:
160
161
  bearer: Annotated[
161
162
  Union[HTTPAuthorizationCredentials, None], Depends(http_bearer)
162
163
  ] = None,
163
- api_key: Annotated[
164
- Union[str, None], Depends(apikey_header)
165
- ] = None,
164
+ api_key: Annotated[Union[str, None], Depends(apikey_header)] = None,
166
165
  sec: SecurityScopes = SecurityScopes(),
167
166
  ) -> Verify200Response:
168
167
  """
@@ -3,6 +3,7 @@
3
3
  from enum import Enum
4
4
  from fastapi import status
5
5
  from crypticorn.common.mixins import ApiErrorFallback
6
+
6
7
  try:
7
8
  from enum import StrEnum
8
9
  except ImportError:
@@ -6,6 +6,7 @@ from fastapi.responses import JSONResponse
6
6
  from crypticorn.common import ApiError, ApiErrorIdentifier, ApiErrorType, ApiErrorLevel
7
7
  import logging
8
8
  import json
9
+
9
10
  try:
10
11
  from enum import StrEnum
11
12
  except ImportError:
@@ -55,6 +55,9 @@ class Scope(StrEnum):
55
55
  # Sentiment scopes
56
56
  READ_SENTIMENT = "read:sentiment"
57
57
 
58
+ # Klines scopes
59
+ READ_KLINES = "read:klines"
60
+
58
61
  @classmethod
59
62
  def admin_scopes(cls) -> list["Scope"]:
60
63
  """Scopes that are only available to admins."""
@@ -77,4 +80,11 @@ class Scope(StrEnum):
77
80
  """Scopes that can be purchased."""
78
81
  return [
79
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,
80
90
  ]
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
  from typing import Union
5
5
 
6
+
6
7
  class CrypticornDeprecationWarning(DeprecationWarning):
7
8
  """A Crypticorn specific deprecation warning.
8
9
 
@@ -271,7 +271,7 @@ class AdminApi:
271
271
  include: Annotated[
272
272
  Optional[List[StrictStr]],
273
273
  Field(
274
- description="List of dependencies to include in the response. If not provided, all installed packages will be returned."
274
+ description="List of regex patterns to match against package names. If not provided, all installed packages will be returned."
275
275
  ),
276
276
  ] = None,
277
277
  _request_timeout: Union[
@@ -285,12 +285,12 @@ class AdminApi:
285
285
  _content_type: Optional[StrictStr] = None,
286
286
  _headers: Optional[Dict[StrictStr, Any]] = None,
287
287
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
288
- ) -> List[object]:
288
+ ) -> Dict[str, str]:
289
289
  """List Installed Packages
290
290
 
291
- Return a list of installed packages and versions.
291
+ Return a list of installed packages and versions. The include parameter accepts regex patterns to match against package names. For example: - crypticorn.* will match all packages starting with 'crypticorn' - .*tic.* will match all packages containing 'tic' in their name
292
292
 
293
- :param include: List of dependencies to include in the response. If not provided, all installed packages will be returned.
293
+ :param include: List of regex patterns to match against package names. If not provided, all installed packages will be returned.
294
294
  :type include: List[str]
295
295
  :param _request_timeout: timeout setting for this request. If one
296
296
  number provided, it will be total request
@@ -323,7 +323,7 @@ class AdminApi:
323
323
  )
324
324
 
325
325
  _response_types_map: Dict[str, Optional[str]] = {
326
- "200": "List[object]",
326
+ "200": "Dict[str, str]",
327
327
  }
328
328
  response_data = await self.api_client.call_api(
329
329
  *_param, _request_timeout=_request_timeout
@@ -340,7 +340,7 @@ class AdminApi:
340
340
  include: Annotated[
341
341
  Optional[List[StrictStr]],
342
342
  Field(
343
- description="List of dependencies to include in the response. If not provided, all installed packages will be returned."
343
+ description="List of regex patterns to match against package names. If not provided, all installed packages will be returned."
344
344
  ),
345
345
  ] = None,
346
346
  _request_timeout: Union[
@@ -354,12 +354,12 @@ class AdminApi:
354
354
  _content_type: Optional[StrictStr] = None,
355
355
  _headers: Optional[Dict[StrictStr, Any]] = None,
356
356
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
357
- ) -> ApiResponse[List[object]]:
357
+ ) -> ApiResponse[Dict[str, str]]:
358
358
  """List Installed Packages
359
359
 
360
- Return a list of installed packages and versions.
360
+ Return a list of installed packages and versions. The include parameter accepts regex patterns to match against package names. For example: - crypticorn.* will match all packages starting with 'crypticorn' - .*tic.* will match all packages containing 'tic' in their name
361
361
 
362
- :param include: List of dependencies to include in the response. If not provided, all installed packages will be returned.
362
+ :param include: List of regex patterns to match against package names. If not provided, all installed packages will be returned.
363
363
  :type include: List[str]
364
364
  :param _request_timeout: timeout setting for this request. If one
365
365
  number provided, it will be total request
@@ -392,7 +392,7 @@ class AdminApi:
392
392
  )
393
393
 
394
394
  _response_types_map: Dict[str, Optional[str]] = {
395
- "200": "List[object]",
395
+ "200": "Dict[str, str]",
396
396
  }
397
397
  response_data = await self.api_client.call_api(
398
398
  *_param, _request_timeout=_request_timeout
@@ -409,7 +409,7 @@ class AdminApi:
409
409
  include: Annotated[
410
410
  Optional[List[StrictStr]],
411
411
  Field(
412
- description="List of dependencies to include in the response. If not provided, all installed packages will be returned."
412
+ description="List of regex patterns to match against package names. If not provided, all installed packages will be returned."
413
413
  ),
414
414
  ] = None,
415
415
  _request_timeout: Union[
@@ -426,9 +426,9 @@ class AdminApi:
426
426
  ) -> RESTResponseType:
427
427
  """List Installed Packages
428
428
 
429
- Return a list of installed packages and versions.
429
+ Return a list of installed packages and versions. The include parameter accepts regex patterns to match against package names. For example: - crypticorn.* will match all packages starting with 'crypticorn' - .*tic.* will match all packages containing 'tic' in their name
430
430
 
431
- :param include: List of dependencies to include in the response. If not provided, all installed packages will be returned.
431
+ :param include: List of regex patterns to match against package names. If not provided, all installed packages will be returned.
432
432
  :type include: List[str]
433
433
  :param _request_timeout: timeout setting for this request. If one
434
434
  number provided, it will be total request
@@ -461,7 +461,7 @@ class AdminApi:
461
461
  )
462
462
 
463
463
  _response_types_map: Dict[str, Optional[str]] = {
464
- "200": "List[object]",
464
+ "200": "Dict[str, str]",
465
465
  }
466
466
  response_data = await self.api_client.call_api(
467
467
  *_param, _request_timeout=_request_timeout
@@ -17,7 +17,7 @@ from typing import Any, Dict, List, Optional, Tuple, Union
17
17
  from typing_extensions import Annotated
18
18
 
19
19
  from pydantic import StrictStr, field_validator
20
- from typing import Any, Dict, Optional
20
+ from typing import Optional
21
21
 
22
22
  from crypticorn.klines.client.api_client import ApiClient, RequestSerialized
23
23
  from crypticorn.klines.client.api_response import ApiResponse
@@ -294,7 +294,7 @@ class StatusApi:
294
294
  _content_type: Optional[StrictStr] = None,
295
295
  _headers: Optional[Dict[StrictStr, Any]] = None,
296
296
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
297
- ) -> Dict[str, object]:
297
+ ) -> str:
298
298
  """Ping
299
299
 
300
300
  Returns 'OK' if the API is running.
@@ -329,7 +329,7 @@ class StatusApi:
329
329
  )
330
330
 
331
331
  _response_types_map: Dict[str, Optional[str]] = {
332
- "200": "Dict[str, object]",
332
+ "200": "str",
333
333
  }
334
334
  response_data = await self.api_client.call_api(
335
335
  *_param, _request_timeout=_request_timeout
@@ -354,7 +354,7 @@ class StatusApi:
354
354
  _content_type: Optional[StrictStr] = None,
355
355
  _headers: Optional[Dict[StrictStr, Any]] = None,
356
356
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
357
- ) -> ApiResponse[Dict[str, object]]:
357
+ ) -> ApiResponse[str]:
358
358
  """Ping
359
359
 
360
360
  Returns 'OK' if the API is running.
@@ -389,7 +389,7 @@ class StatusApi:
389
389
  )
390
390
 
391
391
  _response_types_map: Dict[str, Optional[str]] = {
392
- "200": "Dict[str, object]",
392
+ "200": "str",
393
393
  }
394
394
  response_data = await self.api_client.call_api(
395
395
  *_param, _request_timeout=_request_timeout
@@ -449,7 +449,7 @@ class StatusApi:
449
449
  )
450
450
 
451
451
  _response_types_map: Dict[str, Optional[str]] = {
452
- "200": "Dict[str, object]",
452
+ "200": "str",
453
453
  }
454
454
  response_data = await self.api_client.call_api(
455
455
  *_param, _request_timeout=_request_timeout
@@ -215,7 +215,9 @@ class Configuration:
215
215
  debug: Optional[bool] = None,
216
216
  ) -> None:
217
217
  """Constructor"""
218
- self._base_path = "http://localhost/v1/klines" if host is None else host
218
+ self._base_path = (
219
+ "https://api.crypticorn.dev/v1/klines" if host is None else host
220
+ )
219
221
  """Default Base url
220
222
  """
221
223
  self.server_index = 0 if server_index is None and host is None else server_index
@@ -557,7 +559,7 @@ class Configuration:
557
559
  """
558
560
  return [
559
561
  {
560
- "url": "http://localhost/v1/klines",
562
+ "url": "https://api.crypticorn.dev/v1/klines",
561
563
  "description": "No description provided",
562
564
  }
563
565
  ]
@@ -20,7 +20,7 @@ from typing_extensions import Self
20
20
 
21
21
  class ApiErrorIdentifier(str, Enum):
22
22
  """
23
- API error identifiers
23
+ Unique identifier of the API error.
24
24
  """
25
25
 
26
26
  """
@@ -20,7 +20,7 @@ from typing_extensions import Self
20
20
 
21
21
  class ApiErrorLevel(str, Enum):
22
22
  """
23
- API error levels
23
+ Level of the API error.
24
24
  """
25
25
 
26
26
  """
@@ -20,7 +20,7 @@ from typing_extensions import Self
20
20
 
21
21
  class ApiErrorType(str, Enum):
22
22
  """
23
- Type of API error
23
+ Type of the API error.
24
24
  """
25
25
 
26
26
  """
@@ -28,7 +28,7 @@ from typing_extensions import Self
28
28
 
29
29
  class ExceptionDetail(BaseModel):
30
30
  """
31
- This is the detail of the exception. It is used to enrich the exception with additional information by unwrapping the ApiError into its components.
31
+ Exception details returned to the client.
32
32
  """ # noqa: E501
33
33
 
34
34
  message: Optional[StrictStr] = None
@@ -18,7 +18,7 @@ import re # noqa: F401
18
18
  import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
21
- from typing import Any, ClassVar, Dict, List, Union
21
+ from typing import Any, ClassVar, Dict, List, Optional, Union
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
@@ -29,11 +29,11 @@ class OHLCV(BaseModel):
29
29
  """ # noqa: E501
30
30
 
31
31
  timestamp: StrictInt = Field(description="Timestamp in seconds")
32
- open: Union[StrictFloat, StrictInt] = Field(description="Open prices")
33
- high: Union[StrictFloat, StrictInt] = Field(description="High prices")
34
- low: Union[StrictFloat, StrictInt] = Field(description="Low prices")
35
- close: Union[StrictFloat, StrictInt] = Field(description="Close prices")
36
- volume: Union[StrictFloat, StrictInt] = Field(description="Volume")
32
+ open: Optional[Union[StrictFloat, StrictInt]]
33
+ high: Optional[Union[StrictFloat, StrictInt]]
34
+ low: Optional[Union[StrictFloat, StrictInt]]
35
+ close: Optional[Union[StrictFloat, StrictInt]]
36
+ volume: Optional[Union[StrictFloat, StrictInt]]
37
37
  __properties: ClassVar[List[str]] = [
38
38
  "timestamp",
39
39
  "open",
@@ -80,6 +80,31 @@ class OHLCV(BaseModel):
80
80
  exclude=excluded_fields,
81
81
  exclude_none=True,
82
82
  )
83
+ # set to None if open (nullable) is None
84
+ # and model_fields_set contains the field
85
+ if self.open is None and "open" in self.model_fields_set:
86
+ _dict["open"] = None
87
+
88
+ # set to None if high (nullable) is None
89
+ # and model_fields_set contains the field
90
+ if self.high is None and "high" in self.model_fields_set:
91
+ _dict["high"] = None
92
+
93
+ # set to None if low (nullable) is None
94
+ # and model_fields_set contains the field
95
+ if self.low is None and "low" in self.model_fields_set:
96
+ _dict["low"] = None
97
+
98
+ # set to None if close (nullable) is None
99
+ # and model_fields_set contains the field
100
+ if self.close is None and "close" in self.model_fields_set:
101
+ _dict["close"] = None
102
+
103
+ # set to None if volume (nullable) is None
104
+ # and model_fields_set contains the field
105
+ if self.volume is None and "volume" in self.model_fields_set:
106
+ _dict["volume"] = None
107
+
83
108
  return _dict
84
109
 
85
110
  @classmethod
@@ -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