uipath 2.1.2__tar.gz → 2.1.4__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.
- {uipath-2.1.2 → uipath-2.1.4}/PKG-INFO +1 -1
- {uipath-2.1.2 → uipath-2.1.4}/pyproject.toml +1 -1
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/_auth_server.py +28 -9
- uipath-2.1.4/src/uipath/_cli/_auth/index.html +608 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_auth.py +12 -5
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/middlewares.py +2 -2
- {uipath-2.1.2 → uipath-2.1.4}/uv.lock +842 -843
- uipath-2.1.2/src/uipath/_cli/_auth/index.html +0 -167
- {uipath-2.1.2 → uipath-2.1.4}/.cursorrules +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.editorconfig +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.gitattributes +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.github/workflows/test.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.gitignore +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.python-version +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.vscode/extensions.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.vscode/launch.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/.vscode/settings.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/CONTRIBUTING.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/LICENSE +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/README.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/FAQ.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/assets/favicon.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/cli/index.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/actions.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/assets.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/attachments.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/buckets.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/connections.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/getting_started.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/jobs.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/processes.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/queues.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/core/traced.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/hooks.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/index.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/overrides/main.html +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/release_policy.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/justfile +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/mkdocs.yml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/py.typed +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/scripts/debug_test.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/_client_credentials.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_config.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/job.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/py.typed +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/__init__.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/conftest.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_init.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_new.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_run.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/conftest.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.2 → uipath-2.1.4}/tests/tracing/test_tracing_manager.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: uipath
|
3
|
-
Version: 2.1.
|
3
|
+
Version: 2.1.4
|
4
4
|
Summary: Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools.
|
5
5
|
Project-URL: Homepage, https://uipath.com
|
6
6
|
Project-URL: Repository, https://github.com/UiPath/uipath-python
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "uipath"
|
3
|
-
version = "2.1.
|
3
|
+
version = "2.1.4"
|
4
4
|
description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools."
|
5
5
|
readme = { file = "README.md", content-type = "text/markdown" }
|
6
6
|
requires-python = ">=3.10"
|
@@ -1,10 +1,12 @@
|
|
1
|
+
import asyncio
|
1
2
|
import http.server
|
2
3
|
import json
|
3
4
|
import os
|
4
5
|
import socketserver
|
6
|
+
import threading
|
5
7
|
import time
|
8
|
+
from typing import Optional
|
6
9
|
|
7
|
-
import click
|
8
10
|
from dotenv import load_dotenv
|
9
11
|
|
10
12
|
from ._oidc_utils import get_auth_config
|
@@ -117,9 +119,11 @@ class HTTPServer:
|
|
117
119
|
"""
|
118
120
|
self.current_path = os.path.dirname(os.path.abspath(__file__))
|
119
121
|
self.port = port
|
120
|
-
self.httpd = None
|
122
|
+
self.httpd: Optional[socketserver.TCPServer] = None
|
121
123
|
self.token_data = None
|
122
124
|
self.should_shutdown = False
|
125
|
+
self.token_received_event: Optional[asyncio.Event] = None
|
126
|
+
self.loop = None
|
123
127
|
|
124
128
|
def token_received_callback(self, token_data):
|
125
129
|
"""Callback for when a token is received.
|
@@ -128,7 +132,8 @@ class HTTPServer:
|
|
128
132
|
token_data (dict): The received token data.
|
129
133
|
"""
|
130
134
|
self.token_data = token_data
|
131
|
-
self.
|
135
|
+
if self.token_received_event and self.loop:
|
136
|
+
self.loop.call_soon_threadsafe(self.token_received_event.set)
|
132
137
|
|
133
138
|
def create_server(self, state, code_verifier, domain):
|
134
139
|
"""Create and configure the HTTP server.
|
@@ -149,7 +154,16 @@ class HTTPServer:
|
|
149
154
|
self.httpd = socketserver.TCPServer(("", self.port), handler)
|
150
155
|
return self.httpd
|
151
156
|
|
152
|
-
def
|
157
|
+
def _run_server(self):
|
158
|
+
"""Run server loop in thread."""
|
159
|
+
try:
|
160
|
+
while not self.should_shutdown and self.httpd:
|
161
|
+
self.httpd.handle_request()
|
162
|
+
except Exception:
|
163
|
+
# Server might be closed, that's fine
|
164
|
+
pass
|
165
|
+
|
166
|
+
async def start(self, state, code_verifier, domain):
|
153
167
|
"""Start the server.
|
154
168
|
|
155
169
|
Args:
|
@@ -163,12 +177,16 @@ class HTTPServer:
|
|
163
177
|
if not self.httpd:
|
164
178
|
self.create_server(state, code_verifier, domain)
|
165
179
|
|
180
|
+
self.token_received_event = asyncio.Event()
|
181
|
+
self.loop = asyncio.get_event_loop()
|
182
|
+
|
183
|
+
# Run server in daemon thread
|
184
|
+
server_thread = threading.Thread(target=self._run_server, daemon=True)
|
185
|
+
server_thread.start()
|
186
|
+
|
166
187
|
try:
|
167
|
-
|
168
|
-
|
169
|
-
self.httpd.handle_request()
|
170
|
-
except KeyboardInterrupt:
|
171
|
-
click.echo("Process interrupted by user")
|
188
|
+
# Wait indefinitely for token received event or interrupt
|
189
|
+
await self.token_received_event.wait()
|
172
190
|
finally:
|
173
191
|
self.stop()
|
174
192
|
|
@@ -176,6 +194,7 @@ class HTTPServer:
|
|
176
194
|
|
177
195
|
def stop(self):
|
178
196
|
"""Stop the server gracefully and cleanup resources."""
|
197
|
+
self.should_shutdown = True
|
179
198
|
if self.httpd:
|
180
199
|
self.httpd.server_close()
|
181
200
|
self.httpd = None
|