UncountablePythonSDK 0.0.52__py3-none-any.whl → 0.0.131__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of UncountablePythonSDK might be problematic. Click here for more details.

Files changed (316) hide show
  1. docs/conf.py +54 -7
  2. docs/index.md +107 -4
  3. docs/integration_examples/create_ingredient.md +43 -0
  4. docs/integration_examples/create_output.md +56 -0
  5. docs/integration_examples/index.md +6 -0
  6. docs/justfile +2 -2
  7. docs/requirements.txt +6 -4
  8. examples/async_batch.py +3 -3
  9. examples/basic_auth.py +7 -0
  10. examples/create_entity.py +3 -1
  11. examples/create_ingredient_sdk.py +34 -0
  12. examples/download_files.py +26 -0
  13. examples/edit_recipe_inputs.py +4 -2
  14. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  15. examples/integration-server/jobs/materials_auto/example_cron.py +21 -0
  16. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  17. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  18. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  19. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  20. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  21. examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
  22. examples/integration-server/jobs/materials_auto/profile.yaml +104 -0
  23. examples/integration-server/pyproject.toml +224 -0
  24. examples/invoke_uploader.py +4 -1
  25. examples/oauth.py +7 -0
  26. examples/set_recipe_metadata_file.py +40 -0
  27. examples/set_recipe_output_file_sdk.py +26 -0
  28. examples/upload_files.py +1 -2
  29. pkgs/argument_parser/__init__.py +9 -0
  30. pkgs/argument_parser/_is_namedtuple.py +3 -0
  31. pkgs/argument_parser/argument_parser.py +217 -70
  32. pkgs/filesystem_utils/__init__.py +1 -0
  33. pkgs/filesystem_utils/_blob_session.py +144 -0
  34. pkgs/filesystem_utils/_gdrive_session.py +10 -7
  35. pkgs/filesystem_utils/_s3_session.py +15 -13
  36. pkgs/filesystem_utils/_sftp_session.py +11 -7
  37. pkgs/filesystem_utils/file_type_utils.py +30 -10
  38. pkgs/py.typed +0 -0
  39. pkgs/serialization/__init__.py +7 -2
  40. pkgs/serialization/annotation.py +64 -0
  41. pkgs/serialization/missing_sentry.py +1 -1
  42. pkgs/serialization/opaque_key.py +1 -1
  43. pkgs/serialization/serial_alias.py +47 -0
  44. pkgs/serialization/serial_class.py +47 -26
  45. pkgs/serialization/serial_generic.py +16 -0
  46. pkgs/serialization/serial_union.py +17 -14
  47. pkgs/serialization/yaml.py +4 -1
  48. pkgs/serialization_util/__init__.py +6 -0
  49. pkgs/serialization_util/dataclasses.py +14 -0
  50. pkgs/serialization_util/serialization_helpers.py +15 -5
  51. pkgs/type_spec/actions_registry/__main__.py +0 -4
  52. pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
  53. pkgs/type_spec/builder.py +354 -119
  54. pkgs/type_spec/builder_types.py +9 -0
  55. pkgs/type_spec/config.py +51 -11
  56. pkgs/type_spec/cross_output_links.py +99 -0
  57. pkgs/type_spec/emit_io_ts.py +1 -1
  58. pkgs/type_spec/emit_open_api.py +127 -36
  59. pkgs/type_spec/emit_open_api_util.py +5 -6
  60. pkgs/type_spec/emit_python.py +329 -121
  61. pkgs/type_spec/emit_typescript.py +117 -256
  62. pkgs/type_spec/emit_typescript_util.py +291 -2
  63. pkgs/type_spec/load_types.py +18 -4
  64. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  65. pkgs/type_spec/open_api_util.py +29 -4
  66. pkgs/type_spec/parts/base.py.prepart +13 -10
  67. pkgs/type_spec/parts/base.ts.prepart +4 -0
  68. pkgs/type_spec/type_info/__main__.py +3 -1
  69. pkgs/type_spec/type_info/emit_type_info.py +124 -29
  70. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  71. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  72. pkgs/type_spec/util.py +4 -4
  73. pkgs/type_spec/value_spec/__main__.py +26 -9
  74. pkgs/type_spec/value_spec/convert_type.py +21 -1
  75. pkgs/type_spec/value_spec/emit_python.py +25 -7
  76. pkgs/type_spec/value_spec/types.py +1 -1
  77. uncountable/core/async_batch.py +1 -1
  78. uncountable/core/client.py +142 -39
  79. uncountable/core/environment.py +41 -0
  80. uncountable/core/file_upload.py +52 -18
  81. uncountable/integration/cli.py +142 -0
  82. uncountable/integration/construct_client.py +8 -8
  83. uncountable/integration/cron.py +11 -37
  84. uncountable/integration/db/connect.py +12 -2
  85. uncountable/integration/db/session.py +25 -0
  86. uncountable/integration/entrypoint.py +8 -37
  87. uncountable/integration/executors/executors.py +125 -2
  88. uncountable/integration/executors/generic_upload_executor.py +87 -29
  89. uncountable/integration/executors/script_executor.py +3 -3
  90. uncountable/integration/http_server/__init__.py +5 -0
  91. uncountable/integration/http_server/types.py +69 -0
  92. uncountable/integration/job.py +242 -12
  93. uncountable/integration/queue_runner/__init__.py +0 -0
  94. uncountable/integration/queue_runner/command_server/__init__.py +28 -0
  95. uncountable/integration/queue_runner/command_server/command_client.py +133 -0
  96. uncountable/integration/queue_runner/command_server/command_server.py +142 -0
  97. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  98. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  99. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +58 -0
  100. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +57 -0
  101. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +114 -0
  102. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +264 -0
  103. uncountable/integration/queue_runner/command_server/types.py +75 -0
  104. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  105. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +250 -0
  106. uncountable/integration/queue_runner/datastore/interface.py +29 -0
  107. uncountable/integration/queue_runner/datastore/model.py +24 -0
  108. uncountable/integration/queue_runner/job_scheduler.py +200 -0
  109. uncountable/integration/queue_runner/queue_runner.py +34 -0
  110. uncountable/integration/queue_runner/types.py +7 -0
  111. uncountable/integration/queue_runner/worker.py +116 -0
  112. uncountable/integration/scan_profiles.py +67 -0
  113. uncountable/integration/scheduler.py +199 -0
  114. uncountable/integration/secret_retrieval/retrieve_secret.py +26 -4
  115. uncountable/integration/server.py +94 -69
  116. uncountable/integration/telemetry.py +150 -34
  117. uncountable/integration/webhook_server/entrypoint.py +97 -0
  118. uncountable/types/__init__.py +78 -1
  119. uncountable/types/api/batch/execute_batch.py +13 -6
  120. uncountable/types/api/batch/execute_batch_load_async.py +9 -3
  121. uncountable/types/api/chemical/convert_chemical_formats.py +17 -5
  122. uncountable/types/api/condition_parameters/__init__.py +1 -0
  123. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  124. uncountable/types/api/entity/create_entities.py +19 -7
  125. uncountable/types/api/entity/create_entity.py +17 -8
  126. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  127. uncountable/types/api/entity/export_entities.py +59 -0
  128. uncountable/types/api/entity/get_entities_data.py +13 -4
  129. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  130. uncountable/types/api/entity/list_aggregate.py +79 -0
  131. uncountable/types/api/entity/list_entities.py +42 -10
  132. uncountable/types/api/entity/lock_entity.py +11 -4
  133. uncountable/types/api/entity/lookup_entity.py +116 -0
  134. uncountable/types/api/entity/resolve_entity_ids.py +15 -6
  135. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  136. uncountable/types/api/entity/set_values.py +10 -3
  137. uncountable/types/api/entity/transition_entity_phase.py +22 -7
  138. uncountable/types/api/entity/unlock_entity.py +10 -3
  139. uncountable/types/api/equipment/associate_equipment_input.py +9 -3
  140. uncountable/types/api/field_options/upsert_field_options.py +17 -7
  141. uncountable/types/api/files/__init__.py +1 -0
  142. uncountable/types/api/files/download_file.py +77 -0
  143. uncountable/types/api/id_source/list_id_source.py +16 -7
  144. uncountable/types/api/id_source/match_id_source.py +14 -5
  145. uncountable/types/api/input_groups/get_input_group_names.py +13 -4
  146. uncountable/types/api/inputs/create_inputs.py +23 -9
  147. uncountable/types/api/inputs/get_input_data.py +30 -12
  148. uncountable/types/api/inputs/get_input_names.py +16 -7
  149. uncountable/types/api/inputs/get_inputs_data.py +25 -7
  150. uncountable/types/api/inputs/set_input_attribute_values.py +12 -6
  151. uncountable/types/api/inputs/set_input_category.py +12 -5
  152. uncountable/types/api/inputs/set_input_subcategories.py +10 -3
  153. uncountable/types/api/inputs/set_intermediate_type.py +11 -4
  154. uncountable/types/api/integrations/__init__.py +1 -0
  155. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  156. uncountable/types/api/integrations/push_notification.py +49 -0
  157. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  158. uncountable/types/api/listing/__init__.py +1 -0
  159. uncountable/types/api/listing/fetch_listing.py +58 -0
  160. uncountable/types/api/material_families/update_entity_material_families.py +10 -4
  161. uncountable/types/api/notebooks/__init__.py +1 -0
  162. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  163. uncountable/types/api/outputs/get_output_data.py +28 -13
  164. uncountable/types/api/outputs/get_output_names.py +15 -6
  165. uncountable/types/api/outputs/get_output_organization.py +173 -0
  166. uncountable/types/api/outputs/resolve_output_conditions.py +20 -8
  167. uncountable/types/api/permissions/set_core_permissions.py +26 -10
  168. uncountable/types/api/project/get_projects.py +16 -7
  169. uncountable/types/api/project/get_projects_data.py +17 -8
  170. uncountable/types/api/recipe_links/create_recipe_link.py +12 -5
  171. uncountable/types/api/recipe_links/remove_recipe_link.py +11 -4
  172. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +16 -7
  173. uncountable/types/api/recipes/add_recipe_to_project.py +10 -3
  174. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  175. uncountable/types/api/recipes/archive_recipes.py +11 -4
  176. uncountable/types/api/recipes/associate_recipe_as_input.py +12 -5
  177. uncountable/types/api/recipes/associate_recipe_as_lot.py +10 -3
  178. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  179. uncountable/types/api/recipes/create_mix_order.py +44 -0
  180. uncountable/types/api/recipes/create_recipe.py +15 -9
  181. uncountable/types/api/recipes/create_recipes.py +21 -9
  182. uncountable/types/api/recipes/disassociate_recipe_as_input.py +10 -3
  183. uncountable/types/api/recipes/edit_recipe_inputs.py +134 -22
  184. uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
  185. uncountable/types/api/recipes/get_curve.py +11 -5
  186. uncountable/types/api/recipes/get_recipe_calculations.py +13 -7
  187. uncountable/types/api/recipes/get_recipe_links.py +10 -4
  188. uncountable/types/api/recipes/get_recipe_names.py +13 -4
  189. uncountable/types/api/recipes/get_recipe_output_metadata.py +12 -6
  190. uncountable/types/api/recipes/get_recipes_data.py +87 -33
  191. uncountable/types/api/recipes/lock_recipes.py +19 -8
  192. uncountable/types/api/recipes/remove_recipe_from_project.py +10 -3
  193. uncountable/types/api/recipes/set_recipe_inputs.py +16 -10
  194. uncountable/types/api/recipes/set_recipe_metadata.py +10 -3
  195. uncountable/types/api/recipes/set_recipe_output_annotations.py +24 -12
  196. uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
  197. uncountable/types/api/recipes/set_recipe_outputs.py +35 -12
  198. uncountable/types/api/recipes/set_recipe_tags.py +26 -9
  199. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  200. uncountable/types/api/recipes/unarchive_recipes.py +10 -3
  201. uncountable/types/api/recipes/unlock_recipes.py +14 -6
  202. uncountable/types/api/runsheet/__init__.py +1 -0
  203. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  204. uncountable/types/api/triggers/run_trigger.py +11 -4
  205. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  206. uncountable/types/api/uploader/invoke_uploader.py +13 -6
  207. uncountable/types/api/user/__init__.py +1 -0
  208. uncountable/types/api/user/get_current_user_info.py +40 -0
  209. uncountable/types/async_batch.py +2 -1
  210. uncountable/types/async_batch_processor.py +618 -18
  211. uncountable/types/async_batch_t.py +54 -7
  212. uncountable/types/async_jobs.py +8 -0
  213. uncountable/types/async_jobs_t.py +52 -0
  214. uncountable/types/auth_retrieval.py +11 -0
  215. uncountable/types/auth_retrieval_t.py +75 -0
  216. uncountable/types/base.py +0 -1
  217. uncountable/types/base_t.py +13 -11
  218. uncountable/types/calculations.py +0 -1
  219. uncountable/types/calculations_t.py +5 -2
  220. uncountable/types/chemical_structure.py +0 -1
  221. uncountable/types/chemical_structure_t.py +6 -5
  222. uncountable/types/client_base.py +751 -70
  223. uncountable/types/client_config.py +1 -1
  224. uncountable/types/client_config_t.py +17 -3
  225. uncountable/types/curves.py +0 -1
  226. uncountable/types/curves_t.py +10 -7
  227. uncountable/types/data.py +12 -0
  228. uncountable/types/data_t.py +103 -0
  229. uncountable/types/entity.py +4 -1
  230. uncountable/types/entity_t.py +125 -7
  231. uncountable/types/experiment_groups.py +0 -1
  232. uncountable/types/experiment_groups_t.py +5 -2
  233. uncountable/types/exports.py +8 -0
  234. uncountable/types/exports_t.py +34 -0
  235. uncountable/types/field_values.py +19 -1
  236. uncountable/types/field_values_t.py +246 -9
  237. uncountable/types/fields.py +0 -1
  238. uncountable/types/fields_t.py +5 -2
  239. uncountable/types/generic_upload.py +6 -1
  240. uncountable/types/generic_upload_t.py +88 -9
  241. uncountable/types/id_source.py +0 -1
  242. uncountable/types/id_source_t.py +26 -7
  243. uncountable/types/identifier.py +0 -1
  244. uncountable/types/identifier_t.py +13 -5
  245. uncountable/types/input_attributes.py +0 -1
  246. uncountable/types/input_attributes_t.py +4 -4
  247. uncountable/types/inputs.py +1 -1
  248. uncountable/types/inputs_t.py +24 -4
  249. uncountable/types/integration_server.py +8 -0
  250. uncountable/types/integration_server_t.py +46 -0
  251. uncountable/types/integration_session.py +10 -0
  252. uncountable/types/integration_session_t.py +60 -0
  253. uncountable/types/integrations.py +10 -0
  254. uncountable/types/integrations_t.py +62 -0
  255. uncountable/types/job_definition.py +4 -6
  256. uncountable/types/job_definition_t.py +96 -65
  257. uncountable/types/listing.py +9 -0
  258. uncountable/types/listing_t.py +51 -0
  259. uncountable/types/notices.py +8 -0
  260. uncountable/types/notices_t.py +37 -0
  261. uncountable/types/notifications.py +11 -0
  262. uncountable/types/notifications_t.py +74 -0
  263. uncountable/types/outputs.py +0 -1
  264. uncountable/types/outputs_t.py +6 -3
  265. uncountable/types/overrides.py +9 -0
  266. uncountable/types/overrides_t.py +49 -0
  267. uncountable/types/permissions.py +0 -1
  268. uncountable/types/permissions_t.py +1 -2
  269. uncountable/types/phases.py +0 -1
  270. uncountable/types/phases_t.py +5 -2
  271. uncountable/types/post_base.py +0 -1
  272. uncountable/types/post_base_t.py +1 -2
  273. uncountable/types/queued_job.py +17 -0
  274. uncountable/types/queued_job_t.py +140 -0
  275. uncountable/types/recipe_identifiers.py +0 -1
  276. uncountable/types/recipe_identifiers_t.py +21 -8
  277. uncountable/types/recipe_inputs.py +0 -1
  278. uncountable/types/recipe_inputs_t.py +1 -2
  279. uncountable/types/recipe_links.py +0 -1
  280. uncountable/types/recipe_links_t.py +7 -4
  281. uncountable/types/recipe_metadata.py +0 -1
  282. uncountable/types/recipe_metadata_t.py +14 -9
  283. uncountable/types/recipe_output_metadata.py +0 -1
  284. uncountable/types/recipe_output_metadata_t.py +5 -2
  285. uncountable/types/recipe_tags.py +0 -1
  286. uncountable/types/recipe_tags_t.py +5 -2
  287. uncountable/types/recipe_workflow_steps.py +0 -1
  288. uncountable/types/recipe_workflow_steps_t.py +14 -7
  289. uncountable/types/recipes.py +0 -1
  290. uncountable/types/recipes_t.py +6 -2
  291. uncountable/types/response.py +0 -1
  292. uncountable/types/response_t.py +3 -2
  293. uncountable/types/secret_retrieval.py +0 -1
  294. uncountable/types/secret_retrieval_t.py +13 -7
  295. uncountable/types/sockets.py +20 -0
  296. uncountable/types/sockets_t.py +169 -0
  297. uncountable/types/structured_filters.py +25 -0
  298. uncountable/types/structured_filters_t.py +248 -0
  299. uncountable/types/units.py +0 -1
  300. uncountable/types/units_t.py +5 -2
  301. uncountable/types/uploader.py +24 -0
  302. uncountable/types/uploader_t.py +222 -0
  303. uncountable/types/users.py +0 -1
  304. uncountable/types/users_t.py +5 -2
  305. uncountable/types/webhook_job.py +9 -0
  306. uncountable/types/webhook_job_t.py +48 -0
  307. uncountable/types/workflows.py +0 -1
  308. uncountable/types/workflows_t.py +10 -4
  309. uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
  310. uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
  311. {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
  312. UncountablePythonSDK-0.0.52.dist-info/METADATA +0 -56
  313. UncountablePythonSDK-0.0.52.dist-info/RECORD +0 -246
  314. docs/quickstart.md +0 -19
  315. uncountable/core/version.py +0 -11
  316. {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -9,19 +8,41 @@ import typing # noqa: F401
9
8
  import datetime # noqa: F401
10
9
  from decimal import Decimal # noqa: F401
11
10
  import uncountable.types.api.equipment.associate_equipment_input as associate_equipment_input_t
11
+ import uncountable.types.api.recipes.associate_recipe_as_input as associate_recipe_as_input_t
12
+ import uncountable.types.api.recipes.associate_recipe_as_lot as associate_recipe_as_lot_t
12
13
  from uncountable.types import async_batch_t
13
14
  from uncountable.types import base_t
15
+ import uncountable.types.api.recipes.clear_recipe_outputs as clear_recipe_outputs_t
16
+ from uncountable.types import client_config_t
17
+ import uncountable.types.api.uploader.complete_async_parse as complete_async_parse_t
18
+ import uncountable.types.api.runsheet.complete_async_upload as complete_async_upload_t
19
+ import uncountable.types.api.recipes.create_mix_order as create_mix_order_t
20
+ import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
14
21
  import uncountable.types.api.recipes.create_recipe as create_recipe_t
15
22
  import uncountable.types.api.recipes.edit_recipe_inputs as edit_recipe_inputs_t
23
+ from uncountable.types import entity_t
24
+ from uncountable.types import field_values_t
25
+ from uncountable.types import generic_upload_t
26
+ import uncountable.types.api.entity.grant_entity_permissions as grant_entity_permissions_t
16
27
  from uncountable.types import identifier_t
17
28
  import uncountable.types.api.uploader.invoke_uploader as invoke_uploader_t
29
+ import uncountable.types.api.recipes.lock_recipes as lock_recipes_t
30
+ import uncountable.types.api.entity.lookup_entity as lookup_entity_t
31
+ from uncountable.types import notices_t
32
+ from uncountable.types import notifications_t
33
+ import uncountable.types.api.integrations.push_notification as push_notification_t
18
34
  from uncountable.types import recipe_identifiers_t
19
35
  from uncountable.types import recipe_metadata_t
20
36
  from uncountable.types import recipe_workflow_steps_t
37
+ import uncountable.types.api.entity.set_entity_field_values as set_entity_field_values_t
21
38
  import uncountable.types.api.recipes.set_recipe_metadata as set_recipe_metadata_t
39
+ import uncountable.types.api.entity.transition_entity_phase as transition_entity_phase_t
40
+ import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
41
+ from uncountable.types import uploader_t
42
+ import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
22
43
  import uuid
23
44
  from abc import ABC, abstractmethod
24
- from pkgs.serialization_util.serialization_helpers import serialize_for_api
45
+ from pkgs.serialization_util import serialize_for_api
25
46
 
26
47
 
27
48
  class AsyncBatchProcessorBase(ABC):
@@ -38,7 +59,8 @@ class AsyncBatchProcessorBase(ABC):
38
59
  *,
39
60
  equipment_key: identifier_t.IdentifierKey,
40
61
  material_family_ids: list[base_t.ObjectId],
41
- depends_on: typing.Optional[list[str]] = None,
62
+ depends_on: list[str] | None = None,
63
+ _request_options: client_config_t.RequestOptions | None = None,
42
64
  ) -> async_batch_t.QueuedAsyncBatchRequest:
43
65
  """Create or return the input association for equipment
44
66
 
@@ -68,18 +90,272 @@ class AsyncBatchProcessorBase(ABC):
68
90
  batch_reference=req.batch_reference,
69
91
  )
70
92
 
93
+ def associate_recipe_as_input(
94
+ self,
95
+ *,
96
+ recipe_key: identifier_t.IdentifierKey,
97
+ input_key: identifier_t.IdentifierKey | None = None,
98
+ show_in_listings: bool | None = None,
99
+ depends_on: list[str] | None = None,
100
+ _request_options: client_config_t.RequestOptions | None = None,
101
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
102
+ """Create or return the input association for a recipe
103
+
104
+ :param recipe_key: Identifier for the recipe
105
+ :param input_key: Identifier for an input to use for the association. Optionally supplied. If not supplied, one is created
106
+ :param show_in_listings: After associating the input should it be present in listings
107
+ :param depends_on: A list of batch reference keys to process before processing this request
108
+ """
109
+ args = associate_recipe_as_input_t.Arguments(
110
+ recipe_key=recipe_key,
111
+ input_key=input_key,
112
+ show_in_listings=show_in_listings,
113
+ )
114
+ json_data = serialize_for_api(args)
115
+
116
+ batch_reference = str(uuid.uuid4())
117
+
118
+ req = async_batch_t.AsyncBatchRequest(
119
+ path=async_batch_t.AsyncBatchRequestPath.ASSOCIATE_RECIPE_AS_INPUT,
120
+ data=json_data,
121
+ depends_on=depends_on,
122
+ batch_reference=batch_reference,
123
+ )
124
+
125
+ self._enqueue(req)
126
+
127
+ return async_batch_t.QueuedAsyncBatchRequest(
128
+ path=req.path,
129
+ batch_reference=req.batch_reference,
130
+ )
131
+
132
+ def associate_recipe_as_lot(
133
+ self,
134
+ *,
135
+ recipe_key: identifier_t.IdentifierKey,
136
+ ingredient_key: identifier_t.IdentifierKey,
137
+ depends_on: list[str] | None = None,
138
+ _request_options: client_config_t.RequestOptions | None = None,
139
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
140
+ """Create a new lot association for the provided recipe with the provided ingredient
141
+
142
+ :param recipe_key: Identifier for the recipe
143
+ :param ingredient_key: Identifier for the ingredient
144
+ :param depends_on: A list of batch reference keys to process before processing this request
145
+ """
146
+ args = associate_recipe_as_lot_t.Arguments(
147
+ recipe_key=recipe_key,
148
+ ingredient_key=ingredient_key,
149
+ )
150
+ json_data = serialize_for_api(args)
151
+
152
+ batch_reference = str(uuid.uuid4())
153
+
154
+ req = async_batch_t.AsyncBatchRequest(
155
+ path=async_batch_t.AsyncBatchRequestPath.ASSOCIATE_RECIPE_AS_LOT,
156
+ data=json_data,
157
+ depends_on=depends_on,
158
+ batch_reference=batch_reference,
159
+ )
160
+
161
+ self._enqueue(req)
162
+
163
+ return async_batch_t.QueuedAsyncBatchRequest(
164
+ path=req.path,
165
+ batch_reference=req.batch_reference,
166
+ )
167
+
168
+ def clear_recipe_outputs(
169
+ self,
170
+ *,
171
+ recipe_key: identifier_t.IdentifierKey,
172
+ depends_on: list[str] | None = None,
173
+ _request_options: client_config_t.RequestOptions | None = None,
174
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
175
+ """Clears all output values & output metadata for a given recipe
176
+
177
+ :param recipe_key: The identifier of the recipe
178
+ :param depends_on: A list of batch reference keys to process before processing this request
179
+ """
180
+ args = clear_recipe_outputs_t.Arguments(
181
+ recipe_key=recipe_key,
182
+ )
183
+ json_data = serialize_for_api(args)
184
+
185
+ batch_reference = str(uuid.uuid4())
186
+
187
+ req = async_batch_t.AsyncBatchRequest(
188
+ path=async_batch_t.AsyncBatchRequestPath.CLEAR_RECIPE_OUTPUTS,
189
+ data=json_data,
190
+ depends_on=depends_on,
191
+ batch_reference=batch_reference,
192
+ )
193
+
194
+ self._enqueue(req)
195
+
196
+ return async_batch_t.QueuedAsyncBatchRequest(
197
+ path=req.path,
198
+ batch_reference=req.batch_reference,
199
+ )
200
+
201
+ def complete_async_parse(
202
+ self,
203
+ *,
204
+ parsed_file_data: list[uploader_t.ParsedFileData],
205
+ async_job_key: identifier_t.IdentifierKey,
206
+ upload_destination: generic_upload_t.UploadDestinationRecipe,
207
+ depends_on: list[str] | None = None,
208
+ _request_options: client_config_t.RequestOptions | None = None,
209
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
210
+ """Parses uploaded files asynchronously
211
+
212
+ :param depends_on: A list of batch reference keys to process before processing this request
213
+ """
214
+ args = complete_async_parse_t.Arguments(
215
+ parsed_file_data=parsed_file_data,
216
+ async_job_key=async_job_key,
217
+ upload_destination=upload_destination,
218
+ )
219
+ json_data = serialize_for_api(args)
220
+
221
+ batch_reference = str(uuid.uuid4())
222
+
223
+ req = async_batch_t.AsyncBatchRequest(
224
+ path=async_batch_t.AsyncBatchRequestPath.COMPLETE_ASYNC_PARSE,
225
+ data=json_data,
226
+ depends_on=depends_on,
227
+ batch_reference=batch_reference,
228
+ )
229
+
230
+ self._enqueue(req)
231
+
232
+ return async_batch_t.QueuedAsyncBatchRequest(
233
+ path=req.path,
234
+ batch_reference=req.batch_reference,
235
+ )
236
+
237
+ def complete_async_upload(
238
+ self,
239
+ *,
240
+ async_job_id: base_t.ObjectId,
241
+ file_id: base_t.ObjectId,
242
+ depends_on: list[str] | None = None,
243
+ _request_options: client_config_t.RequestOptions | None = None,
244
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
245
+ """Processes an file id with a given async job id to be uploaded asynchronously
246
+
247
+ :param depends_on: A list of batch reference keys to process before processing this request
248
+ """
249
+ args = complete_async_upload_t.Arguments(
250
+ async_job_id=async_job_id,
251
+ file_id=file_id,
252
+ )
253
+ json_data = serialize_for_api(args)
254
+
255
+ batch_reference = str(uuid.uuid4())
256
+
257
+ req = async_batch_t.AsyncBatchRequest(
258
+ path=async_batch_t.AsyncBatchRequestPath.COMPLETE_ASYNC_UPLOAD,
259
+ data=json_data,
260
+ depends_on=depends_on,
261
+ batch_reference=batch_reference,
262
+ )
263
+
264
+ self._enqueue(req)
265
+
266
+ return async_batch_t.QueuedAsyncBatchRequest(
267
+ path=req.path,
268
+ batch_reference=req.batch_reference,
269
+ )
270
+
271
+ def create_mix_order(
272
+ self,
273
+ *,
274
+ recipe_key: identifier_t.IdentifierKey,
275
+ recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
276
+ depends_on: list[str] | None = None,
277
+ _request_options: client_config_t.RequestOptions | None = None,
278
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
279
+ """Creates mix order on a recipe workflow step
280
+
281
+ :param depends_on: A list of batch reference keys to process before processing this request
282
+ """
283
+ args = create_mix_order_t.Arguments(
284
+ recipe_key=recipe_key,
285
+ recipe_workflow_step_identifier=recipe_workflow_step_identifier,
286
+ )
287
+ json_data = serialize_for_api(args)
288
+
289
+ batch_reference = str(uuid.uuid4())
290
+
291
+ req = async_batch_t.AsyncBatchRequest(
292
+ path=async_batch_t.AsyncBatchRequestPath.CREATE_MIX_ORDER,
293
+ data=json_data,
294
+ depends_on=depends_on,
295
+ batch_reference=batch_reference,
296
+ )
297
+
298
+ self._enqueue(req)
299
+
300
+ return async_batch_t.QueuedAsyncBatchRequest(
301
+ path=req.path,
302
+ batch_reference=req.batch_reference,
303
+ )
304
+
305
+ def create_or_update_entity(
306
+ self,
307
+ *,
308
+ entity_type: entity_t.EntityType,
309
+ definition_key: identifier_t.IdentifierKey,
310
+ field_values: list[field_values_t.FieldArgumentValue],
311
+ entity_key: identifier_t.IdentifierKey | None = None,
312
+ on_create_init_field_values: list[field_values_t.FieldArgumentValue] | None = None,
313
+ depends_on: list[str] | None = None,
314
+ _request_options: client_config_t.RequestOptions | None = None,
315
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
316
+ """Creates or updates field values for an entity
317
+
318
+ :param on_create_init_field_values: Field values set only when the entity is created (will be ignored if entity already exists)
319
+ :param depends_on: A list of batch reference keys to process before processing this request
320
+ """
321
+ args = create_or_update_entity_t.Arguments(
322
+ entity_key=entity_key,
323
+ entity_type=entity_type,
324
+ definition_key=definition_key,
325
+ field_values=field_values,
326
+ on_create_init_field_values=on_create_init_field_values,
327
+ )
328
+ json_data = serialize_for_api(args)
329
+
330
+ batch_reference = str(uuid.uuid4())
331
+
332
+ req = async_batch_t.AsyncBatchRequest(
333
+ path=async_batch_t.AsyncBatchRequestPath.CREATE_OR_UPDATE_ENTITY,
334
+ data=json_data,
335
+ depends_on=depends_on,
336
+ batch_reference=batch_reference,
337
+ )
338
+
339
+ self._enqueue(req)
340
+
341
+ return async_batch_t.QueuedAsyncBatchRequest(
342
+ path=req.path,
343
+ batch_reference=req.batch_reference,
344
+ )
345
+
71
346
  def create_recipe(
72
347
  self,
73
348
  *,
74
349
  material_family_id: base_t.ObjectId,
75
350
  workflow_id: base_t.ObjectId,
76
- name: typing.Optional[str] = None,
77
- project_id: typing.Optional[base_t.ObjectId] = None,
78
- workflow_variant_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None,
79
- recipe_metadata: typing.Optional[list[recipe_metadata_t.MetadataValue]] = None,
80
- identifiers: typing.Optional[recipe_identifiers_t.RecipeIdentifiers] = None,
81
- definition_key: typing.Optional[identifier_t.IdentifierKey] = None,
82
- depends_on: typing.Optional[list[str]] = None,
351
+ name: str | None = None,
352
+ project_id: base_t.ObjectId | None = None,
353
+ workflow_variant_id: base_t.ObjectId | None = None,
354
+ recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
355
+ identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
356
+ definition_key: identifier_t.IdentifierKey | None = None,
357
+ depends_on: list[str] | None = None,
358
+ _request_options: client_config_t.RequestOptions | None = None,
83
359
  ) -> async_batch_t.QueuedAsyncBatchRequest:
84
360
  """Returns the id of the recipe being created.
85
361
 
@@ -127,7 +403,8 @@ class AsyncBatchProcessorBase(ABC):
127
403
  recipe_key: identifier_t.IdentifierKey,
128
404
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
129
405
  edits: list[edit_recipe_inputs_t.RecipeInputEdit],
130
- depends_on: typing.Optional[list[str]] = None,
406
+ depends_on: list[str] | None = None,
407
+ _request_options: client_config_t.RequestOptions | None = None,
131
408
  ) -> async_batch_t.QueuedAsyncBatchRequest:
