UncountablePythonSDK 0.0.159__tar.gz → 0.0.162__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 (406) hide show
  1. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/.github/workflows/publish.yml +1 -1
  2. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/PKG-INFO +2 -1
  3. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/UncountablePythonSDK.egg-info/PKG-INFO +2 -1
  4. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/UncountablePythonSDK.egg-info/SOURCES.txt +8 -1
  5. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/UncountablePythonSDK.egg-info/requires.txt +1 -0
  6. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/requirements.txt +1 -1
  7. uncountablepythonsdk-0.0.162/docs/static/favicons/manifest.json +18 -0
  8. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/pyproject.toml +1 -1
  9. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/__init__.py +2 -0
  10. uncountablepythonsdk-0.0.162/pkgs/filesystem_utils/_file_share_session.py +131 -0
  11. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/file_type_utils.py +9 -0
  12. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/emit_open_api.py +21 -15
  13. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pyproject.toml +1 -0
  14. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/client.py +5 -0
  15. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/worker.py +15 -2
  16. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/__init__.py +10 -2
  17. uncountablepythonsdk-0.0.162/uncountable/types/api/file_folders/add_file_to_folder.py +43 -0
  18. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/outputs/update_output_condition_parameter.py +1 -0
  19. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/create_recipe.py +1 -0
  20. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/edit_recipe_inputs.py +59 -1
  21. uncountablepythonsdk-0.0.162/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +46 -0
  22. uncountablepythonsdk-0.0.162/uncountable/types/api/recipes/upsert_step_relationships.py +91 -0
  23. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/async_batch_processor.py +79 -1
  24. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/async_batch_t.py +2 -0
  25. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/client_base.py +83 -19
  26. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/entity_t.py +4 -0
  27. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/listing.py +1 -0
  28. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/listing_t.py +15 -1
  29. uncountablepythonsdk-0.0.162/uncountable/types/recipe_workflow_step_types.py +15 -0
  30. uncountablepythonsdk-0.0.162/uncountable/types/recipe_workflow_step_types_t.py +118 -0
  31. uncountablepythonsdk-0.0.162/uncountable/types/step_relationships.py +15 -0
  32. uncountablepythonsdk-0.0.162/uncountable/types/step_relationships_t.py +140 -0
  33. uncountablepythonsdk-0.0.159/docs/static/favicons/manifest.json +0 -18
  34. uncountablepythonsdk-0.0.159/uncountable/types/api/files/create_file_record.py +0 -41
  35. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/.github/workflows/documentation.yml +0 -0
  36. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/.gitignore +0 -0
  37. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/.python-version +0 -0
  38. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/README.md +0 -0
  39. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  40. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  41. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/.gitignore +0 -0
  42. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/conf.py +0 -0
  43. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/index.md +0 -0
  44. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/integration_examples/create_ingredient.md +0 -0
  45. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/integration_examples/create_output.md +0 -0
  46. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/integration_examples/index.md +0 -0
  47. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/integration_examples/upload_file.md +0 -0
  48. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/justfile +0 -0
  49. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/android-chrome-192x192.png +0 -0
  50. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/android-chrome-512x512.png +0 -0
  51. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/apple-touch-icon.png +0 -0
  52. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/browserconfig.xml +0 -0
  53. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/favicon-16x16.png +0 -0
  54. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/favicon-32x32.png +0 -0
  55. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/mstile-150x150.png +0 -0
  56. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  57. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/docs/static/logo_blue.png +0 -0
  58. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/async_batch.py +0 -0
  59. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/async_batch_large_parse.py +0 -0
  60. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/basic_auth.py +0 -0
  61. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/create_entity.py +0 -0
  62. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/create_ingredient_sdk.py +0 -0
  63. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/download_files.py +0 -0
  64. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/edit_recipe_inputs.py +0 -0
  65. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  66. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  67. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  68. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  69. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  70. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  71. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  72. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  73. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  74. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/invoke_uploader.py +0 -0
  75. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/oauth.py +0 -0
  76. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/set_input_pdf_attribute.py +0 -0
  77. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/set_recipe_metadata_file.py +0 -0
  78. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/set_recipe_output_file_sdk.py +0 -0
  79. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/examples/upload_files.py +0 -0
  80. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/__init__.py +0 -0
  81. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/argument_parser/__init__.py +0 -0
  82. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/argument_parser/_is_enum.py +0 -0
  83. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  84. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/argument_parser/argument_parser.py +0 -0
  85. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/argument_parser/case_convert.py +0 -0
  86. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/_blob_session.py +0 -0
  87. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  88. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/_local_session.py +0 -0
  89. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/_s3_session.py +0 -0
  90. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  91. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  92. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/py.typed +0 -0
  93. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/__init__.py +0 -0
  94. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/annotation.py +0 -0
  95. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/missing_sentry.py +0 -0
  96. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/opaque_key.py +0 -0
  97. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/serial_alias.py +0 -0
  98. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/serial_class.py +0 -0
  99. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/serial_generic.py +0 -0
  100. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/serial_union.py +0 -0
  101. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/unknown.py +0 -0
  102. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization/yaml.py +0 -0
  103. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization_util/__init__.py +0 -0
  104. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  105. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  106. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization_util/dataclasses.py +0 -0
  107. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/serialization_util/serialization_helpers.py +0 -0
  108. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/strenum_compat/__init__.py +0 -0
  109. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/strenum_compat/strenum_compat.py +0 -0
  110. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/__init__.py +0 -0
  111. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/__main__.py +0 -0
  112. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  113. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  114. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  115. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/builder.py +0 -0
  116. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/builder_types.py +0 -0
  117. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/config.py +0 -0
  118. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/cross_output_links.py +0 -0
  119. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/emit_io_ts.py +0 -0
  120. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/emit_open_api_util.py +0 -0
  121. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/emit_python.py +0 -0
  122. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/emit_typescript.py +0 -0
  123. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/emit_typescript_util.py +0 -0
  124. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/load_types.py +0 -0
  125. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  126. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/open_api_util.py +0 -0
  127. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/parts/base.py.prepart +0 -0
  128. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  129. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/test.py +0 -0
  130. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/type_info/__main__.py +0 -0
  131. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  132. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  133. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  134. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/util.py +0 -0
  135. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/value_spec/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/value_spec/__main__.py +0 -0
  137. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  138. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  139. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/pkgs/type_spec/value_spec/types.py +0 -0
  140. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/setup.cfg +0 -0
  141. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/__init__.py +0 -0
  142. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/async_batch.py +0 -0
  144. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/environment.py +0 -0
  145. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/file_upload.py +0 -0
  146. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/query/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/query/builder.py +0 -0
  148. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/query/column.py +0 -0
  149. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/query/row.py +0 -0
  150. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/query/types.py +0 -0
  151. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/core/types.py +0 -0
  152. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/__init__.py +0 -0
  153. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/cli.py +0 -0
  154. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/construct_client.py +0 -0
  155. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/cron.py +0 -0
  156. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/db/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/db/connect.py +0 -0
  158. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/db/session.py +0 -0
  159. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/entrypoint.py +0 -0
  160. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/executors/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/executors/executors.py +0 -0
  162. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  163. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/executors/script_executor.py +0 -0
  164. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/http_server/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/http_server/types.py +0 -0
  166. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/job.py +0 -0
  167. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/__init__.py +0 -0
  168. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  170. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  171. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  172. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  174. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  175. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  176. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  177. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  178. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  179. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  180. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  181. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  182. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  183. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  184. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/queue_runner/types.py +0 -0
  185. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/request_context.py +0 -0
  186. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/scan_profiles.py +0 -0
  187. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/scheduler.py +0 -0
  188. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  190. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/server.py +0 -0
  191. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/telemetry.py +0 -0
  192. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  193. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/py.typed +0 -0
  194. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/__init__.py +0 -0
  195. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/batch/__init__.py +0 -0
  196. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/batch/execute_batch.py +0 -0
  197. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  198. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/chemical/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  200. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  201. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  202. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/create_entities.py +0 -0
  204. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/create_entity.py +0 -0
  205. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  206. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/export_entities.py +0 -0
  207. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/get_entities_data.py +0 -0
  208. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  209. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/list_aggregate.py +0 -0
  210. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/list_entities.py +0 -0
  211. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/lock_entity.py +0 -0
  212. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/lookup_entity.py +0 -0
  213. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  214. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/set_barcode.py +0 -0
  215. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  216. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/set_values.py +0 -0
  217. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  218. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/entity/unlock_entity.py +0 -0
  219. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/equipment/__init__.py +0 -0
  220. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  221. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/field_options/__init__.py +0 -0
  222. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  223. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/file_folders/__init__.py +0 -0
  224. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  225. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/files/__init__.py +0 -0
  226. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/files/download_file.py +0 -0
  227. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/id_source/__init__.py +0 -0
  228. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/id_source/list_id_source.py +0 -0
  229. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/id_source/match_id_source.py +0 -0
  230. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/input_groups/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  232. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/__init__.py +0 -0
  233. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/create_inputs.py +0 -0
  234. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/get_input_data.py +0 -0
  235. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/get_input_names.py +0 -0
  236. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  237. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  238. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/set_input_category.py +0 -0
  239. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  240. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  241. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/integrations/__init__.py +0 -0
  242. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  243. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/integrations/push_notification.py +0 -0
  244. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  245. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/listing/__init__.py +0 -0
  246. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/listing/export_listing.py +0 -0
  247. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/listing/fetch_listing.py +0 -0
  248. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/material_families/__init__.py +0 -0
  249. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  250. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/notebooks/__init__.py +0 -0
  251. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  252. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
  253. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/outputs/__init__.py +0 -0
  254. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/outputs/get_output_data.py +0 -0
  255. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/outputs/get_output_names.py +0 -0
  256. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  257. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  258. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/permissions/__init__.py +0 -0
  259. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  260. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  261. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/project/__init__.py +0 -0
  262. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/project/get_projects.py +0 -0
  263. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/project/get_projects_data.py +0 -0
  264. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipe_links/__init__.py +0 -0
  265. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  266. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  267. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  268. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  269. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  271. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  272. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  273. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  274. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  275. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  276. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  277. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/create_recipes.py +0 -0
  278. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  279. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  280. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_curve.py +0 -0
  281. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  282. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  283. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  284. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  285. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  286. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  287. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  288. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  289. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  290. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  291. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  292. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  293. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  294. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  295. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  296. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  297. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/runsheet/__init__.py +0 -0
  298. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  299. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  300. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/triggers/__init__.py +0 -0
  301. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/triggers/run_trigger.py +0 -0
  302. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/uploader/__init__.py +0 -0
  303. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  304. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  305. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/user/__init__.py +0 -0
  306. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/api/user/get_current_user_info.py +0 -0
  307. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/async_batch.py +0 -0
  308. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/async_jobs.py +0 -0
  309. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/async_jobs_t.py +0 -0
  310. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/auth_retrieval.py +0 -0
  311. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/auth_retrieval_t.py +0 -0
  312. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/base.py +0 -0
  313. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/base_t.py +0 -0
  314. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/calculations.py +0 -0
  315. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/calculations_t.py +0 -0
  316. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/chemical_structure.py +0 -0
  317. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/chemical_structure_t.py +0 -0
  318. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/client_config.py +0 -0
  319. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/client_config_t.py +0 -0
  320. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/curves.py +0 -0
  321. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/curves_t.py +0 -0
  322. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/data.py +0 -0
  323. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/data_t.py +0 -0
  324. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/entity.py +0 -0
  325. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/experiment_groups.py +0 -0
  326. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/experiment_groups_t.py +0 -0
  327. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/exports.py +0 -0
  328. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/exports_t.py +0 -0
  329. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/field_values.py +0 -0
  330. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/field_values_t.py +0 -0
  331. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/fields.py +0 -0
  332. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/fields_t.py +0 -0
  333. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/generic_upload.py +0 -0
  334. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/generic_upload_t.py +0 -0
  335. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/id_source.py +0 -0
  336. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/id_source_t.py +0 -0
  337. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/identifier.py +0 -0
  338. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/identifier_t.py +0 -0
  339. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/input_attributes.py +0 -0
  340. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/input_attributes_t.py +0 -0
  341. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/inputs.py +0 -0
  342. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/inputs_t.py +0 -0
  343. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/integration_server.py +0 -0
  344. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/integration_server_t.py +0 -0
  345. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/integration_session.py +0 -0
  346. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/integration_session_t.py +0 -0
  347. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/integrations.py +0 -0
  348. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/integrations_t.py +0 -0
  349. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/job_definition.py +0 -0
  350. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/job_definition_t.py +0 -0
  351. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/notices.py +0 -0
  352. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/notices_t.py +0 -0
  353. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/notifications.py +0 -0
  354. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/notifications_t.py +0 -0
  355. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/outputs.py +0 -0
  356. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/outputs_t.py +0 -0
  357. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/overrides.py +0 -0
  358. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/overrides_t.py +0 -0
  359. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/permissions.py +0 -0
  360. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/permissions_t.py +0 -0
  361. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/phases.py +0 -0
  362. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/phases_t.py +0 -0
  363. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/post_base.py +0 -0
  364. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/post_base_t.py +0 -0
  365. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/queued_job.py +0 -0
  366. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/queued_job_t.py +0 -0
  367. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_identifiers.py +0 -0
  368. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_identifiers_t.py +0 -0
  369. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_inputs.py +0 -0
  370. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_inputs_t.py +0 -0
  371. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_links.py +0 -0
  372. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_links_t.py +0 -0
  373. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_metadata.py +0 -0
  374. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_metadata_t.py +0 -0
  375. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_output_metadata.py +0 -0
  376. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_output_metadata_t.py +0 -0
  377. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_step_relationships.py +0 -0
  378. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_step_relationships_t.py +0 -0
  379. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_tags.py +0 -0
  380. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_tags_t.py +0 -0
  381. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_workflow_steps.py +0 -0
  382. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  383. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipes.py +0 -0
  384. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/recipes_t.py +0 -0
  385. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/response.py +0 -0
  386. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/response_t.py +0 -0
  387. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/runsheet.py +0 -0
  388. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/runsheet_format.py +0 -0
  389. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/runsheet_format_t.py +0 -0
  390. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/runsheet_t.py +0 -0
  391. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/secret_retrieval.py +0 -0
  392. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/secret_retrieval_t.py +0 -0
  393. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/sockets.py +0 -0
  394. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/sockets_t.py +0 -0
  395. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/specs.py +0 -0
  396. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/specs_t.py +0 -0
  397. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/units.py +0 -0
  398. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/units_t.py +0 -0
  399. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/uploader.py +0 -0
  400. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/uploader_t.py +0 -0
  401. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/users.py +0 -0
  402. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/users_t.py +0 -0
  403. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/webhook_job.py +0 -0
  404. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/webhook_job_t.py +0 -0
  405. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/workflows.py +0 -0
  406. {uncountablepythonsdk-0.0.159 → uncountablepythonsdk-0.0.162}/uncountable/types/workflows_t.py +0 -0
