crypticorn 2.5.3__tar.gz → 2.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. {crypticorn-2.5.3 → crypticorn-2.6.0}/PKG-INFO +1 -1
  2. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/__init__.py +9 -0
  3. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api/auth_api.py +8 -5
  4. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api/user_api.py +247 -0
  5. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/__init__.py +9 -0
  6. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/create_api_key_request.py +2 -1
  7. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
  8. crypticorn-2.6.0/crypticorn/auth/client/models/user_by_username200_response.py +91 -0
  9. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/verify200_response.py +14 -1
  10. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +14 -1
  11. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/whoami200_response.py +6 -1
  12. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/__init__.py +1 -0
  13. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/auth.py +13 -9
  14. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/errors.py +310 -88
  15. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/exceptions.py +38 -4
  16. crypticorn-2.6.0/crypticorn/common/pagination.py +49 -0
  17. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/scopes.py +24 -5
  18. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/__init__.py +2 -0
  19. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/api/models_api.py +343 -56
  20. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/__init__.py +2 -0
  21. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/data_info.py +44 -12
  22. crypticorn-2.6.0/crypticorn/hive/client/models/data_version_info.py +89 -0
  23. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/model.py +2 -3
  24. crypticorn-2.6.0/crypticorn/hive/client/models/target_info.py +94 -0
  25. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn.egg-info/PKG-INFO +1 -1
  26. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn.egg-info/SOURCES.txt +6 -1
  27. {crypticorn-2.5.3 → crypticorn-2.6.0}/pyproject.toml +1 -1
  28. crypticorn-2.6.0/tests/test_auth_client.py +168 -0
  29. {crypticorn-2.5.3 → crypticorn-2.6.0}/tests/test_errors.py +5 -5
  30. crypticorn-2.6.0/tests/test_pagination.py +19 -0
  31. crypticorn-2.5.3/tests/test_auth_client.py +0 -308
  32. {crypticorn-2.5.3 → crypticorn-2.6.0}/README.md +0 -0
  33. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/__init__.py +0 -0
  34. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/__init__.py +0 -0
  35. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api/__init__.py +0 -0
  36. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api/admin_api.py +0 -0
  37. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api/service_api.py +0 -0
  38. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api/wallet_api.py +0 -0
  39. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api_client.py +0 -0
  40. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/api_response.py +0 -0
  41. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/configuration.py +0 -0
  42. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/exceptions.py +0 -0
  43. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
  44. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
  45. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
  46. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
  47. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
  48. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
  49. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/create_user_request.py +0 -0
  50. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
  51. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
  52. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
  53. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
  54. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
  55. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
  56. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
  57. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/logout_default_response.py +0 -0
  58. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
  59. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
  60. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
  61. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
  62. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
  63. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
  64. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
  65. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
  66. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/token_info200_response.py +0 -0
  67. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
  68. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/update_user_request.py +0 -0
  69. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
  70. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
  71. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
  72. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
  73. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/verify_email_request.py +0 -0
  74. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
  75. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
  76. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/py.typed +0 -0
  77. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/client/rest.py +0 -0
  78. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/auth/main.py +0 -0
  79. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/cli/__init__.py +0 -0
  80. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/cli/__main__.py +0 -0
  81. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/cli/init.py +0 -0
  82. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/cli/templates/__init__.py +0 -0
  83. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/cli/templates/auth.py +0 -0
  84. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/client.py +0 -0
  85. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/decorators.py +0 -0
  86. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/enums.py +0 -0
  87. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/mixins.py +0 -0
  88. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/status_router.py +0 -0
  89. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/urls.py +0 -0
  90. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/common/utils.py +0 -0
  91. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/__init__.py +0 -0
  92. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/api/__init__.py +0 -0
  93. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/api/data_api.py +0 -0
  94. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/api/status_api.py +0 -0
  95. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/api_client.py +0 -0
  96. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/api_response.py +0 -0
  97. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/configuration.py +0 -0
  98. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/exceptions.py +0 -0
  99. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/coins.py +0 -0
  100. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/data_download_response.py +0 -0
  101. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/data_value_value_value_inner.py +0 -0
  102. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/data_version.py +0 -0
  103. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/download_links.py +0 -0
  104. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/evaluation.py +0 -0
  105. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/evaluation_response.py +0 -0
  106. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/exception_detail.py +0 -0
  107. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/feature_size.py +0 -0
  108. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/model_create.py +0 -0
  109. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/model_status.py +0 -0
  110. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/model_update.py +0 -0
  111. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/target.py +0 -0
  112. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/models/target_type.py +0 -0
  113. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/py.typed +0 -0
  114. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/client/rest.py +0 -0
  115. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/hive/main.py +0 -0
  116. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/__init__.py +0 -0
  117. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/__init__.py +0 -0
  118. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/__init__.py +0 -0
  119. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
  120. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
  121. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
  122. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/status_api.py +0 -0
  123. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/symbols_api.py +0 -0
  124. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api/udf_api.py +0 -0
  125. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api_client.py +0 -0
  126. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/api_response.py +0 -0
  127. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/configuration.py +0 -0
  128. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/exceptions.py +0 -0
  129. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/__init__.py +0 -0
  130. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
  131. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/exception_detail.py +0 -0
  132. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/funding_rate.py +0 -0
  133. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/ohlcv_history.py +0 -0
  134. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/resolution.py +0 -0
  135. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/search_symbol.py +0 -0
  136. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/sort_direction.py +0 -0
  137. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/symbol_group.py +0 -0
  138. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/symbol_info.py +0 -0
  139. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/symbol_type.py +0 -0
  140. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/timeframe.py +0 -0
  141. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/models/udf_config.py +0 -0
  142. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/py.typed +0 -0
  143. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/client/rest.py +0 -0
  144. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/klines/main.py +0 -0
  145. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/__init__.py +0 -0
  146. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/__init__.py +0 -0
  147. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/__init__.py +0 -0
  148. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
  149. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/indicators_api.py +0 -0
  150. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/logs_api.py +0 -0
  151. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
  152. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/markets_api.py +0 -0
  153. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/status_api.py +0 -0
  154. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api/tokens_api.py +0 -0
  155. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api_client.py +0 -0
  156. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/api_response.py +0 -0
  157. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/configuration.py +0 -0
  158. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/exceptions.py +0 -0
  159. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/models/__init__.py +0 -0
  160. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/models/exception_detail.py +0 -0
  161. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/models/severity.py +0 -0
  162. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/models/time_interval.py +0 -0
  163. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/models/trading_status.py +0 -0
  164. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/py.typed +0 -0
  165. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/client/rest.py +0 -0
  166. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/metrics/main.py +0 -0
  167. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/__init__.py +0 -0
  168. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/__init__.py +0 -0
  169. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api/__init__.py +0 -0
  170. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api/now_payments_api.py +0 -0
  171. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api/payments_api.py +0 -0
  172. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api/products_api.py +0 -0
  173. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api/status_api.py +0 -0
  174. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api_client.py +0 -0
  175. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/api_response.py +0 -0
  176. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/configuration.py +0 -0
  177. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/exceptions.py +0 -0
  178. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/__init__.py +0 -0
  179. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/exception_detail.py +0 -0
  180. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
  181. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
  182. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/payment.py +0 -0
  183. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/payment_status.py +0 -0
  184. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/product_create.py +0 -0
  185. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/product_read.py +0 -0
  186. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/product_sub_read.py +0 -0
  187. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/product_update.py +0 -0
  188. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/scope.py +0 -0
  189. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/models/services.py +0 -0
  190. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/py.typed +0 -0
  191. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/client/rest.py +0 -0
  192. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/pay/main.py +0 -0
  193. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/__init__.py +0 -0
  194. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/__init__.py +0 -0
  195. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/__init__.py +0 -0
  196. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/api_keys_api.py +0 -0
  197. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/bots_api.py +0 -0
  198. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/exchanges_api.py +0 -0
  199. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
  200. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/notifications_api.py +0 -0
  201. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/orders_api.py +0 -0
  202. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/status_api.py +0 -0
  203. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/strategies_api.py +0 -0
  204. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
  205. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api_client.py +0 -0
  206. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/api_response.py +0 -0
  207. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/configuration.py +0 -0
  208. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/exceptions.py +0 -0
  209. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/__init__.py +0 -0
  210. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/action_model.py +0 -0
  211. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/bot_model.py +0 -0
  212. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/bot_status.py +0 -0
  213. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/exception_detail.py +0 -0
  214. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
  215. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/execution_ids.py +0 -0
  216. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/futures_balance.py +0 -0
  217. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
  218. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/margin_mode.py +0 -0
  219. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/notification_model.py +0 -0
  220. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/order_model.py +0 -0
  221. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/order_status.py +0 -0
  222. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/post_futures_action.py +0 -0
  223. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
  224. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
  225. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
  226. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
  227. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/tpsl.py +0 -0
  228. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/models/trading_action_type.py +0 -0
  229. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/py.typed +0 -0
  230. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/client/rest.py +0 -0
  231. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn/trade/main.py +0 -0
  232. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn.egg-info/dependency_links.txt +0 -0
  233. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn.egg-info/entry_points.txt +0 -0
  234. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn.egg-info/requires.txt +0 -0
  235. {crypticorn-2.5.3 → crypticorn-2.6.0}/crypticorn.egg-info/top_level.txt +0 -0
  236. {crypticorn-2.5.3 → crypticorn-2.6.0}/requirements/dev.txt +0 -0
  237. {crypticorn-2.5.3 → crypticorn-2.6.0}/requirements/extra.txt +0 -0
  238. {crypticorn-2.5.3 → crypticorn-2.6.0}/requirements/main.txt +0 -0
  239. {crypticorn-2.5.3 → crypticorn-2.6.0}/requirements/test.txt +0 -0
  240. {crypticorn-2.5.3 → crypticorn-2.6.0}/setup.cfg +0 -0
  241. {crypticorn-2.5.3 → crypticorn-2.6.0}/tests/test_config.py +0 -0
  242. {crypticorn-2.5.3 → crypticorn-2.6.0}/tests/test_enums.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.5.3
