uipath 2.1.84__tar.gz → 2.1.85__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 (352) hide show
  1. {uipath-2.1.84 → uipath-2.1.85}/PKG-INFO +1 -1
  2. {uipath-2.1.84 → uipath-2.1.85}/pyproject.toml +1 -1
  3. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_runtime.py +4 -5
  4. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/connections_service.py +67 -1
  5. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/__init__.py +2 -1
  6. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/connections.py +8 -0
  7. uipath-2.1.85/src/uipath/utils/dynamic_schema.py +111 -0
  8. uipath-2.1.85/tests/cli/utils/test_dynamic_schema.py +95 -0
  9. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_connections_service.py +246 -1
  10. {uipath-2.1.84 → uipath-2.1.85}/uv.lock +1 -1
  11. {uipath-2.1.84 → uipath-2.1.85}/.cursorrules +0 -0
  12. {uipath-2.1.84 → uipath-2.1.85}/.editorconfig +0 -0
  13. {uipath-2.1.84 → uipath-2.1.85}/.gitattributes +0 -0
  14. {uipath-2.1.84 → uipath-2.1.85}/.github/labeler.yml +0 -0
  15. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/auto-label.yml +0 -0
  16. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/cd.yml +0 -0
  17. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/ci.yml +0 -0
  18. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/commitlint.yml +0 -0
  19. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/integration_tests.yml +0 -0
  20. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/lint.yml +0 -0
  21. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/publish-dev.yml +0 -0
  22. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/publish-docs.yml +0 -0
  23. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/slack.yml +0 -0
  24. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/test-uipath-langchain.yml +0 -0
  25. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  26. {uipath-2.1.84 → uipath-2.1.85}/.github/workflows/test.yml +0 -0
  27. {uipath-2.1.84 → uipath-2.1.85}/.gitignore +0 -0
  28. {uipath-2.1.84 → uipath-2.1.85}/.pre-commit-config.yaml +0 -0
  29. {uipath-2.1.84 → uipath-2.1.85}/.python-version +0 -0
  30. {uipath-2.1.84 → uipath-2.1.85}/.vscode/extensions.json +0 -0
  31. {uipath-2.1.84 → uipath-2.1.85}/.vscode/launch.json +0 -0
  32. {uipath-2.1.84 → uipath-2.1.85}/.vscode/settings.json +0 -0
  33. {uipath-2.1.84 → uipath-2.1.85}/CONTRIBUTING.md +0 -0
  34. {uipath-2.1.84 → uipath-2.1.85}/LICENSE +0 -0
  35. {uipath-2.1.84 → uipath-2.1.85}/README.md +0 -0
  36. {uipath-2.1.84 → uipath-2.1.85}/docs/CONTRIBUTING.md +0 -0
  37. {uipath-2.1.84 → uipath-2.1.85}/docs/FAQ.md +0 -0
  38. {uipath-2.1.84 → uipath-2.1.85}/docs/assets/env-preparation-failed-dark.png +0 -0
  39. {uipath-2.1.84 → uipath-2.1.85}/docs/assets/env-preparation-failed-light.png +0 -0
  40. {uipath-2.1.84 → uipath-2.1.85}/docs/assets/favicon.png +0 -0
  41. {uipath-2.1.84 → uipath-2.1.85}/docs/assets/llms.txt +0 -0
  42. {uipath-2.1.84 → uipath-2.1.85}/docs/assets/logo-dark.svg +0 -0
  43. {uipath-2.1.84 → uipath-2.1.85}/docs/assets/logo-light.svg +0 -0
  44. {uipath-2.1.84 → uipath-2.1.85}/docs/cli/index.md +0 -0
  45. {uipath-2.1.84 → uipath-2.1.85}/docs/core/actions.md +0 -0
  46. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  47. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets/cloud_env_var_light.gif +0 -0
  48. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  49. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  50. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets/copy_path_dark.png +0 -0
  51. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets/copy_path_light.png +0 -0
  52. {uipath-2.1.84 → uipath-2.1.85}/docs/core/assets.md +0 -0
  53. {uipath-2.1.84 → uipath-2.1.85}/docs/core/attachments.md +0 -0
  54. {uipath-2.1.84 → uipath-2.1.85}/docs/core/buckets.md +0 -0
  55. {uipath-2.1.84 → uipath-2.1.85}/docs/core/connections.md +0 -0
  56. {uipath-2.1.84 → uipath-2.1.85}/docs/core/context_grounding.md +0 -0
  57. {uipath-2.1.84 → uipath-2.1.85}/docs/core/documents.md +0 -0
  58. {uipath-2.1.84 → uipath-2.1.85}/docs/core/documents_models.md +0 -0
  59. {uipath-2.1.84 → uipath-2.1.85}/docs/core/environment_variables.md +0 -0
  60. {uipath-2.1.84 → uipath-2.1.85}/docs/core/getting_started.md +0 -0
  61. {uipath-2.1.84 → uipath-2.1.85}/docs/core/jobs.md +0 -0
  62. {uipath-2.1.84 → uipath-2.1.85}/docs/core/llm_gateway.md +0 -0
  63. {uipath-2.1.84 → uipath-2.1.85}/docs/core/processes.md +0 -0
  64. {uipath-2.1.84 → uipath-2.1.85}/docs/core/queues.md +0 -0
  65. {uipath-2.1.84 → uipath-2.1.85}/docs/core/traced.md +0 -0
  66. {uipath-2.1.84 → uipath-2.1.85}/docs/hooks.py +0 -0
  67. {uipath-2.1.84 → uipath-2.1.85}/docs/index.md +0 -0
  68. {uipath-2.1.84 → uipath-2.1.85}/docs/javascripts/extra.js +0 -0
  69. {uipath-2.1.84 → uipath-2.1.85}/docs/overrides/main.html +0 -0
  70. {uipath-2.1.84 → uipath-2.1.85}/docs/overrides/partials/actions.html +0 -0
  71. {uipath-2.1.84 → uipath-2.1.85}/docs/overrides/partials/logo.html +0 -0
  72. {uipath-2.1.84 → uipath-2.1.85}/docs/release_policy.md +0 -0
  73. {uipath-2.1.84 → uipath-2.1.85}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  74. {uipath-2.1.84 → uipath-2.1.85}/docs/stylesheets/extra.css +0 -0
  75. {uipath-2.1.84 → uipath-2.1.85}/justfile +0 -0
  76. {uipath-2.1.84 → uipath-2.1.85}/mkdocs.yml +0 -0
  77. {uipath-2.1.84 → uipath-2.1.85}/py.typed +0 -0
  78. {uipath-2.1.84 → uipath-2.1.85}/samples/asset-modifier-agent/.env.example +0 -0
  79. {uipath-2.1.84 → uipath-2.1.85}/samples/asset-modifier-agent/README.md +0 -0
  80. {uipath-2.1.84 → uipath-2.1.85}/samples/asset-modifier-agent/input.json +0 -0
  81. {uipath-2.1.84 → uipath-2.1.85}/samples/asset-modifier-agent/main.py +0 -0
  82. {uipath-2.1.84 → uipath-2.1.85}/samples/asset-modifier-agent/pyproject.toml +0 -0
  83. {uipath-2.1.84 → uipath-2.1.85}/samples/asset-modifier-agent/uv.lock +0 -0
  84. {uipath-2.1.84 → uipath-2.1.85}/samples/calculator/README.md +0 -0
  85. {uipath-2.1.84 → uipath-2.1.85}/samples/calculator/evals/eval-sets/default.json +0 -0
  86. {uipath-2.1.84 → uipath-2.1.85}/samples/calculator/evals/evaluators/equality.json +0 -0
  87. {uipath-2.1.84 → uipath-2.1.85}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
  88. {uipath-2.1.84 → uipath-2.1.85}/samples/calculator/main.py +0 -0
  89. {uipath-2.1.84 → uipath-2.1.85}/samples/calculator/pyproject.toml +0 -0
  90. {uipath-2.1.84 → uipath-2.1.85}/samples/event-trigger/.python-version +0 -0
  91. {uipath-2.1.84 → uipath-2.1.85}/samples/event-trigger/README.md +0 -0
  92. {uipath-2.1.84 → uipath-2.1.85}/samples/event-trigger/main.py +0 -0
  93. {uipath-2.1.84 → uipath-2.1.85}/samples/event-trigger/pyproject.toml +0 -0
  94. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/.env.example +0 -0
  95. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/README.md +0 -0
  96. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/input.json +0 -0
  97. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  98. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  99. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/pyproject.toml +0 -0
  100. {uipath-2.1.84 → uipath-2.1.85}/samples/google-ADK-agent/uv.lock +0 -0
  101. {uipath-2.1.84 → uipath-2.1.85}/scripts/debug_test.py +0 -0
  102. {uipath-2.1.84 → uipath-2.1.85}/scripts/lint_httpx_client.py +0 -0
  103. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/__init__.py +0 -0
  104. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/README.md +0 -0
  105. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/__init__.py +0 -0
  106. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  107. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  108. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_models.py +0 -0
  109. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  110. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  111. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  112. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/_utils.py +0 -0
  113. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/auth_config.json +0 -0
  114. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/index.html +0 -0
  115. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/localhost.crt +0 -0
  116. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_auth/localhost.key +0 -0
  117. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  118. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  119. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  120. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  121. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  122. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  123. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  124. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  125. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  126. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  127. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  128. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  129. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
  130. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  131. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  132. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  133. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  134. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
  135. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
  136. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  137. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  138. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  139. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/_span_collection.py +0 -0
  140. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  141. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  142. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  143. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  144. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  145. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  146. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  147. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  148. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  149. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  150. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_runtime/_logging.py +0 -0
  151. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  152. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  153. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  154. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_templates/.rels.template +0 -0
  155. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  156. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_templates/main.py.template +0 -0
  157. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  158. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_common.py +0 -0
  159. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_console.py +0 -0
  160. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_constants.py +0 -0
  161. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_debug.py +0 -0
  162. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  163. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_folders.py +0 -0
  164. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_input_args.py +0 -0
  165. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  166. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_processes.py +0 -0
  167. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_project_files.py +0 -0
  168. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  169. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_tracing.py +0 -0
  170. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  171. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_auth.py +0 -0
  172. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_deploy.py +0 -0
  173. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_dev.py +0 -0
  174. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_eval.py +0 -0
  175. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_init.py +0 -0
  176. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_invoke.py +0 -0
  177. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_new.py +0 -0
  178. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_pack.py +0 -0
  179. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_publish.py +0 -0
  180. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_pull.py +0 -0
  181. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_push.py +0 -0
  182. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/cli_run.py +0 -0
  183. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/middlewares.py +0 -0
  184. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_cli/spinner.py +0 -0
  185. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_config.py +0 -0
  186. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_events/__init__.py +0 -0
  187. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_events/_event_bus.py +0 -0
  188. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_events/_events.py +0 -0
  189. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_execution_context.py +0 -0
  190. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_folder_context.py +0 -0
  191. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_resources/AGENTS.md +0 -0
  192. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/__init__.py +0 -0
  193. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/_base_service.py +0 -0
  194. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/actions_service.py +0 -0
  195. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/api_client.py +0 -0
  196. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/assets_service.py +0 -0
  197. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/attachments_service.py +0 -0
  198. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/buckets_service.py +0 -0
  199. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/context_grounding_service.py +0 -0
  200. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/documents_service.py +0 -0
  201. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/entities_service.py +0 -0
  202. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/external_application_service.py +0 -0
  203. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/folder_service.py +0 -0
  204. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/jobs_service.py +0 -0
  205. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/llm_gateway_service.py +0 -0
  206. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/processes_service.py +0 -0
  207. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_services/queues_service.py +0 -0
  208. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_uipath.py +0 -0
  209. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/__init__.py +0 -0
  210. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_auth.py +0 -0
  211. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_endpoint.py +0 -0
  212. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_infer_bindings.py +0 -0
  213. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_logs.py +0 -0
  214. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_read_overwrites.py +0 -0
  215. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_request_override.py +0 -0
  216. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_request_spec.py +0 -0
  217. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_ssl_context.py +0 -0
  218. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_url.py +0 -0
  219. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/_user_agent.py +0 -0
  220. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/_utils/constants.py +0 -0
  221. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/_utils.py +0 -0
  222. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/__init__.py +0 -0
  223. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/async_stream.py +0 -0
  224. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/citation.py +0 -0
  225. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/content.py +0 -0
  226. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/conversation.py +0 -0
  227. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/event.py +0 -0
  228. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/exchange.py +0 -0
  229. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/message.py +0 -0
  230. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/meta.py +0 -0
  231. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/conversation/tool.py +0 -0
  232. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/agent/models/agent.py +0 -0
  233. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/_helpers/__init__.py +0 -0
  234. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/_helpers/helpers.py +0 -0
  235. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/__init__.py +0 -0
  236. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  237. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  238. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  239. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  240. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  241. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  242. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/mocks/__init__.py +0 -0
  243. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/mocks/mockable.py +0 -0
  244. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/models/__init__.py +0 -0
  245. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/eval/models/models.py +0 -0
  246. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/action_schema.py +0 -0
  247. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/actions.py +0 -0
  248. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/assets.py +0 -0
  249. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/attachment.py +0 -0
  250. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/auth.py +0 -0
  251. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/buckets.py +0 -0
  252. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/context_grounding.py +0 -0
  253. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/context_grounding_index.py +0 -0
  254. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/documents.py +0 -0
  255. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/entities.py +0 -0
  256. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/errors.py +0 -0
  257. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/exceptions.py +0 -0
  258. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/interrupt_models.py +0 -0
  259. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/job.py +0 -0
  260. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/llm_gateway.py +0 -0
  261. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/processes.py +0 -0
  262. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/models/queues.py +0 -0
  263. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/py.typed +0 -0
  264. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/telemetry/__init__.py +0 -0
  265. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/telemetry/_constants.py +0 -0
  266. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/telemetry/_track.py +0 -0
  267. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/tracing/__init__.py +0 -0
  268. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/tracing/_otel_exporters.py +0 -0
  269. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/tracing/_traced.py +0 -0
  270. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/tracing/_utils.py +0 -0
  271. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/utils/__init__.py +0 -0
  272. {uipath-2.1.84 → uipath-2.1.85}/src/uipath/utils/_endpoints_manager.py +0 -0
  273. {uipath-2.1.84 → uipath-2.1.85}/testcases/apicalls-testcase/main.py +0 -0
  274. {uipath-2.1.84 → uipath-2.1.85}/testcases/apicalls-testcase/pyproject.toml +0 -0
  275. {uipath-2.1.84 → uipath-2.1.85}/testcases/apicalls-testcase/run.sh +0 -0
  276. {uipath-2.1.84 → uipath-2.1.85}/testcases/apicalls-testcase/src/assert.py +0 -0
  277. {uipath-2.1.84 → uipath-2.1.85}/testcases/basic-testcase/main.py +0 -0
  278. {uipath-2.1.84 → uipath-2.1.85}/testcases/basic-testcase/pyproject.toml +0 -0
  279. {uipath-2.1.84 → uipath-2.1.85}/testcases/basic-testcase/run.sh +0 -0
  280. {uipath-2.1.84 → uipath-2.1.85}/testcases/basic-testcase/src/assert.py +0 -0
  281. {uipath-2.1.84 → uipath-2.1.85}/testcases/common/validate_output.sh +0 -0
  282. {uipath-2.1.84 → uipath-2.1.85}/testcases/langchain-cross/agent.mermaid +0 -0
  283. {uipath-2.1.84 → uipath-2.1.85}/testcases/langchain-cross/langgraph.json +0 -0
  284. {uipath-2.1.84 → uipath-2.1.85}/testcases/langchain-cross/pyproject.toml +0 -0
  285. {uipath-2.1.84 → uipath-2.1.85}/testcases/langchain-cross/run.sh +0 -0
  286. {uipath-2.1.84 → uipath-2.1.85}/testcases/langchain-cross/src/assert.py +0 -0
  287. {uipath-2.1.84 → uipath-2.1.85}/testcases/langchain-cross/src/main.py +0 -0
  288. {uipath-2.1.84 → uipath-2.1.85}/testcases/llamaindex-cross/agent.mermaid +0 -0
  289. {uipath-2.1.84 → uipath-2.1.85}/testcases/llamaindex-cross/llama_index.json +0 -0
  290. {uipath-2.1.84 → uipath-2.1.85}/testcases/llamaindex-cross/pyproject.toml +0 -0
  291. {uipath-2.1.84 → uipath-2.1.85}/testcases/llamaindex-cross/run.sh +0 -0
  292. {uipath-2.1.84 → uipath-2.1.85}/testcases/llamaindex-cross/src/assert.py +0 -0
  293. {uipath-2.1.84 → uipath-2.1.85}/testcases/llamaindex-cross/src/main.py +0 -0
  294. {uipath-2.1.84 → uipath-2.1.85}/tests/__init__.py +0 -0
  295. {uipath-2.1.84 → uipath-2.1.85}/tests/agent/models/test_agent.py +0 -0
  296. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/conftest.py +0 -0
  297. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/eval/mocks/test_mocks.py +0 -0
  298. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  299. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/mocks/bindings_script.py +0 -0
  300. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/mocks/pyproject.toml +0 -0
  301. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/mocks/simple_script.py +0 -0
  302. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/mocks/uipath-mock.json +0 -0
  303. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  304. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_auth.py +0 -0
  305. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_hitl.py +0 -0
  306. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_init.py +0 -0
  307. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_init_agents_md.py +0 -0
  308. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_input_args.py +0 -0
  309. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_invoke.py +0 -0
  310. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_new.py +0 -0
  311. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_oidc_utils.py +0 -0
  312. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_pack.py +0 -0
  313. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  314. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_portal_service_refresh_token.py +0 -0
  315. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_publish.py +0 -0
  316. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_pull.py +0 -0
  317. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_push.py +0 -0
  318. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_run.py +0 -0
  319. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/test_utils.py +0 -0
  320. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/utils/common.py +0 -0
  321. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/utils/project_details.py +0 -0
  322. {uipath-2.1.84 → uipath-2.1.85}/tests/cli/utils/uipath_json.py +0 -0
  323. {uipath-2.1.84 → uipath-2.1.85}/tests/conftest.py +0 -0
  324. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/conftest.py +0 -0
  325. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_actions_service.py +0 -0
  326. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_api_client.py +0 -0
  327. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_assets_service.py +0 -0
  328. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_attachments_service.py +0 -0
  329. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_base_service.py +0 -0
  330. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_buckets_service.py +0 -0
  331. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_context_grounding_service.py +0 -0
  332. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_documents_service.py +0 -0
  333. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_entities_service.py +0 -0
  334. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_external_application_service.py +0 -0
  335. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_folder_service.py +0 -0
  336. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_jobs_service.py +0 -0
  337. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_llm_integration.py +0 -0
  338. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  339. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_llm_service.py +0 -0
  340. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_processes_service.py +0 -0
  341. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_queues_service.py +0 -0
  342. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  343. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  344. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  345. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  346. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/test_bindings_inference.py +0 -0
  347. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/test_config.py +0 -0
  348. {uipath-2.1.84 → uipath-2.1.85}/tests/sdk/test_overwrites.py +0 -0
  349. {uipath-2.1.84 → uipath-2.1.85}/tests/tracing/test_otel_exporters.py +0 -0
  350. {uipath-2.1.84 → uipath-2.1.85}/tests/tracing/test_span_utils.py +0 -0
  351. {uipath-2.1.84 → uipath-2.1.85}/tests/tracing/test_traced.py +0 -0
  352. {uipath-2.1.84 → uipath-2.1.85}/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.84
