uipath 2.0.56__tar.gz → 2.0.57__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.

Files changed (189) hide show
  1. uipath-2.0.57/.github/workflows/cd.yml +87 -0
  2. {uipath-2.0.56 → uipath-2.0.57}/.github/workflows/ci.yml +4 -5
  3. {uipath-2.0.56 → uipath-2.0.57}/.github/workflows/commitlint.yml +6 -2
  4. uipath-2.0.57/.github/workflows/lint.yml +38 -0
  5. {uipath-2.0.56 → uipath-2.0.57}/.github/workflows/publish-dev.yml +14 -9
  6. {uipath-2.0.56 → uipath-2.0.57}/.github/workflows/publish-docs.yml +19 -10
  7. uipath-2.0.57/.github/workflows/test.yml +37 -0
  8. {uipath-2.0.56 → uipath-2.0.57}/PKG-INFO +1 -1
  9. {uipath-2.0.56 → uipath-2.0.57}/pyproject.toml +1 -1
  10. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/buckets_service.py +55 -145
  11. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/context_grounding_service.py +4 -4
  12. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/telemetry/_constants.py +1 -1
  13. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_buckets_service.py +1 -1
  14. {uipath-2.0.56 → uipath-2.0.57}/uv.lock +1697 -1699
  15. uipath-2.0.56/.github/workflows/build.yml +0 -58
  16. uipath-2.0.56/.github/workflows/cd.yml +0 -16
  17. uipath-2.0.56/.github/workflows/lint.yml +0 -36
  18. uipath-2.0.56/.github/workflows/test.yml +0 -42
  19. {uipath-2.0.56 → uipath-2.0.57}/.cursorrules +0 -0
  20. {uipath-2.0.56 → uipath-2.0.57}/.editorconfig +0 -0
  21. {uipath-2.0.56 → uipath-2.0.57}/.gitattributes +0 -0
  22. {uipath-2.0.56 → uipath-2.0.57}/.github/workflows/slack.yml +0 -0
  23. {uipath-2.0.56 → uipath-2.0.57}/.gitignore +0 -0
  24. {uipath-2.0.56 → uipath-2.0.57}/.pre-commit-config.yaml +0 -0
  25. {uipath-2.0.56 → uipath-2.0.57}/.python-version +0 -0
  26. {uipath-2.0.56 → uipath-2.0.57}/.vscode/extensions.json +0 -0
  27. {uipath-2.0.56 → uipath-2.0.57}/.vscode/settings.json +0 -0
  28. {uipath-2.0.56 → uipath-2.0.57}/CONTRIBUTING.md +0 -0
  29. {uipath-2.0.56 → uipath-2.0.57}/LICENSE +0 -0
  30. {uipath-2.0.56 → uipath-2.0.57}/README.md +0 -0
  31. {uipath-2.0.56 → uipath-2.0.57}/docs/CONTRIBUTING.md +0 -0
  32. {uipath-2.0.56 → uipath-2.0.57}/docs/FAQ.md +0 -0
  33. {uipath-2.0.56 → uipath-2.0.57}/docs/assets/env-preparation-failed-dark.png +0 -0
  34. {uipath-2.0.56 → uipath-2.0.57}/docs/assets/env-preparation-failed-light.png +0 -0
  35. {uipath-2.0.56 → uipath-2.0.57}/docs/assets/favicon.png +0 -0
  36. {uipath-2.0.56 → uipath-2.0.57}/docs/assets/logo-dark.svg +0 -0
  37. {uipath-2.0.56 → uipath-2.0.57}/docs/assets/logo-light.svg +0 -0
  38. {uipath-2.0.56 → uipath-2.0.57}/docs/cli/index.md +0 -0
  39. {uipath-2.0.56 → uipath-2.0.57}/docs/core/actions.md +0 -0
  40. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  41. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets/cloud_env_var_light.gif +0 -0
  42. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  43. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  44. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets/copy_path_dark.png +0 -0
  45. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets/copy_path_light.png +0 -0
  46. {uipath-2.0.56 → uipath-2.0.57}/docs/core/assets.md +0 -0
  47. {uipath-2.0.56 → uipath-2.0.57}/docs/core/attachments.md +0 -0
  48. {uipath-2.0.56 → uipath-2.0.57}/docs/core/buckets.md +0 -0
  49. {uipath-2.0.56 → uipath-2.0.57}/docs/core/connections.md +0 -0
  50. {uipath-2.0.56 → uipath-2.0.57}/docs/core/context_grounding.md +0 -0
  51. {uipath-2.0.56 → uipath-2.0.57}/docs/core/environment_variables.md +0 -0
  52. {uipath-2.0.56 → uipath-2.0.57}/docs/core/getting_started.md +0 -0
  53. {uipath-2.0.56 → uipath-2.0.57}/docs/core/jobs.md +0 -0
  54. {uipath-2.0.56 → uipath-2.0.57}/docs/core/processes.md +0 -0
  55. {uipath-2.0.56 → uipath-2.0.57}/docs/core/queues.md +0 -0
  56. {uipath-2.0.56 → uipath-2.0.57}/docs/core/traced.md +0 -0
  57. {uipath-2.0.56 → uipath-2.0.57}/docs/hooks.py +0 -0
  58. {uipath-2.0.56 → uipath-2.0.57}/docs/javascripts/extra.js +0 -0
  59. {uipath-2.0.56 → uipath-2.0.57}/docs/langchain/chat_models.md +0 -0
  60. {uipath-2.0.56 → uipath-2.0.57}/docs/langchain/context_grounding.md +0 -0
  61. {uipath-2.0.56 → uipath-2.0.57}/docs/langchain/human_in_the_loop.md +0 -0
  62. {uipath-2.0.56 → uipath-2.0.57}/docs/overrides/partials/actions.html +0 -0
  63. {uipath-2.0.56 → uipath-2.0.57}/docs/overrides/partials/logo.html +0 -0
  64. {uipath-2.0.56 → uipath-2.0.57}/docs/release_policy.md +0 -0
  65. {uipath-2.0.56 → uipath-2.0.57}/docs/stylesheets/extra.css +0 -0
  66. {uipath-2.0.56 → uipath-2.0.57}/justfile +0 -0
  67. {uipath-2.0.56 → uipath-2.0.57}/mkdocs.yml +0 -0
  68. {uipath-2.0.56 → uipath-2.0.57}/py.typed +0 -0
  69. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/__init__.py +0 -0
  70. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/README.md +0 -0
  71. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/__init__.py +0 -0
  72. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  73. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/_models.py +0 -0
  74. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  75. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  76. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/_utils.py +0 -0
  77. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/auth_config.json +0 -0
  78. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/index.html +0 -0
  79. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/localhost.crt +0 -0
  80. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_auth/localhost.key +0 -0
  81. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  82. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_runtime/_logging.py +0 -0
  83. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  84. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  85. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_templates/.rels.template +0 -0
  86. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  87. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_templates/main.py.template +0 -0
  88. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  89. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_utils/_common.py +0 -0
  90. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_utils/_console.py +0 -0
  91. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_utils/_folders.py +0 -0
  92. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_utils/_input_args.py +0 -0
  93. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  94. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/_utils/_processes.py +0 -0
  95. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_auth.py +0 -0
  96. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_deploy.py +0 -0
  97. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_init.py +0 -0
  98. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_invoke.py +0 -0
  99. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_new.py +0 -0
  100. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_pack.py +0 -0
  101. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_publish.py +0 -0
  102. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/cli_run.py +0 -0
  103. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/middlewares.py +0 -0
  104. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_cli/spinner.py +0 -0
  105. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_config.py +0 -0
  106. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_execution_context.py +0 -0
  107. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_folder_context.py +0 -0
  108. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/__init__.py +0 -0
  109. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/_base_service.py +0 -0
  110. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/actions_service.py +0 -0
  111. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/api_client.py +0 -0
  112. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/assets_service.py +0 -0
  113. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/attachments_service.py +0 -0
  114. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/connections_service.py +0 -0
  115. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/folder_service.py +0 -0
  116. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/jobs_service.py +0 -0
  117. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/llm_gateway_service.py +0 -0
  118. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/processes_service.py +0 -0
  119. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_services/queues_service.py +0 -0
  120. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_uipath.py +0 -0
  121. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/__init__.py +0 -0
  122. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_endpoint.py +0 -0
  123. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_infer_bindings.py +0 -0
  124. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_logs.py +0 -0
  125. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_read_overwrites.py +0 -0
  126. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_request_override.py +0 -0
  127. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_request_spec.py +0 -0
  128. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_url.py +0 -0
  129. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/_user_agent.py +0 -0
  130. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/_utils/constants.py +0 -0
  131. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/__init__.py +0 -0
  132. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/action_schema.py +0 -0
  133. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/actions.py +0 -0
  134. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/assets.py +0 -0
  135. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/attachment.py +0 -0
  136. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/buckets.py +0 -0
  137. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/connections.py +0 -0
  138. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/context_grounding.py +0 -0
  139. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/context_grounding_index.py +0 -0
  140. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/errors.py +0 -0
  141. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/exceptions.py +0 -0
  142. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/interrupt_models.py +0 -0
  143. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/job.py +0 -0
  144. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/llm_gateway.py +0 -0
  145. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/processes.py +0 -0
  146. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/models/queues.py +0 -0
  147. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/py.typed +0 -0
  148. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/telemetry/__init__.py +0 -0
  149. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/telemetry/_track.py +0 -0
  150. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/tracing/__init__.py +0 -0
  151. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/tracing/_otel_exporters.py +0 -0
  152. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/tracing/_traced.py +0 -0
  153. {uipath-2.0.56 → uipath-2.0.57}/src/uipath/tracing/_utils.py +0 -0
  154. {uipath-2.0.56 → uipath-2.0.57}/tests/__init__.py +0 -0
  155. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/conftest.py +0 -0
  156. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/mocks/pyproject.toml +0 -0
  157. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/mocks/simple_script.py +0 -0
  158. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/mocks/uipath-mock.json +0 -0
  159. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  160. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/test_init.py +0 -0
  161. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/test_invoke.py +0 -0
  162. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/test_new.py +0 -0
  163. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/test_pack.py +0 -0
  164. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/test_publish.py +0 -0
  165. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/test_run.py +0 -0
  166. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/utils/project_details.py +0 -0
  167. {uipath-2.0.56 → uipath-2.0.57}/tests/cli/utils/uipath_json.py +0 -0
  168. {uipath-2.0.56 → uipath-2.0.57}/tests/conftest.py +0 -0
  169. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/conftest.py +0 -0
  170. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_actions_service.py +0 -0
  171. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_api_client.py +0 -0
  172. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_assets_service.py +0 -0
  173. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_attachments_service.py +0 -0
  174. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_base_service.py +0 -0
  175. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_connections_service.py +0 -0
  176. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_context_grounding_service.py +0 -0
  177. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_folder_service.py +0 -0
  178. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_jobs_service.py +0 -0
  179. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_llm_integration.py +0 -0
  180. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_llm_service.py +0 -0
  181. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_processes_service.py +0 -0
  182. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_queues_service.py +0 -0
  183. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  184. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/test_config.py +0 -0
  185. {uipath-2.0.56 → uipath-2.0.57}/tests/sdk/test_overwrites.py +0 -0
  186. {uipath-2.0.56 → uipath-2.0.57}/tests/tracing/test_otel_exporters.py +0 -0
  187. {uipath-2.0.56 → uipath-2.0.57}/tests/tracing/test_span_utils.py +0 -0
  188. {uipath-2.0.56 → uipath-2.0.57}/tests/tracing/test_traced.py +0 -0
  189. {uipath-2.0.56 → uipath-2.0.57}/tests/tracing/test_tracing_manager.py +0 -0