132
409
  """Clear, update, or add inputs on a recipe
133
410
 
@@ -157,24 +434,68 @@ class AsyncBatchProcessorBase(ABC):
157
434
  batch_reference=req.batch_reference,
158
435
  )
159
436
 
437
+ def grant_entity_permissions(
438
+ self,
439
+ *,
440
+ entity_type: entity_t.LimitedEntityType,
441
+ entity_key: identifier_t.IdentifierKey,
442
+ permission_types: list[entity_t.GrantableEntityPermissionType],
443
+ user_keys: list[identifier_t.IdentifierKey] | None = None,
444
+ user_group_keys: list[identifier_t.IdentifierKey] | None = None,
445
+ all_users: bool | None = None,
446
+ depends_on: list[str] | None = None,
447
+ _request_options: client_config_t.RequestOptions | None = None,
448
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
449
+ """Grant entity permissions to a list of users or user groups or to all users.
450
+
451
+ :param depends_on: A list of batch reference keys to process before processing this request
452
+ """
453
+ args = grant_entity_permissions_t.Arguments(
454
+ entity_type=entity_type,
455
+ entity_key=entity_key,
456
+ permission_types=permission_types,
457
+ user_keys=user_keys,
458
+ user_group_keys=user_group_keys,
459
+ all_users=all_users,
460
+ )
461
+ json_data = serialize_for_api(args)
462
+
463
+ batch_reference = str(uuid.uuid4())
464
+
465
+ req = async_batch_t.AsyncBatchRequest(
466
+ path=async_batch_t.AsyncBatchRequestPath.GRANT_ENTITY_PERMISSIONS,
467
+ data=json_data,
468
+ depends_on=depends_on,
469
+ batch_reference=batch_reference,
470
+ )
471
+
472
+ self._enqueue(req)
473
+
474
+ return async_batch_t.QueuedAsyncBatchRequest(
475
+ path=req.path,
476
+ batch_reference=req.batch_reference,
477
+ )
478
+
160
479
  def invoke_uploader(
161
480
  self,
162
481
  *,
163
- file_id: base_t.ObjectId,
164
482
  uploader_key: identifier_t.IdentifierKey,
165
- material_family_key: identifier_t.IdentifierKey,
166
- recipe_key: typing.Optional[identifier_t.IdentifierKey] = None,
167
- depends_on: typing.Optional[list[str]] = None,
483
+ destination: generic_upload_t.UploadDestination,
484
+ file_id: base_t.ObjectId | None = None,
485
+ file_ids: list[base_t.ObjectId] | None = None,
486
+ depends_on: list[str] | None = None,
487
+ _request_options: client_config_t.RequestOptions | None = None,
168
488
  ) -> async_batch_t.QueuedAsyncBatchRequest:
169
489
  """Runs a file through an uploader.