@@ -50,7 +50,7 @@ jobs:
50
50
  permissions:
51
51
  id-token: write
52
52
  steps:
53
- - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
53
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
54
54
  with:
55
55
  name: package-distributions
56
56
  path: dist/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.159
3
+ Version: 0.0.162
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
38
38
  Requires-Dist: grpcio==1.78.0
39
39
  Requires-Dist: protobuf>=4.21.1
40
40
  Requires-Dist: azure-storage-blob==12.*
41
+ Requires-Dist: azure-storage-file-share==12.*
41
42
  Requires-Dist: boto3-stubs[essential,ses]==1.*
42
43
  Requires-Dist: msgspec<0.21,>=0.19
43
44
  Requires-Dist: tabulate==0.9.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.159
3
+ Version: 0.0.162
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
38
38
  Requires-Dist: grpcio==1.78.0
39
39
  Requires-Dist: protobuf>=4.21.1
40
40
  Requires-Dist: azure-storage-blob==12.*
41
+ Requires-Dist: azure-storage-file-share==12.*
41
42
  Requires-Dist: boto3-stubs[essential,ses]==1.*
42
43
  Requires-Dist: msgspec<0.21,>=0.19
43
44
  Requires-Dist: tabulate==0.9.0
@@ -60,6 +60,7 @@ pkgs/argument_parser/argument_parser.py
60
60
  pkgs/argument_parser/case_convert.py