@@ -0,0 +1,87 @@
1
+ name: CD
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches:
7
+ - main
8
+ paths:
9
+ - pyproject.toml
10
+
11
+ jobs:
12
+ lint:
13
+ uses: ./.github/workflows/lint.yml
14
+
15
+ test:
16
+ uses: ./.github/workflows/test.yml
17
+
18
+ build:
19
+ name: Build
20
+ runs-on: ubuntu-latest
21
+
22
+ needs:
23
+ - lint
24
+ - test
25
+
26
+ if: ${{ github.repository == 'UiPath/uipath-python' }}
27
+ permissions:
28
+ contents: read
29
+ actions: write
30
+
31
+ steps:
32
+ - name: Checkout
33
+ uses: actions/checkout@v4
34
+
35
+ - name: Setup uv
36
+ uses: astral-sh/setup-uv@v5
37
+ with:
38
+ enable-cache: true
39
+
40
+ - name: Setup Python
41
+ uses: actions/setup-python@v5
42
+ with:
43
+ python-version-file: ".python-version"
44
+
45
+ - name: Install dependencies
46
+ run: uv sync --all-extras
47
+
48
+ - name: Replace connection string placeholder
49
+ run: |
50
+ originalfile="src/uipath/telemetry/_constants.py"
51
+ tmpfile=$(mktemp)
52
+ trap 'rm -f "$tmpfile"' EXIT
53
+
54
+ rsync -a --no-whole-file --ignore-existing "$originalfile" "$tmpfile"
55
+ envsubst '$CONNECTION_STRING' < "$originalfile" > "$tmpfile" && mv "$tmpfile" "$originalfile"
56
+ env:
57
+ CONNECTION_STRING: ${{ secrets.APPINS_CONNECTION_STRING }}
58
+
59
+ - name: Build
60
+ run: uv build
61
+
62
+ - name: Upload artifacts
63
+ uses: actions/upload-artifact@v4
64
+ with:
65
+ name: release-dists
66
+ path: dist/
67
+
68
+ pypi-publish:
69
+ name: Upload release to PyPI
70
+ runs-on: ubuntu-latest
71
+ environment: pypi
72
+
73
+ needs:
74
+ - build
75
+ permissions:
76
+ contents: read
77
+ id-token: write
78
+
79
+ steps:
80
+ - name: Retrieve release distributions
81
+ uses: actions/download-artifact@v4
82
+ with:
83
+ name: release-dists
84
+ path: dist/
85
+
86
+ - name: Publish package distributions to PyPI
87
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -4,16 +4,15 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - main
7
- pull_request_target:
8
- types:
9
- - opened
10
- - synchronize
7
+ paths-ignore:
8
+ - pyproject.toml
9
+ pull_request:
11
10
  branches:
