UncountablePythonSDK 0.0.167__tar.gz → 0.0.169__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 (413) hide show
  1. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/PKG-INFO +1 -1
  2. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/UncountablePythonSDK.egg-info/SOURCES.txt +3 -0
  4. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/pyproject.toml +2 -2
  5. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/_sftp_session.py +3 -0
  6. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/file_type_utils.py +1 -0
  7. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/telemetry.py +40 -45
  8. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/__init__.py +4 -0
  9. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/condition_parameters/upsert_condition_match.py +8 -6
  10. uncountablepythonsdk-0.0.169/uncountable/types/api/condition_parameters/upsert_condition_matches.py +161 -0
  11. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/create_inputs.py +2 -1
  12. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/client_base.py +21 -0
  13. uncountablepythonsdk-0.0.169/uncountable/types/condition_match.py +7 -0
  14. uncountablepythonsdk-0.0.169/uncountable/types/condition_match_t.py +22 -0
  15. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/.github/workflows/documentation.yml +0 -0
  16. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/.github/workflows/publish.yml +0 -0
  17. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/.gitignore +0 -0
  18. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/.python-version +0 -0
  19. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/README.md +0 -0
  20. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  21. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  22. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  23. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/.gitignore +0 -0
  24. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/conf.py +0 -0
  25. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/index.md +0 -0
  26. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/integration_examples/add_file_to_folder.md +0 -0
  27. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/integration_examples/create_ingredient.md +0 -0
  28. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/integration_examples/create_output.md +0 -0
  29. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/integration_examples/index.md +0 -0
  30. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/integration_examples/upload_file.md +0 -0
  31. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/justfile +0 -0
  32. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/requirements.txt +0 -0
  33. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/android-chrome-192x192.png +0 -0
  34. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/android-chrome-512x512.png +0 -0
  35. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/apple-touch-icon.png +0 -0
  36. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/browserconfig.xml +0 -0
  37. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/favicon-16x16.png +0 -0
  38. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/favicon-32x32.png +0 -0
  39. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/manifest.json +0 -0
  40. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/mstile-150x150.png +0 -0
  41. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  42. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/docs/static/logo_blue.png +0 -0
  43. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/async_batch.py +0 -0
  44. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/async_batch_large_parse.py +0 -0
  45. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/basic_auth.py +0 -0
  46. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/create_entity.py +0 -0
  47. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/create_ingredient_sdk.py +0 -0
  48. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/download_files.py +0 -0
  49. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/edit_recipe_inputs.py +0 -0
  50. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  51. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  52. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  53. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_instrument.py +0 -0
  54. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  55. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  56. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  57. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  58. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  59. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/invoke_uploader.py +0 -0
  60. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/oauth.py +0 -0
  61. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/set_input_pdf_attribute.py +0 -0
  62. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/set_recipe_metadata_file.py +0 -0
  63. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/set_recipe_output_file_sdk.py +0 -0
  64. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/examples/upload_files.py +0 -0
  65. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/__init__.py +0 -0
  66. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/argument_parser/__init__.py +0 -0
  67. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/argument_parser/_is_enum.py +0 -0
  68. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  69. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/argument_parser/argument_parser.py +0 -0
  70. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/argument_parser/case_convert.py +0 -0
  71. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/argument_parser/parser_error.py +0 -0
  72. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/__init__.py +0 -0
  73. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/_blob_session.py +0 -0
  74. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  75. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  76. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/_local_session.py +0 -0
  77. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/_s3_session.py +0 -0
  78. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  79. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/py.typed +0 -0
  80. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/__init__.py +0 -0
  81. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/annotation.py +0 -0
  82. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/missing_sentry.py +0 -0
  83. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/opaque_key.py +0 -0
  84. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/serial_alias.py +0 -0
  85. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/serial_class.py +0 -0
  86. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/serial_generic.py +0 -0
  87. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/serial_union.py +0 -0
  88. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/unknown.py +0 -0
  89. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization/yaml.py +0 -0
  90. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization_util/__init__.py +0 -0
  91. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  92. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  93. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization_util/dataclasses.py +0 -0
  94. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/serialization_util/serialization_helpers.py +0 -0
  95. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/strenum_compat/__init__.py +0 -0
  96. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/strenum_compat/strenum_compat.py +0 -0
  97. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/__init__.py +0 -0
  98. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/__main__.py +0 -0
  99. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  100. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  101. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  102. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/builder.py +0 -0
  103. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/builder_types.py +0 -0
  104. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/config.py +0 -0
  105. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/cross_output_links.py +0 -0
  106. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/emit_io_ts.py +0 -0
  107. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/emit_open_api.py +0 -0
  108. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/emit_open_api_util.py +0 -0
  109. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/emit_python.py +0 -0
  110. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/emit_typescript.py +0 -0
  111. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/emit_typescript_util.py +0 -0
  112. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/load_types.py +0 -0
  113. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  114. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/open_api_util.py +0 -0
  115. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/parts/base.py.prepart +0 -0
  116. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  117. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/test.py +0 -0
  118. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/type_info/__main__.py +0 -0
  119. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  120. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  121. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  122. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/util.py +0 -0
  123. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/value_spec/__init__.py +0 -0
  124. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/value_spec/__main__.py +0 -0
  125. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  126. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  127. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pkgs/type_spec/value_spec/types.py +0 -0
  128. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/pyproject.toml +0 -0
  129. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/setup.cfg +0 -0
  130. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/__init__.py +0 -0
  131. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/__init__.py +0 -0
  132. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/async_batch.py +0 -0
  133. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/client.py +0 -0
  134. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/environment.py +0 -0
  135. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/file_upload.py +0 -0
  136. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/query/__init__.py +0 -0
  137. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/query/builder.py +0 -0
  138. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/query/column.py +0 -0
  139. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/query/row.py +0 -0
  140. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/query/types.py +0 -0
  141. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/core/types.py +0 -0
  142. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/__init__.py +0 -0
  143. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/cli.py +0 -0
  144. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/construct_client.py +0 -0
  145. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/cron.py +0 -0
  146. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/db/__init__.py +0 -0
  147. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/db/connect.py +0 -0
  148. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/db/session.py +0 -0
  149. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/entrypoint.py +0 -0
  150. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/executors/__init__.py +0 -0
  151. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/executors/executors.py +0 -0
  152. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  153. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/executors/script_executor.py +0 -0
  154. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/http_server/__init__.py +0 -0
  155. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/http_server/types.py +0 -0
  156. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/job.py +0 -0
  157. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/__init__.py +0 -0
  158. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  159. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  160. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  161. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  162. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  163. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  164. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  165. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  166. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  167. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  168. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  170. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  171. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  172. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  173. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  174. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/types.py +0 -0
  175. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/queue_runner/worker.py +0 -0
  176. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/request_context.py +0 -0
  177. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/scan_profiles.py +0 -0
  178. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/scheduler.py +0 -0
  179. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  180. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  181. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/server.py +0 -0
  182. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  183. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/py.typed +0 -0
  184. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/__init__.py +0 -0
  185. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/batch/__init__.py +0 -0
  186. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/batch/execute_batch.py +0 -0
  187. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
  188. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/chemical/__init__.py +0 -0
  189. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
  190. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  191. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/__init__.py +0 -0
  192. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/create_entities.py +0 -0
  193. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/create_entity.py +0 -0
  194. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/create_or_update_entity.py +0 -0
  195. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/export_entities.py +0 -0
  196. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/get_entities_data.py +0 -0
  197. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
  198. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/list_aggregate.py +0 -0
  199. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/list_entities.py +0 -0
  200. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/lock_entity.py +0 -0
  201. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/lookup_entity.py +0 -0
  202. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
  203. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/set_barcode.py +0 -0
  204. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/set_entity_field_values.py +0 -0
  205. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/set_values.py +0 -0
  206. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
  207. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/entity/unlock_entity.py +0 -0
  208. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/equipment/__init__.py +0 -0
  209. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
  210. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/field_options/__init__.py +0 -0
  211. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
  212. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/file_folders/__init__.py +0 -0
  213. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/file_folders/add_file_to_folder.py +0 -0
  214. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/file_folders/modify_file_system.py +0 -0
  215. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/files/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/files/download_file.py +0 -0
  217. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/id_source/__init__.py +0 -0
  218. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/id_source/list_id_source.py +0 -0
  219. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/id_source/match_id_source.py +0 -0
  220. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/input_groups/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
  222. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/__init__.py +0 -0
  223. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/get_input_data.py +0 -0
  224. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/get_input_names.py +0 -0
  225. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
  226. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
  227. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/set_input_category.py +0 -0
  228. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
  229. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
  230. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/integrations/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/integrations/publish_realtime_data.py +0 -0
  232. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/integrations/push_notification.py +0 -0
  233. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/integrations/register_sockets_token.py +0 -0
  234. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/listing/__init__.py +0 -0
  235. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/listing/export_listing.py +0 -0
  236. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/listing/fetch_listing.py +0 -0
  237. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/material_families/__init__.py +0 -0
  238. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
  239. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/notebooks/__init__.py +0 -0
  240. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/notebooks/add_notebook_content.py +0 -0
  241. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/notebooks/get_notebook_content.py +0 -0
  242. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/output_parameters/__init__.py +0 -0
  243. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +0 -0
  244. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/outputs/__init__.py +0 -0
  245. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/outputs/get_output_data.py +0 -0
  246. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/outputs/get_output_names.py +0 -0
  247. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/outputs/get_output_organization.py +0 -0
  248. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
  249. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/outputs/update_output_condition_parameter.py +0 -0
  250. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/permissions/__init__.py +0 -0
  251. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
  252. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/permissions/set_entity_permission.py +0 -0
  253. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/project/__init__.py +0 -0
  254. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/project/get_projects.py +0 -0
  255. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/project/get_projects_data.py +0 -0
  256. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipe_links/__init__.py +0 -0
  257. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
  258. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
  259. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  260. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
  261. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/__init__.py +0 -0
  262. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
  263. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/add_time_series_data.py +0 -0
  264. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/archive_recipes.py +0 -0
  265. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
  266. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
  267. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
  268. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/create_mix_order.py +0 -0
  269. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/create_recipe.py +0 -0
  270. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/create_recipes.py +0 -0
  271. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
  272. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
  273. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
  274. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_curve.py +0 -0
  275. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
  276. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
  277. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
  278. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
  279. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
  280. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/lock_recipes.py +0 -0
  281. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
  282. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
  283. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
  284. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
  285. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
  286. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
  287. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
  288. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/set_recipe_total.py +0 -0
  289. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
  290. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
  291. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +0 -0
  292. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/recipes/upsert_step_relationships.py +0 -0
  293. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/runsheet/__init__.py +0 -0
  294. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/runsheet/complete_async_upload.py +0 -0
  295. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/runsheet/export_default_runsheet.py +0 -0
  296. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/triggers/__init__.py +0 -0
  297. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/triggers/run_trigger.py +0 -0
  298. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/uploader/__init__.py +0 -0
  299. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/uploader/complete_async_parse.py +0 -0
  300. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
  301. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/user/__init__.py +0 -0
  302. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/api/user/get_current_user_info.py +0 -0
  303. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/async_batch.py +0 -0
  304. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/async_batch_processor.py +0 -0
  305. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/async_batch_t.py +0 -0
  306. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/async_jobs.py +0 -0
  307. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/async_jobs_t.py +0 -0
  308. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/auth_retrieval.py +0 -0
  309. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/auth_retrieval_t.py +0 -0
  310. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/base.py +0 -0
  311. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/base_t.py +0 -0
  312. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/calculations.py +0 -0
  313. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/calculations_t.py +0 -0
  314. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/chemical_structure.py +0 -0
  315. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/chemical_structure_t.py +0 -0
  316. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/client_config.py +0 -0
  317. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/client_config_t.py +0 -0
  318. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/curves.py +0 -0
  319. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/curves_t.py +0 -0
  320. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/data.py +0 -0
  321. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/data_t.py +0 -0
  322. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/entity.py +0 -0
  323. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/entity_t.py +0 -0
  324. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/experiment_groups.py +0 -0
  325. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/experiment_groups_t.py +0 -0
  326. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/exports.py +0 -0
  327. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/exports_t.py +0 -0
  328. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/field_values.py +0 -0
  329. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/field_values_t.py +0 -0
  330. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/fields.py +0 -0
  331. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/fields_t.py +0 -0
  332. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/generic_upload.py +0 -0
  333. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/generic_upload_t.py +0 -0
  334. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/id_source.py +0 -0
  335. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/id_source_t.py +0 -0
  336. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/identifier.py +0 -0
  337. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/identifier_t.py +0 -0
  338. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/input_attributes.py +0 -0
  339. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/input_attributes_t.py +0 -0
  340. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/inputs.py +0 -0
  341. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/inputs_t.py +0 -0
  342. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/integration_server.py +0 -0
  343. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/integration_server_t.py +0 -0
  344. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/integration_session.py +0 -0
  345. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/integration_session_t.py +0 -0
  346. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/integrations.py +0 -0
  347. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/integrations_t.py +0 -0
  348. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/job_definition.py +0 -0
  349. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/job_definition_t.py +0 -0
  350. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/listing.py +0 -0
  351. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/listing_t.py +0 -0
  352. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/notices.py +0 -0
  353. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/notices_t.py +0 -0
  354. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/notifications.py +0 -0
  355. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/notifications_t.py +0 -0
  356. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/outputs.py +0 -0
  357. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/outputs_t.py +0 -0
  358. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/overrides.py +0 -0
  359. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/overrides_t.py +0 -0
  360. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/permissions.py +0 -0
  361. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/permissions_t.py +0 -0
  362. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/phases.py +0 -0
  363. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/phases_t.py +0 -0
  364. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/post_base.py +0 -0
  365. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/post_base_t.py +0 -0
  366. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/queued_job.py +0 -0
  367. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/queued_job_t.py +0 -0
  368. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_identifiers.py +0 -0
  369. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_identifiers_t.py +0 -0
  370. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_inputs.py +0 -0
  371. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_inputs_t.py +0 -0
  372. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_links.py +0 -0
  373. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_links_t.py +0 -0
  374. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_metadata.py +0 -0
  375. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_metadata_t.py +0 -0
  376. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_output_metadata.py +0 -0
  377. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_output_metadata_t.py +0 -0
  378. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_step_relationships.py +0 -0
  379. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_step_relationships_t.py +0 -0
  380. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_tags.py +0 -0
  381. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_tags_t.py +0 -0
  382. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_workflow_step_types.py +0 -0
  383. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_workflow_step_types_t.py +0 -0
  384. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_workflow_steps.py +0 -0
  385. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  386. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipes.py +0 -0
  387. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/recipes_t.py +0 -0
  388. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/request_headers.py +0 -0
  389. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/request_headers_t.py +0 -0
  390. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/response.py +0 -0
  391. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/response_t.py +0 -0
  392. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/runsheet.py +0 -0
  393. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/runsheet_format.py +0 -0
  394. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/runsheet_format_t.py +0 -0
  395. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/runsheet_t.py +0 -0
  396. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/secret_retrieval.py +0 -0
  397. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/secret_retrieval_t.py +0 -0
  398. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/sockets.py +0 -0
  399. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/sockets_t.py +0 -0
  400. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/specs.py +0 -0
  401. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/specs_t.py +0 -0
  402. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/step_relationships.py +0 -0
  403. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/step_relationships_t.py +0 -0
  404. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/units.py +0 -0
  405. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/units_t.py +0 -0
  406. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/uploader.py +0 -0
  407. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/uploader_t.py +0 -0
  408. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/users.py +0 -0
  409. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/users_t.py +0 -0
  410. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/webhook_job.py +0 -0
  411. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/webhook_job_t.py +0 -0
  412. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/uncountable/types/workflows.py +0 -0
  413. {uncountablepythonsdk-0.0.167 → uncountablepythonsdk-0.0.169}/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.167