61
61
  pkgs/filesystem_utils/__init__.py
62
62
  pkgs/filesystem_utils/_blob_session.py
63
+ pkgs/filesystem_utils/_file_share_session.py
63
64
  pkgs/filesystem_utils/_gdrive_session.py
64
65
  pkgs/filesystem_utils/_local_session.py
65
66
  pkgs/filesystem_utils/_s3_session.py
@@ -250,6 +251,8 @@ uncountable/types/recipe_step_relationships.py
250
251
  uncountable/types/recipe_step_relationships_t.py
251
252
  uncountable/types/recipe_tags.py
252
253
  uncountable/types/recipe_tags_t.py
254
+ uncountable/types/recipe_workflow_step_types.py
255
+ uncountable/types/recipe_workflow_step_types_t.py
253
256
  uncountable/types/recipe_workflow_steps.py
254
257
  uncountable/types/recipe_workflow_steps_t.py
255
258
  uncountable/types/recipes.py
@@ -266,6 +269,8 @@ uncountable/types/sockets.py
266
269
  uncountable/types/sockets_t.py
267
270
  uncountable/types/specs.py
268
271
  uncountable/types/specs_t.py
272
+ uncountable/types/step_relationships.py
273
+ uncountable/types/step_relationships_t.py
269
274
  uncountable/types/units.py
