crypticorn 2.5.0rc2__tar.gz → 2.5.0rc3__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.
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/PKG-INFO +1 -1
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/errors.py +14 -0
- crypticorn-2.5.0rc3/crypticorn/common/exceptions.py +80 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/utils.py +1 -1
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn.egg-info/PKG-INFO +1 -1
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/pyproject.toml +1 -1
- crypticorn-2.5.0rc2/crypticorn/common/exceptions.py +0 -27
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/README.md +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api/admin_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api/auth_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api/service_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api/user_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api/wallet_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/api_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/configuration.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/exceptions.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/create_api_key_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/create_user_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/logout_default_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/token_info200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/update_user_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_email_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/whoami200_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/py.typed +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/rest.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/main.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/cli/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/cli/__main__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/cli/init.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/cli/templates/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/cli/templates/auth.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/auth.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/enums.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/pydantic.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/scopes.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/sorter.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/common/urls.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/api/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/api/data_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/api/models_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/api/status_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/api_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/api_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/configuration.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/exceptions.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/coins.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/data_download_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/data_info.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/data_value_value_value_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/data_version.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/download_links.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/evaluation.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/evaluation_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/feature_size.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/http_validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/model_create.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/model_status.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/model_update.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/target.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/target_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/validation_error_loc_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/py.typed +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/rest.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/main.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/health_check_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/symbols_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/udf_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/configuration.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/exceptions.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/base_response_health_check_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/base_response_list_change_in_timeframe_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/base_response_list_funding_rate_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/base_response_list_str.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/base_response_ohlcv_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/change_in_timeframe_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/error_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/exchange.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/health_check_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/history_error_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/history_no_data_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/history_success_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/http_validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/market.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/market_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/ohlcv_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/resolution.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/response_get_history_udf_history_get.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/response_get_udf_history.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/search_symbol_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/sort_direction.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/symbol_group_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/symbol_info_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/symbol_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/timeframe.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/udf_config_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/validation_error_loc_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/py.typed +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/rest.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/main.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/health_check_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/indicators_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/logs_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/markets_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/tokens_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/configuration.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/exceptions.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/base_response_dict.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/base_response_health_check_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/base_response_list_dict.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/base_response_list_exchange_mapping.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/base_response_list_str.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/error_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/health_check_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/http_validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/market.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/market_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/severity.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/time_interval.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/trading_status.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/models/validation_error_loc_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/py.typed +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/rest.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/main.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api/now_payments_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api/payments_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api/products_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api/status_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/api_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/configuration.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/exceptions.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/api_status_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/body_create_now_invoice.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/body_create_product.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/body_get_products.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/body_handle_now_webhook.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/body_update_product.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/combined_payment_history.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/create_invoice_req.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/create_invoice_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/currency.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/estimate_price_req.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/estimate_price_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/get_currencies_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/get_payment_status_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/get_payments_list_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/http_validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/min_amount_req.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/min_amount_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_api_status_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_fee_structure.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_payment_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_payment_status.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/now_webhook_payload.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/partial_product_update_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/payment.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/payment_status.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_create.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_read.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_sub_read.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_subs_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_update.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/product_update_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/scope.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/services.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/unified_payment_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/models/validation_error_loc_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/py.typed +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/client/rest.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/pay/main.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/api_keys_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/bots_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/exchanges_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/notifications_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/orders_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/status_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/strategies_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/api_response.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/configuration.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/exceptions.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/__init__.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/action_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/api_error_level.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/api_error_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/api_key_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/bot_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/bot_status.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/exchange.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/execution_ids.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/futures_balance.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/http_validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/margin_mode.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/market_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/notification_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/order_model.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/order_status.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/post_futures_action.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/tpsl.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/trading_action_type.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/validation_error.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/models/validation_error_loc_inner.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/py.typed +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/client/rest.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/trade/main.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn.egg-info/SOURCES.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn.egg-info/dependency_links.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn.egg-info/entry_points.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn.egg-info/requires.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn.egg-info/top_level.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/requirements/dev.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/requirements/extra.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/requirements/main.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/requirements/test.txt +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/setup.cfg +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/tests/test_auth_client.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/tests/test_config.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/tests/test_enums.py +0 -0
- {crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/tests/test_errors.py +0 -0
@@ -63,6 +63,8 @@ class ApiErrorIdentifier(StrEnum):
|
|
63
63
|
INSUFFICIENT_SCOPES = "insufficient_scopes"
|
64
64
|
INVALID_API_KEY = "invalid_api_key"
|
65
65
|
INVALID_BEARER = "invalid_bearer"
|
66
|
+
INVALID_DATA_REQUEST = "invalid_data"
|
67
|
+
INVALID_DATA_RESPONSE = "invalid_data_response"
|
66
68
|
INVALID_EXCHANGE_KEY = "invalid_exchange_key"
|
67
69
|
INVALID_MARGIN_MODE = "invalid_margin_mode"
|
68
70
|
INVALID_PARAMETER = "invalid_parameter_provided"
|
@@ -263,6 +265,16 @@ class ApiError(Enum, metaclass=Fallback):
|
|
263
265
|
ApiErrorType.USER_ERROR,
|
264
266
|
ApiErrorLevel.ERROR,
|
265
267
|
)
|
268
|
+
INVALID_DATA_REQUEST = (
|
269
|
+
ApiErrorIdentifier.INVALID_DATA_REQUEST,
|
270
|
+
ApiErrorType.USER_ERROR,
|
271
|
+
ApiErrorLevel.ERROR,
|
272
|
+
)
|
273
|
+
INVALID_DATA_RESPONSE = (
|
274
|
+
ApiErrorIdentifier.INVALID_DATA_RESPONSE,
|
275
|
+
ApiErrorType.USER_ERROR,
|
276
|
+
ApiErrorLevel.ERROR,
|
277
|
+
)
|
266
278
|
INVALID_EXCHANGE_KEY = (
|
267
279
|
ApiErrorIdentifier.INVALID_EXCHANGE_KEY,
|
268
280
|
ApiErrorType.SERVER_ERROR,
|
@@ -489,6 +501,8 @@ class HttpStatusMapper:
|
|
489
501
|
ApiError.BOT_ALREADY_DELETED: status.HTTP_409_CONFLICT,
|
490
502
|
# Invalid Content
|
491
503
|
ApiError.CONTENT_TYPE_ERROR: status.HTTP_415_UNSUPPORTED_MEDIA_TYPE,
|
504
|
+
ApiError.INVALID_DATA_REQUEST: status.HTTP_422_UNPROCESSABLE_ENTITY,
|
505
|
+
ApiError.INVALID_DATA_RESPONSE: status.HTTP_422_UNPROCESSABLE_ENTITY,
|
492
506
|
# Rate Limits
|
493
507
|
ApiError.EXCHANGE_RATE_LIMIT: status.HTTP_429_TOO_MANY_REQUESTS,
|
494
508
|
ApiError.REQUEST_SCOPE_EXCEEDED: status.HTTP_429_TOO_MANY_REQUESTS,
|
@@ -0,0 +1,80 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
from typing import Optional, Dict, Type
|
3
|
+
from pydantic import BaseModel, Field
|
4
|
+
from fastapi import HTTPException as FastAPIHTTPException, Request, FastAPI
|
5
|
+
from fastapi.exceptions import RequestValidationError, ResponseValidationError
|
6
|
+
from fastapi.openapi.utils import get_openapi
|
7
|
+
from fastapi.responses import JSONResponse
|
8
|
+
from crypticorn.common import ApiError, ApiErrorIdentifier, ApiErrorType, ApiErrorLevel
|
9
|
+
|
10
|
+
class EnrichedDetail(BaseModel):
|
11
|
+
'''This is the detail of the exception. It is used to enrich the exception with additional information by unwrapping the ApiError into its components.'''
|
12
|
+
message: Optional[str] = Field(None, description="An additional error message")
|
13
|
+
code: ApiErrorIdentifier = Field(..., description="The unique error code")
|
14
|
+
type: ApiErrorType = Field(..., description="The type of error")
|
15
|
+
level: ApiErrorLevel = Field(..., description="The level of the error")
|
16
|
+
status_code: int = Field(..., description="The HTTP status code")
|
17
|
+
|
18
|
+
|
19
|
+
class ExceptionDetail(BaseModel):
|
20
|
+
'''This is the detail of the exception. Pass an ApiError to the constructor and an optional human readable message.'''
|
21
|
+
error: ApiError = Field(..., description="The unique error code")
|
22
|
+
message: Optional[str] = Field(None, description="An additional error message")
|
23
|
+
|
24
|
+
def enrich(self) -> EnrichedDetail:
|
25
|
+
return EnrichedDetail(
|
26
|
+
message=self.message,
|
27
|
+
code=self.error.identifier,
|
28
|
+
type=self.error.type,
|
29
|
+
level=self.error.level,
|
30
|
+
status_code=self.error.status_code,
|
31
|
+
)
|
32
|
+
|
33
|
+
class HTTPException(FastAPIHTTPException):
|
34
|
+
"""A custom HTTP exception wrapper around FastAPI's HTTPException.
|
35
|
+
It allows for a more structured way to handle errors, with a message and an error code. The status code is being derived from the detail's error.
|
36
|
+
The ApiError class is the source of truth for everything. If the error is not yet implemented, there are fallbacks to avoid errors while testing.
|
37
|
+
"""
|
38
|
+
|
39
|
+
def __init__(
|
40
|
+
self,
|
41
|
+
detail: ExceptionDetail,
|
42
|
+
headers: Optional[Dict[str, str]] = None,
|
43
|
+
):
|
44
|
+
assert isinstance(detail, ExceptionDetail)
|
45
|
+
body = detail.enrich()
|
46
|
+
super().__init__(
|
47
|
+
status_code=body.status_code,
|
48
|
+
detail=body.model_dump(mode="json"),
|
49
|
+
headers=headers,
|
50
|
+
)
|
51
|
+
|
52
|
+
async def general_handler(request: Request, exc: Exception):
|
53
|
+
'''This is the default exception handler for all exceptions.'''
|
54
|
+
body = ExceptionDetail(message=str(exc), error=ApiError.UNKNOWN_ERROR)
|
55
|
+
return JSONResponse(status_code=body.error.status_code, content=HTTPException(detail=body).detail)
|
56
|
+
|
57
|
+
async def request_validation_handler(request: Request, exc: RequestValidationError):
|
58
|
+
'''This is the exception handler for all request validation errors.'''
|
59
|
+
body = ExceptionDetail(message=str(exc), error=ApiError.INVALID_DATA_REQUEST)
|
60
|
+
return JSONResponse(status_code=body.error.status_code, content=HTTPException(detail=body).detail)
|
61
|
+
|
62
|
+
async def response_validation_handler(request: Request, exc: ResponseValidationError):
|
63
|
+
'''This is the exception handler for all response validation errors.'''
|
64
|
+
body = ExceptionDetail(message=str(exc), error=ApiError.INVALID_DATA_RESPONSE)
|
65
|
+
return JSONResponse(status_code=body.error.status_code, content=HTTPException(detail=body).detail)
|
66
|
+
|
67
|
+
async def http_handler(request: Request, exc: HTTPException):
|
68
|
+
'''This is the exception handler for HTTPExceptions. It unwraps the HTTPException and returns the detail in a flat JSON response.'''
|
69
|
+
return JSONResponse(status_code=exc.status_code, content=exc.detail)
|
70
|
+
|
71
|
+
def register_exception_handlers(app: FastAPI):
|
72
|
+
'''Utility to register serveral exception handlers in one go. Catches Exception, HTTPException and Data Validation errors and responds with a unified json body.'''
|
73
|
+
app.add_exception_handler(Exception, general_handler)
|
74
|
+
app.add_exception_handler(FastAPIHTTPException, http_handler)
|
75
|
+
app.add_exception_handler(RequestValidationError, request_validation_handler)
|
76
|
+
app.add_exception_handler(ResponseValidationError, response_validation_handler)
|
77
|
+
|
78
|
+
exception_response = {
|
79
|
+
"default": {"model": EnrichedDetail, "description": "Error response", "media_type": "application/txt"}
|
80
|
+
}
|
@@ -35,7 +35,7 @@ def gen_random_id(length: int = 20) -> str:
|
|
35
35
|
return "".join(random.choice(charset) for _ in range(length))
|
36
36
|
|
37
37
|
|
38
|
-
@deprecated(
|
38
|
+
@deprecated("Use math.isclose instead. Will be removed in a future version.")
|
39
39
|
def is_equal(
|
40
40
|
a: float | Decimal,
|
41
41
|
b: float | Decimal,
|
@@ -4,7 +4,7 @@ description = "Maximise Your Crypto Trading Profits with AI Predictions"
|
|
4
4
|
readme = "README.md"
|
5
5
|
requires-python = ">=3.10"
|
6
6
|
authors = [{name = "Crypticorn", email = "timon@crypticorn.com"}]
|
7
|
-
version = "2.5.0-rc.
|
7
|
+
version = "2.5.0-rc.3"
|
8
8
|
keywords = ["machine learning", "data science", "crypto", "modelling"]
|
9
9
|
dynamic = ["dependencies", "optional-dependencies"]
|
10
10
|
|
@@ -1,27 +0,0 @@
|
|
1
|
-
from typing import Optional, Dict
|
2
|
-
from pydantic import BaseModel, Field
|
3
|
-
from fastapi import HTTPException as FastAPIHTTPException
|
4
|
-
from crypticorn.common import ApiError
|
5
|
-
|
6
|
-
|
7
|
-
class ExceptionDetail(BaseModel):
|
8
|
-
message: Optional[str] = Field(None, description="An additional error message")
|
9
|
-
error: ApiError = Field(..., description="The unique error code")
|
10
|
-
|
11
|
-
|
12
|
-
class HTTPException(FastAPIHTTPException):
|
13
|
-
"""A custom HTTP exception wrapper around FastAPI's HTTPException.
|
14
|
-
It allows for a more structured way to handle errors, with a message and an error code. The status code is being derived from the detail's error.
|
15
|
-
The ApiError class is the source of truth for everything. If the error is not yet implemented, there are fallbacks to avoid errors while testing.
|
16
|
-
"""
|
17
|
-
|
18
|
-
def __init__(
|
19
|
-
self,
|
20
|
-
detail: ExceptionDetail,
|
21
|
-
headers: Optional[Dict[str, str]] = None,
|
22
|
-
):
|
23
|
-
super().__init__(
|
24
|
-
status_code=detail.error.status_code,
|
25
|
-
detail=detail.model_dump(),
|
26
|
-
headers=headers,
|
27
|
-
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/add_wallet200_response.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/add_wallet_request.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/authorize_user_request.py
RENAMED
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/create_api_key_request.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/create_user_request.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/logout_default_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/token_info200_response.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/unlink_wallet_request.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/update_user_request.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify200_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_email_request.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/verify_wallet_request.py
RENAMED
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/auth/client/models/whoami200_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/data_download_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/evaluation_response.py
RENAMED
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/http_validation_error.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/hive/client/models/validation_error.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/change_in_timeframe_api.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/funding_rates_api.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/api/health_check_api.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/error_response.py
RENAMED
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/funding_rate_response.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/health_check_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/http_validation_error.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/ohlcv_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/sort_direction.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/symbol_group_response.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/symbol_info_response.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/udf_config_response.py
RENAMED
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/klines/client/models/validation_error.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{crypticorn-2.5.0rc2 → crypticorn-2.5.0rc3}/crypticorn/metrics/client/api/health_check_api.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|