3
+ Version: 2.6.0
4
4
  Summary: Maximise Your Crypto Trading Profits with AI Predictions
5
5
  Author-email: Crypticorn <timon@crypticorn.com>
6
6
  Project-URL: Homepage, https://crypticorn.com
@@ -77,6 +77,12 @@ from crypticorn.auth.client.models.logout_default_response import LogoutDefaultR
77
77
  from crypticorn.auth.client.models.logout_default_response_issues_inner import (
78
78
  LogoutDefaultResponseIssuesInner,
79
79
  )
80
+ from crypticorn.auth.client.models.oauth_callback200_response import (
81
+ OauthCallback200Response,
82
+ )
83
+ from crypticorn.auth.client.models.oauth_callback200_response_user import (
84
+ OauthCallback200ResponseUser,
85
+ )
80
86
  from crypticorn.auth.client.models.refresh_token_info200_response import (
81
87
  RefreshTokenInfo200Response,
82
88
  )
@@ -95,6 +101,9 @@ from crypticorn.auth.client.models.rotate_tokens200_response import (
95
101
  from crypticorn.auth.client.models.token_info200_response import TokenInfo200Response
96
102
  from crypticorn.auth.client.models.unlink_wallet_request import UnlinkWalletRequest
97
103
  from crypticorn.auth.client.models.update_user_request import UpdateUserRequest
104
+ from crypticorn.auth.client.models.user_by_username200_response import (
105
+ UserByUsername200Response,
106
+ )
98
107
  from crypticorn.auth.client.models.user_reset_password_request import (
99
108
  UserResetPasswordRequest,
100
109
  )
@@ -30,6 +30,9 @@ from crypticorn.auth.client.models.create_api_key_request import CreateApiKeyReq
30
30
  from crypticorn.auth.client.models.get_api_keys200_response_inner import (
31
31
  GetApiKeys200ResponseInner,
32
32
  )
33
+ from crypticorn.auth.client.models.oauth_callback200_response import (
34
+ OauthCallback200Response,
35
+ )
33
36
  from crypticorn.auth.client.models.refresh_token_info200_response import (
34
37
  RefreshTokenInfo200Response,
35
38
  )
@@ -1294,7 +1297,7 @@ class AuthApi:
1294
1297
  _content_type: Optional[StrictStr] = None,
1295
1298
  _headers: Optional[Dict[StrictStr, Any]] = None,
1296
1299
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1297
- ) -> AuthorizeUser200Response:
1300
+ ) -> OauthCallback200Response:
1298
1301
  """OAuth Callback
1299
1302
 
1300
1303
  Handles the OAuth callback from Google.
@@ -1344,7 +1347,7 @@ class AuthApi:
1344
1347
  )
1345
1348
 
1346
1349
  _response_types_map: Dict[str, Optional[str]] = {
1347
- "200": "AuthorizeUser200Response",
1350
+ "200": "OauthCallback200Response",
1348
1351
  }
1349
1352
  response_data = await self.api_client.call_api(
1350
1353
  *_param, _request_timeout=_request_timeout
@@ -1374,7 +1377,7 @@ class AuthApi:
1374
1377
  _content_type: Optional[StrictStr] = None,
1375
1378
  _headers: Optional[Dict[StrictStr, Any]] = None,
1376
1379
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1377
- ) -> ApiResponse[AuthorizeUser200Response]:
1380
+ ) -> ApiResponse[OauthCallback200Response]:
1378
1381
  """OAuth Callback
