UncountablePythonSDK 0.0.182__tar.gz → 0.0.184__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 (453) hide show
  1. {uncountablepythonsdk-0.0.182/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.184}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -6
  4. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/requirements.txt +1 -1
  5. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/pyproject.toml +1 -1
  6. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_blob_session.py +52 -12
  7. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_file_share_session.py +43 -0
  8. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_s3_session.py +53 -7
  9. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/filesystem_session.py +11 -0
  10. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/actions_registry/__main__.py +1 -0
  11. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/actions_registry/emit_python.py +2 -0
  12. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/actions_registry/emit_typescript.py +4 -0
  13. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/builder.py +6 -0
  14. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_python.py +34 -6
  15. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/environment.py +0 -4
  16. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/webhook_server/entrypoint.py +0 -2
  17. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_inputs.py +1 -1
  18. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/client_base.py +1 -1
  19. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/entity_t.py +13 -1
  20. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/uploader.py +2 -0
  21. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/uploader_t.py +26 -1
  22. uncountablepythonsdk-0.0.182/uncountable/integration/webhook_server/admin_auth.py +0 -38
  23. uncountablepythonsdk-0.0.182/uncountable/integration/webhook_server/admin_routes/__init__.py +0 -3
  24. uncountablepythonsdk-0.0.182/uncountable/integration/webhook_server/admin_routes/_boundary.py +0 -39
  25. uncountablepythonsdk-0.0.182/uncountable/integration/webhook_server/admin_routes/health.py +0 -30
  26. uncountablepythonsdk-0.0.182/uncountable/integration/webhook_server/admin_routes/jobs.py +0 -147
  27. uncountablepythonsdk-0.0.182/uncountable/integration/webhook_server/admin_routes/register.py +0 -13
  28. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/.github/workflows/documentation.yml +0 -0
  29. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/.github/workflows/publish.yml +0 -0
  30. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/.gitignore +0 -0
  31. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/README.md +0 -0
  32. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  33. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  34. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  35. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/.flowmarkignore +0 -0
  36. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/.gitignore +0 -0
  37. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/conf.py +0 -0
  38. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/index.md +0 -0
  39. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/integration_examples/add_file_to_folder.md +0 -0
  40. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/integration_examples/create_ingredient.md +0 -0
  41. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/integration_examples/create_output.md +0 -0
  42. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/integration_examples/index.md +0 -0
  43. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/integration_examples/upload_file.md +0 -0
  44. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/justfile +0 -0
  45. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/android-chrome-192x192.png +0 -0
  46. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/android-chrome-512x512.png +0 -0
  47. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/apple-touch-icon.png +0 -0
  48. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/browserconfig.xml +0 -0
  49. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/favicon-16x16.png +0 -0
  50. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/favicon-32x32.png +0 -0
  51. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/manifest.json +0 -0
  52. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/mstile-150x150.png +0 -0
  53. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  54. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/docs/static/logo_blue.png +0 -0
  55. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/async_batch.py +0 -0
  56. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/async_batch_large_parse.py +0 -0
  57. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/basic_auth.py +0 -0
  58. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/create_entity.py +0 -0
  59. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/create_ingredient_sdk.py +0 -0
  60. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/download_files.py +0 -0
  61. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/edit_recipe_inputs.py +0 -0
  62. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  63. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  64. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  65. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  66. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  67. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  68. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  69. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  70. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  71. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/invoke_uploader.py +0 -0
  72. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/oauth.py +0 -0
  73. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/set_input_pdf_attribute.py +0 -0
  74. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/set_recipe_metadata_file.py +0 -0
  75. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/set_recipe_output_file_sdk.py +0 -0
  76. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/stream_dataset_measurements.py +0 -0
  77. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/examples/upload_files.py +0 -0
  78. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/__init__.py +0 -0
  79. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/__init__.py +0 -0
  80. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/cached_parser.py +0 -0
  81. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/case_convert.py +0 -0
  82. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_base.py +0 -0
  83. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_builder.py +0 -0
  84. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_cache.py +0 -0
  85. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_error.py +0 -0
  86. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_function_type.py +0 -0
  87. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_inner.py +0 -0
  88. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/parser_options.py +0 -0
  89. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/argument_parser/type_predicates.py +0 -0
  90. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  92. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_local_session.py +0 -0
  93. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
  94. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  95. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  96. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/py.typed +0 -0
  97. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/annotation.py +0 -0
  99. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/missing_sentry.py +0 -0
  100. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/opaque_key.py +0 -0
  101. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/serial_alias.py +0 -0
  102. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/serial_class.py +0 -0
  103. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/serial_generic.py +0 -0
  104. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/serial_union.py +0 -0
  105. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/unknown.py +0 -0
  106. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/usage.py +0 -0
  107. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization/yaml.py +0 -0
  108. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization_util/__init__.py +0 -0
  109. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  110. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  111. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization_util/dataclasses.py +0 -0
  112. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/serialization_util/serialization_helpers.py +0 -0
  113. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/strenum_compat/__init__.py +0 -0
  114. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/strenum_compat/strenum_compat.py +0 -0
  115. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/__main__.py +0 -0
  117. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  118. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/builder_types.py +0 -0
  119. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/config.py +0 -0
  120. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/cross_output_links.py +0 -0
  121. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_io_ts.py +0 -0
  122. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_open_api.py +0 -0
  123. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_open_api_util.py +0 -0
  124. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_scss.py +0 -0
  125. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_typescript.py +0 -0
  126. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/emit_typescript_util.py +0 -0
  127. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/load_types.py +0 -0
  128. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  129. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/open_api_util.py +0 -0
  130. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/parts/base.py.prepart +0 -0
  131. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  132. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/test.py +0 -0
  133. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/type_info/__main__.py +0 -0
  134. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  135. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  136. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  137. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/util.py +0 -0
  138. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/value_spec/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/value_spec/__main__.py +0 -0
  140. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  141. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  142. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pkgs/type_spec/value_spec/types.py +0 -0
  143. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/pyproject.toml +0 -0
  144. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/setup.cfg +0 -0
  145. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/async_batch.py +0 -0
  148. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/client.py +0 -0
  149. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/file_upload.py +0 -0
  150. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/query/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/query/builder.py +0 -0
  152. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/query/column.py +0 -0
  153. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/query/row.py +0 -0
  154. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/query/types.py +0 -0
  155. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/core/types.py +0 -0
  156. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/cli.py +0 -0
  158. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/construct_client.py +0 -0
  159. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/cron.py +0 -0
  160. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/db/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/db/connect.py +0 -0
  162. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/db/session.py +0 -0
  163. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/entrypoint.py +0 -0
  164. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/executors/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/executors/executors.py +0 -0
  166. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  167. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/executors/script_executor.py +0 -0
  168. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/http_server/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/http_server/types.py +0 -0
  170. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/job.py +0 -0
  171. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  173. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  174. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  175. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  176. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  177. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  178. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  179. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  180. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  181. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
  182. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  183. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
  185. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +0 -0
  186. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  187. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
  188. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  189. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  190. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/job_process.py +0 -0
  191. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/job_runner.py +0 -0
  192. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  193. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  194. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/types.py +0 -0
  195. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/queue_runner/worker.py +0 -0
  196. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/request_context.py +0 -0
  197. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/scan_profiles.py +0 -0
  198. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/scheduler.py +0 -0
  199. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  200. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
  201. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  202. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/server.py +0 -0
  203. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/telemetry.py +0 -0
  204. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/webhook_bootstrap.py +0 -0
  205. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/integration/webhook_entity.py +0 -0
  206. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/py.typed +0 -0
  207. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/__init__.py +0 -0
  208. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/__init__.py +0 -0
  209. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/batch/__init__.py +0 -0
  210. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/batch/execute_batch.py +0 -0
  211. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  212. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/chemical/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  214. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  215. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  216. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
  217. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/create_entities.py +0 -0
  219. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/create_entity.py +0 -0
  220. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
  221. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  222. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/export_entities.py +0 -0
  223. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/get_entities_data.py +0 -0
  224. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  225. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/list_aggregate.py +0 -0
  226. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/list_entities.py +0 -0
  227. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/lock_entity.py +0 -0
  228. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/lookup_entity.py +0 -0
  229. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  230. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/set_barcode.py +0 -0
  231. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
  232. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  233. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/set_values.py +0 -0
  234. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  235. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/entity/unlock_entity.py +0 -0
  236. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/equipment/__init__.py +0 -0
  237. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  238. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/field_options/__init__.py +0 -0
  239. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  240. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/file_folders/__init__.py +0 -0
  241. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  242. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  243. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/files/__init__.py +0 -0
  244. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/files/download_file.py +0 -0
  245. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/id_source/__init__.py +0 -0
  246. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/id_source/list_id_source.py +0 -0
  247. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/id_source/match_id_source.py +0 -0
  248. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/input_groups/__init__.py +0 -0
  249. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  250. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/__init__.py +0 -0
  251. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/create_inputs.py +0 -0
  252. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/get_input_data.py +0 -0
  253. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/get_input_names.py +0 -0
  254. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  255. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  256. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/set_input_category.py +0 -0
  257. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  258. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  259. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/integrations/__init__.py +0 -0
  260. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  261. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/integrations/push_notification.py +0 -0
  262. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  263. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/listing/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/listing/export_listing.py +0 -0
  265. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/listing/fetch_listing.py +0 -0
  266. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/material_families/__init__.py +0 -0
  267. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  268. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/ml/__init__.py +0 -0
  269. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/ml/get_analyze_results.py +0 -0
  270. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/ml/get_suggest_results.py +0 -0
  271. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/ml/submit_async_job.py +0 -0
  272. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/notebooks/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  274. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
  275. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/output_parameters/__init__.py +0 -0
  276. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  277. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/outputs/__init__.py +0 -0
  278. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/outputs/get_output_data.py +0 -0
  279. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/outputs/get_output_names.py +0 -0
  280. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  281. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  282. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  283. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/permissions/__init__.py +0 -0
  284. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  285. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  286. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/project/__init__.py +0 -0
  287. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/project/get_projects.py +0 -0
  288. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/project/get_projects_data.py +0 -0
  289. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipe_links/__init__.py +0 -0
  290. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  291. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
  292. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  293. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  294. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  295. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/__init__.py +0 -0
  296. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  297. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  298. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  299. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  300. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  301. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  302. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  303. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/create_recipe.py +0 -0
  304. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/create_recipes.py +0 -0
  305. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  306. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  307. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  308. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_curve.py +0 -0
  309. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  310. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  311. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  312. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  313. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  314. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  315. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  316. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  317. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  318. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  319. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  320. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  321. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  322. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  323. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  324. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  325. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  326. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/runsheet/__init__.py +0 -0
  327. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  328. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  329. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/time_series/__init__.py +0 -0
  330. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/time_series/ingest_dataset_measurements.py +0 -0
  331. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/triggers/__init__.py +0 -0
  332. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/triggers/run_trigger.py +0 -0
  333. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/uploader/__init__.py +0 -0
  334. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  335. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  336. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/user/__init__.py +0 -0
  337. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/api/user/get_current_user_info.py +0 -0
  338. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/async_batch.py +0 -0
  339. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/async_batch_processor.py +0 -0
  340. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/async_batch_t.py +0 -0
  341. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/async_jobs.py +0 -0
  342. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/async_jobs_t.py +0 -0
  343. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/auth_retrieval.py +0 -0
  344. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/auth_retrieval_t.py +0 -0
  345. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/base.py +0 -0
  346. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/base_t.py +0 -0
  347. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/calculations.py +0 -0
  348. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/calculations_t.py +0 -0
  349. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/chemical_structure.py +0 -0
  350. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/chemical_structure_t.py +0 -0
  351. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/client_config.py +0 -0
  352. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/client_config_t.py +0 -0
  353. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/condition_match.py +0 -0
  354. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/condition_match_t.py +0 -0
  355. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/curves.py +0 -0
  356. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/curves_t.py +0 -0
  357. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/data.py +0 -0
  358. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/data_t.py +0 -0
  359. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/dataset_measurements.py +0 -0
  360. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/dataset_measurements_t.py +0 -0
  361. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/entity.py +0 -0
  362. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/experiment_groups.py +0 -0
  363. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/experiment_groups_t.py +0 -0
  364. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/exports.py +0 -0
  365. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/exports_t.py +0 -0
  366. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/field_values.py +0 -0
  367. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/field_values_t.py +0 -0
  368. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/fields.py +0 -0
  369. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/fields_t.py +0 -0
  370. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/generic_upload.py +0 -0
  371. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/generic_upload_t.py +0 -0
  372. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/id_source.py +0 -0
  373. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/id_source_t.py +0 -0
  374. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/identifier.py +0 -0
  375. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/identifier_t.py +0 -0
  376. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/input_attributes.py +0 -0
  377. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/input_attributes_t.py +0 -0
  378. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/inputs.py +0 -0
  379. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/inputs_t.py +0 -0
  380. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/integration_server.py +0 -0
  381. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/integration_server_t.py +0 -0
  382. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/integration_session.py +0 -0
  383. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/integration_session_t.py +0 -0
  384. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/integrations.py +0 -0
  385. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/integrations_t.py +0 -0
  386. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/job_definition.py +0 -0
  387. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/job_definition_t.py +0 -0
  388. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/listing.py +0 -0
  389. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/listing_t.py +0 -0
  390. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/ml_reports.py +0 -0
  391. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/ml_reports_t.py +0 -0
  392. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/notices.py +0 -0
  393. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/notices_t.py +0 -0
  394. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/notifications.py +0 -0
  395. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/notifications_t.py +0 -0
  396. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/outputs.py +0 -0
  397. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/outputs_t.py +0 -0
  398. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/overrides.py +0 -0
  399. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/overrides_t.py +0 -0
  400. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/permissions.py +0 -0
  401. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/permissions_t.py +0 -0
  402. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/phases.py +0 -0
  403. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/phases_t.py +0 -0
  404. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/post_base.py +0 -0
  405. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/post_base_t.py +0 -0
  406. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/queued_job.py +0 -0
  407. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/queued_job_t.py +0 -0
  408. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_identifiers.py +0 -0
  409. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_identifiers_t.py +0 -0
  410. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_inputs.py +0 -0
  411. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_inputs_t.py +0 -0
  412. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_links.py +0 -0
  413. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_links_t.py +0 -0
  414. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_metadata.py +0 -0
  415. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_metadata_t.py +0 -0
  416. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_output_metadata.py +0 -0
  417. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_output_metadata_t.py +0 -0
  418. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_step_relationships.py +0 -0
  419. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_step_relationships_t.py +0 -0
  420. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_tags.py +0 -0
  421. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_tags_t.py +0 -0
  422. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_workflow_step_types.py +0 -0
  423. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  424. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_workflow_steps.py +0 -0
  425. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  426. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipes.py +0 -0
  427. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/recipes_t.py +0 -0
  428. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/request_headers.py +0 -0
  429. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/request_headers_t.py +0 -0
  430. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/response.py +0 -0
  431. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/response_t.py +0 -0
  432. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/runsheet.py +0 -0
  433. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/runsheet_format.py +0 -0
  434. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/runsheet_format_t.py +0 -0
  435. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/runsheet_t.py +0 -0
  436. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/secret_retrieval.py +0 -0
  437. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/secret_retrieval_t.py +0 -0
  438. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/sockets.py +0 -0
  439. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/sockets_t.py +0 -0
  440. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/specs.py +0 -0
  441. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/specs_t.py +0 -0
  442. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/step_relationships.py +0 -0
  443. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/step_relationships_t.py +0 -0
  444. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/units.py +0 -0
  445. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/units_t.py +0 -0
  446. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/users.py +0 -0
  447. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/users_t.py +0 -0
  448. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/webhook.py +0 -0
  449. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/webhook_job.py +0 -0
  450. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/webhook_job_t.py +0 -0
  451. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/webhook_t.py +0 -0
  452. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/workflows.py +0 -0
  453. {uncountablepythonsdk-0.0.182 → uncountablepythonsdk-0.0.184}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.182