270
275
  uncountable/types/units_t.py
271
276
  uncountable/types/uploader.py
@@ -306,9 +311,9 @@ uncountable/types/api/equipment/associate_equipment_input.py
306
311
  uncountable/types/api/field_options/__init__.py
307
312
  uncountable/types/api/field_options/upsert_field_options.py
308
313
  uncountable/types/api/file_folders/__init__.py
314
+ uncountable/types/api/file_folders/add_file_to_folder.py
309
315
  uncountable/types/api/file_folders/modify_file_system.py
310
316
  uncountable/types/api/files/__init__.py
311
- uncountable/types/api/files/create_file_record.py
312
317
  uncountable/types/api/files/download_file.py
313
318
  uncountable/types/api/id_source/__init__.py
314
319
  uncountable/types/api/id_source/list_id_source.py
@@ -383,6 +388,8 @@ uncountable/types/api/recipes/set_recipe_tags.py
383
388
  uncountable/types/api/recipes/set_recipe_total.py
384
389
  uncountable/types/api/recipes/unarchive_recipes.py
385
390
  uncountable/types/api/recipes/unlock_recipes.py
391
+ uncountable/types/api/recipes/upsert_recipe_workflow_step.py
392
+ uncountable/types/api/recipes/upsert_step_relationships.py
386
393
  uncountable/types/api/runsheet/__init__.py
387
394
  uncountable/types/api/runsheet/complete_async_upload.py
388
395
  uncountable/types/api/runsheet/export_default_runsheet.py
@@ -20,6 +20,7 @@ simplejson==3.*
20
20
  grpcio==1.78.0
21
21
  protobuf>=4.21.1
22
22
  azure-storage-blob==12.*
23
+ azure-storage-file-share==12.*
23
24
  boto3-stubs[essential,ses]==1.*
24
25
  msgspec<0.21,>=0.19
25
26
  tabulate==0.9.0
@@ -1,6 +1,6 @@
1
1
  furo==2025.12.19
2
2
  myst-parser==5.0.0
3
- sphinx-autoapi==3.7.0
3
+ sphinx-autoapi==3.8.0
4
4
  sphinx-copybutton==0.5.2
5
5
  Sphinx==9.1.0
6
6
  sphinx_design==0.7.0
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "",
3
+ "icons": [
4
+ {
5
+ "src": "/static/img/icons/android-chrome-192x192.png",
6
+ "sizes": "192x192",
7
+ "type": "image/png"
8
+ },
9
+ {
10
+ "src": "/static/img/icons/android-chrome-512x512.png",
11
+ "sizes": "512x512",
12
+ "type": "image/png"
13
+ }
14
+ ],
15
+ "theme_color": "#ffffff",
16
+ "background_color": "#ffffff",
17
+ "display": "standalone"
18
+ }
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "types-paramiko ==4.0.0.20250822",
13
13
  "types-openpyxl == 3.*",
14
14
  "types-pysftp == 0.*",
15
- "types-pytz ==2025.*",
15
+ "types-pytz ==2026.*",
16
16
  "types-requests == 2.*",
17
17
  "types-simplejson == 3.*",
18
18
  "pandas-stubs",
@@ -1,4 +1,5 @@
1
1
  from ._blob_session import BlobSession as BlobSession
2
+ from ._file_share_session import FileShareSession as FileShareSession
2
3
  from ._gdrive_session import GDriveSession as GDriveSession
3
4
  from ._gdrive_session import delete_gdrive_file as delete_gdrive_file
4
5
  from ._gdrive_session import download_gdrive_file as download_gdrive_file
@@ -13,6 +14,7 @@ from ._sftp_session import move_sftp_files as move_sftp_files
13
14
  from .file_type_utils import FileObjectData as FileObjectData
14
15
  from .file_type_utils import FileSystemBlobConfig as FileSystemBlobConfig
15
16
  from .file_type_utils import FileSystemFileReference as FileSystemFileReference
17
+ from .file_type_utils import FileSystemFileShareConfig as FileSystemFileShareConfig
16
18
  from .file_type_utils import FileSystemObject as FileSystemObject
17
19
  from .file_type_utils import FileSystemS3Config as FileSystemS3Config
18
20
  from .file_type_utils import FileSystemSFTPConfig as FileSystemSFTPConfig