1379
1382
 
1380
1383
  Handles the OAuth callback from Google.
@@ -1424,7 +1427,7 @@ class AuthApi:
1424
1427
  )
1425
1428
 
1426
1429
  _response_types_map: Dict[str, Optional[str]] = {
1427
- "200": "AuthorizeUser200Response",
1430
+ "200": "OauthCallback200Response",
1428
1431
  }
1429
1432
  response_data = await self.api_client.call_api(
1430
1433
  *_param, _request_timeout=_request_timeout
@@ -1504,7 +1507,7 @@ class AuthApi:
1504
1507
  )
1505
1508
 
1506
1509
  _response_types_map: Dict[str, Optional[str]] = {
1507
- "200": "AuthorizeUser200Response",
1510
+ "200": "OauthCallback200Response",
1508
1511
  }
1509
1512
  response_data = await self.api_client.call_api(
1510
1513
  *_param, _request_timeout=_request_timeout
@@ -24,6 +24,9 @@ from crypticorn.auth.client.models.resend_verification_email_request import (
24
24
  ResendVerificationEmailRequest,
25
25
  )
26
26
  from crypticorn.auth.client.models.update_user_request import UpdateUserRequest
27
+ from crypticorn.auth.client.models.user_by_username200_response import (
28
+ UserByUsername200Response,
29
+ )
27
30
  from crypticorn.auth.client.models.user_reset_password_request import (
28
31
  UserResetPasswordRequest,
29
32
  )
@@ -1532,6 +1535,250 @@ class UserApi:
1532
1535
  _request_auth=_request_auth,
1533
1536
  )