12
11
  - main
13
12
 
14
13
  jobs:
15
14
  commit-lint:
16
- if: ${{ github.event_name == 'pull_request_target' }}
15
+ if: ${{ github.event_name == 'pull_request' }}
17
16
  uses: ./.github/workflows/commitlint.yml
18
17
 
19
18
  lint:
@@ -7,13 +7,17 @@ jobs:
7
7
  commitlint:
8
8
  name: Commit Lint
9
9
  runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
10
12
 
11
13
  steps:
12
- - uses: actions/checkout@v3
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
13
16
  with:
14
17
  fetch-depth: 0
15
18
 
16
- - uses: actions/setup-node@v3
19
+ - name: Setup Node
20
+ uses: actions/setup-node@v3
17
21
  with:
18
22
  node-version: 22
19
23
 
@@ -0,0 +1,38 @@
1
+ name: Lint
2
+
3
+ on:
4
+ workflow_call
5
+
6
+ jobs:
7
+ lint:
8
+ name: Lint
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
12
+
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Setup uv
18
+ uses: astral-sh/setup-uv@v5
19
+ with:
20
+ enable-cache: true
21
+
22
+ - name: Setup Python
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version-file: ".python-version"
26
+
27
+ - name: Install dependencies
28
+ run: uv sync --all-extras
29
+
30
+ - name: Check static types
31
+ run: uv run mypy --config-file pyproject.toml .
32
+
33
+ - name: Check linting
34
+ run: uv run ruff check .
35
+
36
+ - name: Check formatting
37
+ run: uv run ruff format --check .
38
+
@@ -7,23 +7,29 @@ on:
7
7
  jobs:
