uipath 2.1.24__tar.gz → 2.1.26__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.
Files changed (243) hide show
  1. {uipath-2.1.24 → uipath-2.1.26}/PKG-INFO +1 -1
  2. {uipath-2.1.24 → uipath-2.1.26}/pyproject.toml +1 -1
  3. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/__init__.py +1 -1
  4. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/_client_credentials.py +1 -1
  5. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/_oidc_utils.py +2 -1
  6. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/_portal_service.py +14 -6
  7. uipath-2.1.26/src/uipath/_cli/_auth/_url_utils.py +41 -0
  8. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/index.html +9 -1
  9. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_auth.py +25 -10
  10. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/_base_service.py +1 -1
  11. uipath-2.1.26/tests/cli/test_auth.py +141 -0
  12. uipath-2.1.26/tests/cli/test_portal_service_ensure_valid_token.py +336 -0
  13. uipath-2.1.26/tests/cli/test_portal_service_refresh_token.py +457 -0
  14. {uipath-2.1.24 → uipath-2.1.26}/uv.lock +1 -1
  15. {uipath-2.1.24 → uipath-2.1.26}/.cursorrules +0 -0
  16. {uipath-2.1.24 → uipath-2.1.26}/.editorconfig +0 -0
  17. {uipath-2.1.24 → uipath-2.1.26}/.gitattributes +0 -0
  18. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/cd.yml +0 -0
  19. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/ci.yml +0 -0
  20. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/commitlint.yml +0 -0
  21. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/lint.yml +0 -0
  22. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/publish-dev.yml +0 -0
  23. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/publish-docs.yml +0 -0
  24. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/slack.yml +0 -0
  25. {uipath-2.1.24 → uipath-2.1.26}/.github/workflows/test.yml +0 -0
  26. {uipath-2.1.24 → uipath-2.1.26}/.gitignore +0 -0
  27. {uipath-2.1.24 → uipath-2.1.26}/.pre-commit-config.yaml +0 -0
  28. {uipath-2.1.24 → uipath-2.1.26}/.python-version +0 -0
  29. {uipath-2.1.24 → uipath-2.1.26}/.vscode/extensions.json +0 -0
  30. {uipath-2.1.24 → uipath-2.1.26}/.vscode/launch.json +0 -0
  31. {uipath-2.1.24 → uipath-2.1.26}/.vscode/settings.json +0 -0
  32. {uipath-2.1.24 → uipath-2.1.26}/CONTRIBUTING.md +0 -0
  33. {uipath-2.1.24 → uipath-2.1.26}/LICENSE +0 -0
  34. {uipath-2.1.24 → uipath-2.1.26}/README.md +0 -0
  35. {uipath-2.1.24 → uipath-2.1.26}/docs/CONTRIBUTING.md +0 -0
  36. {uipath-2.1.24 → uipath-2.1.26}/docs/FAQ.md +0 -0
  37. {uipath-2.1.24 → uipath-2.1.26}/docs/assets/env-preparation-failed-dark.png +0 -0
  38. {uipath-2.1.24 → uipath-2.1.26}/docs/assets/env-preparation-failed-light.png +0 -0
  39. {uipath-2.1.24 → uipath-2.1.26}/docs/assets/favicon.png +0 -0
  40. {uipath-2.1.24 → uipath-2.1.26}/docs/assets/logo-dark.svg +0 -0
  41. {uipath-2.1.24 → uipath-2.1.26}/docs/assets/logo-light.svg +0 -0
  42. {uipath-2.1.24 → uipath-2.1.26}/docs/cli/index.md +0 -0
  43. {uipath-2.1.24 → uipath-2.1.26}/docs/core/actions.md +0 -0
  44. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  45. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets/cloud_env_var_light.gif +0 -0
  46. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  47. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  48. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets/copy_path_dark.png +0 -0
  49. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets/copy_path_light.png +0 -0
  50. {uipath-2.1.24 → uipath-2.1.26}/docs/core/assets.md +0 -0
  51. {uipath-2.1.24 → uipath-2.1.26}/docs/core/attachments.md +0 -0
  52. {uipath-2.1.24 → uipath-2.1.26}/docs/core/buckets.md +0 -0
  53. {uipath-2.1.24 → uipath-2.1.26}/docs/core/connections.md +0 -0
  54. {uipath-2.1.24 → uipath-2.1.26}/docs/core/context_grounding.md +0 -0
  55. {uipath-2.1.24 → uipath-2.1.26}/docs/core/environment_variables.md +0 -0
  56. {uipath-2.1.24 → uipath-2.1.26}/docs/core/getting_started.md +0 -0
  57. {uipath-2.1.24 → uipath-2.1.26}/docs/core/jobs.md +0 -0
  58. {uipath-2.1.24 → uipath-2.1.26}/docs/core/llm_gateway.md +0 -0
  59. {uipath-2.1.24 → uipath-2.1.26}/docs/core/processes.md +0 -0
  60. {uipath-2.1.24 → uipath-2.1.26}/docs/core/queues.md +0 -0
  61. {uipath-2.1.24 → uipath-2.1.26}/docs/core/traced.md +0 -0
  62. {uipath-2.1.24 → uipath-2.1.26}/docs/hooks.py +0 -0
  63. {uipath-2.1.24 → uipath-2.1.26}/docs/index.md +0 -0
  64. {uipath-2.1.24 → uipath-2.1.26}/docs/javascripts/extra.js +0 -0
  65. {uipath-2.1.24 → uipath-2.1.26}/docs/overrides/main.html +0 -0
  66. {uipath-2.1.24 → uipath-2.1.26}/docs/overrides/partials/actions.html +0 -0
  67. {uipath-2.1.24 → uipath-2.1.26}/docs/overrides/partials/logo.html +0 -0
  68. {uipath-2.1.24 → uipath-2.1.26}/docs/release_policy.md +0 -0
  69. {uipath-2.1.24 → uipath-2.1.26}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  70. {uipath-2.1.24 → uipath-2.1.26}/docs/stylesheets/extra.css +0 -0
  71. {uipath-2.1.24 → uipath-2.1.26}/justfile +0 -0
  72. {uipath-2.1.24 → uipath-2.1.26}/mkdocs.yml +0 -0
  73. {uipath-2.1.24 → uipath-2.1.26}/py.typed +0 -0
  74. {uipath-2.1.24 → uipath-2.1.26}/samples/event-trigger/.python-version +0 -0
  75. {uipath-2.1.24 → uipath-2.1.26}/samples/event-trigger/README.md +0 -0
  76. {uipath-2.1.24 → uipath-2.1.26}/samples/event-trigger/main.py +0 -0
  77. {uipath-2.1.24 → uipath-2.1.26}/samples/event-trigger/pyproject.toml +0 -0
  78. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/.env.example +0 -0
  79. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/README.md +0 -0
  80. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/input.json +0 -0
  81. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  82. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  83. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/pyproject.toml +0 -0
  84. {uipath-2.1.24 → uipath-2.1.26}/samples/google-ADK-agent/uv.lock +0 -0
  85. {uipath-2.1.24 → uipath-2.1.26}/scripts/debug_test.py +0 -0
  86. {uipath-2.1.24 → uipath-2.1.26}/scripts/lint_httpx_client.py +0 -0
  87. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/__init__.py +0 -0
  88. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/README.md +0 -0
  89. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  90. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/_models.py +0 -0
  91. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/_utils.py +0 -0
  92. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/auth_config.json +0 -0
  93. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/localhost.crt +0 -0
  94. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_auth/localhost.key +0 -0
  95. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/__init__.py +0 -0
  96. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_deterministic_evaluator_base.py +0 -0
  97. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_evaluator_base.py +0 -0
  98. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_evaluator_factory.py +0 -0
  99. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_exact_match_evaluator.py +0 -0
  100. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_json_similarity_evaluator.py +0 -0
  101. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_llm_as_judge_evaluator.py +0 -0
  102. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_evaluators/_trajectory_evaluator.py +0 -0
  103. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_models/__init__.py +0 -0
  104. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  105. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/_models/_evaluators.py +0 -0
  106. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/evaluation_service.py +0 -0
  107. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_evals/progress_reporter.py +0 -0
  108. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  109. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  110. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  111. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  112. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_runtime/_logging.py +0 -0
  113. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  114. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  115. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_templates/.rels.template +0 -0
  116. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  117. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_templates/main.py.template +0 -0
  118. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  119. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_common.py +0 -0
  120. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_console.py +0 -0
  121. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_constants.py +0 -0
  122. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_debug.py +0 -0
  123. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_folders.py +0 -0
  124. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_input_args.py +0 -0
  125. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  126. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_processes.py +0 -0
  127. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_project_files.py +0 -0
  128. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  129. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_tracing.py +0 -0
  130. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  131. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_deploy.py +0 -0
  132. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_eval.py +0 -0
  133. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_init.py +0 -0
  134. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_invoke.py +0 -0
  135. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_new.py +0 -0
  136. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_pack.py +0 -0
  137. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_publish.py +0 -0
  138. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_pull.py +0 -0
  139. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_push.py +0 -0
  140. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/cli_run.py +0 -0
  141. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/middlewares.py +0 -0
  142. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_cli/spinner.py +0 -0
  143. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_config.py +0 -0
  144. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_execution_context.py +0 -0
  145. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_folder_context.py +0 -0
  146. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/__init__.py +0 -0
  147. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/actions_service.py +0 -0
  148. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/api_client.py +0 -0
  149. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/assets_service.py +0 -0
  150. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/attachments_service.py +0 -0
  151. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/buckets_service.py +0 -0
  152. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/connections_service.py +0 -0
  153. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/context_grounding_service.py +0 -0
  154. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/folder_service.py +0 -0
  155. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/jobs_service.py +0 -0
  156. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/llm_gateway_service.py +0 -0
  157. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/processes_service.py +0 -0
  158. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_services/queues_service.py +0 -0
  159. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_uipath.py +0 -0
  160. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/__init__.py +0 -0
  161. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_endpoint.py +0 -0
  162. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_infer_bindings.py +0 -0
  163. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_logs.py +0 -0
  164. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_read_overwrites.py +0 -0
  165. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_request_override.py +0 -0
  166. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_request_spec.py +0 -0
  167. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_ssl_context.py +0 -0
  168. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_url.py +0 -0
  169. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/_user_agent.py +0 -0
  170. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/_utils/constants.py +0 -0
  171. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/__init__.py +0 -0
  172. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/action_schema.py +0 -0
  173. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/actions.py +0 -0
  174. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/assets.py +0 -0
  175. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/attachment.py +0 -0
  176. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/buckets.py +0 -0
  177. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/connections.py +0 -0
  178. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/context_grounding.py +0 -0
  179. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/context_grounding_index.py +0 -0
  180. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/errors.py +0 -0
  181. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/exceptions.py +0 -0
  182. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/interrupt_models.py +0 -0
  183. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/job.py +0 -0
  184. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/llm_gateway.py +0 -0
  185. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/processes.py +0 -0
  186. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/models/queues.py +0 -0
  187. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/py.typed +0 -0
  188. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/telemetry/__init__.py +0 -0
  189. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/telemetry/_constants.py +0 -0
  190. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/telemetry/_track.py +0 -0
  191. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/tracing/__init__.py +0 -0
  192. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/tracing/_otel_exporters.py +0 -0
  193. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/tracing/_traced.py +0 -0
  194. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/tracing/_utils.py +0 -0
  195. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/utils/__init__.py +0 -0
  196. {uipath-2.1.24 → uipath-2.1.26}/src/uipath/utils/_endpoints_manager.py +0 -0
  197. {uipath-2.1.24 → uipath-2.1.26}/tests/__init__.py +0 -0
  198. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/conftest.py +0 -0
  199. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  200. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/mocks/bindings_script.py +0 -0
  201. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/mocks/pyproject.toml +0 -0
  202. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/mocks/simple_script.py +0 -0
  203. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/mocks/uipath-mock.json +0 -0
  204. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  205. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_hitl.py +0 -0
  206. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_init.py +0 -0
  207. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_input_args.py +0 -0
  208. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_invoke.py +0 -0
  209. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_new.py +0 -0
  210. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_pack.py +0 -0
  211. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_publish.py +0 -0
  212. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_pull.py +0 -0
  213. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_push.py +0 -0
  214. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_run.py +0 -0
  215. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/test_utils.py +0 -0
  216. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/utils/common.py +0 -0
  217. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/utils/project_details.py +0 -0
  218. {uipath-2.1.24 → uipath-2.1.26}/tests/cli/utils/uipath_json.py +0 -0
  219. {uipath-2.1.24 → uipath-2.1.26}/tests/conftest.py +0 -0
  220. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/conftest.py +0 -0
  221. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_actions_service.py +0 -0
  222. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_api_client.py +0 -0
  223. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_assets_service.py +0 -0
  224. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_attachments_service.py +0 -0
  225. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_base_service.py +0 -0
  226. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_buckets_service.py +0 -0
  227. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_connections_service.py +0 -0
  228. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_context_grounding_service.py +0 -0
  229. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_folder_service.py +0 -0
  230. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_jobs_service.py +0 -0
  231. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_llm_integration.py +0 -0
  232. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  233. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_llm_service.py +0 -0
  234. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_processes_service.py +0 -0
  235. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_queues_service.py +0 -0
  236. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  237. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/test_bindings_inference.py +0 -0
  238. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/test_config.py +0 -0
  239. {uipath-2.1.24 → uipath-2.1.26}/tests/sdk/test_overwrites.py +0 -0
  240. {uipath-2.1.24 → uipath-2.1.26}/tests/tracing/test_otel_exporters.py +0 -0
  241. {uipath-2.1.24 → uipath-2.1.26}/tests/tracing/test_span_utils.py +0 -0
  242. {uipath-2.1.24 → uipath-2.1.26}/tests/tracing/test_traced.py +0 -0
  243. {uipath-2.1.24 → uipath-2.1.26}/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.1.24
