uipath 2.0.73__tar.gz → 2.0.74__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 (200) hide show
  1. {uipath-2.0.73 → uipath-2.0.74}/PKG-INFO +2 -1
  2. uipath-2.0.74/docs/FAQ.md +289 -0
  3. {uipath-2.0.73 → uipath-2.0.74}/pyproject.toml +6 -4
  4. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/_client_credentials.py +2 -3
  5. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/_portal_service.py +31 -4
  6. uipath-2.0.74/src/uipath/_cli/_utils/_folders.py +35 -0
  7. uipath-2.0.74/src/uipath/_cli/_utils/_processes.py +54 -0
  8. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_auth.py +51 -46
  9. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_invoke.py +19 -18
  10. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_publish.py +44 -38
  11. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/_base_service.py +10 -10
  12. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/attachments_service.py +6 -5
  13. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/buckets_service.py +4 -8
  14. uipath-2.0.74/src/uipath/_utils/_ssl_context.py +54 -0
  15. uipath-2.0.74/uv.lock +3765 -0
  16. uipath-2.0.73/docs/FAQ.md +0 -77
  17. uipath-2.0.73/src/uipath/_cli/_utils/_folders.py +0 -28
  18. uipath-2.0.73/src/uipath/_cli/_utils/_processes.py +0 -49
  19. uipath-2.0.73/uv.lock +0 -3517
  20. {uipath-2.0.73 → uipath-2.0.74}/.cursorrules +0 -0
  21. {uipath-2.0.73 → uipath-2.0.74}/.editorconfig +0 -0
  22. {uipath-2.0.73 → uipath-2.0.74}/.gitattributes +0 -0
  23. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/cd.yml +0 -0
  24. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/ci.yml +0 -0
  25. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/commitlint.yml +0 -0
  26. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/lint.yml +0 -0
  27. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/publish-dev.yml +0 -0
  28. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/publish-docs.yml +0 -0
  29. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/slack.yml +0 -0
  30. {uipath-2.0.73 → uipath-2.0.74}/.github/workflows/test.yml +0 -0
  31. {uipath-2.0.73 → uipath-2.0.74}/.gitignore +0 -0
  32. {uipath-2.0.73 → uipath-2.0.74}/.pre-commit-config.yaml +0 -0
  33. {uipath-2.0.73 → uipath-2.0.74}/.python-version +0 -0
  34. {uipath-2.0.73 → uipath-2.0.74}/.vscode/extensions.json +0 -0
  35. {uipath-2.0.73 → uipath-2.0.74}/.vscode/launch.json +0 -0
  36. {uipath-2.0.73 → uipath-2.0.74}/.vscode/settings.json +0 -0
  37. {uipath-2.0.73 → uipath-2.0.74}/CONTRIBUTING.md +0 -0
  38. {uipath-2.0.73 → uipath-2.0.74}/LICENSE +0 -0
  39. {uipath-2.0.73 → uipath-2.0.74}/README.md +0 -0
  40. {uipath-2.0.73 → uipath-2.0.74}/docs/CONTRIBUTING.md +0 -0
  41. {uipath-2.0.73 → uipath-2.0.74}/docs/assets/env-preparation-failed-dark.png +0 -0
  42. {uipath-2.0.73 → uipath-2.0.74}/docs/assets/env-preparation-failed-light.png +0 -0
  43. {uipath-2.0.73 → uipath-2.0.74}/docs/assets/favicon.png +0 -0
  44. {uipath-2.0.73 → uipath-2.0.74}/docs/assets/logo-dark.svg +0 -0
  45. {uipath-2.0.73 → uipath-2.0.74}/docs/assets/logo-light.svg +0 -0
  46. {uipath-2.0.73 → uipath-2.0.74}/docs/cli/index.md +0 -0
  47. {uipath-2.0.73 → uipath-2.0.74}/docs/core/actions.md +0 -0
  48. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  49. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets/cloud_env_var_light.gif +0 -0
  50. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  51. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  52. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets/copy_path_dark.png +0 -0
  53. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets/copy_path_light.png +0 -0
  54. {uipath-2.0.73 → uipath-2.0.74}/docs/core/assets.md +0 -0
  55. {uipath-2.0.73 → uipath-2.0.74}/docs/core/attachments.md +0 -0
  56. {uipath-2.0.73 → uipath-2.0.74}/docs/core/buckets.md +0 -0
  57. {uipath-2.0.73 → uipath-2.0.74}/docs/core/connections.md +0 -0
  58. {uipath-2.0.73 → uipath-2.0.74}/docs/core/context_grounding.md +0 -0
  59. {uipath-2.0.73 → uipath-2.0.74}/docs/core/environment_variables.md +0 -0
  60. {uipath-2.0.73 → uipath-2.0.74}/docs/core/getting_started.md +0 -0
  61. {uipath-2.0.73 → uipath-2.0.74}/docs/core/jobs.md +0 -0
  62. {uipath-2.0.73 → uipath-2.0.74}/docs/core/processes.md +0 -0
  63. {uipath-2.0.73 → uipath-2.0.74}/docs/core/queues.md +0 -0
  64. {uipath-2.0.73 → uipath-2.0.74}/docs/core/traced.md +0 -0
  65. {uipath-2.0.73 → uipath-2.0.74}/docs/hooks.py +0 -0
  66. {uipath-2.0.73 → uipath-2.0.74}/docs/index.md +0 -0
  67. {uipath-2.0.73 → uipath-2.0.74}/docs/javascripts/extra.js +0 -0
  68. {uipath-2.0.73 → uipath-2.0.74}/docs/overrides/main.html +0 -0
  69. {uipath-2.0.73 → uipath-2.0.74}/docs/overrides/partials/actions.html +0 -0
  70. {uipath-2.0.73 → uipath-2.0.74}/docs/overrides/partials/logo.html +0 -0
  71. {uipath-2.0.73 → uipath-2.0.74}/docs/release_policy.md +0 -0
  72. {uipath-2.0.73 → uipath-2.0.74}/docs/stylesheets/extra.css +0 -0
  73. {uipath-2.0.73 → uipath-2.0.74}/justfile +0 -0
  74. {uipath-2.0.73 → uipath-2.0.74}/mkdocs.yml +0 -0
  75. {uipath-2.0.73 → uipath-2.0.74}/py.typed +0 -0
  76. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/__init__.py +0 -0
  77. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/README.md +0 -0
  78. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/__init__.py +0 -0
  79. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  80. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/_models.py +0 -0
  81. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  82. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/_utils.py +0 -0
  83. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/auth_config.json +0 -0
  84. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/index.html +0 -0
  85. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/localhost.crt +0 -0
  86. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_auth/localhost.key +0 -0
  87. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  88. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  89. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  90. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_runtime/_logging.py +0 -0
  91. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  92. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  93. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_templates/.rels.template +0 -0
  94. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  95. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_templates/main.py.template +0 -0
  96. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  97. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_common.py +0 -0
  98. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_console.py +0 -0
  99. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_constants.py +0 -0
  100. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_debug.py +0 -0
  101. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_input_args.py +0 -0
  102. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  103. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/_utils/_tracing.py +0 -0
  104. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_deploy.py +0 -0
  105. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_init.py +0 -0
  106. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_new.py +0 -0
  107. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_pack.py +0 -0
  108. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/cli_run.py +0 -0
  109. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/middlewares.py +0 -0
  110. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_cli/spinner.py +0 -0
  111. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_config.py +0 -0
  112. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_execution_context.py +0 -0
  113. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_folder_context.py +0 -0
  114. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/__init__.py +0 -0
  115. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/actions_service.py +0 -0
  116. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/api_client.py +0 -0
  117. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/assets_service.py +0 -0
  118. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/connections_service.py +0 -0
  119. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/context_grounding_service.py +0 -0
  120. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/folder_service.py +0 -0
  121. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/jobs_service.py +0 -0
  122. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/llm_gateway_service.py +0 -0
  123. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/processes_service.py +0 -0
  124. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_services/queues_service.py +0 -0
  125. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_uipath.py +0 -0
  126. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/__init__.py +0 -0
  127. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_endpoint.py +0 -0
  128. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_infer_bindings.py +0 -0
  129. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_logs.py +0 -0
  130. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_read_overwrites.py +0 -0
  131. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_request_override.py +0 -0
  132. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_request_spec.py +0 -0
  133. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_url.py +0 -0
  134. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/_user_agent.py +0 -0
  135. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/_utils/constants.py +0 -0
  136. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/__init__.py +0 -0
  137. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/action_schema.py +0 -0
  138. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/actions.py +0 -0
  139. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/assets.py +0 -0
  140. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/attachment.py +0 -0
  141. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/buckets.py +0 -0
  142. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/connections.py +0 -0
  143. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/context_grounding.py +0 -0
  144. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/context_grounding_index.py +0 -0
  145. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/errors.py +0 -0
  146. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/exceptions.py +0 -0
  147. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/interrupt_models.py +0 -0
  148. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/job.py +0 -0
  149. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/llm_gateway.py +0 -0
  150. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/processes.py +0 -0
  151. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/models/queues.py +0 -0
  152. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/py.typed +0 -0
  153. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/telemetry/__init__.py +0 -0
  154. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/telemetry/_constants.py +0 -0
  155. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/telemetry/_track.py +0 -0
  156. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/tracing/__init__.py +0 -0
  157. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/tracing/_otel_exporters.py +0 -0
  158. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/tracing/_traced.py +0 -0
  159. {uipath-2.0.73 → uipath-2.0.74}/src/uipath/tracing/_utils.py +0 -0
  160. {uipath-2.0.73 → uipath-2.0.74}/tests/__init__.py +0 -0
  161. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/conftest.py +0 -0
  162. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/mocks/bindings_script.py +0 -0
  163. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/mocks/pyproject.toml +0 -0
  164. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/mocks/simple_script.py +0 -0
  165. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/mocks/uipath-mock.json +0 -0
  166. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  167. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_hitl.py +0 -0
  168. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_init.py +0 -0
  169. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_invoke.py +0 -0
  170. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_new.py +0 -0
  171. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_pack.py +0 -0
  172. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_publish.py +0 -0
  173. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_run.py +0 -0
  174. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/test_utils.py +0 -0
  175. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/utils/project_details.py +0 -0
  176. {uipath-2.0.73 → uipath-2.0.74}/tests/cli/utils/uipath_json.py +0 -0
  177. {uipath-2.0.73 → uipath-2.0.74}/tests/conftest.py +0 -0
  178. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/conftest.py +0 -0
  179. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_actions_service.py +0 -0
  180. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_api_client.py +0 -0
  181. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_assets_service.py +0 -0
  182. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_attachments_service.py +0 -0
  183. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_base_service.py +0 -0
  184. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_buckets_service.py +0 -0
  185. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_connections_service.py +0 -0
  186. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_context_grounding_service.py +0 -0
  187. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_folder_service.py +0 -0
  188. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_jobs_service.py +0 -0
  189. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_llm_integration.py +0 -0
  190. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_llm_service.py +0 -0
  191. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_processes_service.py +0 -0
  192. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_queues_service.py +0 -0
  193. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  194. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/test_bindings_inference.py +0 -0
  195. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/test_config.py +0 -0
  196. {uipath-2.0.73 → uipath-2.0.74}/tests/sdk/test_overwrites.py +0 -0
  197. {uipath-2.0.73 → uipath-2.0.74}/tests/tracing/test_otel_exporters.py +0 -0
  198. {uipath-2.0.73 → uipath-2.0.74}/tests/tracing/test_span_utils.py +0 -0
  199. {uipath-2.0.73 → uipath-2.0.74}/tests/tracing/test_traced.py +0 -0
  200. {uipath-2.0.73 → uipath-2.0.74}/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.73