@@ -0,0 +1,131 @@
1
+ from io import BytesIO
2
+ from typing import Self
3
+
4
+ from azure.core.credentials import AzureSasCredential
5
+ from azure.storage.fileshare import ShareClient, ShareDirectoryClient
6
+
7
+ from pkgs.filesystem_utils.file_type_utils import (
8
+ FileObjectData,
9
+ FileSystemFileReference,
10
+ FileSystemFileShareConfig,
11
+ FileSystemObject,
12
+ FileTransfer,
13
+ IncompatibleFileReference,
14
+ )
15
+ from pkgs.filesystem_utils.filesystem_session import FileSystemSession
16
+
17
+
18
+ class FileShareSession(FileSystemSession):
19
+ def __init__(self, config: FileSystemFileShareConfig) -> None:
20
+ super().__init__()
21
+ self.config = config
22
+ self._share_client: ShareClient | None = None
23
+
24
+ def start(self) -> None:
25
+ self._share_client = ShareClient(
26
+ account_url=self.config.account_url,
27
+ share_name=self.config.share_name,
28
+ credential=self.config.credential,
29
+ )
30
+
31
+ def __enter__(self) -> Self:
32
+ self.start()
33
+ return self
34
+
35
+ def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
36
+ self._share_client = None
37
+
38
+ def _list_dir(
39
+ self,
40
+ dir_client: ShareDirectoryClient,
41
+ *,
42
+ recursive: bool,
43
+ valid_extensions: list[str] | None,
44
+ ) -> list[FileSystemObject]:
45
+ results: list[FileSystemObject] = []
46
+ for item in dir_client.list_directories_and_files():
47
+ item_path = f"{dir_client.directory_path}/{item['name']}".lstrip("/")
48
+ if item["is_directory"]:
49
+ if recursive:
50
+ assert self._share_client is not None
51
+ results.extend(
52
+ self._list_dir(
53
+ self._share_client.get_directory_client(item_path),
54
+ recursive=recursive,
55
+ valid_extensions=valid_extensions,
56
+ )
57
+ )
58
+ elif valid_extensions is None or any(
59
+ item_path.endswith(ext) for ext in valid_extensions
60
+ ):
61
+ results.append(FileSystemFileReference(filepath=item_path))
62
+ return results
63
+
64
+ def list_files(
65
+ self,
66
+ dir_path: FileSystemObject,
67
+ *,
68
+ recursive: bool = False,
69
+ valid_extensions: list[str] | None = None,
70
+ ) -> list[FileSystemObject]:
71
+ if not isinstance(dir_path, FileSystemFileReference):
72
+ raise IncompatibleFileReference()
73
+ assert self._share_client is not None, (
74
+ "call to list_files on uninitialized file share session"
75
+ )
76
+ dir_client = self._share_client.get_directory_client(dir_path.filepath)
77
+ return self._list_dir(
78
+ dir_client, recursive=recursive, valid_extensions=valid_extensions
79
+ )
80
+
81
+ def download_files(self, filepaths: list[FileSystemObject]) -> list[FileObjectData]:
82
+ assert self._share_client is not None, (
83
+ "call to download_files on uninitialized file share session"
84
+ )
85
+ downloaded: list[FileObjectData] = []
86
+ for file_object in filepaths:
87
+ if (
88
+ not isinstance(file_object, FileSystemFileReference)
89
+ or not file_object.filename
90
+ ):
91
+ raise IncompatibleFileReference()
92
+ file_client = self._share_client.get_file_client(file_object.filepath)
93
+ stream = file_client.download_file()
94
+ file_data = stream.readall()
95
+ downloaded.append(
96
+ FileObjectData(
97
+ file_data=file_data,
98
+ file_IO=BytesIO(file_data),
99
+ filename=file_object.filename,
100
+ filepath=file_object.filepath,
101
+ )
102
+ )
103
+ return downloaded
104
+
105
+ def move_files(self, file_mappings: list[FileTransfer]) -> None:
106
+ assert self._share_client is not None, (
107
+ "call to move_files on uninitialized file share session"
108
+ )
109
+ for src, dest in file_mappings:
110
+ if not isinstance(src, FileSystemFileReference) or not isinstance(
111
+ dest, FileSystemFileReference
112
+ ):
113
+ raise IncompatibleFileReference()
114
+ src_client = self._share_client.get_file_client(src.filepath)
115
+ dest_client = self._share_client.get_file_client(dest.filepath)
116
+ source_url = (
117
+ f"{src_client.url}?{self.config.credential.signature}"
118
+ if isinstance(self.config.credential, AzureSasCredential)
119
+ else src_client.url
120
+ )
121
+ dest_client.start_copy_from_url(source_url)
122
+ src_client.delete_file()
123
+
124
+ def delete_files(self, filepaths: list[FileSystemObject]) -> None:
125
+ assert self._share_client is not None, (
126
+ "call to delete_files on uninitialized file share session"
127
+ )
128
+ for file_object in filepaths:
129
+ if not isinstance(file_object, FileSystemFileReference):
130
+ raise IncompatibleFileReference()
131
+ self._share_client.get_file_client(file_object.filepath).delete_file()
@@ -89,3 +89,12 @@ class FileSystemBlobConfig:
89
89
  | None
90
90
  )
91
91
  container: ContainerProperties | str
