uipath 2.0.69__tar.gz → 2.0.71__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 (196) hide show
  1. {uipath-2.0.69 → uipath-2.0.71}/PKG-INFO +1 -1
  2. {uipath-2.0.69 → uipath-2.0.71}/docs/cli/index.md +4 -0
  3. {uipath-2.0.69 → uipath-2.0.71}/pyproject.toml +1 -1
  4. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_init.py +53 -8
  5. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_pack.py +1 -1
  6. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/middlewares.py +27 -1
  7. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/buckets_service.py +34 -10
  8. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/context_grounding_service.py +4 -4
  9. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/telemetry/_constants.py +1 -1
  10. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_buckets_service.py +0 -1
  11. {uipath-2.0.69 → uipath-2.0.71}/uv.lock +1 -1
  12. {uipath-2.0.69 → uipath-2.0.71}/.cursorrules +0 -0
  13. {uipath-2.0.69 → uipath-2.0.71}/.editorconfig +0 -0
  14. {uipath-2.0.69 → uipath-2.0.71}/.gitattributes +0 -0
  15. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/cd.yml +0 -0
  16. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/ci.yml +0 -0
  17. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/commitlint.yml +0 -0
  18. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/lint.yml +0 -0
  19. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/publish-dev.yml +0 -0
  20. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/publish-docs.yml +0 -0
  21. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/slack.yml +0 -0
  22. {uipath-2.0.69 → uipath-2.0.71}/.github/workflows/test.yml +0 -0
  23. {uipath-2.0.69 → uipath-2.0.71}/.gitignore +0 -0
  24. {uipath-2.0.69 → uipath-2.0.71}/.pre-commit-config.yaml +0 -0
  25. {uipath-2.0.69 → uipath-2.0.71}/.python-version +0 -0
  26. {uipath-2.0.69 → uipath-2.0.71}/.vscode/extensions.json +0 -0
  27. {uipath-2.0.69 → uipath-2.0.71}/.vscode/launch.json +0 -0
  28. {uipath-2.0.69 → uipath-2.0.71}/.vscode/settings.json +0 -0
  29. {uipath-2.0.69 → uipath-2.0.71}/CONTRIBUTING.md +0 -0
  30. {uipath-2.0.69 → uipath-2.0.71}/LICENSE +0 -0
  31. {uipath-2.0.69 → uipath-2.0.71}/README.md +0 -0
  32. {uipath-2.0.69 → uipath-2.0.71}/docs/CONTRIBUTING.md +0 -0
  33. {uipath-2.0.69 → uipath-2.0.71}/docs/FAQ.md +0 -0
  34. {uipath-2.0.69 → uipath-2.0.71}/docs/assets/env-preparation-failed-dark.png +0 -0
  35. {uipath-2.0.69 → uipath-2.0.71}/docs/assets/env-preparation-failed-light.png +0 -0
  36. {uipath-2.0.69 → uipath-2.0.71}/docs/assets/favicon.png +0 -0
  37. {uipath-2.0.69 → uipath-2.0.71}/docs/assets/logo-dark.svg +0 -0
  38. {uipath-2.0.69 → uipath-2.0.71}/docs/assets/logo-light.svg +0 -0
  39. {uipath-2.0.69 → uipath-2.0.71}/docs/core/actions.md +0 -0
  40. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  41. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets/cloud_env_var_light.gif +0 -0
  42. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  43. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  44. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets/copy_path_dark.png +0 -0
  45. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets/copy_path_light.png +0 -0
  46. {uipath-2.0.69 → uipath-2.0.71}/docs/core/assets.md +0 -0
  47. {uipath-2.0.69 → uipath-2.0.71}/docs/core/attachments.md +0 -0
  48. {uipath-2.0.69 → uipath-2.0.71}/docs/core/buckets.md +0 -0
  49. {uipath-2.0.69 → uipath-2.0.71}/docs/core/connections.md +0 -0
  50. {uipath-2.0.69 → uipath-2.0.71}/docs/core/context_grounding.md +0 -0
  51. {uipath-2.0.69 → uipath-2.0.71}/docs/core/environment_variables.md +0 -0
  52. {uipath-2.0.69 → uipath-2.0.71}/docs/core/getting_started.md +0 -0
  53. {uipath-2.0.69 → uipath-2.0.71}/docs/core/jobs.md +0 -0
  54. {uipath-2.0.69 → uipath-2.0.71}/docs/core/processes.md +0 -0
  55. {uipath-2.0.69 → uipath-2.0.71}/docs/core/queues.md +0 -0
  56. {uipath-2.0.69 → uipath-2.0.71}/docs/core/traced.md +0 -0
  57. {uipath-2.0.69 → uipath-2.0.71}/docs/hooks.py +0 -0
  58. {uipath-2.0.69 → uipath-2.0.71}/docs/javascripts/extra.js +0 -0
  59. {uipath-2.0.69 → uipath-2.0.71}/docs/langchain/chat_models.md +0 -0
  60. {uipath-2.0.69 → uipath-2.0.71}/docs/langchain/context_grounding.md +0 -0
  61. {uipath-2.0.69 → uipath-2.0.71}/docs/langchain/human_in_the_loop.md +0 -0
  62. {uipath-2.0.69 → uipath-2.0.71}/docs/overrides/main.html +0 -0
  63. {uipath-2.0.69 → uipath-2.0.71}/docs/overrides/partials/actions.html +0 -0
  64. {uipath-2.0.69 → uipath-2.0.71}/docs/overrides/partials/logo.html +0 -0
  65. {uipath-2.0.69 → uipath-2.0.71}/docs/release_policy.md +0 -0
  66. {uipath-2.0.69 → uipath-2.0.71}/docs/stylesheets/extra.css +0 -0
  67. {uipath-2.0.69 → uipath-2.0.71}/justfile +0 -0
  68. {uipath-2.0.69 → uipath-2.0.71}/mkdocs.yml +0 -0
  69. {uipath-2.0.69 → uipath-2.0.71}/py.typed +0 -0
  70. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/__init__.py +0 -0
  71. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/README.md +0 -0
  72. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/__init__.py +0 -0
  73. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  74. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/_models.py +0 -0
  75. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  76. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  77. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/_utils.py +0 -0
  78. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/auth_config.json +0 -0
  79. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/index.html +0 -0
  80. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/localhost.crt +0 -0
  81. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_auth/localhost.key +0 -0
  82. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  83. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  84. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  85. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_runtime/_logging.py +0 -0
  86. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  87. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  88. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_templates/.rels.template +0 -0
  89. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  90. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_templates/main.py.template +0 -0
  91. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  92. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_common.py +0 -0
  93. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_console.py +0 -0
  94. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_constants.py +0 -0
  95. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_debug.py +0 -0
  96. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_folders.py +0 -0
  97. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_input_args.py +0 -0
  98. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  99. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_processes.py +0 -0
  100. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/_utils/_tracing.py +0 -0
  101. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_auth.py +0 -0
  102. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_deploy.py +0 -0
  103. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_invoke.py +0 -0
  104. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_new.py +0 -0
  105. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_publish.py +0 -0
  106. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/cli_run.py +0 -0
  107. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_cli/spinner.py +0 -0
  108. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_config.py +0 -0
  109. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_execution_context.py +0 -0
  110. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_folder_context.py +0 -0
  111. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/__init__.py +0 -0
  112. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/_base_service.py +0 -0
  113. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/actions_service.py +0 -0
  114. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/api_client.py +0 -0
  115. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/assets_service.py +0 -0
  116. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/attachments_service.py +0 -0
  117. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/connections_service.py +0 -0
  118. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/folder_service.py +0 -0
  119. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/jobs_service.py +0 -0
  120. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/llm_gateway_service.py +0 -0
  121. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/processes_service.py +0 -0
  122. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_services/queues_service.py +0 -0
  123. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_uipath.py +0 -0
  124. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/__init__.py +0 -0
  125. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_endpoint.py +0 -0
  126. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_infer_bindings.py +0 -0
  127. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_logs.py +0 -0
  128. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_read_overwrites.py +0 -0
  129. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_request_override.py +0 -0
  130. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_request_spec.py +0 -0
  131. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_url.py +0 -0
  132. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/_user_agent.py +0 -0
  133. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/_utils/constants.py +0 -0
  134. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/__init__.py +0 -0
  135. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/action_schema.py +0 -0
  136. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/actions.py +0 -0
  137. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/assets.py +0 -0
  138. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/attachment.py +0 -0
  139. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/buckets.py +0 -0
  140. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/connections.py +0 -0
  141. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/context_grounding.py +0 -0
  142. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/context_grounding_index.py +0 -0
  143. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/errors.py +0 -0
  144. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/exceptions.py +0 -0
  145. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/interrupt_models.py +0 -0
  146. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/job.py +0 -0
  147. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/llm_gateway.py +0 -0
  148. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/processes.py +0 -0
  149. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/models/queues.py +0 -0
  150. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/py.typed +0 -0
  151. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/telemetry/__init__.py +0 -0
  152. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/telemetry/_track.py +0 -0
  153. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/tracing/__init__.py +0 -0
  154. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/tracing/_otel_exporters.py +0 -0
  155. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/tracing/_traced.py +0 -0
  156. {uipath-2.0.69 → uipath-2.0.71}/src/uipath/tracing/_utils.py +0 -0
  157. {uipath-2.0.69 → uipath-2.0.71}/tests/__init__.py +0 -0
  158. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/conftest.py +0 -0
  159. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/mocks/bindings_script.py +0 -0
  160. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/mocks/pyproject.toml +0 -0
  161. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/mocks/simple_script.py +0 -0
  162. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/mocks/uipath-mock.json +0 -0
  163. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  164. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_hitl.py +0 -0
  165. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_init.py +0 -0
  166. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_invoke.py +0 -0
  167. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_new.py +0 -0
  168. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_pack.py +0 -0
  169. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_publish.py +0 -0
  170. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_run.py +0 -0
  171. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/test_utils.py +0 -0
  172. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/utils/project_details.py +0 -0
  173. {uipath-2.0.69 → uipath-2.0.71}/tests/cli/utils/uipath_json.py +0 -0
  174. {uipath-2.0.69 → uipath-2.0.71}/tests/conftest.py +0 -0
  175. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/conftest.py +0 -0
  176. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_actions_service.py +0 -0
  177. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_api_client.py +0 -0
  178. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_assets_service.py +0 -0
  179. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_attachments_service.py +0 -0
  180. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_base_service.py +0 -0
  181. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_connections_service.py +0 -0
  182. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_context_grounding_service.py +0 -0
  183. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_folder_service.py +0 -0
  184. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_jobs_service.py +0 -0
  185. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_llm_integration.py +0 -0
  186. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_llm_service.py +0 -0
  187. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_processes_service.py +0 -0
  188. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_queues_service.py +0 -0
  189. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  190. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/test_bindings_inference.py +0 -0
  191. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/test_config.py +0 -0
  192. {uipath-2.0.69 → uipath-2.0.71}/tests/sdk/test_overwrites.py +0 -0
  193. {uipath-2.0.69 → uipath-2.0.71}/tests/tracing/test_otel_exporters.py +0 -0
  194. {uipath-2.0.69 → uipath-2.0.71}/tests/tracing/test_span_utils.py +0 -0
  195. {uipath-2.0.69 → uipath-2.0.71}/tests/tracing/test_traced.py +0 -0
  196. {uipath-2.0.69 → uipath-2.0.71}/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.69