3
+ Version: 2.0.74
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
@@ -24,6 +24,7 @@ Requires-Dist: python-dotenv>=1.0.1
24
24
  Requires-Dist: rich>=13.0.0
25
25
  Requires-Dist: tenacity>=9.0.0
26
26
  Requires-Dist: tomli>=2.2.1
27
+ Requires-Dist: truststore>=0.10.1
27
28
  Provides-Extra: langchain
28
29
  Requires-Dist: uipath-langchain<0.1.0,>=0.0.88; extra == 'langchain'
29
30
  Description-Content-Type: text/markdown
@@ -0,0 +1,289 @@
1
+ # Frequently Asked Questions (FAQ)
2
+
3
+ ### Q: Why am I getting a "Failed to prepare environment" error when deploying my python agent to UiPath Cloud Platform?
4
+
5
+ #### Error Message
6
+
7
+ ```json
8
+ {
9
+ "Code": "Serverless.PythonCodedAgent.PrepareEnvironmentError",
10
+ "Title": "Failed to prepare environment",
11
+ "Detail": "An error occurred while installing the package dependencies. Please try again. If the error persists, please contact support.",
12
+ "Category": "System",
13
+ "Status": null
14
+ }
15
+ ```
16
+
17
+ #### Visual Example
18
+
19
+ <picture data-light="../assets/env-preparation-failed-light.png" data-dark="../assets/env-preparation-failed-dark.png">
20
+ <source
21
+ media="(prefers-color-scheme: dark)"
22
+ srcset="../assets/env-preparation-failed-dark.png"
23
+ />
24
+ <img
25
+ src="../assets/env-preparation-failed-light.png"
26
+ />
27
+ </picture>
28
+
29
+ *Example of the error as it appears in UiPath Cloud Platform*
30
+
31
+ #### Description
32
+
33
+ This error might occur when deploying coded-agents to UiPath Cloud Platform, even though the same project might work correctly in your local environment. The issue is often related to how Python packages are discovered and distributed during the cloud deployment process.
34
+
35
+ #### Common Causes
36
+
37
+ 1. Multiple top-level packages or modules in your project structure
38
+ 2. Improper configuration or formatting in the pyproject.toml or requirements.txt files
39
+
40
+ #### Solution
41
+
42
+ ##### 1. Check Your Project Structure
43
+
44
+ - Ensure your Python files are organized under a non top-level directory (e.g., using the `src` layout)
45
+ - Follow the recommended project structure:
46
+
47
+ ```plaintext
48
+ project_root/
49
+ ├── src/
50
+ │ └── your_package/
51
+ │ ├── __init__.py
52
+ │ └── your_modules.py
53
+ ├── pyproject.toml
54
+ └── setup.cfg/setup.py
55
+ ```
56
+
57
+ ##### 2. Configure Package Discovery
58
+
59
+ If you need to maintain your current project structure, you can configure custom package discovery in your `pyproject.toml`:
60
+
61
+ ```toml
62
+ [tool.setuptools]
63
+ py-modules = []
64
+ packages = ["your_package"]
65
+ ```
66
+
67
+ ##### 3. Verify Dependencies
68
+
69
+ - Ensure all required dependencies are properly listed in your `requirements.txt` or `pyproject.toml`
70
+
71
+ #### Reference
72
+
73
+ For more detailed information about package discovery and configuration, refer to the [official setuptools documentation](https://setuptools.pypa.io/en/latest/userguide/package_discovery.html).
74
+
75
+ ### Q: Why am I getting timeouts or "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed" errors?
76
+
77
+ The UiPath CLI automatically works with your corporate network setup, including proxy servers and security tools like ZScaler, by leveraging your system's native SSL certificate store.
78
+
79
+ #### Proxy Configuration
80
+
81
+ Configure these environment variables to route CLI traffic through your corporate proxy:
82
+
83
+ //// tab | Linux/macOS Bash
84
+
85
+ <!-- termynal -->
86
+ ```bash
87
+ > export HTTP_PROXY=http://proxy.company.com:8080
88
+ > export HTTPS_PROXY=https://proxy.company.com:8080
89
+ > export NO_PROXY=localhost,127.0.0.1
90
+ > uipath auth
91
+ ⠋ Authenticating with UiPath ...
92
+ ✓ Authentication successful.
93
+ ```
94
+
95
+ ////
96
+
97
+ //// tab | Windows PowerShell
98
+
99
+ <!-- termynal -->
100
+ ```powershell
101
+ > $env:HTTP_PROXY="http://proxy.company.com:8080"
102
+ > $env:HTTPS_PROXY="https://proxy.company.com:8080"
103
+ > $env:NO_PROXY="localhost,127.0.0.1"
104
+ > uipath auth
105
+ ⠋ Authenticating with UiPath ...
106
+ ✓ Authentication successful.
107
+ ```
108
+
109
+ ////
110
+
111
+ //// tab | Windows CMD
112
+
113
+ <!-- termynal -->
114
+ ```cmd
115
+ > set HTTP_PROXY=http://proxy.company.com:8080
116
+ > set HTTPS_PROXY=https://proxy.company.com:8080
117
+ > set NO_PROXY=localhost,127.0.0.1
118
+ > uipath auth
119
+ ⠋ Authenticating with UiPath ...
120
+ ✓ Authentication successful.
121
+ ```
122
+
123
+ ////
124
+
125
+ #### Proxy Authentication
126
+
127
+ //// tab | Linux/macOS Bash
128
+
129
+ <!-- termynal -->
130
+ ```bash
131
+ > export HTTP_PROXY=http://username:password@proxy.company.com:8080
132
+ > export HTTPS_PROXY=https://username:password@proxy.company.com:8080
133
+ > export NO_PROXY=localhost,127.0.0.1
134
+ > uipath publish
135
+ ⠋ Fetching available package feeds...
136
+ ✓ Package published successfully!
137
+ ```
138
+
139
+ ////
140
+
141
+ //// tab | Windows PowerShell
142
+
143
+ <!-- termynal -->
144
+ ```powershell
145
+ > $env:HTTP_PROXY="http://username:password@proxy.company.com:8080"
146
+ > $env:HTTPS_PROXY="https://username:password@proxy.company.com:8080"
147
+ > $env:NO_PROXY="localhost,127.0.0.1"
148
+ > uipath publish
149
+ ⠋ Fetching available package feeds...
150
+ ✓ Package published successfully!
151
+ ```
152
+
153
+ ////
154
+
155
+ //// tab | Windows CMD
156
+
157
+ <!-- termynal -->
158
+ ```cmd
159
+ > set HTTP_PROXY=http://username:password@proxy.company.com:8080
160
+ > set HTTPS_PROXY=https://username:password@proxy.company.com:8080
161
+ > set NO_PROXY=localhost,127.0.0.1
162
+ > uipath publish
163
+ ⠋ Fetching available package feeds...
164
+ ✓ Package published successfully!
165
+ ```
166
+
167
+ ////
168
+
169
+ /// tip
170
+ **For IT Administrators**: Add these environment variables to your Group Policy or system configuration:
171
+
172
+ ```bash
173
+ HTTP_PROXY=http://your-proxy.company.com:8080
174
+ HTTPS_PROXY=https://your-proxy.company.com:8080
175
+ NO_PROXY=localhost,127.0.0.1,*.company.com
176
+ ```
177
+ ///
178
+
179
+ /// warning
180
+ The CLI uses a local HTTP server for the authentication callback. You must **exclude localhost** from your proxy using `NO_PROXY=localhost,127.0.0.1` or authentication will fail.
181
+ ///
182
+
183
+ ##### Troubleshooting
184
+ <!-- termynal -->
185
+ ```bash
186
+ > # Test proxy connectivity
187
+ > curl -v --proxy $HTTP_PROXY https://cloud.uipath.com
188
+ * Trying 192.168.1.100:8080...
189
+ * Connected to proxy.company.com (192.168.1.100) port 8080
190
+ ✓ Connection successful
191
+
192
+ > # Test localhost exclusion
193
+ > curl --proxy $HTTP_PROXY http://localhost:8080
194
+ * Bypassing proxy for localhost
195
+ ✓ Direct connection to localhost successful
196
+ ```
197
+
198
+ #### SSL Certificates
199
+
200
+ The UiPath CLI automatically uses your system's certificate store (Windows Certificate Store, macOS Keychain, Linux ca-certificates). Corporate certificates installed via Group Policy or IT tools will be automatically recognized.
201
+
202
+ ##### Troubleshooting SSL Issues
203
+
204
+ If you encounter SSL certificate errors:
205
+
206
+ 1. **Disable SSL verification** (for testing only):
207
+
208
+ //// tab | Linux/macOS Bash
209
+
210
+ <!-- termynal -->
211
+ ```bash
212
+ > export UIPATH_DISABLE_SSL_VERIFY=true
213
+ > uipath auth
214
+ ⠋ Authenticating with UiPath ...
215
+ ✓ Authentication successful.
216
+ ```
217
+
218
+ ////
219
+
220
+ //// tab | Windows PowerShell
221
+
222
+ <!-- termynal -->
223
+ ```powershell
224
+ > $env:UIPATH_DISABLE_SSL_VERIFY="true"
225
+ > uipath auth
226
+ ⠋ Authenticating with UiPath ...
227
+ ✓ Authentication successful.
228
+ ```
229
+
230
+ ////
231
+
232
+ //// tab | Windows CMD
233
+
234
+ <!-- termynal -->
235
+ ```cmd
236
+ > set UIPATH_DISABLE_SSL_VERIFY=true
237
+ > uipath auth
238
+ ⠋ Authenticating with UiPath ...
239
+ ✓ Authentication successful.
240
+ ```
241
+
242
+ ////
243
+
244
+ 2. **Use custom certificate bundle** (if needed):
245
+
246
+ //// tab | Linux/macOS Bash
247
+
248
+ <!-- termynal -->
249
+ ```bash
250
+ > export SSL_CERT_FILE=/path/to/company-ca-bundle.pem
251
+ > export REQUESTS_CA_BUNDLE=/path/to/company-ca-bundle.pem
252
+ > uipath publish
253
+ ⠋ Publishing most recent package...
254
+ ✓ Package published successfully!
255
+ ```
256
+
257
+ ////
258
+
259
+ //// tab | Windows PowerShell
260
+
261
+ <!-- termynal -->
262
+ ```powershell
263
+ > $env:SSL_CERT_FILE="C:\certs\company-ca-bundle.pem"
264
+ > $env:REQUESTS_CA_BUNDLE="C:\certs\company-ca-bundle.pem"
265
+ > uipath publish
266
+ ⠋ Publishing most recent package...
267
+ ✓ Package published successfully!
268
+ ```
269
+
270
+ ////
271
+
272
+ //// tab | Windows CMD
273
+
274
+ <!-- termynal -->
275
+ ```cmd
276
+ > set SSL_CERT_FILE=C:\certs\company-ca-bundle.pem
277
+ > set REQUESTS_CA_BUNDLE=C:\certs\company-ca-bundle.pem
278
+ > uipath publish
279
+ ⠋ Publishing most recent package...
280
+ ✓ Package published successfully!
281
+ ```
282
+
283
+ ////
284
+
285
+
286
+ ---
287
+
288
+ *Note: This FAQ will be updated as new information becomes available. If you continue experiencing issues after following these solutions, please contact UiPath support.*
289
+
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "uipath"
3
- version = "2.0.73"
3
+ version = "2.0.74"
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"
@@ -15,6 +15,7 @@ dependencies = [
15
15
  "pathlib>=1.0.1",
16
16
  "rich>=13.0.0",
17
17
  "azure-monitor-opentelemetry>=1.6.8",
18
+ "truststore>=0.10.1"
18
19
  ]
19
20
  classifiers = [
20
21
  "Development Status :: 3 - Alpha",
@@ -48,6 +49,9 @@ dev = [
48
49
  "ruff>=0.9.4",
49
50
  "rust-just>=1.39.0",
50
51
  "pytest>=7.4.0",
52
+ "pytest-asyncio>=1.0.0",
53
+ "pytest-httpx>=0.35.0",
54
+ "pytest-trio>=0.8.0",
51
55
  "pytest-cov>=4.1.0",
52
56
  "pytest-mock>=3.11.1",
53
57
  "pre-commit>=4.1.0",
@@ -57,12 +61,9 @@ dev = [
57
61
  "termynal>=0.13.0",
58
62
  "mkdocs-simple-hooks>=0.1.5",
59
63
  "mkdocs-click>=0.9.0",
60
- "pytest-asyncio>=0.26.0",
61
64
  "mkdocs-open-in-new-tab>=1.0.8",
62
65
  "toml>=0.10.2",
63
66
  "inflection>=0.5.1",
64
- "pytest-httpx>=0.35.0",
65
- "pytest-trio>=0.8.0",
66
67
  "types-toml>=0.10.8",
67
68
  ]
68
69
 
@@ -122,6 +123,7 @@ testpaths = ["tests"]
122
123
  python_files = "test_*.py"
123
124
  addopts = "-ra -q --cov"
124
125
  asyncio_default_fixture_loop_scope = "function"
126
+ asyncio_mode = "auto"
125
127
 
126
128
  [tool.coverage.report]
127
129
  show_missing = true
@@ -3,6 +3,7 @@ from urllib.parse import urlparse
3
3
 
4
4
  import httpx
5
5
 
6
+ from ..._utils._ssl_context import get_httpx_client_kwargs
6
7
  from .._utils._console import ConsoleLogger
7
8
  from ._models import TokenData
8
9
  from ._utils import parse_access_token, update_env_file
@@ -91,13 +92,11 @@ class ClientCredentialsService:
91
92
  }
92
93
 
93
94
  try:
94
- with httpx.Client(timeout=30.0) as client:
95
+ with httpx.Client(**get_httpx_client_kwargs()) as client:
95
96
  response = client.post(token_url, data=data)
96
-
97
97
  match response.status_code:
98
98
  case 200:
99
99
  token_data = response.json()
100
- # Convert to our TokenData format
101
100
  return {
102
101
  "access_token": token_data["access_token"],
103
102
  "token_type": token_data.get("token_type", "Bearer"),
@@ -5,6 +5,7 @@ from typing import Optional
5
5
  import click
6
6
  import httpx
7
7
 
8
+ from ..._utils._ssl_context import get_httpx_client_kwargs
8
9
  from .._utils._console import ConsoleLogger
9
10
  from ._models import TenantsAndOrganizationInfoResponse, TokenData
10
11
  from ._oidc_utils import get_auth_config
@@ -16,7 +17,6 @@ from ._utils import (
16
17
  )
17
18
 
18
19
  console = ConsoleLogger()
19
- client = httpx.Client(follow_redirects=True, timeout=30.0)
20
20
 
21
21
 
22
22
  class PortalService:
@@ -27,6 +27,8 @@ class PortalService:
27
27
  domain: Optional[str] = None
28
28
  selected_tenant: Optional[str] = None
29
29
 
30
+ _client: Optional[httpx.Client] = None
31
+
30
32
  _tenants_and_organizations: Optional[TenantsAndOrganizationInfoResponse] = None
31
33
 
32
34
  def __init__(
@@ -39,13 +41,32 @@ class PortalService:
39
41
  self.access_token = access_token
40
42
  self.prt_id = prt_id
41
43
 
44
+ self._client = httpx.Client(**get_httpx_client_kwargs())
45
+
46
+ def close(self):
47
+ """Explicitly close the HTTP client."""
48
+ if self._client:
49
+ self._client.close()
50
+ self._client = None
51
+
52
+ def __enter__(self):
53
+ """Enter the runtime context related to this object."""
54
+ return self
55
+
56
+ def __exit__(self, exc_type, exc_value, traceback):
57
+ """Exit the runtime context and close the HTTP client."""
58
+ self.close()
59
+
42
60
  def update_token_data(self, token_data: TokenData):
43
61
  self.access_token = token_data["access_token"]
44
62
  self.prt_id = get_parsed_token_data(token_data).get("prt_id")
45
63
 
46
64
  def get_tenants_and_organizations(self) -> TenantsAndOrganizationInfoResponse:
65
+ if self._client is None:
66
+ raise RuntimeError("HTTP client is not initialized")
67
+
47
68
  url = f"https://{self.domain}.uipath.com/{self.prt_id}/portal_/api/filtering/leftnav/tenantsAndOrganizationInfo"
48
- response = client.get(
69
+ response = self._client.get(
49
70
  url, headers={"Authorization": f"Bearer {self.access_token}"}
50
71
  )
51
72
  if response.status_code < 400:
@@ -72,6 +93,9 @@ class PortalService:
72
93
  return f"https://{self.domain}.uipath.com/{account_name}/{self.selected_tenant}/orchestrator_"
73
94
 
74
95
  def post_refresh_token_request(self, refresh_token: str) -> TokenData:
96
+ if self._client is None:
97
+ raise RuntimeError("HTTP client is not initialized")
98
+
75
99
  url = f"https://{self.domain}.uipath.com/identity_/connect/token"
76
100
  client_id = get_auth_config().get("client_id")
77
101
 
@@ -83,7 +107,7 @@ class PortalService:
83
107
 
84
108
  headers = {"Content-Type": "application/x-www-form-urlencoded"}
85
109
 
86
- response = client.post(url, data=data, headers=headers)
110
+ response = self._client.post(url, data=data, headers=headers)
87
111
  if response.status_code < 400:
88
112
  return response.json()
89
113
  elif response.status_code == 401:
@@ -137,6 +161,9 @@ class PortalService:
137
161
  update_env_file(updated_env_contents)
138
162
 
139
163
  def post_auth(self, base_url: str) -> None:
164
+ if self._client is None:
165
+ raise RuntimeError("HTTP client is not initialized")
166
+
140
167
  or_base_url = (
141
168
  f"{base_url}/orchestrator_"
142
169
  if base_url
@@ -148,7 +175,7 @@ class PortalService:
148
175
 
149
176
  try:
150
177
  [try_enable_first_run_response, acquire_license_response] = [
151
- client.post(
178
+ self._client.post(
152
179
  url,
153
180
  headers={"Authorization": f"Bearer {self.access_token}"},
154
181
  )
@@ -0,0 +1,35 @@
1
+ from typing import Optional, Tuple
2
+
3
+ import httpx
4
+
5
+ from ..._utils._ssl_context import get_httpx_client_kwargs
6
+ from ._console import ConsoleLogger
7
+
8
+ console = ConsoleLogger()
9
+
10
+
11
+ def get_personal_workspace_info(
12
+ base_url: str, token: str
13
+ ) -> Tuple[Optional[str], Optional[str]]:
14
+ user_url = f"{base_url}/orchestrator_/odata/Users/UiPath.Server.Configuration.OData.GetCurrentUserExtended?$expand=PersonalWorkspace"
15
+
16
+ with httpx.Client(**get_httpx_client_kwargs()) as client:
17
+ user_response = client.get(
18
+ user_url, headers={"Authorization": f"Bearer {token}"}
19
+ )
20
+
21
+ if user_response.status_code != 200:
22
+ console.error(
23
+ "Error: Failed to fetch user info. Please try reauthenticating."
24
+ )
25
+ return None, None
26
+
27
+ user_data = user_response.json()
28
+ feed_id = user_data.get("PersonalWorskpaceFeedId")
29
+ personal_workspace = user_data.get("PersonalWorkspace")
30
+
31
+ if not personal_workspace or not feed_id or "Id" not in personal_workspace:
32
+ return None, None
33
+
34
+ folder_id = personal_workspace.get("Id")
35
+ return feed_id, folder_id
@@ -0,0 +1,54 @@
1
+ import json
2
+ import urllib.parse
3
+ from typing import Any
4
+
5
+ import httpx
6
+
7
+ from ..._utils._ssl_context import get_httpx_client_kwargs
8
+ from ._console import ConsoleLogger
9
+
10
+ console = ConsoleLogger()
11
+ odata_top_filter = 25
12
+
13
+
14
+ def get_release_info(
15
+ base_url: str,
16
+ token: str,
17
+ package_name: str,
18
+ package_version: str,
19
+ folder_id: str,
20
+ ) -> None | tuple[Any, Any] | tuple[None, None]:
21
+ headers = {
22
+ "Authorization": f"Bearer {token}",
23
+ "x-uipath-organizationunitid": str(folder_id),
24
+ }
25
+
26
+ release_url = f"{base_url}/orchestrator_/odata/Releases/UiPath.Server.Configuration.OData.ListReleases?$select=Id,Key,ProcessVersion&$top={odata_top_filter}&$filter=ProcessKey%20eq%20%27{urllib.parse.quote(package_name)}%27"
27
+
28
+ with httpx.Client(**get_httpx_client_kwargs()) as client:
29
+ response = client.get(release_url, headers=headers)
30
+
31
+ if response.status_code == 200:
32
+ try:
33
+ data = json.loads(response.text)
34
+ process = next(
35
+ process
36
+ for process in data["value"]
37
+ if process["ProcessVersion"] == package_version
38
+ )
39
+ release_id = process["Id"]
40
+ release_key = process["Key"]
41
+ return release_id, release_key
42
+ except KeyError:
43
+ console.warning("Warning: Failed to deserialize release data")
44
+ return None, None
45
+ except StopIteration:
46
+ console.error(
47
+ f"Error: No process with name '{package_name}' found in your workspace. Please publish the process first."
48
+ )
49
+ return None, None
50
+ else:
51
+ console.warning(
52
+ f"Warning: Failed to fetch release info {response.status_code}"
53
+ )
54
+ return None, None
@@ -92,6 +92,11 @@ def auth(
92
92
 
93
93
  Interactive mode (default): Opens browser for OAuth authentication.
94
94
  Unattended mode: Use --client-id, --client-secret and --base-url for client credentials flow.
95
+
96
+ Network options:
97
+ - Set HTTP_PROXY/HTTPS_PROXY/NO_PROXY environment variables for proxy configuration
98
+ - Set REQUESTS_CA_BUNDLE to specify a custom CA bundle for SSL verification
99
+ - Set UIPATH_DISABLE_SSL_VERIFY to disable SSL verification (not recommended)
95
100
  """
96
101
  # Check if client credentials are provided for unattended authentication
97
102
  if client_id and client_secret:
@@ -102,7 +107,6 @@ def auth(
102
107
  return
103
108
 
104
109
  with console.spinner("Authenticating with client credentials ..."):
105
- # Create service instance
106
110
  credentials_service = ClientCredentialsService(domain)
107
111
 
108
112
  # If base_url is provided, extract domain from it to override the CLI domain parameter
@@ -127,56 +131,57 @@ def auth(
127
131
 
128
132
  # Interactive authentication flow (existing logic)
129
133
  with console.spinner("Authenticating with UiPath ..."):
130
- portal_service = PortalService(domain)
131
-
132
- if not force:
133
- if (
134
- os.getenv("UIPATH_URL")
135
- and os.getenv("UIPATH_TENANT_ID")
136
- and os.getenv("UIPATH_ORGANIZATION_ID")
137
- ):
134
+ with PortalService(domain) as portal_service:
135
+ if not force:
136
+ if (
137
+ os.getenv("UIPATH_URL")
138
+ and os.getenv("UIPATH_TENANT_ID")
139
+ and os.getenv("UIPATH_ORGANIZATION_ID")
140
+ ):
141
+ try:
142
+ portal_service.ensure_valid_token()
143
+ console.success(
144
+ "Authentication successful.",
145
+ )
146
+ return
147
+ except Exception:
148
+ console.info(
149
+ "Authentication token is invalid. Please reauthenticate.",
150
+ )
151
+
152
+ auth_url, code_verifier, state = get_auth_url(domain)
153
+
154
+ webbrowser.open(auth_url, 1)
155
+ auth_config = get_auth_config()
156
+
157
+ console.link(
158
+ "If a browser window did not open, please open the following URL in your browser:",
159
+ auth_url,
160
+ )
161
+
162
+ server = HTTPServer(port=auth_config["port"])
163
+ token_data = server.start(state, code_verifier, domain)
164
+
165
+ if token_data:
166
+ portal_service.update_token_data(token_data)
167
+ update_auth_file(token_data)
168
+ access_token = token_data["access_token"]
169
+ update_env_file({"UIPATH_ACCESS_TOKEN": access_token})
170
+
171
+ tenants_and_organizations = (
172
+ portal_service.get_tenants_and_organizations()
173
+ )
174
+ base_url = select_tenant(domain, tenants_and_organizations)
138
175
  try:
139
- portal_service.ensure_valid_token()
176
+ portal_service.post_auth(base_url)
140
177
  console.success(
141
178
  "Authentication successful.",
142
179
  )
143
- return
144
180
  except Exception:
145
- console.info(
146
- "Authentication token is invalid. Please reauthenticate.",
181
+ console.error(
182
+ "Could not prepare the environment. Please try again.",
147
183
  )
148
-
149
- auth_url, code_verifier, state = get_auth_url(domain)
150
-
151
- webbrowser.open(auth_url, 1)
152
- auth_config = get_auth_config()
153
-
154
- console.link(
155
- "If a browser window did not open, please open the following URL in your browser:",
156
- auth_url,
157
- )
158
-
159
- server = HTTPServer(port=auth_config["port"])
160
- token_data = server.start(state, code_verifier, domain)
161
-
162
- if token_data:
163
- portal_service.update_token_data(token_data)
164
- update_auth_file(token_data)
165
- access_token = token_data["access_token"]
166
- update_env_file({"UIPATH_ACCESS_TOKEN": access_token})
167
-
168
- tenants_and_organizations = portal_service.get_tenants_and_organizations()
169
- base_url = select_tenant(domain, tenants_and_organizations)
170
- try:
171
- portal_service.post_auth(base_url)
172
- console.success(
173
- "Authentication successful.",
174
- )
175
- except Exception:
184
+ else:
176
185
  console.error(
177
- "Could not prepare the environment. Please try again.",
186
+ "Authentication failed. Please try again.",
178
187
  )
179
- else:
180
- console.error(
181
- "Authentication failed. Please try again.",
182
- )