8
8
  publish-dev:
9
9
  runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: read
12
+ pull-requests: write
10
13
 
11
14
  # Only run if PR has the build:dev label
12
15
  if: contains(github.event.pull_request.labels.*.name, 'build:dev')
13
16
 
14
17
  steps:
15
- - uses: actions/checkout@v4
18
+ - name: Checkout
19
+ uses: actions/checkout@v4
16
20
 
17
- - uses: astral-sh/setup-uv@v5
21
+ - name: Setup uv
22
+ uses: astral-sh/setup-uv@v5
23
+ with:
24
+ enable-cache: true
18
25
 
19
- - uses: actions/setup-python@v5
26
+ - name: Setup Python
27
+ uses: actions/setup-python@v5
20
28
  with:
21
29
  python-version-file: ".python-version"
22
30
 
23
- - name: Setup venv
24
- run: |
25
- uv venv
26
- uv sync --all-extras
31
+ - name: Install dependencies
32
+ run: uv sync --all-extras
27
33
 
28
34
  - name: Replace connection string placeholder
29
35
  run: |
@@ -124,7 +130,6 @@ jobs:
124
130
  run: uv build
125
131
 
126
132
  - name: Publish
127
- run: |
128
- uv publish
133
+ run: uv publish
129
134
  env:
