uipath 2.0.54__tar.gz → 2.0.56__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.0.54 → uipath-2.0.56}/PKG-INFO +1 -1
- uipath-2.0.56/docs/core/attachments.md +86 -0
- uipath-2.0.56/docs/core/traced.md +121 -0
- uipath-2.0.56/docs/overrides/partials/actions.html +6 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/stylesheets/extra.css +14 -1
- {uipath-2.0.54 → uipath-2.0.56}/mkdocs.yml +1 -0
- {uipath-2.0.54 → uipath-2.0.56}/pyproject.toml +1 -1
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/_auth_server.py +5 -16
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/auth_config.json +2 -2
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_runtime/_logging.py +1 -1
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_auth.py +2 -2
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_run.py +2 -2
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/__init__.py +2 -0
- uipath-2.0.56/src/uipath/_services/attachments_service.py +595 -0
- uipath-2.0.56/src/uipath/_services/jobs_service.py +521 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_uipath.py +5 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_url.py +18 -1
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/__init__.py +2 -0
- uipath-2.0.56/src/uipath/models/attachment.py +28 -0
- uipath-2.0.56/tests/cli/conftest.py +42 -0
- uipath-2.0.56/tests/cli/mocks/simple_script.py +25 -0
- uipath-2.0.56/tests/cli/mocks/uipath-simple-script-mock.json +41 -0
- uipath-2.0.56/tests/cli/test_invoke.py +168 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/test_publish.py +9 -13
- uipath-2.0.56/tests/cli/test_run.py +231 -0
- uipath-2.0.56/tests/conftest.py +44 -0
- uipath-2.0.56/tests/sdk/services/test_attachments_service.py +533 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_jobs_service.py +204 -0
- {uipath-2.0.54 → uipath-2.0.56}/uv.lock +1699 -1697
- uipath-2.0.54/src/uipath/_services/jobs_service.py +0 -267
- uipath-2.0.54/tests/conftest.py +0 -69
- {uipath-2.0.54 → uipath-2.0.56}/.cursorrules +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.editorconfig +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.gitattributes +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/build.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/cd.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/ci.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/lint.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/slack.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.github/workflows/test.yml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.gitignore +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.pre-commit-config.yaml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.python-version +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.vscode/extensions.json +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/.vscode/settings.json +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/CONTRIBUTING.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/LICENSE +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/README.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/FAQ.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/assets/favicon.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/assets/logo-light.svg +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/cli/index.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/actions.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/assets.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/buckets.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/connections.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/context_grounding.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/environment_variables.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/getting_started.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/jobs.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/processes.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/core/queues.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/hooks.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/javascripts/extra.js +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/langchain/chat_models.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/langchain/context_grounding.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/langchain/human_in_the_loop.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/docs/release_policy.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/justfile +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/py.typed +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/__init__.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/README.md +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_config.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_execution_context.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_folder_context.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/actions.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/assets.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/buckets.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/connections.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/errors.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/job.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/processes.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/models/queues.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/py.typed +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/__init__.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/test_init.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/test_new.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/test_pack.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/test_config.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/tests/tracing/test_traced.py +0 -0
- {uipath-2.0.54 → uipath-2.0.56}/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.0.
|
|
3
|
+
Version: 2.0.56
|
|
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
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Attachments Service
|
|
2
|
+
|
|
3
|
+
The `AttachmentsService` provides methods to upload, download, and delete attachments in UiPath Orchestrator. Attachments are files that can be associated with jobs, processes, or other entities, and are managed via the Orchestrator API.
|
|
4
|
+
|
|
5
|
+
> **Reference:** [UiPath Orchestrator Attachments API](https://docs.uipath.com/orchestrator/reference/api-attachments)
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
- Upload files or in-memory content as attachments
|
|
9
|
+
- Download attachments to local files
|
|
10
|
+
- Delete attachments
|
|
11
|
+
- Both synchronous and asynchronous methods
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
### Instantiating the Service
|
|
16
|
+
|
|
17
|
+
The `AttachmentsService` is available as a property on the main `UiPath` client:
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
from uipath import UiPath
|
|
21
|
+
|
|
22
|
+
client = UiPath()
|
|
23
|
+
attachments = client.attachments
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Uploading an Attachment
|
|
27
|
+
|
|
28
|
+
You can upload a file from disk or from memory:
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
# Upload from file
|
|
32
|
+
attachment_key = client.attachments.upload(
|
|
33
|
+
name="document.pdf",
|
|
34
|
+
source_path="/path/to/document.pdf",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Upload from memory
|
|
38
|
+
attachment_key = client.attachments.upload(
|
|
39
|
+
name="notes.txt",
|
|
40
|
+
content="Some text content",
|
|
41
|
+
)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### Async Example
|
|
45
|
+
```python
|
|
46
|
+
attachment_key = await client.attachments.upload_async(
|
|
47
|
+
name="notes.txt",
|
|
48
|
+
content="Some text content",
|
|
49
|
+
)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Downloading an Attachment
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
attachment_name = client.attachments.download(
|
|
56
|
+
key=attachment_key,
|
|
57
|
+
destination_path="/path/to/save/document.pdf",
|
|
58
|
+
)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### Async Example
|
|
62
|
+
```python
|
|
63
|
+
attachment_name = await client.attachments.download_async(
|
|
64
|
+
key=attachment_key,
|
|
65
|
+
destination_path="/path/to/save/document.pdf",
|
|
66
|
+
)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Deleting an Attachment
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
client.attachments.delete(key=attachment_key)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
#### Async Example
|
|
76
|
+
```python
|
|
77
|
+
await client.attachments.delete_async(key=attachment_key)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Error Handling
|
|
81
|
+
|
|
82
|
+
All methods raise exceptions on failure. See the SDK error handling documentation for details.
|
|
83
|
+
|
|
84
|
+
## See Also
|
|
85
|
+
- [UiPath Orchestrator Attachments API](https://docs.uipath.com/orchestrator/reference/api-attachments)
|
|
86
|
+
- [Jobs Service](./jobs.md) for listing attachments associated with jobs.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Tracing
|
|
2
|
+
|
|
3
|
+
The `traced()` decorator enables automatic tracing of function calls, inputs, and outputs. It is designed to help you monitor, debug, and audit your code by capturing detailed information about function executions, including arguments, return values, and exceptions.
|
|
4
|
+
|
|
5
|
+
You can view the traces of an Orchestrator job by going to the Jobs page, click a job, a side panel will open, and they will be available under the `Trace` tab. These can also be seen in UiPath Maestro when your agent is part of a larger process orchestration.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
Apply the `@traced()` decorator to any function (sync, async, generator, or async generator) to automatically record its execution as a trace span.
|
|
10
|
+
|
|
11
|
+
```python hl_lines="3 7"
|
|
12
|
+
from uipath.tracing._traced import traced
|
|
13
|
+
|
|
14
|
+
@traced()
|
|
15
|
+
def my_function(x, y):
|
|
16
|
+
return x + y
|
|
17
|
+
|
|
18
|
+
@traced(name="custom_span", run_type="my_type")
|
|
19
|
+
async def my_async_function(a, b):
|
|
20
|
+
return a * b
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Parameters
|
|
24
|
+
|
|
25
|
+
| Parameter | Type | Description |
|
|
26
|
+
|------------------|-------------------------------------|---------------------------------------------------------------------------------------------------|
|
|
27
|
+
| name | Optional[str] | Custom name for the trace span. Defaults to the function name. |
|
|
28
|
+
| run_type | Optional[str] | Category for the run (e.g., "uipath"). Useful for filtering traces. |
|
|
29
|
+
| span_type | Optional[str] | Custom type for the span. Defaults to function type (sync/async/generator). |
|
|
30
|
+
| input_processor | Optional[Callable[[dict], dict]] | Function to process/transform inputs before recording. Receives a dict of arguments. |
|
|
31
|
+
| output_processor | Optional[Callable[[Any], Any]] | Function to process/transform outputs before recording. Receives the function's return value. |
|
|
32
|
+
| hide_input | bool | If True, input data is redacted in the trace for privacy/security. |
|
|
33
|
+
| hide_output | bool | If True, output data is redacted in the trace for privacy/security. |
|
|
34
|
+
|
|
35
|
+
## Input and Output Processors
|
|
36
|
+
|
|
37
|
+
Processors allow you to mask, redact, or transform sensitive data before it is recorded in the trace. For example:
|
|
38
|
+
|
|
39
|
+
```python hl_lines="13"
|
|
40
|
+
def mask_inputs(inputs):
|
|
41
|
+
inputs = inputs.copy()
|
|
42
|
+
if 'password' in inputs:
|
|
43
|
+
inputs['password'] = '***REDACTED***'
|
|
44
|
+
return inputs
|
|
45
|
+
|
|
46
|
+
def anonymize_output(output):
|
|
47
|
+
if isinstance(output, dict) and 'email' in output:
|
|
48
|
+
output = output.copy()
|
|
49
|
+
output['email'] = 'anonymous@example.com'
|
|
50
|
+
return output
|
|
51
|
+
|
|
52
|
+
@traced(input_processor=mask_inputs, output_processor=anonymize_output)
|
|
53
|
+
def login(user, password):
|
|
54
|
+
# ...
|
|
55
|
+
return {"email": user + "@example.com"}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Privacy Controls
|
|
59
|
+
|
|
60
|
+
- Set `hide_input=True` to prevent input data from being logged.
|
|
61
|
+
- Set `hide_output=True` to prevent output data from being logged.
|
|
62
|
+
|
|
63
|
+
```python hl_lines="1"
|
|
64
|
+
@traced(hide_input=True, hide_output=True)
|
|
65
|
+
def sensitive_operation(secret):
|
|
66
|
+
...
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Supported Function Types
|
|
70
|
+
|
|
71
|
+
- Regular functions (sync/async)
|
|
72
|
+
- Generator functions (sync/async)
|
|
73
|
+
|
|
74
|
+
## Example with plain python agents
|
|
75
|
+
|
|
76
|
+
When used with plain python agents please call `wait_for_tracers()` at the end of the script to ensure all traces are sent, if this is not called the agent could end without sending all the traces.
|
|
77
|
+
|
|
78
|
+
```python hl_lines="3 8"
|
|
79
|
+
|
|
80
|
+
from uipath.tracing import traced, wait_for_tracers
|
|
81
|
+
|
|
82
|
+
@traced(name="process_payment", run_type="payment", hide_input=True)
|
|
83
|
+
def process_payment(card_number, amount):
|
|
84
|
+
# Sensitive input will not be logged
|
|
85
|
+
return {"status": "success", "amount": amount}
|
|
86
|
+
|
|
87
|
+
@traced()
|
|
88
|
+
def main():
|
|
89
|
+
process_payment()
|
|
90
|
+
|
|
91
|
+
def main_wait_traces():
|
|
92
|
+
try:
|
|
93
|
+
main()
|
|
94
|
+
finally:
|
|
95
|
+
# this needs to be called after the last `traced` function is done
|
|
96
|
+
# to ensure the trace associated with main is saved
|
|
97
|
+
wait_for_tracers()
|
|
98
|
+
|
|
99
|
+
if __name__ == "__main__":
|
|
100
|
+
main_wait_traces()
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## Example with langchain agents
|
|
105
|
+
|
|
106
|
+
When using `uipath-langchain` there is no need to call wait_for_tracers our framework will ensure that is called.
|
|
107
|
+
|
|
108
|
+
```python hl_lines="1"
|
|
109
|
+
@traced()
|
|
110
|
+
def my_custom_traced_function(input: str) -> str:
|
|
111
|
+
return { "x": "some-output" }
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
You can also use `@traceable()` attribute from langchain, but we recommend using `@traced()` attribute instead.
|
|
115
|
+
|
|
116
|
+
```python hl_lines="1"
|
|
117
|
+
@traceable()
|
|
118
|
+
# @traced() ---> do not use both at the same time or it will duplicate spans.
|
|
119
|
+
def my_custom_traced_function(input: str) -> str:
|
|
120
|
+
return { "x": "some-output" }
|
|
121
|
+
```
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{% set title = ("[" + (page.title or config.site_name) + "] Your title here") | urlencode %}
|
|
2
|
+
{% set body = ("Page link:: " + config.site_url + page.url + "\n\n ## My Issue/Suggestion") | urlencode %}
|
|
3
|
+
<a href="https://github.com/UiPath/uipath-python/issues/new?title={{ title }}&body={{ body }}"
|
|
4
|
+
class="md-content__button skip-link-icon report-issue-link">
|
|
5
|
+
Report an issue
|
|
6
|
+
</a>
|
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
color: #182027 !important;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
.report-issue-link {
|
|
22
|
+
color: #182027 !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
.md-nav__item--section {
|
|
22
26
|
&:after {
|
|
23
27
|
background-color: #182027 !important;
|
|
@@ -51,6 +55,10 @@
|
|
|
51
55
|
color: #ffffff !important;
|
|
52
56
|
}
|
|
53
57
|
|
|
58
|
+
.report-issue-link {
|
|
59
|
+
color: #ffffff !important;
|
|
60
|
+
}
|
|
61
|
+
|
|
54
62
|
.md-nav__item--section {
|
|
55
63
|
&:after {
|
|
56
64
|
background-color: #ffffff !important;
|
|
@@ -77,7 +85,7 @@
|
|
|
77
85
|
opacity: 1 !important;
|
|
78
86
|
}
|
|
79
87
|
|
|
80
|
-
a[href^="https://"]:not(.md-source) {
|
|
88
|
+
a[href^="https://"]:not(.md-source):not(.skip-link-icon) {
|
|
81
89
|
&::after {
|
|
82
90
|
content: "↗";
|
|
83
91
|
font-size: 1em;
|
|
@@ -139,4 +147,9 @@ a[href^="https://"]:not(.md-source) {
|
|
|
139
147
|
width: 25%;
|
|
140
148
|
}
|
|
141
149
|
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.report-issue-link {
|
|
153
|
+
text-decoration: underline;
|
|
154
|
+
text-decoration-style: wavy;
|
|
142
155
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "uipath"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.56"
|
|
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"
|
|
@@ -2,7 +2,6 @@ import http.server
|
|
|
2
2
|
import json
|
|
3
3
|
import os
|
|
4
4
|
import socketserver
|
|
5
|
-
import ssl
|
|
6
5
|
import time
|
|
7
6
|
|
|
8
7
|
import click
|
|
@@ -109,19 +108,15 @@ def make_request_handler_class(state, code_verifier, token_callback, domain):
|
|
|
109
108
|
return SimpleHTTPSRequestHandler
|
|
110
109
|
|
|
111
110
|
|
|
112
|
-
class
|
|
113
|
-
def __init__(self, port=6234
|
|
114
|
-
"""Initialize
|
|
111
|
+
class HTTPServer:
|
|
112
|
+
def __init__(self, port=6234):
|
|
113
|
+
"""Initialize HTTP server with configurable parameters.
|
|
115
114
|
|
|
116
115
|
Args:
|
|
117
116
|
port (int, optional): Port number to run the server on. Defaults to 6234.
|
|
118
|
-
cert_file (str, optional): SSL certificate file. Defaults to "localhost.crt".
|
|
119
|
-
key_file (str, optional): SSL key file. Defaults to "localhost.key".
|
|
120
117
|
"""
|
|
121
118
|
self.current_path = os.path.dirname(os.path.abspath(__file__))
|
|
122
119
|
self.port = port
|
|
123
|
-
self.cert_file = os.path.join(self.current_path, "localhost.crt")
|
|
124
|
-
self.key_file = os.path.join(self.current_path, "localhost.key")
|
|
125
120
|
self.httpd = None
|
|
126
121
|
self.token_data = None
|
|
127
122
|
self.should_shutdown = False
|
|
@@ -136,7 +131,7 @@ class HTTPSServer:
|
|
|
136
131
|
self.should_shutdown = True
|
|
137
132
|
|
|
138
133
|
def create_server(self, state, code_verifier, domain):
|
|
139
|
-
"""Create and configure the
|
|
134
|
+
"""Create and configure the HTTP server.
|
|
140
135
|
|
|
141
136
|
Args:
|
|
142
137
|
state (str): The OAuth state parameter.
|
|
@@ -144,20 +139,14 @@ class HTTPSServer:
|
|
|
144
139
|
domain (str): The domain for authentication.
|
|
145
140
|
|
|
146
141
|
Returns:
|
|
147
|
-
socketserver.TCPServer: The configured
|
|
142
|
+
socketserver.TCPServer: The configured HTTP server.
|
|
148
143
|
"""
|
|
149
|
-
# Create SSL context
|
|
150
|
-
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
|
151
|
-
context.load_cert_chain(self.cert_file, self.key_file)
|
|
152
|
-
|
|
153
144
|
# Create server with address reuse
|
|
154
145
|
socketserver.TCPServer.allow_reuse_address = True
|
|
155
146
|
handler = make_request_handler_class(
|
|
156
147
|
state, code_verifier, self.token_received_callback, domain
|
|
157
148
|
)
|
|
158
149
|
self.httpd = socketserver.TCPServer(("", self.port), handler)
|
|
159
|
-
self.httpd.socket = context.wrap_socket(self.httpd.socket, server_side=True)
|
|
160
|
-
|
|
161
150
|
return self.httpd
|
|
162
151
|
|
|
163
152
|
def start(self, state, code_verifier, domain):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"client_id": "36dea5b8-e8bb-423d-8e7b-c808df8f1c00",
|
|
3
|
-
"redirect_uri": "
|
|
3
|
+
"redirect_uri": "http://localhost:__PY_REPLACE_PORT__/oidc/login",
|
|
4
4
|
"scope": "offline_access OrchestratorApiUserAccess ConnectionService DataService DocumentUnderstanding EnterpriseContextService Directory JamJamApi LLMGateway LLMOps OMS RCS.FolderAuthorization",
|
|
5
5
|
"port": 8104
|
|
6
|
-
}
|
|
6
|
+
}
|
|
@@ -68,7 +68,7 @@ class LogsInterceptor:
|
|
|
68
68
|
else:
|
|
69
69
|
# Use stdout handler when not running as a job
|
|
70
70
|
self.log_handler = logging.StreamHandler(sys.stdout)
|
|
71
|
-
formatter = logging.Formatter("
|
|
71
|
+
formatter = logging.Formatter("%(message)s")
|
|
72
72
|
self.log_handler.setFormatter(formatter)
|
|
73
73
|
|
|
74
74
|
self.log_handler.setLevel(self.numeric_min_level)
|
|
@@ -8,7 +8,7 @@ import click
|
|
|
8
8
|
from dotenv import load_dotenv
|
|
9
9
|
|
|
10
10
|
from ..telemetry import track
|
|
11
|
-
from ._auth._auth_server import
|
|
11
|
+
from ._auth._auth_server import HTTPServer
|
|
12
12
|
from ._auth._oidc_utils import get_auth_config, get_auth_url
|
|
13
13
|
from ._auth._portal_service import PortalService, select_tenant
|
|
14
14
|
from ._auth._utils import update_auth_file, update_env_file
|
|
@@ -97,7 +97,7 @@ def auth(domain, force: None | bool = False):
|
|
|
97
97
|
auth_url,
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
-
server =
|
|
100
|
+
server = HTTPServer(port=auth_config["port"])
|
|
101
101
|
token_data = server.start(state, code_verifier, domain)
|
|
102
102
|
|
|
103
103
|
if token_data:
|
|
@@ -42,14 +42,14 @@ def python_run_middleware(
|
|
|
42
42
|
if not entrypoint:
|
|
43
43
|
return MiddlewareResult(
|
|
44
44
|
should_continue=False,
|
|
45
|
-
|
|
45
|
+
error_message="""No entrypoint specified. Please provide a path to a Python script.
|
|
46
46
|
Usage: `uipath run <entrypoint_path> <input_arguments> [-f <input_json_file_path>]`""",
|
|
47
47
|
)
|
|
48
48
|
|
|
49
49
|
if not os.path.exists(entrypoint):
|
|
50
50
|
return MiddlewareResult(
|
|
51
51
|
should_continue=False,
|
|
52
|
-
error_message=f"""
|
|
52
|
+
error_message=f"""Script not found at path {entrypoint}.
|
|
53
53
|
Usage: `uipath run <entrypoint_path> <input_arguments> [-f <input_json_file_path>]`""",
|
|
54
54
|
)
|
|
55
55
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .actions_service import ActionsService
|
|
2
2
|
from .api_client import ApiClient
|
|
3
3
|
from .assets_service import AssetsService
|
|
4
|
+
from .attachments_service import AttachmentsService
|
|
4
5
|
from .buckets_service import BucketsService
|
|
5
6
|
from .connections_service import ConnectionsService
|
|
6
7
|
from .context_grounding_service import ContextGroundingService
|
|
@@ -13,6 +14,7 @@ from .queues_service import QueuesService
|
|
|
13
14
|
__all__ = [
|
|
14
15
|
"ActionsService",
|
|
15
16
|
"AssetsService",
|
|
17
|
+
"AttachmentsService",
|
|
16
18
|
"BucketsService",
|
|
17
19
|
"ConnectionsService",
|
|
18
20
|
"ContextGroundingService",
|