crypticorn 2.9.0rc1__tar.gz → 2.10.1__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.9.0rc1 → crypticorn-2.10.1}/CHANGELOG.md +71 -5
- crypticorn-2.10.1/LICENSE +15 -0
- crypticorn-2.10.1/MANIFEST.in +5 -0
- {crypticorn-2.9.0rc1/crypticorn.egg-info → crypticorn-2.10.1}/PKG-INFO +20 -5
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/README.md +1 -1
- crypticorn-2.10.1/crypticorn/cli/__init__.py +4 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/__main__.py +2 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/init.py +22 -7
- crypticorn-2.10.1/crypticorn/cli/templates/merge-env.sh +17 -0
- crypticorn-2.10.1/crypticorn/cli/version.py +8 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/enums.py +4 -4
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/errors.py +6 -7
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/mixins.py +8 -5
- crypticorn-2.10.1/crypticorn/common/openapi.py +10 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/router/admin_router.py +13 -5
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/router/status_router.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/__init__.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/admin_api.py +30 -27
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/data_api.py +36 -18
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/models_api.py +87 -72
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/__init__.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/api_error_identifier.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/api_error_level.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/api_error_type.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/exception_detail.py +1 -1
- crypticorn-2.9.0rc1/crypticorn/hive/client/models/model.py → crypticorn-2.10.1/crypticorn/hive/client/models/model_read.py +3 -3
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/admin_api.py +14 -14
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/status_api.py +6 -6
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/api_error_identifier.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/api_error_level.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/api_error_type.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/exception_detail.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/marketcap_ranking.py +2 -2
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1/crypticorn.egg-info}/PKG-INFO +20 -5
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/SOURCES.txt +4 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/requires.txt +1 -2
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/pyproject.toml +2 -2
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/dev.txt +1 -2
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_errors.py +9 -0
- crypticorn-2.9.0rc1/MANIFEST.in +0 -2
- crypticorn-2.9.0rc1/crypticorn/cli/__init__.py +0 -3
- crypticorn-2.9.0rc1/crypticorn/common/openapi.py +0 -11
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/auth_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/service_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/user_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api/wallet_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/create_api_key_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/create_user_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/logout_default_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/token_info200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/update_user_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_email_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/models/whoami200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/auth/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/Dockerfile +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/dependabot.yml +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/cli/templates/ruff.yml +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/ansi_colors.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/decorators.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/logging.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/middleware.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/pagination.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/scopes.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/urls.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/utils.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/common/warnings.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/coins.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_download_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_options.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_version.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/data_version_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/download_links.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/evaluation.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/evaluation_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/feature_size.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/model_create.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/model_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/model_update.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/target.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/target_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/models/target_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/hive/utils.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/symbols_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api/udf_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/api_error_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/api_error_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/funding_rate.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/internal_exchange.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/market_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/ohlcv.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/resolution.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/search_symbol.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/sort_direction.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/symbol_group.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/symbol_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/symbol_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/timeframe.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/models/udf_config.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/klines/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/indicators_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/logs_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/markets_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/quote_currencies_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api/tokens_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/market_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/ohlcv.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/severity.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/time_interval.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/models/trading_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/metrics/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/now_payments_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/payments_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/products_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/payment.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/payment_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_create.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_read.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_sub_read.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/product_update.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/provider.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/response_getuptime.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/models/scope.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/pay/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/api_keys_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/bots_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/exchanges_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/notifications_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/orders_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/strategies_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/action_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/bot_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/bot_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/execution_ids.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/futures_balance.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/margin_mode.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/notification_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/order_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/order_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/post_futures_action.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/tpsl.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/models/trading_action_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn/trade/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/dependency_links.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/entry_points.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/crypticorn.egg-info/top_level.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/extra.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/main.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/requirements/test.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/setup.cfg +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_auth_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_config.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_enums.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.1}/tests/test_pagination.py +0 -0
@@ -1,28 +1,94 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.10.1 (2025-05-12)
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
- Fixes optional symbol in get_marketcap_symbols function
|
9
|
+
([`3522a09`](https://github.com/crypticorn-ai/api-client/commit/3522a097cb159d638c717b26f9d607e813d210a9))
|
10
|
+
|
11
|
+
### Build System
|
12
|
+
|
13
|
+
- Include static files in the structure in the distribution
|
14
|
+
([`eb87ab4`](https://github.com/crypticorn-ai/api-client/commit/eb87ab44edb7558b09835ffe092d4a4d9517b79d))
|
15
|
+
|
16
|
+
### Refactoring
|
17
|
+
|
18
|
+
- Remove usage of deprecated `ExcludeEnumMixin`
|
19
|
+
([`bf4f4fb`](https://github.com/crypticorn-ai/api-client/commit/bf4f4fb4dc092a9909a6e536c5e5455244e13aac))
|
20
|
+
|
21
|
+
|
22
|
+
## v2.10.0 (2025-05-09)
|
23
|
+
|
24
|
+
### Build System
|
25
|
+
|
26
|
+
- Include info .md files and license in distribution
|
27
|
+
([`3c3d065`](https://github.com/crypticorn-ai/api-client/commit/3c3d0655b67478f98d970e7ad218e8947b8a9ec0))
|
28
|
+
|
29
|
+
### Continuous Integration
|
30
|
+
|
31
|
+
- Fix typo in testing workflow
|
32
|
+
([`e0fd734`](https://github.com/crypticorn-ai/api-client/commit/e0fd73450efda0c41ed583a771e0b6774e6a8dbd))
|
33
|
+
|
34
|
+
- Properly read env vars
|
35
|
+
([`6d25286`](https://github.com/crypticorn-ai/api-client/commit/6d252865986b974789831e91cedd45e9a594ebbc))
|
36
|
+
|
37
|
+
- Update test workflow
|
38
|
+
([`97b7b8b`](https://github.com/crypticorn-ai/api-client/commit/97b7b8b76691e91d788030e603e2fc65ac7ba8c8))
|
39
|
+
|
40
|
+
### Features
|
41
|
+
|
42
|
+
- Add new init template to the CLI for generating a env merging script
|
43
|
+
([`7e3a71a`](https://github.com/crypticorn-ai/api-client/commit/7e3a71a0f67eceb1ab1f8545eeba0a390736e129))
|
44
|
+
|
45
|
+
- Add version command in the CLI (crypticorn version)
|
46
|
+
([`289eef4`](https://github.com/crypticorn-ai/api-client/commit/289eef48fa51f771c9b461206a93470f35ce2369))
|
47
|
+
|
48
|
+
|
49
|
+
## v2.9.0 (2025-05-08)
|
50
|
+
|
51
|
+
### Build System
|
52
|
+
|
53
|
+
- Add python-semantic-release as an dev dependency
|
54
|
+
([`72dfc09`](https://github.com/crypticorn-ai/api-client/commit/72dfc092b7b4fde231e6c62d3bcca33ec270bf30))
|
55
|
+
|
56
|
+
### Features
|
57
|
+
|
58
|
+
- Use regex pattern in /dependencies endpoint
|
59
|
+
([`7a7792f`](https://github.com/crypticorn-ai/api-client/commit/7a7792f33460b5fe4404d6f46ab680cca204a8f5))
|
60
|
+
|
61
|
+
|
4
62
|
## v2.9.0-rc.1 (2025-05-08)
|
5
63
|
|
6
64
|
### Bug Fixes
|
7
65
|
|
8
66
|
- Capture and format warnings in logging output
|
9
|
-
([`
|
67
|
+
([`5a1d317`](https://github.com/crypticorn-ai/api-client/commit/5a1d31721507dae015e9d9568579e91b12906ee4))
|
10
68
|
|
11
69
|
- Use `contextlib.asynccontextmanager` for starlette lifespan
|
12
|
-
([`
|
70
|
+
([`c253dd1`](https://github.com/crypticorn-ai/api-client/commit/c253dd133dff5073f355ed8f93c0be1814b739f2))
|
13
71
|
|
14
72
|
### Documentation
|
15
73
|
|
16
74
|
- Update docstrings and module descriptions
|
17
|
-
([`
|
75
|
+
([`c80f306`](https://github.com/crypticorn-ai/api-client/commit/c80f30614641f09366ca3566295e9bce8eee828d))
|
18
76
|
|
19
77
|
### Features
|
20
78
|
|
21
79
|
- Add deprecation warnings in call and in-code support
|
22
|
-
([`
|
80
|
+
([`b3100e6`](https://github.com/crypticorn-ai/api-client/commit/b3100e69874b8fca439778351c2834b5ae2b91b6))
|
23
81
|
|
24
82
|
- Provide default openapi tags from the status and admin router
|
25
|
-
([`
|
83
|
+
([`e8ef966`](https://github.com/crypticorn-ai/api-client/commit/e8ef966bc9ee60a17ef8842a041d5e1800c32d93))
|
84
|
+
|
85
|
+
|
86
|
+
## v2.8.2 (2025-05-08)
|
87
|
+
|
88
|
+
### Bug Fixes
|
89
|
+
|
90
|
+
- Hotfix response type error
|
91
|
+
([`7cc14fc`](https://github.com/crypticorn-ai/api-client/commit/7cc14fcced66441d9e320ad754a164ca016cda26))
|
26
92
|
|
27
93
|
|
28
94
|
## v2.8.1 (2025-05-07)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Copyright © 2025 Crypticorn
|
2
|
+
|
3
|
+
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:
|
4
|
+
|
5
|
+
1. The aforementioned copyright notice and this permission notice must be included unaltered in all copies, or significant portions, of the Software.
|
6
|
+
|
7
|
+
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.
|
8
|
+
|
9
|
+
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.
|
10
|
+
|
11
|
+
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.
|
12
|
+
|
13
|
+
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.
|
14
|
+
|
15
|
+
This agreement is written in English. In the event of any discrepancy between the English version and any translation, the English version shall prevail.
|
@@ -1,9 +1,23 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: crypticorn
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.10.1
|
4
4
|
Summary: Maximise Your Crypto Trading Profits with Machine Learning
|
5
5
|
Author-email: Crypticorn <timon@crypticorn.com>
|
6
|
-
License:
|
6
|
+
License: Copyright © 2025 Crypticorn
|
7
|
+
|
8
|
+
All rights reserved. This software and accompanying documentation files (collectively referred to as "the Software") are the proprietary property of Crypticorn. Any unauthorised reproduction, modification, integration, publication, distribution, sublicensing, sale, or enabling access to the Software without explicit written permission from Crypticorn is strictly prohibited, subject to the conditions outlined herein:
|
9
|
+
|
10
|
+
1. The aforementioned copyright notice and this permission notice must be included unaltered in all copies, or significant portions, of the Software.
|
11
|
+
|
12
|
+
2. The Software is provided "AS IS", without any warranty, whether express or implied. Crypticorn expressly disclaims any guarantees, including but not limited to those of satisfactory quality, fitness for a particular purpose, or non-infringement of third-party rights.
|
13
|
+
|
14
|
+
3. In no event shall Crypticorn, its authors, or copyright holders be held liable for any claim, damages, or other liability arising from or associated with the use of the Software or any other dealings involving the Software, to the extent that such liability can be limited or excluded by applicable law.
|
15
|
+
|
16
|
+
Changes to this agreement may be made without notice, and it is the user's responsibility to keep abreast of any changes. This agreement and its interpretation are subject to the laws of the Federal Republic of Germany.
|
17
|
+
|
18
|
+
If any provision of this license agreement is held to be invalid or unenforceable under applicable law, the remaining provisions will continue in full force and effect. Crypticorn's failure to enforce any provision of this agreement does not constitute a waiver of its right to do so in the future.
|
19
|
+
|
20
|
+
This agreement is written in English. In the event of any discrepancy between the English version and any translation, the English version shall prevail.
|
7
21
|
Project-URL: Homepage, https://crypticorn.com
|
8
22
|
Project-URL: Documentation, https://docs.crypticorn.com
|
9
23
|
Project-URL: Dashboard, https://app.crypticorn.com
|
@@ -20,6 +34,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
20
34
|
Classifier: Typing :: Typed
|
21
35
|
Requires-Python: >=3.10
|
22
36
|
Description-Content-Type: text/markdown
|
37
|
+
License-File: LICENSE
|
23
38
|
Requires-Dist: fastapi<1.0.0,>=0.115.0
|
24
39
|
Requires-Dist: click<9.0.0,>=8.0.0
|
25
40
|
Requires-Dist: psutil<8.0.0,>=7.0.0
|
@@ -35,14 +50,13 @@ Requires-Dist: tqdm<5.0.0,>=4.67.0
|
|
35
50
|
Provides-Extra: dev
|
36
51
|
Requires-Dist: build; extra == "dev"
|
37
52
|
Requires-Dist: twine; extra == "dev"
|
38
|
-
Requires-Dist: streamlit; extra == "dev"
|
39
|
-
Requires-Dist: httpx; extra == "dev"
|
40
53
|
Requires-Dist: black; extra == "dev"
|
41
54
|
Requires-Dist: ruff; extra == "dev"
|
42
55
|
Requires-Dist: isort; extra == "dev"
|
43
56
|
Requires-Dist: mypy; extra == "dev"
|
44
57
|
Requires-Dist: openapi-generator-cli<8.0.0,>=7.12.0; extra == "dev"
|
45
58
|
Requires-Dist: pdoc==15.0.3; extra == "dev"
|
59
|
+
Requires-Dist: python-semantic-release==9.21.0; extra == "dev"
|
46
60
|
Provides-Extra: test
|
47
61
|
Requires-Dist: pytest==8.3.5; extra == "test"
|
48
62
|
Requires-Dist: pytest-asyncio==0.26.0; extra == "test"
|
@@ -51,6 +65,7 @@ Requires-Dist: python-dotenv==1.0.1; extra == "test"
|
|
51
65
|
Requires-Dist: PyJWT==2.10.0; extra == "test"
|
52
66
|
Provides-Extra: extra
|
53
67
|
Requires-Dist: pandas<3.0.0,>=2.2.0; extra == "extra"
|
68
|
+
Dynamic: license-file
|
54
69
|
|
55
70
|
## What is Crypticorn?
|
56
71
|
|
@@ -83,7 +98,7 @@ from crypticorn import ApiClient
|
|
83
98
|
```
|
84
99
|
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:
|
85
100
|
|
86
|
-
<img src="
|
101
|
+
<img src="pip-structure.svg" alt="pip package structure" />
|
87
102
|
|
88
103
|
You can either explore each API by clicking through the library or checkout the [API Documentation](https://docs.crypticorn.com/api).
|
89
104
|
|
@@ -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="
|
32
|
+
<img src="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
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# crypticorn/cli.py
|
2
2
|
|
3
3
|
import click
|
4
|
-
from crypticorn.cli import init_group
|
4
|
+
from crypticorn.cli import init_group, version
|
5
5
|
|
6
6
|
|
7
7
|
@click.group()
|
@@ -11,6 +11,7 @@ def cli():
|
|
11
11
|
|
12
12
|
|
13
13
|
cli.add_command(init_group, name="init")
|
14
|
+
cli.add_command(version, name="version")
|
14
15
|
|
15
16
|
if __name__ == "__main__":
|
16
17
|
cli()
|
@@ -31,6 +31,13 @@ def copy_template(template_name: str, target_path: Path):
|
|
31
31
|
click.secho(f"✅ Created: {target_path}", fg="green")
|
32
32
|
|
33
33
|
|
34
|
+
def check_file_exists(path: Path, force: bool):
|
35
|
+
if path.exists() and not force:
|
36
|
+
click.secho(f"File already exists, use --force / -f to overwrite", fg="red")
|
37
|
+
return False
|
38
|
+
return True
|
39
|
+
|
40
|
+
|
34
41
|
@click.group()
|
35
42
|
def init_group():
|
36
43
|
"""Initialize files like CI configs, linters, etc."""
|
@@ -61,8 +68,7 @@ def init_docker(output, force):
|
|
61
68
|
click.secho("Output path is a file, please provide a directory path", fg="red")
|
62
69
|
return
|
63
70
|
target = (Path(output) if output else root) / "Dockerfile"
|
64
|
-
if target
|
65
|
-
click.secho("File already exists, use --force / -f to overwrite", fg="red")
|
71
|
+
if not check_file_exists(target, force):
|
66
72
|
return
|
67
73
|
copy_template("Dockerfile", target)
|
68
74
|
click.secho("Make sure to update the Dockerfile", fg="yellow")
|
@@ -80,13 +86,12 @@ def init_auth(output, force):
|
|
80
86
|
click.secho("Output path is a file, please provide a directory path", fg="red")
|
81
87
|
return
|
82
88
|
target = (Path(output) if output else root) / "auth.py"
|
83
|
-
if target
|
84
|
-
click.secho("File already exists, use --force / -f to overwrite", fg="red")
|
89
|
+
if not check_file_exists(target, force):
|
85
90
|
return
|
86
91
|
copy_template("auth.py", target)
|
87
92
|
click.secho(
|
88
93
|
"""
|
89
|
-
Make sure to update the .env
|
94
|
+
Make sure to update the .env and .env.example files with:
|
90
95
|
IS_DOCKER=0
|
91
96
|
API_ENV=local
|
92
97
|
and the docker-compose.yml file with:
|
@@ -106,7 +111,17 @@ def init_dependabot(force):
|
|
106
111
|
"""Add dependabot.yml"""
|
107
112
|
root = get_git_root()
|
108
113
|
target = root / ".github/dependabot.yml"
|
109
|
-
if target
|
110
|
-
click.secho("File already exists, use --force / -f to overwrite", fg="red")
|
114
|
+
if not check_file_exists(target, force):
|
111
115
|
return
|
112
116
|
copy_template("dependabot.yml", target)
|
117
|
+
|
118
|
+
|
119
|
+
@init_group.command("merge-env")
|
120
|
+
@click.option("-f", "--force", is_flag=True, help="Force overwrite the .env file")
|
121
|
+
def init_merge_env(force):
|
122
|
+
"""Add script to merge environment and file variables into .env"""
|
123
|
+
root = get_git_root()
|
124
|
+
target = root / "scripts/merge-env.sh"
|
125
|
+
if not check_file_exists(target, force):
|
126
|
+
return
|
127
|
+
copy_template("merge-env.sh", target)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# this script merges the env variables from the environment and the .env.example file into the .env file
|
4
|
+
# the appended variables take precedence over the .env.example variables (if both are set)
|
5
|
+
|
6
|
+
# Make executable before running in github actions
|
7
|
+
# chmod +x scripts/merge-env.sh
|
8
|
+
|
9
|
+
# Usage in a github action:
|
10
|
+
# - name: Generate .env
|
11
|
+
# run: ./scripts/merge-env.sh
|
12
|
+
|
13
|
+
set -e
|
14
|
+
|
15
|
+
cp .env.example .env
|
16
|
+
echo >> .env
|
17
|
+
printenv | awk -F= '{print $1"=\""substr($0, index($0,$2))"\""}' >> .env
|
@@ -1,17 +1,17 @@
|
|
1
1
|
"""Defines common enumerations used throughout the codebase for type safety and consistency."""
|
2
2
|
|
3
3
|
from enum import StrEnum
|
4
|
-
from crypticorn.common.mixins import ValidateEnumMixin
|
4
|
+
from crypticorn.common.mixins import ValidateEnumMixin
|
5
5
|
|
6
6
|
|
7
|
-
class Exchange(ValidateEnumMixin,
|
7
|
+
class Exchange(ValidateEnumMixin, StrEnum):
|
8
8
|
"""Supported exchanges for trading"""
|
9
9
|
|
10
10
|
KUCOIN = "kucoin"
|
11
11
|
BINGX = "bingx"
|
12
12
|
|
13
13
|
|
14
|
-
class InternalExchange(ValidateEnumMixin,
|
14
|
+
class InternalExchange(ValidateEnumMixin, StrEnum):
|
15
15
|
"""All exchanges we are using, including public (Exchange)"""
|
16
16
|
|
17
17
|
KUCOIN = "kucoin"
|
@@ -22,7 +22,7 @@ class InternalExchange(ValidateEnumMixin, ExcludeEnumMixin, StrEnum):
|
|
22
22
|
BITGET = "bitget"
|
23
23
|
|
24
24
|
|
25
|
-
class MarketType(ValidateEnumMixin,
|
25
|
+
class MarketType(ValidateEnumMixin, StrEnum):
|
26
26
|
"""
|
27
27
|
Market types
|
28
28
|
"""
|
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
from enum import Enum, StrEnum
|
4
4
|
from fastapi import status
|
5
|
-
from crypticorn.common.mixins import
|
5
|
+
from crypticorn.common.mixins import ApiErrorFallback
|
6
6
|
|
7
7
|
|
8
|
-
class ApiErrorType(
|
8
|
+
class ApiErrorType(StrEnum):
|
9
9
|
"""Type of the API error."""
|
10
10
|
|
11
11
|
USER_ERROR = "user error"
|
@@ -18,7 +18,7 @@ class ApiErrorType(ExcludeEnumMixin, StrEnum):
|
|
18
18
|
"""error that does not need to be handled or does not affect the program or is a placeholder."""
|
19
19
|
|
20
20
|
|
21
|
-
class ApiErrorIdentifier(
|
21
|
+
class ApiErrorIdentifier(StrEnum):
|
22
22
|
"""Unique identifier of the API error."""
|
23
23
|
|
24
24
|
ALLOCATION_BELOW_EXPOSURE = "allocation_below_current_exposure"
|
@@ -98,13 +98,12 @@ class ApiErrorIdentifier(ExcludeEnumMixin, StrEnum):
|
|
98
98
|
UNKNOWN_ERROR = "unknown_error_occurred"
|
99
99
|
URL_NOT_FOUND = "requested_resource_not_found"
|
100
100
|
|
101
|
-
@property
|
102
101
|
def get_error(self) -> "ApiError":
|
103
102
|
"""Get the corresponding ApiError."""
|
104
|
-
return ApiError
|
103
|
+
return getattr(ApiError, self.name)
|
105
104
|
|
106
105
|
|
107
|
-
class ApiErrorLevel(
|
106
|
+
class ApiErrorLevel(StrEnum):
|
108
107
|
"""Level of the API error."""
|
109
108
|
|
110
109
|
ERROR = "error"
|
@@ -113,7 +112,7 @@ class ApiErrorLevel(ExcludeEnumMixin, StrEnum):
|
|
113
112
|
WARNING = "warning"
|
114
113
|
|
115
114
|
|
116
|
-
class ApiError(
|
115
|
+
class ApiError(Enum, metaclass=ApiErrorFallback):
|
117
116
|
# Fallback to UNKNOWN_ERROR for error codes not yet published to PyPI.
|
118
117
|
"""Crypticorn API error enumeration."""
|
119
118
|
|
@@ -39,10 +39,13 @@ class ValidateEnumMixin:
|
|
39
39
|
class ExcludeEnumMixin:
|
40
40
|
"""(deprecated) Mixin to exclude enum from OpenAPI schema. We use this to avoid duplicating enums when generating client code from the openapi spec."""
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
def __init_subclass__(cls, **kwargs):
|
43
|
+
super().__init_subclass__(**kwargs)
|
44
|
+
if cls.__name__.startswith("ExcludeEnumMixin"):
|
45
|
+
warnings.warn(
|
46
|
+
"The `ExcludeEnumMixin` class is deprecated. Should be removed from enums inheriting this class.",
|
47
|
+
category=CrypticornDeprecatedSince28,
|
48
|
+
)
|
46
49
|
|
47
50
|
@classmethod
|
48
51
|
def __get_pydantic_json_schema__(cls, core_schema, handler):
|
@@ -56,7 +59,7 @@ class ApiErrorFallback(EnumMeta):
|
|
56
59
|
|
57
60
|
def __getattr__(cls, name):
|
58
61
|
# Let Pydantic/internal stuff pass silently ! fragile
|
59
|
-
if name.startswith("__"):
|
62
|
+
if name.startswith("__") or name.startswith("_pytest"):
|
60
63
|
raise AttributeError(name)
|
61
64
|
_logger.warning(
|
62
65
|
f"Unknown enum member '{name}' - update crypticorn package or check for typos"
|
@@ -10,8 +10,9 @@ import importlib.metadata
|
|
10
10
|
import threading
|
11
11
|
import time
|
12
12
|
import psutil
|
13
|
+
import re
|
13
14
|
from fastapi import APIRouter, Query
|
14
|
-
from typing import Literal
|
15
|
+
from typing import Literal
|
15
16
|
from crypticorn.common.logging import LogLevel
|
16
17
|
import logging
|
17
18
|
|
@@ -86,13 +87,20 @@ def get_container_limits() -> dict:
|
|
86
87
|
def list_installed_packages(
|
87
88
|
include: list[str] = Query(
|
88
89
|
default=None,
|
89
|
-
description="List of
|
90
|
+
description="List of regex patterns to match against package names. If not provided, all installed packages will be returned.",
|
90
91
|
)
|
91
|
-
) ->
|
92
|
-
"""Return a list of installed packages and versions.
|
92
|
+
) -> dict[str, str]:
|
93
|
+
"""Return a list of installed packages and versions.
|
94
|
+
|
95
|
+
The include parameter accepts regex patterns to match against package names.
|
96
|
+
For example:
|
97
|
+
- crypticorn.* will match all packages starting with 'crypticorn'
|
98
|
+
- .*tic.* will match all packages containing 'tic' in their name
|
99
|
+
"""
|
93
100
|
packages = {
|
94
101
|
dist.metadata["Name"]: dist.version
|
95
102
|
for dist in importlib.metadata.distributions()
|
96
|
-
if include is None
|
103
|
+
if include is None
|
104
|
+
or any(re.match(pattern, dist.metadata["Name"]) for pattern in include)
|
97
105
|
}
|
98
106
|
return dict(sorted(packages.items()))
|
@@ -49,8 +49,8 @@ from crypticorn.hive.client.models.evaluation_response import EvaluationResponse
|
|
49
49
|
from crypticorn.hive.client.models.exception_detail import ExceptionDetail
|
50
50
|
from crypticorn.hive.client.models.feature_size import FeatureSize
|
51
51
|
from crypticorn.hive.client.models.log_level import LogLevel
|
52
|
-
from crypticorn.hive.client.models.model import Model
|
53
52
|
from crypticorn.hive.client.models.model_create import ModelCreate
|
53
|
+
from crypticorn.hive.client.models.model_read import ModelRead
|
54
54
|
from crypticorn.hive.client.models.model_status import ModelStatus
|
55
55
|
from crypticorn.hive.client.models.model_update import ModelUpdate
|
56
56
|
from crypticorn.hive.client.models.target import Target
|