92
+
93
+
94
+ @dataclass(frozen=True, kw_only=True)
95
+ class FileSystemFileShareConfig:
96
+ account_url: str
97
+ credential: (
98
+ AzureNamedKeyCredential | AzureSasCredential | TokenCredential | str | None
99
+ )
100
+ share_name: str
@@ -93,18 +93,29 @@ def _write_guide_as_html(guide: EmitOpenAPIGuide, *, is_open: bool) -> str:
93
93
  </details>"""
94
94
 
95
95
 
96
+ _FRONTMATTER_RE = re.compile(r"^---\n.*?\n---\n", re.DOTALL)
97
+
98
+
99
+ def _strip_guide_frontmatter(content: str) -> str:
100
+ return _FRONTMATTER_RE.sub("", content).lstrip("\n")
101
+
102
+
96
103
  def _open_api_info(
97
- config: OpenAPIConfig, guides: list[EmitOpenAPIGuide]
104
+ *, config: OpenAPIConfig, root_guides: list[builder.SpecGuide]
98
105
  ) -> GlobalContextInfo:
99
- full_guides = "<br/>".join([
100
- _write_guide_as_html(guide, is_open=True)
101
- for guide in sorted(guides, key=lambda g: g.ref_name)
102
- ])
103
- full_description = f"{config.description}<br/>{full_guides}"
104
106
  info: GlobalContextInfo = dict()
105
107
  info["version"] = "1.0.0"
106
108
  info["title"] = "Uncountable API Documentation"
107
- info["description"] = full_description
109
+ sorted_guides = sorted(root_guides, key=lambda g: g.ref_name)
110
+ description_parts = [
111
+ config.description,
112
+ *[
113
+ f'<a id="{guide.ref_name}" />\n\n'
114
+ + _strip_guide_frontmatter(guide.markdown_content)
115
+ for guide in sorted_guides
116
+ ],
117
+ ]
118
+ info["description"] = "\n\n".join(description_parts)
108
119
  info["x-logo"] = {
109
120
  "url": "../static/images/logo_blue.png",
110
121
  "altText": "Logo",
@@ -119,16 +130,11 @@ def _open_api_servers(config: OpenAPIConfig) -> list[EmitOpenAPIServer]:
119
130
 
120
131
 
121
132
  def emit_open_api(builder: builder.SpecBuilder, *, config: OpenAPIConfig) -> None:
122
- root_guides = builder.guides.get(RootGuideKey(), [])
123
- openapi_guides = [
124
- EmitOpenAPIGuide(
125
- ref_name=guide.ref_name, title=guide.title, html_content=guide.html_content
126
- )
127
- for guide in root_guides
128
- ]
129
133
  gctx = EmitOpenAPIGlobalContext(
130
134
  version="3.0.0",
131
- info=_open_api_info(config, openapi_guides),
135
+ info=_open_api_info(
136
+ config=config, root_guides=builder.guides.get(RootGuideKey(), [])
137
+ ),
132
138
  servers=_open_api_servers(config),
133
139
  )
134
140
 
@@ -73,6 +73,7 @@ dependencies = [
73
73
  "grpcio == 1.78.0",
74
74
  "protobuf >= 4.21.1",
75
75
  "azure-storage-blob == 12.*",
76
+ "azure-storage-file-share == 12.*",
76
77
  "boto3-stubs[essential,ses]==1.*",
77
78
  "msgspec>=0.19,<0.21",
78
79
  "tabulate == 0.9.0",
@@ -330,6 +330,11 @@ class Client(ClientMethods):
330
330
  headers = self._build_auth_headers()
331
331
  headers[UNC_REQUEST_ID_HEADER] = request_id
332
332
  headers[UNC_SDK_VERSION_HEADER] = get_version()
333
+ if self._cfg.request_context is not None:
334
+ if self._cfg.request_context.user_locale is not None:
335
+ headers["X-User-Locale"] = self._cfg.request_context.user_locale
336
+ if self._cfg.request_context.user_timezone is not None:
337
+ headers["X-User-Timezone"] = self._cfg.request_context.user_timezone
333
338
  method = api_request.method.lower()
334
339
  data = {"data": json.dumps(serialize_for_api(api_request.args))}
335
340
  match method:
@@ -23,7 +23,7 @@ from uncountable.integration.queue_runner.datastore.interface import Datastore
23
23
  from uncountable.integration.queue_runner.types import ListenQueue, ResultQueue
24
24
  from uncountable.integration.scan_profiles import load_profiles
25
25
  from uncountable.integration.telemetry import JobLogger, Logger, get_otel_tracer
26
- from uncountable.types import base_t, job_definition_t, queued_job_t
26
+ from uncountable.types import base_t, client_config_t, job_definition_t, queued_job_t
27
27
 
28
28
 
29
29
  class Worker:
@@ -89,6 +89,16 @@ def _resolve_queued_job_payload(queued_job: queued_job_t.QueuedJob) -> base_t.Js
89
89
  return queued_job.payload.invocation_context.webhook_payload
90
90
 
91
91
 
92
+ def _resolve_queued_job_request_context(
93
+ queued_job: queued_job_t.QueuedJob,
94
+ ) -> client_config_t.RequestContext | None:
95
+ match queued_job.payload.invocation_context:
96
+ case queued_job_t.InvocationContextWebhook():
97
+ return queued_job.payload.invocation_context.request_context
98
+ case _:
99
+ return None
100
+
101
+
92
102
  def run_queued_job(
93
103
  queued_job: queued_job_t.QueuedJob,
94
104
  ) -> job_definition_t.JobResult:
@@ -108,8 +118,11 @@ def run_queued_job(
108
118
  )
109
119
  with job_logger.resource_tracking():
110
120
  try:
121
+ request_context = _resolve_queued_job_request_context(queued_job)
111
122
  client = construct_uncountable_client(
112
- profile_meta=job_details.profile_metadata, logger=job_logger
123
+ profile_meta=job_details.profile_metadata,
124
+ logger=job_logger,
125
+ request_context=request_context,
113
126
  )
114
127
  batch_processor = AsyncBatchProcessor(client=client)
115
128
 
@@ -2,6 +2,7 @@
2
2
  # ruff: noqa: E402 Q003
3
3
  # fmt: off
4
4
  # isort: skip_file
5
+ from .api.file_folders import add_file_to_folder as add_file_to_folder_t
5
6
  from .api.notebooks import add_notebook_content as add_notebook_content_t
6
7
  from .api.recipes import add_recipe_to_project as add_recipe_to_project_t
7
8
  from .api.recipes import add_time_series_data as add_time_series_data_t
@@ -22,7 +23,6 @@ from .api.runsheet import complete_async_upload as complete_async_upload_t
22
23
  from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
23
24
  from .api.entity import create_entities as create_entities_t
24
25
  from .api.entity import create_entity as create_entity_t
25
- from .api.files import create_file_record as create_file_record_t
26
26
  from .api.inputs import create_inputs as create_inputs_t
27
27
  from .api.recipes import create_mix_order as create_mix_order_t
28
28
  from .api.entity import create_or_update_entity as create_or_update_entity_t
@@ -102,6 +102,7 @@ from . import recipe_metadata_t as recipe_metadata_t
102
102
  from . import recipe_output_metadata_t as recipe_output_metadata_t
103
103
  from . import recipe_step_relationships_t as recipe_step_relationships_t
104
104
  from . import recipe_tags_t as recipe_tags_t
105
+ from . import recipe_workflow_step_types_t as recipe_workflow_step_types_t
105
106
  from . import recipe_workflow_steps_t as recipe_workflow_steps_t
106
107
  from . import recipes_t as recipes_t
107
108
  from .api.integrations import register_sockets_token as register_sockets_token_t
@@ -132,6 +133,7 @@ from .api.recipes import set_recipe_total as set_recipe_total_t
132
133
  from .api.entity import set_values as set_values_t
133
134
  from . import sockets_t as sockets_t
134
135
  from . import specs_t as specs_t
136
+ from . import step_relationships_t as step_relationships_t
135
137
  from .api.entity import transition_entity_phase as transition_entity_phase_t
136
138
  from .api.recipes import unarchive_recipes as unarchive_recipes_t
137
139
  from . import units_t as units_t
@@ -142,12 +144,15 @@ from .api.outputs import update_output_condition_parameter as update_output_cond
142
144
  from . import uploader_t as uploader_t
143
145
  from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
144
146
  from .api.field_options import upsert_field_options as upsert_field_options_t
147
+ from .api.recipes import upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
148
+ from .api.recipes import upsert_step_relationships as upsert_step_relationships_t
145
149
  from . import users_t as users_t
146
150
  from . import webhook_job_t as webhook_job_t
147
151
  from . import workflows_t as workflows_t
148
152
 
149
153
 
150
154
  __all__: list[str] = [
155
+ "add_file_to_folder_t",
151
156
  "add_notebook_content_t",
152
157
  "add_recipe_to_project_t",
153
158
  "add_time_series_data_t",
@@ -168,7 +173,6 @@ __all__: list[str] = [
168
173
  "convert_chemical_formats_t",
169
174
  "create_entities_t",
170
175
  "create_entity_t",
171
- "create_file_record_t",
172
176
  "create_inputs_t",
173
177
  "create_mix_order_t",
174
178
  "create_or_update_entity_t",
@@ -248,6 +252,7 @@ __all__: list[str] = [
248
252
  "recipe_output_metadata_t",
249
253
  "recipe_step_relationships_t",
250
254
  "recipe_tags_t",
255
+ "recipe_workflow_step_types_t",
251
256
  "recipe_workflow_steps_t",
252
257
  "recipes_t",
253
258
  "register_sockets_token_t",
@@ -278,6 +283,7 @@ __all__: list[str] = [
278
283
  "set_values_t",
279
284
  "sockets_t",
280
285
  "specs_t",
286
+ "step_relationships_t",
281
287
  "transition_entity_phase_t",
282
288
  "unarchive_recipes_t",
283
289
  "units_t",
@@ -288,6 +294,8 @@ __all__: list[str] = [
288
294
  "uploader_t",
289
295
  "upsert_condition_match_t",
290
296
  "upsert_field_options_t",
297
+ "upsert_recipe_workflow_step_t",
298
+ "upsert_step_relationships_t",
291
299
  "users_t",
292
300
  "webhook_job_t",
293
301
  "workflows_t",
@@ -0,0 +1,43 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from ... import async_batch_t
12
+ from ... import base_t
13
+ from ... import identifier_t
14
+
15
+ __all__: list[str] = [
16
+ "Arguments",
17
+ "Data",
18
+ "ENDPOINT_METHOD",
19
+ "ENDPOINT_PATH",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "POST"
23
+ ENDPOINT_PATH = "api/external/file_folders/add_file_to_folder"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ @serial_class(
28
+ named_type_path="sdk.api.file_folders.add_file_to_folder.Arguments",
29
+ )
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
+ class Arguments:
32
+ file_id: base_t.ObjectId
33
+ folder_key: identifier_t.IdentifierKey
34
+
35
+
36
+ # DO NOT MODIFY -- This file is generated by type_spec
37
+ @serial_class(
38
+ named_type_path="sdk.api.file_folders.add_file_to_folder.Data",
39
+ )
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
41
+ class Data(async_batch_t.AsyncBatchActionReturn):
42
+ pass
43
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -36,6 +36,7 @@ class Arguments:
36
36
  update_type: post_base_t.UpdateType
37
37
  requirement_type: ConditionParameterRequirementType | None = None
38
38
  material_family_key: identifier_t.IdentifierKey | None = None
39
+ analytical_method_keys: list[identifier_t.IdentifierKey] | None = None
39
40
 
40
41
 
41
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -38,6 +38,7 @@ class Arguments:
38
38
  recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None
39
39
  identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None
40
40
  definition_key: identifier_t.IdentifierKey | None = None
41
+ recipe_key: identifier_t.IdentifierKey | None = None
41
42
 
42
43
 
43
44
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -23,12 +23,15 @@ __all__: list[str] = [
23
23
  "ENDPOINT_METHOD",
24
24
  "ENDPOINT_PATH",
25
25
  "MixStepMatchStrategy",
26
+ "PlaceholderAssignmentPlaceholderType",
26
27
  "PlaceholderBase",
27
28
  "PlaceholderDisplayMode",
28
29
  "PlaceholderType",
30
+ "ProductRecipePlaceholderAssignment",
29
31
  "RecipeInputEdit",
30
32
  "RecipeInputEditAddInput",
31
33
  "RecipeInputEditAddInstructions",
34
+ "RecipeInputEditAssignPlaceholder",
32
35
  "RecipeInputEditBase",
33
36
  "RecipeInputEditChangeBasisViewed",
34
37
  "RecipeInputEditClearInputs",
@@ -41,6 +44,8 @@ __all__: list[str] = [
41
44
  "RecipeInputEditUpdateAnnotations",
42
45
  "RecipeInputEditUpsertInput",
43
46
  "RecipeInputPlaceholder",
47
+ "RecipeInputPlaceholderAssignment",
48
+ "RecipeInputPlaceholderAssignmentBase",
44
49
  "SubcategoryPlaceholder",
45
50
  ]
46
51
 
@@ -60,6 +65,7 @@ class RecipeInputEditType(StrEnum):
60
65
  ADD_INSTRUCTIONS = "add_instructions"
61
66
  SET_ROLE = "set_role"
62
67
  SET_PLACEHOLDER = "set_placeholder"
68
+ ASSIGN_PLACEHOLDER = "assign_placeholder"
63
69
 
64
70
 
65
71
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -269,9 +275,60 @@ class RecipeInputEditPlaceholder(RecipeInputEditBase):
269
275
  mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
270
276
 
271
277
 
278
+ # DO NOT MODIFY -- This file is generated by type_spec
279
+ class PlaceholderAssignmentPlaceholderType(StrEnum):
280
+ PRODUCT = "product"
281
+
282
+
283
+ # DO NOT MODIFY -- This file is generated by type_spec
284
+ @serial_class(
285
+ named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputPlaceholderAssignmentBase",
286
+ )
287
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
288
+ class RecipeInputPlaceholderAssignmentBase:
289
+ type: PlaceholderAssignmentPlaceholderType
290
+
291
+
292
+ # DO NOT MODIFY -- This file is generated by type_spec
293
+ @serial_class(
294
+ named_type_path="sdk.api.recipes.edit_recipe_inputs.ProductRecipePlaceholderAssignment",
295
+ parse_require={"type"},
296
+ )
297
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
298
+ class ProductRecipePlaceholderAssignment(RecipeInputPlaceholderAssignmentBase):
299
+ type: typing.Literal[PlaceholderAssignmentPlaceholderType.PRODUCT] = PlaceholderAssignmentPlaceholderType.PRODUCT
300
+ product_key: identifier_t.IdentifierKey
301
+ recipe_key: identifier_t.IdentifierKey
302
+
303
+
304
+ # DO NOT MODIFY -- This file is generated by type_spec
305
+ RecipeInputPlaceholderAssignment = typing.Annotated[
306
+ typing.Union[ProductRecipePlaceholderAssignment],
307
+ serial_union_annotation(
308
+ named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputPlaceholderAssignment",
309
+ discriminator="type",
310
+ discriminator_map={
311
+ "product": ProductRecipePlaceholderAssignment,
312
+ },
313
+ ),
314
+ ]
315
+
316
+
317
+ # DO NOT MODIFY -- This file is generated by type_spec
318
+ @serial_class(
319
+ named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAssignPlaceholder",
320
+ parse_require={"type"},
321
+ )
322
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
323
+ class RecipeInputEditAssignPlaceholder(RecipeInputEditBase):
324
+ type: typing.Literal[RecipeInputEditType.ASSIGN_PLACEHOLDER] = RecipeInputEditType.ASSIGN_PLACEHOLDER
325
+ assignment: RecipeInputPlaceholderAssignment
326
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
327
+
328
+
272
329
  # DO NOT MODIFY -- This file is generated by type_spec
273
330
  RecipeInputEdit = typing.Annotated[
274
- RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditSetPropagatedPercentage | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder,
331
+ RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditSetPropagatedPercentage | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder | RecipeInputEditAssignPlaceholder,
275
332
  serial_union_annotation(
276
333
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEdit",
277
334
  discriminator="type",
@@ -286,6 +343,7 @@ RecipeInputEdit = typing.Annotated[
286
343
  "add_instructions": RecipeInputEditAddInstructions,
287
344
  "set_role": RecipeInputEditSetRole,
288
345
  "set_placeholder": RecipeInputEditPlaceholder,
346
+ "assign_placeholder": RecipeInputEditAssignPlaceholder,
289
347
  },
290
348
  ),
291
349
  ]