uipath 2.0.40__tar.gz → 2.0.42__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.40 → uipath-2.0.42}/PKG-INFO +1 -1
- uipath-2.0.42/docs/core/connections.md +1 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/javascripts/extra.js +6 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/stylesheets/extra.css +35 -4
- {uipath-2.0.40 → uipath-2.0.42}/mkdocs.yml +4 -0
- {uipath-2.0.40 → uipath-2.0.42}/pyproject.toml +2 -1
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_pack.py +14 -2
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/actions_service.py +12 -5
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/connections_service.py +2 -82
- {uipath-2.0.40 → uipath-2.0.42}/uv.lock +1594 -1580
- uipath-2.0.40/src/uipath/_services/connections_service.pyi +0 -50
- {uipath-2.0.40 → uipath-2.0.42}/.cursorrules +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.editorconfig +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.gitattributes +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/build.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/cd.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/ci.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/lint.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/slack.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.github/workflows/test.yml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.gitignore +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.pre-commit-config.yaml +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.python-version +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.vscode/extensions.json +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/.vscode/settings.json +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/CONTRIBUTING.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/LICENSE +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/README.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/assets/favicon.png +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/assets/logo-light.svg +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/cli/index.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/actions.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/assets.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/buckets.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/context_grounding.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/getting_started.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/jobs.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/processes.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/core/queues.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/hooks.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/langchain/chat_models.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/langchain/context_grounding.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/langchain/human_in_the_loop.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/docs/release_policy.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/justfile +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/py.typed +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/README.md +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_config.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_execution_context.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_folder_context.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_uipath.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/actions.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/assets.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/connections.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/errors.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/job.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/processes.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/models/queues.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/py.typed +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/__init__.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/cli/test_init.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/conftest.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/sdk/test_config.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/tests/tracing/test_traced.py +0 -0
- {uipath-2.0.40 → uipath-2.0.42}/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.42
|
|
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 @@
|
|
|
1
|
+
::: uipath._services.connections_service
|
|
@@ -33,3 +33,9 @@ observer.observe(document.body, {
|
|
|
33
33
|
attributes: true,
|
|
34
34
|
attributeFilter: ["data-md-color-media"],
|
|
35
35
|
});
|
|
36
|
+
|
|
37
|
+
document$.subscribe(() => {
|
|
38
|
+
document.querySelectorAll(".headerlink").forEach((link) => {
|
|
39
|
+
link.setAttribute("data-clipboard-text", link.href);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -17,6 +17,16 @@
|
|
|
17
17
|
background-color: #ffffff !important;
|
|
18
18
|
color: #182027 !important;
|
|
19
19
|
}
|
|
20
|
+
|
|
21
|
+
.md-nav__item--section {
|
|
22
|
+
&:after {
|
|
23
|
+
background-color: #182027 !important;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&>.md-nav__link[for] {
|
|
27
|
+
color: #182027 !important;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
20
30
|
}
|
|
21
31
|
|
|
22
32
|
[data-md-color-scheme=slate] {
|
|
@@ -41,7 +51,15 @@
|
|
|
41
51
|
color: #ffffff !important;
|
|
42
52
|
}
|
|
43
53
|
|
|
54
|
+
.md-nav__item--section {
|
|
55
|
+
&:after {
|
|
56
|
+
background-color: #ffffff !important;
|
|
57
|
+
}
|
|
44
58
|
|
|
59
|
+
&>.md-nav__link[for] {
|
|
60
|
+
color: #ffffff !important;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
45
63
|
}
|
|
46
64
|
|
|
47
65
|
.md-header {
|
|
@@ -62,8 +80,7 @@
|
|
|
62
80
|
a[href^="https://"]:not(.md-source) {
|
|
63
81
|
&::after {
|
|
64
82
|
content: "↗";
|
|
65
|
-
font-size:
|
|
66
|
-
margin-left: 0.2em;
|
|
83
|
+
font-size: 1em;
|
|
67
84
|
}
|
|
68
85
|
}
|
|
69
86
|
|
|
@@ -103,9 +120,23 @@ a[href^="https://"]:not(.md-source) {
|
|
|
103
120
|
|
|
104
121
|
|
|
105
122
|
@media (min-width: 1220px) {
|
|
106
|
-
.md-sidebar {
|
|
123
|
+
.md-sidebar--primary {
|
|
107
124
|
.md-nav__title {
|
|
108
125
|
display: none;
|
|
109
126
|
}
|
|
110
127
|
}
|
|
111
|
-
|
|
128
|
+
|
|
129
|
+
.md-nav__item--section {
|
|
130
|
+
position: relative;
|
|
131
|
+
|
|
132
|
+
&:after {
|
|
133
|
+
content: "";
|
|
134
|
+
position: absolute;
|
|
135
|
+
bottom: 0;
|
|
136
|
+
left: 0;
|
|
137
|
+
display: block;
|
|
138
|
+
height: 1px;
|
|
139
|
+
width: 25%;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -64,6 +64,7 @@ nav:
|
|
|
64
64
|
- Actions: core/actions.md
|
|
65
65
|
- Assets: core/assets.md
|
|
66
66
|
- Buckets: core/buckets.md
|
|
67
|
+
- Connections: core/connections.md
|
|
67
68
|
- Context Grounding: core/context_grounding.md
|
|
68
69
|
- Jobs: core/jobs.md
|
|
69
70
|
- Queues: core/queues.md
|
|
@@ -98,6 +99,8 @@ plugins:
|
|
|
98
99
|
- "$"
|
|
99
100
|
- ">"
|
|
100
101
|
- social
|
|
102
|
+
- open-in-new-tab
|
|
103
|
+
|
|
101
104
|
markdown_extensions:
|
|
102
105
|
- attr_list
|
|
103
106
|
- md_in_html
|
|
@@ -131,3 +134,4 @@ markdown_extensions:
|
|
|
131
134
|
alternate_style: true
|
|
132
135
|
- toc:
|
|
133
136
|
title: On this page
|
|
137
|
+
permalink: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "uipath"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.42"
|
|
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"
|
|
@@ -57,6 +57,7 @@ dev = [
|
|
|
57
57
|
"mkdocs-simple-hooks>=0.1.5",
|
|
58
58
|
"mkdocs-click>=0.9.0",
|
|
59
59
|
"pytest-asyncio>=0.26.0",
|
|
60
|
+
"mkdocs-open-in-new-tab>=1.0.8",
|
|
60
61
|
]
|
|
61
62
|
|
|
62
63
|
[project.optional-dependencies]
|
|
@@ -201,6 +201,14 @@ def generate_package_descriptor_content(entryPoints):
|
|
|
201
201
|
return package_descriptor_content
|
|
202
202
|
|
|
203
203
|
|
|
204
|
+
def is_venv_dir(d):
|
|
205
|
+
return (
|
|
206
|
+
os.path.exists(os.path.join(d, "Scripts", "activate"))
|
|
207
|
+
if os.name == "nt"
|
|
208
|
+
else os.path.exists(os.path.join(d, "bin", "activate"))
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
|
|
204
212
|
def pack_fn(projectName, description, entryPoints, version, authors, directory):
|
|
205
213
|
operate_file = generate_operate_file(entryPoints)
|
|
206
214
|
entrypoints_file = generate_entrypoints_file(entryPoints)
|
|
@@ -264,8 +272,12 @@ def pack_fn(projectName, description, entryPoints, version, authors, directory):
|
|
|
264
272
|
|
|
265
273
|
# Walk through directory and add all files with extensions in the allowlist
|
|
266
274
|
for root, dirs, files in os.walk(directory):
|
|
267
|
-
# Skip all directories that start with .
|
|
268
|
-
dirs[:] = [
|
|
275
|
+
# Skip all directories that start with . or are a venv
|
|
276
|
+
dirs[:] = [
|
|
277
|
+
d
|
|
278
|
+
for d in dirs
|
|
279
|
+
if not d.startswith(".") and not is_venv_dir(os.path.join(root, d))
|
|
280
|
+
]
|
|
269
281
|
|
|
270
282
|
for file in files:
|
|
271
283
|
file_extension = os.path.splitext(file)[1].lower()
|
|
@@ -415,11 +415,18 @@ class ActionsService(FolderContext, BaseService):
|
|
|
415
415
|
if len(deployed_apps) > 1 and not app_folder_path:
|
|
416
416
|
raise Exception("Multiple app schemas found")
|
|
417
417
|
try:
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
418
|
+
if app_folder_path:
|
|
419
|
+
return next(
|
|
420
|
+
app
|
|
421
|
+
for app in deployed_apps
|
|
422
|
+
if app["deploymentFolder"]["fullyQualifiedName"] == app_folder_path
|
|
423
|
+
)
|
|
424
|
+
else:
|
|
425
|
+
return next(
|
|
426
|
+
app
|
|
427
|
+
for app in deployed_apps
|
|
428
|
+
if app["deploymentFolder"]["key"] == self._folder_key
|
|
429
|
+
)
|
|
423
430
|
except StopIteration:
|
|
424
431
|
raise KeyError from StopIteration
|
|
425
432
|
|
|
@@ -1,77 +1,24 @@
|
|
|
1
|
-
import importlib
|
|
2
1
|
import logging
|
|
3
|
-
from typing import Any, Dict, Protocol, TypeVar, Union
|
|
4
2
|
|
|
5
3
|
from .._config import Config
|
|
6
4
|
from .._execution_context import ExecutionContext
|
|
7
5
|
from .._utils import Endpoint, RequestSpec
|
|
8
|
-
from .._utils.constants import ENTRYPOINT
|
|
9
6
|
from ..models import Connection, ConnectionToken
|
|
10
7
|
from ..tracing._traced import traced
|
|
11
8
|
from ._base_service import BaseService
|
|
12
9
|
|
|
13
|
-
T_co = TypeVar("T_co", covariant=True)
|
|
14
|
-
|
|
15
10
|
logger: logging.Logger = logging.getLogger("uipath")
|
|
16
11
|
|
|
17
12
|
|
|
18
|
-
class PluginNotFoundError(AttributeError):
|
|
19
|
-
"""Raised when a plugin is not installed or failed to load."""
|
|
20
|
-
|
|
21
|
-
pass
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class Connector(Protocol[T_co]):
|
|
25
|
-
def __call__(self, *, client: Any, instance_id: Union[str, int]) -> T_co: ...
|
|
26
|
-
|
|
27
|
-
|
|
28
13
|
class ConnectionsService(BaseService):
|
|
29
14
|
"""Service for managing UiPath external service connections.
|
|
30
15
|
|
|
31
|
-
This service provides methods to retrieve
|
|
32
|
-
|
|
33
|
-
both direct connection information retrieval and secure token management.
|
|
34
|
-
|
|
35
|
-
The service implements a flexible connector system that allows for type-safe
|
|
36
|
-
instantiation of specific service connectors, making it easier to interact
|
|
37
|
-
with different types of external services.
|
|
16
|
+
This service provides methods to retrieve direct connection information retrieval
|
|
17
|
+
and secure token management.
|
|
38
18
|
"""
|
|
39
19
|
|
|
40
20
|
def __init__(self, config: Config, execution_context: ExecutionContext) -> None:
|
|
41
21
|
super().__init__(config=config, execution_context=execution_context)
|
|
42
|
-
self._plugins: Dict[str, Any] = {}
|
|
43
|
-
self._plugins_loaded = False
|
|
44
|
-
self._load_connectors()
|
|
45
|
-
|
|
46
|
-
def __call__(self, connector: Connector[T_co], key: str) -> T_co:
|
|
47
|
-
connection = self.retrieve(key)
|
|
48
|
-
return connector(client=self.client, instance_id=connection.element_instance_id)
|
|
49
|
-
|
|
50
|
-
def __getattr__(self, name: str) -> Any:
|
|
51
|
-
"""Get a plugin by name.
|
|
52
|
-
|
|
53
|
-
Args:
|
|
54
|
-
name: The name of the plugin to get
|
|
55
|
-
|
|
56
|
-
Returns:
|
|
57
|
-
The plugin instance
|
|
58
|
-
|
|
59
|
-
Raises:
|
|
60
|
-
PluginNotFoundError: If the plugin is not installed
|
|
61
|
-
ImportError: If the plugin fails to load
|
|
62
|
-
"""
|
|
63
|
-
if not self._plugins_loaded:
|
|
64
|
-
self._load_connectors()
|
|
65
|
-
|
|
66
|
-
if name in self._plugins:
|
|
67
|
-
return self._plugins[name]
|
|
68
|
-
|
|
69
|
-
try:
|
|
70
|
-
plugin: Any = getattr(self.client, name)
|
|
71
|
-
self._plugins[name] = plugin
|
|
72
|
-
return plugin
|
|
73
|
-
except AttributeError as e:
|
|
74
|
-
raise PluginNotFoundError(f"Plugin '{name}' is not installed") from e
|
|
75
22
|
|
|
76
23
|
@traced(
|
|
77
24
|
name="connections_retrieve",
|
|
@@ -177,30 +124,3 @@ class ConnectionsService(BaseService):
|
|
|
177
124
|
endpoint=Endpoint(f"/connections_/api/v1/Connections/{key}/token"),
|
|
178
125
|
params={"type": "direct"},
|
|
179
126
|
)
|
|
180
|
-
|
|
181
|
-
def _load_connectors(self) -> None:
|
|
182
|
-
"""Load all available connector plugins.
|
|
183
|
-
|
|
184
|
-
Raises:
|
|
185
|
-
ImportError: If a plugin fails to load
|
|
186
|
-
"""
|
|
187
|
-
try:
|
|
188
|
-
entry_points: Any = importlib.metadata.entry_points()
|
|
189
|
-
if hasattr(entry_points, "select"):
|
|
190
|
-
connectors = list(entry_points.select(group=ENTRYPOINT))
|
|
191
|
-
else:
|
|
192
|
-
connectors = list(entry_points.get(ENTRYPOINT, []))
|
|
193
|
-
|
|
194
|
-
for entry_point in connectors:
|
|
195
|
-
try:
|
|
196
|
-
register_func = entry_point.load()
|
|
197
|
-
register_func(self)
|
|
198
|
-
except Exception as e:
|
|
199
|
-
logger.error(
|
|
200
|
-
f"[ERROR] Failed to load plugin {entry_point.name}: {str(e)}"
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
self._plugins_loaded = True
|
|
204
|
-
except Exception as e:
|
|
205
|
-
self._plugins_loaded = False
|
|
206
|
-
raise ImportError(f"Failed to load plugins: {str(e)}") from e
|