3
+ Version: 0.0.184
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.182
3
+ Version: 0.0.184
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
@@ -190,13 +190,7 @@ uncountable/integration/queue_runner/datastore/model.py
190
190
  uncountable/integration/secret_retrieval/__init__.py
191
191
  uncountable/integration/secret_retrieval/basic_secret.py
192
192
  uncountable/integration/secret_retrieval/retrieve_secret.py
193
- uncountable/integration/webhook_server/admin_auth.py
194
193
  uncountable/integration/webhook_server/entrypoint.py
195
- uncountable/integration/webhook_server/admin_routes/__init__.py
196
- uncountable/integration/webhook_server/admin_routes/_boundary.py
197
- uncountable/integration/webhook_server/admin_routes/health.py
198
- uncountable/integration/webhook_server/admin_routes/jobs.py
199
- uncountable/integration/webhook_server/admin_routes/register.py
200
194
  uncountable/types/__init__.py
201
195
  uncountable/types/async_batch.py
202
196
  uncountable/types/async_batch_processor.py
@@ -1,6 +1,6 @@
1
1
  furo==2025.12.19
2
2
  myst-parser==5.1.0
3
- sphinx-autoapi==3.8.0
3
+ sphinx-autoapi==3.8.1
4
4
  sphinx-copybutton==0.5.2