1534
1537
 
1538
+ @validate_call
1539
+ async def user_by_username(
1540
+ self,
1541
+ username: StrictStr,
1542
+ _request_timeout: Union[
1543
+ None,
1544
+ Annotated[StrictFloat, Field(gt=0)],
1545
+ Tuple[
1546
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
1547
+ ],
1548
+ ] = None,
1549
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1550
+ _content_type: Optional[StrictStr] = None,
1551
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1552
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1553
+ ) -> UserByUsername200Response:
1554
+ """User By Username
1555
+
1556
+ Returns the user by username.
1557
+
1558
+ :param username: (required)
1559
+ :type username: str
1560
+ :param _request_timeout: timeout setting for this request. If one
1561
+ number provided, it will be total request
1562
+ timeout. It can also be a pair (tuple) of
1563
+ (connection, read) timeouts.
1564
+ :type _request_timeout: int, tuple(int, int), optional
1565
+ :param _request_auth: set to override the auth_settings for an a single
1566
+ request; this effectively ignores the
1567
+ authentication in the spec for a single request.
1568
+ :type _request_auth: dict, optional
1569
+ :param _content_type: force content-type for the request.
1570
+ :type _content_type: str, Optional
1571
+ :param _headers: set to override the headers for a single
1572
+ request; this effectively ignores the headers
1573
+ in the spec for a single request.
1574
+ :type _headers: dict, optional
1575
+ :param _host_index: set to override the host_index for a single
1576
+ request; this effectively ignores the host_index
1577
+ in the spec for a single request.
1578
+ :type _host_index: int, optional
1579
+ :return: Returns the result object.
1580
+ """ # noqa: E501
1581
+
1582
+ _param = self._user_by_username_serialize(
1583
+ username=username,
1584
+ _request_auth=_request_auth,
1585
+ _content_type=_content_type,
1586
+ _headers=_headers,
1587
+ _host_index=_host_index,
1588
+ )
1589
+
1590
+ _response_types_map: Dict[str, Optional[str]] = {
1591
+ "200": "UserByUsername200Response",
1592
+ }
1593
+ response_data = await self.api_client.call_api(
1594
+ *_param, _request_timeout=_request_timeout
1595
+ )
1596
+ await response_data.read()
1597
+ return self.api_client.response_deserialize(
1598
+ response_data=response_data,
1599
+ response_types_map=_response_types_map,
1600
+ ).data
1601
+
1602
+ @validate_call
1603
+ async def user_by_username_with_http_info(
1604
+ self,
1605
+ username: StrictStr,
1606
+ _request_timeout: Union[
1607
+ None,
1608
+ Annotated[StrictFloat, Field(gt=0)],
1609
+ Tuple[
1610
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
1611
+ ],
1612
+ ] = None,
1613
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1614
+ _content_type: Optional[StrictStr] = None,
1615
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1616
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1617
+ ) -> ApiResponse[UserByUsername200Response]:
1618
+ """User By Username
1619
+
1620
+ Returns the user by username.
1621
+
1622
+ :param username: (required)
1623
+ :type username: str
1624
+ :param _request_timeout: timeout setting for this request. If one
1625
+ number provided, it will be total request
1626
+ timeout. It can also be a pair (tuple) of
1627
+ (connection, read) timeouts.
1628
+ :type _request_timeout: int, tuple(int, int), optional
1629
+ :param _request_auth: set to override the auth_settings for an a single
1630
+ request; this effectively ignores the
1631
+ authentication in the spec for a single request.
1632
+ :type _request_auth: dict, optional
1633
+ :param _content_type: force content-type for the request.
1634
+ :type _content_type: str, Optional
1635
+ :param _headers: set to override the headers for a single
1636
+ request; this effectively ignores the headers
1637
+ in the spec for a single request.
1638
+ :type _headers: dict, optional
1639
+ :param _host_index: set to override the host_index for a single
1640
+ request; this effectively ignores the host_index
1641
+ in the spec for a single request.
1642
+ :type _host_index: int, optional
1643
+ :return: Returns the result object.
1644
+ """ # noqa: E501
1645
+
1646
+ _param = self._user_by_username_serialize(
1647
+ username=username,
1648
+ _request_auth=_request_auth,
1649
+ _content_type=_content_type,
1650
+ _headers=_headers,
1651
+ _host_index=_host_index,
1652
+ )
1653
+
1654
+ _response_types_map: Dict[str, Optional[str]] = {
1655
+ "200": "UserByUsername200Response",
1656
+ }
1657
+ response_data = await self.api_client.call_api(
1658
+ *_param, _request_timeout=_request_timeout
1659
+ )
1660
+ await response_data.read()
1661
+ return self.api_client.response_deserialize(
1662
+ response_data=response_data,
1663
+ response_types_map=_response_types_map,
1664
+ )
1665
+
1666
+ @validate_call
1667
+ async def user_by_username_without_preload_content(
1668
+ self,
1669
+ username: StrictStr,
1670
+ _request_timeout: Union[
1671
+ None,
1672
+ Annotated[StrictFloat, Field(gt=0)],
1673
+ Tuple[
1674
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
1675
+ ],
1676
+ ] = None,
1677
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1678
+ _content_type: Optional[StrictStr] = None,
1679
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1680
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1681
+ ) -> RESTResponseType:
1682
+ """User By Username
1683
+
1684
+ Returns the user by username.
1685
+
1686
+ :param username: (required)
1687
+ :type username: str
1688
+ :param _request_timeout: timeout setting for this request. If one
1689
+ number provided, it will be total request
1690
+ timeout. It can also be a pair (tuple) of
1691
+ (connection, read) timeouts.
1692
+ :type _request_timeout: int, tuple(int, int), optional
1693
+ :param _request_auth: set to override the auth_settings for an a single
1694
+ request; this effectively ignores the
1695
+ authentication in the spec for a single request.
1696
+ :type _request_auth: dict, optional
1697
+ :param _content_type: force content-type for the request.
1698
+ :type _content_type: str, Optional
1699
+ :param _headers: set to override the headers for a single
1700
+ request; this effectively ignores the headers
1701
+ in the spec for a single request.
1702
+ :type _headers: dict, optional
1703
+ :param _host_index: set to override the host_index for a single
1704
+ request; this effectively ignores the host_index
1705
+ in the spec for a single request.
1706
+ :type _host_index: int, optional
1707
+ :return: Returns the result object.
1708
+ """ # noqa: E501
1709
+
1710
+ _param = self._user_by_username_serialize(
1711
+ username=username,
1712
+ _request_auth=_request_auth,
1713
+ _content_type=_content_type,
1714
+ _headers=_headers,
1715
+ _host_index=_host_index,
1716
+ )
1717
+
1718
+ _response_types_map: Dict[str, Optional[str]] = {
1719
+ "200": "UserByUsername200Response",
1720
+ }
1721
+ response_data = await self.api_client.call_api(
1722
+ *_param, _request_timeout=_request_timeout
1723
+ )
1724
+ return response_data.response
1725
+
1726
+ def _user_by_username_serialize(
1727
+ self,
1728
+ username,
1729
+ _request_auth,
1730
+ _content_type,
1731
+ _headers,
1732
+ _host_index,
1733
+ ) -> RequestSerialized:
1734
+
1735
+ _host = None
1736
+
1737
+ _collection_formats: Dict[str, str] = {}
1738
+
1739
+ _path_params: Dict[str, str] = {}
1740
+ _query_params: List[Tuple[str, str]] = []
1741
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1742
+ _form_params: List[Tuple[str, str]] = []
1743
+ _files: Dict[
1744
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1745
+ ] = {}
1746
+ _body_params: Optional[bytes] = None
1747
+
1748
+ # process the path parameters
1749
+ # process the query parameters
1750
+ if username is not None:
1751
+
1752
+ _query_params.append(("username", username))
1753
+
1754
+ # process the header parameters
1755
+ # process the form parameters
1756
+ # process the body parameter
1757
+
1758
+ # set the HTTP header `Accept`
1759
+ if "Accept" not in _header_params:
1760
+ _header_params["Accept"] = self.api_client.select_header_accept(
1761
+ ["application/json"]
1762
+ )
1763
+
1764
+ # authentication setting
1765
+ _auth_settings: List[str] = []
1766
+
1767
+ return self.api_client.param_serialize(
1768
+ method="GET",
1769
+ resource_path="/user-by-username",
1770
+ path_params=_path_params,
1771
+ query_params=_query_params,
1772
+ header_params=_header_params,
1773
+ body=_body_params,
1774
+ post_params=_form_params,
1775
+ files=_files,
1776
+ auth_settings=_auth_settings,
1777
+ collection_formats=_collection_formats,
1778
+ _host=_host,
1779
+ _request_auth=_request_auth,
1780
+ )
1781
+
1535
1782
  @validate_call