130
135
  UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
@@ -1,29 +1,40 @@
1
1
  name: Publish Docs
2
2
 
3
3
  on:
4
+ workflow_dispatch:
4
5
  push:
5
6
  branches:
6
7
  - main
8
+ paths:
9
+ - "docs/**"
10
+ - "mkdocs.yml"
11
+ - "pyproject.toml"
7
12
  repository_dispatch:
8
13
  types: [publish-docs]
9
14
 
10
15
  jobs:
11
16
  publish-docs:
12
17
  runs-on: ubuntu-latest
18
+ if: ${{ github.repository == 'UiPath/uipath-python' }}
19
+ permissions:
20
+ contents: write
13
21
 
14
22
  steps:
15
- - uses: actions/checkout@v4
23
+ - name: Checkout
24
+ uses: actions/checkout@v4
16
25
 
17
- - uses: astral-sh/setup-uv@v5
26
+ - name: Setup uv
27
+ uses: astral-sh/setup-uv@v5
28
+ with:
29
+ enable-cache: true
18
30
 
19
- - uses: actions/setup-python@v5
31
+ - name: Setup Python
32
+ uses: actions/setup-python@v5
20
33
  with:
21
34
  python-version-file: ".python-version"
22
35
 
23
- - name: Setup venv
24
- run: |
25
- uv venv
26
- uv sync --all-extras
36
+ - name: Install dependencies
37
+ run: uv sync --all-extras
27
38
 
28
39
  - name: Clone plugins
29
40
  run: |
@@ -35,6 +46,4 @@ jobs:
35
46
  ln -s ../../plugins/uipath-langchain-python docs/plugins/uipath-langchain-python
36
47
 
37
48
  - name: Publish Docs
38
- run: |
39
- ls -la docs
40
- uv run mkdocs gh-deploy --force
49
+ run: uv run mkdocs gh-deploy --force
@@ -0,0 +1,37 @@
1
+ name: Test
2
+
3
+ on:
4
+ workflow_call
5
+
6
+ jobs:
7
+ test:
8
+ name: Test
9
+ runs-on: ${{ matrix.os }}
10
+ strategy:
11
+ matrix:
12
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
13
+ os: [ubuntu-latest, windows-latest]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ steps:
19
+ - name: Checkout
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Setup uv
23
+ uses: astral-sh/setup-uv@v5
24
+
25
+ - name: Setup Python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version-file: ".python-version"
29
+
30
+ - name: Install dependencies
31
+ run: uv sync --all-extras
32
+
33
+ - name: Run tests
34
+ run: uv run pytest
35
+
36
+ continue-on-error: true
37
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.0.56
3
+ Version: 2.0.57
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.0.56"
3
+ version = "2.0.57"
4
4
  description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools."
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  from typing import Any, Dict, Optional, Union
2
2
 
3
- from httpx import request
3
+ import httpx
4
4
 
5
5
  from .._config import Config
6
6
  from .._execution_context import ExecutionContext
@@ -25,6 +25,8 @@ class BucketsService(FolderContext, BaseService):
25
25
 
26
26
  def __init__(self, config: Config, execution_context: ExecutionContext) -> None:
27
27
  super().__init__(config=config, execution_context=execution_context)
28
+ self.custom_client = httpx.Client()
29
+ self.custom_client_async = httpx.AsyncClient()
28
30
 
29
31
  @traced(name="buckets_download", run_type="uipath")