5
5
  Sphinx==9.1.0
6
6
  sphinx_design==0.7.0
@@ -13,7 +13,7 @@ dependencies = [
13
13
  "types-openpyxl == 3.*",
14
14
  "types-pytz ==2026.*",
15
15
  "types-requests == 2.*",
16
- "types-simplejson == 3.*",
16
+ "types-simplejson ==4.*",
17
17
  "pandas-stubs",
18
18
  "xlrd == 2.*",
19
19
  "msgspec ==0.21.*",
@@ -2,7 +2,7 @@ from io import BytesIO
2
2
  from typing import Self
3
3
 
4
4
  from azure.core.credentials import AzureSasCredential
5
- from azure.storage.blob import BlobServiceClient, ContainerClient
5
+ from azure.storage.blob import BlobPrefix, BlobServiceClient, ContainerClient
6
6
 
7
7
  from pkgs.filesystem_utils.file_type_utils import (
8
8
  FileObjectData,
@@ -78,6 +78,24 @@ class BlobSession(FileSystemSession):
78
78
 
79
79
  return filesystem_file_references
80
80
 
81
+ def list_directories(self, dir_path: FileSystemObject) -> list[FileSystemObject]:
82
+ if not isinstance(dir_path, FileSystemFileReference):
83
+ raise IncompatibleFileReferenceError()
84
+
85
+ assert self.service_client is not None and self.container_client is not None, (
86
+ "call to list_directories on uninitialized blob session"
87
+ )
88
+
89
+ prefix = _add_slash(dir_path.filepath)
90
+ directories: list[FileSystemObject] = []
91
+ for item in self.container_client.walk_blobs(
92
+ name_starts_with=prefix, delimiter="/"
93
+ ):
94
+ if isinstance(item, BlobPrefix):
95
+ directories.append(FileSystemFileReference(item.name.rstrip("/")))
96
+
97
+ return directories
98
+
81
99
  def download_files(
82
100
  self,
83
101
  filepaths: list[FileSystemObject],
@@ -108,6 +126,22 @@ class BlobSession(FileSystemSession):
108
126
 
109
127
  return downloaded_files
110
128
 
129
+ def _move_blob(self, src_name: str, dest_name: str) -> None:
130
+ assert self.container_client is not None, (
131
+ "call to _move_blob on uninitialized blob session"
132
+ )
133
+ source_blob_client = self.container_client.get_blob_client(src_name)
134
+ dest_blob_client = self.container_client.get_blob_client(dest_name)
135
+
136
+ source_url = (
137
+ f"{source_blob_client.url}?{self.config.credential.signature}"
138
+ if isinstance(self.config.credential, AzureSasCredential)
139
+ else source_blob_client.url
140
+ )
141
+
142
+ dest_blob_client.start_copy_from_url(source_url)
143
+ source_blob_client.delete_blob()
144
+
111
145
  def move_files(self, file_mappings: list[FileTransfer]) -> None:
112
146
  assert self.service_client is not None and self.container_client is not None, (
113
147
  "call to move_files on uninitialized blob session"
@@ -119,19 +153,25 @@ class BlobSession(FileSystemSession):
119
153
  ):
120
154
  raise IncompatibleFileReferenceError()
121
155
 
122
- source_blob_client = self.container_client.get_blob_client(
123
- src_file.filepath
124
- )
125
- dest_blob_client = self.container_client.get_blob_client(dest_file.filepath)
156
+ self._move_blob(src_file.filepath, dest_file.filepath)
126
157
 
127
- source_url = (
128
- f"{source_blob_client.url}?{self.config.credential.signature}"
129
- if isinstance(self.config.credential, AzureSasCredential)
130
- else source_blob_client.url
131
- )
158
+ def move_directory(
159
+ self, src_dir: FileSystemObject, dest_dir: FileSystemObject
160
+ ) -> None:
161
+ if not isinstance(src_dir, FileSystemFileReference) or not isinstance(
162
+ dest_dir, FileSystemFileReference
163
+ ):
164
+ raise IncompatibleFileReferenceError()
165
+
166
+ assert self.service_client is not None and self.container_client is not None, (
167
+ "call to move_directory on uninitialized blob session"
168
+ )
132
169
 
133
- dest_blob_client.start_copy_from_url(source_url)
134
- source_blob_client.delete_blob()
170
+ src_prefix = _add_slash(src_dir.filepath)
171
+ dest_prefix = _add_slash(dest_dir.filepath)
172
+ for blob in self.container_client.list_blobs(name_starts_with=src_prefix):
173
+ dest_name = dest_prefix + blob.name[len(src_prefix) :]
174
+ self._move_blob(blob.name, dest_name)
135
175
 
136
176
  def delete_files(self, filepaths: list[FileSystemObject]) -> None:
137
177
  assert self.service_client is not None and self.container_client is not None, (
@@ -79,6 +79,49 @@ class FileShareSession(FileSystemSession):
79
79
  dir_client, recursive=recursive, valid_extensions=valid_extensions
80
80
  )
81
81
 
82
+ def list_directories(self, dir_path: FileSystemObject) -> list[FileSystemObject]:
83
+ if not isinstance(dir_path, FileSystemFileReference):
84
+ raise IncompatibleFileReferenceError()
85
+ assert self._share_client is not None, (
86
+ "call to list_directories on uninitialized file share session"
87
+ )
88
+ dir_client = self._share_client.get_directory_client(dir_path.filepath)
89
+ directories: list[FileSystemObject] = []
90
+ for item in dir_client.list_directories_and_files():
91
+ if item["is_directory"]:
92
+ item_path = f"{dir_client.directory_path}/{item['name']}".lstrip("/")
93
+ directories.append(FileSystemFileReference(filepath=item_path))
94
+ return directories
95
+
96
+ def create_directory(self, dir_path: FileSystemObject) -> None:
97
+ if not isinstance(dir_path, FileSystemFileReference):
98
+ raise IncompatibleFileReferenceError()
99
+ assert self._share_client is not None, (
100
+ "call to create_directory on uninitialized file share session"
101
+ )
102
+ current = ""
103
+ for segment in dir_path.filepath.strip("/").split("/"):
104
+ if not segment:
105
+ continue
106
+ current = f"{current}/{segment}".lstrip("/")
107
+ dir_client = self._share_client.get_directory_client(current)
108
+ if not dir_client.exists():
109
+ dir_client.create_directory()
110
+
111
+ def move_directory(
112
+ self, src_dir: FileSystemObject, dest_dir: FileSystemObject
113
+ ) -> None:
114
+ if not isinstance(src_dir, FileSystemFileReference) or not isinstance(
115
+ dest_dir, FileSystemFileReference
116
+ ):
117
+ raise IncompatibleFileReferenceError()
118
+ assert self._share_client is not None, (
119
+ "call to move_directory on uninitialized file share session"
120
+ )
121
+ self._share_client.get_directory_client(src_dir.filepath).rename_directory(
122
+ dest_dir.filepath
123
+ )
124
+
82
125
  def download_files(self, filepaths: list[FileSystemObject]) -> list[FileObjectData]:
83
126
  assert self._share_client is not None, (
84
127
  "call to download_files on uninitialized file share session"
@@ -86,6 +86,28 @@ class S3Session(FileSystemSession):
86
86
 
87
87
  return filesystem_references
88
88
 
89
+ def list_directories(self, dir_path: FileSystemObject) -> list[FileSystemObject]:
90
+ if not isinstance(dir_path, FileSystemFileReference):
91
+ raise IncompatibleFileReferenceError()
92
+
93
+ assert self.bucket is not None, (
94
+ "call to list_directories on uninitialized s3 session"
95
+ )
96
+
97
+ prefix = _add_slash(dir_path.filepath)
98
+ paginator = self.bucket.meta.client.get_paginator("list_objects_v2")
99
+
100
+ directories: list[FileSystemObject] = []
101
+ for page in paginator.paginate(
102
+ Bucket=self.bucket.name, Prefix=prefix, Delimiter="/"
103
+ ):
104
+ for common_prefix in page.get("CommonPrefixes", []):
105
+ directories.append(
106
+ FileSystemFileReference(common_prefix["Prefix"].rstrip("/"))
107
+ )
108
+
109
+ return directories
110
+
89
111
  def download_files(
90
112
  self,
91
113
  filepaths: list[FileSystemObject],
@@ -115,6 +137,18 @@ class S3Session(FileSystemSession):
115
137
 
116
138
  return downloaded_files
117
139
 
140
+ def _move_object(self, src_key: str, dest_key: str) -> None:
141
+ assert self.bucket is not None, (
142
+ "call to _move_object on uninitialized s3 session"
143
+ )
144
+ self.bucket.Object(dest_key).copy_from(
145
+ CopySource={
146
+ "Bucket": self.bucket.name,
147
+ "Key": src_key,
148
+ }
149
+ )
150
+ self.bucket.Object(src_key).delete()
151
+
118
152
  def move_files(self, file_mappings: list[FileTransfer]) -> None:
119
153
  assert self.bucket is not None, "call to move_files on uninitialized s3 session"
120
154
 
@@ -123,10 +157,22 @@ class S3Session(FileSystemSession):
123
157
  dest_file, FileSystemFileReference
124
158
  ):
125
159
  raise IncompatibleFileReferenceError()
126
- self.bucket.Object(dest_file.filepath).copy_from(
127
- CopySource={
128
- "Bucket": self.bucket.name,
129
- "Key": src_file.filepath,
130
- }
131
- )
132
- self.bucket.Object(src_file.filepath).delete()
160
+ self._move_object(src_file.filepath, dest_file.filepath)
161
+
162
+ def move_directory(
163
+ self, src_dir: FileSystemObject, dest_dir: FileSystemObject
164
+ ) -> None:
165
+ if not isinstance(src_dir, FileSystemFileReference) or not isinstance(
166
+ dest_dir, FileSystemFileReference
167
+ ):
168
+ raise IncompatibleFileReferenceError()
169
+
170
+ assert self.bucket is not None, (
171
+ "call to move_directory on uninitialized s3 session"
172
+ )
173
+
174
+ src_prefix = _add_slash(src_dir.filepath)
175
+ dest_prefix = _add_slash(dest_dir.filepath)
176
+ for obj in self.bucket.objects.filter(Prefix=src_prefix):
177
+ dest_key = dest_prefix + obj.key[len(src_prefix) :]
178
+ self._move_object(obj.key, dest_key)
@@ -32,6 +32,17 @@ class FileSystemSession(ABC):
32
32
  def delete_files(self, filepaths: list[FileSystemObject]) -> None:
33
33
  raise NotImplementedError
34
34
 
35
+ def list_directories(self, dir_path: FileSystemObject) -> list[FileSystemObject]:
36
+ raise NotImplementedError
37
+
38
+ def create_directory(self, dir_path: FileSystemObject) -> None:
39
+ raise NotImplementedError
40
+
41
+ def move_directory(
42
+ self, src_dir: FileSystemObject, dest_dir: FileSystemObject
43
+ ) -> None:
44
+ raise NotImplementedError
45
+
35
46
  @abstractmethod
36
47
  def __enter__(self) -> "FileSystemSession": ...
37
48
 
@@ -82,6 +82,7 @@ def main() -> None:
82
82
  short_description=definition.short_description,
83
83
  description=definition.description,
84
84
  icon=definition.icon,
85
+ action=definition.action,
85
86
  ref_name=ref_name,
86
87
  module=actions_registry_t.ActionsRegistryModule(
87
88
  ts_name(module_str, name_case=builder.NameCase.convert)
@@ -51,6 +51,8 @@ def _emit_action_definition(
51
51
  out.write(f"{sub_indent}description={_py_str(action.description)},\n")
52
52
  if action.icon is not None:
53
53
  out.write(f"{sub_indent}icon={_py_str(action.icon)},\n")
54
+ if action.action is not None:
55
+ out.write(f"{sub_indent}action={_py_str(action.action)},\n")
54
56
  out.write(f"{sub_indent}ref_name={_py_str(action.ref_name)},\n")
55
57
  out.write(
56
58
  f"{sub_indent}module=actions_registry_t.ActionsRegistryModule.{action.module.name},\n"
@@ -130,6 +130,10 @@ def _emit_action_definition(
130
130
  out.write(
131
131
  f"{sub_indent}icon: {encode_common_string(action_definition.icon)},\n"
132
132
  )
133
+ if action_definition.action is not None:
134
+ out.write(
135
+ f"{sub_indent}action: {encode_common_string(action_definition.action)},\n"
136
+ )
133
137
  out.write(
134
138
  f"{sub_indent}shortDescription: {encode_common_string(action_definition.short_description)},\n"
135
139
  )
@@ -1106,6 +1106,7 @@ class SpecEndpoint:
1106
1106
  desc: str | None = None
1107
1107
  account_type: str | None
1108
1108
  route_group: str | None
1109
+ allow_non_materials_path: bool = False
1109
1110
 
1110
1111
  # function, path details per api endpoint
1111
1112
  path_per_api_endpoint: dict[str, EndpointSpecificPath]
@@ -1135,6 +1136,7 @@ class SpecEndpoint:
1135
1136
  "has_attachment",
1136
1137
  "account_type",
1137
1138
  "route_group",
1139
+ "allow_non_materials_path",
1138
1140
  ]
1139
1141
  + list(builder.api_endpoints.keys()),
1140
1142
  )
@@ -1188,6 +1190,10 @@ class SpecEndpoint:
1188
1190
  assert isinstance(suppress_ts, bool)
1189
1191
  self.suppress_ts = suppress_ts
1190
1192
 
1193
+ allow_non_materials_path = data.get("allow_non_materials_path", False)
1194
+ assert isinstance(allow_non_materials_path, bool)
1195
+ self.allow_non_materials_path = allow_non_materials_path
1196
+
1191
1197
  self.result_type = ResultType(data.get("result_type", ResultType.json.value))
1192
1198
  self.has_attachment = data.get("has_attachment", False)
1193
1199
  self.desc = data.get("desc")
@@ -1166,13 +1166,25 @@ def _emit_routes(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
1166
1166
  continue
1167
1167
 
1168
1168
  endpoints.append(endpoint)
1169
+
1170
+ has_route_opts = any(
1171
+ endpoint.allow_non_materials_path for endpoint in endpoints
1172
+ )
1173
+ route_opts_import = ["RouteOpts"] if has_route_opts else []
1174
+ static_route_imports = ", ".join(
1175
+ sorted(["StaticRouteType", *route_opts_import])
1176
+ )
1177
+ dynamic_route_imports = ", ".join(
1178
+ sorted(["DynamicRouteType", *route_opts_import])
1179
+ )
1180
+
1169
1181
  static_out = io.StringIO()
1170
1182
  static_out.write(
1171
1183
  f"""{MODIFY_NOTICE}{LINT_HEADER}{ROUTE_NOTICE}
1172
1184
 
1173
1185
  # Static routes for use locally and to ensure linting/mypy finds all modules
1174
1186
 
1175
- from main.site.framework.types import StaticRouteType
1187
+ from main.site.framework.types import {static_route_imports}
1176
1188
  """
1177
1189
  )
1178
1190
 
@@ -1218,7 +1230,7 @@ ROUTES: list[StaticRouteType] = [
1218
1230
 
1219
1231
  # Dynamic loaded routes to provide faster startup times
1220
1232
 
1221
- from main.site.framework.types import DynamicRouteType
1233
+ from main.site.framework.types import {dynamic_route_imports}
1222
1234
 
1223
1235
  ROUTE_PREFIX = "/{last_endpoint.path_per_api_endpoint[endpoint_root].path_root}"
1224
1236
 
@@ -1226,19 +1238,35 @@ ROUTES: list[DynamicRouteType] = [
1226
1238
  """
1227
1239
  )
1228
1240
 
1241
+ route_opts_out = io.StringIO()
1229
1242
  for endpoint in sorted_endpoints:
1230
1243
  endpoint_function_path = endpoint.path_per_api_endpoint[endpoint_root]
1244
+ route = f"{endpoint_function_path.path_dirname}/{endpoint_function_path.path_basename}"
1231
1245
  dynamic_out.write(
1232
- f'{INDENT}("{endpoint_function_path.path_dirname}/{endpoint_function_path.path_basename}", "{endpoint_function_path.function}", ["{endpoint.method.upper()}"]),\n'
1246
+ f'{INDENT}("{route}", "{endpoint_function_path.function}", ["{endpoint.method.upper()}"]),\n'
1233
1247
  )
1234
1248
 
1235
1249
  assert endpoint_function_path.function
1236
1250
  static_out.write(
1237
- f'{INDENT}("{endpoint_function_path.path_dirname}/{endpoint_function_path.path_basename}", {endpoint_function_path.function}, ["{endpoint.method.upper()}"]),\n'
1251
+ f'{INDENT}("{route}", {endpoint_function_path.function}, ["{endpoint.method.upper()}"]),\n'
1238
1252
  )
1239
1253
 
1240
- dynamic_out.write(f"{MODIFY_NOTICE}]\n")
1241
- static_out.write(f"{MODIFY_NOTICE}]\n")
1254
+ if endpoint.allow_non_materials_path:
1255
+ route_opts_out.write(
1256
+ f'{INDENT}"{route}": RouteOpts(allow_non_materials_path=True),\n'
1257
+ )
1258
+
1259
+ routes_close = f"{MODIFY_NOTICE}]\n"
1260
+ dynamic_out.write(routes_close)
1261
+ static_out.write(routes_close)
1262
+
1263
+ if has_route_opts:
1264
+ route_opts_emit = f"""
1265
+ ROUTE_OPTS: dict[str, RouteOpts] = {{
1266
+ {route_opts_out.getvalue()}{MODIFY_NOTICE}}}
1267
+ """
1268
+ dynamic_out.write(route_opts_emit)
1269
+ static_out.write(route_opts_emit)
1242
1270
 
1243
1271
  util.rewrite_file(f"{output}/routes_static.py", static_out.getvalue())
1244
1272
  util.rewrite_file(f"{output}/routes_dynamic.py", dynamic_out.getvalue())
@@ -26,10 +26,6 @@ def get_local_admin_server_port() -> int:
26
26
  return int(os.environ.get("UNC_ADMIN_SERVER_PORT", "50051"))
27
27
 
28
28
 
29
- def get_integration_admin_token() -> str | None:
30
- return os.environ.get("UNC_INTEGRATION_ADMIN_TOKEN")
31
-
32
-
33
29
  def get_otel_enabled() -> bool:
34
30
  return os.environ.get("UNC_OTEL_ENABLED") == "true"
35
31
 
@@ -12,7 +12,6 @@ from uncountable.integration.http_server import GenericHttpRequest, HttpExceptio
12
12
  from uncountable.integration.job import CustomHttpJob, WebhookJob
13
13
  from uncountable.integration.scan_profiles import load_profiles
14
14
  from uncountable.integration.telemetry import Logger
15
- from uncountable.integration.webhook_server.admin_routes import register_admin_routes
16
15
  from uncountable.types import job_definition_t
17
16
 
18
17
  app = flask.Flask(__name__)
@@ -99,7 +98,6 @@ def register_route(
99
98
 
100
99
  def main() -> None:
101
100
  app.add_url_rule("/health", "health", lambda: ("OK", 200))
102
- register_admin_routes(app)
103
101
 
104
102
  profiles = load_profiles()
105
103
  for profile_metadata in profiles:
@@ -21,7 +21,7 @@ __all__: list[str] = [
21
21
 
22
22
  ENDPOINT_METHOD = "POST"
23
23
  ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
24
- ENDPOINT_DESCRIPTION = "Sets input values for experiments. Supports numeric, text, and categorical types. Validates that the recipe step belongs to the correct recipe. Supports setting actual values, associating lots (creating them if needed), and removing inputs. Writes all values to the first workflow step when no step is specified. Fails if both a numeric and string value are provided."
24
+ ENDPOINT_DESCRIPTION = "Sets input values for experiments. Supports numeric, text, and categorical types. Validates that the recipe step belongs to the correct recipe. Each entry edits one input on one recipe with a single operation: set the value (the actual value when set_actual_value is true, otherwise the set value), associate a lot (lot_recipe_id, created if the recipe is not already a lot), or remove the input (remove). A lot association targets the set value; combining it with set_actual_value fails. Writes all values to the first workflow step when no step is specified. Fails if both a numeric and string value are provided."
25
25
 
26
26
 
27
27
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -2177,7 +2177,7 @@ class ClientMethods(ABC):
2177
2177
  input_data: list[set_recipe_inputs_t.RecipeInputValue],
2178
2178
  _request_options: client_config_t.RequestOptions | None = None,
2179
2179
  ) -> set_recipe_inputs_t.Data:
2180
- """Sets input values for experiments. Supports numeric, text, and categorical types. Validates that the recipe step belongs to the correct recipe. Supports setting actual values, associating lots (creating them if needed), and removing inputs. Writes all values to the first workflow step when no step is specified. Fails if both a numeric and string value are provided.
2180
+ """Sets input values for experiments. Supports numeric, text, and categorical types. Validates that the recipe step belongs to the correct recipe. Each entry edits one input on one recipe with a single operation: set the value (the actual value when set_actual_value is true, otherwise the set value), associate a lot (lot_recipe_id, created if the recipe is not already a lot), or remove the input (remove). A lot association targets the set value; combining it with set_actual_value fails. Writes all values to the first workflow step when no step is specified. Fails if both a numeric and string value are provided.
2181
2181
 
2182
2182
  :param input_data: The inputs to set. Must be at most 100 entries long
2183
2183
  """
@@ -27,6 +27,7 @@ __all__: list[str] = [
27
27
  # DO NOT MODIFY -- This file is generated by type_spec
28
28
  @serial_string_enum(
29
29
  labels={
30
+ "agent_memory": "Agent Memory",
30
31
  "aggregated_data_view": "Aggregated Data View",
31
32
  "analytical_method": "Analytical Method",
32
33
  "analytical_method_category": "Analytical Method Category",
@@ -35,6 +36,8 @@ __all__: list[str] = [
35
36
  "approval": "Approval",
36
37
  "async_job": "Async Job",
37
38
  "barcode": "Barcode",
39
+ "cad_document": "CAD Document",
40
+ "cad_relationship": "CAD Relationship",
38
41
  "calculation": "Calculation",
39
42
  "calendar": "Calendar",
40
43
  "calendar_event": "Calendar Event",
@@ -57,6 +60,7 @@ __all__: list[str] = [
57
60
  "credit_balance": "Credit Balance",
58
61
  "curve_settings": "Curve Settings",
59
62
  "custom_entity": "Custom Entity",
63
+ "data_pipeline": "Data Pipeline",
60
64
  "dataset_binding": "Dataset Binding",
61
65
  "default_permissions_new_project": "Default Permissions New Project",
62
66
  "document": "Document",
@@ -90,6 +94,7 @@ __all__: list[str] = [
90
94
  "external_ai_model": "External AI Model",
91
95
  "external_ai_session": "External AI Session",
92
96
  "external_ai_usage": "External AI Usage",
97
+ "external_ai_plugin": "External AI Plugin",
93
98
  "external_oauth_provider": "External OAuth Provider",
94
99
  "experiment_group": "Experiment Group",
95
100
  "experiment_group_member": "Experiment Group Member",
@@ -206,6 +211,7 @@ __all__: list[str] = [
206
211
  "regional_entity_group": "Regional Entity Group",
207
212
  "regulation": "Regulation",
208
213
  "regulation_cas": "Regulation CAS",
214
+ "regulation_product_category": "Regulation Product Category",
209
215
  "metadata_value": "Metadata Value",
210
216
  "report_definition": "Report Definition",
211
217
  "reusable_field_condition": "Reusable Field Condition",
@@ -297,6 +303,7 @@ __all__: list[str] = [
297
303
  },
298
304
  )
299
305
  class EntityType(StrEnum):
306
+ AGENT_MEMORY = "agent_memory"
300
307
  AGGREGATED_DATA_VIEW = "aggregated_data_view"
301
308
  ANALYTICAL_METHOD = "analytical_method"
302
309
  ANALYTICAL_METHOD_CATEGORY = "analytical_method_category"
@@ -305,6 +312,8 @@ class EntityType(StrEnum):
305
312
  APPROVAL = "approval"
306
313
  ASYNC_JOB = "async_job"
307
314
  BARCODE = "barcode"
315
+ CAD_DOCUMENT = "cad_document"
316
+ CAD_RELATIONSHIP = "cad_relationship"
308
317
  CALCULATION = "calculation"
309
318
  CALENDAR = "calendar"
310
319
  CALENDAR_EVENT = "calendar_event"
@@ -327,6 +336,7 @@ class EntityType(StrEnum):
327
336
  CREDIT_BALANCE = "credit_balance"
328
337
  CURVE_SETTINGS = "curve_settings"
329
338
  CUSTOM_ENTITY = "custom_entity"
339
+ DATA_PIPELINE = "data_pipeline"
330
340
  DATASET_BINDING = "dataset_binding"
331
341
  DEFAULT_PERMISSIONS_NEW_PROJECT = "default_permissions_new_project"
332
342
  DOCUMENT = "document"
@@ -360,6 +370,7 @@ class EntityType(StrEnum):
360
370
  EXTERNAL_AI_MODEL = "external_ai_model"
361
371
  EXTERNAL_AI_SESSION = "external_ai_session"
362
372
  EXTERNAL_AI_USAGE = "external_ai_usage"
373
+ EXTERNAL_AI_PLUGIN = "external_ai_plugin"
363
374
  EXTERNAL_OAUTH_PROVIDER = "external_oauth_provider"
364
375
  EXPERIMENT_GROUP = "experiment_group"
365
376
  EXPERIMENT_GROUP_MEMBER = "experiment_group_member"
@@ -476,6 +487,7 @@ class EntityType(StrEnum):
476
487
  REGIONAL_ENTITY_GROUP = "regional_entity_group"
477
488
  REGULATION = "regulation"
478
489
  REGULATION_CAS = "regulation_cas"
490
+ REGULATION_PRODUCT_CATEGORY = "regulation_product_category"
479
491
  METADATA_VALUE = "metadata_value"
480
492
  REPORT_DEFINITION = "report_definition"
481
493
  REUSABLE_FIELD_CONDITION = "reusable_field_condition"
@@ -568,7 +580,7 @@ class EntityType(StrEnum):
568
580
 
569
581
  # DO NOT MODIFY -- This file is generated by type_spec
570
582
  LimitedEntityType = typing.Annotated[
571
- typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.NOTEBOOK] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.CONSTRAINT_SET] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL] | typing.Literal[EntityType.TIME_SERIES_SEGMENT] | typing.Literal[EntityType.EQUIPMENT_MAINTENANCE] | typing.Literal[EntityType.MAINTENANCE_SCHEDULE] | typing.Literal[EntityType.CONDITION_PARAMETER_RULE] | typing.Literal[EntityType.INGREDIENT] | typing.Literal[EntityType.TIMESHEET_ENTRY] | typing.Literal[EntityType.SAVE] | typing.Literal[EntityType.RECIPE_CHECK] | typing.Literal[EntityType.EXPERIMENT_GROUP_MEMBER] | typing.Literal[EntityType.CALENDAR_EVENT],
583
+ typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.NOTEBOOK] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.CONSTRAINT_SET] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL] | typing.Literal[EntityType.TIME_SERIES_SEGMENT] | typing.Literal[EntityType.EQUIPMENT_MAINTENANCE] | typing.Literal[EntityType.MAINTENANCE_SCHEDULE] | typing.Literal[EntityType.CONDITION_PARAMETER_RULE] | typing.Literal[EntityType.INGREDIENT] | typing.Literal[EntityType.TIMESHEET_ENTRY] | typing.Literal[EntityType.SAVE] | typing.Literal[EntityType.RECIPE_CHECK] | typing.Literal[EntityType.EXPERIMENT_GROUP_MEMBER] | typing.Literal[EntityType.INPUT_GROUP] | typing.Literal[EntityType.INPUT_GROUP_MEMBER] | typing.Literal[EntityType.CALENDAR_EVENT],
572
584
  serial_alias_annotation(
573
585
  named_type_path="sdk.entity.LimitedEntityType",
574
586
  ),
@@ -8,8 +8,10 @@ from .uploader_t import ChannelType as ChannelType
8
8
  from .uploader_t import StructureElementType as StructureElementType
9
9
  from .uploader_t import StructureElementBase as StructureElementBase
10
10
  from .uploader_t import DecimalValue as DecimalValue
11
+ from .uploader_t import IdValue as IdValue
11
12
  from .uploader_t import StringValue as StringValue
12
13
  from .uploader_t import BaseData as BaseData
14
+ from .uploader_t import FileHeaderData as FileHeaderData
13
15
  from .uploader_t import NumericHeaderData as NumericHeaderData
14
16
  from .uploader_t import TextHeaderData as TextHeaderData
15
17
  from .uploader_t import HeaderValue as HeaderValue
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from pkgs.serialization import serial_union_annotation
13
+ from . import base_t
13
14
 
14
15
  __all__: list[str] = [
15
16
  "BaseData",
@@ -17,9 +18,11 @@ __all__: list[str] = [
17
18
  "ChannelType",
18
19
  "DataChannel",
19
20
  "DecimalValue",
21
+ "FileHeaderData",
20
22
  "HeaderEntry",
21
23
  "HeaderType",
22
24
  "HeaderValue",
25
+ "IdValue",
23
26
  "NumericChannelData",
24
27
  "NumericHeaderData",
25
28
  "ParsedFileData",
@@ -35,6 +38,7 @@ __all__: list[str] = [
35
38
 
36
39
  # DO NOT MODIFY -- This file is generated by type_spec
37
40
  class HeaderType(StrEnum):
41
+ FILE_HEADER = "file_header"
38
42
  NUMERIC_HEADER = "numeric_header"
39
43
  TEXT_HEADER = "text_header"
40
44
 
@@ -71,6 +75,15 @@ class DecimalValue:
71
75
  value: Decimal
72
76
 
73
77
 
78
+ # DO NOT MODIFY -- This file is generated by type_spec
79
+ @serial_class(
80
+ named_type_path="sdk.uploader.IdValue",
81
+ )
82
+ @dataclasses.dataclass(slots=True, kw_only=True)
83
+ class IdValue:
84
+ value: base_t.ObjectId
85
+
86
+
74
87
  # DO NOT MODIFY -- This file is generated by type_spec
75
88
  @serial_class(
76
89
  named_type_path="sdk.uploader.StringValue",
@@ -90,6 +103,17 @@ class BaseData:
90
103
  type: str
91
104
 
92
105
 
106
+ # DO NOT MODIFY -- This file is generated by type_spec
107
+ @serial_class(
108
+ named_type_path="sdk.uploader.FileHeaderData",
109
+ parse_require={"type"},
110
+ )
111
+ @dataclasses.dataclass(slots=True, kw_only=True)
112
+ class FileHeaderData(BaseData):
113
+ type: typing.Literal[HeaderType.FILE_HEADER] = HeaderType.FILE_HEADER
114
+ data: IdValue | None
115
+
116
+
93
117
  # DO NOT MODIFY -- This file is generated by type_spec
94
118
  @serial_class(
95
119
  named_type_path="sdk.uploader.NumericHeaderData",
@@ -114,11 +138,12 @@ class TextHeaderData(BaseData):
114
138
 
115
139
  # DO NOT MODIFY -- This file is generated by type_spec
116
140
  HeaderValue = typing.Annotated[
117
- NumericHeaderData | TextHeaderData,
141
+ FileHeaderData | NumericHeaderData | TextHeaderData,
118
142
  serial_union_annotation(
119
143
  named_type_path="sdk.uploader.HeaderValue",
120
144
  discriminator="type",
121
145
  discriminator_map={
146
+ "file_header": FileHeaderData,
122
147
  "numeric_header": NumericHeaderData,
123
148
  "text_header": TextHeaderData,
124
149
  },