3
+ Version: 2.1.85
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.84"
3
+ version = "2.1.85"
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"
@@ -432,12 +432,12 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
432
432
  async def execute_runtime(
433
433
  self, eval_item: EvaluationItem
434
434
  ) -> UiPathEvalRunExecutionOutput:
435
- eval_item_id = eval_item.id
435
+ execution_id = str(uuid.uuid4())
436
436
  runtime_context: C = self.factory.new_context(
437
- execution_id=eval_item_id,
437
+ execution_id=execution_id,
438
438
  input_json=eval_item.inputs,
439
439
  is_eval_run=True,
440
- log_handler=self._setup_execution_logging(eval_item_id),
440
+ log_handler=self._setup_execution_logging(execution_id),
441
441
  )
442
442
  if runtime_context.execution_id is None:
443
443
  raise ValueError("execution_id must be set for eval runs")
@@ -445,9 +445,8 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
445
445
  attributes = {
446
446
  "evalId": eval_item.id,
447
447
  "span_type": "eval",
448
+ "execution.id": runtime_context.execution_id,
448
449
  }
449
- if runtime_context.execution_id:
450
- attributes["execution.id"] = runtime_context.execution_id
451
450
 
452
451
  start_time = time()
453
452
  try:
@@ -7,7 +7,7 @@ from httpx import Response
7
7
  from .._config import Config
