uipath 2.1.107__tar.gz → 2.1.108__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.
Potentially problematic release.
This version of uipath might be problematic. Click here for more details.
- {uipath-2.1.107 → uipath-2.1.108}/PKG-INFO +1 -1
- {uipath-2.1.107 → uipath-2.1.108}/pyproject.toml +1 -1
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_contracts.py +25 -5
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_resources/SDK_REFERENCE.md +0 -97
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_uipath.py +10 -37
- uipath-2.1.108/tests/sdk/test_uipath_caching.py +326 -0
- {uipath-2.1.107 → uipath-2.1.108}/uv.lock +1 -1
- {uipath-2.1.107 → uipath-2.1.108}/.claude/agents/command-tester.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.claude/commands/prepare-pr.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.cursorrules +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.editorconfig +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.gitattributes +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/labeler.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.github/workflows/test.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.gitignore +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.python-version +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.vscode/extensions.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.vscode/launch.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/.vscode/settings.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/CONTRIBUTING.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/LICENSE +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/README.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/AutomationSuite.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/FAQ.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/assets/favicon.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/assets/llms.txt +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/cli/index.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/actions.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/assets.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/attachments.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/buckets.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/connections.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/documents.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/documents_models.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/getting_started.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/jobs.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/processes.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/queues.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/core/traced.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/hooks.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/index.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/overrides/main.html +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/release_policy.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/justfile +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/mkdocs.yml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/py.typed +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/README.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/evals/evaluators/equality.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/calculator/uipath.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/scripts/debug_test.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/scripts/update_agents_md.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_debug/_bridge.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_debug/_runtime.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_evaluate.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_runtime.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/input_mocker.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_runtime_factory.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_debug.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_eval.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_pull.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/models/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/models/runtime_schema.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_config.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_events/_events.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_resources/CLAUDE.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/guardrails_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/models/evals.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/react/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/react/prompts.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/agent/react/tools.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/guardrails.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/job.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/py.typed +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/src/uipath/utils/dynamic_schema.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/__init__.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/agent/models/test_evals.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/conftest.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/eval/evals/eval-sets/default.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/eval/evals/evaluators/equality.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/eval/mocks/test_mocks.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/eval/test_evaluate.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/models/test_runtime_schema.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_init.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_new.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_oidc_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_push.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_run.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/utils/test_dynamic_schema.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/conftest.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_guardrails_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.107 → uipath-2.1.108}/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.108
|
|
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.108"
|
|
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"
|
|
@@ -460,12 +460,12 @@ class UiPathRuntimeContext(BaseModel):
|
|
|
460
460
|
return instance
|
|
461
461
|
|
|
462
462
|
|
|
463
|
-
class
|
|
463
|
+
class UiPathBaseRuntimeError(Exception):
|
|
464
464
|
"""Base exception class for UiPath runtime errors with structured error information."""
|
|
465
465
|
|
|
466
466
|
def __init__(
|
|
467
467
|
self,
|
|
468
|
-
code:
|
|
468
|
+
code: str,
|
|
469
469
|
title: str,
|
|
470
470
|
detail: str,
|
|
471
471
|
category: UiPathErrorCategory = UiPathErrorCategory.UNKNOWN,
|
|
@@ -484,10 +484,8 @@ class UiPathRuntimeError(Exception):
|
|
|
484
484
|
if status is None:
|
|
485
485
|
status = self._extract_http_status()
|
|
486
486
|
|
|
487
|
-
code_value = code.value
|
|
488
|
-
|
|
489
487
|
self.error_info = UiPathErrorContract(
|
|
490
|
-
code=f"{prefix}.{
|
|
488
|
+
code=f"{prefix}.{code}",
|
|
491
489
|
title=title,
|
|
492
490
|
detail=detail,
|
|
493
491
|
category=category,
|
|
@@ -529,6 +527,28 @@ class UiPathRuntimeError(Exception):
|
|
|
529
527
|
return self.error_info.model_dump()
|
|
530
528
|
|
|
531
529
|
|
|
530
|
+
class UiPathRuntimeError(UiPathBaseRuntimeError):
|
|
531
|
+
"""Exception class for UiPath runtime errors."""
|
|
532
|
+
|
|
533
|
+
def __init__(
|
|
534
|
+
self,
|
|
535
|
+
code: UiPathErrorCode,
|
|
536
|
+
title: str,
|
|
537
|
+
detail: str,
|
|
538
|
+
category: UiPathErrorCategory = UiPathErrorCategory.UNKNOWN,
|
|
539
|
+
prefix: str = "Python",
|
|
540
|
+
include_traceback: bool = True,
|
|
541
|
+
):
|
|
542
|
+
super().__init__(
|
|
543
|
+
code=code.value,
|
|
544
|
+
title=title,
|
|
545
|
+
detail=detail,
|
|
546
|
+
category=category,
|
|
547
|
+
prefix=prefix,
|
|
548
|
+
include_traceback=include_traceback,
|
|
549
|
+
)
|
|
550
|
+
|
|
551
|
+
|
|
532
552
|
class UiPathRuntimeStreamNotSupportedError(NotImplementedError):
|
|
533
553
|
"""Raised when a runtime does not support streaming."""
|
|
534
554
|
|
|
@@ -70,93 +70,6 @@ sdk.assets.update_async(robot_asset: uipath.models.assets.UserAsset, folder_key:
|
|
|
70
70
|
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
### Attachments
|
|
74
|
-
|
|
75
|
-
Attachments service
|
|
76
|
-
|
|
77
|
-
```python
|
|
78
|
-
# Delete an attachment.
|
|
79
|
-
sdk.attachments.delete(key: uuid.UUID, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> None
|
|
80
|
-
|
|
81
|
-
# Delete an attachment asynchronously.
|
|
82
|
-
sdk.attachments.delete_async(key: uuid.UUID, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> None
|
|
83
|
-
|
|
84
|
-
# Download an attachment.
|
|
85
|
-
sdk.attachments.download(key: uuid.UUID, destination_path: str, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> str
|
|
86
|
-
|
|
87
|
-
# Download an attachment asynchronously.
|
|
88
|
-
sdk.attachments.download_async(key: uuid.UUID, destination_path: str, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> str
|
|
89
|
-
|
|
90
|
-
# Upload a file or content to UiPath as an attachment.
|
|
91
|
-
sdk.attachments.upload(name: str, content: Union[str, bytes, NoneType]=None, source_path: Optional[str]=None, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> uuid.UUID
|
|
92
|
-
|
|
93
|
-
# Upload a file or content to UiPath as an attachment asynchronously.
|
|
94
|
-
sdk.attachments.upload_async(name: str, content: Union[str, bytes, NoneType]=None, source_path: Optional[str]=None, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> uuid.UUID
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Buckets
|
|
99
|
-
|
|
100
|
-
Buckets service
|
|
101
|
-
|
|
102
|
-
```python
|
|
103
|
-
# Download a file from a bucket.
|
|
104
|
-
sdk.buckets.download(name: Optional[str]=None, key: Optional[str]=None, blob_file_path: str, destination_path: str, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> None
|
|
105
|
-
|
|
106
|
-
# Download a file from a bucket asynchronously.
|
|
107
|
-
sdk.buckets.download_async(name: Optional[str]=None, key: Optional[str]=None, blob_file_path: str, destination_path: str, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> None
|
|
108
|
-
|
|
109
|
-
# Retrieve bucket information by its name.
|
|
110
|
-
sdk.buckets.retrieve(name: Optional[str]=None, key: Optional[str]=None, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> uipath.models.buckets.Bucket
|
|
111
|
-
|
|
112
|
-
# Asynchronously retrieve bucket information by its name.
|
|
113
|
-
sdk.buckets.retrieve_async(name: Optional[str]=None, key: Optional[str]=None, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> uipath.models.buckets.Bucket
|
|
114
|
-
|
|
115
|
-
# Upload a file to a bucket.
|
|
116
|
-
sdk.buckets.upload(key: Optional[str]=None, name: Optional[str]=None, blob_file_path: str, content_type: Optional[str]=None, source_path: Optional[str]=None, content: Union[str, bytes, NoneType]=None, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> None
|
|
117
|
-
|
|
118
|
-
# Upload a file to a bucket asynchronously.
|
|
119
|
-
sdk.buckets.upload_async(key: Optional[str]=None, name: Optional[str]=None, blob_file_path: str, content_type: Optional[str]=None, source_path: Optional[str]=None, content: Union[str, bytes, NoneType]=None, folder_key: Optional[str]=None, folder_path: Optional[str]=None) -> None
|
|
120
|
-
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Connections
|
|
124
|
-
|
|
125
|
-
Connections service
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
# Lists all connections with optional filtering.
|
|
129
|
-
sdk.connections.list(name: Optional[str]=None, folder_path: Optional[str]=None, folder_key: Optional[str]=None, connector_key: Optional[str]=None, skip: Optional[int]=None, top: Optional[int]=None) -> typing.List[uipath.models.connections.Connection]
|
|
130
|
-
|
|
131
|
-
# Asynchronously lists all connections with optional filtering.
|
|
132
|
-
sdk.connections.list_async(name: Optional[str]=None, folder_path: Optional[str]=None, folder_key: Optional[str]=None, connector_key: Optional[str]=None, skip: Optional[int]=None, top: Optional[int]=None) -> typing.List[uipath.models.connections.Connection]
|
|
133
|
-
|
|
134
|
-
# Synchronously retrieve connection API metadata.
|
|
135
|
-
sdk.connections.metadata(element_instance_id: int, tool_path: str, schema_mode: bool=True) -> uipath.models.connections.ConnectionMetadata
|
|
136
|
-
|
|
137
|
-
# Asynchronously retrieve connection API metadata.
|
|
138
|
-
sdk.connections.metadata_async(element_instance_id: int, tool_path: str, schema_mode: bool=True) -> uipath.models.connections.ConnectionMetadata
|
|
139
|
-
|
|
140
|
-
# Retrieve connection details by its key.
|
|
141
|
-
sdk.connections.retrieve(key: str) -> uipath.models.connections.Connection
|
|
142
|
-
|
|
143
|
-
# Asynchronously retrieve connection details by its key.
|
|
144
|
-
sdk.connections.retrieve_async(key: str) -> uipath.models.connections.Connection
|
|
145
|
-
|
|
146
|
-
# Retrieve event payload from UiPath Integration Service.
|
|
147
|
-
sdk.connections.retrieve_event_payload(event_args: uipath.models.connections.EventArguments) -> typing.Dict[str, typing.Any]
|
|
148
|
-
|
|
149
|
-
# Retrieve event payload from UiPath Integration Service.
|
|
150
|
-
sdk.connections.retrieve_event_payload_async(event_args: uipath.models.connections.EventArguments) -> typing.Dict[str, typing.Any]
|
|
151
|
-
|
|
152
|
-
# Retrieve an authentication token for a connection.
|
|
153
|
-
sdk.connections.retrieve_token(key: str, token_type: <enum 'ConnectionTokenType="direct") -> uipath.models.connections.ConnectionToken
|
|
154
|
-
|
|
155
|
-
# Asynchronously retrieve an authentication token for a connection.
|
|
156
|
-
sdk.connections.retrieve_token_async(key: str, token_type: <enum 'ConnectionTokenType="direct") -> uipath.models.connections.ConnectionToken
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
|
|
160
73
|
### Context Grounding
|
|
161
74
|
|
|
162
75
|
Context Grounding service
|
|
@@ -274,16 +187,6 @@ sdk.entities.update_records_async(entity_key: str, records: List[Any], schema: O
|
|
|
274
187
|
|
|
275
188
|
```
|
|
276
189
|
|
|
277
|
-
### Folders
|
|
278
|
-
|
|
279
|
-
Folders service
|
|
280
|
-
|
|
281
|
-
```python
|
|
282
|
-
# Retrieve the folder key by folder path with pagination support.
|
|
283
|
-
sdk.folders.retrieve_key(folder_path: str) -> typing.Optional[str]
|
|
284
|
-
|
|
285
|
-
```
|
|
286
|
-
|
|
287
190
|
### Jobs
|
|
288
191
|
|
|
289
192
|
Jobs service
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from functools import cached_property
|
|
1
2
|
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from pydantic import ValidationError
|
|
@@ -51,10 +52,6 @@ class UiPath:
|
|
|
51
52
|
raise BaseUrlMissingError() from e
|
|
52
53
|
elif error["loc"][0] == "secret":
|
|
53
54
|
raise SecretMissingError() from e
|
|
54
|
-
self._folders_service: Optional[FolderService] = None
|
|
55
|
-
self._buckets_service: Optional[BucketsService] = None
|
|
56
|
-
self._attachments_service: Optional[AttachmentsService] = None
|
|
57
|
-
self._connections_service: Optional[ConnectionsService] = None
|
|
58
55
|
setup_logging(should_debug=debug)
|
|
59
56
|
self._execution_context = ExecutionContext()
|
|
60
57
|
|
|
@@ -66,13 +63,9 @@ class UiPath:
|
|
|
66
63
|
def assets(self) -> AssetsService:
|
|
67
64
|
return AssetsService(self._config, self._execution_context)
|
|
68
65
|
|
|
69
|
-
@
|
|
66
|
+
@cached_property
|
|
70
67
|
def attachments(self) -> AttachmentsService:
|
|
71
|
-
|
|
72
|
-
self._attachments_service = AttachmentsService(
|
|
73
|
-
self._config, self._execution_context
|
|
74
|
-
)
|
|
75
|
-
return self._attachments_service
|
|
68
|
+
return AttachmentsService(self._config, self._execution_context)
|
|
76
69
|
|
|
77
70
|
@property
|
|
78
71
|
def processes(self) -> ProcessesService:
|
|
@@ -82,39 +75,21 @@ class UiPath:
|
|
|
82
75
|
def actions(self) -> ActionsService:
|
|
83
76
|
return ActionsService(self._config, self._execution_context)
|
|
84
77
|
|
|
85
|
-
@
|
|
78
|
+
@cached_property
|
|
86
79
|
def buckets(self) -> BucketsService:
|
|
87
|
-
if not self._buckets_service:
|
|
88
|
-
self._buckets_service = BucketsService(
|
|
89
|
-
self._config, self._execution_context
|
|
90
|
-
)
|
|
91
80
|
return BucketsService(self._config, self._execution_context)
|
|
92
81
|
|
|
93
|
-
@
|
|
82
|
+
@cached_property
|
|
94
83
|
def connections(self) -> ConnectionsService:
|
|
95
|
-
|
|
96
|
-
if not self._folders_service:
|
|
97
|
-
self._folders_service = FolderService(
|
|
98
|
-
self._config, self._execution_context
|
|
99
|
-
)
|
|
100
|
-
self._connections_service = ConnectionsService(
|
|
101
|
-
self._config, self._execution_context, self._folders_service
|
|
102
|
-
)
|
|
103
|
-
return self._connections_service
|
|
84
|
+
return ConnectionsService(self._config, self._execution_context, self.folders)
|
|
104
85
|
|
|
105
86
|
@property
|
|
106
87
|
def context_grounding(self) -> ContextGroundingService:
|
|
107
|
-
if not self._folders_service:
|
|
108
|
-
self._folders_service = FolderService(self._config, self._execution_context)
|
|
109
|
-
if not self._buckets_service:
|
|
110
|
-
self._buckets_service = BucketsService(
|
|
111
|
-
self._config, self._execution_context
|
|
112
|
-
)
|
|
113
88
|
return ContextGroundingService(
|
|
114
89
|
self._config,
|
|
115
90
|
self._execution_context,
|
|
116
|
-
self.
|
|
117
|
-
self.
|
|
91
|
+
self.folders,
|
|
92
|
+
self.buckets,
|
|
118
93
|
)
|
|
119
94
|
|
|
120
95
|
@property
|
|
@@ -129,11 +104,9 @@ class UiPath:
|
|
|
129
104
|
def jobs(self) -> JobsService:
|
|
130
105
|
return JobsService(self._config, self._execution_context)
|
|
131
106
|
|
|
132
|
-
@
|
|
107
|
+
@cached_property
|
|
133
108
|
def folders(self) -> FolderService:
|
|
134
|
-
|
|
135
|
-
self._folders_service = FolderService(self._config, self._execution_context)
|
|
136
|
-
return self._folders_service
|
|
109
|
+
return FolderService(self._config, self._execution_context)
|
|
137
110
|
|
|
138
111
|
@property
|
|
139
112
|
def llm_openai(self) -> UiPathOpenAIService:
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"""Tests for service caching behavior in UiPath SDK.
|
|
2
|
+
|
|
3
|
+
This module tests that services using @cached_property are properly cached
|
|
4
|
+
and thread-safe, while stateless services create new instances as expected.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import threading
|
|
8
|
+
import time
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import pytest
|
|
12
|
+
from pytest import MonkeyPatch
|
|
13
|
+
|
|
14
|
+
from uipath import UiPath
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@pytest.fixture
|
|
18
|
+
def sdk(monkeypatch: MonkeyPatch) -> UiPath:
|
|
19
|
+
"""Create a UiPath SDK instance with mocked credentials."""
|
|
20
|
+
monkeypatch.setenv("UIPATH_URL", "https://test.example.com")
|
|
21
|
+
monkeypatch.setenv("UIPATH_ACCESS_TOKEN", "test_token_1234567890")
|
|
22
|
+
return UiPath()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TestCachedServices:
|
|
26
|
+
"""Test suite for services that should be cached."""
|
|
27
|
+
|
|
28
|
+
def test_buckets_service_returns_cached_instance(self, sdk: UiPath) -> None:
|
|
29
|
+
"""Verify that buckets property returns the same instance on multiple accesses."""
|
|
30
|
+
buckets1 = sdk.buckets
|
|
31
|
+
buckets2 = sdk.buckets
|
|
32
|
+
|
|
33
|
+
assert buckets1 is buckets2, "BucketsService should return cached instance"
|
|
34
|
+
assert id(buckets1) == id(buckets2), "Instance IDs should match"
|
|
35
|
+
|
|
36
|
+
def test_attachments_service_returns_cached_instance(self, sdk: UiPath) -> None:
|
|
37
|
+
"""Verify that attachments property returns the same instance."""
|
|
38
|
+
attachments1 = sdk.attachments
|
|
39
|
+
attachments2 = sdk.attachments
|
|
40
|
+
|
|
41
|
+
assert attachments1 is attachments2, (
|
|
42
|
+
"AttachmentsService should return cached instance"
|
|
43
|
+
)
|
|
44
|
+
assert id(attachments1) == id(attachments2), "Instance IDs should match"
|
|
45
|
+
|
|
46
|
+
def test_connections_service_returns_cached_instance(self, sdk: UiPath) -> None:
|
|
47
|
+
"""Verify that connections property returns the same instance."""
|
|
48
|
+
connections1 = sdk.connections
|
|
49
|
+
connections2 = sdk.connections
|
|
50
|
+
|
|
51
|
+
assert connections1 is connections2, (
|
|
52
|
+
"ConnectionsService should return cached instance"
|
|
53
|
+
)
|
|
54
|
+
assert id(connections1) == id(connections2), "Instance IDs should match"
|
|
55
|
+
|
|
56
|
+
def test_folders_service_returns_cached_instance(self, sdk: UiPath) -> None:
|
|
57
|
+
"""Verify that folders property returns the same instance."""
|
|
58
|
+
folders1 = sdk.folders
|
|
59
|
+
folders2 = sdk.folders
|
|
60
|
+
|
|
61
|
+
assert folders1 is folders2, "FolderService should return cached instance"
|
|
62
|
+
assert id(folders1) == id(folders2), "Instance IDs should match"
|
|
63
|
+
|
|
64
|
+
@pytest.mark.parametrize(
|
|
65
|
+
"service_property",
|
|
66
|
+
[
|
|
67
|
+
"attachments",
|
|
68
|
+
"buckets",
|
|
69
|
+
"connections",
|
|
70
|
+
"folders",
|
|
71
|
+
],
|
|
72
|
+
)
|
|
73
|
+
def test_all_cached_services_return_same_instance(
|
|
74
|
+
self, sdk: UiPath, service_property: str
|
|
75
|
+
) -> None:
|
|
76
|
+
"""Verify that all cached services return the same instance."""
|
|
77
|
+
service1 = getattr(sdk, service_property)
|
|
78
|
+
service2 = getattr(sdk, service_property)
|
|
79
|
+
|
|
80
|
+
assert service1 is service2, f"{service_property} should return cached instance"
|
|
81
|
+
|
|
82
|
+
def test_cached_services_share_config(self, sdk: UiPath) -> None:
|
|
83
|
+
"""Verify that cached instances share the same config object."""
|
|
84
|
+
buckets1 = sdk.buckets
|
|
85
|
+
buckets2 = sdk.buckets
|
|
86
|
+
|
|
87
|
+
assert buckets1._config is buckets2._config, "Config should be shared"
|
|
88
|
+
assert buckets1._execution_context is buckets2._execution_context, (
|
|
89
|
+
"Execution context should be shared"
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
def test_different_sdk_instances_have_different_services(
|
|
93
|
+
self, monkeypatch: MonkeyPatch
|
|
94
|
+
) -> None:
|
|
95
|
+
"""Verify that different SDK instances have different service instances."""
|
|
96
|
+
monkeypatch.setenv("UIPATH_URL", "https://test.example.com")
|
|
97
|
+
monkeypatch.setenv("UIPATH_ACCESS_TOKEN", "test_token_1234567890")
|
|
98
|
+
sdk1 = UiPath()
|
|
99
|
+
sdk2 = UiPath()
|
|
100
|
+
|
|
101
|
+
assert sdk1.buckets is not sdk2.buckets, (
|
|
102
|
+
"Different SDK instances should have different service instances"
|
|
103
|
+
)
|
|
104
|
+
assert sdk1.attachments is not sdk2.attachments, (
|
|
105
|
+
"Different SDK instances should have different service instances"
|
|
106
|
+
)
|
|
107
|
+
assert sdk1.connections is not sdk2.connections, (
|
|
108
|
+
"Different SDK instances should have different service instances"
|
|
109
|
+
)
|
|
110
|
+
assert sdk1.folders is not sdk2.folders, (
|
|
111
|
+
"Different SDK instances should have different service instances"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class TestThreadSafety:
|
|
116
|
+
"""Test suite for thread safety of cached services."""
|
|
117
|
+
|
|
118
|
+
def test_buckets_service_thread_safe_initialization(self, sdk: UiPath) -> None:
|
|
119
|
+
"""Verify that cached_property handles concurrent access safely."""
|
|
120
|
+
instances: list[Any] = []
|
|
121
|
+
|
|
122
|
+
def access_service() -> None:
|
|
123
|
+
# Small delay to increase chance of race condition
|
|
124
|
+
time.sleep(0.001)
|
|
125
|
+
instances.append(sdk.buckets)
|
|
126
|
+
|
|
127
|
+
# Create 10 threads accessing the service simultaneously
|
|
128
|
+
threads = [threading.Thread(target=access_service) for _ in range(10)]
|
|
129
|
+
|
|
130
|
+
for thread in threads:
|
|
131
|
+
thread.start()
|
|
132
|
+
|
|
133
|
+
for thread in threads:
|
|
134
|
+
thread.join()
|
|
135
|
+
|
|
136
|
+
# All threads should get the same instance
|
|
137
|
+
assert len(set(id(instance) for instance in instances)) == 1, (
|
|
138
|
+
"All threads should receive the same cached instance"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
for instance in instances[1:]:
|
|
142
|
+
assert instances[0] is instance, "All instances should be identical"
|
|
143
|
+
|
|
144
|
+
def test_attachments_service_thread_safe_initialization(self, sdk: UiPath) -> None:
|
|
145
|
+
"""Verify attachments service thread safety."""
|
|
146
|
+
instances: list[Any] = []
|
|
147
|
+
|
|
148
|
+
def access_service() -> None:
|
|
149
|
+
time.sleep(0.001)
|
|
150
|
+
instances.append(sdk.attachments)
|
|
151
|
+
|
|
152
|
+
threads = [threading.Thread(target=access_service) for _ in range(10)]
|
|
153
|
+
|
|
154
|
+
for thread in threads:
|
|
155
|
+
thread.start()
|
|
156
|
+
for thread in threads:
|
|
157
|
+
thread.join()
|
|
158
|
+
|
|
159
|
+
assert len(set(id(instance) for instance in instances)) == 1
|
|
160
|
+
|
|
161
|
+
def test_connections_service_thread_safe_initialization(self, sdk: UiPath) -> None:
|
|
162
|
+
"""Verify connections service thread safety."""
|
|
163
|
+
instances: list[Any] = []
|
|
164
|
+
|
|
165
|
+
def access_service() -> None:
|
|
166
|
+
time.sleep(0.001)
|
|
167
|
+
instances.append(sdk.connections)
|
|
168
|
+
|
|
169
|
+
threads = [threading.Thread(target=access_service) for _ in range(10)]
|
|
170
|
+
|
|
171
|
+
for thread in threads:
|
|
172
|
+
thread.start()
|
|
173
|
+
for thread in threads:
|
|
174
|
+
thread.join()
|
|
175
|
+
|
|
176
|
+
assert len(set(id(instance) for instance in instances)) == 1
|
|
177
|
+
|
|
178
|
+
def test_folders_service_thread_safe_initialization(self, sdk: UiPath) -> None:
|
|
179
|
+
"""Verify folders service thread safety."""
|
|
180
|
+
instances: list[Any] = []
|
|
181
|
+
|
|
182
|
+
def access_service() -> None:
|
|
183
|
+
time.sleep(0.001)
|
|
184
|
+
instances.append(sdk.folders)
|
|
185
|
+
|
|
186
|
+
threads = [threading.Thread(target=access_service) for _ in range(10)]
|
|
187
|
+
|
|
188
|
+
for thread in threads:
|
|
189
|
+
thread.start()
|
|
190
|
+
for thread in threads:
|
|
191
|
+
thread.join()
|
|
192
|
+
|
|
193
|
+
assert len(set(id(instance) for instance in instances)) == 1
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class TestStatelessServices:
|
|
197
|
+
"""Test suite for services that should NOT be cached."""
|
|
198
|
+
|
|
199
|
+
def test_assets_service_creates_new_instances(self, sdk: UiPath) -> None:
|
|
200
|
+
"""Verify that assets service creates new instances (stateless)."""
|
|
201
|
+
assets1 = sdk.assets
|
|
202
|
+
assets2 = sdk.assets
|
|
203
|
+
|
|
204
|
+
# These should be different instances
|
|
205
|
+
assert assets1 is not assets2, "Assets service should create new instances"
|
|
206
|
+
|
|
207
|
+
def test_actions_service_creates_new_instances(self, sdk: UiPath) -> None:
|
|
208
|
+
"""Verify that actions service creates new instances (stateless)."""
|
|
209
|
+
actions1 = sdk.actions
|
|
210
|
+
actions2 = sdk.actions
|
|
211
|
+
|
|
212
|
+
assert actions1 is not actions2, "Actions service should create new instances"
|
|
213
|
+
|
|
214
|
+
def test_queues_service_creates_new_instances(self, sdk: UiPath) -> None:
|
|
215
|
+
"""Verify that queues service creates new instances (stateless)."""
|
|
216
|
+
queues1 = sdk.queues
|
|
217
|
+
queues2 = sdk.queues
|
|
218
|
+
|
|
219
|
+
assert queues1 is not queues2, "Queues service should create new instances"
|
|
220
|
+
|
|
221
|
+
def test_jobs_service_creates_new_instances(self, sdk: UiPath) -> None:
|
|
222
|
+
"""Verify that jobs service creates new instances (stateless)."""
|
|
223
|
+
jobs1 = sdk.jobs
|
|
224
|
+
jobs2 = sdk.jobs
|
|
225
|
+
|
|
226
|
+
assert jobs1 is not jobs2, "Jobs service should create new instances"
|
|
227
|
+
|
|
228
|
+
@pytest.mark.parametrize(
|
|
229
|
+
"service_property",
|
|
230
|
+
[
|
|
231
|
+
"api_client",
|
|
232
|
+
"assets",
|
|
233
|
+
"actions",
|
|
234
|
+
"processes",
|
|
235
|
+
"queues",
|
|
236
|
+
"jobs",
|
|
237
|
+
"documents",
|
|
238
|
+
"llm_openai",
|
|
239
|
+
"llm",
|
|
240
|
+
"entities",
|
|
241
|
+
],
|
|
242
|
+
)
|
|
243
|
+
def test_stateless_services_create_new_instances(
|
|
244
|
+
self, sdk: UiPath, service_property: str
|
|
245
|
+
) -> None:
|
|
246
|
+
"""Verify that stateless services create new instances."""
|
|
247
|
+
service1 = getattr(sdk, service_property)
|
|
248
|
+
service2 = getattr(sdk, service_property)
|
|
249
|
+
|
|
250
|
+
assert service1 is not service2, (
|
|
251
|
+
f"{service_property} should create new instances"
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
class TestServiceDependencies:
|
|
256
|
+
"""Test suite for services with dependencies on cached services."""
|
|
257
|
+
|
|
258
|
+
def test_connections_uses_cached_folders(self, sdk: UiPath) -> None:
|
|
259
|
+
"""Verify that connections service uses the cached folders service."""
|
|
260
|
+
|
|
261
|
+
# Access connections (which depends on folders)
|
|
262
|
+
_ = sdk.connections
|
|
263
|
+
|
|
264
|
+
# Access folders directly
|
|
265
|
+
folders = sdk.folders
|
|
266
|
+
|
|
267
|
+
# The folders instance used by connections should be the same cached instance
|
|
268
|
+
assert folders is sdk.folders, "Folders should be cached and reused"
|
|
269
|
+
|
|
270
|
+
def test_context_grounding_uses_cached_dependencies(self, sdk: UiPath) -> None:
|
|
271
|
+
"""Verify that context_grounding uses cached folders and buckets."""
|
|
272
|
+
|
|
273
|
+
# Access dependencies first
|
|
274
|
+
folders = sdk.folders
|
|
275
|
+
buckets = sdk.buckets
|
|
276
|
+
|
|
277
|
+
# Access context_grounding (creates new instance but uses cached deps)
|
|
278
|
+
cg1 = sdk.context_grounding
|
|
279
|
+
cg2 = sdk.context_grounding
|
|
280
|
+
|
|
281
|
+
# context_grounding itself is not cached (creates new instances)
|
|
282
|
+
assert cg1 is not cg2, "ContextGroundingService should create new instances"
|
|
283
|
+
|
|
284
|
+
# But it should use the same cached dependencies
|
|
285
|
+
assert folders is sdk.folders, "Folders should remain cached"
|
|
286
|
+
assert buckets is sdk.buckets, "Buckets should remain cached"
|
|
287
|
+
|
|
288
|
+
def test_processes_uses_cached_attachments(self, sdk: UiPath) -> None:
|
|
289
|
+
"""Verify that processes service uses the cached attachments service."""
|
|
290
|
+
|
|
291
|
+
# Access attachments directly
|
|
292
|
+
attachments = sdk.attachments
|
|
293
|
+
|
|
294
|
+
# Access processes (which depends on attachments)
|
|
295
|
+
_ = sdk.processes
|
|
296
|
+
|
|
297
|
+
# Attachments should still be cached
|
|
298
|
+
assert attachments is sdk.attachments, "Attachments should remain cached"
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
class TestCachingBehavior:
|
|
302
|
+
"""Test suite for general caching behavior."""
|
|
303
|
+
|
|
304
|
+
def test_cached_property_attribute_name(self, sdk: UiPath) -> None:
|
|
305
|
+
"""Verify that @cached_property stores values in expected attribute names."""
|
|
306
|
+
|
|
307
|
+
# Access the service
|
|
308
|
+
_ = sdk.buckets
|
|
309
|
+
|
|
310
|
+
# @cached_property stores the value in an attribute with the property name
|
|
311
|
+
assert hasattr(sdk, "buckets"), "Cached value should be stored as attribute"
|
|
312
|
+
|
|
313
|
+
def test_service_initialization_order(self, sdk: UiPath) -> None:
|
|
314
|
+
"""Verify that services can be accessed in any order."""
|
|
315
|
+
|
|
316
|
+
# Access in different order
|
|
317
|
+
connections = sdk.connections # Depends on folders
|
|
318
|
+
folders = sdk.folders
|
|
319
|
+
buckets = sdk.buckets
|
|
320
|
+
attachments = sdk.attachments
|
|
321
|
+
|
|
322
|
+
# All should be cached and reusable
|
|
323
|
+
assert connections is sdk.connections
|
|
324
|
+
assert folders is sdk.folders
|
|
325
|
+
assert buckets is sdk.buckets
|
|
326
|
+
assert attachments is sdk.attachments
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|