uipath 2.0.51__tar.gz → 2.0.53__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.51 → uipath-2.0.53}/.github/workflows/build.yml +11 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/publish-dev.yml +12 -1
- {uipath-2.0.51 → uipath-2.0.53}/PKG-INFO +3 -2
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/getting_started.md +8 -0
- {uipath-2.0.51 → uipath-2.0.53}/pyproject.toml +3 -2
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/_auth_server.py +1 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_auth.py +3 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_deploy.py +2 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_init.py +2 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_invoke.py +3 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_new.py +2 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_pack.py +2 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_publish.py +2 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/cli_run.py +6 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_execution_context.py +1 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_folder_context.py +1 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_uipath.py +1 -1
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/constants.py +2 -0
- uipath-2.0.53/src/uipath/telemetry/__init__.py +3 -0
- uipath-2.0.53/src/uipath/telemetry/_constants.py +16 -0
- uipath-2.0.53/src/uipath/telemetry/_track.py +130 -0
- {uipath-2.0.51 → uipath-2.0.53}/uv.lock +2033 -1586
- {uipath-2.0.51 → uipath-2.0.53}/.cursorrules +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.editorconfig +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.gitattributes +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/cd.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/ci.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/lint.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/slack.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.github/workflows/test.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.gitignore +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.pre-commit-config.yaml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.python-version +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.vscode/extensions.json +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/.vscode/settings.json +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/CONTRIBUTING.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/LICENSE +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/README.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/assets/favicon.png +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/assets/logo-light.svg +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/cli/index.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/actions.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/assets.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/buckets.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/connections.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/context_grounding.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/jobs.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/processes.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/core/queues.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/hooks.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/javascripts/extra.js +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/langchain/chat_models.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/langchain/context_grounding.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/langchain/human_in_the_loop.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/release_policy.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/docs/stylesheets/extra.css +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/justfile +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/mkdocs.yml +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/py.typed +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/README.md +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_config.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/actions.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/assets.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/buckets.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/connections.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/errors.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/job.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/processes.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/models/queues.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/py.typed +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/__init__.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/cli/test_init.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/conftest.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/sdk/test_config.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/tracing/test_traced.py +0 -0
- {uipath-2.0.51 → uipath-2.0.53}/tests/tracing/test_tracing_manager.py +0 -0
|
@@ -26,6 +26,17 @@ jobs:
|
|
|
26
26
|
uv venv
|
|
27
27
|
uv sync --all-extras
|
|
28
28
|
|
|
29
|
+
- name: Replace connection string placeholder
|
|
30
|
+
run: |
|
|
31
|
+
originalfile="src/uipath/telemetry/_constants.py"
|
|
32
|
+
tmpfile=$(mktemp)
|
|
33
|
+
trap 'rm -f "$tmpfile"' EXIT
|
|
34
|
+
|
|
35
|
+
rsync -a --no-whole-file --ignore-existing "$originalfile" "$tmpfile"
|
|
36
|
+
envsubst '$CONNECTION_STRING' < "$originalfile" > "$tmpfile" && mv "$tmpfile" "$originalfile"
|
|
37
|
+
env:
|
|
38
|
+
CONNECTION_STRING: ${{ secrets.APPINS_CONNECTION_STRING }}
|
|
39
|
+
|
|
29
40
|
- name: Build
|
|
30
41
|
run: |
|
|
31
42
|
uv build
|
|
@@ -25,6 +25,17 @@ jobs:
|
|
|
25
25
|
uv venv
|
|
26
26
|
uv sync --all-extras
|
|
27
27
|
|
|
28
|
+
- name: Replace connection string placeholder
|
|
29
|
+
run: |
|
|
30
|
+
originalfile="src/uipath/telemetry/_constants.py"
|
|
31
|
+
tmpfile=$(mktemp)
|
|
32
|
+
trap 'rm -f "$tmpfile"' EXIT
|
|
33
|
+
|
|
34
|
+
rsync -a --no-whole-file --ignore-existing "$originalfile" "$tmpfile"
|
|
35
|
+
envsubst '$CONNECTION_STRING' < "$originalfile" > "$tmpfile" && mv "$tmpfile" "$originalfile"
|
|
36
|
+
env:
|
|
37
|
+
CONNECTION_STRING: ${{ secrets.APPINS_CONNECTION_STRING }}
|
|
38
|
+
|
|
28
39
|
- name: Set development version
|
|
29
40
|
shell: pwsh
|
|
30
41
|
env:
|
|
@@ -116,4 +127,4 @@ jobs:
|
|
|
116
127
|
run: |
|
|
117
128
|
uv publish
|
|
118
129
|
env:
|
|
119
|
-
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
130
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uipath
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.53
|
|
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
|
|
@@ -14,9 +14,10 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Topic :: Software Development :: Build Tools
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
|
+
Requires-Dist: azure-monitor-opentelemetry>=1.6.8
|
|
17
18
|
Requires-Dist: click>=8.1.8
|
|
18
19
|
Requires-Dist: httpx>=0.28.1
|
|
19
|
-
Requires-Dist: opentelemetry-sdk>=1.
|
|
20
|
+
Requires-Dist: opentelemetry-sdk>=1.31.1
|
|
20
21
|
Requires-Dist: pathlib>=1.0.1
|
|
21
22
|
Requires-Dist: pydantic>=2.11.1
|
|
22
23
|
Requires-Dist: python-dotenv>=1.0.1
|
|
@@ -87,6 +87,14 @@ uipath version 2.0.29
|
|
|
87
87
|
|
|
88
88
|
////
|
|
89
89
|
|
|
90
|
+
### Telemetry
|
|
91
|
+
|
|
92
|
+
To help us improve the developer experience, the CLI collects basic usage data about commands invocation. For more details about UiPath’s privacy practices, please review the [privacy statement](https://www.uipath.com/legal/privacy-policy).
|
|
93
|
+
|
|
94
|
+
#### Disabling telemetry data
|
|
95
|
+
|
|
96
|
+
Telemetry is enabled by default, yet it is possible to opt-out by setting to `false` the `UIPATH_TELEMETRY_ENABLED` environment variable.
|
|
97
|
+
|
|
90
98
|
### Authentication
|
|
91
99
|
|
|
92
100
|
To debug your script locally and publish your project, you need to authenticate with UiPath:
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "uipath"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.53"
|
|
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"
|
|
7
7
|
dependencies = [
|
|
8
8
|
"click>=8.1.8",
|
|
9
9
|
"httpx>=0.28.1",
|
|
10
|
-
"opentelemetry-sdk>=1.
|
|
10
|
+
"opentelemetry-sdk>=1.31.1",
|
|
11
11
|
"pydantic>=2.11.1",
|
|
12
12
|
"python-dotenv>=1.0.1",
|
|
13
13
|
"tenacity>=9.0.0",
|
|
14
14
|
"tomli>=2.2.1",
|
|
15
15
|
"pathlib>=1.0.1",
|
|
16
16
|
"rich>=13.0.0",
|
|
17
|
+
"azure-monitor-opentelemetry>=1.6.8",
|
|
17
18
|
]
|
|
18
19
|
classifiers = [
|
|
19
20
|
"Development Status :: 3 - Alpha",
|
|
@@ -7,6 +7,7 @@ import webbrowser
|
|
|
7
7
|
import click
|
|
8
8
|
from dotenv import load_dotenv
|
|
9
9
|
|
|
10
|
+
from ..telemetry import track
|
|
10
11
|
from ._auth._auth_server import HTTPSServer
|
|
11
12
|
from ._auth._oidc_utils import get_auth_config, get_auth_url
|
|
12
13
|
from ._auth._portal_service import PortalService, select_tenant
|
|
@@ -14,7 +15,7 @@ from ._auth._utils import update_auth_file, update_env_file
|
|
|
14
15
|
from ._utils._common import environment_options
|
|
15
16
|
from ._utils._console import ConsoleLogger
|
|
16
17
|
|
|
17
|
-
load_dotenv()
|
|
18
|
+
load_dotenv(override=True)
|
|
18
19
|
console = ConsoleLogger()
|
|
19
20
|
|
|
20
21
|
|
|
@@ -63,6 +64,7 @@ def set_port():
|
|
|
63
64
|
required=False,
|
|
64
65
|
help="Force new token",
|
|
65
66
|
)
|
|
67
|
+
@track
|
|
66
68
|
def auth(domain, force: None | bool = False):
|
|
67
69
|
"""Authenticate with UiPath Cloud Platform."""
|
|
68
70
|
with console.spinner("Authenticating with UiPath ..."):
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# type: ignore
|
|
2
2
|
import click
|
|
3
3
|
|
|
4
|
+
from ..telemetry import track
|
|
4
5
|
from .cli_pack import pack
|
|
5
6
|
from .cli_publish import publish
|
|
6
7
|
|
|
@@ -21,6 +22,7 @@ from .cli_publish import publish
|
|
|
21
22
|
help="Whether to publish to the personal workspace",
|
|
22
23
|
)
|
|
23
24
|
@click.argument("root", type=str, default="./")
|
|
25
|
+
@track
|
|
24
26
|
def deploy(root, feed):
|
|
25
27
|
"""Pack and publish the project."""
|
|
26
28
|
ctx = click.get_current_context()
|
|
@@ -7,6 +7,7 @@ from typing import Optional
|
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
9
|
|
|
10
|
+
from ..telemetry import track
|
|
10
11
|
from ._utils._console import ConsoleLogger
|
|
11
12
|
from ._utils._input_args import generate_args
|
|
12
13
|
from ._utils._parse_ast import generate_bindings_json
|
|
@@ -52,6 +53,7 @@ def get_user_script(directory: str, entrypoint: Optional[str] = None) -> Optiona
|
|
|
52
53
|
|
|
53
54
|
@click.command()
|
|
54
55
|
@click.argument("entrypoint", required=False, default=None)
|
|
56
|
+
@track
|
|
55
57
|
def init(entrypoint: str) -> None:
|
|
56
58
|
"""Create uipath.json with input/output schemas and bindings."""
|
|
57
59
|
with console.spinner("Initializing UiPath project ..."):
|
|
@@ -14,12 +14,13 @@ try:
|
|
|
14
14
|
except ImportError:
|
|
15
15
|
import tomli as tomllib
|
|
16
16
|
|
|
17
|
+
from ..telemetry import track
|
|
17
18
|
from ._utils._common import get_env_vars
|
|
18
19
|
from ._utils._folders import get_personal_workspace_info
|
|
19
20
|
from ._utils._processes import get_release_info
|
|
20
21
|
|
|
21
22
|
logger = logging.getLogger(__name__)
|
|
22
|
-
load_dotenv()
|
|
23
|
+
load_dotenv(override=True)
|
|
23
24
|
console = ConsoleLogger()
|
|
24
25
|
client = httpx.Client(follow_redirects=True, timeout=30.0)
|
|
25
26
|
|
|
@@ -50,6 +51,7 @@ def _read_project_details() -> [str, str]:
|
|
|
50
51
|
type=click.Path(exists=True),
|
|
51
52
|
help="File path for the .json input",
|
|
52
53
|
)
|
|
54
|
+
@track
|
|
53
55
|
def invoke(
|
|
54
56
|
entrypoint: Optional[str], input: Optional[str], file: Optional[str]
|
|
55
57
|
) -> None:
|
|
@@ -4,6 +4,7 @@ import shutil
|
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
6
|
|
|
7
|
+
from ..telemetry import track
|
|
7
8
|
from ._utils._console import ConsoleLogger
|
|
8
9
|
from .middlewares import Middlewares
|
|
9
10
|
|
|
@@ -38,6 +39,7 @@ requires-python = ">=3.10"
|
|
|
38
39
|
|
|
39
40
|
@click.command()
|
|
40
41
|
@click.argument("name", type=str, default="")
|
|
42
|
+
@track
|
|
41
43
|
def new(name: str):
|
|
42
44
|
"""Generate a quick-start project."""
|
|
43
45
|
directory = os.getcwd()
|
|
@@ -12,6 +12,7 @@ try:
|
|
|
12
12
|
except ImportError:
|
|
13
13
|
import tomli as tomllib
|
|
14
14
|
|
|
15
|
+
from ..telemetry import track
|
|
15
16
|
from ._utils._console import ConsoleLogger
|
|
16
17
|
|
|
17
18
|
console = ConsoleLogger()
|
|
@@ -366,6 +367,7 @@ def display_project_info(config):
|
|
|
366
367
|
|
|
367
368
|
@click.command()
|
|
368
369
|
@click.argument("root", type=str, default="./")
|
|
370
|
+
@track
|
|
369
371
|
def pack(root):
|
|
370
372
|
"""Pack the project."""
|
|
371
373
|
version = get_project_version(root)
|
|
@@ -6,6 +6,7 @@ import click
|
|
|
6
6
|
import httpx
|
|
7
7
|
from dotenv import load_dotenv
|
|
8
8
|
|
|
9
|
+
from ..telemetry import track
|
|
9
10
|
from ._utils._common import get_env_vars
|
|
10
11
|
from ._utils._console import ConsoleLogger
|
|
11
12
|
from ._utils._folders import get_personal_workspace_info
|
|
@@ -63,6 +64,7 @@ def get_available_feeds(
|
|
|
63
64
|
flag_value="personal",
|
|
64
65
|
help="Whether to publish to the personal workspace",
|
|
65
66
|
)
|
|
67
|
+
@track
|
|
66
68
|
def publish(feed):
|
|
67
69
|
"""Publish the package."""
|
|
68
70
|
current_path = os.getcwd()
|
|
@@ -9,6 +9,10 @@ from uuid import uuid4
|
|
|
9
9
|
import click
|
|
10
10
|
from dotenv import load_dotenv
|
|
11
11
|
|
|
12
|
+
from .._utils.constants import (
|
|
13
|
+
ENV_JOB_ID,
|
|
14
|
+
)
|
|
15
|
+
from ..telemetry import track
|
|
12
16
|
from ._runtime._contracts import (
|
|
13
17
|
UiPathRuntimeContext,
|
|
14
18
|
UiPathRuntimeError,
|
|
@@ -19,7 +23,7 @@ from ._utils._console import ConsoleLogger
|
|
|
19
23
|
from .middlewares import MiddlewareResult, Middlewares
|
|
20
24
|
|
|
21
25
|
console = ConsoleLogger()
|
|
22
|
-
load_dotenv()
|
|
26
|
+
load_dotenv(override=True)
|
|
23
27
|
|
|
24
28
|
|
|
25
29
|
def python_run_middleware(
|
|
@@ -108,6 +112,7 @@ Usage: `uipath run <entrypoint_path> <input_arguments> [-f <input_json_file_path
|
|
|
108
112
|
type=click.Path(exists=True),
|
|
109
113
|
help="File path for the .json input",
|
|
110
114
|
)
|
|
115
|
+
@track(when=lambda *_a, **_kw: env.get(ENV_JOB_ID) is None)
|
|
111
116
|
def run(
|
|
112
117
|
entrypoint: Optional[str], input: Optional[str], resume: bool, file: Optional[str]
|
|
113
118
|
) -> None:
|
|
@@ -8,6 +8,8 @@ ENV_JOB_KEY = "UIPATH_JOB_KEY"
|
|
|
8
8
|
ENV_JOB_ID = "UIPATH_JOB_ID"
|
|
9
9
|
ENV_ROBOT_KEY = "UIPATH_ROBOT_KEY"
|
|
10
10
|
ENV_TENANT_ID = "UIPATH_TENANT_ID"
|
|
11
|
+
ENV_ORGANIZATION_ID = "UIPATH_ORGANIZATION_ID"
|
|
12
|
+
ENV_TELEMETRY_ENABLED = "UIPATH_TELEMETRY_ENABLED"
|
|
11
13
|
|
|
12
14
|
# Headers
|
|
13
15
|
HEADER_FOLDER_KEY = "x-uipath-folderkey"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
_CONNECTION_STRING = ""
|
|
2
|
+
|
|
3
|
+
_APP_INSIGHTS_EVENT_MARKER_ATTRIBUTE = "APPLICATION_INSIGHTS_EVENT_MARKER_ATTRIBUTE"
|
|
4
|
+
_OTEL_RESOURCE_ATTRIBUTES = "OTEL_RESOURCE_ATTRIBUTES"
|
|
5
|
+
_SDK_VERSION = "SdkVersion"
|
|
6
|
+
|
|
7
|
+
_CODE_FILEPATH = "code.filepath"
|
|
8
|
+
_CODE_FUNCTION = "code.function"
|
|
9
|
+
_CODE_LINENO = "code.lineno"
|
|
10
|
+
|
|
11
|
+
_CLOUD_ORG_ID = "CloudOrganizationId"
|
|
12
|
+
_CLOUD_TENANT_ID = "CloudTenantId"
|
|
13
|
+
_CLOUD_URL = "CloudUrl"
|
|
14
|
+
_APP_NAME = "ApplicationName"
|
|
15
|
+
|
|
16
|
+
_UNKNOWN = ""
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from functools import wraps
|
|
3
|
+
from importlib.metadata import version
|
|
4
|
+
from logging import INFO, LogRecord, getLogger
|
|
5
|
+
from typing import Any, Callable, Dict, Optional, Union
|
|
6
|
+
|
|
7
|
+
from azure.monitor.opentelemetry import configure_azure_monitor
|
|
8
|
+
from opentelemetry.sdk._logs import LoggingHandler
|
|
9
|
+
from opentelemetry.util.types import Attributes
|
|
10
|
+
|
|
11
|
+
from .._utils.constants import (
|
|
12
|
+
ENV_BASE_URL,
|
|
13
|
+
ENV_ORGANIZATION_ID,
|
|
14
|
+
ENV_TELEMETRY_ENABLED,
|
|
15
|
+
ENV_TENANT_ID,
|
|
16
|
+
)
|
|
17
|
+
from ._constants import (
|
|
18
|
+
_APP_INSIGHTS_EVENT_MARKER_ATTRIBUTE,
|
|
19
|
+
_APP_NAME,
|
|
20
|
+
_CLOUD_ORG_ID,
|
|
21
|
+
_CLOUD_TENANT_ID,
|
|
22
|
+
_CLOUD_URL,
|
|
23
|
+
_CODE_FILEPATH,
|
|
24
|
+
_CODE_FUNCTION,
|
|
25
|
+
_CODE_LINENO,
|
|
26
|
+
_CONNECTION_STRING,
|
|
27
|
+
_OTEL_RESOURCE_ATTRIBUTES,
|
|
28
|
+
_SDK_VERSION,
|
|
29
|
+
_UNKNOWN,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
_logger = getLogger(__name__)
|
|
33
|
+
_logger.propagate = False
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class _AzureMonitorOpenTelemetryEventHandler(LoggingHandler):
|
|
37
|
+
@staticmethod
|
|
38
|
+
def _get_attributes(record: LogRecord) -> Attributes:
|
|
39
|
+
attributes = dict(LoggingHandler._get_attributes(record) or {})
|
|
40
|
+
attributes[_APP_INSIGHTS_EVENT_MARKER_ATTRIBUTE] = True
|
|
41
|
+
attributes[_CLOUD_TENANT_ID] = os.getenv(ENV_TENANT_ID, _UNKNOWN)
|
|
42
|
+
attributes[_CLOUD_ORG_ID] = os.getenv(ENV_ORGANIZATION_ID, _UNKNOWN)
|
|
43
|
+
attributes[_CLOUD_URL] = os.getenv(ENV_BASE_URL, _UNKNOWN)
|
|
44
|
+
attributes[_APP_NAME] = "UiPath.Sdk"
|
|
45
|
+
attributes[_SDK_VERSION] = version("uipath")
|
|
46
|
+
|
|
47
|
+
if _CODE_FILEPATH in attributes:
|
|
48
|
+
del attributes[_CODE_FILEPATH]
|
|
49
|
+
if _CODE_FUNCTION in attributes:
|
|
50
|
+
del attributes[_CODE_FUNCTION]
|
|
51
|
+
if _CODE_LINENO in attributes:
|
|
52
|
+
del attributes[_CODE_LINENO]
|
|
53
|
+
|
|
54
|
+
return attributes
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class _TelemetryClient:
|
|
58
|
+
"""A class to handle telemetry."""
|
|
59
|
+
|
|
60
|
+
_initialized = False
|
|
61
|
+
_enabled = os.getenv(ENV_TELEMETRY_ENABLED, "true").lower() == "true"
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def _initialize():
|
|
65
|
+
"""Initialize the telemetry client."""
|
|
66
|
+
if _TelemetryClient._initialized or not _TelemetryClient._enabled:
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
os.environ[_OTEL_RESOURCE_ATTRIBUTES] = (
|
|
71
|
+
"service.name=uipath-sdk,service.instance.id=" + version("uipath")
|
|
72
|
+
)
|
|
73
|
+
os.environ["OTEL_TRACES_EXPORTER"] = "none"
|
|
74
|
+
|
|
75
|
+
configure_azure_monitor(
|
|
76
|
+
connection_string=_CONNECTION_STRING,
|
|
77
|
+
disable_offline_storage=True,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
_logger.addHandler(_AzureMonitorOpenTelemetryEventHandler())
|
|
81
|
+
_logger.setLevel(INFO)
|
|
82
|
+
|
|
83
|
+
_TelemetryClient._initialized = True
|
|
84
|
+
except Exception:
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
@staticmethod
|
|
88
|
+
def _track_method(name: str, attrs: Optional[Dict[str, Any]] = None):
|
|
89
|
+
"""Track function invocations."""
|
|
90
|
+
if not _TelemetryClient._enabled:
|
|
91
|
+
return
|
|
92
|
+
|
|
93
|
+
_TelemetryClient._initialize()
|
|
94
|
+
|
|
95
|
+
_logger.info(f"Sdk.{name.capitalize()}", extra=attrs)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def track(
|
|
99
|
+
name_or_func: Optional[Union[str, Callable[..., Any]]] = None,
|
|
100
|
+
*,
|
|
101
|
+
when: Optional[Union[bool, Callable[..., bool]]] = True,
|
|
102
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
103
|
+
):
|
|
104
|
+
"""Decorator that will trace function invocations.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
name_or_func: The name of the event to track or the function itself.
|
|
108
|
+
extra: Extra attributes to add to the telemetry event.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
def decorator(func: Callable[..., Any]):
|
|
112
|
+
@wraps(func)
|
|
113
|
+
def wrapper(*args, **kwargs):
|
|
114
|
+
event_name = (
|
|
115
|
+
name_or_func if isinstance(name_or_func, str) else func.__name__
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
should_track = when(*args, **kwargs) if callable(when) else when
|
|
119
|
+
|
|
120
|
+
if should_track:
|
|
121
|
+
_TelemetryClient._track_method(event_name, extra)
|
|
122
|
+
|
|
123
|
+
return func(*args, **kwargs)
|
|
124
|
+
|
|
125
|
+
return wrapper
|
|
126
|
+
|
|
127
|
+
if callable(name_or_func):
|
|
128
|
+
return decorator(name_or_func)
|
|
129
|
+
|
|
130
|
+
return decorator
|