8
8
  from .._execution_context import ExecutionContext
9
9
  from .._utils import Endpoint, RequestSpec, header_folder, infer_bindings
10
- from ..models import Connection, ConnectionToken, EventArguments
10
+ from ..models import Connection, ConnectionMetadata, ConnectionToken, EventArguments
11
11
  from ..models.connections import ConnectionTokenType
12
12
  from ..tracing._traced import traced
13
13
  from ._base_service import BaseService
@@ -54,6 +54,31 @@ class ConnectionsService(BaseService):
54
54
  response = self.request(spec.method, url=spec.endpoint)
55
55
  return Connection.model_validate(response.json())
56
56
 
57
+ @traced(
58
+ name="connections_metadata",
59
+ run_type="uipath",
60
+ hide_output=True,
61
+ )
62
+ def metadata(
63
+ self, element_instance_id: int, tool_path: str, schema_mode: bool = True
64
+ ) -> ConnectionMetadata:
65
+ """Synchronously retrieve connection API metadata.
66
+
67
+ This method fetches the metadata for a connection,
68
+ which can be used to establish communication with an external service.
69
+
70
+ Args:
71
+ element_instance_id (int): The element instance ID of the connection.
72
+ tool_path (str): The tool path to retrieve metadata for.
73
+ schema_mode (bool): Whether or not to represent the output schema in the response fields.
74
+
75
+ Returns:
76
+ ConnectionMetadata: The connection metadata.
77
+ """
78
+ spec = self._metadata_spec(element_instance_id, tool_path, schema_mode)
79
+ response = self.request(spec.method, url=spec.endpoint, headers=spec.headers)
80
+ return ConnectionMetadata.model_validate(response.json())
81
+
57
82
  @traced(name="connections_list", run_type="uipath")