3
+ Version: 2.1.26
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.1.24"
3
+ version = "2.1.26"
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"
@@ -3,7 +3,7 @@ import sys
3
3
 
4
4
  import click
5
5
 
6
- from .cli_auth import auth as auth # type: ignore
6
+ from .cli_auth import auth as auth
7
7
  from .cli_deploy import deploy as deploy # type: ignore
8
8
  from .cli_eval import eval as eval # type: ignore
9
9
  from .cli_init import init as init # type: ignore
@@ -70,7 +70,7 @@ class ClientCredentialsService:
70
70
  return "cloud"
71
71
 
72
72
  def authenticate(
73
- self, client_id: str, client_secret: str, scope: str = "OR.Execution"
73
+ self, client_id: str, client_secret: str, scope: Optional[str] = "OR.Execution"
74
74
  ) -> Optional[TokenData]:
75
75
  """Authenticate using client credentials flow.
76
76
 
@@ -5,6 +5,7 @@ import os
5
5
  from urllib.parse import urlencode
6
6
 
7
7
  from ._models import AuthConfig
8
+ from ._url_utils import build_service_url
8
9
 
9
10
 
10
11
  def generate_code_verifier_and_challenge():
@@ -65,5 +66,5 @@ def get_auth_url(domain: str) -> tuple[str, str, str]:
65
66
  }
66
67
 
67
68
  query_string = urlencode(query_params)
68
- url = f"https://{domain}.uipath.com/identity_/connect/authorize?{query_string}"
69
+ url = build_service_url(domain, f"/identity_/connect/authorize?{query_string}")
69
70
  return url, code_verifier, state
@@ -9,6 +9,7 @@ from ..._utils._ssl_context import get_httpx_client_kwargs
9
9
  from .._utils._console import ConsoleLogger
10
10
  from ._models import TenantsAndOrganizationInfoResponse, TokenData
11
11
  from ._oidc_utils import get_auth_config
12
+ from ._url_utils import build_service_url, get_base_url
12
13
  from ._utils import (
13
14
  get_auth_data,
14
15
  get_parsed_token_data,
@@ -24,7 +25,7 @@ class PortalService:
24
25
 
25
26
  access_token: Optional[str] = None
26
27
  prt_id: Optional[str] = None
27
- domain: Optional[str] = None
28
+ domain: str
28
29
  selected_tenant: Optional[str] = None
29
30
 
30
31
  _client: Optional[httpx.Client] = None
@@ -65,7 +66,10 @@ class PortalService:
65
66
  if self._client is None:
66
67
  raise RuntimeError("HTTP client is not initialized")
67
68
 
68
- url = f"https://{self.domain}.uipath.com/{self.prt_id}/portal_/api/filtering/leftnav/tenantsAndOrganizationInfo"
69
+ url = build_service_url(
70
+ self.domain,
71
+ f"/{self.prt_id}/portal_/api/filtering/leftnav/tenantsAndOrganizationInfo",
72
+ )
69
73
  response = self._client.get(
70
74
  url, headers={"Authorization": f"Bearer {self.access_token}"}
71
75
  )
@@ -90,13 +94,14 @@ class PortalService:
90
94
  console.error("Organization not found.")
91
95
  return ""
92
96
  account_name = organization.get("name")
93
- return f"https://{self.domain}.uipath.com/{account_name}/{self.selected_tenant}/orchestrator_"
97
+ base_url = get_base_url(self.domain)
98
+ return f"{base_url}/{account_name}/{self.selected_tenant}/orchestrator_"
94
99
 
95
100
  def post_refresh_token_request(self, refresh_token: str) -> TokenData:
96
101
  if self._client is None:
97
102
  raise RuntimeError("HTTP client is not initialized")
98
103
 
99
- url = f"https://{self.domain}.uipath.com/identity_/connect/token"
104
+ url = build_service_url(self.domain, "/identity_/connect/token")
100
105
  client_id = get_auth_config().get("client_id")
101
106
 
102
107
  data = {
@@ -213,12 +218,15 @@ def select_tenant(
213
218
  account_name = tenants_and_organizations["organization"]["name"]
214
219
  console.info(f"Selected tenant: {click.style(tenant_name, fg='cyan')}")
215
220
 
221
+ base_url = get_base_url(domain)
222
+ uipath_url = f"{base_url}/{account_name}/{tenant_name}"
223
+
216
224
  update_env_file(
217
225
  {
218
- "UIPATH_URL": f"https://{domain if domain else 'alpha'}.uipath.com/{account_name}/{tenant_name}",
226
+ "UIPATH_URL": uipath_url,
219
227
  "UIPATH_TENANT_ID": tenants_and_organizations["tenants"][tenant_idx]["id"],
220
228
  "UIPATH_ORGANIZATION_ID": tenants_and_organizations["organization"]["id"],
221
229
  }
222
230
  )
223
231
 
224
- return f"https://{domain if domain else 'alpha'}.uipath.com/{account_name}/{tenant_name}"
232
+ return uipath_url
@@ -0,0 +1,41 @@
1
+ import os
2
+ from urllib.parse import urlparse
3
+
4
+
5
+ def get_base_url(domain: str) -> str:
6
+ """Get the base URL for UiPath services.
7
+
8
+ Args:
9
+ domain: Either a domain name (e.g., 'cloud', 'alpha') or a full URL from UIPATH_URL
10
+
11
+ Returns:
12
+ The base URL to use for UiPath services
13
+ """
14
+ # If UIPATH_URL is set and domain is 'cloud' (default), use the base from UIPATH_URL
15
+ uipath_url = os.getenv("UIPATH_URL")
16
+ if uipath_url and domain == "cloud":
17
+ parsed_url = urlparse(uipath_url)
18
+ return f"{parsed_url.scheme}://{parsed_url.netloc}"
19
+
20
+ # If domain is already a full URL, use it directly
21
+ if domain.startswith("http"):
22
+ return domain
23
+
24
+ # Otherwise, construct the URL using the domain
25
+ return f"https://{domain if domain else 'cloud'}.uipath.com"
26
+
27
+
28
+ def build_service_url(domain: str, path: str) -> str:
29
+ """Build a service URL by combining the base URL with a path.
30
+
31
+ Args:
32
+ domain: Either a domain name or full URL
33
+ path: The path to append (should start with /)
34
+
35
+ Returns:
36
+ The complete service URL
37
+ """
38
+ base_url = get_base_url(domain)
39
+ # Remove trailing slash from base_url to avoid double slashes
40
+ base_url = base_url.rstrip("/")
41
+ return f"{base_url}{path}"
@@ -477,7 +477,15 @@
477
477
  formData.append('client_id', '__PY_REPLACE_CLIENT_ID__');
478
478
  formData.append('code_verifier', codeVerifier);
479
479
 
480
- const response = await fetch('https://__PY_REPLACE_DOMAIN__.uipath.com/identity_/connect/token', {
480
+ const domainOrUrl = '__PY_REPLACE_DOMAIN__';
481
+ let tokenUrl;
482
+ if (domainOrUrl.startsWith('http')) {
483
+ tokenUrl = `${domainOrUrl}/identity_/connect/token`;
484
+ } else {
485
+ tokenUrl = `https://${domainOrUrl}.uipath.com/identity_/connect/token`;
486
+ }
487
+
488
+ const response = await fetch(tokenUrl, {
481
489
  method: 'POST',
482
490
  headers: {
483
491
  'Content-Type': 'application/x-www-form-urlencoded'
@@ -1,9 +1,10 @@
1
- # type: ignore
2
1
  import asyncio
3
2
  import json
4
3
  import os
5
4
  import socket
6
5
  import webbrowser
6
+ from typing import Optional
7
+ from urllib.parse import urlparse
7
8
 
8
9
  import click
9
10
  from dotenv import load_dotenv
@@ -33,10 +34,10 @@ def is_port_in_use(port: int) -> bool:
33
34
 
34
35
  def set_port():
35
36
  auth_config = get_auth_config()
36
- port = auth_config.get("port", 8104)
37
- port_option_one = auth_config.get("portOptionOne", 8104)
38
- port_option_two = auth_config.get("portOptionTwo", 8055)
39
- port_option_three = auth_config.get("portOptionThree", 42042)
37
+ port = int(auth_config.get("port", 8104))
38
+ port_option_one = int(auth_config.get("portOptionOne", 8104)) # type: ignore
39
+ port_option_two = int(auth_config.get("portOptionTwo", 8055)) # type: ignore
40
+ port_option_three = int(auth_config.get("portOptionThree", 42042)) # type: ignore
40
41
  if is_port_in_use(port):
41
42
  if is_port_in_use(port_option_one):
42
43
  if is_port_in_use(port_option_two):
@@ -90,14 +91,17 @@ def set_port():
90
91
  @track
91
92
  def auth(
92
93
  domain,
93
- force: None | bool = False,
94
- client_id: str = None,
95
- client_secret: str = None,
96
- base_url: str = None,
97
- scope: str = None,
94
+ force: Optional[bool] = False,
95
+ client_id: Optional[str] = None,
96
+ client_secret: Optional[str] = None,
97
+ base_url: Optional[str] = None,
98
+ scope: Optional[str] = None,
98
99
  ):
99
100
  """Authenticate with UiPath Cloud Platform.