3
+ Version: 0.0.169
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.167
3
+ Version: 0.0.169
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
@@ -189,6 +189,8 @@ uncountable/types/chemical_structure_t.py
189
189
  uncountable/types/client_base.py
190
190
  uncountable/types/client_config.py
191
191
  uncountable/types/client_config_t.py
192
+ uncountable/types/condition_match.py
193
+ uncountable/types/condition_match_t.py
192
194
  uncountable/types/curves.py
193
195
  uncountable/types/curves_t.py
194
196
  uncountable/types/data.py
@@ -293,6 +295,7 @@ uncountable/types/api/chemical/__init__.py
293
295
  uncountable/types/api/chemical/convert_chemical_formats.py
294
296
  uncountable/types/api/condition_parameters/__init__.py
295
297
  uncountable/types/api/condition_parameters/upsert_condition_match.py
298
+ uncountable/types/api/condition_parameters/upsert_condition_matches.py
296
299
  uncountable/types/api/entity/__init__.py
297
300
  uncountable/types/api/entity/create_entities.py
298
301
  uncountable/types/api/entity/create_entity.py
@@ -8,8 +8,8 @@ dependencies = [
8
8
  "mypy == 1.*",
9
9
  "ruff == 0.*",
10
10
  "openpyxl == 3.*",
11
- "more_itertools == 10.*",
12
- "types-paramiko ==4.0.0.20260322",
11
+ "more_itertools ==11.*",
12
+ "types-paramiko ==4.0.0.20260402",
13
13
  "types-openpyxl == 3.*",
14
14
  "types-pysftp == 0.*",
15
15
  "types-pytz ==2026.*",
@@ -67,6 +67,7 @@ class SFTPSession(FileSystemSession):
67
67
  def __init__(self, sftp_config: FileSystemSFTPConfig) -> None:
68
68
  super().__init__()
69
69
  self.host: str = sftp_config.ip
70
+ self.port: int = sftp_config.port
70
71
  self.username: str = sftp_config.username
71
72
  self.key_file: str | paramiko.PKey | None = (
72
73
  sftp_config.pem_path
@@ -81,6 +82,7 @@ class SFTPSession(FileSystemSession):
81
82
  if self.key_file is not None:
82
83
  self.connection = pysftp.Connection(
83
84
  self.host,
85
+ port=self.port,
84
86
  username=self.username,
85
87
  private_key=self.key_file,
86
88
  cnopts=cnopts,
@@ -88,6 +90,7 @@ class SFTPSession(FileSystemSession):
88
90
  elif self.password is not None:
89
91
  self.connection = pysftp.Connection(
90
92
  self.host,
93
+ port=self.port,
91
94
  username=self.username,
92
95
  password=self.password,
93
96
  cnopts=cnopts,
@@ -65,6 +65,7 @@ class FileSystemSFTPConfig:
65
65
  password: str | None = None
66
66
  valid_extensions: tuple[str] | None = None
67
67
  recursive: bool = True
68
+ port: int = 22
68
69
 
69
70
 
70
71
  @dataclass(kw_only=True)
@@ -1,3 +1,4 @@
1
+ import dataclasses
1
2
  import datetime
2
3
  import functools
3
4
  import json
@@ -30,6 +31,7 @@ from opentelemetry.sdk.trace.export import (
30
31
  )
31
32
  from opentelemetry.trace import Span, Tracer
32
33
 
34
+ from pkgs.serialization_util import dict_fields
33
35
  from uncountable.core.environment import (
34
36
  get_otel_enabled,
35
37
  get_server_env,
@@ -229,60 +231,75 @@ class Logger:
229
231
  yield self
230
232
 
231
233
 
234
+ @dataclasses.dataclass(frozen=True, kw_only=True, slots=True)
235
+ class _JobResourceStats:
236
+ cpu_user_s: float
237
+ cpu_system_s: float
238
+ cpu_total_s: float
239
+ wall_time_s: float
240
+ current_rss_mb: float
241
+ peak_rss_mb: float
242
+
243
+
232
244
  class PerJobResourceTracker:
233
245
  def __init__(
234
246
  self,
235
247
  logger: "JobLogger",
248
+ *,
236
249
  sample_interval: float = 0.5,
237
250
  log_interval: float = 30.0,
251
+ bootup_delay: float = 3.0,
238
252
  ) -> None:
239
253
  self.logger = logger
240
254
  self.sample_interval = sample_interval
241
255
  self.log_interval = log_interval
256
+ self.bootup_delay = bootup_delay
242
257
  self._process = psutil.Process(os.getpid())
243
258
  self._stop_event = threading.Event()
244
259
  self._thread: threading.Thread | None = None
245
260
 
246
261
  self.max_rss: int = 0
247
262
  self.start_cpu_times: psutil._ntp.pcputimes | None = None
248
- self.end_cpu_times: psutil._ntp.pcputimes | None = None
249
263
  self.start_wall_time: float | None = None
250
- self.end_wall_time: float | None = None
251
264
 
252
- def _current_stats(self) -> Attributes:
265
+ def _current_stats(self) -> _JobResourceStats:
253
266
  assert self.start_cpu_times is not None
254
267
  assert self.start_wall_time is not None
255
268
  current_cpu_times = self._process.cpu_times()
256
269
  cpu_user = current_cpu_times.user - self.start_cpu_times.user
257
270
  cpu_sys = current_cpu_times.system - self.start_cpu_times.system
258
- cpu_total = cpu_user + cpu_sys
259
- elapsed = time.monotonic() - self.start_wall_time
260
- return {
261
- "cpu_user_s": round(cpu_user, 3),
262
- "cpu_system_s": round(cpu_sys, 3),
263
- "cpu_total_s": round(cpu_total, 3),
264
- "wall_time_s": round(elapsed, 3),
265
- "current_rss_mb": round(self._process.memory_info().rss / (1024 * 1024), 2),
266
- "peak_rss_mb": round(self.max_rss / (1024 * 1024), 2),
267
- }
271
+ return _JobResourceStats(
272
+ cpu_user_s=round(cpu_user, 3),
273
+ cpu_system_s=round(cpu_sys, 3),
274
+ cpu_total_s=round(cpu_user + cpu_sys, 3),
275
+ wall_time_s=round(time.monotonic() - self.start_wall_time, 3),
276
+ current_rss_mb=round(self._process.memory_info().rss / (1024 * 1024), 2),
277
+ peak_rss_mb=round(self.max_rss / (1024 * 1024), 2),
278
+ )
279
+
280
+ def _log_stats(self, message: str) -> None:
281
+ self.logger.log_debug(
282
+ message, attributes=_cast_attributes(dict_fields(self._current_stats()))
283
+ )
268
284
 
269
285
  def start(self) -> None:
270
286
  self.start_cpu_times = self._process.cpu_times()
271
287
  self.start_wall_time = time.monotonic()
272
288
 
273
289
  def _monitor() -> None:
274
- last_log_time = time.monotonic()
290
+ now = time.monotonic()
291
+ boot_at: float | None = now + self.bootup_delay
292
+ next_periodic_at = now + self.log_interval
275
293
  try:
276
294
  while not self._stop_event.is_set():
277
- rss = self._process.memory_info().rss
278
- self.max_rss = max(self.max_rss, rss)
295
+ self.max_rss = max(self.max_rss, self._process.memory_info().rss)
279
296
  now = time.monotonic()
280
- if now - last_log_time >= self.log_interval:
281
- self.logger.log_debug(
282
- "Job resource usage (periodic)",
283
- attributes=self._current_stats(),
284
- )
285
- last_log_time = now
297
+ if boot_at is not None and now >= boot_at:
298
+ self._log_stats("Job resource usage (bootup)")
299
+ boot_at = None
300
+ if now >= next_periodic_at:
301
+ self._log_stats("Job resource usage (periodic)")
302
+ next_periodic_at = now + self.log_interval
286
303
  time.sleep(self.sample_interval)
287
304
  except Exception:
288
305
  self._stop_event.set()
@@ -294,8 +311,6 @@ class PerJobResourceTracker:
294
311
  self._stop_event.set()
295
312
  if self._thread is not None:
296
313
  self._thread.join()
297
- self.end_cpu_times = self._process.cpu_times()
298
- self.end_wall_time = time.monotonic()
299
314
 
300
315
  def __enter__(self) -> typing.Self:
301
316
  self.start()
@@ -308,7 +323,6 @@ class PerJobResourceTracker:
308
323
  traceback: types.TracebackType | None,
309
324
  ) -> None:
310
325
  self.stop()
311
- stats = dict(self.summary())
312
326
  if isinstance(exc_value, MemoryError):
313
327
  if resource is not None:
314
328
  limit, _ = resource.getrlimit(resource.RLIMIT_AS)
@@ -320,26 +334,7 @@ class PerJobResourceTracker:
320
334
  ),
321
335
  )
322
336
  return
323
- self.logger.log_debug("Job resource usage summary", attributes=stats)
324
- return
325
-
326
- def summary(self) -> Attributes:
327
- assert self.start_cpu_times is not None
328
- assert self.end_cpu_times is not None
329
- assert self.start_wall_time is not None
330
- assert self.end_wall_time is not None
331
-
332
- cpu_user = self.end_cpu_times.user - self.start_cpu_times.user
333
- cpu_sys = self.end_cpu_times.system - self.start_cpu_times.system
334
- cpu_total = cpu_user + cpu_sys
335
- elapsed = self.end_wall_time - self.start_wall_time
336
- return {
337
- "cpu_user_s": round(cpu_user, 3),
338
- "cpu_system_s": round(cpu_sys, 3),
339
- "cpu_total_s": round(cpu_total, 3),
340
- "wall_time_s": round(elapsed, 3),
341
- "peak_rss_mb": round(self.max_rss / (1024 * 1024), 2),
342
- }
337
+ self._log_stats("Job resource usage summary")
343
338
 
344
339
 
345
340
  class JobLogger(Logger):
@@ -20,6 +20,7 @@ from .api.recipes import clear_recipe_outputs as clear_recipe_outputs_t
20
20
  from . import client_config_t as client_config_t
21
21
  from .api.uploader import complete_async_parse as complete_async_parse_t
22
22
  from .api.runsheet import complete_async_upload as complete_async_upload_t
23
+ from . import condition_match_t as condition_match_t
23
24
  from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
24
25
  from .api.entity import create_entities as create_entities_t
25
26
  from .api.entity import create_entity as create_entity_t
@@ -145,6 +146,7 @@ from .api.material_families import update_entity_material_families as update_ent
145
146
  from .api.outputs import update_output_condition_parameter as update_output_condition_parameter_t
146
147
  from . import uploader_t as uploader_t
147
148
  from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
149
+ from .api.condition_parameters import upsert_condition_matches as upsert_condition_matches_t
148
150
  from .api.field_options import upsert_field_options as upsert_field_options_t
149
151
  from .api.recipes import upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
150
152
  from .api.recipes import upsert_step_relationships as upsert_step_relationships_t
@@ -172,6 +174,7 @@ __all__: list[str] = [
172
174
  "client_config_t",
173
175
  "complete_async_parse_t",
174
176
  "complete_async_upload_t",
177
+ "condition_match_t",
175
178
  "convert_chemical_formats_t",
176
179
  "create_entities_t",
177
180
  "create_entity_t",
@@ -297,6 +300,7 @@ __all__: list[str] = [
297
300
  "update_output_condition_parameter_t",
298
301
  "uploader_t",
299
302
  "upsert_condition_match_t",
303
+ "upsert_condition_matches_t",
300
304
  "upsert_field_options_t",
301
305
  "upsert_recipe_workflow_step_t",
302
306
  "upsert_step_relationships_t",
@@ -6,11 +6,12 @@ from __future__ import annotations
6
6
  import typing # noqa: F401
7
7
  import datetime # noqa: F401
8
8
  from decimal import Decimal # noqa: F401
9
- from enum import StrEnum
10
9
  import dataclasses
11
10
  from pkgs.serialization import serial_class
11
+ from pkgs.serialization import serial_alias_annotation
12
12
  from ... import async_batch_t
13
13
  from ... import base_t
14
+ from ... import condition_match_t
14
15
  from ... import identifier_t
15
16
 
16
17
  __all__: list[str] = [
@@ -42,11 +43,12 @@ class ConditionParameter:
42
43
 
43
44
 
44
45
  # DO NOT MODIFY -- This file is generated by type_spec
45
- class MatchType(StrEnum):
46
- ALL = "all"
47
- EQ = "eq"
48
- EQCATEGORICAL = "eqCategorical"
49
- RANGE = "range"
46
+ MatchType = typing.Annotated[
47
+ condition_match_t.MatchType,
48
+ serial_alias_annotation(
49
+ named_type_path="sdk.api.condition_parameters.upsert_condition_match.MatchType",
50
+ ),
51
+ ]
50
52
 
51
53
 
52
54
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,161 @@
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 pkgs.serialization import serial_union_annotation
12
+ from ... import async_batch_t
13
+ from ... import base_t
14
+ from ... import condition_match_t
15
+ from ... import identifier_t
16
+
17
+ __all__: list[str] = [
18
+ "Arguments",
19
+ "ConditionParameter",
20
+ "ConditionParameterAll",
21
+ "ConditionParameterEqCategorical",
22
+ "ConditionParameterEqNumeric",
23
+ "ConditionParameterRange",
24
+ "Data",
25
+ "ENDPOINT_METHOD",
26
+ "ENDPOINT_PATH",
27
+ "UpsertArgs",
28
+ "UpsertArgsOutputConditions",
29
+ "UpsertArgsParameters",
30
+ ]
31
+
32
+ ENDPOINT_METHOD = "POST"
33
+ ENDPOINT_PATH = "api/external/condition_parameters/upsert_condition_matches"
34
+
35
+
36
+ # DO NOT MODIFY -- This file is generated by type_spec
37
+ @serial_class(
38
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterAll",
39
+ parse_require={"match_type"},
40
+ )
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
+ class ConditionParameterAll:
43
+ condition_parameter_key: identifier_t.IdentifierKey
44
+ allow_null: bool
45
+ match_type: typing.Literal[condition_match_t.MatchType.ALL] = condition_match_t.MatchType.ALL
46
+
47
+
48
+ # DO NOT MODIFY -- This file is generated by type_spec
49
+ @serial_class(
50
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterEqNumeric",
51
+ parse_require={"match_type"},
52
+ )
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
54
+ class ConditionParameterEqNumeric:
55
+ condition_parameter_key: identifier_t.IdentifierKey
56
+ allow_null: bool
57
+ numeric_values: list[Decimal | None]
58
+ match_type: typing.Literal[condition_match_t.MatchType.EQ] = condition_match_t.MatchType.EQ
59
+
60
+
61
+ # DO NOT MODIFY -- This file is generated by type_spec
62
+ @serial_class(
63
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterEqCategorical",
64
+ parse_require={"match_type"},
65
+ )
66
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
67
+ class ConditionParameterEqCategorical:
68
+ condition_parameter_key: identifier_t.IdentifierKey
69
+ allow_null: bool
70
+ categorical_values: list[str | None]
71
+ match_type: typing.Literal[condition_match_t.MatchType.EQCATEGORICAL] = condition_match_t.MatchType.EQCATEGORICAL
72
+
73
+
74
+ # DO NOT MODIFY -- This file is generated by type_spec
75
+ @serial_class(
76
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterRange",
77
+ to_string_values={"max_value", "min_value"},
78
+ parse_require={"match_type"},
79
+ )
80
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
81
+ class ConditionParameterRange:
82
+ condition_parameter_key: identifier_t.IdentifierKey
83
+ allow_null: bool
84
+ min_value: Decimal
85
+ max_value: Decimal
86
+ match_type: typing.Literal[condition_match_t.MatchType.RANGE] = condition_match_t.MatchType.RANGE
87
+
88
+
89
+ # DO NOT MODIFY -- This file is generated by type_spec
90
+ ConditionParameter = typing.Annotated[
91
+ ConditionParameterAll | ConditionParameterEqNumeric | ConditionParameterEqCategorical | ConditionParameterRange,
92
+ serial_union_annotation(
93
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameter",
94
+ discriminator="match_type",
95
+ discriminator_map={
96
+ "all": ConditionParameterAll,
97
+ "eq": ConditionParameterEqNumeric,
98
+ "eqCategorical": ConditionParameterEqCategorical,
99
+ "range": ConditionParameterRange,
100
+ },
101
+ ),
102
+ ]
103
+
104
+
105
+ # DO NOT MODIFY -- This file is generated by type_spec
106
+ @serial_class(
107
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.UpsertArgsParameters",
108
+ parse_require={"kind"},
109
+ )
110
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
111
+ class UpsertArgsParameters:
112
+ condition_parameters: list[ConditionParameter]
113
+ kind: typing.Literal["condition_parameters"] = "condition_parameters"
114
+ name: str | None = None
115
+ existing_condition_match_key: identifier_t.IdentifierKey | None = None
116
+
117
+
118
+ # DO NOT MODIFY -- This file is generated by type_spec
119
+ @serial_class(
120
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.UpsertArgsOutputConditions",
121
+ parse_require={"kind"},
122
+ )
123
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
124
+ class UpsertArgsOutputConditions:
125
+ output_condition_keys: list[identifier_t.IdentifierKey]
126
+ kind: typing.Literal["output_conditions"] = "output_conditions"
127
+ name: str | None = None
128
+ existing_condition_match_key: identifier_t.IdentifierKey | None = None
129
+
130
+
131
+ # DO NOT MODIFY -- This file is generated by type_spec
132
+ UpsertArgs = typing.Annotated[
133
+ UpsertArgsParameters | UpsertArgsOutputConditions,
134
+ serial_union_annotation(
135
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.UpsertArgs",
136
+ discriminator="kind",
137
+ discriminator_map={
138
+ "condition_parameters": UpsertArgsParameters,
139
+ "output_conditions": UpsertArgsOutputConditions,
140
+ },
141
+ ),
142
+ ]
143
+
144
+
145
+ # DO NOT MODIFY -- This file is generated by type_spec
146
+ @serial_class(
147
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.Arguments",
148
+ )
149
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
150
+ class Arguments:
151
+ upserts: list[UpsertArgs]
152
+
153
+
154
+ # DO NOT MODIFY -- This file is generated by type_spec
155
+ @serial_class(
156
+ named_type_path="sdk.api.condition_parameters.upsert_condition_matches.Data",
157
+ )
158
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
159
+ class Data:
160
+ results: list[async_batch_t.AsyncBatchActionReturn]
161
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -43,11 +43,12 @@ class Arguments:
43
43
  class InputToCreate:
44
44
  name: str
45
45
  material_family_ids: list[base_t.ObjectId]
46
- quantity_type: typing.Literal[inputs_t.IngredientQuantityType.NUMERIC] | typing.Literal[inputs_t.IngredientQuantityType.TEXT]
46
+ quantity_type: typing.Literal[inputs_t.IngredientQuantityType.NUMERIC] | typing.Literal[inputs_t.IngredientQuantityType.TEXT] | typing.Literal[inputs_t.IngredientQuantityType.ID] | typing.Literal[inputs_t.IngredientQuantityType.IDS]
47
47
  type: typing.Literal[inputs_t.IngredientType.INGREDIENT] | typing.Literal[inputs_t.IngredientType.PROCESS_PARAMETER]
48
48
  attributes: list[input_attributes_t.InputAttributeValue] | None = None
49
49
  category_id: base_t.ObjectId | None = None
50
50
  field_values: list[field_values_t.FieldRefNameValue] | None = None
51
+ id_source: str | None = None
51
52
 
52
53
 
53
54
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -120,6 +120,7 @@ import uncountable.types.api.material_families.update_entity_material_families a
120
120
  import uncountable.types.api.outputs.update_output_condition_parameter as update_output_condition_parameter_t
121
121
  from uncountable.types import uploader_t
122
122
  import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
123
+ import uncountable.types.api.condition_parameters.upsert_condition_matches as upsert_condition_matches_t
123
124
  import uncountable.types.api.field_options.upsert_field_options as upsert_field_options_t
124
125
  import uncountable.types.api.recipes.upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
125
126
  import uncountable.types.api.recipes.upsert_step_relationships as upsert_step_relationships_t
@@ -2457,6 +2458,26 @@ class ClientMethods(ABC):
2457
2458
  )
2458
2459
  return self.do_request(api_request=api_request, return_type=upsert_condition_match_t.Data)
2459
2460
 
2461
+ def upsert_condition_matches(
2462
+ self,
2463
+ *,
2464
+ upserts: list[upsert_condition_matches_t.UpsertArgs],
2465
+ _request_options: client_config_t.RequestOptions | None = None,
2466
+ ) -> upsert_condition_matches_t.Data:
2467
+ """Bulk variant of upsert_condition_match. Accepts a list of upsert arguments and applies them via a single batched database round-trip per bulk operation (insert, update, delete) through the shared upsert_condition_matches helper. Returns one AsyncBatchActionReturn per input in the same order.
2468
+
2469
+ """
2470
+ args = upsert_condition_matches_t.Arguments(
2471
+ upserts=upserts,
2472
+ )
2473
+ api_request = APIRequest(
2474
+ method=upsert_condition_matches_t.ENDPOINT_METHOD,
2475
+ endpoint=upsert_condition_matches_t.ENDPOINT_PATH,
2476
+ args=args,
2477
+ request_options=_request_options,
2478
+ )
2479
+ return self.do_request(api_request=api_request, return_type=upsert_condition_matches_t.Data)
2480
+
2460
2481
  def upsert_field_options(
2461
2482
  self,
2462
2483
  *,
@@ -0,0 +1,7 @@
1
+ # ruff: noqa: E402 Q003
2
+ # fmt: off
3
+ # isort: skip_file
4
+ # DO NOT MODIFY -- This file is generated by type_spec
5
+ # Kept only for SDK backwards compatibility
6
+ from .condition_match_t import MatchType as MatchType
7
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,22 @@
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
+ from enum import StrEnum
10
+
11
+ __all__: list[str] = [
12
+ "MatchType",
13
+ ]
14
+
15
+
16
+ # DO NOT MODIFY -- This file is generated by type_spec
17
+ class MatchType(StrEnum):
18
+ ALL = "all"
19
+ EQ = "eq"
20
+ EQCATEGORICAL = "eqCategorical"
21
+ RANGE = "range"
22
+ # DO NOT MODIFY -- This file is generated by type_spec