58
83
  def list(
59
84
  self,
@@ -186,6 +211,33 @@ class ConnectionsService(BaseService):
186
211
  response = await self.request_async(spec.method, url=spec.endpoint)
187
212
  return Connection.model_validate(response.json())
188
213
 
214
+ @traced(
215
+ name="connections_metadata",
216
+ run_type="uipath",
217
+ hide_output=True,
218
+ )
219
+ async def metadata_async(
220
+ self, element_instance_id: int, tool_path: str, schema_mode: bool = True
221
+ ) -> ConnectionMetadata:
222
+ """Asynchronously retrieve connection API metadata.
223
+
224
+ This method fetches the metadata for a connection,
225
+ which can be used to establish communication with an external service.
226
+
227
+ Args:
228
+ element_instance_id (int): The element instance ID of the connection.
229
+ tool_path (str): The tool path to retrieve metadata for.
230
+ schema_mode (bool): Whether or not to represent the output schema in the response fields.
231
+
232
+ Returns:
233
+ ConnectionMetadata: The connection metadata.
234
+ """
235
+ spec = self._metadata_spec(element_instance_id, tool_path, schema_mode)
236
+ response = await self.request_async(
237
+ spec.method, url=spec.endpoint, headers=spec.headers
238
+ )
239
+ return ConnectionMetadata.model_validate(response.json())
240
+
189
241
  @traced(
190
242
  name="connections_retrieve_token",
191
243
  run_type="uipath",
@@ -324,6 +376,20 @@ class ConnectionsService(BaseService):
324
376
  endpoint=Endpoint(f"/connections_/api/v1/Connections/{key}"),
325
377
  )
326
378
 
379
+ def _metadata_spec(
380
+ self, element_instance_id: int, tool_path: str, schema_mode: bool
381
+ ) -> RequestSpec:
382
+ metadata_endpoint_url = f"/elements_/v3/element/instances/{element_instance_id}/elements/{tool_path}/metadata"
383
+ return RequestSpec(
384
+ method="GET",
385
+ endpoint=Endpoint(metadata_endpoint_url),
386
+ headers={
387
+ "accept": "application/schema+json"
388
+ if schema_mode
389
+ else "application/json"
390
+ },
391
+ )
392
+
327
393
  def _retrieve_token_spec(
328
394
  self, key: str, token_type: ConnectionTokenType = ConnectionTokenType.DIRECT
329
395
  ) -> RequestSpec:
@@ -3,7 +3,7 @@ from .actions import Action
3
3
  from .assets import Asset, UserAsset
4
4
  from .attachment import Attachment
5
5
  from .buckets import Bucket
6
- from .connections import Connection, ConnectionToken, EventArguments
6
+ from .connections import Connection, ConnectionMetadata, ConnectionToken, EventArguments
7
7
  from .context_grounding import ContextGroundingQueryResponse
8
8
  from .context_grounding_index import ContextGroundingIndex
9
9
  from .errors import BaseUrlMissingError, SecretMissingError
@@ -38,6 +38,7 @@ __all__ = [
38
38
  "QueueItemPriority",
39
39
  "TransactionItemResult",
40
40
  "Connection",
41
+ "ConnectionMetadata",
41
42
  "ConnectionToken",
42
43
  "EventArguments",
43
44
  "Job",
@@ -4,6 +4,14 @@ from typing import Any, Optional
4
4
  from pydantic import BaseModel, ConfigDict, Field
5
5
 
6
6
 
7
+ class ConnectionMetadata(BaseModel):
8
+ """Metadata about a connection."""
9
+
10
+ fields: dict[str, Any] = Field(default_factory=dict, alias="fields")
11
+
12
+ model_config = ConfigDict(populate_by_name=True, extra="allow")
13
+
14
+
7
15
  class Connection(BaseModel):
8
16
  model_config = ConfigDict(
9
17
  validate_by_name=True,
@@ -0,0 +1,111 @@
1
+ """Json schema to dynamic pydantic model."""
2
+
3
+ from typing import Any, Dict, List, Optional, Type, Union
4
+
5
+ from pydantic import BaseModel, Field, create_model
6
+
7
+
8
+ def jsonschema_to_pydantic(
9
+ schema: dict[str, Any],
10
+ definitions: Optional[dict[str, Any]] = None,
11
+ ) -> Type[BaseModel]:
12
+ """Convert a schema dict to a pydantic model.
13
+
14
+ Modified version of https://github.com/kreneskyp/jsonschema-pydantic to account for two unresolved issues.
15
+
16
+ Args:
17
+ schema: JSON schema.
18
+ definitions: Definitions dict. Defaults to `$def`.
19
+
20
+ Returns: Pydantic model.
21
+ """
22
+ title = schema.get("title", "DynamicModel")
23
+ assert isinstance(title, str), "Title of a model must be a string."
24
+
25
+ description = schema.get("description", None)
26
+
27
+ # top level schema provides definitions
28
+ if definitions is None:
29
+ if "$defs" in schema:
30
+ definitions = schema["$defs"]
31
+ elif "definitions" in schema:
32
+ definitions = schema["definitions"]
33
+ else:
34
+ definitions = {}
35
+
36
+ def convert_type(prop: dict[str, Any]) -> Any:
37
+ if "$ref" in prop:
38
+ ref_path = prop["$ref"].split("/")
39
+ ref = definitions[ref_path[-1]]
40
+ return jsonschema_to_pydantic(ref, definitions)
41
+
42
+ if "type" in prop:
43
+ type_mapping = {
44
+ "string": str,
45
+ "number": float,
46
+ "integer": int,
47
+ "boolean": bool,
48
+ "array": List,
49
+ "object": Dict[str, Any],
50
+ "null": None,
51
+ }
52
+
53
+ type_ = prop["type"]
54
+
55
+ if type_ == "array":
56
+ item_type: Any = convert_type(prop.get("items", {}))
57
+ assert isinstance(item_type, type)
58
+ return List[item_type] # noqa F821
59
+ elif type_ == "object":
60
+ if "properties" in prop:
61
+ return jsonschema_to_pydantic(prop, definitions)
62
+ else:
63
+ return Dict[str, Any]
64
+ else:
65
+ return type_mapping.get(type_, Any)
66
+
67
+ elif "allOf" in prop:
68
+ combined_fields = {}
69
+ for sub_schema in prop["allOf"]:
70
+ model = jsonschema_to_pydantic(sub_schema, definitions)
71
+ combined_fields.update(model.__annotations__)
72
+ return create_model("CombinedModel", **combined_fields)
73
+
74
+ elif "anyOf" in prop:
75
+ unioned_types = tuple(
76
+ convert_type(sub_schema) for sub_schema in prop["anyOf"]
77
+ )
78
+ return Union[unioned_types]
79
+ elif prop == {} or "type" not in prop:
80
+ return Any
81
+ else:
82
+ raise ValueError(f"Unsupported schema: {prop}")
83
+
84
+ fields: dict[str, Any] = {}
85
+ required_fields = schema.get("required", [])
86
+
87
+ for name, prop in schema.get("properties", {}).items():
88
+ pydantic_type = convert_type(prop)
89
+ field_kwargs = {}
90
+ if "default" in prop:
91
+ field_kwargs["default"] = prop["default"]
92
+ if name not in required_fields:
93
+ # Note that we do not make this optional. This is due to a limitation in Pydantic/Python.
94
+ # If we convert the Optional type back to json schema, it is represented as type | None.
95
+ # pydantic_type = Optional[pydantic_type]
96
+
97
+ if "default" not in field_kwargs:
98
+ field_kwargs["default"] = None
99
+ if "description" in prop:
100
+ field_kwargs["description"] = prop["description"]
101
+ if "title" in prop:
102
+ field_kwargs["title"] = prop["title"]
103
+
104
+ fields[name] = (pydantic_type, Field(**field_kwargs))
105
+
106
+ convert_type(schema.get("properties", {}).get("choices", {}))
107
+
108
+ model = create_model(title, **fields)
109
+ if description:
110
+ model.__doc__ = description
111
+ return model
@@ -0,0 +1,95 @@
1
+ from typing import List, Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from uipath.utils.dynamic_schema import jsonschema_to_pydantic
6
+
7
+
8
+ def test_dynamic_schema():
9
+ # Arrange
10
+ class InnerSchema(BaseModel):
11
+ """Inner schema description."""
12
+
13
+ pass
14
+
15
+ class Schema(BaseModel):
16
+ """Schema description."""
17
+
18
+ string: str = Field(
19
+ default="", title="String Title", description="String Description"
20
+ )
21
+ optional_string: Optional[str] = Field(
22
+ default=None,
23
+ title="Optional String Title",
24
+ description="Optional String Description",
25
+ )
26
+ list_str: List[str] = Field(
27
+ default=[], title="List String", description="List String Description"
28
+ )
29
+
30
+ integer: int = Field(
31
+ default=0, title="Integer Title", description="Integer Description"
32
+ )
33
+ optional_integer: Optional[int] = Field(
34
+ default=None,
35
+ title="Option Integer Title",
36
+ description="Option Integer Description",
37
+ )
38
+ list_integer: List[int] = Field(
39
+ default=[],
40
+ title="List Integer Title",
41
+ description="List Integer Description",
42
+ )
43
+
44
+ floating: float = Field(
45
+ default=0.0, title="Floating Title", description="Floating Description"
46
+ )
47
+ optional_floating: Optional[float] = Field(
48
+ default=None,
49
+ title="Option Floating Title",
50
+ description="Option Floating Description",
51
+ )
52
+ list_floating: List[float] = Field(
53
+ default=[],
54
+ title="List Floating Title",
55
+ description="List Floating Description",
56
+ )
57
+
58
+ boolean: bool = Field(
59
+ default=False, title="Boolean Title", description="Boolean Description"
60
+ )
61
+ optional_boolean: Optional[bool] = Field(
62
+ default=None,
63
+ title="Option Boolean Title",
64
+ description="Option Boolean Description",
65
+ )
66
+ list_boolean: List[bool] = Field(
67
+ default=[],
68
+ title="List Boolean Title",
69
+ description="List Boolean Description",
70
+ )
71
+
72
+ nested_object: InnerSchema = Field(
73
+ default=InnerSchema(),
74
+ title="Nested Object Title",
75
+ description="Nested Object Description",
76
+ )
77
+ optional_nested_object: Optional[InnerSchema] = Field(
78
+ default=None,
79
+ title="Optional Nested Object Title",
80
+ description="Optional Nested Object Description",
81
+ )
82
+ list_nested_object: List[InnerSchema] = Field(
83
+ default=[],
84
+ title="List Nested Object Title",
85
+ description="List Nested Object Description",
86
+ )
87
+
88
+ schema_json = Schema.model_json_schema()
89
+
90
+ # Act
91
+ dynamic_schema = jsonschema_to_pydantic(schema_json)
92
+ dynamic_schema_json = dynamic_schema.model_json_schema()
93
+
94
+ # Assert
95
+ assert dynamic_schema_json == schema_json
@@ -2,6 +2,7 @@ from unittest.mock import MagicMock
2
2
  from urllib.parse import unquote_plus
3
3
 
4
4
  import pytest
5
+ from pydantic import ValidationError
5
6
  from pytest_httpx import HTTPXMock
6
7
 
7
8
  from uipath._config import Config
@@ -9,7 +10,13 @@ from uipath._execution_context import ExecutionContext
9
10
  from uipath._services.connections_service import ConnectionsService
10
11
  from uipath._services.folder_service import FolderService
11
12
  from uipath._utils.constants import HEADER_FOLDER_KEY, HEADER_USER_AGENT
12
- from uipath.models import Connection, ConnectionToken, EventArguments
13
+ from uipath.models import (
14
+ Connection,
15
+ ConnectionMetadata,
16
+ ConnectionToken,
17
+ EventArguments,
18
+ )
19
+ from uipath.utils.dynamic_schema import jsonschema_to_pydantic
13
20
 
14
21
 
15
22
  @pytest.fixture
@@ -81,6 +88,125 @@ class TestConnectionsService:
81
88
  == f"UiPath.Python.Sdk/UiPath.Python.Sdk.Activities.ConnectionsService.retrieve/{version}"
82
89
  )
83
90
 
91
+ def test_metadata(
92
+ self,
93
+ httpx_mock: HTTPXMock,
94
+ service: ConnectionsService,
95
+ base_url: str,
96
+ org: str,
97
+ tenant: str,
98
+ version: str,
99
+ ) -> None:
100
+ element_instance_id = 123
101
+ tool_path = "test-tool"
102
+ valid_choice = {
103
+ "index": 0,
104
+ "finishReason": "done",
105
+ "message": {"content": "foo", "role": "user"},
106
+ }
107
+ invalid_choice = {
108
+ "index": 0,
109
+ "finishReason": "done",
110
+ "message": {"content": 123, "role": "user"},
111
+ }
112
+ valid_object = {
113
+ "choices": [valid_choice],
114
+ "usage": {"totalTokens": 100},
115
+ "created": 1000,
116
+ }
117
+ invalid_object_1 = {
118
+ "choices": [valid_choice],
119
+ "usage": {"totalTokens": 100},
120
+ "created": "string",
121
+ }
122
+ invalid_object_2 = {
123
+ "choices": [invalid_choice],
124
+ "usage": {"totalTokens": 100},
125
+ "created": 1000,
126
+ }
127
+ json_schema = {
128
+ "$schema": "http://json-schema.org/draft-07/schema#",
129
+ "type": "object",
130
+ "properties": {
131
+ "choices": {
132
+ "title": "Choices",
133
+ "type": "array",
134
+ "items": {"$ref": "#/definitions/choices"},
135
+ },
136
+ "usage": {"title": "Usage", "$ref": "#/definitions/usage"},
137
+ "created": {
138
+ "title": "Creation timestamp",
139
+ "type": "integer",
140
+ "format": "int64",
141
+ },
142
+ },
143
+ "definitions": {
144
+ "message": {
145
+ "type": "object",
146
+ "title": "Message",
147
+ "properties": {
148
+ "content": {
149
+ "title": "Translated message content",
150
+ "type": "string",
151
+ },
152
+ "role": {
153
+ "title": "Role of the message sender",
154
+ "type": "string",
155
+ },
156
+ },
157
+ },
158
+ "choices": {
159
+ "type": "object",
160
+ "title": "Choices",
161
+ "properties": {
162
+ "index": {
163
+ "title": "Choice index",
164
+ "type": "integer",
165
+ "format": "int64",
166
+ },
167
+ "finish_reason": {
168
+ "title": "Completion reason",
169
+ "type": "string",
170
+ },
171
+ "message": {
172
+ "title": "Message",
173
+ "$ref": "#/definitions/message",
174
+ },
175
+ },
176
+ },
177
+ "usage": {
178
+ "type": "object",
179
+ "title": "Usage",
180
+ "properties": {
181
+ "total_tokens": {
182
+ "title": "Total tokens used",
183
+ "type": "integer",
184
+ "format": "int64",
185
+ }
186
+ },
187
+ },
188
+ },
189
+ }
190
+ httpx_mock.add_response(
191
+ url=f"{base_url}{org}{tenant}/elements_/v3/element/instances/{element_instance_id}/elements/{tool_path}/metadata",
192
+ status_code=200,
193
+ json={
194
+ "fields": json_schema,
195
+ },
196
+ )
197
+
198
+ metadata = service.metadata(element_instance_id, tool_path)
199
+
200
+ assert isinstance(metadata, ConnectionMetadata)
201
+ dynamic_type = jsonschema_to_pydantic(metadata.fields)
202
+
203
+ dynamic_type.model_validate(valid_object)
204
+ with pytest.raises(ValidationError):
205
+ assert dynamic_type.model_validate(invalid_object_1)
206
+ with pytest.raises(ValidationError):
207
+ assert dynamic_type.model_validate(invalid_object_2)
208
+ dynamic_type.model_json_schema()
209
+
84
210
  @pytest.mark.anyio
85
211
  async def test_retrieve_async(
86
212
  self,
@@ -127,6 +253,125 @@ class TestConnectionsService:
127
253
  == f"UiPath.Python.Sdk/UiPath.Python.Sdk.Activities.ConnectionsService.retrieve_async/{version}"
128
254
  )
129
255
 
256
+ async def test_metadata_async(
257
+ self,
258
+ httpx_mock: HTTPXMock,
259
+ service: ConnectionsService,
260
+ base_url: str,
261
+ org: str,
262
+ tenant: str,
263
+ version: str,
264
+ ) -> None:
265
+ element_instance_id = 123
266
+ tool_path = "test-tool"
267
+ valid_choice = {
268
+ "index": 0,
269
+ "finishReason": "done",
270
+ "message": {"content": "foo", "role": "user"},
271
+ }
272
+ invalid_choice = {
273
+ "index": 0,
274
+ "finishReason": "done",
275
+ "message": {"content": 123, "role": "user"},
276
+ }
277
+ valid_object = {
278
+ "choices": [valid_choice],
279
+ "usage": {"totalTokens": 100},
280
+ "created": 1000,
281
+ }
282
+ invalid_object_1 = {
283
+ "choices": [valid_choice],
284
+ "usage": {"totalTokens": 100},
285
+ "created": "string",
286
+ }
287
+ invalid_object_2 = {
288
+ "choices": [invalid_choice],
289
+ "usage": {"totalTokens": 100},
290
+ "created": 1000,
291
+ }
292
+ json_schema = {
293
+ "$schema": "http://json-schema.org/draft-07/schema#",
294
+ "type": "object",
295
+ "properties": {
296
+ "choices": {
297
+ "title": "Choices",
298
+ "type": "array",
299
+ "items": {"$ref": "#/definitions/choices"},
300
+ },
301
+ "usage": {"title": "Usage", "$ref": "#/definitions/usage"},
302
+ "created": {
303
+ "title": "Creation timestamp",
304
+ "type": "integer",
305
+ "format": "int64",
306
+ },
307
+ },
308
+ "definitions": {
309
+ "message": {
310
+ "type": "object",
311
+ "title": "Message",
312
+ "properties": {
313
+ "content": {
314
+ "title": "Translated message content",
315
+ "type": "string",
316
+ },
317
+ "role": {
318
+ "title": "Role of the message sender",
319
+ "type": "string",
320
+ },
321
+ },
322
+ },
323
+ "choices": {
324
+ "type": "object",
325
+ "title": "Choices",
326
+ "properties": {
327
+ "index": {
328
+ "title": "Choice index",
329
+ "type": "integer",
330
+ "format": "int64",
331
+ },
332
+ "finish_reason": {
333
+ "title": "Completion reason",
334
+ "type": "string",
335
+ },
336
+ "message": {
337
+ "title": "Message",
338
+ "$ref": "#/definitions/message",
339
+ },
340
+ },
341
+ },
342
+ "usage": {
343
+ "type": "object",
344
+ "title": "Usage",
345
+ "properties": {
346
+ "total_tokens": {
347
+ "title": "Total tokens used",
348
+ "type": "integer",
349
+ "format": "int64",
350
+ }
351
+ },
352
+ },
353
+ },
354
+ }
355
+ httpx_mock.add_response(
356
+ url=f"{base_url}{org}{tenant}/elements_/v3/element/instances/{element_instance_id}/elements/{tool_path}/metadata",
357
+ status_code=200,
358
+ json={
359
+ "fields": json_schema,
360
+ },
361
+ )
362
+
363
+ metadata = await service.metadata_async(element_instance_id, tool_path)
364
+
365
+ assert isinstance(metadata, ConnectionMetadata)
366
+ dynamic_type = jsonschema_to_pydantic(metadata.fields)
367
+
368
+ dynamic_type.model_validate(valid_object)
369
+ with pytest.raises(ValidationError):
370
+ assert dynamic_type.model_validate(invalid_object_1)
371
+ with pytest.raises(ValidationError):
372
+ assert dynamic_type.model_validate(invalid_object_2)
373
+ dynamic_type.model_json_schema()
374
+
130
375
  def test_retrieve_token(
131
376
  self,
132
377
  httpx_mock: HTTPXMock,
@@ -2146,7 +2146,7 @@ wheels = [
2146
2146
 
2147
2147
  [[package]]
2148
2148
  name = "uipath"
2149
- version = "2.1.84"
2149
+ version = "2.1.85"
2150
2150
  source = { editable = "." }
2151
2151
  dependencies = [
2152
2152
  { name = "azure-monitor-opentelemetry" },
File without changes
File without changes
File without changes
File without changes