crypticorn 2.9.0rc1__tar.gz → 2.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/CHANGELOG.md +53 -5
- crypticorn-2.10.0/LICENSE +15 -0
- crypticorn-2.10.0/MANIFEST.in +4 -0
- {crypticorn-2.9.0rc1/crypticorn.egg-info → crypticorn-2.10.0}/PKG-INFO +19 -2
- crypticorn-2.10.0/crypticorn/cli/__init__.py +4 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/__main__.py +2 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/init.py +20 -8
- crypticorn-2.10.0/crypticorn/cli/templates/merge-env.sh +13 -0
- crypticorn-2.10.0/crypticorn/cli/version.py +7 -0
- crypticorn-2.10.0/crypticorn/common/openapi.py +10 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/router/admin_router.py +13 -5
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/router/status_router.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/__init__.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api/admin_api.py +30 -27
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api/data_api.py +36 -18
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api/models_api.py +87 -72
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/__init__.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/api_error_identifier.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/api_error_level.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/api_error_type.py +1 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/exception_detail.py +1 -1
- crypticorn-2.9.0rc1/crypticorn/hive/client/models/model.py → crypticorn-2.10.0/crypticorn/hive/client/models/model_read.py +3 -3
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0/crypticorn.egg-info}/PKG-INFO +19 -2
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn.egg-info/SOURCES.txt +4 -1
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn.egg-info/requires.txt +1 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/pyproject.toml +2 -2
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/requirements/dev.txt +1 -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.0}/README.md +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api/auth_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api/service_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api/user_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api/wallet_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/create_api_key_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/create_user_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/logout_default_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/token_info200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/update_user_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/verify200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/verify_email_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/models/whoami200_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/auth/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/templates/Dockerfile +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/templates/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/templates/auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/templates/dependabot.yml +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/cli/templates/ruff.yml +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/ansi_colors.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/auth.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/decorators.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/enums.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/errors.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/logging.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/middleware.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/mixins.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/pagination.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/scopes.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/urls.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/utils.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/common/warnings.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/coins.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/data_download_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/data_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/data_options.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/data_version.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/data_version_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/download_links.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/evaluation.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/evaluation_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/feature_size.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/model_create.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/model_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/model_update.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/target.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/target_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/models/target_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/hive/utils.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/change_in_timeframe_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/funding_rates_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/ohlcv_data_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/symbols_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api/udf_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/api_error_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/api_error_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/funding_rate.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/internal_exchange.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/market_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/ohlcv.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/resolution.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/search_symbol.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/sort_direction.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/symbol_group.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/symbol_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/symbol_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/timeframe.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/models/udf_config.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/klines/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/exchanges_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/indicators_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/logs_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/marketcap_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/markets_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/quote_currencies_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api/tokens_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/api_error_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/api_error_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/market_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/marketcap_ranking.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/ohlcv.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/severity.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/time_interval.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/models/trading_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/metrics/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api/admin_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api/now_payments_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api/payments_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api/products_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/log_level.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/payment.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/payment_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/product_create.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/product_read.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/product_sub_read.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/product_update.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/provider.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/response_getuptime.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/models/scope.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/pay/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/api_keys_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/bots_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/exchanges_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/futures_trading_panel_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/notifications_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/orders_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/status_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/strategies_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api/trading_actions_api.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/api_response.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/configuration.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/exceptions.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/__init__.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/action_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/bot_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/bot_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/exception_detail.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/exchange_key_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/execution_ids.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/futures_balance.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/margin_mode.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/notification_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/order_model.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/order_status.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/post_futures_action.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/spot_trading_action.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/strategy_exchange_info.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/strategy_model_input.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/strategy_model_output.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/tpsl.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/models/trading_action_type.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/py.typed +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/client/rest.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn/trade/main.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn.egg-info/dependency_links.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn.egg-info/entry_points.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/crypticorn.egg-info/top_level.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/requirements/extra.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/requirements/main.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/requirements/test.txt +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/setup.cfg +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/tests/test_auth_client.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/tests/test_config.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/tests/test_enums.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/tests/test_errors.py +0 -0
- {crypticorn-2.9.0rc1 → crypticorn-2.10.0}/tests/test_pagination.py +0 -0
@@ -1,28 +1,76 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.10.0 (2025-05-09)
|
5
|
+
|
6
|
+
### Build System
|
7
|
+
|
8
|
+
- Include info .md files and license in distribution
|
9
|
+
([`3c3d065`](https://github.com/crypticorn-ai/api-client/commit/3c3d0655b67478f98d970e7ad218e8947b8a9ec0))
|
10
|
+
|
11
|
+
### Continuous Integration
|
12
|
+
|
13
|
+
- Fix typo in testing workflow
|
14
|
+
([`e0fd734`](https://github.com/crypticorn-ai/api-client/commit/e0fd73450efda0c41ed583a771e0b6774e6a8dbd))
|
15
|
+
|
16
|
+
- Properly read env vars
|
17
|
+
([`6d25286`](https://github.com/crypticorn-ai/api-client/commit/6d252865986b974789831e91cedd45e9a594ebbc))
|
18
|
+
|
19
|
+
- Update test workflow
|
20
|
+
([`97b7b8b`](https://github.com/crypticorn-ai/api-client/commit/97b7b8b76691e91d788030e603e2fc65ac7ba8c8))
|
21
|
+
|
22
|
+
### Features
|
23
|
+
|
24
|
+
- Add new init template to the CLI for generating a env merging script
|
25
|
+
([`7e3a71a`](https://github.com/crypticorn-ai/api-client/commit/7e3a71a0f67eceb1ab1f8545eeba0a390736e129))
|
26
|
+
|
27
|
+
- Add version command in the CLI (crypticorn version)
|
28
|
+
([`289eef4`](https://github.com/crypticorn-ai/api-client/commit/289eef48fa51f771c9b461206a93470f35ce2369))
|
29
|
+
|
30
|
+
|
31
|
+
## v2.9.0 (2025-05-08)
|
32
|
+
|
33
|
+
### Build System
|
34
|
+
|
35
|
+
- Add python-semantic-release as an dev dependency
|
36
|
+
([`72dfc09`](https://github.com/crypticorn-ai/api-client/commit/72dfc092b7b4fde231e6c62d3bcca33ec270bf30))
|
37
|
+
|
38
|
+
### Features
|
39
|
+
|
40
|
+
- Use regex pattern in /dependencies endpoint
|
41
|
+
([`7a7792f`](https://github.com/crypticorn-ai/api-client/commit/7a7792f33460b5fe4404d6f46ab680cca204a8f5))
|
42
|
+
|
43
|
+
|
4
44
|
## v2.9.0-rc.1 (2025-05-08)
|
5
45
|
|
6
46
|
### Bug Fixes
|
7
47
|
|
8
48
|
- Capture and format warnings in logging output
|
9
|
-
([`
|
49
|
+
([`5a1d317`](https://github.com/crypticorn-ai/api-client/commit/5a1d31721507dae015e9d9568579e91b12906ee4))
|
10
50
|
|
11
51
|
- Use `contextlib.asynccontextmanager` for starlette lifespan
|
12
|
-
([`
|
52
|
+
([`c253dd1`](https://github.com/crypticorn-ai/api-client/commit/c253dd133dff5073f355ed8f93c0be1814b739f2))
|
13
53
|
|
14
54
|
### Documentation
|
15
55
|
|
16
56
|
- Update docstrings and module descriptions
|
17
|
-
([`
|
57
|
+
([`c80f306`](https://github.com/crypticorn-ai/api-client/commit/c80f30614641f09366ca3566295e9bce8eee828d))
|
18
58
|
|
19
59
|
### Features
|
20
60
|
|
21
61
|
- Add deprecation warnings in call and in-code support
|
22
|
-
([`
|
62
|
+
([`b3100e6`](https://github.com/crypticorn-ai/api-client/commit/b3100e69874b8fca439778351c2834b5ae2b91b6))
|
23
63
|
|
24
64
|
- Provide default openapi tags from the status and admin router
|
25
|
-
([`
|
65
|
+
([`e8ef966`](https://github.com/crypticorn-ai/api-client/commit/e8ef966bc9ee60a17ef8842a041d5e1800c32d93))
|
66
|
+
|
67
|
+
|
68
|
+
## v2.8.2 (2025-05-08)
|
69
|
+
|
70
|
+
### Bug Fixes
|
71
|
+
|
72
|
+
- Hotfix response type error
|
73
|
+
([`7cc14fc`](https://github.com/crypticorn-ai/api-client/commit/7cc14fcced66441d9e320ad754a164ca016cda26))
|
26
74
|
|
27
75
|
|
28
76
|
## 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.0
|
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
|
@@ -43,6 +58,7 @@ Requires-Dist: isort; extra == "dev"
|
|
43
58
|
Requires-Dist: mypy; extra == "dev"
|
44
59
|
Requires-Dist: openapi-generator-cli<8.0.0,>=7.12.0; extra == "dev"
|
45
60
|
Requires-Dist: pdoc==15.0.3; extra == "dev"
|
61
|
+
Requires-Dist: python-semantic-release==9.21.0; extra == "dev"
|
46
62
|
Provides-Extra: test
|
47
63
|
Requires-Dist: pytest==8.3.5; extra == "test"
|
48
64
|
Requires-Dist: pytest-asyncio==0.26.0; extra == "test"
|
@@ -51,6 +67,7 @@ Requires-Dist: python-dotenv==1.0.1; extra == "test"
|
|
51
67
|
Requires-Dist: PyJWT==2.10.0; extra == "test"
|
52
68
|
Provides-Extra: extra
|
53
69
|
Requires-Dist: pandas<3.0.0,>=2.2.0; extra == "extra"
|
70
|
+
Dynamic: license-file
|
54
71
|
|
55
72
|
## What is Crypticorn?
|
56
73
|
|
@@ -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()
|
@@ -4,7 +4,6 @@ import subprocess
|
|
4
4
|
import importlib.resources
|
5
5
|
import crypticorn.cli.templates as templates
|
6
6
|
|
7
|
-
|
8
7
|
def get_git_root() -> Path:
|
9
8
|
"""Get the root directory of the git repository."""
|
10
9
|
try:
|
@@ -30,6 +29,12 @@ def copy_template(template_name: str, target_path: Path):
|
|
30
29
|
|
31
30
|
click.secho(f"✅ Created: {target_path}", fg="green")
|
32
31
|
|
32
|
+
def check_file_exists(path: Path, force: bool):
|
33
|
+
if path.exists() and not force:
|
34
|
+
click.secho(f"File already exists, use --force / -f to overwrite", fg="red")
|
35
|
+
return False
|
36
|
+
return True
|
37
|
+
|
33
38
|
|
34
39
|
@click.group()
|
35
40
|
def init_group():
|
@@ -61,8 +66,7 @@ def init_docker(output, force):
|
|
61
66
|
click.secho("Output path is a file, please provide a directory path", fg="red")
|
62
67
|
return
|
63
68
|
target = (Path(output) if output else root) / "Dockerfile"
|
64
|
-
if target
|
65
|
-
click.secho("File already exists, use --force / -f to overwrite", fg="red")
|
69
|
+
if not check_file_exists(target, force):
|
66
70
|
return
|
67
71
|
copy_template("Dockerfile", target)
|
68
72
|
click.secho("Make sure to update the Dockerfile", fg="yellow")
|
@@ -80,13 +84,12 @@ def init_auth(output, force):
|
|
80
84
|
click.secho("Output path is a file, please provide a directory path", fg="red")
|
81
85
|
return
|
82
86
|
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")
|
87
|
+
if not check_file_exists(target, force):
|
85
88
|
return
|
86
89
|
copy_template("auth.py", target)
|
87
90
|
click.secho(
|
88
91
|
"""
|
89
|
-
Make sure to update the .env
|
92
|
+
Make sure to update the .env and .env.example files with:
|
90
93
|
IS_DOCKER=0
|
91
94
|
API_ENV=local
|
92
95
|
and the docker-compose.yml file with:
|
@@ -106,7 +109,16 @@ def init_dependabot(force):
|
|
106
109
|
"""Add dependabot.yml"""
|
107
110
|
root = get_git_root()
|
108
111
|
target = root / ".github/dependabot.yml"
|
109
|
-
if target
|
110
|
-
click.secho("File already exists, use --force / -f to overwrite", fg="red")
|
112
|
+
if not check_file_exists(target, force):
|
111
113
|
return
|
112
114
|
copy_template("dependabot.yml", target)
|
115
|
+
|
116
|
+
@init_group.command("merge-env")
|
117
|
+
@click.option("-f", "--force", is_flag=True, help="Force overwrite the .env file")
|
118
|
+
def init_merge_env(force):
|
119
|
+
"""Add script to merge environment and file variables into .env"""
|
120
|
+
root = get_git_root()
|
121
|
+
target = root / "scripts/merge-env.sh"
|
122
|
+
if not check_file_exists(target, force):
|
123
|
+
return
|
124
|
+
copy_template("merge-env.sh", target)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
# this script merges the env variables from the environment and the .env.example file into the .env file
|
3
|
+
# the appended variables take precedence over the .env.example variables (if both are set)
|
4
|
+
|
5
|
+
# Usage in a github action:
|
6
|
+
# - name: Generate .env
|
7
|
+
# run: ./scripts/merge-env.sh
|
8
|
+
|
9
|
+
set -e
|
10
|
+
|
11
|
+
cp .env.example .env
|
12
|
+
echo >> .env
|
13
|
+
printenv | awk -F= '{print $1"=\""substr($0, index($0,$2))"\""}' >> .env
|
@@ -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
|
@@ -16,8 +16,8 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
|
|
16
16
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
17
17
|
from typing_extensions import Annotated
|
18
18
|
|
19
|
-
from pydantic import Field, StrictInt, StrictStr, field_validator
|
20
|
-
from typing import Any, Dict, List, Optional
|
19
|
+
from pydantic import Field, StrictFloat, StrictInt, StrictStr, field_validator
|
20
|
+
from typing import Any, Dict, List, Optional, Union
|
21
21
|
from typing_extensions import Annotated
|
22
22
|
from crypticorn.hive.client.models.log_level import LogLevel
|
23
23
|
|
@@ -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
|
@@ -541,9 +541,9 @@ class AdminApi:
|
|
541
541
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
542
542
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
543
543
|
) -> LogLevel:
|
544
|
-
"""Get Logging Level
|
544
|
+
"""(Deprecated) Get Logging Level
|
545
545
|
|
546
|
-
Get the log level of the server logger.
|
546
|
+
Get the log level of the server logger. Will be removed in a future release.
|
547
547
|
|
548
548
|
:param _request_timeout: timeout setting for this request. If one
|
549
549
|
number provided, it will be total request
|
@@ -566,6 +566,7 @@ class AdminApi:
|
|
566
566
|
:type _host_index: int, optional
|
567
567
|
:return: Returns the result object.
|
568
568
|
""" # noqa: E501
|
569
|
+
warnings.warn("GET /admin/log-level is deprecated.", DeprecationWarning)
|
569
570
|
|
570
571
|
_param = self._get_log_level_serialize(
|
571
572
|
_request_auth=_request_auth,
|
@@ -601,9 +602,9 @@ class AdminApi:
|
|
601
602
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
602
603
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
603
604
|
) -> ApiResponse[LogLevel]:
|
604
|
-
"""Get Logging Level
|
605
|
+
"""(Deprecated) Get Logging Level
|
605
606
|
|
606
|
-
Get the log level of the server logger.
|
607
|
+
Get the log level of the server logger. Will be removed in a future release.
|
607
608
|
|
608
609
|
:param _request_timeout: timeout setting for this request. If one
|
609
610
|
number provided, it will be total request
|
@@ -626,6 +627,7 @@ class AdminApi:
|
|
626
627
|
:type _host_index: int, optional
|
627
628
|
:return: Returns the result object.
|
628
629
|
""" # noqa: E501
|
630
|
+
warnings.warn("GET /admin/log-level is deprecated.", DeprecationWarning)
|
629
631
|
|
630
632
|
_param = self._get_log_level_serialize(
|
631
633
|
_request_auth=_request_auth,
|
@@ -661,9 +663,9 @@ class AdminApi:
|
|
661
663
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
662
664
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
663
665
|
) -> RESTResponseType:
|
664
|
-
"""Get Logging Level
|
666
|
+
"""(Deprecated) Get Logging Level
|
665
667
|
|
666
|
-
Get the log level of the server logger.
|
668
|
+
Get the log level of the server logger. Will be removed in a future release.
|
667
669
|
|
668
670
|
:param _request_timeout: timeout setting for this request. If one
|
669
671
|
number provided, it will be total request
|
@@ -686,6 +688,7 @@ class AdminApi:
|
|
686
688
|
:type _host_index: int, optional
|
687
689
|
:return: Returns the result object.
|
688
690
|
""" # noqa: E501
|
691
|
+
warnings.warn("GET /admin/log-level is deprecated.", DeprecationWarning)
|
689
692
|
|
690
693
|
_param = self._get_log_level_serialize(
|
691
694
|
_request_auth=_request_auth,
|
@@ -767,7 +770,7 @@ class AdminApi:
|
|
767
770
|
_content_type: Optional[StrictStr] = None,
|
768
771
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
769
772
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
770
|
-
) ->
|
773
|
+
) -> float:
|
771
774
|
"""Get Memory Usage
|
772
775
|
|
773
776
|
Resident Set Size (RSS) in MB — the actual memory used by the process in RAM. Represents the physical memory footprint. Important for monitoring real usage.
|
@@ -802,7 +805,7 @@ class AdminApi:
|
|
802
805
|
)
|
803
806
|
|
804
807
|
_response_types_map: Dict[str, Optional[str]] = {
|
805
|
-
"200": "
|
808
|
+
"200": "float",
|
806
809
|
}
|
807
810
|
response_data = await self.api_client.call_api(
|
808
811
|
*_param, _request_timeout=_request_timeout
|
@@ -827,7 +830,7 @@ class AdminApi:
|
|
827
830
|
_content_type: Optional[StrictStr] = None,
|
828
831
|
_headers: Optional[Dict[StrictStr, Any]] = None,
|
829
832
|
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
830
|
-
) -> ApiResponse[
|
833
|
+
) -> ApiResponse[float]:
|
831
834
|
"""Get Memory Usage
|
832
835
|
|
833
836
|
Resident Set Size (RSS) in MB — the actual memory used by the process in RAM. Represents the physical memory footprint. Important for monitoring real usage.
|
@@ -862,7 +865,7 @@ class AdminApi:
|
|
862
865
|
)
|
863
866
|
|
864
867
|
_response_types_map: Dict[str, Optional[str]] = {
|
865
|
-
"200": "
|
868
|
+
"200": "float",
|
866
869
|
}
|
867
870
|
response_data = await self.api_client.call_api(
|
868
871
|
*_param, _request_timeout=_request_timeout
|
@@ -922,7 +925,7 @@ class AdminApi:
|
|
922
925
|
)
|
923
926
|
|
924
927
|
_response_types_map: Dict[str, Optional[str]] = {
|
925
|
-
"200": "
|
928
|
+
"200": "float",
|
926
929
|
}
|
927
930
|
response_data = await self.api_client.call_api(
|
928
931
|
*_param, _request_timeout=_request_timeout
|