170
490
 
491
+ :param file_id: DEPRECATED: use file_ids
171
492
  :param depends_on: A list of batch reference keys to process before processing this request
172
493
  """
173
494
  args = invoke_uploader_t.Arguments(
174
495
  file_id=file_id,
496
+ file_ids=file_ids,
175
497
  uploader_key=uploader_key,
176
- material_family_key=material_family_key,
177
- recipe_key=recipe_key,
498
+ destination=destination,
178
499
  )
179
500
  json_data = serialize_for_api(args)
180
501
 
@@ -194,12 +515,173 @@ class AsyncBatchProcessorBase(ABC):
194
515
  batch_reference=req.batch_reference,
195
516
  )
196
517
 
518
+ def lock_recipes(
519
+ self,
520
+ *,
521
+ type: lock_recipes_t.RecipeLockType = lock_recipes_t.RecipeLockType.ALL,
522
+ recipes: list[identifier_t.IdentifierKey],
523
+ globally_removable: bool,
524
+ lock_samples: bool | None = None,
525
+ comments: str | None = None,
526
+ depends_on: list[str] | None = None,
527
+ _request_options: client_config_t.RequestOptions | None = None,
528
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
529
+ """Lock experiments. Experiments will require unlocking to be editable. Edits to the experiments are blocked while they are locked.
530
+
531
+ :param type: The type of lock to set.
532
+ All = both inputs and measurements are locked.
533
+ Inputs Only = only inputs are locked from editing.
534
+
535
+ :param recipes: The recipes to lock, a maximum of 100 can be sent
536
+ :param globally_removable: If true any user can unlock the experiment. If false the locking user is the only user that can unlock.
537
+ :param lock_samples: Should associated experiment test samples also be locked.
538
+ :param comments: Optional comment describing the purpose of locking
539
+ :param depends_on: A list of batch reference keys to process before processing this request
540
+ """
541
+ args = lock_recipes_t.Arguments(
542
+ type=type,
543
+ recipes=recipes,
544
+ globally_removable=globally_removable,
545
+ lock_samples=lock_samples,
546
+ comments=comments,
547
+ )
548
+ json_data = serialize_for_api(args)
549
+
550
+ batch_reference = str(uuid.uuid4())
551
+
552
+ req = async_batch_t.AsyncBatchRequest(
553
+ path=async_batch_t.AsyncBatchRequestPath.LOCK_RECIPES,
554
+ data=json_data,
555
+ depends_on=depends_on,
556
+ batch_reference=batch_reference,
557
+ )
558
+
559
+ self._enqueue(req)
560
+
561
+ return async_batch_t.QueuedAsyncBatchRequest(
562
+ path=req.path,
563
+ batch_reference=req.batch_reference,
564
+ )
565
+
566
+ def lookup_entity(
567
+ self,
568
+ *,
569
+ entity_type: entity_t.EntityType,
570
+ query: lookup_entity_t.LookupEntityQuery,
571
+ depends_on: list[str] | None = None,
572
+ _request_options: client_config_t.RequestOptions | None = None,
573
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
574
+ """Look up an entity based on an identifier or field values
575
+
576
+ :param depends_on: A list of batch reference keys to process before processing this request
577
+ """
578
+ args = lookup_entity_t.Arguments(
579
+ entity_type=entity_type,
580
+ query=query,
581
+ )
582
+ json_data = serialize_for_api(args)
583
+
584
+ batch_reference = str(uuid.uuid4())
585
+
586
+ req = async_batch_t.AsyncBatchRequest(
587
+ path=async_batch_t.AsyncBatchRequestPath.LOOKUP_ENTITY,
588
+ data=json_data,
589
+ depends_on=depends_on,
590
+ batch_reference=batch_reference,
591
+ )
592
+
593
+ self._enqueue(req)
594
+
595
+ return async_batch_t.QueuedAsyncBatchRequest(
596
+ path=req.path,
597
+ batch_reference=req.batch_reference,
598
+ )
599
+
600
+ def push_notification(
601
+ self,
602
+ *,
603
+ notification_targets: list[notifications_t.NotificationTarget],
604
+ subject: str,
605
+ message: str,
606
+ display_notice: bool = False,
607
+ entity: entity_t.EntityIdentifier | None = None,
608
+ notice_configuration: notices_t.NotificationNoticeConfiguration | None = None,
609
+ depends_on: list[str] | None = None,
610
+ _request_options: client_config_t.RequestOptions | None = None,
611
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
612
+ """Push a notification to a user or user group
613
+
614
+ :param depends_on: A list of batch reference keys to process before processing this request
615
+ """
616
+ args = push_notification_t.Arguments(
617
+ notification_targets=notification_targets,
618
+ subject=subject,
619
+ message=message,
620
+ entity=entity,
621
+ display_notice=display_notice,
622
+ notice_configuration=notice_configuration,
623
+ )
624
+ json_data = serialize_for_api(args)
625
+
626
+ batch_reference = str(uuid.uuid4())
627
+
628
+ req = async_batch_t.AsyncBatchRequest(
629
+ path=async_batch_t.AsyncBatchRequestPath.PUSH_NOTIFICATION,
630
+ data=json_data,
631
+ depends_on=depends_on,
632
+ batch_reference=batch_reference,
633
+ )
634
+
635
+ self._enqueue(req)
636
+
637
+ return async_batch_t.QueuedAsyncBatchRequest(
638
+ path=req.path,
639
+ batch_reference=req.batch_reference,
640
+ )
641
+
642
+ def set_entity_field_values(
643
+ self,
644
+ *,
645
+ entity_identifier: entity_t.EntityIdentifier,
646
+ field_values: list[field_values_t.FieldArgumentValue],
647
+ depends_on: list[str] | None = None,
648
+ _request_options: client_config_t.RequestOptions | None = None,
649
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
650
+ """Sets field values for an entity
651
+
652
+ :param entity_identifier: Entity to update
653
+ :param field_values: Field values to set
654
+ :param depends_on: A list of batch reference keys to process before processing this request
655
+ """
656
+ args = set_entity_field_values_t.Arguments(
657
+ entity_identifier=entity_identifier,
658
+ field_values=field_values,
659
+ )
660
+ json_data = serialize_for_api(args)
661
+
662
+ batch_reference = str(uuid.uuid4())
663
+
664
+ req = async_batch_t.AsyncBatchRequest(
665
+ path=async_batch_t.AsyncBatchRequestPath.SET_ENTITY_FIELD_VALUES,
666
+ data=json_data,
667
+ depends_on=depends_on,
668
+ batch_reference=batch_reference,
669
+ )
670
+
671
+ self._enqueue(req)
672
+
673
+ return async_batch_t.QueuedAsyncBatchRequest(
674
+ path=req.path,
675
+ batch_reference=req.batch_reference,
676
+ )
677
+
197
678
  def set_recipe_metadata(
198
679
  self,
199
680
  *,
200
681
  recipe_key: identifier_t.IdentifierKey,
201
682
  recipe_metadata: list[recipe_metadata_t.MetadataValue],
202
- depends_on: typing.Optional[list[str]] = None,
683
+ depends_on: list[str] | None = None,
684
+ _request_options: client_config_t.RequestOptions | None = None,
203
685
  ) -> async_batch_t.QueuedAsyncBatchRequest:
204
686
  """Set metadata values on a recipe