30
32
  def download(
@@ -78,7 +80,7 @@ class BucketsService(FolderContext, BaseService):
78
80
  if result["RequiresAuth"]:
79
81
  file_content = self.request("GET", read_uri, headers=headers).content
80
82
  else:
81
- file_content = request("GET", read_uri, headers=headers).content
83
+ file_content = self.custom_client.get(read_uri, headers=headers).content
82
84
  file.write(file_content)
83
85
 
84
86
  @traced(name="buckets_upload", run_type="uipath")
@@ -89,7 +91,8 @@ class BucketsService(FolderContext, BaseService):
89
91
  name: Optional[str] = None,
90
92
  blob_file_path: str,
91
93
  content_type: str,
92
- source_path: str,
94
+ source_path: Optional[str] = None,
95
+ content: Optional[Union[str, bytes]] = None,
93
96
  folder_key: Optional[str] = None,
94
97
  folder_path: Optional[str] = None,
95
98
  ) -> None:
@@ -100,7 +103,8 @@ class BucketsService(FolderContext, BaseService):
100
103
  name (Optional[str]): The name of the bucket.
101
104
  blob_file_path (str): The path where the file will be stored in the bucket.
102
105
  content_type (str): The MIME type of the file.
103
- source_path (str): The local path of the file to upload.
106
+ source_path (Optional[str]): The local path of the file to upload.
107
+ content (Optional[Union[str, bytes]]): The content to upload (string or bytes).
104
108
  folder_key (Optional[str]): The key of the folder where the bucket resides.
105
109
  folder_path (Optional[str]): The path of the folder where the bucket resides.
106
110
 
@@ -108,6 +112,11 @@ class BucketsService(FolderContext, BaseService):
108
112
  ValueError: If neither key nor name is provided.
109
113
  Exception: If the bucket with the specified key or name is not found.
110
114
  """
115
+ if content is not None and source_path is not None:
116
+ raise ValueError("Content and source_path are mutually exclusive")
117
+ if content is None and source_path is None:
118
+ raise ValueError("Either content or source_path must be provided")
119
+
111
120
  bucket = self.retrieve(
112
121
  name=name, key=key, folder_key=folder_key, folder_path=folder_path
113
122
  )
@@ -136,11 +145,25 @@ class BucketsService(FolderContext, BaseService):
136
145
  )
137
146
  }
138
147
 
139
- with open(source_path, "rb") as file:
148
+ if content is not None:
149
+ if isinstance(content, str):
150
+ content = content.encode("utf-8")
151
+
140
152
  if result["RequiresAuth"]:
141
- self.request("PUT", write_uri, headers=headers, files={"file": file})
153
+ self.request("PUT", write_uri, headers=headers, content=content)
142
154
  else:
143
- request("PUT", write_uri, headers=headers, files={"file": file})
155
+ self.custom_client.put(write_uri, headers=headers, content=content)
156
+
157
+ if source_path is not None:
158
+ with open(source_path, "rb") as file:
159
+ if result["RequiresAuth"]:
160
+ self.request(
161
+ "PUT", write_uri, headers=headers, files={"file": file}
162
+ )
163
+ else:
164
+ self.custom_client.put(
165
+ write_uri, headers=headers, files={"file": file}
166
+ )
144
167
 
145
168
  @traced(name="buckets_upload", run_type="uipath")
146
169
  async def upload_async(
@@ -150,7 +173,8 @@ class BucketsService(FolderContext, BaseService):
150
173
  name: Optional[str] = None,
151
174
  blob_file_path: str,
152
175
  content_type: str,
153
- source_path: str,
176
+ source_path: Optional[str] = None,
177
+ content: Optional[Union[str, bytes]] = None,
154
178
  folder_key: Optional[str] = None,
155
179
  folder_path: Optional[str] = None,
156
180
  ) -> None:
@@ -169,6 +193,11 @@ class BucketsService(FolderContext, BaseService):
169
193
  ValueError: If neither key nor name is provided.
170
194
  Exception: If the bucket with the specified key or name is not found.
171
195
  """