1536
1783
  async def user_reset_password(
1537
1784
  self,
@@ -56,6 +56,12 @@ from crypticorn.auth.client.models.logout_default_response import LogoutDefaultR
56
56
  from crypticorn.auth.client.models.logout_default_response_issues_inner import (
57
57
  LogoutDefaultResponseIssuesInner,
58
58
  )
59
+ from crypticorn.auth.client.models.oauth_callback200_response import (
60
+ OauthCallback200Response,
61
+ )
62
+ from crypticorn.auth.client.models.oauth_callback200_response_user import (
63
+ OauthCallback200ResponseUser,
64
+ )
59
65
  from crypticorn.auth.client.models.refresh_token_info200_response import (
60
66
  RefreshTokenInfo200Response,
61
67
  )
@@ -74,6 +80,9 @@ from crypticorn.auth.client.models.rotate_tokens200_response import (
74
80
  from crypticorn.auth.client.models.token_info200_response import TokenInfo200Response
75
81
  from crypticorn.auth.client.models.unlink_wallet_request import UnlinkWalletRequest
76
82
  from crypticorn.auth.client.models.update_user_request import UpdateUserRequest
83
+ from crypticorn.auth.client.models.user_by_username200_response import (
84
+ UserByUsername200Response,
85
+ )
77
86
  from crypticorn.auth.client.models.user_reset_password_request import (
78
87
  UserResetPasswordRequest,
79
88
  )
@@ -77,10 +77,11 @@ class CreateApiKeyRequest(BaseModel):
77
77
  "read:metrics:exchanges",
78
78
  "read:metrics:tokens",
79
79
  "read:metrics:markets",
80
+ "read:sentiment",
80
81
  ]
81
82
  ):
