scalekit-sdk-python 2.12.0__tar.gz → 2.13.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.
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/PKG-INFO +13 -13
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/_version.py +1 -1
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/actions.py +18 -3
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/common/exceptions.py +79 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/core.py +9 -1
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit_sdk_python.egg-info/PKG-INFO +13 -13
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit_sdk_python.egg-info/SOURCES.txt +1 -0
- scalekit_sdk_python-2.13.0/scalekit_sdk_python.egg-info/requires.txt +16 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/setup.py +12 -12
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_actions.py +1 -1
- scalekit_sdk_python-2.13.0/tests/test_sk819_retry_behavior.py +442 -0
- scalekit_sdk_python-2.12.0/scalekit_sdk_python.egg-info/requires.txt +0 -16
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/LICENSE +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/README.md +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/expression_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/expression_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/expression_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/priv/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/priv/private_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/priv/private_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/priv/private_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/validate_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/validate_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/buf/validate/validate_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/pyproject.toml +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/frameworks/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/frameworks/google_adk.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/frameworks/langchain.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/frameworks/types/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/frameworks/types/google_adk_tool.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/frameworks/util.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/custom_provider.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/mcp_config.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/mcp_connection_auth_state.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/mcp_instance.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/create_connected_account_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/create_custom_provider_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/delete_custom_provider_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/list_providers_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/mcp_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/tool_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/update_connected_account_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/requests/update_custom_provider_request.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/create_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/create_custom_provider_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/create_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/create_mcp_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/create_mcp_session_token_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/delete_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/delete_custom_provider_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/delete_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/delete_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/ensure_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/execute_tool_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/get_connected_account_auth_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/get_mcp_instance_auth_state_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/get_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/get_mcp_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/list_connected_accounts_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/list_mcp_configs_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/list_mcp_connected_accounts_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/list_mcp_instances_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/list_providers_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/magic_link_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/update_connected_account_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/update_custom_provider_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/update_mcp_config_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/update_mcp_instance_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/responses/verify_connected_account_user_response.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/tool_input_output.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/models/tool_mapping.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/modifier.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/actions/types.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/auth.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/client.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/common/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/common/scalekit.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/common/user.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/connected_accounts.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/connection.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/constants/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/constants/user.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/directory.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/domain.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/m2m_client.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/mcp.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/organization.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/passwordless.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/permissions.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/providers.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/role.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/sessions.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/token.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/tools.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/users.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/utils/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/utils/directory.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/agentkit_logs_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auditlogs/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auditlogs/auditlogs_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auditlogs/auditlogs_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auditlogs/auditlogs_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/auth_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/auth_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/auth_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/passwordless_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/passwordless_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/passwordless_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/totp_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/totp_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/totp_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/webauthn_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/webauthn_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/auth/webauthn_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/clients/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/clients/clients_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/clients/clients_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/clients/clients_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/commons/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/commons/commons_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/commons/commons_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/commons/commons_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connected_accounts/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connected_accounts/connected_accounts_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connections/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connections/connections_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connections/connections_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/connections/connections_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/directories/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/directories/directories_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/directories/directories_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/directories/directories_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/domains/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/domains/domains_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/domains/domains_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/domains/domains_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/emails/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/emails/emails_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/emails/emails_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/emails/emails_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/environments/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/environments/environments_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/environments/environments_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/environments/environments_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/errdetails/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/errdetails/errdetails_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/errdetails/errdetails_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/errdetails/errdetails_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/events/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/events/events_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/events/events_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/events/events_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/interceptors/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/interceptors/interceptors_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/interceptors/interceptors_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/interceptors/interceptors_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/keys/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/keys/keys_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/keys/keys_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/keys/keys_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/mcp/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/mcp/mcp_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/mcp/mcp_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/mcp/mcp_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/members/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/members/members_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/members/members_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/members/members_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/migrations/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/migrations/migrations_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/migrations/migrations_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/migrations/migrations_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/options/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/options/options_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/options/options_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/options/options_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/organizations/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/organizations/organizations_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/organizations/organizations_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/organizations/organizations_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/providers/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/providers/providers_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/providers/providers_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/providers/providers_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/roles/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/roles/roles_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/roles/roles_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/roles/roles_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/secrets/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/secrets/secrets_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/secrets/secrets_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/secrets/secrets_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/sessions/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/sessions/sessions_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/sessions/sessions_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/sessions/sessions_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tokens/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tokens/tokens_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tokens/tokens_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tokens/tokens_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tools/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tools/tools_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tools/tools_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/tools/tools_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/user_attributes/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/user_attributes/user_attributes_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/user_attributes/user_attributes_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/user_attributes/user_attributes_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/users/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/users/users_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/users/users_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/users/users_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/webhooks/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/webhooks/webhooks_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/webhooks/webhooks_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/webhooks/webhooks_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/workspaces/__init__.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/workspaces/workspaces_pb2.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/workspaces/workspaces_pb2.pyi +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/v1/workspaces/workspaces_pb2_grpc.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit/webauthn.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit_sdk_python.egg-info/dependency_links.txt +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit_sdk_python.egg-info/top_level.txt +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/setup.cfg +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_connected_accounts.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_connection.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_directory.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_domain.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_m2m_client.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_mcp.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_org_roles.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_organization.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_organization_session_policy.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_organization_slug_logo.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_passwordless.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_permissions.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_providers.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_role_defaults_dependent.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_roles.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_sessions.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_tokens.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_tools.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_user_roles_permissions.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_users.py +0 -0
- {scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/tests/test_webauthn_credentials.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scalekit-sdk-python
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.13.0
|
|
4
4
|
Summary: Scalekit official Python SDK
|
|
5
5
|
Home-page: https://github.com/scalekit-inc/scalekit-sdk-python
|
|
6
6
|
Author: Team Scalekit
|
|
@@ -11,22 +11,22 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
11
11
|
Classifier: Operating System :: OS Independent
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: grpcio
|
|
15
|
-
Requires-Dist: protobuf<
|
|
14
|
+
Requires-Dist: grpcio<2.0,>=1.81.0
|
|
15
|
+
Requires-Dist: protobuf<8.0.0,>=5.29.5
|
|
16
16
|
Requires-Dist: google>=3.0
|
|
17
|
-
Requires-Dist: requests>=2.
|
|
18
|
-
Requires-Dist: PyJWT>=2.
|
|
17
|
+
Requires-Dist: requests>=2.34.0
|
|
18
|
+
Requires-Dist: PyJWT>=2.13.0
|
|
19
19
|
Requires-Dist: cffi>=1.15.1
|
|
20
|
-
Requires-Dist: cryptography<
|
|
21
|
-
Requires-Dist: setuptools<
|
|
22
|
-
Requires-Dist: grpcio-status<
|
|
20
|
+
Requires-Dist: cryptography<49,>=46.0.6
|
|
21
|
+
Requires-Dist: setuptools<83.0,>=82.0.1
|
|
22
|
+
Requires-Dist: grpcio-status<2.0,>=1.81.0
|
|
23
23
|
Requires-Dist: protoc-gen-openapiv2>=0.0.1
|
|
24
|
-
Requires-Dist: googleapis-common-protos>=1.
|
|
24
|
+
Requires-Dist: googleapis-common-protos>=1.75.0
|
|
25
25
|
Requires-Dist: deprecation>=2.1.0
|
|
26
|
-
Requires-Dist: python-dotenv
|
|
27
|
-
Requires-Dist: Faker
|
|
28
|
-
Requires-Dist: pydantic>=2.
|
|
29
|
-
Requires-Dist: mcp>=1.
|
|
26
|
+
Requires-Dist: python-dotenv<2.0,>=1.2.2
|
|
27
|
+
Requires-Dist: Faker<41.0,>=33.0.0
|
|
28
|
+
Requires-Dist: pydantic>=2.13.4
|
|
29
|
+
Requires-Dist: mcp>=1.27.2
|
|
30
30
|
Dynamic: author
|
|
31
31
|
Dynamic: author-email
|
|
32
32
|
Dynamic: classifier
|
|
@@ -791,10 +791,22 @@ class ActionClient:
|
|
|
791
791
|
organization_id=organization_id,
|
|
792
792
|
user_id=user_id
|
|
793
793
|
)
|
|
794
|
-
|
|
795
|
-
#
|
|
794
|
+
|
|
795
|
+
# True upsert: if credentials were supplied, apply them regardless of
|
|
796
|
+
# the account's current status (PENDING_AUTH, ACTIVE, EXPIRED, DISCONNECTED).
|
|
797
|
+
if authorization_details:
|
|
798
|
+
update_response = self.update_connected_account(
|
|
799
|
+
connection_name=connection_name,
|
|
800
|
+
identifier=identifier,
|
|
801
|
+
authorization_details=authorization_details,
|
|
802
|
+
organization_id=organization_id,
|
|
803
|
+
user_id=user_id,
|
|
804
|
+
api_config=api_config
|
|
805
|
+
)
|
|
806
|
+
return CreateConnectedAccountResponse(connected_account=update_response.connected_account)
|
|
807
|
+
|
|
796
808
|
return CreateConnectedAccountResponse(connected_account=existing_response.connected_account)
|
|
797
|
-
|
|
809
|
+
|
|
798
810
|
except ScalekitNotFoundException:
|
|
799
811
|
# Connected account doesn't exist, create a new one
|
|
800
812
|
return self.create_connected_account(
|
|
@@ -806,6 +818,9 @@ class ActionClient:
|
|
|
806
818
|
api_config=api_config
|
|
807
819
|
)
|
|
808
820
|
|
|
821
|
+
#: Alias for :meth:`get_or_create_connected_account` — preferred name for upsert semantics.
|
|
822
|
+
upsert_connected_account = get_or_create_connected_account
|
|
823
|
+
|
|
809
824
|
def update_connected_account(
|
|
810
825
|
self,
|
|
811
826
|
connection_name: str,
|
|
@@ -103,11 +103,41 @@ class ScalekitServerException(ScalekitException):
|
|
|
103
103
|
if not self._error_code:
|
|
104
104
|
self._error_code = info.error_code
|
|
105
105
|
|
|
106
|
+
@staticmethod
|
|
107
|
+
def _extract_error_code(error: grpc.RpcError) -> str | None:
|
|
108
|
+
""" Extract error_code from gRPC trailing metadata without constructing a full exception """
|
|
109
|
+
from grpc_status import rpc_status
|
|
110
|
+
try:
|
|
111
|
+
status = rpc_status.from_call(error)
|
|
112
|
+
if status is None:
|
|
113
|
+
return None
|
|
114
|
+
for detail in status.details:
|
|
115
|
+
info = ErrorInfo()
|
|
116
|
+
detail.Unpack(info)
|
|
117
|
+
if info.error_code:
|
|
118
|
+
return info.error_code
|
|
119
|
+
except Exception:
|
|
120
|
+
pass
|
|
121
|
+
return None
|
|
122
|
+
|
|
106
123
|
@staticmethod
|
|
107
124
|
def promote(error: Response | grpc.RpcError):
|
|
108
125
|
""" Promote a ScalekitServerException (Response or RpcError) to a specific error type """
|
|
109
126
|
grpc_status = HTTP_TO_GRPC.get(error.status_code) if isinstance(error, Response) else error.code()
|
|
110
127
|
|
|
128
|
+
# Check for upstream provider errors signaled by error_code == "TOOL_ERROR"
|
|
129
|
+
if isinstance(error, grpc.RpcError):
|
|
130
|
+
error_code = ScalekitServerException._extract_error_code(error)
|
|
131
|
+
if error_code == "TOOL_ERROR":
|
|
132
|
+
if grpc_status == StatusCode.RESOURCE_EXHAUSTED:
|
|
133
|
+
return ScalekitToolRateLimitException(error)
|
|
134
|
+
elif grpc_status == StatusCode.UNAUTHENTICATED:
|
|
135
|
+
return ScalekitToolUnauthorizedException(error)
|
|
136
|
+
elif grpc_status == StatusCode.PERMISSION_DENIED:
|
|
137
|
+
return ScalekitToolForbiddenException(error)
|
|
138
|
+
else:
|
|
139
|
+
return ScalekitToolException(error)
|
|
140
|
+
|
|
111
141
|
if grpc_status == StatusCode.INVALID_ARGUMENT:
|
|
112
142
|
return ScalekitBadRequestException(error)
|
|
113
143
|
elif grpc_status == StatusCode.FAILED_PRECONDITION:
|
|
@@ -258,3 +288,52 @@ class ScalekitCancelledException(ScalekitServerException):
|
|
|
258
288
|
class ScalekitUnknownException(ScalekitServerException):
|
|
259
289
|
def __init__(self, error: Response | grpc.RpcError):
|
|
260
290
|
super().__init__(error)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
class ScalekitToolException(ScalekitServerException):
|
|
294
|
+
""" Base class for upstream provider tool errors (error_code == 'TOOL_ERROR') """
|
|
295
|
+
def __init__(self, error: Response | grpc.RpcError):
|
|
296
|
+
super().__init__(error)
|
|
297
|
+
# Extract ToolErrorInfo from the unpacked ErrorInfo details
|
|
298
|
+
self._tool_error_code = None
|
|
299
|
+
self._tool_error_message = None
|
|
300
|
+
self._execution_id = None
|
|
301
|
+
for info in self._unpacked_details:
|
|
302
|
+
if info.HasField("tool_error_info"):
|
|
303
|
+
self._tool_error_code = info.tool_error_info.tool_error_code or None
|
|
304
|
+
self._tool_error_message = info.tool_error_info.tool_error_message or None
|
|
305
|
+
self._execution_id = info.tool_error_info.execution_id or None
|
|
306
|
+
break
|
|
307
|
+
|
|
308
|
+
@property
|
|
309
|
+
def tool_error_code(self):
|
|
310
|
+
""" Provider-specific error code from tool execution """
|
|
311
|
+
return self._tool_error_code
|
|
312
|
+
|
|
313
|
+
@property
|
|
314
|
+
def tool_error_message(self):
|
|
315
|
+
""" Provider-specific error message from tool execution """
|
|
316
|
+
return self._tool_error_message
|
|
317
|
+
|
|
318
|
+
@property
|
|
319
|
+
def execution_id(self):
|
|
320
|
+
""" Execution ID for the tool call that failed """
|
|
321
|
+
return self._execution_id
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
class ScalekitToolRateLimitException(ScalekitToolException, ScalekitTooManyRequestsException):
|
|
325
|
+
""" Provider returned 429/rate-limit during tool execution """
|
|
326
|
+
def __init__(self, error: Response | grpc.RpcError):
|
|
327
|
+
ScalekitToolException.__init__(self, error)
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
class ScalekitToolUnauthorizedException(ScalekitToolException, ScalekitUnauthorizedException):
|
|
331
|
+
""" Provider returned 401/unauthorized during tool execution """
|
|
332
|
+
def __init__(self, error: Response | grpc.RpcError):
|
|
333
|
+
ScalekitToolException.__init__(self, error)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
class ScalekitToolForbiddenException(ScalekitToolException, ScalekitForbiddenException):
|
|
337
|
+
""" Provider returned 403/forbidden during tool execution """
|
|
338
|
+
def __init__(self, error: Response | grpc.RpcError):
|
|
339
|
+
ScalekitToolException.__init__(self, error)
|
|
@@ -10,7 +10,7 @@ from urllib.parse import urlparse
|
|
|
10
10
|
from cryptography.hazmat.primitives import serialization
|
|
11
11
|
from scalekit._version import __version__ as _sdk_version
|
|
12
12
|
from scalekit.common.scalekit import GrantType
|
|
13
|
-
from scalekit.common.exceptions import ScalekitServerException, ScalekitException
|
|
13
|
+
from scalekit.common.exceptions import ScalekitServerException, ScalekitException, ScalekitTooManyRequestsException
|
|
14
14
|
|
|
15
15
|
TRequest = TypeVar("TRequest")
|
|
16
16
|
TResponse = TypeVar("TResponse")
|
|
@@ -163,6 +163,11 @@ class CoreClient:
|
|
|
163
163
|
)
|
|
164
164
|
return resp
|
|
165
165
|
except grpc.RpcError as exp:
|
|
166
|
+
# Check for upstream provider errors first — never retry, never refresh M2M
|
|
167
|
+
error_code = ScalekitServerException._extract_error_code(exp)
|
|
168
|
+
if error_code == "TOOL_ERROR":
|
|
169
|
+
raise ScalekitServerException.promote(exp)
|
|
170
|
+
|
|
166
171
|
if exp.code() == grpc.StatusCode.UNAUTHENTICATED:
|
|
167
172
|
if retry <= 0:
|
|
168
173
|
raise ScalekitServerException.promote(exp)
|
|
@@ -171,6 +176,9 @@ class CoreClient:
|
|
|
171
176
|
return self.grpc_exec(func, data, retry=retry-1)
|
|
172
177
|
except Exception as refresh_exp:
|
|
173
178
|
raise ScalekitServerException.promote(exp)
|
|
179
|
+
elif exp.code() == grpc.StatusCode.RESOURCE_EXHAUSTED:
|
|
180
|
+
# Surface Scalekit rate-limits immediately — retrying triples the damage
|
|
181
|
+
raise ScalekitServerException.promote(exp)
|
|
174
182
|
elif retry > 0:
|
|
175
183
|
return self.grpc_exec(func, data, retry=retry - 1)
|
|
176
184
|
else:
|
{scalekit_sdk_python-2.12.0 → scalekit_sdk_python-2.13.0}/scalekit_sdk_python.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scalekit-sdk-python
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.13.0
|
|
4
4
|
Summary: Scalekit official Python SDK
|
|
5
5
|
Home-page: https://github.com/scalekit-inc/scalekit-sdk-python
|
|
6
6
|
Author: Team Scalekit
|
|
@@ -11,22 +11,22 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
11
11
|
Classifier: Operating System :: OS Independent
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: grpcio
|
|
15
|
-
Requires-Dist: protobuf<
|
|
14
|
+
Requires-Dist: grpcio<2.0,>=1.81.0
|
|
15
|
+
Requires-Dist: protobuf<8.0.0,>=5.29.5
|
|
16
16
|
Requires-Dist: google>=3.0
|
|
17
|
-
Requires-Dist: requests>=2.
|
|
18
|
-
Requires-Dist: PyJWT>=2.
|
|
17
|
+
Requires-Dist: requests>=2.34.0
|
|
18
|
+
Requires-Dist: PyJWT>=2.13.0
|
|
19
19
|
Requires-Dist: cffi>=1.15.1
|
|
20
|
-
Requires-Dist: cryptography<
|
|
21
|
-
Requires-Dist: setuptools<
|
|
22
|
-
Requires-Dist: grpcio-status<
|
|
20
|
+
Requires-Dist: cryptography<49,>=46.0.6
|
|
21
|
+
Requires-Dist: setuptools<83.0,>=82.0.1
|
|
22
|
+
Requires-Dist: grpcio-status<2.0,>=1.81.0
|
|
23
23
|
Requires-Dist: protoc-gen-openapiv2>=0.0.1
|
|
24
|
-
Requires-Dist: googleapis-common-protos>=1.
|
|
24
|
+
Requires-Dist: googleapis-common-protos>=1.75.0
|
|
25
25
|
Requires-Dist: deprecation>=2.1.0
|
|
26
|
-
Requires-Dist: python-dotenv
|
|
27
|
-
Requires-Dist: Faker
|
|
28
|
-
Requires-Dist: pydantic>=2.
|
|
29
|
-
Requires-Dist: mcp>=1.
|
|
26
|
+
Requires-Dist: python-dotenv<2.0,>=1.2.2
|
|
27
|
+
Requires-Dist: Faker<41.0,>=33.0.0
|
|
28
|
+
Requires-Dist: pydantic>=2.13.4
|
|
29
|
+
Requires-Dist: mcp>=1.27.2
|
|
30
30
|
Dynamic: author
|
|
31
31
|
Dynamic: author-email
|
|
32
32
|
Dynamic: classifier
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
grpcio<2.0,>=1.81.0
|
|
2
|
+
protobuf<8.0.0,>=5.29.5
|
|
3
|
+
google>=3.0
|
|
4
|
+
requests>=2.34.0
|
|
5
|
+
PyJWT>=2.13.0
|
|
6
|
+
cffi>=1.15.1
|
|
7
|
+
cryptography<49,>=46.0.6
|
|
8
|
+
setuptools<83.0,>=82.0.1
|
|
9
|
+
grpcio-status<2.0,>=1.81.0
|
|
10
|
+
protoc-gen-openapiv2>=0.0.1
|
|
11
|
+
googleapis-common-protos>=1.75.0
|
|
12
|
+
deprecation>=2.1.0
|
|
13
|
+
python-dotenv<2.0,>=1.2.2
|
|
14
|
+
Faker<41.0,>=33.0.0
|
|
15
|
+
pydantic>=2.13.4
|
|
16
|
+
mcp>=1.27.2
|
|
@@ -10,22 +10,22 @@ setup(
|
|
|
10
10
|
version=__version__,
|
|
11
11
|
packages=find_packages(),
|
|
12
12
|
install_requires=[
|
|
13
|
-
"grpcio>=1.
|
|
14
|
-
"protobuf>=5.29.5,<
|
|
13
|
+
"grpcio>=1.81.0,<2.0",
|
|
14
|
+
"protobuf>=5.29.5,<8.0.0",
|
|
15
15
|
"google>=3.0",
|
|
16
|
-
"requests>=2.
|
|
17
|
-
"PyJWT>=2.
|
|
16
|
+
"requests>=2.34.0",
|
|
17
|
+
"PyJWT>=2.13.0",
|
|
18
18
|
"cffi>=1.15.1",
|
|
19
|
-
"cryptography
|
|
20
|
-
"setuptools>=
|
|
21
|
-
"grpcio-status>=1.
|
|
19
|
+
"cryptography>=46.0.6,<49",
|
|
20
|
+
"setuptools>=82.0.1,<83.0",
|
|
21
|
+
"grpcio-status>=1.81.0,<2.0",
|
|
22
22
|
"protoc-gen-openapiv2>=0.0.1",
|
|
23
|
-
"googleapis-common-protos>=1.
|
|
23
|
+
"googleapis-common-protos>=1.75.0",
|
|
24
24
|
"deprecation>=2.1.0",
|
|
25
|
-
"python-dotenv
|
|
26
|
-
"Faker
|
|
27
|
-
"pydantic>=2.
|
|
28
|
-
"mcp>=
|
|
25
|
+
"python-dotenv>=1.2.2,<2.0",
|
|
26
|
+
"Faker>=33.0.0,<41.0",
|
|
27
|
+
"pydantic>=2.13.4",
|
|
28
|
+
"mcp>=1.27.2",
|
|
29
29
|
],
|
|
30
30
|
url="https://github.com/scalekit-inc/scalekit-sdk-python",
|
|
31
31
|
license="MIT",
|
|
@@ -348,7 +348,7 @@ class TestConnect(BaseTest):
|
|
|
348
348
|
"""Method to test execute_tool with connection_name parameter"""
|
|
349
349
|
try:
|
|
350
350
|
result = self.scalekit_client.actions.execute_tool(
|
|
351
|
-
tool_input={"url": "https://docs.apify.com/platform/storage
|
|
351
|
+
tool_input={"url": "https://docs.apify.com/platform/storage"},
|
|
352
352
|
tool_name="c-myapifymcp_fetch-apify-docs",
|
|
353
353
|
identifier="akshay.parihar",
|
|
354
354
|
connection_name="myapifymcp",
|