196
+ if content is not None and source_path is not None:
197
+ raise ValueError("Content and source_path are mutually exclusive")
198
+ if content is None and source_path is None:
199
+ raise ValueError("Either content or source_path must be provided")
200
+
172
201
  bucket = await self.retrieve_async(
173
202
  name=name, key=key, folder_key=folder_key, folder_path=folder_path
174
203
  )
@@ -199,148 +228,29 @@ class BucketsService(FolderContext, BaseService):
199
228
  )
200
229
  }
201
230
 
202
- with open(source_path, "rb") as file:
231
+ if content is not None:
232
+ if isinstance(content, str):
233
+ content = content.encode("utf-8")
234
+
203
235
  if result["RequiresAuth"]:
204
236
  await self.request_async(
205
- "PUT", write_uri, headers=headers, files={"file": file}
237
+ "PUT", write_uri, headers=headers, content=content
206
238
  )
207
239
  else:
208
- request("PUT", write_uri, headers=headers, files={"file": file})
209
-
210
- @traced(
211
- name="buckets_upload_from_memory",
212
- run_type="uipath",
213
- input_processor=_upload_from_memory_input_processor,
214
- )
215
- def upload_from_memory(
216
- self,
217
- *,
218
- key: Optional[str] = None,
219
- name: Optional[str] = None,
220
- blob_file_path: str,
221
- content_type: str,
222
- content: Union[str, bytes],
223
- folder_key: Optional[str] = None,
224
- folder_path: Optional[str] = None,
225
- ) -> None:
226
- """Upload content from memory to a bucket.
227
-
228
- Args:
229
- key (Optional[str]): The key of the bucket.
230
- name (Optional[str]): The name of the bucket.
231
- blob_file_path (str): The path where the content will be stored in the bucket.
232
- content_type (str): The MIME type of the content.
233
- content (Union[str, bytes]): The content to upload (string or bytes).
234
- folder_key (Optional[str]): The key of the folder where the bucket resides.
235
- folder_path (Optional[str]): The path of the folder where the bucket resides.
236
-
237
- Raises:
238
- ValueError: If neither key nor name is provided.
239
- Exception: If the bucket with the specified key or name is not found.
240
- """
241
- bucket = self.retrieve(
242
- name=name, key=key, folder_key=folder_key, folder_path=folder_path
243
- )
244
-
245
- spec = self._retrieve_writeri_spec(
246
- bucket.id,
247
- content_type,
248
- blob_file_path,
249
- folder_key=folder_key,
250
- folder_path=folder_path,
251
- )
252
-
253
- result = self.request(
254
- spec.method,
255
- url=spec.endpoint,
256
- params=spec.params,
257
- headers=spec.headers,
258
- ).json()
259
-
260
- write_uri = result["Uri"]
261
-
262
- headers = {
263
- key: value
264
- for key, value in zip(
265
- result["Headers"]["Keys"], result["Headers"]["Values"], strict=False
266
- )
267
- }
268
-
269
- # Convert string to bytes if needed
270
- if isinstance(content, str):
271
- content = content.encode("utf-8")
272
-
273
- if result["RequiresAuth"]:
274
- self.request("PUT", write_uri, headers=headers, content=content)
275
- else:
276
- request("PUT", write_uri, headers=headers, content=content)
277
-
278
- async def upload_from_memory_async(
279
- self,
280
- *,
281
- key: Optional[str] = None,
282
- name: Optional[str] = None,
283
- blob_file_path: str,
284
- content_type: str,
285
- content: Union[str, bytes],
286
- folder_key: Optional[str] = None,
287
- folder_path: Optional[str] = None,
288
- ) -> None:
289
- """Asynchronously upload content from memory to a bucket.
290
-
291
- Args:
292
- key (Optional[str]): The key of the bucket.
293
- name (Optional[str]): The name of the bucket.
294
- blob_file_path (str): The path where the content will be stored in the bucket.
295
- content_type (str): The MIME type of the content.
296
- content (Union[str, bytes]): The content to upload (string or bytes).
297
- folder_key (Optional[str]): The key of the folder where the bucket resides.
298
- folder_path (Optional[str]): The path of the folder where the bucket resides.
299
-
300
- Raises:
301
- ValueError: If neither key nor name is provided.
302
- Exception: If the bucket with the specified key or name is not found.
303
- """
304
- bucket = await self.retrieve_async(
305
- name=name, key=key, folder_key=folder_key, folder_path=folder_path
306
- )
307
-
308
- bucket_id = bucket["Id"]
309
-
310
- spec = self._retrieve_writeri_spec(
311
- bucket_id,
312
- content_type,
313
- blob_file_path,
314
- folder_key=folder_key,
315
- folder_path=folder_path,
316
- )
317
-
318
- result = (
319
- await self.request_async(
320
- spec.method,
321
- url=spec.endpoint,
322
- params=spec.params,
323
- headers=spec.headers,
324
- )
325
- ).json()
326
-
327
- write_uri = result["Uri"]
328
-
329
- headers = {
330
- key: value
331
- for key, value in zip(
332
- result["Headers"]["Keys"], result["Headers"]["Values"], strict=False
333
- )
334
- }
335
-
336
- # Convert string to bytes if needed
337
- if isinstance(content, str):
338
- content = content.encode("utf-8")
240
+ await self.custom_client_async.put(
241
+ write_uri, headers=headers, content=content
242
+ )
339
243
 