100
101
 
102
+ The domain for authentication is determined by the UIPATH_URL environment variable if set.
103
+ Otherwise, it can be specified with --cloud (default), --staging, or --alpha flags.
104
+
101
105
  Interactive mode (default): Opens browser for OAuth authentication.
102
106
  Unattended mode: Use --client-id, --client-secret, --base-url and --scope for client credentials flow.
103
107
 
@@ -106,6 +110,17 @@ def auth(
106
110
  - Set REQUESTS_CA_BUNDLE to specify a custom CA bundle for SSL verification
107
111
  - Set UIPATH_DISABLE_SSL_VERIFY to disable SSL verification (not recommended)
108
112
  """
113
+ uipath_url = os.getenv("UIPATH_URL")
114
+ if uipath_url and domain == "cloud": # "cloud" is the default
115
+ parsed_url = urlparse(uipath_url)
116
+ if parsed_url.scheme and parsed_url.netloc:
117
+ domain = f"{parsed_url.scheme}://{parsed_url.netloc}"
118
+ else:
119
+ console.error(
120
+ f"Malformed UIPATH_URL: '{uipath_url}'. Please ensure it includes both scheme and netloc (e.g., 'https://cloud.uipath.com')."
121
+ )
122
+ return
123
+
109
124
  # Check if client credentials are provided for unattended authentication
110
125
  if client_id and client_secret:
111
126
  if not base_url:
@@ -107,7 +107,7 @@ class BaseService:
107
107
  scoped_url = self._url.scope_url(str(url), scoped)
108
108
 
109
109
  if infer_content_type:
110
- self._client_async.headers.pop("Content-Type", None)
110
+ self._client.headers.pop("Content-Type", None)
111
111
 
112
112
  response = self._client.request(method, scoped_url, **kwargs)
113
113
 
@@ -0,0 +1,141 @@
1
+ import os
2
+ from unittest.mock import AsyncMock, patch
3
+
4
+ import pytest
5
+ from click.testing import CliRunner
6
+
7
+ from uipath._cli.cli_auth import auth
8
+
9
+ """
10
+ Unit tests for the 'uipath auth' command.
11
+
12
+ This test suite covers the following scenarios for the authentication logic:
13
+
14
+ 1. **UIPATH_URL Environment Variable**:
15
+ Ensures the `auth` command correctly uses the domain from the `UIPATH_URL`
16
+ environment variable when no specific environment flag is used.
17
+
18
+ 2. **--alpha Flag**:
19
+ Verifies that the `--alpha` flag correctly uses the 'alpha' environment and
20
+ overrides the `UIPATH_URL` environment variable if it is set.
21
+
22
+ 3. **--staging Flag**:
23
+ Verifies that the `--staging` flag correctly uses the 'staging' environment and
24
+ overrides the `UIPATH_URL` environment variable if it is set.
25
+
26
+ 4. **--cloud Flag**:
27
+ Checks that the `--cloud` flag works as expected, using the 'cloud' environment,
28
+ when no `UIPATH_URL` environment variable is set.
29
+
30
+ 5. **Default Behavior**:
31
+ Confirms that the command defaults to the 'cloud' environment when no flags
32
+ or environment variables are provided.
33
+ """
34
+
35
+
36
+ @pytest.mark.parametrize(
37
+ "scenario_name, cli_args, env_vars, expected_url_part, expected_select_tenant_return",
38
+ [
39
+ (
40
+ "auth_with_uipath_url_env_variable",
41
+ ["--force"],
42
+ {"UIPATH_URL": "https://custom.automationsuite.org/org/tenant"},
43
+ "https://custom.automationsuite.org/identity_/connect/authorize",
44
+ "https://custom.automationsuite.org/DefaultOrg/DefaultTenant",
45
+ ),
46
+ (
47
+ "auth_with_uipath_url_env_variable_with_trailing_slash",
48
+ ["--force"],
49
+ {"UIPATH_URL": "https://custom.uipath.com/org/tenant/"},
50
+ "https://custom.uipath.com/identity_/connect/authorize",
51
+ "https://custom.uipath.com/DefaultOrg/DefaultTenant",
52
+ ),
53
+ (
54
+ "auth_with_alpha_flag",
55
+ ["--alpha", "--force"],
56
+ {"UIPATH_URL": "https://custom.uipath.com/org/tenant"},
57
+ "https://alpha.uipath.com/identity_/connect/authorize",
58
+ "https://alpha.uipath.com/DefaultOrg/DefaultTenant",
59
+ ),
60
+ (
61
+ "auth_with_staging_flag",
62
+ ["--staging", "--force"],
63
+ {"UIPATH_URL": "https://custom.uipath.com/org/tenant"},
64
+ "https://staging.uipath.com/identity_/connect/authorize",
65
+ "https://staging.uipath.com/DefaultOrg/DefaultTenant",
66
+ ),
67
+ (
68
+ "auth_with_cloud_flag",
69
+ ["--cloud", "--force"],
70
+ {},
71
+ "https://cloud.uipath.com/identity_/connect/authorize",
72
+ "https://cloud.uipath.com/DefaultOrg/DefaultTenant",
73
+ ),
74
+ (
75
+ "auth_default_to_cloud",
76
+ ["--force"],
77
+ {},
78
+ "https://cloud.uipath.com/identity_/connect/authorize",
79
+ "https://cloud.uipath.com/DefaultOrg/DefaultTenant",
80
+ ),
81
+ ],
82
+ ids=[
83
+ "uipath_url_env",
84
+ "alpha_flag_overrides_env",
85
+ "staging_flag_overrides_env",
86
+ "cloud_flag",
87
+ "default_to_cloud",
88
+ "uipath_url_env_with_trailing_slash",
89
+ ],
90
+ )
91
+ def test_auth_scenarios(
92
+ scenario_name, cli_args, env_vars, expected_url_part, expected_select_tenant_return
93
+ ):
94
+ """
95
+ Test 'uipath auth' with different configurations.
96
+ """
97
+ runner = CliRunner()
98
+ with (
99
+ patch("uipath._cli.cli_auth.webbrowser.open") as mock_open,
100
+ patch("uipath._cli.cli_auth.HTTPServer") as mock_server,
101
+ patch("uipath._cli.cli_auth.PortalService") as mock_portal_service,
102
+ ):
103
+ mock_server.return_value.start = AsyncMock(
104
+ return_value={"access_token": "test_token"}
105
+ )
106
+ mock_portal_service.return_value.__enter__.return_value.get_tenants_and_organizations.return_value = {
107
+ "tenants": [{"name": "DefaultTenant", "id": "tenant-id"}],
108
+ "organization": {"name": "DefaultOrg", "id": "org-id"},
109
+ }
110
+ mock_portal_service.return_value.__enter__.return_value.select_tenant.return_value = expected_select_tenant_return
111
+
112
+ with runner.isolated_filesystem():
113
+ for key, value in env_vars.items():
114
+ os.environ[key] = value
115
+
116
+ result = runner.invoke(auth, cli_args)
117
+
118
+ for key in env_vars:
119
+ del os.environ[key]
120
+
121
+ assert result.exit_code == 0, (
122
+ f"Scenario '{scenario_name}' failed with exit code {result.exit_code}: {result.output}"
123
+ )
124
+ mock_open.assert_called_once()
125
+ call_args = mock_open.call_args[0][0]
126
+ assert expected_url_part in call_args
127
+
128
+
129
+ def test_auth_with_malformed_url():
130
+ """
131
+ Test that 'uipath auth' handles a malformed UIPATH_URL gracefully.
132
+ """
133
+ runner = CliRunner()
134
+ with runner.isolated_filesystem():
135
+ os.environ["UIPATH_URL"] = "custom.uipath.com"
136
+ result = runner.invoke(auth, ["--force"])
137
+ del os.environ["UIPATH_URL"]
138
+
139
+ assert result.exit_code == 1
140
+ assert "Malformed UIPATH_URL" in result.output
141
+ assert "custom.uipath.com" in result.output