3
+ Version: 2.0.71
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
@@ -27,6 +27,10 @@ Selected tenant: Tenant1
27
27
  :depth: 1
28
28
  :style: table
29
29
 
30
+ Package requirements (bindings) are dependencies that are required by the automation package for successful execution.
31
+
32
+ For more information about package requirements, see [the official documentation](https://docs.uipath.com/orchestrator/automation-cloud/latest/user-guide/managing-package-requirements)
33
+
30
34
  /// warning
31
35
 
32
36
  The `uipath init` command executes your `main.py` file to analyze its structure and collect information about inputs and outputs.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "uipath"
3
- version = "2.0.69"
3
+ version = "2.0.71"
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 json
3
3
  import os
4
4
  import uuid
5
5
  from pathlib import Path
6
- from typing import Optional
6
+ from typing import Any, Dict, Optional
7
7
 
8
8
  import click
9
9
  from dotenv import load_dotenv
@@ -16,6 +16,8 @@ from .middlewares import Middlewares
16
16
 
17
17
  console = ConsoleLogger()
18
18
 
19
+ CONFIG_PATH = "uipath.json"
20
+
19
21
 
20
22
  def generate_env_file(target_directory):
21
23
  env_path = os.path.join(target_directory, ".env")
@@ -27,6 +29,26 @@ def generate_env_file(target_directory):
27
29
  console.success(f" Created '{relative_path}' file.")
28
30
 
29
31
 
32
+ def get_existing_settings(config_path: str) -> Optional[Dict[str, Any]]:
33
+ """Read existing settings from uipath.json if it exists.
34
+
35
+ Args:
36
+ config_path: Path to the uipath.json file.
37
+
38
+ Returns:
39
+ The settings dictionary if it exists, None otherwise.
40
+ """
41
+ if not os.path.exists(config_path):
42
+ return None
43
+
44
+ try:
45
+ with open(config_path, "r") as config_file:
46
+ existing_config = json.load(config_file)
47
+ return existing_config.get("settings")
48
+ except (json.JSONDecodeError, IOError):
49
+ return None
50
+
51
+
30
52
  def get_user_script(directory: str, entrypoint: Optional[str] = None) -> Optional[str]:
31
53
  """Find the Python script to process."""
32
54
  if entrypoint:
@@ -52,10 +74,28 @@ def get_user_script(directory: str, entrypoint: Optional[str] = None) -> Optiona
52
74
  return None
53
75
 
54
76
 
77
+ def write_config_file(config_data: Dict[str, Any]) -> None:
78
+ existing_settings = get_existing_settings(CONFIG_PATH)
79
+ if existing_settings is not None:
80
+ config_data["settings"] = existing_settings
81
+
82
+ with open(CONFIG_PATH, "w") as config_file:
83
+ json.dump(config_data, config_file, indent=4)
84
+
85
+ return CONFIG_PATH
86
+
87
+
55
88
  @click.command()
56
89
  @click.argument("entrypoint", required=False, default=None)
90
+ @click.option(
91
+ "--infer-bindings/--no-infer-bindings",
92
+ is_flag=True,
93
+ required=False,
94
+ default=True,
95
+ help="Infer bindings from the script.",
96
+ )
57
97
  @track
58
- def init(entrypoint: str) -> None:
98
+ def init(entrypoint: str, infer_bindings: bool) -> None:
59
99
  """Create uipath.json with input/output schemas and bindings."""
60
100
  current_path = os.getcwd()
61
101
  load_dotenv(os.path.join(current_path, ".env"), override=True)
@@ -64,7 +104,12 @@ def init(entrypoint: str) -> None:
64
104
  current_directory = os.getcwd()
65
105
  generate_env_file(current_directory)
66
106
 
67
- result = Middlewares.next("init", entrypoint)
107
+ result = Middlewares.next(
108
+ "init",
109
+ entrypoint,
110
+ options={"infer_bindings": infer_bindings},
111
+ write_config=write_config_file,
112
+ )
68
113
 
69
114
  if result.error_message:
70
115
  console.error(
@@ -102,16 +147,16 @@ def init(entrypoint: str) -> None:
102
147
 
103
148
  # Generate bindings JSON based on the script path
104
149
  try:
105
- bindings_data = generate_bindings_json(script_path)
150
+ if infer_bindings:
151
+ bindings_data = generate_bindings_json(script_path)
152
+ else:
153
+ bindings_data = {}
106
154
  # Add bindings to the config data
107
155
  config_data["bindings"] = bindings_data
108
156
  except Exception as e:
109
157
  console.warning(f"Warning: Could not generate bindings: {str(e)}")
110
158
 
111
- config_path = "uipath.json"
112
- with open(config_path, "w") as config_file:
113
- json.dump(config_data, config_file, indent=4)
114
-
159
+ config_path = write_config_file(config_data)
115
160
  console.success(f"Created '{config_path}' file.")
116
161
  except Exception as e:
117
162
  console.error(f"Error creating configuration file:\n {str(e)}")
@@ -223,7 +223,7 @@ def pack_fn(projectName, description, entryPoints, version, authors, directory):
223
223
  file_extensions_included = [".py", ".mermaid", ".json", ".yaml", ".yml"]
224
224
  files_included = []
225
225
  # Binary files that should be read in binary mode
226
- binary_extensions = [".exe", ""]
226
+ binary_extensions = [".exe", "", ".xlsx", ".xls"]
227
227
 
228
228
  with open(config_path, "r") as f:
229
229
  config_data = json.load(f)
@@ -1,9 +1,13 @@
1
1
  import importlib.metadata
2
+ import inspect
2
3
  import logging
3
4
  from dataclasses import dataclass
4
5
  from typing import Any, Callable, Dict, List, Optional
5
6
 
7
+ from ._utils._console import ConsoleLogger
8
+
6
9
  logger = logging.getLogger(__name__)
10
+ console = ConsoleLogger()
7
11
 
8
12
 
9
13
  @dataclass
@@ -50,8 +54,30 @@ class Middlewares:
50
54
 
51
55
  middlewares = cls.get(command)
52
56
  for middleware in middlewares:
57
+ sig = inspect.signature(middleware)
58
+
59
+ # handle older versions of plugins that don't support the new signature
60
+ try:
61
+ bound = sig.bind(*args, **kwargs)
62
+ new_args = bound.args
63
+ new_kwargs = bound.kwargs
64
+ except TypeError:
65
+ console.warning("Install the latest version for uipath packages")
66
+ accepted_args = [
67
+ name
68
+ for name, param in sig.parameters.items()
69
+ if param.kind
70
+ in (param.POSITIONAL_ONLY, param.POSITIONAL_OR_KEYWORD)
71
+ ]
72
+
73
+ trimmed_args = args[: len(accepted_args)]
74
+ trimmed_kwargs = {k: v for k, v in kwargs.items() if k in accepted_args}
75
+
76
+ new_args = trimmed_args
77
+ new_kwargs = trimmed_kwargs
78
+
53
79
  try:
54
- result = middleware(*args, **kwargs)
80
+ result = middleware(*new_args, **new_kwargs)
55
81
  if not result.should_continue:
56
82
  logger.debug(
57
83
  f"Command '{command}' stopped by {middleware.__name__}"
@@ -1,3 +1,4 @@
1
+ import mimetypes
1
2
  from typing import Any, Dict, Optional, Union
2
3
 
3
4
  import httpx
@@ -154,7 +155,7 @@ class BucketsService(FolderContext, BaseService):
154
155
  key: Optional[str] = None,
155
156
  name: Optional[str] = None,
156
157
  blob_file_path: str,
157
- content_type: str,
158
+ content_type: Optional[str] = None,
158
159
  source_path: Optional[str] = None,
159
160
  content: Optional[Union[str, bytes]] = None,
160
161
  folder_key: Optional[str] = None,
@@ -166,7 +167,7 @@ class BucketsService(FolderContext, BaseService):
166
167
  key (Optional[str]): The key of the bucket.
167
168
  name (Optional[str]): The name of the bucket.
168
169
  blob_file_path (str): The path where the file will be stored in the bucket.
169
- content_type (str): The MIME type of the file.
170
+ content_type (Optional[str]): The MIME type of the file. For file inputs this is computed dynamically. Default is "application/octet-stream".
170
171
  source_path (Optional[str]): The local path of the file to upload.
171
172
  content (Optional[Union[str, bytes]]): The content to upload (string or bytes).
172
173
  folder_key (Optional[str]): The key of the folder where the bucket resides.
@@ -185,9 +186,17 @@ class BucketsService(FolderContext, BaseService):
185
186
  name=name, key=key, folder_key=folder_key, folder_path=folder_path
186
187
  )
187
188
 
189
+ # if source_path, dynamically detect the mime type
190
+ # default to application/octet-stream
191
+ if source_path:
192
+ _content_type, _ = mimetypes.guess_type(source_path)
193
+ else:
194
+ _content_type = content_type
195
+ _content_type = _content_type or "application/octet-stream"
196
+
188
197
  spec = self._retrieve_writeri_spec(
189
198
  bucket.id,
190
- content_type,
199
+ _content_type,
191
200
  blob_file_path,
192
201
  folder_key=folder_key,
193
202
  folder_path=folder_path,
@@ -209,6 +218,8 @@ class BucketsService(FolderContext, BaseService):
209
218
  )
210
219
  }
211
220
 
221
+ headers["Content-Type"] = _content_type
222
+
212
223
  if content is not None:
213
224
  if isinstance(content, str):
214
225
  content = content.encode("utf-8")
@@ -220,13 +231,14 @@ class BucketsService(FolderContext, BaseService):
220
231
 
221
232
  if source_path is not None:
222
233
  with open(source_path, "rb") as file:
234
+ file_content = file.read()
223
235
  if result["RequiresAuth"]:
224
236
  self.request(
225
- "PUT", write_uri, headers=headers, files={"file": file}
237
+ "PUT", write_uri, headers=headers, content=file_content
226
238
  )
227
239
  else:
228
240
  self.custom_client.put(
229
- write_uri, headers=headers, files={"file": file}
241
+ write_uri, headers=headers, content=file_content
230
242
  )
231
243
 
232
244
  @traced(name="buckets_upload", run_type="uipath")
@@ -237,7 +249,7 @@ class BucketsService(FolderContext, BaseService):
237
249
  key: Optional[str] = None,
238
250
  name: Optional[str] = None,
239
251
  blob_file_path: str,
240
- content_type: str,
252
+ content_type: Optional[str] = None,
241
253
  source_path: Optional[str] = None,
242
254
  content: Optional[Union[str, bytes]] = None,
243
255
  folder_key: Optional[str] = None,
@@ -249,8 +261,9 @@ class BucketsService(FolderContext, BaseService):
249
261
  key (Optional[str]): The key of the bucket.
250
262
  name (Optional[str]): The name of the bucket.
251
263
  blob_file_path (str): The path where the file will be stored in the bucket.
252
- content_type (str): The MIME type of the file.
264
+ content_type (Optional[str]): The MIME type of the file. For file inputs this is computed dynamically. Default is "application/octet-stream".
253
265
  source_path (str): The local path of the file to upload.
266
+ content (Optional[Union[str, bytes]]): The content to upload (string or bytes).
254
267
  folder_key (Optional[str]): The key of the folder where the bucket resides.
255
268
  folder_path (Optional[str]): The path of the folder where the bucket resides.
256
269
 
@@ -267,9 +280,17 @@ class BucketsService(FolderContext, BaseService):
267
280
  name=name, key=key, folder_key=folder_key, folder_path=folder_path
268
281
  )