205
687
 
@@ -228,3 +710,121 @@ class AsyncBatchProcessorBase(ABC):
228
710
  path=req.path,
229
711
  batch_reference=req.batch_reference,
230
712
  )
713
+
714
+ def transition_entity_phase(
715
+ self,
716
+ *,
717
+ transition: transition_entity_phase_t.TransitionIdentifier,
718
+ entity: entity_t.Entity | None = None,
719
+ entity_identifier: entity_t.EntityIdentifier | None = None,
720
+ depends_on: list[str] | None = None,
721
+ _request_options: client_config_t.RequestOptions | None = None,
722
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
723
+ """Transitions an entity from one phase to another
724
+
725
+ :param entity: Entity to transition. If entity_identifier is provided, this should be omitted.
726
+ :param entity_identifier: Identifier of the entity to transition. If entity is provided, this should be omitted.
727
+ :param transition: Identifier of the transition to perform
728
+ :param depends_on: A list of batch reference keys to process before processing this request
729
+ """
730
+ args = transition_entity_phase_t.Arguments(
731
+ entity=entity,
732
+ entity_identifier=entity_identifier,
733
+ transition=transition,
734
+ )
735
+ json_data = serialize_for_api(args)
736
+
737
+ batch_reference = str(uuid.uuid4())
738
+
739
+ req = async_batch_t.AsyncBatchRequest(
740
+ path=async_batch_t.AsyncBatchRequestPath.TRANSITION_ENTITY_PHASE,
741
+ data=json_data,
742
+ depends_on=depends_on,
743
+ batch_reference=batch_reference,
744
+ )
745
+
746
+ self._enqueue(req)
747
+
748
+ return async_batch_t.QueuedAsyncBatchRequest(
749
+ path=req.path,
750
+ batch_reference=req.batch_reference,
751
+ )
752
+
753
+ def unlock_recipes(
754
+ self,
755
+ *,
756
+ type: unlock_recipes_t.RecipeUnlockType = unlock_recipes_t.RecipeUnlockType.STANDARD,
757
+ recipes: list[identifier_t.IdentifierKey],
758
+ unlock_samples: bool | None = None,
759
+ depends_on: list[str] | None = None,
760
+ _request_options: client_config_t.RequestOptions | None = None,
761
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
762
+ """Unlock experiments. Experiments will edtiable after unlocking if they are currently locked.
763
+
764
+ :param type: The method to unlock recipes. Default is standard.
765
+ :param recipes: The recipes to unlock, a maximum of 100 can be sent
766
+ :param unlock_samples: Should associated experiment test samples also be unlocked.
767
+ :param depends_on: A list of batch reference keys to process before processing this request
768
+ """
769
+ args = unlock_recipes_t.Arguments(
770
+ type=type,
771
+ recipes=recipes,
772
+ unlock_samples=unlock_samples,
773
+ )
774
+ json_data = serialize_for_api(args)
775
+
776
+ batch_reference = str(uuid.uuid4())
777
+
778
+ req = async_batch_t.AsyncBatchRequest(
779
+ path=async_batch_t.AsyncBatchRequestPath.UNLOCK_RECIPES,
780
+ data=json_data,
781
+ depends_on=depends_on,
782
+ batch_reference=batch_reference,
783
+ )
784
+
785
+ self._enqueue(req)
786
+
787
+ return async_batch_t.QueuedAsyncBatchRequest(
788
+ path=req.path,
789
+ batch_reference=req.batch_reference,
790
+ )
791
+
792
+ def upsert_condition_match(
793
+ self,
794
+ *,
795
+ explicit_name: bool = False,
796
+ name: str | None = None,
797
+ condition_parameters: list[upsert_condition_match_t.ConditionParameter] | None = None,
798
+ output_conditions: list[identifier_t.IdentifierKey] | None = None,
799
+ existing_condition_match: identifier_t.IdentifierKey | None = None,
800
+ depends_on: list[str] | None = None,
801
+ _request_options: client_config_t.RequestOptions | None = None,
802
+ ) -> async_batch_t.QueuedAsyncBatchRequest:
803
+ """Creates or updates condition match
804
+
805
+ :param depends_on: A list of batch reference keys to process before processing this request
806
+ """
807
+ args = upsert_condition_match_t.Arguments(
808
+ name=name,
809
+ condition_parameters=condition_parameters,
810
+ output_conditions=output_conditions,
811
+ explicit_name=explicit_name,
812
+ existing_condition_match=existing_condition_match,
813
+ )
814
+ json_data = serialize_for_api(args)
815
+
816
+ batch_reference = str(uuid.uuid4())
817
+
818
+ req = async_batch_t.AsyncBatchRequest(
819
+ path=async_batch_t.AsyncBatchRequestPath.UPSERT_CONDITION_MATCH,
820
+ data=json_data,
821
+ depends_on=depends_on,
822
+ batch_reference=batch_reference,
823
+ )
824
+
825
+ self._enqueue(req)
826
+
827
+ return async_batch_t.QueuedAsyncBatchRequest(
828
+ path=req.path,
829
+ batch_reference=req.batch_reference,
830
+ )