82
83
  raise ValueError(
83
- "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')"
84
+ "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')"
84
85
  )
85
86
  return value
86
87
 
@@ -85,10 +85,11 @@ class GetApiKeys200ResponseInner(BaseModel):
85
85
  "read:metrics:exchanges",
86
86
  "read:metrics:tokens",
87
87
  "read:metrics:markets",
88
+ "read:sentiment",
88
89
  ]
89
90
  ):
90
91
  raise ValueError(
91
- "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')"
92
+ "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')"
92
93
  )
93
94
  return value
94
95
 
@@ -0,0 +1,91 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Crypticorn Auth API
5
+
6
+ OpenAPI compliant REST API built using tRPC with Express
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+
26
+ class UserByUsername200Response(BaseModel):
27
+ """
28
+ UserByUsername200Response
29
+ """ # noqa: E501
30
+
31
+ user_id: StrictStr = Field(alias="userId")
32
+ username: Optional[StrictStr] = None
33
+ name: Optional[StrictStr] = None
34
+ __properties: ClassVar[List[str]] = ["userId", "username", "name"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> Optional[Self]:
53
+ """Create an instance of UserByUsername200Response from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ """Return the dictionary representation of the model using alias.
58
+
59
+ This has the following differences from calling pydantic's
60
+ `self.model_dump(by_alias=True)`:
61
+
62
+ * `None` is only added to the output dict for nullable fields that
63
+ were set at model initialization. Other fields with value `None`
64
+ are ignored.
65
+ """
66
+ excluded_fields: Set[str] = set([])
67
+
68
+ _dict = self.model_dump(
69
+ by_alias=True,
70
+ exclude=excluded_fields,
71
+ exclude_none=True,
72
+ )
73
+ return _dict
74
+
75
+ @classmethod
76
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
77
+ """Create an instance of UserByUsername200Response from a dict"""
78
+ if obj is None:
79
+ return None
80
+
81
+ if not isinstance(obj, dict):
82
+ return cls.model_validate(obj)
83
+
84
+ _obj = cls.model_validate(
85
+ {
86
+ "userId": obj.get("userId"),
87
+ "username": obj.get("username"),
88
+ "name": obj.get("name"),
89
+ }
90
+ )
91
+ return _obj
@@ -17,7 +17,15 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
20
+ from pydantic import (
21
+ BaseModel,
22
+ ConfigDict,
23
+ Field,
24
+ StrictBool,
25
+ StrictFloat,
26
+ StrictInt,
27
+ StrictStr,
28
+ )
21
29
  from typing import Any, ClassVar, Dict, List, Optional, Union
22
30
  from typing import Optional, Set
23
31
  from typing_extensions import Self
@@ -41,6 +49,9 @@ class Verify200Response(BaseModel):
41
49
  default=None, description="Issued at time"
42
50
  )
43
51
  jti: Optional[StrictStr] = Field(default=None, description="JWT ID")
52
+ admin: Optional[StrictBool] = Field(
53
+ default=None, description="Whether the user is an admin"
54
+ )
44
55
  scopes: Optional[List[StrictStr]] = Field(default=None, description="Scopes")
45
56
  __properties: ClassVar[List[str]] = [
46
57
  "iss",
@@ -50,6 +61,7 @@ class Verify200Response(BaseModel):
50
61
  "nbf",
51
62
  "iat",
52
63
  "jti",
64
+ "admin",
53
65
  "scopes",
54
66
  ]
55
67
 
@@ -110,6 +122,7 @@ class Verify200Response(BaseModel):
110
122
  "nbf": obj.get("nbf"),
111
123
  "iat": obj.get("iat"),
112
124
  "jti": obj.get("jti"),
125
+ "admin": obj.get("admin"),
113
126
  "scopes": obj.get("scopes"),
114
127
  }
115
128
  )
@@ -17,7 +17,15 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
20
+ from pydantic import (
21
+ BaseModel,
22
+ ConfigDict,
23
+ Field,
24
+ StrictBool,
25
+ StrictFloat,
26
+ StrictInt,
27
+ StrictStr,
28
+ )
21
29
  from typing import Any, ClassVar, Dict, List, Optional, Union
22
30
  from typing import Optional, Set
23
31
  from typing_extensions import Self
@@ -41,6 +49,9 @@ class VerifyEmail200ResponseAuthAuth(BaseModel):
41
49
  default=None, description="Issued at time"
42
50
  )
43
51
  jti: Optional[StrictStr] = Field(default=None, description="JWT ID")
52
+ admin: Optional[StrictBool] = Field(
53
+ default=None, description="Whether the user is an admin"
54
+ )
44
55
  scopes: Optional[List[StrictStr]] = Field(default=None, description="Scopes")
45
56
  __properties: ClassVar[List[str]] = [
46
57
  "iss",
@@ -50,6 +61,7 @@ class VerifyEmail200ResponseAuthAuth(BaseModel):
50
61
  "nbf",
51
62
  "iat",
52
63
  "jti",
64
+ "admin",
53
65
  "scopes",
54
66
  ]
55
67
 
@@ -110,6 +122,7 @@ class VerifyEmail200ResponseAuthAuth(BaseModel):
110
122
  "nbf": obj.get("nbf"),
111
123
  "iat": obj.get("iat"),
112
124
  "jti": obj.get("jti"),
125
+ "admin": obj.get("admin"),
113
126
  "scopes": obj.get("scopes"),
114
127
  }
115
128
  )
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
@@ -34,6 +34,7 @@ class Whoami200Response(BaseModel):
34
34
  picture: Optional[StrictStr] = None
35
35
  username: Optional[StrictStr] = None
36
36
  phone: Optional[StrictStr] = None
37
+ is_admin: Optional[StrictBool] = Field(default=False, alias="isAdmin")
37
38
  __properties: ClassVar[List[str]] = [
38
39
  "email",
39
40
  "id",
@@ -41,6 +42,7 @@ class Whoami200Response(BaseModel):
41
42
  "picture",
42
43
  "username",
43
44
  "phone",
45
+ "isAdmin",
44
46
  ]
45
47
 
46
48
  model_config = ConfigDict(
@@ -99,6 +101,9 @@ class Whoami200Response(BaseModel):
99
101
  "picture": obj.get("picture"),
100
102
  "username": obj.get("username"),
101
103
  "phone": obj.get("phone"),
104
+ "isAdmin": (
105
+ obj.get("isAdmin") if obj.get("isAdmin") is not None else False
106
+ ),
102
107
  }
103
108
  )
104
109
  return _obj
@@ -7,4 +7,5 @@ from crypticorn.common.auth import *
7
7
  from crypticorn.common.enums import *
8
8
  from crypticorn.common.utils import *
9
9
  from crypticorn.common.exceptions import *
10
+ from crypticorn.common.pagination import *
10
11
  from crypticorn.common.status_router import router as status_router
@@ -3,9 +3,14 @@ import json
3
3
  from crypticorn.auth import Verify200Response, AuthClient, Configuration
4
4
  from crypticorn.auth.client.exceptions import ApiException
5
5
  from crypticorn.common.scopes import Scope
6
- from crypticorn.common.exceptions import ApiError, HTTPException, ExceptionContent
6
+ from crypticorn.common.exceptions import (
7
+ ApiError,
8
+ HTTPException,
9
+ ExceptionContent,
10
+ WebSocketException,
11
+ )
7
12
  from crypticorn.common.urls import BaseUrl, Service, ApiVersion
8
- from fastapi import Depends, Query, status, WebSocketException
13
+ from fastapi import Depends, Query
9
14
  from fastapi.security import (
10
15
  HTTPAuthorizationCredentials,
11
16
  SecurityScopes,
@@ -48,6 +53,7 @@ class AuthHandler:
48
53
  """
49
54
  Verifies the API key.
50
55
  """
56
+ # self.client.config.api_key = {apikey_header.scheme_name: api_key}
51
57
  return await self.client.login.verify_api_key(api_key)
52
58
 
53
59
  async def _verify_bearer(
@@ -229,11 +235,9 @@ class AuthHandler:
229
235
  if bearer
230
236
  else None
231
237
  )
232
- response = await self.combined_auth(
233
- bearer=credentials, api_key=api_key, sec=sec
234
- )
235
- if isinstance(response, HTTPException):
236
- raise WebSocketException(
237
- code=status.WS_1008_POLICY_VIOLATION, reason=response.detail
238
+ try:
239
+ return await self.combined_auth(
240
+ bearer=credentials, api_key=api_key, sec=sec
238
241
  )
239
- return response
242
+ except HTTPException as e:
243
+ raise WebSocketException.from_http_exception(e)