269
282
 
283
+ # if source_path, dynamically detect the mime type
284
+ # default to application/octet-stream
285
+ if source_path:
286
+ _content_type, _ = mimetypes.guess_type(source_path)
287
+ else:
288
+ _content_type = content_type
289
+ _content_type = _content_type or "application/octet-stream"
290
+
270
291
  spec = self._retrieve_writeri_spec(
271
292
  bucket.id,
272
- content_type,
293
+ _content_type,
273
294
  blob_file_path,
274
295
  folder_key=folder_key,
275
296
  folder_path=folder_path,
@@ -293,6 +314,8 @@ class BucketsService(FolderContext, BaseService):
293
314
  )
294
315
  }
295
316
 
317
+ headers["Content-Type"] = _content_type
318
+
296
319
  if content is not None:
297
320
  if isinstance(content, str):
298
321
  content = content.encode("utf-8")
@@ -308,13 +331,14 @@ class BucketsService(FolderContext, BaseService):
308
331
 
309
332
  if source_path is not None:
310
333
  with open(source_path, "rb") as file:
334
+ file_content = file.read()
311
335
  if result["RequiresAuth"]:
312
336
  await self.request_async(
313
- "PUT", write_uri, headers=headers, files={"file": file}
337
+ "PUT", write_uri, headers=headers, content=file_content
314
338
  )