340
- if result["RequiresAuth"]:
341
- await self.request_async("PUT", write_uri, headers=headers, content=content)
342
- else:
343
- request("PUT", write_uri, headers=headers, content=content)
244
+ if source_path is not None:
245
+ with open(source_path, "rb") as file:
246
+ if result["RequiresAuth"]:
247
+ await self.request_async(
248
+ "PUT", write_uri, headers=headers, files={"file": file}
249
+ )
250
+ else:
251
+ await self.custom_client_async.put(
252
+ write_uri, headers=headers, files={"file": file}
253
+ )
344
254
 
345
255
  @infer_bindings()
346
256
  @traced(name="buckets_retrieve", run_type="uipath")
@@ -15,8 +15,8 @@ from ..models import IngestionInProgressException
15
15
  from ..models.context_grounding import ContextGroundingQueryResponse
16
16
  from ..models.context_grounding_index import ContextGroundingIndex
17
17
  from ..tracing._traced import traced
18
- from . import BucketsService
19
18
  from ._base_service import BaseService
19
+ from .buckets_service import BucketsService
20
20
  from .folder_service import FolderService
21
21
 
22
22
 
@@ -85,7 +85,7 @@ class ContextGroundingService(FolderContext, BaseService):
85
85
  content_type=content_type,
86
86
  )
87
87
  else:
88
- self._buckets_service.upload_from_memory(
88
+ self._buckets_service.upload(
89
89
  name=bucket_name,
90
90
  content=content,
91
91
  blob_file_path=blob_file_path,
@@ -137,9 +137,9 @@ class ContextGroundingService(FolderContext, BaseService):
137
137
  content_type=content_type,
138
138
  )
139
139
  else:
140
- await self._buckets_service.upload_from_memory_async(
140
+ await self._buckets_service.upload_async(
141
141
  name=bucket_name,
142
- content=content, # type: ignore
142
+ content=content,
143
143
  blob_file_path=blob_file_path,
144
144
  folder_path=bucket_folder_path,
145
145
  content_type=content_type,
@@ -1,4 +1,4 @@
1
- _CONNECTION_STRING = ""
1
+ _CONNECTION_STRING = "InstrumentationKey=d3da6dfc-5231-4d72-9696-f680a64683b8;IngestionEndpoint=https://westeurope-5.in.applicationinsights.azure.com/;LiveEndpoint=https://westeurope.livediagnostics.monitor.azure.com/;ApplicationId=9b73b209-6c6a-4d4a-9549-b922cef418d5"
2
2
 
3
3
  _APP_INSIGHTS_EVENT_MARKER_ATTRIBUTE = "APPLICATION_INSIGHTS_EVENT_MARKER_ATTRIBUTE"
4
4
  _OTEL_RESOURCE_ATTRIBUTES = "OTEL_RESOURCE_ATTRIBUTES"
@@ -261,7 +261,7 @@ class TestBucketsService:
261
261
  content=b"test content",
262
262
  )
263
263
 
264
- service.upload_from_memory(
264
+ service.upload(
265
265
  key=bucket_key,
266
266
  blob_file_path="test-file.txt",
267
267
  content_type="text/plain",