crypticorn 2.16.0__tar.gz → 2.17.0rc2__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.16.0 → crypticorn-2.17.0rc2}/CHANGELOG.md +33 -0
- {crypticorn-2.16.0/crypticorn.egg-info → crypticorn-2.17.0rc2}/PKG-INFO +65 -20
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/README.md +62 -20
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/__init__.py +2 -2
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/admin_api.py +415 -13
- crypticorn-2.17.0rc2/crypticorn/auth/client/api/auth_api.py +5575 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/service_api.py +258 -7
- crypticorn-2.17.0rc2/crypticorn/auth/client/api/user_api.py +5002 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/wallet_api.py +1518 -77
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/create_api_key_request.py +2 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/rest.py +23 -4
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/main.py +8 -5
- crypticorn-2.17.0rc2/crypticorn/client.py +330 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/__init__.py +1 -0
- crypticorn-2.17.0rc2/crypticorn/common/metrics.py +18 -0
- crypticorn-2.17.0rc2/crypticorn/common/middleware.py +74 -0
- crypticorn-2.17.0rc2/crypticorn/common/pagination.py +172 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/router/admin_router.py +12 -2
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/utils.py +2 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/warnings.py +7 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/admin_api.py +1234 -51
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/data_api.py +517 -13
- crypticorn-2.17.0rc2/crypticorn/hive/client/api/models_api.py +3460 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/status_api.py +415 -13
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/api_error_identifier.py +1 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/rest.py +23 -4
- crypticorn-2.17.0rc2/crypticorn/hive/main.py +172 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/admin_api.py +1234 -51
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/change_in_timeframe_api.py +278 -7
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/funding_rates_api.py +324 -7
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/ohlcv_data_api.py +399 -7
- crypticorn-2.17.0rc2/crypticorn/klines/client/api/status_api.py +910 -0
- crypticorn-2.16.0/crypticorn/klines/client/api/status_api.py → crypticorn-2.17.0rc2/crypticorn/klines/client/api/symbols_api.py +206 -213
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/udf_api.py +1393 -120
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/api_error_identifier.py +3 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/rest.py +23 -4
- crypticorn-2.17.0rc2/crypticorn/klines/main.py +178 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/admin_api.py +1234 -51
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/exchanges_api.py +1405 -140
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/indicators_api.py +640 -13
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/logs_api.py +305 -7
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/marketcap_api.py +1240 -60
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/markets_api.py +352 -7
- crypticorn-2.16.0/crypticorn/metrics/client/api/tokens_api.py → crypticorn-2.17.0rc2/crypticorn/metrics/client/api/quote_currencies_api.py +223 -194
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/status_api.py +415 -13
- crypticorn-2.16.0/crypticorn/trade/client/api/exchanges_api.py → crypticorn-2.17.0rc2/crypticorn/metrics/client/api/tokens_api.py +381 -222
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/configuration.py +4 -2
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/rest.py +23 -4
- crypticorn-2.17.0rc2/crypticorn/metrics/main.py +206 -0
- crypticorn-2.16.0/crypticorn/auth/client/api/auth_api.py → crypticorn-2.17.0rc2/crypticorn/pay/client/api/admin_api.py +1500 -1517
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/now_payments_api.py +1013 -42
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/payments_api.py +580 -13
- crypticorn-2.16.0/crypticorn/hive/client/api/models_api.py → crypticorn-2.17.0rc2/crypticorn/pay/client/api/products_api.py +1045 -963
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/status_api.py +415 -13
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/configuration.py +2 -2
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/api_error_identifier.py +7 -7
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/scope.py +1 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/rest.py +23 -4
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/main.py +10 -6
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/__init__.py +2 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/__init__.py +0 -1
- crypticorn-2.16.0/crypticorn/auth/client/api/user_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/admin_api.py +1524 -1261
- crypticorn-2.17.0rc2/crypticorn/trade/client/api/api_keys_api.py +2824 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/bots_api.py +1106 -47
- crypticorn-2.16.0/crypticorn/trade/client/api/futures_trading_panel_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/exchanges_api.py +548 -542
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/notifications_api.py +1340 -112
- crypticorn-2.16.0/crypticorn/trade/client/api/status_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/orders_api.py +237 -213
- crypticorn-2.16.0/crypticorn/trade/client/api/trading_actions_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/status_api.py +410 -304
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api/strategies_api.py +1170 -69
- crypticorn-2.16.0/crypticorn/trade/client/api/api_keys_api.py → crypticorn-2.17.0rc2/crypticorn/trade/client/api/trading_actions_api.py +690 -586
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/__init__.py +2 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange.py +6 -1
- crypticorn-2.17.0rc2/crypticorn/trade/client/models/exchange_key_balance.py +111 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/futures_balance.py +27 -25
- crypticorn-2.17.0rc2/crypticorn/trade/client/models/spot_balance.py +110 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy.py +5 -3
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy_create.py +6 -4
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy_exchange_info.py +16 -4
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/strategy_update.py +2 -2
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/rest.py +23 -4
- crypticorn-2.17.0rc2/crypticorn/trade/main.py +47 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2/crypticorn.egg-info}/PKG-INFO +65 -20
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/SOURCES.txt +9 -3
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/requires.txt +3 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/pyproject.toml +1 -1
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/main.txt +2 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/test.txt +1 -0
- crypticorn-2.17.0rc2/tests/test_async_client.py +189 -0
- crypticorn-2.16.0/tests/test_custom_session.py → crypticorn-2.17.0rc2/tests/test_async_custom_session.py +10 -10
- crypticorn-2.17.0rc2/tests/test_common_routers.py +111 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_config.py +3 -3
- crypticorn-2.17.0rc2/tests/test_pagination.py +161 -0
- crypticorn-2.17.0rc2/tests/test_sync_client.py +96 -0
- crypticorn-2.17.0rc2/tests/test_sync_custom_session.py +190 -0
- crypticorn-2.16.0/crypticorn/client.py +0 -162
- crypticorn-2.16.0/crypticorn/common/middleware.py +0 -28
- crypticorn-2.16.0/crypticorn/common/pagination.py +0 -53
- crypticorn-2.16.0/crypticorn/hive/main.py +0 -98
- crypticorn-2.16.0/crypticorn/klines/client/api/symbols_api.py +0 -283
- crypticorn-2.16.0/crypticorn/klines/main.py +0 -101
- crypticorn-2.16.0/crypticorn/metrics/client/api/quote_currencies_api.py +0 -289
- crypticorn-2.16.0/crypticorn/metrics/main.py +0 -112
- crypticorn-2.16.0/crypticorn/pay/client/api/admin_api.py +0 -1455
- crypticorn-2.16.0/crypticorn/pay/client/api/products_api.py +0 -1078
- crypticorn-2.16.0/crypticorn/trade/client/api/admin_api.py +0 -1455
- crypticorn-2.16.0/crypticorn/trade/client/api/orders_api.py +0 -299
- crypticorn-2.16.0/crypticorn/trade/main.py +0 -44
- crypticorn-2.16.0/tests/test_pagination.py +0 -62
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/LICENSE +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/MANIFEST.in +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/api_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/configuration.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/add_wallet200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/add_wallet_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/authorize_user200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/authorize_user200_response_auth.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/authorize_user_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/create_api_key200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/create_user_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_data_inner.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/list_wallets200_response_user_value.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/logout_default_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/logout_default_response_issues_inner.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/oauth_callback200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/oauth_callback200_response_user.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/refresh_token_info200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/resend_verification_email_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/revoke_user_tokens_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/rotate_tokens200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/token_info200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/unlink_wallet_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/update_user_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/user_by_username200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/user_reset_password_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/user_set_password_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email200_response_auth.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email200_response_auth_auth.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_email_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/verify_wallet_request.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/wallet_verified200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/models/whoami200_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/auth/client/py.typed +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/__main__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/init.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/Dockerfile +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/auth.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/dependabot.yml +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/merge-env.sh +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/templates/ruff.yml +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/cli/version.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/ansi_colors.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/auth.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/decorators.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/enums.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/errors.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/logging.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/mixins.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/openapi.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/router/status_router.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/scopes.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/common/urls.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/api_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/configuration.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/api_error_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/api_error_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/coin_info.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/coins.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_download_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_info.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_options.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_version.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/data_version_info.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/download_links.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/evaluation.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/evaluation_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/exception_detail.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/feature_size.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/log_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_read.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_status.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/model_update.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/target.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/target_info.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/models/target_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/client/py.typed +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/hive/utils.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/api_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/configuration.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/api_error_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/api_error_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/change_in_timeframe.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/exception_detail.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/funding_rate.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/funding_rate_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/internal_exchange.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/log_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/market_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/ohlcv.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/resolution.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/search_symbol.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/sort_direction.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/symbol_group.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/symbol_info.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/symbol_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/timeframe.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/models/udf_config.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/klines/client/py.typed +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/api_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/api_error_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/api_error_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/exception_detail.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/exchange_availability.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/exchange_mapping.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/internal_exchange.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/log_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/market_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/marketcap_ranking.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/marketcap_symbol_ranking.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/ohlcv.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/severity.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/time_interval.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/models/trading_status.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/metrics/client/py.typed +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/api_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/api_error_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/api_error_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/exception_detail.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/log_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/now_create_invoice_req.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/now_create_invoice_res.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/payment.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/payment_status.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/product.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/product_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/product_update.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/provider.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/models/subscription.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/pay/client/py.typed +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/__init__.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/api_response.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/configuration.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/exceptions.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/api_error_identifier.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/api_error_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/api_error_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot_status.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/bot_update.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exception_detail.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange_key.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange_key_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/exchange_key_update.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/execution_ids.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/futures_trading_action.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/futures_trading_action_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/log_level.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/margin_mode.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/market_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/notification.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/notification_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/notification_update.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/order.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/order_status.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/post_futures_action.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/spot_trading_action_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/tpsl.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/tpsl_create.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/models/trading_action_type.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn/trade/client/py.typed +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/dependency_links.txt +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/entry_points.txt +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/crypticorn.egg-info/top_level.txt +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/dev.txt +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/requirements/extra.txt +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/setup.cfg +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/favicon.svg +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/logo.svg +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/pip-structure.drawio +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/static/pip-structure.svg +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_auth_client.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_enums.py +0 -0
- {crypticorn-2.16.0 → crypticorn-2.17.0rc2}/tests/test_errors.py +0 -0
@@ -1,6 +1,39 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v2.17.0-rc.2 (2025-06-05)
|
5
|
+
|
6
|
+
### Documentation
|
7
|
+
|
8
|
+
- Document SyncClient support
|
9
|
+
([`8935d22`](https://github.com/crypticorn-ai/api-client/commit/8935d221afe6cb6da2529a05341e104b98bb9fbb))
|
10
|
+
|
11
|
+
### Features
|
12
|
+
|
13
|
+
- Add support for pagination, sorting and filtering query parameters
|
14
|
+
([`3afcf2b`](https://github.com/crypticorn-ai/api-client/commit/3afcf2bb8eff65a1c38c738f19e7480550f91798))
|
15
|
+
|
16
|
+
- Add support for synchronous usage with `SyncClient`. Both API clients are compatible with each
|
17
|
+
other.
|
18
|
+
([`02e7622`](https://github.com/crypticorn-ai/api-client/commit/02e7622669bd590a853b12c9aa10183db06a73f1))
|
19
|
+
|
20
|
+
- Deprecate ApiClient for Async and SyncClient
|
21
|
+
([`a00b450`](https://github.com/crypticorn-ai/api-client/commit/a00b4502197fb2287aca893042d197d5f9811076))
|
22
|
+
|
23
|
+
### Testing
|
24
|
+
|
25
|
+
- Improve tests for pagination query params
|
26
|
+
([`de1f82a`](https://github.com/crypticorn-ai/api-client/commit/de1f82ae6f5461e172459ec4558dd29c0b2646ad))
|
27
|
+
|
28
|
+
|
29
|
+
## v2.17.0-rc.1 (2025-06-01)
|
30
|
+
|
31
|
+
### Features
|
32
|
+
|
33
|
+
- Add metrics router
|
34
|
+
([`9b4a9bd`](https://github.com/crypticorn-ai/api-client/commit/9b4a9bd33e16d70d4338f7d458e2d405cb1d22dd))
|
35
|
+
|
36
|
+
|
4
37
|
## v2.16.0 (2025-05-31)
|
5
38
|
|
6
39
|
### Features
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: crypticorn
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.17.0rc2
|
4
4
|
Summary: Maximise Your Crypto Trading Profits with Machine Learning
|
5
5
|
Author-email: Crypticorn <timon@crypticorn.com>
|
6
6
|
License-Expression: MIT
|
@@ -25,6 +25,8 @@ Requires-Dist: click<9.0.0,>=8.0.0
|
|
25
25
|
Requires-Dist: psutil<8.0.0,>=7.0.0
|
26
26
|
Requires-Dist: setuptools<81.0.0,>=80.0.0
|
27
27
|
Requires-Dist: strenum
|
28
|
+
Requires-Dist: prometheus-client<1.0.0,>=0.22.0
|
29
|
+
Requires-Dist: asgiref<4.0.0,>=3.6.0
|
28
30
|
Requires-Dist: urllib3<3.0.0,>=1.25.3
|
29
31
|
Requires-Dist: python_dateutil<3.0.0,>=2.8.2
|
30
32
|
Requires-Dist: aiohttp<4.0.0,>=3.8.4
|
@@ -49,6 +51,7 @@ Requires-Dist: pytest-asyncio==0.26.0; extra == "test"
|
|
49
51
|
Requires-Dist: pytest-cov==6.1.1; extra == "test"
|
50
52
|
Requires-Dist: python-dotenv==1.0.1; extra == "test"
|
51
53
|
Requires-Dist: PyJWT==2.10.0; extra == "test"
|
54
|
+
Requires-Dist: httpx>=0.27.0; extra == "test"
|
52
55
|
Provides-Extra: extra
|
53
56
|
Requires-Dist: pandas<3.0.0,>=2.2.0; extra == "extra"
|
54
57
|
Dynamic: license-file
|
@@ -78,11 +81,15 @@ You can install extra dependencies grouped in the extras `extra`, `dev` (develop
|
|
78
81
|
|
79
82
|
## Structure
|
80
83
|
|
81
|
-
Our API is available as an asynchronous Python SDK. The main entry
|
84
|
+
Our API is available as both an asynchronous and synchronous Python SDK. The main entry points are:
|
85
|
+
|
86
|
+
- `AsyncClient` - Asynchronous client for async/await usage
|
87
|
+
- `SyncClient` - Synchronous client for traditional blocking calls
|
88
|
+
|
82
89
|
```python
|
83
|
-
from crypticorn import
|
90
|
+
from crypticorn import AsyncClient, SyncClient
|
84
91
|
```
|
85
|
-
|
92
|
+
Both clients serve as the central interface for API operations and instantiate multiple API wrappers corresponding to our micro services. These are structured the following:
|
86
93
|
|
87
94
|
<img src="static/pip-structure.svg" alt="pip package structure" />
|
88
95
|
|
@@ -110,20 +117,22 @@ There are scopes which don't follow this structure. Those are either scopes that
|
|
110
117
|
|
111
118
|
## Basic Usage
|
112
119
|
|
113
|
-
|
120
|
+
### Asynchronous Client
|
121
|
+
|
122
|
+
You can use the async client with the context manager protocol...
|
114
123
|
```python
|
115
|
-
async with
|
116
|
-
|
124
|
+
async with AsyncClient(api_key="your-api-key") as client:
|
125
|
+
await client.pay.products.get_products()
|
117
126
|
```
|
118
127
|
...or without it like this...
|
119
128
|
```python
|
120
|
-
client =
|
121
|
-
asyncio.run(client.pay.
|
129
|
+
client = AsyncClient(api_key="your-api-key")
|
130
|
+
asyncio.run(client.pay.products.get_products())
|
122
131
|
asyncio.run(client.close())
|
123
132
|
```
|
124
133
|
...or this.
|
125
134
|
```python
|
126
|
-
client =
|
135
|
+
client = AsyncClient(api_key="your-api-key")
|
127
136
|
|
128
137
|
async def main():
|
129
138
|
await client.pay.products.get_products()
|
@@ -132,6 +141,29 @@ asyncio.run(main())
|
|
132
141
|
asyncio.run(client.close())
|
133
142
|
```
|
134
143
|
|
144
|
+
### Synchronous Client
|
145
|
+
|
146
|
+
For traditional synchronous usage without async/await, use the `SyncClient`:
|
147
|
+
|
148
|
+
```python
|
149
|
+
from crypticorn import SyncClient
|
150
|
+
|
151
|
+
# With context manager (recommended)
|
152
|
+
with SyncClient(api_key="your-api-key") as client:
|
153
|
+
products = client.pay.products.get_products()
|
154
|
+
status = client.trade.status.ping()
|
155
|
+
|
156
|
+
# Or without context manager
|
157
|
+
client = SyncClient(api_key="your-api-key")
|
158
|
+
try:
|
159
|
+
products = client.pay.products.get_products()
|
160
|
+
status = client.trade.status.ping()
|
161
|
+
finally:
|
162
|
+
client.close() # Manual cleanup required
|
163
|
+
```
|
164
|
+
|
165
|
+
The sync client provides the same API surface as the async client, but all methods return results directly instead of coroutines. Under the hood, it uses `asgiref.async_to_sync` to bridge async operations to synchronous calls, ensuring reliable operation without requiring async/await syntax.
|
166
|
+
|
135
167
|
## Response Types
|
136
168
|
|
137
169
|
There are three different available output formats you can choose from:
|
@@ -139,7 +171,10 @@ There are three different available output formats you can choose from:
|
|
139
171
|
### Serialized Response
|
140
172
|
You can get fully serialized responses as pydantic models. Using this, you get the full benefits of pydantic's type checking.
|
141
173
|
```python
|
174
|
+
# Async client
|
142
175
|
res = await client.pay.products.get_products()
|
176
|
+
# Sync client
|
177
|
+
res = client.pay.products.get_products()
|
143
178
|
print(res)
|
144
179
|
```
|
145
180
|
The output would look like this:
|
@@ -149,7 +184,10 @@ The output would look like this:
|
|
149
184
|
|
150
185
|
### Serialized Response with HTTP Info
|
151
186
|
```python
|
187
|
+
# Async client
|
152
188
|
res = await client.pay.products.get_products_with_http_info()
|
189
|
+
# Sync client
|
190
|
+
res = client.pay.products.get_products_with_http_info()
|
153
191
|
print(res)
|
154
192
|
```
|
155
193
|
The output would look like this:
|
@@ -170,8 +208,12 @@ print(res.headers)
|
|
170
208
|
### JSON Response
|
171
209
|
You can receive a classical JSON response by suffixing the function name with `_without_preload_content`
|
172
210
|
```python
|
211
|
+
# Async client
|
173
212
|
response = await client.pay.products.get_products_without_preload_content()
|
174
213
|
print(await response.json())
|
214
|
+
|
215
|
+
# Sync client - Note: use regular methods instead as response.json() returns a coroutine
|
216
|
+
response = client.pay.products.get_products_without_preload_content()
|
175
217
|
```
|
176
218
|
The output would look like this:
|
177
219
|
```python
|
@@ -201,33 +243,34 @@ To override e.g. the host for the Hive client to connect to localhost:8000 inste
|
|
201
243
|
from crypticorn.hive import Configuration as HiveConfig
|
202
244
|
from crypticorn.common import Service
|
203
245
|
|
204
|
-
|
246
|
+
# Async client
|
247
|
+
async with AsyncClient() as client:
|
248
|
+
client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
|
249
|
+
|
250
|
+
# Sync client
|
251
|
+
with SyncClient() as client:
|
205
252
|
client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
|
206
253
|
```
|
207
254
|
|
208
255
|
### Session Management
|
209
256
|
|
210
|
-
By default, `
|
257
|
+
By default, `AsyncClient` manages a single shared `aiohttp.ClientSession` for all service wrappers.
|
211
258
|
However, you can pass your own pre-configured `aiohttp.ClientSession` if you need advanced control — for example, to add retries, custom headers, logging, or mocking behavior.
|
212
259
|
|
213
260
|
When you inject a custom session, you are responsible for managing its lifecycle, including closing when you're done.
|
214
261
|
|
215
262
|
```python
|
216
263
|
import aiohttp
|
217
|
-
from crypticorn import
|
264
|
+
from crypticorn import AsyncClient
|
218
265
|
|
219
266
|
async def main():
|
220
267
|
custom_session = aiohttp.ClientSession()
|
221
|
-
async with
|
268
|
+
async with AsyncClient(api_key="your-key", http_client=custom_session) as client:
|
222
269
|
await client.trade.status.ping()
|
223
270
|
await custom_session.close()
|
224
|
-
|
225
|
-
custom_session = aiohttp.ClientSession()
|
226
|
-
client = ApiClient(api_key="your-key", http_client=custom_session)
|
227
|
-
await client.trade.status.ping()
|
228
|
-
await custom_session.close()
|
271
|
+
|
229
272
|
```
|
230
|
-
If you don’t pass a session, `
|
273
|
+
If you don’t pass a session, `AsyncClient` will create and manage one internally. In that case, it will be automatically closed when using `async with` or when calling `await client.close()` manually.
|
231
274
|
|
232
275
|
### Disable Logging
|
233
276
|
|
@@ -237,3 +280,5 @@ In case you don't want any logging statements by the `crypticorn` logger to be l
|
|
237
280
|
from crypticorn.common import disable_logging
|
238
281
|
disable_logging()
|
239
282
|
```
|
283
|
+
|
284
|
+
**Note on Sync Client**: The `SyncClient` uses per-operation sessions (creates and closes a session for each API call) to ensure reliable synchronous behavior. Custom sessions are accepted but not used. This approach prevents event loop conflicts at the cost of slightly higher overhead per operation.
|
@@ -23,11 +23,15 @@ You can install extra dependencies grouped in the extras `extra`, `dev` (develop
|
|
23
23
|
|
24
24
|
## Structure
|
25
25
|
|
26
|
-
Our API is available as an asynchronous Python SDK. The main entry
|
26
|
+
Our API is available as both an asynchronous and synchronous Python SDK. The main entry points are:
|
27
|
+
|
28
|
+
- `AsyncClient` - Asynchronous client for async/await usage
|
29
|
+
- `SyncClient` - Synchronous client for traditional blocking calls
|
30
|
+
|
27
31
|
```python
|
28
|
-
from crypticorn import
|
32
|
+
from crypticorn import AsyncClient, SyncClient
|
29
33
|
```
|
30
|
-
|
34
|
+
Both clients serve as the central interface for API operations and instantiate multiple API wrappers corresponding to our micro services. These are structured the following:
|
31
35
|
|
32
36
|
<img src="static/pip-structure.svg" alt="pip package structure" />
|
33
37
|
|
@@ -55,20 +59,22 @@ There are scopes which don't follow this structure. Those are either scopes that
|
|
55
59
|
|
56
60
|
## Basic Usage
|
57
61
|
|
58
|
-
|
62
|
+
### Asynchronous Client
|
63
|
+
|
64
|
+
You can use the async client with the context manager protocol...
|
59
65
|
```python
|
60
|
-
async with
|
61
|
-
|
66
|
+
async with AsyncClient(api_key="your-api-key") as client:
|
67
|
+
await client.pay.products.get_products()
|
62
68
|
```
|
63
69
|
...or without it like this...
|
64
70
|
```python
|
65
|
-
client =
|
66
|
-
asyncio.run(client.pay.
|
71
|
+
client = AsyncClient(api_key="your-api-key")
|
72
|
+
asyncio.run(client.pay.products.get_products())
|
67
73
|
asyncio.run(client.close())
|
68
74
|
```
|
69
75
|
...or this.
|
70
76
|
```python
|
71
|
-
client =
|
77
|
+
client = AsyncClient(api_key="your-api-key")
|
72
78
|
|
73
79
|
async def main():
|
74
80
|
await client.pay.products.get_products()
|
@@ -77,6 +83,29 @@ asyncio.run(main())
|
|
77
83
|
asyncio.run(client.close())
|
78
84
|
```
|
79
85
|
|
86
|
+
### Synchronous Client
|
87
|
+
|
88
|
+
For traditional synchronous usage without async/await, use the `SyncClient`:
|
89
|
+
|
90
|
+
```python
|
91
|
+
from crypticorn import SyncClient
|
92
|
+
|
93
|
+
# With context manager (recommended)
|
94
|
+
with SyncClient(api_key="your-api-key") as client:
|
95
|
+
products = client.pay.products.get_products()
|
96
|
+
status = client.trade.status.ping()
|
97
|
+
|
98
|
+
# Or without context manager
|
99
|
+
client = SyncClient(api_key="your-api-key")
|
100
|
+
try:
|
101
|
+
products = client.pay.products.get_products()
|
102
|
+
status = client.trade.status.ping()
|
103
|
+
finally:
|
104
|
+
client.close() # Manual cleanup required
|
105
|
+
```
|
106
|
+
|
107
|
+
The sync client provides the same API surface as the async client, but all methods return results directly instead of coroutines. Under the hood, it uses `asgiref.async_to_sync` to bridge async operations to synchronous calls, ensuring reliable operation without requiring async/await syntax.
|
108
|
+
|
80
109
|
## Response Types
|
81
110
|
|
82
111
|
There are three different available output formats you can choose from:
|
@@ -84,7 +113,10 @@ There are three different available output formats you can choose from:
|
|
84
113
|
### Serialized Response
|
85
114
|
You can get fully serialized responses as pydantic models. Using this, you get the full benefits of pydantic's type checking.
|
86
115
|
```python
|
116
|
+
# Async client
|
87
117
|
res = await client.pay.products.get_products()
|
118
|
+
# Sync client
|
119
|
+
res = client.pay.products.get_products()
|
88
120
|
print(res)
|
89
121
|
```
|
90
122
|
The output would look like this:
|
@@ -94,7 +126,10 @@ The output would look like this:
|
|
94
126
|
|
95
127
|
### Serialized Response with HTTP Info
|
96
128
|
```python
|
129
|
+
# Async client
|
97
130
|
res = await client.pay.products.get_products_with_http_info()
|
131
|
+
# Sync client
|
132
|
+
res = client.pay.products.get_products_with_http_info()
|
98
133
|
print(res)
|
99
134
|
```
|
100
135
|
The output would look like this:
|
@@ -115,8 +150,12 @@ print(res.headers)
|
|
115
150
|
### JSON Response
|
116
151
|
You can receive a classical JSON response by suffixing the function name with `_without_preload_content`
|
117
152
|
```python
|
153
|
+
# Async client
|
118
154
|
response = await client.pay.products.get_products_without_preload_content()
|
119
155
|
print(await response.json())
|
156
|
+
|
157
|
+
# Sync client - Note: use regular methods instead as response.json() returns a coroutine
|
158
|
+
response = client.pay.products.get_products_without_preload_content()
|
120
159
|
```
|
121
160
|
The output would look like this:
|
122
161
|
```python
|
@@ -146,33 +185,34 @@ To override e.g. the host for the Hive client to connect to localhost:8000 inste
|
|
146
185
|
from crypticorn.hive import Configuration as HiveConfig
|
147
186
|
from crypticorn.common import Service
|
148
187
|
|
149
|
-
|
188
|
+
# Async client
|
189
|
+
async with AsyncClient() as client:
|
190
|
+
client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
|
191
|
+
|
192
|
+
# Sync client
|
193
|
+
with SyncClient() as client:
|
150
194
|
client.configure(config=HiveConfig(host="http://localhost:8000"), service=Service.HIVE)
|
151
195
|
```
|
152
196
|
|
153
197
|
### Session Management
|
154
198
|
|
155
|
-
By default, `
|
199
|
+
By default, `AsyncClient` manages a single shared `aiohttp.ClientSession` for all service wrappers.
|
156
200
|
However, you can pass your own pre-configured `aiohttp.ClientSession` if you need advanced control — for example, to add retries, custom headers, logging, or mocking behavior.
|
157
201
|
|
158
202
|
When you inject a custom session, you are responsible for managing its lifecycle, including closing when you're done.
|
159
203
|
|
160
204
|
```python
|
161
205
|
import aiohttp
|
162
|
-
from crypticorn import
|
206
|
+
from crypticorn import AsyncClient
|
163
207
|
|
164
208
|
async def main():
|
165
209
|
custom_session = aiohttp.ClientSession()
|
166
|
-
async with
|
210
|
+
async with AsyncClient(api_key="your-key", http_client=custom_session) as client:
|
167
211
|
await client.trade.status.ping()
|
168
212
|
await custom_session.close()
|
169
|
-
|
170
|
-
custom_session = aiohttp.ClientSession()
|
171
|
-
client = ApiClient(api_key="your-key", http_client=custom_session)
|
172
|
-
await client.trade.status.ping()
|
173
|
-
await custom_session.close()
|
213
|
+
|
174
214
|
```
|
175
|
-
If you don’t pass a session, `
|
215
|
+
If you don’t pass a session, `AsyncClient` will create and manage one internally. In that case, it will be automatically closed when using `async with` or when calling `await client.close()` manually.
|
176
216
|
|
177
217
|
### Disable Logging
|
178
218
|
|
@@ -181,4 +221,6 @@ In case you don't want any logging statements by the `crypticorn` logger to be l
|
|
181
221
|
```python
|
182
222
|
from crypticorn.common import disable_logging
|
183
223
|
disable_logging()
|
184
|
-
```
|
224
|
+
```
|
225
|
+
|
226
|
+
**Note on Sync Client**: The `SyncClient` uses per-operation sessions (creates and closes a session for each API call) to ensure reliable synchronous behavior. Custom sessions are accepted but not used. This approach prevents event loop conflicts at the cost of slightly higher overhead per operation.
|
@@ -14,6 +14,6 @@ warnings.filterwarnings("default", "", DeprecationWarning)
|
|
14
14
|
configure_logging()
|
15
15
|
logging.captureWarnings(True)
|
16
16
|
|
17
|
-
from crypticorn.client import ApiClient
|
17
|
+
from crypticorn.client import AsyncClient, SyncClient, ApiClient
|
18
18
|
|
19
|
-
__all__ = ["ApiClient"]
|
19
|
+
__all__ = ["AsyncClient", "SyncClient", "ApiClient"]
|