315
339
  else:
316
340
  await self.custom_client_async.put(
317
- write_uri, headers=headers, files={"file": file}
341
+ write_uri, headers=headers, content=file_content
318
342
  )
319
343
 
320
344
  @traced(name="buckets_retrieve", run_type="uipath")
@@ -50,8 +50,8 @@ class ContextGroundingService(FolderContext, BaseService):
50
50
  def add_to_index(
51
51
  self,
52
52
  name: str,
53
- content_type: str,
54
53
  blob_file_path: str,
54
+ content_type: Optional[str] = None,
55
55
  content: Optional[Union[str, bytes]] = None,
56
56
  source_path: Optional[str] = None,
57
57
  folder_key: Optional[str] = None,
@@ -62,7 +62,7 @@ class ContextGroundingService(FolderContext, BaseService):
62
62
 
63
63
  Args:
64
64
  name (str): The name of the index to add content to.
65
- content_type (str): The type of content being added.
65
+ content_type (Optional[str]): The MIME type of the file. For file inputs this is computed dynamically. Default is "application/octet-stream".
66
66
  blob_file_path (str): The path where the blob will be stored in the storage bucket.
67
67
  content (Optional[Union[str, bytes]]): The content to be added, either as a string or bytes.
68
68
  source_path (Optional[str]): The source path of the content if it is being uploaded from a file.
@@ -105,8 +105,8 @@ class ContextGroundingService(FolderContext, BaseService):
105
105
  async def add_to_index_async(
106
106
  self,
107
107
  name: str,
108
- content_type: str,
109
108
  blob_file_path: str,
109
+ content_type: Optional[str] = None,
110
110
  content: Optional[Union[str, bytes]] = None,
111
111
  source_path: Optional[str] = None,
112
112
  folder_key: Optional[str] = None,
@@ -117,7 +117,7 @@ class ContextGroundingService(FolderContext, BaseService):
117
117
 
118
118
  Args:
119
119
  name (str): The name of the index to add content to.
120
- content_type (str): The type of content being added.
120
+ content_type (Optional[str]): The MIME type of the file. For file inputs this is computed dynamically. Default is "application/octet-stream".
121
121
  blob_file_path (str): The path where the blob will be stored in the storage bucket.
122
122
  content (Optional[Union[str, bytes]]): The content to be added, either as a string or bytes.
123
123
  source_path (Optional[str]): The source path of the content if it is being uploaded from a file.
@@ -1,4 +1,4 @@
1
- _CONNECTION_STRING = "InstrumentationKey=d3da6dfc-5231-4d72-9696-f680a64683b8;IngestionEndpoint=https://westeurope-5.in.applicationinsights.azure.com/;LiveEndpoint=https://westeurope.livediagnostics.monitor.azure.com/;ApplicationId=9b73b209-6c6a-4d4a-9549-b922cef418d5"
1
+ _CONNECTION_STRING = "InstrumentationKey=0d8dca8b-9a76-4f2e-adeb-09d9e2c210a0;IngestionEndpoint=https://northeurope-2.in.applicationinsights.azure.com/;LiveEndpoint=https://northeurope.livediagnostics.monitor.azure.com/;ApplicationId=ff68f440-0d82-4bab-9192-ad91f67e0835"
2
2
 
3
3
  _APP_INSIGHTS_EVENT_MARKER_ATTRIBUTE = "APPLICATION_INSIGHTS_EVENT_MARKER_ATTRIBUTE"
4
4
  _OTEL_RESOURCE_ATTRIBUTES = "OTEL_RESOURCE_ATTRIBUTES"
@@ -224,7 +224,6 @@ class TestBucketsService:
224
224
  assert sent_requests[2].url == "https://test-storage.com/test-file.txt"
225
225
 
226
226
  assert b"test content" in sent_requests[2].content
227
- assert b"Content-Disposition: form-data;" in sent_requests[2].content
228
227
 
229
228
  def test_upload_from_memory(
230
229
  self,
@@ -3112,7 +3112,7 @@ wheels = [
3112
3112
 
3113
3113
  [[package]]
3114
3114
  name = "uipath"
3115
- version = "2.0.69"
3115
+ version = "2.0.71"
3116
3116
  source = { editable = "." }
3117
3117
  dependencies = [
3118
3118
  { name = "azure-monitor-opentelemetry" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes