UncountablePythonSDK 0.0.184__tar.gz → 0.0.186__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 (449) hide show
  1. {uncountablepythonsdk-0.0.184/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.186}/PKG-INFO +2 -2
  2. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
  3. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
  4. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/requires.txt +1 -1
  5. uncountablepythonsdk-0.0.186/examples/integration-server/jobs/materials_auto/example_http_get.py +44 -0
  6. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/profile.yaml +7 -0
  7. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/_get_type_for_serialization.py +4 -4
  8. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/serialization_helpers.py +1 -2
  9. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_python.py +58 -25
  10. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/test.py +4 -4
  11. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +17 -17
  12. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pyproject.toml +1 -1
  13. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/http_server/types.py +1 -0
  14. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/webhook_server/entrypoint.py +38 -6
  15. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/__init__.py +2 -0
  16. uncountablepythonsdk-0.0.186/uncountable/types/api/entity/add_entity_comment.py +43 -0
  17. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/files/download_file.py +1 -1
  18. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/uploader/invoke_uploader.py +2 -2
  19. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_batch_processor.py +3 -2
  20. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/client_base.py +29 -3
  21. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/entity_t.py +12 -0
  22. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/job_definition.py +1 -0
  23. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/job_definition_t.py +8 -0
  24. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/.github/workflows/documentation.yml +0 -0
  25. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/.github/workflows/publish.yml +0 -0
  26. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/.gitignore +0 -0
  27. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/README.md +0 -0
  28. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  29. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  30. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/.flowmarkignore +0 -0
  31. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/.gitignore +0 -0
  32. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/conf.py +0 -0
  33. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/index.md +0 -0
  34. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/add_file_to_folder.md +0 -0
  35. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/create_ingredient.md +0 -0
  36. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/create_output.md +0 -0
  37. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/index.md +0 -0
  38. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/integration_examples/upload_file.md +0 -0
  39. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/justfile +0 -0
  40. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/requirements.txt +0 -0
  41. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/android-chrome-192x192.png +0 -0
  42. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/android-chrome-512x512.png +0 -0
  43. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/apple-touch-icon.png +0 -0
  44. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/browserconfig.xml +0 -0
  45. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/favicon-16x16.png +0 -0
  46. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/favicon-32x32.png +0 -0
  47. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/manifest.json +0 -0
  48. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/mstile-150x150.png +0 -0
  49. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  50. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/docs/static/logo_blue.png +0 -0
  51. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/async_batch.py +0 -0
  52. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/async_batch_large_parse.py +0 -0
  53. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/basic_auth.py +0 -0
  54. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/create_entity.py +0 -0
  55. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/create_ingredient_sdk.py +0 -0
  56. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/download_files.py +0 -0
  57. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/edit_recipe_inputs.py +0 -0
  58. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  59. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  60. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  61. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  62. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  63. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  64. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  65. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  66. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/integration-server/pyproject.toml +0 -0
  67. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/invoke_uploader.py +0 -0
  68. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/oauth.py +0 -0
  69. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/set_input_pdf_attribute.py +0 -0
  70. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/set_recipe_metadata_file.py +0 -0
  71. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/set_recipe_output_file_sdk.py +0 -0
  72. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/stream_dataset_measurements.py +0 -0
  73. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/examples/upload_files.py +0 -0
  74. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/__init__.py +0 -0
  75. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/__init__.py +0 -0
  76. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/cached_parser.py +0 -0
  77. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/case_convert.py +0 -0
  78. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_base.py +0 -0
  79. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_builder.py +0 -0
  80. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_cache.py +0 -0
  81. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_error.py +0 -0
  82. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_function_type.py +0 -0
  83. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_inner.py +0 -0
  84. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/parser_options.py +0 -0
  85. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/argument_parser/type_predicates.py +0 -0
  86. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/__init__.py +0 -0
  87. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_blob_session.py +0 -0
  88. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  89. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  90. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_local_session.py +0 -0
  91. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_s3_session.py +0 -0
  92. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_sftp_connection.py +0 -0
  93. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  94. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  95. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  96. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/py.typed +0 -0
  97. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/annotation.py +0 -0
  99. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/missing_sentry.py +0 -0
  100. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/opaque_key.py +0 -0
  101. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_alias.py +0 -0
  102. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_class.py +0 -0
  103. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_generic.py +0 -0
  104. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/serial_union.py +0 -0
  105. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/unknown.py +0 -0
  106. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/usage.py +0 -0
  107. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization/yaml.py +0 -0
  108. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/__init__.py +0 -0
  109. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  110. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/serialization_util/dataclasses.py +0 -0
  111. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/strenum_compat/__init__.py +0 -0
  112. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/strenum_compat/strenum_compat.py +0 -0
  113. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/__init__.py +0 -0
  114. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/__main__.py +0 -0
  115. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  116. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  117. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/emit_python.py +0 -0
  118. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  119. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/builder.py +0 -0
  120. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/builder_types.py +0 -0
  121. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/config.py +0 -0
  122. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/cross_output_links.py +0 -0
  123. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_io_ts.py +0 -0
  124. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_open_api.py +0 -0
  125. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_open_api_util.py +0 -0
  126. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_scss.py +0 -0
  127. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_typescript.py +0 -0
  128. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/emit_typescript_util.py +0 -0
  129. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/load_types.py +0 -0
  130. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  131. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/open_api_util.py +0 -0
  132. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/parts/base.py.prepart +0 -0
  133. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  134. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/type_info/__main__.py +0 -0
  135. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  136. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/util.py +0 -0
  138. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/__init__.py +0 -0
  139. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/__main__.py +0 -0
  140. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  141. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  142. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/pkgs/type_spec/value_spec/types.py +0 -0
  143. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/setup.cfg +0 -0
  144. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/__init__.py +0 -0
  145. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/__init__.py +0 -0
  146. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/async_batch.py +0 -0
  147. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/client.py +0 -0
  148. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/environment.py +0 -0
  149. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/file_upload.py +0 -0
  150. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/builder.py +0 -0
  152. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/column.py +0 -0
  153. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/row.py +0 -0
  154. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/query/types.py +0 -0
  155. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/core/types.py +0 -0
  156. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/__init__.py +0 -0
  157. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/cli.py +0 -0
  158. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/construct_client.py +0 -0
  159. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/cron.py +0 -0
  160. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/db/__init__.py +0 -0
  161. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/db/connect.py +0 -0
  162. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/db/session.py +0 -0
  163. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/entrypoint.py +0 -0
  164. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/__init__.py +0 -0
  165. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/executors.py +0 -0
  166. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  167. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/executors/script_executor.py +0 -0
  168. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/http_server/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/job.py +0 -0
  170. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  173. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  174. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  175. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  176. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  177. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  178. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  179. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  180. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/provision_webhook.py +0 -0
  181. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  182. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  183. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/datastore_postgres.py +0 -0
  184. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/datastore_sql_base.py +0 -0
  185. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  186. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/factory.py +0 -0
  187. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  188. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  189. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/job_process.py +0 -0
  190. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/job_runner.py +0 -0
  191. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  192. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  193. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/types.py +0 -0
  194. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/queue_runner/worker.py +0 -0
  195. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/request_context.py +0 -0
  196. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/scan_profiles.py +0 -0
  197. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/scheduler.py +0 -0
  198. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/secret_retrieval/basic_secret.py +0 -0
  200. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  201. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/server.py +0 -0
  202. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/telemetry.py +0 -0
  203. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/webhook_bootstrap.py +0 -0
  204. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/integration/webhook_entity.py +0 -0
  205. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/py.typed +0 -0
  206. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/__init__.py +0 -0
  207. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/batch/__init__.py +0 -0
  208. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/batch/execute_batch.py +0 -0
  209. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  210. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/chemical/__init__.py +0 -0
  211. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  212. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/condition_parameters/upsert_condition_match.py +0 -0
  214. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +0 -0
  215. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_entities.py +0 -0
  217. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_entity.py +0 -0
  218. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_or_update_entities.py +0 -0
  219. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  220. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/export_entities.py +0 -0
  221. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/get_entities_data.py +0 -0
  222. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  223. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/list_aggregate.py +0 -0
  224. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/list_entities.py +0 -0
  225. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/lock_entity.py +0 -0
  226. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/lookup_entity.py +0 -0
  227. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  228. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_barcode.py +0 -0
  229. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_entities_field_values.py +0 -0
  230. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  231. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/set_values.py +0 -0
  232. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  233. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/entity/unlock_entity.py +0 -0
  234. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/equipment/__init__.py +0 -0
  235. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  236. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/field_options/__init__.py +0 -0
  237. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  238. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/file_folders/__init__.py +0 -0
  239. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  240. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  241. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/files/__init__.py +0 -0
  242. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/id_source/__init__.py +0 -0
  243. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/id_source/list_id_source.py +0 -0
  244. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/id_source/match_id_source.py +0 -0
  245. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/input_groups/__init__.py +0 -0
  246. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  247. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/__init__.py +0 -0
  248. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/create_inputs.py +0 -0
  249. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/get_input_data.py +0 -0
  250. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/get_input_names.py +0 -0
  251. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  252. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  253. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_input_category.py +0 -0
  254. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  255. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  256. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/__init__.py +0 -0
  257. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  258. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/push_notification.py +0 -0
  259. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  260. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/listing/__init__.py +0 -0
  261. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/listing/export_listing.py +0 -0
  262. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/listing/fetch_listing.py +0 -0
  263. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/material_families/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  265. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/__init__.py +0 -0
  266. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/get_analyze_results.py +0 -0
  267. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/get_suggest_results.py +0 -0
  268. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/ml/submit_async_job.py +0 -0
  269. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/notebooks/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  271. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
  272. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/output_parameters/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  274. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/__init__.py +0 -0
  275. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/get_output_data.py +0 -0
  276. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/get_output_names.py +0 -0
  277. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  278. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  279. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  280. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/permissions/__init__.py +0 -0
  281. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  282. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  283. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/project/__init__.py +0 -0
  284. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/project/get_projects.py +0 -0
  285. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/project/get_projects_data.py +0 -0
  286. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/__init__.py +0 -0
  287. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  288. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/create_recipe_links.py +0 -0
  289. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  290. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  291. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  292. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/__init__.py +0 -0
  293. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  294. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  295. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  296. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  297. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  298. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  299. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  300. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/create_recipe.py +0 -0
  301. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/create_recipes.py +0 -0
  302. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  303. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  304. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  305. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_curve.py +0 -0
  306. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  307. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  308. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  309. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  310. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  311. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  312. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  313. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  314. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  315. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  316. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  317. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  318. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  319. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  320. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  321. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  322. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  323. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  324. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/runsheet/__init__.py +0 -0
  325. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  326. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  327. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/time_series/__init__.py +0 -0
  328. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/time_series/ingest_dataset_measurements.py +0 -0
  329. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/triggers/__init__.py +0 -0
  330. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/triggers/run_trigger.py +0 -0
  331. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/uploader/__init__.py +0 -0
  332. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  333. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/user/__init__.py +0 -0
  334. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/api/user/get_current_user_info.py +0 -0
  335. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_batch.py +0 -0
  336. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_batch_t.py +0 -0
  337. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_jobs.py +0 -0
  338. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/async_jobs_t.py +0 -0
  339. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/auth_retrieval.py +0 -0
  340. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/auth_retrieval_t.py +0 -0
  341. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/base.py +0 -0
  342. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/base_t.py +0 -0
  343. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/calculations.py +0 -0
  344. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/calculations_t.py +0 -0
  345. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/chemical_structure.py +0 -0
  346. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/chemical_structure_t.py +0 -0
  347. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/client_config.py +0 -0
  348. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/client_config_t.py +0 -0
  349. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/condition_match.py +0 -0
  350. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/condition_match_t.py +0 -0
  351. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/curves.py +0 -0
  352. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/curves_t.py +0 -0
  353. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/data.py +0 -0
  354. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/data_t.py +0 -0
  355. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/dataset_measurements.py +0 -0
  356. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/dataset_measurements_t.py +0 -0
  357. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/entity.py +0 -0
  358. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/experiment_groups.py +0 -0
  359. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/experiment_groups_t.py +0 -0
  360. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/exports.py +0 -0
  361. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/exports_t.py +0 -0
  362. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/field_values.py +0 -0
  363. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/field_values_t.py +0 -0
  364. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/fields.py +0 -0
  365. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/fields_t.py +0 -0
  366. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/generic_upload.py +0 -0
  367. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/generic_upload_t.py +0 -0
  368. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/id_source.py +0 -0
  369. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/id_source_t.py +0 -0
  370. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/identifier.py +0 -0
  371. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/identifier_t.py +0 -0
  372. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/input_attributes.py +0 -0
  373. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/input_attributes_t.py +0 -0
  374. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/inputs.py +0 -0
  375. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/inputs_t.py +0 -0
  376. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_server.py +0 -0
  377. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_server_t.py +0 -0
  378. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_session.py +0 -0
  379. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integration_session_t.py +0 -0
  380. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integrations.py +0 -0
  381. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/integrations_t.py +0 -0
  382. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/listing.py +0 -0
  383. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/listing_t.py +0 -0
  384. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/ml_reports.py +0 -0
  385. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/ml_reports_t.py +0 -0
  386. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notices.py +0 -0
  387. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notices_t.py +0 -0
  388. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notifications.py +0 -0
  389. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/notifications_t.py +0 -0
  390. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/outputs.py +0 -0
  391. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/outputs_t.py +0 -0
  392. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/overrides.py +0 -0
  393. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/overrides_t.py +0 -0
  394. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/permissions.py +0 -0
  395. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/permissions_t.py +0 -0
  396. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/phases.py +0 -0
  397. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/phases_t.py +0 -0
  398. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/post_base.py +0 -0
  399. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/post_base_t.py +0 -0
  400. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/queued_job.py +0 -0
  401. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/queued_job_t.py +0 -0
  402. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_identifiers.py +0 -0
  403. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_identifiers_t.py +0 -0
  404. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_inputs.py +0 -0
  405. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_inputs_t.py +0 -0
  406. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_links.py +0 -0
  407. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_links_t.py +0 -0
  408. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_metadata.py +0 -0
  409. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_metadata_t.py +0 -0
  410. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_output_metadata.py +0 -0
  411. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_output_metadata_t.py +0 -0
  412. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_step_relationships.py +0 -0
  413. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_step_relationships_t.py +0 -0
  414. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_tags.py +0 -0
  415. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_tags_t.py +0 -0
  416. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_step_types.py +0 -0
  417. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  418. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_steps.py +0 -0
  419. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  420. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipes.py +0 -0
  421. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/recipes_t.py +0 -0
  422. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/request_headers.py +0 -0
  423. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/request_headers_t.py +0 -0
  424. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/response.py +0 -0
  425. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/response_t.py +0 -0
  426. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet.py +0 -0
  427. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet_format.py +0 -0
  428. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet_format_t.py +0 -0
  429. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/runsheet_t.py +0 -0
  430. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/secret_retrieval.py +0 -0
  431. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/secret_retrieval_t.py +0 -0
  432. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/sockets.py +0 -0
  433. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/sockets_t.py +0 -0
  434. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/specs.py +0 -0
  435. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/specs_t.py +0 -0
  436. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/step_relationships.py +0 -0
  437. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/step_relationships_t.py +0 -0
  438. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/units.py +0 -0
  439. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/units_t.py +0 -0
  440. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/uploader.py +0 -0
  441. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/uploader_t.py +0 -0
  442. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/users.py +0 -0
  443. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/users_t.py +0 -0
  444. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook.py +0 -0
  445. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook_job.py +0 -0
  446. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook_job_t.py +0 -0
  447. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/webhook_t.py +0 -0
  448. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/uncountable/types/workflows.py +0 -0
  449. {uncountablepythonsdk-0.0.184 → uncountablepythonsdk-0.0.186}/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.184
3
+ Version: 0.0.186
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
@@ -34,7 +34,7 @@ Requires-Dist: paramiko==5.*
34
34
  Requires-Dist: boto3==1.*
35
35
  Requires-Dist: flask==3.*
36
36
  Requires-Dist: simplejson==3.*
37
- Requires-Dist: grpcio==1.78.0
37
+ Requires-Dist: grpcio==1.83.0
38
38
  Requires-Dist: protobuf>=4.21.1
39
39
  Requires-Dist: azure-storage-blob==12.*
40
40
  Requires-Dist: azure-storage-file-share==12.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.184
3
+ Version: 0.0.186
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
@@ -34,7 +34,7 @@ Requires-Dist: paramiko==5.*
34
34
  Requires-Dist: boto3==1.*
35
35
  Requires-Dist: flask==3.*
36
36
  Requires-Dist: simplejson==3.*
37
- Requires-Dist: grpcio==1.78.0
37
+ Requires-Dist: grpcio==1.83.0
38
38
  Requires-Dist: protobuf>=4.21.1
39
39
  Requires-Dist: azure-storage-blob==12.*
40
40
  Requires-Dist: azure-storage-file-share==12.*
@@ -47,6 +47,7 @@ examples/integration-server/pyproject.toml
47
47
  examples/integration-server/jobs/materials_auto/concurrent_cron.py
48
48
  examples/integration-server/jobs/materials_auto/example_cron.py
49
49
  examples/integration-server/jobs/materials_auto/example_http.py
50
+ examples/integration-server/jobs/materials_auto/example_http_get.py
50
51
  examples/integration-server/jobs/materials_auto/example_instrument.py
51
52
  examples/integration-server/jobs/materials_auto/example_parse.py
52
53
  examples/integration-server/jobs/materials_auto/example_predictions.py
@@ -322,6 +323,7 @@ uncountable/types/api/condition_parameters/__init__.py
322
323
  uncountable/types/api/condition_parameters/upsert_condition_match.py
323
324
  uncountable/types/api/condition_parameters/upsert_condition_matches.py
324
325
  uncountable/types/api/entity/__init__.py
326
+ uncountable/types/api/entity/add_entity_comment.py
325
327
  uncountable/types/api/entity/create_entities.py
326
328
  uncountable/types/api/entity/create_entity.py
327
329
  uncountable/types/api/entity/create_or_update_entities.py
@@ -16,7 +16,7 @@ paramiko==5.*
16
16
  boto3==1.*
17
17
  flask==3.*
18
18
  simplejson==3.*
19
- grpcio==1.78.0
19
+ grpcio==1.83.0
20
20
  protobuf>=4.21.1
21
21
  azure-storage-blob==12.*
22
22
  azure-storage-file-share==12.*
@@ -0,0 +1,44 @@
1
+ import json
2
+
3
+ from uncountable.integration.http_server import (
4
+ GenericHttpRequest,
5
+ GenericHttpResponse,
6
+ HttpException,
7
+ )
8
+ from uncountable.integration.job import CustomHttpJob, register_job
9
+ from uncountable.types import job_definition_t
10
+
11
+ _EXPECTED_USER_ID = 1
12
+
13
+
14
+ @register_job
15
+ class HttpGetExample(CustomHttpJob):
16
+ @staticmethod
17
+ def validate_request(
18
+ *,
19
+ request: GenericHttpRequest,
20
+ job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
21
+ profile_meta: job_definition_t.ProfileMetadata,
22
+ ) -> None:
23
+ if (
24
+ CustomHttpJob.get_validated_oauth_request_user_id(
25
+ request=request, profile_metadata=profile_meta
26
+ )
27
+ != _EXPECTED_USER_ID
28
+ ):
29
+ raise HttpException(
30
+ message="unauthorized; invalid oauth token", error_code=401
31
+ )
32
+
33
+ @staticmethod
34
+ def handle_request(
35
+ *,
36
+ request: GenericHttpRequest,
37
+ job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
38
+ profile_meta: job_definition_t.ProfileMetadata, # ruff:ignore[unused-static-method-argument]
39
+ ) -> GenericHttpResponse:
40
+ return GenericHttpResponse(
41
+ response=json.dumps(request.query_params),
42
+ status_code=200,
43
+ headers={"Content-Type": "application/json"},
44
+ )
@@ -74,6 +74,13 @@ jobs:
74
74
  executor:
75
75
  type: script
76
76
  import_path: example_http
77
+ - id: example_http_get
78
+ type: custom_http
79
+ name: Custom HTTP GET
80
+ http_method: get
81
+ executor:
82
+ type: script
83
+ import_path: example_http_get
77
84
  - id: example_runsheet_wh
78
85
  type: webhook
79
86
  name: Runsheet Webhook
@@ -17,11 +17,11 @@ class SerializationType(StrEnum):
17
17
 
18
18
 
19
19
  @functools.lru_cache(maxsize=500000)
20
- def get_serialization_type(type: Any) -> SerializationType:
21
- super_classes = set(type.__mro__)
20
+ def get_serialization_type(obj_type: Any) -> SerializationType:
21
+ super_classes = set(obj_type.__mro__)
22
22
 
23
23
  # check is named tuple
24
- if tuple in super_classes and hasattr(type, "_fields"):
24
+ if tuple in super_classes and hasattr(obj_type, "_fields"):
25
25
  return SerializationType.NAMED_TUPLE
26
26
 
27
27
  if list in super_classes or set in super_classes or tuple in super_classes:
@@ -30,7 +30,7 @@ def get_serialization_type(type: Any) -> SerializationType:
30
30
  if dict in super_classes:
31
31
  return SerializationType.DICT
32
32
 
33
- if dataclasses.is_dataclass(type):
33
+ if dataclasses.is_dataclass(obj_type):
34
34
  return SerializationType.DATACLASS
35
35
 
36
36
  if Enum in super_classes and str in super_classes:
@@ -210,8 +210,7 @@ def serialize_for_api(obj: Any) -> JsonValue:
210
210
  serialization_type == SerializationType.UNKNOWN
211
211
  ): # performance optimization to not do function lookup
212
212
  return obj # type: ignore
213
- r = _CONVERSION_SERIALIZATION_FUNCS[serialization_type](obj)
214
- return r
213
+ return _CONVERSION_SERIALIZATION_FUNCS[serialization_type](obj)
215
214
 
216
215
 
