crypticorn 2.11.0__tar.gz → 2.11.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {crypticorn-2.11.0 → crypticorn-2.11.5}/CHANGELOG.md +68 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/MANIFEST.in +1 -1
- {crypticorn-2.11.0/crypticorn.egg-info → crypticorn-2.11.5}/PKG-INFO +9 -19
- {crypticorn-2.11.0 → crypticorn-2.11.5}/README.md +7 -2
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/configuration.py +2 -2
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_api_key_request.py +2 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/merge-env.sh +3 -5
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/client.py +2 -2
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/ansi_colors.py +1 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/auth.py +2 -3
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/errors.py +1 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/exceptions.py +1 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/scopes.py +10 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/warnings.py +1 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/admin_api.py +14 -14
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/status_api.py +6 -6
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/configuration.py +4 -2
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/api_error_identifier.py +1 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/api_error_level.py +1 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/api_error_type.py +1 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/exception_detail.py +1 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/ohlcv.py +31 -6
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/main.py +13 -1
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/__init__.py +4 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/exchanges_api.py +7 -6
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/indicators_api.py +12 -6
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/marketcap_api.py +49 -31
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/configuration.py +2 -2
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/__init__.py +4 -0
- crypticorn-2.11.5/crypticorn/metrics/client/models/exchange_availability.py +88 -0
- crypticorn-2.11.5/crypticorn/metrics/client/models/marketcap_ranking.py +89 -0
- crypticorn-2.11.0/crypticorn/metrics/client/models/marketcap_ranking.py → crypticorn-2.11.5/crypticorn/metrics/client/models/marketcap_symbol_ranking.py +4 -4
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/main.py +12 -19
- {crypticorn-2.11.0 → crypticorn-2.11.5/crypticorn.egg-info}/PKG-INFO +9 -19
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/SOURCES.txt +6 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/pyproject.toml +7 -3
- crypticorn-2.11.5/static/favicon.svg +12 -0
- crypticorn-2.11.5/static/logo.svg +13 -0
- crypticorn-2.11.5/static/pip-structure.drawio +31 -0
- crypticorn-2.11.5/static/pip-structure.svg +4 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/LICENSE +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/admin_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/auth_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/service_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/user_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api/wallet_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/api_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/exceptions.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_user_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/logout_default_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/token_info200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/update_user_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_email_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/whoami200_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/py.typed +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/rest.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/main.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/__main__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/init.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/Dockerfile +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/auth.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/dependabot.yml +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/templates/ruff.yml +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/cli/version.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/decorators.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/enums.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/logging.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/middleware.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/mixins.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/openapi.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/pagination.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/router/admin_router.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/router/status_router.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/urls.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/common/utils.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/admin_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/data_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/models_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api/status_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/api_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/configuration.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/exceptions.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/api_error_level.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/api_error_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/coins.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_download_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_info.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_options.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_version.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/data_version_info.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/download_links.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/evaluation.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/evaluation_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/exception_detail.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/feature_size.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/log_level.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_create.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_read.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_status.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/model_update.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/target.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/target_info.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/models/target_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/py.typed +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/client/rest.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/main.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/hive/utils.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/symbols_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api/udf_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/api_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/exceptions.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/funding_rate.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/internal_exchange.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/log_level.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/market_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/resolution.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/search_symbol.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/sort_direction.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/symbol_group.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/symbol_info.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/symbol_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/timeframe.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/models/udf_config.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/py.typed +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/klines/client/rest.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/admin_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/logs_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/markets_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/quote_currencies_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/status_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api/tokens_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/api_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/exceptions.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/api_error_level.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/api_error_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/exception_detail.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/log_level.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/market_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/ohlcv.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/severity.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/time_interval.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/models/trading_status.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/py.typed +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/metrics/client/rest.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/admin_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/now_payments_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/payments_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/products_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api/status_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/api_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/configuration.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/exceptions.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/exception_detail.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/log_level.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/payment.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/payment_status.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_create.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_read.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_sub_read.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/product_update.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/provider.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/response_getuptime.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/models/scope.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/py.typed +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/client/rest.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/pay/main.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/api_keys_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/bots_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/exchanges_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/notifications_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/orders_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/status_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/strategies_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/api_response.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/configuration.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/exceptions.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/__init__.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/action_model.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/bot_model.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/bot_status.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/exception_detail.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/execution_ids.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/futures_balance.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/margin_mode.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/notification_model.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/order_model.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/order_status.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/post_futures_action.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/tpsl.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/models/trading_action_type.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/py.typed +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/client/rest.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/trade/main.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/dependency_links.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/entry_points.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/requires.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn.egg-info/top_level.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/dev.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/extra.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/main.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/requirements/test.txt +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/setup.cfg +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_auth_client.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_config.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_enums.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_errors.py +0 -0
- {crypticorn-2.11.0 → crypticorn-2.11.5}/tests/test_pagination.py +0 -0
@@ -1,6 +1,74 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.11.5 (2025-05-15)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- Klines OHLCV response fields can be None
|
9
|
+
([`2c10e38`](https://github.com/crypticorn-ai/api-client/commit/2c10e38b4cd1f5304f276978b658a619e4cec171))
|
10
|
+
|
11
|
+
|
12
|
+
## v2.11.4 (2025-05-15)
|
13
|
+
|
14
|
+
### Bug Fixes
|
15
|
+
|
16
|
+
- Fixes dist build
|
17
|
+
([`3913bd7`](https://github.com/crypticorn-ai/api-client/commit/3913bd74a12d50727197efe72a68f36c9165c068))
|
18
|
+
|
19
|
+
|
20
|
+
## v2.11.3 (2025-05-15)
|
21
|
+
|
22
|
+
### Bug Fixes
|
23
|
+
|
24
|
+
- Fixes ci permission error copying static folder to dist
|
25
|
+
([`10f801b`](https://github.com/crypticorn-ai/api-client/commit/10f801b6f760c3f7de12fe830f9d3dc6895dde67))
|
26
|
+
|
27
|
+
|
28
|
+
## v2.11.2 (2025-05-15)
|
29
|
+
|
30
|
+
### Bug Fixes
|
31
|
+
|
32
|
+
- Fixes ohlc dataframe response
|
33
|
+
([`a334782`](https://github.com/crypticorn-ai/api-client/commit/a33478251a80e6255a9d4c0a2c43d701403c3399))
|
34
|
+
|
35
|
+
|
36
|
+
## v2.11.1 (2025-05-15)
|
37
|
+
|
38
|
+
### Bug Fixes
|
39
|
+
|
40
|
+
- Fixes dataframe conversion for get_available_exchanges_fmt
|
41
|
+
([`4c85d67`](https://github.com/crypticorn-ai/api-client/commit/4c85d67386fbda1b50a237df10a10a8eb2fb3531))
|
42
|
+
|
43
|
+
### Build System
|
44
|
+
|
45
|
+
- Include static files in dist
|
46
|
+
([`1b07130`](https://github.com/crypticorn-ai/api-client/commit/1b071302cb2f15f086b7812152cde8d425c2de9d))
|
47
|
+
|
48
|
+
### Continuous Integration
|
49
|
+
|
50
|
+
- Run test only on dev/main
|
51
|
+
([`dcc59e1`](https://github.com/crypticorn-ai/api-client/commit/dcc59e16e8138761c76da0cc936db7738058ac19))
|
52
|
+
|
53
|
+
### Documentation
|
54
|
+
|
55
|
+
- Document scope structure
|
56
|
+
([`fe0dca0`](https://github.com/crypticorn-ai/api-client/commit/fe0dca0d41ce79d0c1809a3d457a52a182cf37c4))
|
57
|
+
|
58
|
+
- Update docstring example `configure` method
|
59
|
+
([`30f59b3`](https://github.com/crypticorn-ai/api-client/commit/30f59b37b5fe3ae8f22ee0a5e72e9a7274dee23c))
|
60
|
+
|
61
|
+
### Refactoring
|
62
|
+
|
63
|
+
- Make merge-env script template more robust
|
64
|
+
([`1314f71`](https://github.com/crypticorn-ai/api-client/commit/1314f718fd4299a37e55424b3ea14c573f746aeb))
|
65
|
+
|
66
|
+
### Testing
|
67
|
+
|
68
|
+
- Add expiration to test api keys
|
69
|
+
([`2e4044f`](https://github.com/crypticorn-ai/api-client/commit/2e4044f05caa2ae35fe9cadc05eeed8f65d0049b))
|
70
|
+
|
71
|
+
|
4
72
|
## v2.11.0 (2025-05-13)
|
5
73
|
|
6
74
|
### Bug Fixes
|
@@ -1,23 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: crypticorn
|
3
|
-
Version: 2.11.
|
3
|
+
Version: 2.11.5
|
4
4
|
Summary: Maximise Your Crypto Trading Profits with Machine Learning
|
5
5
|
Author-email: Crypticorn <timon@crypticorn.com>
|
6
|
-
License:
|
7
|
-
|
8
|
-
All rights reserved. This software and accompanying documentation files (collectively referred to as "the Software") are the proprietary property of Crypticorn. Any unauthorised reproduction, modification, integration, publication, distribution, sublicensing, sale, or enabling access to the Software without explicit written permission from Crypticorn is strictly prohibited, subject to the conditions outlined herein:
|
9
|
-
|
10
|
-
1. The aforementioned copyright notice and this permission notice must be included unaltered in all copies, or significant portions, of the Software.
|
11
|
-
|
12
|
-
2. The Software is provided "AS IS", without any warranty, whether express or implied. Crypticorn expressly disclaims any guarantees, including but not limited to those of satisfactory quality, fitness for a particular purpose, or non-infringement of third-party rights.
|
13
|
-
|
14
|
-
3. In no event shall Crypticorn, its authors, or copyright holders be held liable for any claim, damages, or other liability arising from or associated with the use of the Software or any other dealings involving the Software, to the extent that such liability can be limited or excluded by applicable law.
|
15
|
-
|
16
|
-
Changes to this agreement may be made without notice, and it is the user's responsibility to keep abreast of any changes. This agreement and its interpretation are subject to the laws of the Federal Republic of Germany.
|
17
|
-
|
18
|
-
If any provision of this license agreement is held to be invalid or unenforceable under applicable law, the remaining provisions will continue in full force and effect. Crypticorn's failure to enforce any provision of this agreement does not constitute a waiver of its right to do so in the future.
|
19
|
-
|
20
|
-
This agreement is written in English. In the event of any discrepancy between the English version and any translation, the English version shall prevail.
|
6
|
+
License-Expression: MIT
|
21
7
|
Project-URL: Homepage, https://crypticorn.com
|
22
8
|
Project-URL: Documentation, https://docs.crypticorn.com
|
23
9
|
Project-URL: Dashboard, https://app.crypticorn.com
|
@@ -26,7 +12,6 @@ Classifier: Topic :: Scientific/Engineering
|
|
26
12
|
Classifier: Development Status :: 4 - Beta
|
27
13
|
Classifier: Intended Audience :: Developers
|
28
14
|
Classifier: Operating System :: OS Independent
|
29
|
-
Classifier: License :: OSI Approved :: MIT License
|
30
15
|
Classifier: Programming Language :: Python :: 3.10
|
31
16
|
Classifier: Programming Language :: Python :: 3.11
|
32
17
|
Classifier: Programming Language :: Python :: 3.12
|
@@ -99,7 +84,7 @@ from crypticorn import ApiClient
|
|
99
84
|
```
|
100
85
|
The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
|
101
86
|
|
102
|
-
<img src="pip-structure.svg" alt="pip package structure" />
|
87
|
+
<img src="static/pip-structure.svg" alt="pip package structure" />
|
103
88
|
|
104
89
|
You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
|
105
90
|
|
@@ -116,7 +101,12 @@ from crypticorn.common import Scope, Exchange
|
|
116
101
|
|
117
102
|
## Authentication
|
118
103
|
|
119
|
-
To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer).
|
104
|
+
To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer).
|
105
|
+
|
106
|
+
The scopes you can assign, resemble the [package structure](#structure). The first part defines if the scopes is for reading or writing a ressource, the second matches the API, the third the ROUTER being used. `read` scopes gives access to GET, `write` to PUT, PATCH, POST, DELETE endpoints.
|
107
|
+
|
108
|
+
There are scopes which don't follow this structure. Those are either scopes that must be purchased (e.g. `read:predictions`), give access to endpoints existing in all APIs (e.g. `read:admin`) or provide access to an entire service (e.g. `read:sentiment`).
|
109
|
+
|
120
110
|
|
121
111
|
## Basic Usage
|
122
112
|
|
@@ -29,7 +29,7 @@ from crypticorn import ApiClient
|
|
29
29
|
```
|
30
30
|
The ApiClient serves as the central interface for API operations. It instantiates multiple API wrappers corresponding to our micro services. These are structured the following:
|
31
31
|
|
32
|
-
<img src="pip-structure.svg" alt="pip package structure" />
|
32
|
+
<img src="static/pip-structure.svg" alt="pip package structure" />
|
33
33
|
|
34
34
|
You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
|
35
35
|
|
@@ -46,7 +46,12 @@ from crypticorn.common import Scope, Exchange
|
|
46
46
|
|
47
47
|
## Authentication
|
48
48
|
|
49
|
-
To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer).
|
49
|
+
To get started, [create an API key in your dashboard](https://app.crypticorn.com/account/developer).
|
50
|
+
|
51
|
+
The scopes you can assign, resemble the [package structure](#structure). The first part defines if the scopes is for reading or writing a ressource, the second matches the API, the third the ROUTER being used. `read` scopes gives access to GET, `write` to PUT, PATCH, POST, DELETE endpoints.
|
52
|
+
|
53
|
+
There are scopes which don't follow this structure. Those are either scopes that must be purchased (e.g. `read:predictions`), give access to endpoints existing in all APIs (e.g. `read:admin`) or provide access to an entire service (e.g. `read:sentiment`).
|
54
|
+
|
50
55
|
|
51
56
|
## Basic Usage
|
52
57
|
|
@@ -195,7 +195,7 @@ class Configuration:
|
|
195
195
|
debug: Optional[bool] = None,
|
196
196
|
) -> None:
|
197
197
|
"""Constructor"""
|
198
|
-
self._base_path = "
|
198
|
+
self._base_path = "https://api.crypticorn.dev/v1/auth" if host is None else host
|
199
199
|
"""Default Base url
|
200
200
|
"""
|
201
201
|
self.server_index = 0 if server_index is None and host is None else server_index
|
@@ -528,7 +528,7 @@ class Configuration:
|
|
528
528
|
"""
|
529
529
|
return [
|
530
530
|
{
|
531
|
-
"url": "
|
531
|
+
"url": "https://api.crypticorn.dev/v1/auth",
|
532
532
|
"description": "No description provided",
|
533
533
|
}
|
534
534
|
]
|
{crypticorn-2.11.0 → crypticorn-2.11.5}/crypticorn/auth/client/models/create_api_key_request.py
RENAMED
@@ -78,12 +78,13 @@ class CreateApiKeyRequest(BaseModel):
|
|
78
78
|
"read:metrics:tokens",
|
79
79
|
"read:metrics:markets",
|
80
80
|
"read:sentiment",
|
81
|
+
"read:klines",
|
81
82
|
"read:admin",
|
82
83
|
"write:admin",
|
83
84
|
]
|
84
85
|
):
|
85
86
|
raise ValueError(
|
86
|
-
"each list item must be one of ('read:predictions', 'read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:exchangekeys', 'write:trade:exchangekeys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:admin', 'write:admin')"
|
87
|
+
"each list item must be one of ('read:predictions', 'read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:exchangekeys', 'write:trade:exchangekeys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:klines', 'read:admin', 'write:admin')"
|
87
88
|
)
|
88
89
|
return value
|
89
90
|
|
@@ -86,12 +86,13 @@ class GetApiKeys200ResponseInner(BaseModel):
|
|
86
86
|
"read:metrics:tokens",
|
87
87
|
"read:metrics:markets",
|
88
88
|
"read:sentiment",
|
89
|
+
"read:klines",
|
89
90
|
"read:admin",
|
90
91
|
"write:admin",
|
91
92
|
]
|
92
93
|
):
|
93
94
|
raise ValueError(
|
94
|
-
"each list item must be one of ('read:predictions', 'read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:exchangekeys', 'write:trade:exchangekeys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:admin', 'write:admin')"
|
95
|
+
"each list item must be one of ('read:predictions', 'read:hive:model', 'read:hive:data', 'write:hive:model', 'read:trade:bots', 'write:trade:bots', 'read:trade:exchangekeys', 'write:trade:exchangekeys', 'read:trade:orders', 'read:trade:actions', 'write:trade:actions', 'read:trade:exchanges', 'read:trade:futures', 'write:trade:futures', 'read:trade:notifications', 'write:trade:notifications', 'read:trade:strategies', 'write:trade:strategies', 'read:pay:payments', 'read:pay:products', 'write:pay:products', 'read:pay:now', 'write:pay:now', 'read:metrics:marketcap', 'read:metrics:indicators', 'read:metrics:exchanges', 'read:metrics:tokens', 'read:metrics:markets', 'read:sentiment', 'read:klines', 'read:admin', 'write:admin')"
|
95
96
|
)
|
96
97
|
return value
|
97
98
|
|
@@ -1,17 +1,15 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
|
-
|
3
2
|
# this script merges the env variables from the environment and the .env.example file into the .env file
|
4
3
|
# the appended variables take precedence over the .env.example variables (if both are set)
|
5
4
|
|
6
|
-
# Make executable before running in github actions
|
7
|
-
# chmod +x scripts/merge-env.sh
|
8
|
-
|
9
5
|
# Usage in a github action:
|
10
6
|
# - name: Generate .env
|
11
7
|
# run: ./scripts/merge-env.sh
|
8
|
+
# add this after checkout before copying files to the host
|
12
9
|
|
13
10
|
set -e
|
14
11
|
|
15
12
|
cp .env.example .env
|
16
13
|
echo >> .env
|
17
|
-
|
14
|
+
echo "# Environment variables" >> .env
|
15
|
+
printenv | awk -F= '/^[a-zA-Z_][a-zA-Z0-9_]*=/{print $1"=\""substr($0, index($0,$2))"\""}' | sort | uniq >> .env
|
@@ -119,8 +119,8 @@ class ApiClient:
|
|
119
119
|
:param service: The service to configure.
|
120
120
|
|
121
121
|
Example:
|
122
|
-
>>> async with ApiClient(
|
123
|
-
|
122
|
+
>>> async with ApiClient() as client:
|
123
|
+
... client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
|
124
124
|
"""
|
125
125
|
assert Service.validate(service), f"Invalid service: {service}"
|
126
126
|
client = self._services[service]
|
@@ -3,6 +3,7 @@ try:
|
|
3
3
|
except ImportError:
|
4
4
|
from strenum import StrEnum
|
5
5
|
|
6
|
+
|
6
7
|
class AnsiColors(StrEnum):
|
7
8
|
"""Provides a collection of ANSI color codes for terminal text formatting, including regular, bright, and bold text colors. Useful for creating colorful and readable console output."""
|
8
9
|
|
@@ -19,6 +19,7 @@ from fastapi.security import (
|
|
19
19
|
)
|
20
20
|
from typing_extensions import Annotated
|
21
21
|
from typing import Union
|
22
|
+
|
22
23
|
# Auth Schemes
|
23
24
|
http_bearer = HTTPBearer(
|
24
25
|
bearerFormat="JWT",
|
@@ -160,9 +161,7 @@ class AuthHandler:
|
|
160
161
|
bearer: Annotated[
|
161
162
|
Union[HTTPAuthorizationCredentials, None], Depends(http_bearer)
|
162
163
|
] = None,
|
163
|
-
api_key: Annotated[
|
164
|
-
Union[str, None], Depends(apikey_header)
|
165
|
-
] = None,
|
164
|
+
api_key: Annotated[Union[str, None], Depends(apikey_header)] = None,
|
166
165
|
sec: SecurityScopes = SecurityScopes(),
|
167
166
|
) -> Verify200Response:
|
168
167
|
"""
|
@@ -55,6 +55,9 @@ class Scope(StrEnum):
|
|
55
55
|
# Sentiment scopes
|
56
56
|
READ_SENTIMENT = "read:sentiment"
|
57
57
|
|
58
|
+
# Klines scopes
|
59
|
+
READ_KLINES = "read:klines"
|
60
|
+
|
58
61
|
@classmethod
|
59
62
|
def admin_scopes(cls) -> list["Scope"]:
|
60
63
|
"""Scopes that are only available to admins."""
|
@@ -77,4 +80,11 @@ class Scope(StrEnum):
|
|
77
80
|
"""Scopes that can be purchased."""
|
78
81
|
return [
|
79
82
|
cls.READ_PREDICTIONS,
|
83
|
+
cls.READ_METRICS_MARKETCAP,
|
84
|
+
cls.READ_METRICS_INDICATORS,
|
85
|
+
cls.READ_METRICS_EXCHANGES,
|
86
|
+
cls.READ_METRICS_TOKENS,
|
87
|
+
cls.READ_METRICS_MARKETS,
|
88
|
+
cls.READ_KLINES,
|
89
|
+
cls.READ_SENTIMENT,
|
80
90
|
]
|
@@ -271,7 +271,7 @@ class AdminApi:
|
|
271
271
|
include: Annotated[
|
272
272
|
Optional[List[StrictStr]],
|
273
273
|
Field(
|
274
|
-
description="List of
|
274
|
+
description="List of regex patterns to match against package names. If not provided, all installed packages will be returned."
|
275
275
|
),
|
276
276
|
] = None,
|
277
277
|
_request_timeout: Union[
|
@@ -285,12 +285,12 @@ class AdminApi:
|
|
285
285
|
_content_type: Optional[StrictStr] = None,
|
286
286
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
287
287
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
288
|
-
) ->
|
288
|
+
) -> Dict[str, str]:
|
289
289
|
"""List Installed Packages
|
290
290
|
|
291
|
-
Return a list of installed packages and versions.
|
291
|
+
Return a list of installed packages and versions. The include parameter accepts regex patterns to match against package names. For example: - crypticorn.* will match all packages starting with 'crypticorn' - .*tic.* will match all packages containing 'tic' in their name
|
292
292
|
|
293
|
-
:param include: List of
|
293
|
+
:param include: List of regex patterns to match against package names. If not provided, all installed packages will be returned.
|
294
294
|
:type include: List[str]
|
295
295
|
:param _request_timeout: timeout setting for this request. If one
|
296
296
|
number provided, it will be total request
|
@@ -323,7 +323,7 @@ class AdminApi:
|
|
323
323
|
)
|
324
324
|
|
325
325
|
_response_types_map: Dict[str, Optional[str]] = {
|
326
|
-
"200": "
|
326
|
+
"200": "Dict[str, str]",
|
327
327
|
}
|
328
328
|
response_data = await self.api_client.call_api(
|
329
329
|
*_param, _request_timeout=_request_timeout
|
@@ -340,7 +340,7 @@ class AdminApi:
|
|
340
340
|
include: Annotated[
|
341
341
|
Optional[List[StrictStr]],
|
342
342
|
Field(
|
343
|
-
description="List of
|
343
|
+
description="List of regex patterns to match against package names. If not provided, all installed packages will be returned."
|
344
344
|
),
|
345
345
|
] = None,
|
346
346
|
_request_timeout: Union[
|
@@ -354,12 +354,12 @@ class AdminApi:
|
|
354
354
|
_content_type: Optional[StrictStr] = None,
|
355
355
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
356
356
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
357
|
-
) -> ApiResponse[
|
357
|
+
) -> ApiResponse[Dict[str, str]]:
|
358
358
|
"""List Installed Packages
|
359
359
|
|
360
|
-
Return a list of installed packages and versions.
|
360
|
+
Return a list of installed packages and versions. The include parameter accepts regex patterns to match against package names. For example: - crypticorn.* will match all packages starting with 'crypticorn' - .*tic.* will match all packages containing 'tic' in their name
|
361
361
|
|
362
|
-
:param include: List of
|
362
|
+
:param include: List of regex patterns to match against package names. If not provided, all installed packages will be returned.
|
363
363
|
:type include: List[str]
|
364
364
|
:param _request_timeout: timeout setting for this request. If one
|
365
365
|
number provided, it will be total request
|
@@ -392,7 +392,7 @@ class AdminApi:
|
|
392
392
|
)
|
393
393
|
|
394
394
|
_response_types_map: Dict[str, Optional[str]] = {
|
395
|
-
"200": "
|
395
|
+
"200": "Dict[str, str]",
|
396
396
|
}
|
397
397
|
response_data = await self.api_client.call_api(
|
398
398
|
*_param, _request_timeout=_request_timeout
|
@@ -409,7 +409,7 @@ class AdminApi:
|
|
409
409
|
include: Annotated[
|
410
410
|
Optional[List[StrictStr]],
|
411
411
|
Field(
|
412
|
-
description="List of
|
412
|
+
description="List of regex patterns to match against package names. If not provided, all installed packages will be returned."
|
413
413
|
),
|
414
414
|
] = None,
|
415
415
|
_request_timeout: Union[
|
@@ -426,9 +426,9 @@ class AdminApi:
|
|
426
426
|
) -> RESTResponseType:
|
427
427
|
"""List Installed Packages
|
428
428
|
|
429
|
-
Return a list of installed packages and versions.
|
429
|
+
Return a list of installed packages and versions. The include parameter accepts regex patterns to match against package names. For example: - crypticorn.* will match all packages starting with 'crypticorn' - .*tic.* will match all packages containing 'tic' in their name
|
430
430
|
|
431
|
-
:param include: List of
|
431
|
+
:param include: List of regex patterns to match against package names. If not provided, all installed packages will be returned.
|
432
432
|
:type include: List[str]
|
433
433
|
:param _request_timeout: timeout setting for this request. If one
|
434
434
|
number provided, it will be total request
|
@@ -461,7 +461,7 @@ class AdminApi:
|
|
461
461
|
)
|
462
462
|
|
463
463
|
_response_types_map: Dict[str, Optional[str]] = {
|
464
|
-
"200": "
|
464
|
+
"200": "Dict[str, str]",
|
465
465
|
}
|
466
466
|
response_data = await self.api_client.call_api(
|
467
467
|
*_param, _request_timeout=_request_timeout
|
@@ -17,7 +17,7 @@ from typing import Any, Dict, List, Optional, Tuple, Union
|
|
17
17
|
from typing_extensions import Annotated
|
18
18
|
|
19
19
|
from pydantic import StrictStr, field_validator
|
20
|
-
from typing import
|
20
|
+
from typing import Optional
|
21
21
|
|
22
22
|
from crypticorn.klines.client.api_client import ApiClient, RequestSerialized
|
23
23
|
from crypticorn.klines.client.api_response import ApiResponse
|
@@ -294,7 +294,7 @@ class StatusApi:
|
|
294
294
|
_content_type: Optional[StrictStr] = None,
|
295
295
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
296
296
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
297
|
-
) ->
|
297
|
+
) -> str:
|
298
298
|
"""Ping
|
299
299
|
|
300
300
|
Returns 'OK' if the API is running.
|
@@ -329,7 +329,7 @@ class StatusApi:
|
|
329
329
|
)
|
330
330
|
|
331
331
|
_response_types_map: Dict[str, Optional[str]] = {
|
332
|
-
"200": "
|
332
|
+
"200": "str",
|
333
333
|
}
|
334
334
|
response_data = await self.api_client.call_api(
|
335
335
|
*_param, _request_timeout=_request_timeout
|
@@ -354,7 +354,7 @@ class StatusApi:
|
|
354
354
|
_content_type: Optional[StrictStr] = None,
|
355
355
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
356
356
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
357
|
-
) -> ApiResponse[
|
357
|
+
) -> ApiResponse[str]:
|
358
358
|
"""Ping
|
359
359
|
|
360
360
|
Returns 'OK' if the API is running.
|
@@ -389,7 +389,7 @@ class StatusApi:
|
|
389
389
|
)
|
390
390
|
|
391
391
|
_response_types_map: Dict[str, Optional[str]] = {
|
392
|
-
"200": "
|
392
|
+
"200": "str",
|
393
393
|
}
|
394
394
|
response_data = await self.api_client.call_api(
|
395
395
|
*_param, _request_timeout=_request_timeout
|
@@ -449,7 +449,7 @@ class StatusApi:
|
|
449
449
|
)
|
450
450
|
|
451
451
|
_response_types_map: Dict[str, Optional[str]] = {
|
452
|
-
"200": "
|
452
|
+
"200": "str",
|
453
453
|
}
|
454
454
|
response_data = await self.api_client.call_api(
|
455
455
|
*_param, _request_timeout=_request_timeout
|
@@ -215,7 +215,9 @@ class Configuration:
|
|
215
215
|
debug: Optional[bool] = None,
|
216
216
|
) -> None:
|
217
217
|
"""Constructor"""
|
218
|
-
self._base_path =
|
218
|
+
self._base_path = (
|
219
|
+
"https://api.crypticorn.dev/v1/klines" if host is None else host
|
220
|
+
)
|
219
221
|
"""Default Base url
|
220
222
|
"""
|
221
223
|
self.server_index = 0 if server_index is None and host is None else server_index
|
@@ -557,7 +559,7 @@ class Configuration:
|
|
557
559
|
"""
|
558
560
|
return [
|
559
561
|
{
|
560
|
-
"url": "
|
562
|
+
"url": "https://api.crypticorn.dev/v1/klines",
|
561
563
|
"description": "No description provided",
|
562
564
|
}
|
563
565
|
]
|
@@ -28,7 +28,7 @@ from typing_extensions import Self
|
|
28
28
|
|
29
29
|
class ExceptionDetail(BaseModel):
|
30
30
|
"""
|
31
|
-
|
31
|
+
Exception details returned to the client.
|
32
32
|
""" # noqa: E501
|
33
33
|
|
34
34
|
message: Optional[StrictStr] = None
|
@@ -18,7 +18,7 @@ import re # noqa: F401
|
|
18
18
|
import json
|
19
19
|
|
20
20
|
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
|
21
|
-
from typing import Any, ClassVar, Dict, List, Union
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional, Union
|
22
22
|
from typing import Optional, Set
|
23
23
|
from typing_extensions import Self
|
24
24
|
|
@@ -29,11 +29,11 @@ class OHLCV(BaseModel):
|
|
29
29
|
""" # noqa: E501
|
30
30
|
|
31
31
|
timestamp: StrictInt = Field(description="Timestamp in seconds")
|
32
|
-
open: Union[StrictFloat, StrictInt]
|
33
|
-
high: Union[StrictFloat, StrictInt]
|
34
|
-
low: Union[StrictFloat, StrictInt]
|
35
|
-
close: Union[StrictFloat, StrictInt]
|
36
|
-
volume: Union[StrictFloat, StrictInt]
|
32
|
+
open: Optional[Union[StrictFloat, StrictInt]]
|
33
|
+
high: Optional[Union[StrictFloat, StrictInt]]
|
34
|
+
low: Optional[Union[StrictFloat, StrictInt]]
|
35
|
+
close: Optional[Union[StrictFloat, StrictInt]]
|
36
|
+
volume: Optional[Union[StrictFloat, StrictInt]]
|
37
37
|
__properties: ClassVar[List[str]] = [
|
38
38
|
"timestamp",
|
39
39
|
"open",
|
@@ -80,6 +80,31 @@ class OHLCV(BaseModel):
|
|
80
80
|
exclude=excluded_fields,
|
81
81
|
exclude_none=True,
|
82
82
|
)
|
83
|
+
# set to None if open (nullable) is None
|
84
|
+
# and model_fields_set contains the field
|
85
|
+
if self.open is None and "open" in self.model_fields_set:
|
86
|
+
_dict["open"] = None
|
87
|
+
|
88
|
+
# set to None if high (nullable) is None
|
89
|
+
# and model_fields_set contains the field
|
90
|
+
if self.high is None and "high" in self.model_fields_set:
|
91
|
+
_dict["high"] = None
|
92
|
+
|
93
|
+
# set to None if low (nullable) is None
|
94
|
+
# and model_fields_set contains the field
|
95
|
+
if self.low is None and "low" in self.model_fields_set:
|
96
|
+
_dict["low"] = None
|
97
|
+
|
98
|
+
# set to None if close (nullable) is None
|
99
|
+
# and model_fields_set contains the field
|
100
|
+
if self.close is None and "close" in self.model_fields_set:
|
101
|
+
_dict["close"] = None
|
102
|
+
|
103
|
+
# set to None if volume (nullable) is None
|
104
|
+
# and model_fields_set contains the field
|
105
|
+
if self.volume is None and "volume" in self.model_fields_set:
|
106
|
+
_dict["volume"] = None
|
107
|
+
|
83
108
|
return _dict
|
84
109
|
|
85
110
|
@classmethod
|
@@ -65,7 +65,19 @@ class OHLCVDataApiWrapper(OHLCVDataApi):
|
|
65
65
|
"""
|
66
66
|
pd = optional_import("pandas", "extra")
|
67
67
|
response = await self.get_ohlcv(*args, **kwargs)
|
68
|
-
|
68
|
+
rows = []
|
69
|
+
for item in response:
|
70
|
+
row = {
|
71
|
+
"timestamp": item.timestamp,
|
72
|
+
"open": item.open,
|
73
|
+
"high": item.high,
|
74
|
+
"low": item.low,
|
75
|
+
"close": item.close,
|
76
|
+
"volume": item.volume,
|
77
|
+
}
|
78
|
+
rows.append(row)
|
79
|
+
df = pd.DataFrame(rows)
|
80
|
+
return df
|
69
81
|
|
70
82
|
|
71
83
|
class SymbolsApiWrapper(SymbolsApi):
|
@@ -43,11 +43,15 @@ from crypticorn.metrics.client.models.api_error_identifier import ApiErrorIdenti
|
|
43
43
|
from crypticorn.metrics.client.models.api_error_level import ApiErrorLevel
|
44
44
|
from crypticorn.metrics.client.models.api_error_type import ApiErrorType
|
45
45
|
from crypticorn.metrics.client.models.exception_detail import ExceptionDetail
|
46
|
+
from crypticorn.metrics.client.models.exchange_availability import ExchangeAvailability
|
46
47
|
from crypticorn.metrics.client.models.exchange_mapping import ExchangeMapping
|
47
48
|
from crypticorn.metrics.client.models.internal_exchange import InternalExchange
|
48
49
|
from crypticorn.metrics.client.models.log_level import LogLevel
|
49
50
|
from crypticorn.metrics.client.models.market_type import MarketType
|
50
51
|
from crypticorn.metrics.client.models.marketcap_ranking import MarketcapRanking
|
52
|
+
from crypticorn.metrics.client.models.marketcap_symbol_ranking import (
|
53
|
+
MarketcapSymbolRanking,
|
54
|
+
)
|
51
55
|
from crypticorn.metrics.client.models.ohlcv import OHLCV
|
52
56
|
from crypticorn.metrics.client.models.severity import Severity
|
53
57
|
from crypticorn.metrics.client.models.time_interval import TimeInterval
|