217
216
  _SERIALIZATION_FUNCS_DICT: dict[
@@ -1,4 +1,5 @@
1
1
  import dataclasses
2
+ import functools
2
3
  import io
3
4
  import os
4
5
  from decimal import Decimal
@@ -1148,6 +1149,17 @@ def refer_to(ctx: TrackingContext, stype: builder.SpecType) -> str:
1148
1149
  SpecEndpoint = builder.SpecEndpoint
1149
1150
 
1150
1151
 
1152
+ def _route_identifier(
1153
+ endpoint: SpecEndpoint, *, endpoint_root: str
1154
+ ) -> tuple[str, str, str]:
1155
+ endpoint_specific_path = endpoint.path_per_api_endpoint[endpoint_root]
1156
+ return (
1157
+ endpoint_specific_path.path_dirname,
1158
+ endpoint_specific_path.path_basename,
1159
+ endpoint.method,
1160
+ )
1161
+
1162
+
1151
1163
  def _emit_routes(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
1152
1164
  for endpoint_root in builder.api_endpoints:
1153
1165
  endpoints: list[SpecEndpoint] = []
@@ -1188,17 +1200,13 @@ from main.site.framework.types import {static_route_imports}
1188
1200
  """
1189
1201
  )
1190
1202
 
1191
- def _route_identifier(endpoint: SpecEndpoint) -> tuple[str, str, str]:
1192
- endpoint_specific_path = endpoint.path_per_api_endpoint[endpoint_root]
1193
- return (
1194
- endpoint_specific_path.path_dirname,
1195
- endpoint_specific_path.path_basename,
1196
- endpoint.method,
1197
- )
1203
+ route_identifier = functools.partial(
1204
+ _route_identifier, endpoint_root=endpoint_root
1205
+ )
1198
1206
 
1199
- sorted_endpoints = sorted(endpoints, key=_route_identifier)
1207
+ sorted_endpoints = sorted(endpoints, key=route_identifier)
1200
1208
 
1201
- assert len(endpoints) == len(set(map(_route_identifier, endpoints))), (
1209
+ assert len(endpoints) == len(set(map(route_identifier, endpoints))), (
1202
1210
  "Endpoints are not unique"
1203
1211
  )
1204
1212
 
@@ -1309,39 +1317,64 @@ def _emit_namespace_imports(
1309
1317
 
1310
1318
  def _emit_id_source(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
1311
1319
  """
1312
- Create a map of full-type-name to enums for use in id-source.
1320
+ Create a map of full-type-name to enum data for use in id-source. The values are
1321
+ plain data (member values, labels, deprecated) so importing this file does not pull
1322
+ in the generated type modules.
1313
1323
  """
1314
1324
  id_source_output = config.id_source_output
1315
1325
  if id_source_output is None:
1316
1326
  return
1317
- enum_out = io.StringIO()
1318
- enum_out.write(f"{LINT_HEADER}{MODIFY_NOTICE}\n")
1319
- enum_out.write("import typing\n")
1320
- enum_out.write("from enum import StrEnum\n")
1321
1327
 
1322
- ctx = TrackingContext()
1323
- # In this context the propername
1324
1328
  named_enums = {
1325
- builder.resolve_proper_name(string_enum): refer_to(ctx, string_enum)
1329
+ builder.resolve_proper_name(string_enum): string_enum
1326
1330
  for string_enum in builder.emit_id_source_enums
1327
1331
  }
1328
1332
 
1329
- _emit_namespace_imports(
1330
- out=enum_out, namespaces=ctx.namespaces, from_namespace=None, config=config
1331
- )
1332
-
1333
+ body = io.StringIO()
1333
1334
  known_keys = []
1334
- enum_out.write("\nENUM_MAP: dict[str, type[StrEnum]] = {\n")
1335
+ any_labels = False
1336
+ body.write("\nENUM_MAP: dict[str, EnumRegistryEntry] = {\n")
1335
1337
  for key in sorted(named_enums.keys()):
1336
- enum_out.write(f'{INDENT}"{key}": {named_enums[key]},\n')
1338
+ string_enum = named_enums[key]
1339
+ entries = list(string_enum.values.values())
1340
+ member_values = [f'"{entry.value}"' for entry in entries]
1341
+ members = ", ".join(member_values)
1342
+ single_element_comma = "," if len(member_values) == 1 else ""
1343
+ labels = {
1344
+ entry.value: entry.label for entry in entries if entry.label is not None
1345
+ }
1346
+ deprecated = [entry.value for entry in entries if entry.deprecated is True]
1347
+ body.write(f'{INDENT}"{key}": EnumRegistryEntry(\n')
1348
+ body.write(f"{2 * INDENT}members=({members}{single_element_comma}),\n")
1349
+ if labels:
1350
+ any_labels = True
1351
+ body.write(f"{2 * INDENT}labels=MappingProxyType({{\n")
1352
+ for value, label in labels.items():
1353
+ body.write(f'{3 * INDENT}"{value}": "{label}",\n')
1354
+ body.write(f"{2 * INDENT}}}),\n")
1355
+ if deprecated:
1356
+ dep = ", ".join(f'"{value}"' for value in deprecated)
1357
+ body.write(f"{2 * INDENT}deprecated=frozenset({{{dep}}}),\n")
1358
+ body.write(f"{INDENT}),\n")
1337
1359
  known_keys.append(f'"{key}"')
1338
- enum_out.write(f"}}\n{MODIFY_NOTICE}\n")
1360
+ body.write(f"}}\n{MODIFY_NOTICE}\n")
1361
+
1362
+ enum_out = io.StringIO()
1363
+ enum_out.write(f"{LINT_HEADER}{MODIFY_NOTICE}\n")
1364
+ enum_out.write("import typing\n")
1365
+ if any_labels:
1366
+ enum_out.write("from types import MappingProxyType\n")
1367
+ enum_out.write(
1368
+ "from main.unc.materials.id_source_construct.enum_registry import "
1369
+ "EnumRegistryEntry\n"
1370
+ )
1371
+ enum_out.write(body.getvalue())
1339
1372
 
1340
1373
  enum_out.write(f"\nKnownEnumsType = typing.Literal[\n{INDENT}")
1341
1374
  enum_out.write(f",\n{INDENT}".join(known_keys))
1342
1375
  enum_out.write(f"\n]\n{MODIFY_NOTICE}\n")
1343
1376
 
1344
- enum_out.write(f'\n{MODIFY_NOTICE}\n__all__ = ["ENUM_MAP"]\n')
1377
+ enum_out.write(f'\n{MODIFY_NOTICE}\n__all__ = ["ENUM_MAP", "KnownEnumsType"]\n')
1345
1378
  enum_out.write(f"{MODIFY_NOTICE}\n{LINT_FOOTER}")
1346
1379
 
1347
1380
  util.rewrite_file(id_source_output, enum_out.getvalue())
@@ -2,11 +2,11 @@ from .util import format_parsed_type, parse_type_str
2
2
 
3
3
 
4
4
  def test_parse() -> None:
5
- def check(input: str) -> None:
6
- pt = parse_type_str(input)
5
+ def check(type_str: str) -> None:
6
+ pt = parse_type_str(type_str)
7
7
  fmt = format_parsed_type(pt)
8
- assert input == fmt
9
- print(input, "=", fmt)
8
+ assert type_str == fmt
9
+ print(type_str, "=", fmt)
10
10
 
11
11
  check("Simple.path.more")
12
12
  check("path.List<Integer>")
@@ -53,12 +53,12 @@ def ui_entry_variable_to_type_spec_type(
53
53
 
54
54
 
55
55
  def construct_inputs_type_data(
56
- vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
56
+ action_vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
57
57
  ) -> RawDict:
58
- if len(vars) == 0:
58
+ if len(action_vars) == 0:
59
59
  return {"type": BaseTypeName.s_object}
60
60
  properties: dict[str, dict[str, str]] = {}
61
- for input_name, input_defn in (vars).items():
61
+ for input_name, input_defn in (action_vars).items():
62
62
  properties[f"{input_name}"] = {
63
63
  "type": ui_entry_variable_to_type_spec_type(input_defn)
64
64
  }
@@ -66,12 +66,12 @@ def construct_inputs_type_data(
66
66
 
67
67
 
68
68
  def construct_outputs_type_data(
69
- vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
69
+ action_vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
70
70
  ) -> RawDict:
71
- if len(vars) == 0:
71
+ if len(action_vars) == 0:
72
72
  return {"type": BaseTypeName.s_object}
73
73
  properties: dict[str, dict[str, str]] = {}
74
- for output_name, output_defn in (vars).items():
74
+ for output_name, output_defn in (action_vars).items():
75
75
  # All outputs are optional
76
76
  properties[f"{output_name}"] = {
77
77
  "type": f"Optional<{convert_from_value_spec_type(output_defn.vs_type)}>"
@@ -82,7 +82,7 @@ def construct_outputs_type_data(
82
82
  def construct_outputs_type(
83
83
  *,
84
84
  action_scope: ui_entry_actions_t.ActionScope,
85
- vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
85
+ action_vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
86
86
  builder: SpecBuilder,
87
87
  namespace: SpecNamespace,
88
88
  ) -> SpecTypeDefnObject:
@@ -93,7 +93,7 @@ def construct_outputs_type(
93
93
  namespace.types[stype.name] = stype
94
94
  stype.process(
95
95
  builder=builder,
96
- data=construct_outputs_type_data(vars=vars),
96
+ data=construct_outputs_type_data(action_vars=action_vars),
97
97
  )
98
98
  return stype
99
99
 
@@ -101,7 +101,7 @@ def construct_outputs_type(
101
101
  def construct_inputs_type(
102
102
  *,
103
103
  action_scope: ui_entry_actions_t.ActionScope,
104
- vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
104
+ action_vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
105
105
  builder: SpecBuilder,
106
106
  namespace: SpecNamespace,
107
107
  ) -> SpecTypeDefnObject:
@@ -109,7 +109,7 @@ def construct_inputs_type(
109
109
  namespace=namespace,
110
110
  name=emit_typescript_util.ts_type_name(f"{action_scope}_inputs"),
111
111
  )
112
- stype.process(builder=builder, data=construct_inputs_type_data(vars))
112
+ stype.process(builder=builder, data=construct_inputs_type_data(action_vars))
113
113
  namespace.types[stype.name] = stype
114
114
  return stype
115
115
 
@@ -140,13 +140,13 @@ def emit_entry_action_definition(
140
140
  ) -> EntryActionTypeInfo:
141
141
  inputs_type = construct_inputs_type(
142
142
  action_scope=action_scope,
143
- vars=defn.inputs,
143
+ action_vars=defn.inputs,
144
144
  builder=builder,
145
145
  namespace=ctx.namespace,
146
146
  )
147
147
  outputs_type = construct_outputs_type(
148
148
  action_scope=action_scope,
149
- vars=defn.outputs,
149
+ action_vars=defn.outputs,
150
150
  builder=builder,
151
151
  namespace=ctx.namespace,
152
152
  )
@@ -158,12 +158,12 @@ def emit_entry_action_definition(
158
158
  )
159
159
 
160
160
 
161
- def _validate_input(input: ui_entry_actions_t.UiEntryActionVariable) -> None:
162
- if "_" in input.vs_var_name:
163
- raise ValueError(f"Expected camelCase for variable {input.vs_var_name}")
164
- if not re.fullmatch(base_t.REF_NAME_STRICT_REGEX, input.vs_var_name):
161
+ def _validate_input(variable: ui_entry_actions_t.UiEntryActionVariable) -> None:
162
+ if "_" in variable.vs_var_name:
163
+ raise ValueError(f"Expected camelCase for variable {variable.vs_var_name}")
164
+ if not re.fullmatch(base_t.REF_NAME_STRICT_REGEX, variable.vs_var_name):
165
165
  raise ValueError(
166
- f"Variable {input.vs_var_name} has invalid syntax. See REF_NAME_STRICT_REGEX"
166
+ f"Variable {variable.vs_var_name} has invalid syntax. See REF_NAME_STRICT_REGEX"
167
167
  )
168
168
 
169
169
 
@@ -69,7 +69,7 @@ dependencies = [
69
69
  "boto3 == 1.*",
70
70
  "flask == 3.*",
71
71
  "simplejson == 3.*",
72
- "grpcio == 1.78.0",
72
+ "grpcio == 1.83.0",
73
73
  "protobuf >= 4.21.1",
74
74
  "azure-storage-blob == 12.*",
75
75
  "azure-storage-file-share == 12.*",
@@ -68,6 +68,7 @@ class HttpException(Exception):
68
68
  class GenericHttpRequest:
69
69
  body_base64: str
70
70
  headers: dict[str, str]
71
+ query_params: dict[str, list[str]]
71
72
 
72
73
  @functools.cached_property
73
74
  def body_bytes(self) -> bytes:
@@ -1,4 +1,5 @@
1
1
  import base64
2
+ from typing import assert_never
2
3
 
3
4
  import flask
4
5
  from flask.typing import ResponseReturnValue
@@ -16,12 +17,31 @@ from uncountable.types import job_definition_t
16
17
 
17
18
  app = flask.Flask(__name__)
18
19
 
20
+ HttpJobDefinition = (
21
+ job_definition_t.CustomHttpJobDefinition
22
+ | job_definition_t.WebhookJobDefinition
23
+ | job_definition_t.UncountableWebhookJobDefinition
24
+ )
25
+
26
+
27
+ def _resolve_route_http_method(job: HttpJobDefinition) -> job_definition_t.HttpMethod:
28
+ match job:
29
+ case job_definition_t.CustomHttpJobDefinition():
30
+ return job.http_method
31
+ case (
32
+ job_definition_t.WebhookJobDefinition()
33
+ | job_definition_t.UncountableWebhookJobDefinition()
34
+ ):
35
+ return job_definition_t.HttpMethod.POST
36
+ case _:
37
+ assert_never(job)
38
+
19
39
 
20
40
  def register_route(
21
41
  *,
22
42
  server_logger: Logger,
23
43
  profile_meta: job_definition_t.ProfileMetadata,
24
- job: job_definition_t.HttpJobDefinitionBase,
44
+ job: HttpJobDefinition,
25
45
  ) -> None:
26
46
  route = f"/{profile_meta.name}/{job.id}"
27
47
  log_attributes = {
@@ -56,6 +76,7 @@ def register_route(
56
76
  http_request = GenericHttpRequest(
57
77
  body_base64=base64.b64encode(flask.request.get_data()).decode(),
58
78
  headers=dict(flask.request.headers),
79
+ query_params=flask.request.args.to_dict(flat=False),
59
80
  )
60
81
  job_instance.validate_request(
61
82
  request=http_request, job_definition=job, profile_meta=profile_meta
@@ -88,7 +109,7 @@ def register_route(
88
109
  route,
89
110
  endpoint=f"handle_request_{job.id}",
90
111
  view_func=handle_request,
91
- methods=["POST"],
112
+ methods=[_resolve_route_http_method(job).value.upper()],
92
113
  )
93
114
 
94
115
  server_logger.log_debug(
@@ -103,10 +124,21 @@ def main() -> None:
103
124
  for profile_metadata in profiles:
104
125
  server_logger = Logger(get_current_span())
105
126
  for job in profile_metadata.jobs:
106
- if isinstance(job, job_definition_t.HttpJobDefinitionBase):
107
- register_route(
108
- server_logger=server_logger, profile_meta=profile_metadata, job=job
109
- )
127
+ match job:
128
+ case job_definition_t.CronJobDefinition():
129
+ continue
130
+ case (
131
+ job_definition_t.CustomHttpJobDefinition()
132
+ | job_definition_t.WebhookJobDefinition()
133
+ | job_definition_t.UncountableWebhookJobDefinition()
134
+ ):
135
+ register_route(
136
+ server_logger=server_logger,
137
+ profile_meta=profile_metadata,
138
+ job=job,
139
+ )
140
+ case _:
141
+ assert_never(job)
110
142
 
111
143
 
112
144
  main()
@@ -2,6 +2,7 @@
2
2
  # ruff: noqa: E402 Q003
3
3
  # fmt: off
4
4
  # isort: skip_file
5
+ from .api.entity import add_entity_comment as add_entity_comment_t
5
6
  from .api.file_folders import add_file_to_folder as add_file_to_folder_t
6
7
  from .api.notebooks import add_notebook_content as add_notebook_content_t
7
8
  from .api.recipes import add_recipe_to_project as add_recipe_to_project_t
@@ -166,6 +167,7 @@ from . import workflows_t as workflows_t
166
167
 
167
168
 
168
169
  __all__: list[str] = [
170
+ "add_entity_comment_t",
169
171
  "add_file_to_folder_t",
170
172
  "add_notebook_content_t",
171
173
  "add_recipe_to_project_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 entity_t
12
+
13
+ __all__: list[str] = [
14
+ "Arguments",
15
+ "Data",
16
+ "ENDPOINT_DESCRIPTION",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/entity/external_add_entity_comment"
23
+ ENDPOINT_DESCRIPTION = "Adds a comment to an entity, creating the entity's comment thread when one does not exist yet. Watchers of the entity and of its comment thread are notified. Comments are not idempotent: each call adds a new comment."
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ @serial_class(
28
+ named_type_path="sdk.api.entity.add_entity_comment.Arguments",
29
+ )
30
+ @dataclasses.dataclass(slots=True, kw_only=True)
31
+ class Arguments:
32
+ entity_identifier: entity_t.EntityIdentifier
33
+ content: str
34
+
35
+
36
+ # DO NOT MODIFY -- This file is generated by type_spec
37
+ @serial_class(
38
+ named_type_path="sdk.api.entity.add_entity_comment.Data",
39
+ )
40
+ @dataclasses.dataclass(slots=True, kw_only=True)
41
+ class Data:
42
+ pass
43
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -30,7 +30,7 @@ __all__: list[str] = [
30
30
 
31
31
  ENDPOINT_METHOD = "GET"
32
32
  ENDPOINT_PATH = "api/external/files/download_file"
33
- ENDPOINT_DESCRIPTION = "Download an attachment field value from an entity (e.g. a file attached to a form field) by entity + field reference, or download a text document by its ID. When querying by entity field, if the field contains a single file it is returned directly (X-File-Download-Type: raw); if multiple files are attached, they are bundled into a ZIP archive (X-File-Download-Type: archive). For downloading the binary file stored on a recipe output of type image or file, use recipes/external_download_recipe_output_file instead."
33
+ ENDPOINT_DESCRIPTION = "Download an attachment field value from an entity (e.g. a file attached to a form field) by entity + field reference, or download a text document by its ID. When querying by entity field, if the field contains a single file it is returned directly (X-File-Download-Type: raw); if multiple files are attached, they are bundled into a ZIP archive (X-File-Download-Type: archive). For downloading the binary file stored on a recipe output of type image or file, use recipes/external_download_recipe_output_file instead. A file that has not cleared virus scanning is not returned: a file still being scanned responds with HTTP 422 indicating the scan is in progress, and a file that failed the scan responds with HTTP 422 indicating a security-scan failure."
34
34
 
35
35
 
36
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -23,7 +23,7 @@ __all__: list[str] = [
23
23
 
24
24
  ENDPOINT_METHOD = "POST"
25
25
  ENDPOINT_PATH = "api/external/uploader/invoke_uploader"
26
- ENDPOINT_DESCRIPTION = "Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key and requires READ_ALL permission on the uploader entity. The file_ids parameter is preferred; file_id is deprecated. Non-SDK users should use file_upload/external_create_file_record to upload files first. SDK users can use the client.upload_files() helper method. Supports async batch execution."
26
+ ENDPOINT_DESCRIPTION = "Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key, or selects it by detection keyword and file extension when uploader_key is null. Requires READ_ALL permission on the uploader entity. The file_ids parameter is preferred; file_id is deprecated. Non-SDK users should use file_upload/external_create_file_record to upload files first. SDK users can use the client.upload_files() helper method. Supports async batch execution."
27
27
 
28
28
 
29
29
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -32,7 +32,7 @@ ENDPOINT_DESCRIPTION = "Processes one or more uploaded files through a configure
32
32
  )
33
33
  @dataclasses.dataclass(slots=True, kw_only=True)
34
34
  class Arguments:
35
- uploader_key: identifier_t.IdentifierKey
35
+ uploader_key: identifier_t.IdentifierKey | None
36
36
  destination: generic_upload_t.UploadDestination
37
37
  file_id: base_t.ObjectId | None = None
38
38
  file_ids: list[base_t.ObjectId] | None = None
@@ -532,16 +532,17 @@ class AsyncBatchProcessorBase(ABC):
532
532
  def invoke_uploader(
533
533
  self,
534
534
  *,
535
- uploader_key: identifier_t.IdentifierKey,
535
+ uploader_key: identifier_t.IdentifierKey | None,
536
536
  destination: generic_upload_t.UploadDestination,
537
537
  file_id: base_t.ObjectId | None = None,
538
538
  file_ids: list[base_t.ObjectId] | None = None,
539
539
  depends_on: list[str] | None = None,
540
540
  _request_options: client_config_t.RequestOptions | None = None,
541
541
  ) -> async_batch_t.QueuedAsyncBatchRequest:
542
- """Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key and requires READ_ALL permission on the uploader entity. The file_ids parameter is preferred; file_id is deprecated. Non-SDK users should use file_upload/external_create_file_record to upload files first. SDK users can use the client.upload_files() helper method. Supports async batch execution.
542
+ """Processes one or more uploaded files through a configured uploader, parsing and writing the extracted data to a recipe destination. Resolves the uploader by its identifier key, or selects it by detection keyword and file extension when uploader_key is null. Requires READ_ALL permission on the uploader entity. The file_ids parameter is preferred; file_id is deprecated. Non-SDK users should use file_upload/external_create_file_record to upload files first. SDK users can use the client.upload_files() helper method. Supports async batch execution.
543
543
 
544
544
  :param file_id: DEPRECATED: use file_ids
545
+ :param uploader_key: Name an uploader, or pass null to select one by detection keyword and file extension, which fails unless exactly one uploader matches.
545
546
  :param depends_on: A list of batch reference keys to process before processing this request
546
547
  """
547
548
  args = invoke_uploader_t.Arguments(