UncountablePythonSDK 0.0.82__py3-none-any.whl → 0.0.132__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 (298) 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/basic_auth.py +7 -0
  9. examples/create_ingredient_sdk.py +34 -0
  10. examples/download_files.py +26 -0
  11. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  12. examples/integration-server/jobs/materials_auto/example_cron.py +3 -0
  13. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  14. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  15. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  16. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  17. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  18. examples/integration-server/jobs/materials_auto/example_wh.py +17 -9
  19. examples/integration-server/jobs/materials_auto/profile.yaml +61 -0
  20. examples/integration-server/pyproject.toml +10 -10
  21. examples/oauth.py +7 -0
  22. examples/set_recipe_metadata_file.py +1 -1
  23. examples/upload_files.py +1 -2
  24. pkgs/argument_parser/__init__.py +8 -0
  25. pkgs/argument_parser/_is_namedtuple.py +3 -0
  26. pkgs/argument_parser/argument_parser.py +196 -63
  27. pkgs/filesystem_utils/__init__.py +1 -0
  28. pkgs/filesystem_utils/_blob_session.py +144 -0
  29. pkgs/filesystem_utils/_gdrive_session.py +5 -5
  30. pkgs/filesystem_utils/_s3_session.py +2 -1
  31. pkgs/filesystem_utils/_sftp_session.py +6 -3
  32. pkgs/filesystem_utils/file_type_utils.py +30 -10
  33. pkgs/serialization/__init__.py +7 -2
  34. pkgs/serialization/annotation.py +64 -0
  35. pkgs/serialization/missing_sentry.py +1 -1
  36. pkgs/serialization/opaque_key.py +1 -1
  37. pkgs/serialization/serial_alias.py +47 -0
  38. pkgs/serialization/serial_class.py +40 -48
  39. pkgs/serialization/serial_generic.py +16 -0
  40. pkgs/serialization/serial_union.py +16 -16
  41. pkgs/serialization_util/__init__.py +6 -0
  42. pkgs/serialization_util/dataclasses.py +14 -0
  43. pkgs/serialization_util/serialization_helpers.py +15 -5
  44. pkgs/type_spec/actions_registry/__main__.py +0 -4
  45. pkgs/type_spec/actions_registry/emit_typescript.py +2 -4
  46. pkgs/type_spec/builder.py +248 -70
  47. pkgs/type_spec/builder_types.py +9 -0
  48. pkgs/type_spec/config.py +40 -7
  49. pkgs/type_spec/cross_output_links.py +99 -0
  50. pkgs/type_spec/emit_open_api.py +121 -34
  51. pkgs/type_spec/emit_open_api_util.py +5 -5
  52. pkgs/type_spec/emit_python.py +277 -86
  53. pkgs/type_spec/emit_typescript.py +102 -29
  54. pkgs/type_spec/emit_typescript_util.py +66 -10
  55. pkgs/type_spec/load_types.py +16 -3
  56. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  57. pkgs/type_spec/open_api_util.py +29 -4
  58. pkgs/type_spec/parts/base.py.prepart +11 -8
  59. pkgs/type_spec/parts/base.ts.prepart +4 -0
  60. pkgs/type_spec/type_info/__main__.py +3 -1
  61. pkgs/type_spec/type_info/emit_type_info.py +115 -22
  62. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  63. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  64. pkgs/type_spec/util.py +3 -3
  65. pkgs/type_spec/value_spec/__main__.py +26 -9
  66. pkgs/type_spec/value_spec/convert_type.py +18 -0
  67. pkgs/type_spec/value_spec/emit_python.py +13 -3
  68. pkgs/type_spec/value_spec/types.py +1 -1
  69. uncountable/core/async_batch.py +1 -1
  70. uncountable/core/client.py +133 -34
  71. uncountable/core/environment.py +3 -3
  72. uncountable/core/file_upload.py +39 -15
  73. uncountable/integration/cli.py +116 -23
  74. uncountable/integration/construct_client.py +3 -3
  75. uncountable/integration/executors/executors.py +12 -2
  76. uncountable/integration/executors/generic_upload_executor.py +66 -14
  77. uncountable/integration/http_server/__init__.py +5 -0
  78. uncountable/integration/http_server/types.py +69 -0
  79. uncountable/integration/job.py +192 -7
  80. uncountable/integration/queue_runner/command_server/__init__.py +4 -0
  81. uncountable/integration/queue_runner/command_server/command_client.py +65 -0
  82. uncountable/integration/queue_runner/command_server/command_server.py +83 -5
  83. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  84. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +36 -0
  85. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +28 -11
  86. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +77 -1
  87. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +135 -0
  88. uncountable/integration/queue_runner/command_server/types.py +25 -2
  89. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +168 -11
  90. uncountable/integration/queue_runner/datastore/interface.py +10 -0
  91. uncountable/integration/queue_runner/datastore/model.py +8 -1
  92. uncountable/integration/queue_runner/job_scheduler.py +63 -23
  93. uncountable/integration/queue_runner/queue_runner.py +10 -2
  94. uncountable/integration/queue_runner/worker.py +22 -17
  95. uncountable/integration/scan_profiles.py +1 -1
  96. uncountable/integration/scheduler.py +74 -25
  97. uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  98. uncountable/integration/server.py +42 -12
  99. uncountable/integration/telemetry.py +63 -10
  100. uncountable/integration/webhook_server/entrypoint.py +39 -112
  101. uncountable/types/__init__.py +58 -1
  102. uncountable/types/api/batch/execute_batch.py +5 -6
  103. uncountable/types/api/batch/execute_batch_load_async.py +2 -3
  104. uncountable/types/api/chemical/convert_chemical_formats.py +10 -5
  105. uncountable/types/api/condition_parameters/__init__.py +1 -0
  106. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  107. uncountable/types/api/entity/create_entities.py +7 -7
  108. uncountable/types/api/entity/create_entity.py +8 -8
  109. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  110. uncountable/types/api/entity/export_entities.py +59 -0
  111. uncountable/types/api/entity/get_entities_data.py +3 -4
  112. uncountable/types/api/entity/grant_entity_permissions.py +6 -6
  113. uncountable/types/api/entity/list_aggregate.py +79 -0
  114. uncountable/types/api/entity/list_entities.py +34 -10
  115. uncountable/types/api/entity/lock_entity.py +4 -4
  116. uncountable/types/api/entity/lookup_entity.py +116 -0
  117. uncountable/types/api/entity/resolve_entity_ids.py +5 -6
  118. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  119. uncountable/types/api/entity/set_values.py +3 -3
  120. uncountable/types/api/entity/transition_entity_phase.py +14 -7
  121. uncountable/types/api/entity/unlock_entity.py +3 -3
  122. uncountable/types/api/equipment/associate_equipment_input.py +2 -3
  123. uncountable/types/api/field_options/upsert_field_options.py +7 -7
  124. uncountable/types/api/files/__init__.py +1 -0
  125. uncountable/types/api/files/download_file.py +77 -0
  126. uncountable/types/api/id_source/list_id_source.py +6 -7
  127. uncountable/types/api/id_source/match_id_source.py +4 -5
  128. uncountable/types/api/input_groups/get_input_group_names.py +3 -4
  129. uncountable/types/api/inputs/create_inputs.py +10 -9
  130. uncountable/types/api/inputs/get_input_data.py +11 -12
  131. uncountable/types/api/inputs/get_input_names.py +6 -7
  132. uncountable/types/api/inputs/get_inputs_data.py +6 -7
  133. uncountable/types/api/inputs/set_input_attribute_values.py +5 -6
  134. uncountable/types/api/inputs/set_input_category.py +5 -5
  135. uncountable/types/api/inputs/set_input_subcategories.py +3 -3
  136. uncountable/types/api/inputs/set_intermediate_type.py +4 -4
  137. uncountable/types/api/integrations/__init__.py +1 -0
  138. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  139. uncountable/types/api/integrations/push_notification.py +49 -0
  140. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  141. uncountable/types/api/listing/__init__.py +1 -0
  142. uncountable/types/api/listing/fetch_listing.py +58 -0
  143. uncountable/types/api/material_families/update_entity_material_families.py +3 -4
  144. uncountable/types/api/notebooks/__init__.py +1 -0
  145. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  146. uncountable/types/api/outputs/get_output_data.py +12 -13
  147. uncountable/types/api/outputs/get_output_names.py +5 -6
  148. uncountable/types/api/outputs/get_output_organization.py +173 -0
  149. uncountable/types/api/outputs/resolve_output_conditions.py +7 -8
  150. uncountable/types/api/permissions/set_core_permissions.py +16 -10
  151. uncountable/types/api/project/get_projects.py +6 -7
  152. uncountable/types/api/project/get_projects_data.py +7 -8
  153. uncountable/types/api/recipe_links/create_recipe_link.py +5 -5
  154. uncountable/types/api/recipe_links/remove_recipe_link.py +4 -4
  155. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +6 -7
  156. uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
  157. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  158. uncountable/types/api/recipes/archive_recipes.py +4 -4
  159. uncountable/types/api/recipes/associate_recipe_as_input.py +5 -5
  160. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
  161. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -3
  162. uncountable/types/api/recipes/create_mix_order.py +44 -0
  163. uncountable/types/api/recipes/create_recipe.py +8 -9
  164. uncountable/types/api/recipes/create_recipes.py +8 -9
  165. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
  166. uncountable/types/api/recipes/edit_recipe_inputs.py +101 -24
  167. uncountable/types/api/recipes/get_column_calculation_values.py +4 -5
  168. uncountable/types/api/recipes/get_curve.py +4 -5
  169. uncountable/types/api/recipes/get_recipe_calculations.py +6 -7
  170. uncountable/types/api/recipes/get_recipe_links.py +3 -4
  171. uncountable/types/api/recipes/get_recipe_names.py +3 -4
  172. uncountable/types/api/recipes/get_recipe_output_metadata.py +5 -6
  173. uncountable/types/api/recipes/get_recipes_data.py +62 -34
  174. uncountable/types/api/recipes/lock_recipes.py +9 -8
  175. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
  176. uncountable/types/api/recipes/set_recipe_inputs.py +9 -10
  177. uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
  178. uncountable/types/api/recipes/set_recipe_output_annotations.py +11 -12
  179. uncountable/types/api/recipes/set_recipe_output_file.py +5 -6
  180. uncountable/types/api/recipes/set_recipe_outputs.py +24 -13
  181. uncountable/types/api/recipes/set_recipe_tags.py +14 -9
  182. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  183. uncountable/types/api/recipes/unarchive_recipes.py +3 -3
  184. uncountable/types/api/recipes/unlock_recipes.py +7 -6
  185. uncountable/types/api/runsheet/__init__.py +1 -0
  186. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  187. uncountable/types/api/triggers/run_trigger.py +4 -4
  188. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  189. uncountable/types/api/uploader/invoke_uploader.py +4 -5
  190. uncountable/types/api/user/__init__.py +1 -0
  191. uncountable/types/api/user/get_current_user_info.py +40 -0
  192. uncountable/types/async_batch.py +1 -1
  193. uncountable/types/async_batch_processor.py +506 -23
  194. uncountable/types/async_batch_t.py +35 -8
  195. uncountable/types/async_jobs.py +0 -1
  196. uncountable/types/async_jobs_t.py +1 -2
  197. uncountable/types/auth_retrieval.py +0 -1
  198. uncountable/types/auth_retrieval_t.py +6 -6
  199. uncountable/types/base.py +0 -1
  200. uncountable/types/base_t.py +11 -9
  201. uncountable/types/calculations.py +0 -1
  202. uncountable/types/calculations_t.py +1 -2
  203. uncountable/types/chemical_structure.py +0 -1
  204. uncountable/types/chemical_structure_t.py +5 -5
  205. uncountable/types/client_base.py +614 -69
  206. uncountable/types/client_config.py +1 -1
  207. uncountable/types/client_config_t.py +13 -3
  208. uncountable/types/curves.py +0 -1
  209. uncountable/types/curves_t.py +6 -7
  210. uncountable/types/data.py +12 -0
  211. uncountable/types/data_t.py +103 -0
  212. uncountable/types/entity.py +1 -1
  213. uncountable/types/entity_t.py +90 -10
  214. uncountable/types/experiment_groups.py +0 -1
  215. uncountable/types/experiment_groups_t.py +1 -2
  216. uncountable/types/exports.py +8 -0
  217. uncountable/types/exports_t.py +34 -0
  218. uncountable/types/field_values.py +19 -1
  219. uncountable/types/field_values_t.py +242 -9
  220. uncountable/types/fields.py +0 -1
  221. uncountable/types/fields_t.py +1 -2
  222. uncountable/types/generic_upload.py +0 -1
  223. uncountable/types/generic_upload_t.py +14 -14
  224. uncountable/types/id_source.py +0 -1
  225. uncountable/types/id_source_t.py +13 -7
  226. uncountable/types/identifier.py +0 -1
  227. uncountable/types/identifier_t.py +10 -5
  228. uncountable/types/input_attributes.py +0 -1
  229. uncountable/types/input_attributes_t.py +3 -4
  230. uncountable/types/inputs.py +0 -1
  231. uncountable/types/inputs_t.py +3 -4
  232. uncountable/types/integration_server.py +0 -1
  233. uncountable/types/integration_server_t.py +13 -4
  234. uncountable/types/integration_session.py +10 -0
  235. uncountable/types/integration_session_t.py +60 -0
  236. uncountable/types/integrations.py +10 -0
  237. uncountable/types/integrations_t.py +62 -0
  238. uncountable/types/job_definition.py +2 -1
  239. uncountable/types/job_definition_t.py +57 -32
  240. uncountable/types/listing.py +9 -0
  241. uncountable/types/listing_t.py +51 -0
  242. uncountable/types/notices.py +8 -0
  243. uncountable/types/notices_t.py +37 -0
  244. uncountable/types/notifications.py +11 -0
  245. uncountable/types/notifications_t.py +74 -0
  246. uncountable/types/outputs.py +0 -1
  247. uncountable/types/outputs_t.py +2 -3
  248. uncountable/types/overrides.py +0 -1
  249. uncountable/types/overrides_t.py +10 -4
  250. uncountable/types/permissions.py +0 -1
  251. uncountable/types/permissions_t.py +1 -2
  252. uncountable/types/phases.py +0 -1
  253. uncountable/types/phases_t.py +1 -2
  254. uncountable/types/post_base.py +0 -1
  255. uncountable/types/post_base_t.py +1 -2
  256. uncountable/types/queued_job.py +2 -1
  257. uncountable/types/queued_job_t.py +29 -12
  258. uncountable/types/recipe_identifiers.py +0 -1
  259. uncountable/types/recipe_identifiers_t.py +18 -8
  260. uncountable/types/recipe_inputs.py +0 -1
  261. uncountable/types/recipe_inputs_t.py +1 -2
  262. uncountable/types/recipe_links.py +0 -1
  263. uncountable/types/recipe_links_t.py +3 -4
  264. uncountable/types/recipe_metadata.py +0 -1
  265. uncountable/types/recipe_metadata_t.py +9 -10
  266. uncountable/types/recipe_output_metadata.py +0 -1
  267. uncountable/types/recipe_output_metadata_t.py +1 -2
  268. uncountable/types/recipe_tags.py +0 -1
  269. uncountable/types/recipe_tags_t.py +1 -2
  270. uncountable/types/recipe_workflow_steps.py +0 -1
  271. uncountable/types/recipe_workflow_steps_t.py +7 -7
  272. uncountable/types/recipes.py +0 -1
  273. uncountable/types/recipes_t.py +2 -2
  274. uncountable/types/response.py +0 -1
  275. uncountable/types/response_t.py +2 -2
  276. uncountable/types/secret_retrieval.py +0 -1
  277. uncountable/types/secret_retrieval_t.py +7 -7
  278. uncountable/types/sockets.py +20 -0
  279. uncountable/types/sockets_t.py +169 -0
  280. uncountable/types/structured_filters.py +25 -0
  281. uncountable/types/structured_filters_t.py +248 -0
  282. uncountable/types/units.py +0 -1
  283. uncountable/types/units_t.py +1 -2
  284. uncountable/types/uploader.py +24 -0
  285. uncountable/types/uploader_t.py +222 -0
  286. uncountable/types/users.py +0 -1
  287. uncountable/types/users_t.py +1 -2
  288. uncountable/types/webhook_job.py +1 -1
  289. uncountable/types/webhook_job_t.py +14 -3
  290. uncountable/types/workflows.py +0 -1
  291. uncountable/types/workflows_t.py +3 -4
  292. uncountablepythonsdk-0.0.132.dist-info/METADATA +64 -0
  293. uncountablepythonsdk-0.0.132.dist-info/RECORD +363 -0
  294. {UncountablePythonSDK-0.0.82.dist-info → uncountablepythonsdk-0.0.132.dist-info}/WHEEL +1 -1
  295. UncountablePythonSDK-0.0.82.dist-info/METADATA +0 -60
  296. UncountablePythonSDK-0.0.82.dist-info/RECORD +0 -292
  297. docs/quickstart.md +0 -19
  298. {UncountablePythonSDK-0.0.82.dist-info → uncountablepythonsdk-0.0.132.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,7 +8,9 @@ import typing # noqa: F401
9
8
  import datetime # noqa: F401
10
9
  from decimal import Decimal # noqa: F401
11
10
  from pkgs.serialization import OpaqueKey
11
+ import uncountable.types.api.notebooks.add_notebook_content as add_notebook_content_t
12
12
  import uncountable.types.api.recipes.add_recipe_to_project as add_recipe_to_project_t
13
+ import uncountable.types.api.recipes.add_time_series_data as add_time_series_data_t
13
14
  import uncountable.types.api.recipes.archive_recipes as archive_recipes_t
14
15
  import uncountable.types.api.equipment.associate_equipment_input as associate_equipment_input_t
15
16
  import uncountable.types.api.recipes.associate_recipe_as_input as associate_recipe_as_input_t
@@ -17,10 +18,15 @@ import uncountable.types.api.recipes.associate_recipe_as_lot as associate_recipe
17
18
  from uncountable.types import async_batch_t
18
19
  from uncountable.types import base_t
19
20
  import uncountable.types.api.recipes.clear_recipe_outputs as clear_recipe_outputs_t
21
+ from uncountable.types import client_config_t
22
+ import uncountable.types.api.uploader.complete_async_parse as complete_async_parse_t
23
+ import uncountable.types.api.runsheet.complete_async_upload as complete_async_upload_t
20
24
  import uncountable.types.api.chemical.convert_chemical_formats as convert_chemical_formats_t
21
25
  import uncountable.types.api.entity.create_entities as create_entities_t
22
26
  import uncountable.types.api.entity.create_entity as create_entity_t
23
27
  import uncountable.types.api.inputs.create_inputs as create_inputs_t
28
+ import uncountable.types.api.recipes.create_mix_order as create_mix_order_t
29
+ import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
24
30
  import uncountable.types.api.recipes.create_recipe as create_recipe_t
25
31
  import uncountable.types.api.recipe_links.create_recipe_link as create_recipe_link_t
26
32
  import uncountable.types.api.recipes.create_recipes as create_recipes_t
@@ -29,9 +35,12 @@ import uncountable.types.api.recipes.edit_recipe_inputs as edit_recipe_inputs_t
29
35
  from uncountable.types import entity_t
30
36
  import uncountable.types.api.batch.execute_batch as execute_batch_t
31
37
  import uncountable.types.api.batch.execute_batch_load_async as execute_batch_load_async_t
38
+ import uncountable.types.api.entity.export_entities as export_entities_t
39
+ from uncountable.types import exports_t
32
40
  from uncountable.types import field_values_t
33
41
  from uncountable.types import generic_upload_t
34
42
  import uncountable.types.api.recipes.get_column_calculation_values as get_column_calculation_values_t
43
+ import uncountable.types.api.user.get_current_user_info as get_current_user_info_t
35
44
  import uncountable.types.api.recipes.get_curve as get_curve_t
36
45
  import uncountable.types.api.entity.get_entities_data as get_entities_data_t
37
46
  import uncountable.types.api.inputs.get_input_data as get_input_data_t
@@ -52,23 +61,30 @@ import uncountable.types.api.entity.grant_entity_permissions as grant_entity_per
52
61
  from uncountable.types import id_source_t
53
62
  from uncountable.types import identifier_t
54
63
  import uncountable.types.api.uploader.invoke_uploader as invoke_uploader_t
64
+ import uncountable.types.api.entity.list_aggregate as list_aggregate_t
55
65
  import uncountable.types.api.entity.list_entities as list_entities_t
56
66
  import uncountable.types.api.id_source.list_id_source as list_id_source_t
57
67
  import uncountable.types.api.entity.lock_entity as lock_entity_t
58
68
  import uncountable.types.api.recipes.lock_recipes as lock_recipes_t
69
+ import uncountable.types.api.entity.lookup_entity as lookup_entity_t
59
70
  import uncountable.types.api.id_source.match_id_source as match_id_source_t
71
+ from uncountable.types import notices_t
72
+ from uncountable.types import notifications_t
60
73
  from uncountable.types import permissions_t
61
74
  from uncountable.types import post_base_t
75
+ import uncountable.types.api.integrations.push_notification as push_notification_t
62
76
  from uncountable.types import recipe_identifiers_t
63
77
  from uncountable.types import recipe_links_t
64
78
  from uncountable.types import recipe_metadata_t
65
79
  from uncountable.types import recipe_workflow_steps_t
80
+ import uncountable.types.api.integrations.register_sockets_token as register_sockets_token_t
66
81
  import uncountable.types.api.recipes.remove_recipe_from_project as remove_recipe_from_project_t
67
82
  import uncountable.types.api.recipe_links.remove_recipe_link as remove_recipe_link_t
68
83
  import uncountable.types.api.entity.resolve_entity_ids as resolve_entity_ids_t
69
84
  import uncountable.types.api.outputs.resolve_output_conditions as resolve_output_conditions_t
70
85
  import uncountable.types.api.triggers.run_trigger as run_trigger_t
71
86
  import uncountable.types.api.permissions.set_core_permissions as set_core_permissions_t
87
+ import uncountable.types.api.entity.set_entity_field_values as set_entity_field_values_t
72
88
  import uncountable.types.api.inputs.set_input_attribute_values as set_input_attribute_values_t
73
89
  import uncountable.types.api.inputs.set_input_category as set_input_category_t
74
90
  import uncountable.types.api.inputs.set_input_subcategories as set_input_subcategories_t
@@ -79,12 +95,16 @@ import uncountable.types.api.recipes.set_recipe_output_annotations as set_recipe
79
95
  import uncountable.types.api.recipes.set_recipe_output_file as set_recipe_output_file_t
80
96
  import uncountable.types.api.recipes.set_recipe_outputs as set_recipe_outputs_t
81
97
  import uncountable.types.api.recipes.set_recipe_tags as set_recipe_tags_t
98
+ import uncountable.types.api.recipes.set_recipe_total as set_recipe_total_t
82
99
  import uncountable.types.api.entity.set_values as set_values_t
100
+ from uncountable.types import sockets_t
83
101
  import uncountable.types.api.entity.transition_entity_phase as transition_entity_phase_t
84
102
  import uncountable.types.api.recipes.unarchive_recipes as unarchive_recipes_t
85
103
  import uncountable.types.api.entity.unlock_entity as unlock_entity_t
86
104
  import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
87
105
  import uncountable.types.api.material_families.update_entity_material_families as update_entity_material_families_t
106
+ from uncountable.types import uploader_t
107
+ import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
88
108
  import uncountable.types.api.field_options.upsert_field_options as upsert_field_options_t
89
109
  from abc import ABC, abstractmethod
90
110
  import dataclasses
@@ -97,6 +117,7 @@ class APIRequest:
97
117
  method: str
98
118
  endpoint: str
99
119
  args: typing.Any
120
+ request_options: client_config_t.RequestOptions | None = None
100
121
 
101
122
 
102
123
  class ClientMethods(ABC):
@@ -105,11 +126,39 @@ class ClientMethods(ABC):
105
126
  def do_request(self, *, api_request: APIRequest, return_type: type[DT]) -> DT:
106
127
  ...
107
128
 
129
+ def add_notebook_content(
130
+ self,
131
+ *,
132
+ notebook_key: identifier_t.IdentifierKey,
133
+ location: add_notebook_content_t.Location,
134
+ contents: list[add_notebook_content_t.InputContent],
135
+ _request_options: client_config_t.RequestOptions | None = None,
136
+ ) -> add_notebook_content_t.Data:
137
+ """Adds content to an existing notebook
138
+
139
+ :param notebook_key: Key of the notebook to add the content to
140
+ :param location: The location to add the content to in the notebook
141
+ :param contents: List of input content to add to the notebook
142
+ """
143
+ args = add_notebook_content_t.Arguments(
144
+ notebook_key=notebook_key,
145
+ location=location,
146
+ contents=contents,
147
+ )
148
+ api_request = APIRequest(
149
+ method=add_notebook_content_t.ENDPOINT_METHOD,
150
+ endpoint=add_notebook_content_t.ENDPOINT_PATH,
151
+ args=args,
152
+ request_options=_request_options,
153
+ )
154
+ return self.do_request(api_request=api_request, return_type=add_notebook_content_t.Data)
155
+
108
156
  def add_recipe_to_project(
109
157
  self,
110
158
  *,
111
159
  recipe_key: identifier_t.IdentifierKey,
112
160
  project_key: identifier_t.IdentifierKey,
161
+ _request_options: client_config_t.RequestOptions | None = None,
113
162
  ) -> add_recipe_to_project_t.Data:
114
163
  """Adds a recipe to a project
115
164
 
@@ -124,14 +173,43 @@ class ClientMethods(ABC):
124
173
  method=add_recipe_to_project_t.ENDPOINT_METHOD,
125
174
  endpoint=add_recipe_to_project_t.ENDPOINT_PATH,
126
175
  args=args,
176
+ request_options=_request_options,
127
177
  )
128
178
  return self.do_request(api_request=api_request, return_type=add_recipe_to_project_t.Data)
129
179
 
180
+ def external_add_time_series_data(
181
+ self,
182
+ *,
183
+ time_series_segment_key: identifier_t.IdentifierKey,
184
+ time_series_data: list[add_time_series_data_t.TimeSeriesDatum],
185
+ on_conflict: add_time_series_data_t.OnTimepointConflict = add_time_series_data_t.OnTimepointConflict.ERROR,
186
+ _request_options: client_config_t.RequestOptions | None = None,
187
+ ) -> add_time_series_data_t.Data:
188
+ """Add timepoint data to a time series segment.
189
+
190
+ :param time_series_segment_key: The time series segment to add data to
191
+ :param time_series_data: The data to add to the time series segment
192
+ :param on_conflict: What to do if a TimeSeriesDatum already exists at the same timestamp
193
+ """
194
+ args = add_time_series_data_t.Arguments(
195
+ time_series_segment_key=time_series_segment_key,
196
+ time_series_data=time_series_data,
197
+ on_conflict=on_conflict,
198
+ )
199
+ api_request = APIRequest(
200
+ method=add_time_series_data_t.ENDPOINT_METHOD,
201
+ endpoint=add_time_series_data_t.ENDPOINT_PATH,
202
+ args=args,
203
+ request_options=_request_options,
204
+ )
205
+ return self.do_request(api_request=api_request, return_type=add_time_series_data_t.Data)
206
+
130
207
  def archive_recipes(
131
208
  self,
132
209
  *,
133
210
  recipes: list[identifier_t.IdentifierKey],
134
- reason: typing.Optional[str] = None,
211
+ reason: str | None = None,
212
+ _request_options: client_config_t.RequestOptions | None = None,
135
213
  ) -> archive_recipes_t.Data:
136
214
  """Archive the provided recipes and their children
137
215
 
@@ -146,6 +224,7 @@ class ClientMethods(ABC):
146
224
  method=archive_recipes_t.ENDPOINT_METHOD,
147
225
  endpoint=archive_recipes_t.ENDPOINT_PATH,
148
226
  args=args,
227
+ request_options=_request_options,
149
228
  )
150
229
  return self.do_request(api_request=api_request, return_type=archive_recipes_t.Data)
151
230
 
@@ -154,6 +233,7 @@ class ClientMethods(ABC):
154
233
  *,
155
234
  equipment_key: identifier_t.IdentifierKey,
156
235
  material_family_ids: list[base_t.ObjectId],
236
+ _request_options: client_config_t.RequestOptions | None = None,
157
237
  ) -> associate_equipment_input_t.Data:
158
238
  """Create or return the input association for equipment
159
239
 
@@ -168,6 +248,7 @@ class ClientMethods(ABC):
168
248
  method=associate_equipment_input_t.ENDPOINT_METHOD,
169
249
  endpoint=associate_equipment_input_t.ENDPOINT_PATH,
170
250
  args=args,
251
+ request_options=_request_options,
171
252
  )
172
253
  return self.do_request(api_request=api_request, return_type=associate_equipment_input_t.Data)
173
254
 
@@ -175,8 +256,9 @@ class ClientMethods(ABC):
175
256
  self,
176
257
  *,
177
258
  recipe_key: identifier_t.IdentifierKey,
178
- input_key: typing.Optional[identifier_t.IdentifierKey] = None,
179
- show_in_listings: typing.Optional[bool] = None,
259
+ input_key: identifier_t.IdentifierKey | None = None,
260
+ show_in_listings: bool | None = None,
261
+ _request_options: client_config_t.RequestOptions | None = None,
180
262
  ) -> associate_recipe_as_input_t.Data:
181
263
  """Create or return the input association for a recipe
182
264
 
@@ -193,6 +275,7 @@ class ClientMethods(ABC):
193
275
  method=associate_recipe_as_input_t.ENDPOINT_METHOD,
194
276
  endpoint=associate_recipe_as_input_t.ENDPOINT_PATH,
195
277
  args=args,
278
+ request_options=_request_options,
196
279
  )
197
280
  return self.do_request(api_request=api_request, return_type=associate_recipe_as_input_t.Data)
198
281
 
@@ -201,6 +284,7 @@ class ClientMethods(ABC):
201
284
  *,
202
285
  recipe_key: identifier_t.IdentifierKey,
203
286
  ingredient_key: identifier_t.IdentifierKey,
287
+ _request_options: client_config_t.RequestOptions | None = None,
204
288
  ) -> associate_recipe_as_lot_t.Data:
205
289
  """Create a new lot association for the provided recipe with the provided ingredient
206
290
 
@@ -215,6 +299,7 @@ class ClientMethods(ABC):
215
299
  method=associate_recipe_as_lot_t.ENDPOINT_METHOD,
216
300
  endpoint=associate_recipe_as_lot_t.ENDPOINT_PATH,
217
301
  args=args,
302
+ request_options=_request_options,
218
303
  )
219
304
  return self.do_request(api_request=api_request, return_type=associate_recipe_as_lot_t.Data)
220
305
 
@@ -222,6 +307,7 @@ class ClientMethods(ABC):
222
307
  self,
223
308
  *,
224
309
  recipe_key: identifier_t.IdentifierKey,
310
+ _request_options: client_config_t.RequestOptions | None = None,
225
311
  ) -> clear_recipe_outputs_t.Data:
226
312
  """Clears all output values & output metadata for a given recipe
227
313
 
@@ -234,13 +320,61 @@ class ClientMethods(ABC):
234
320
  method=clear_recipe_outputs_t.ENDPOINT_METHOD,
235
321
  endpoint=clear_recipe_outputs_t.ENDPOINT_PATH,
236
322
  args=args,
323
+ request_options=_request_options,
237
324
  )
238
325
  return self.do_request(api_request=api_request, return_type=clear_recipe_outputs_t.Data)
239
326
 
327
+ def complete_async_parse(
328
+ self,
329
+ *,
330
+ parsed_file_data: list[uploader_t.ParsedFileData],
331
+ async_job_key: identifier_t.IdentifierKey,
332
+ upload_destination: generic_upload_t.UploadDestinationRecipe,
333
+ _request_options: client_config_t.RequestOptions | None = None,
334
+ ) -> complete_async_parse_t.Data:
335
+ """Parses uploaded files asynchronously
336
+
337
+ """
338
+ args = complete_async_parse_t.Arguments(
339
+ parsed_file_data=parsed_file_data,
340
+ async_job_key=async_job_key,
341
+ upload_destination=upload_destination,
342
+ )
343
+ api_request = APIRequest(
344
+ method=complete_async_parse_t.ENDPOINT_METHOD,
345
+ endpoint=complete_async_parse_t.ENDPOINT_PATH,
346
+ args=args,
347
+ request_options=_request_options,
348
+ )
349
+ return self.do_request(api_request=api_request, return_type=complete_async_parse_t.Data)
350
+
351
+ def complete_async_upload(
352
+ self,
353
+ *,
354
+ async_job_id: base_t.ObjectId,
355
+ file_id: base_t.ObjectId,
356
+ _request_options: client_config_t.RequestOptions | None = None,
357
+ ) -> complete_async_upload_t.Data:
358
+ """Processes an file id with a given async job id to be uploaded asynchronously
359
+
360
+ """
361
+ args = complete_async_upload_t.Arguments(
362
+ async_job_id=async_job_id,
363
+ file_id=file_id,
364
+ )
365
+ api_request = APIRequest(
366
+ method=complete_async_upload_t.ENDPOINT_METHOD,
367
+ endpoint=complete_async_upload_t.ENDPOINT_PATH,
368
+ args=args,
369
+ request_options=_request_options,
370
+ )
371
+ return self.do_request(api_request=api_request, return_type=complete_async_upload_t.Data)
372
+
240
373
  def convert_chemical_formats(
241
374
  self,
242
375
  *,
243
376
  source_chemical_structures: list[convert_chemical_formats_t.ChemicalStructureFile],
377
+ _request_options: client_config_t.RequestOptions | None = None,
244
378
  ) -> convert_chemical_formats_t.Data:
245
379
  """Converts chemical formats, into the format used by Uncountable and usable in other APIs for eg. set_input_attribute_values
246
380
 
@@ -252,6 +386,7 @@ class ClientMethods(ABC):
252
386
  method=convert_chemical_formats_t.ENDPOINT_METHOD,
253
387
  endpoint=convert_chemical_formats_t.ENDPOINT_PATH,
254
388
  args=args,
389
+ request_options=_request_options,
255
390
  )
256
391
  return self.do_request(api_request=api_request, return_type=convert_chemical_formats_t.Data)
257
392
 
@@ -260,8 +395,9 @@ class ClientMethods(ABC):
260
395
  *,
261
396
  entity_type: entity_t.LimitedEntityType,
262
397
  entities_to_create: list[create_entities_t.EntityToCreate],
263
- definition_id: typing.Optional[base_t.ObjectId] = None,
264
- definition_key: typing.Optional[identifier_t.IdentifierKey] = None,
398
+ definition_id: base_t.ObjectId | None = None,
399
+ definition_key: identifier_t.IdentifierKey | None = None,
400
+ _request_options: client_config_t.RequestOptions | None = None,
265
401
  ) -> create_entities_t.Data:
266
402
  """Creates new Uncountable entities
267
403
 
@@ -280,6 +416,7 @@ class ClientMethods(ABC):
280
416
  method=create_entities_t.ENDPOINT_METHOD,
281
417
  endpoint=create_entities_t.ENDPOINT_PATH,
282
418
  args=args,
419
+ request_options=_request_options,
283
420
  )
284
421
  return self.do_request(api_request=api_request, return_type=create_entities_t.Data)
285
422
 
@@ -287,26 +424,31 @@ class ClientMethods(ABC):
287
424
  self,
288
425
  *,
289
426
  entity_type: entity_t.LimitedEntityType,
290
- definition_id: typing.Optional[base_t.ObjectId] = None,
291
- definition_key: typing.Optional[identifier_t.IdentifierKey] = None,
292
- field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None,
427
+ definition_id: base_t.ObjectId | None = None,
428
+ definition_key: identifier_t.IdentifierKey | None = None,
429
+ field_values: list[field_values_t.FieldRefNameValue] | None = None,
430
+ parent_entity: entity_t.Entity | None = None,
431
+ _request_options: client_config_t.RequestOptions | None = None,
293
432
  ) -> create_entity_t.Data:
294
433
  """Creates a new Uncountable entity
295
434
 
296
435
  :param definition_id: Definition id of the entity to create
297
436
  :param definition_key: Key for the definition of the entity to create
298
437
  :param entity_type: The type of the entities requested
438
+ :param parent_entity: The parent entity associated for this new entity. This only applies if there is a pre-defined relationship.
299
439
  """
300
440
  args = create_entity_t.Arguments(
301
441
  definition_id=definition_id,
302
442
  definition_key=definition_key,
303
443
  entity_type=entity_type,
304
444
  field_values=field_values,
445
+ parent_entity=parent_entity,
305
446
  )
306
447
  api_request = APIRequest(
307
448
  method=create_entity_t.ENDPOINT_METHOD,
308
449
  endpoint=create_entity_t.ENDPOINT_PATH,
309
450
  args=args,
451
+ request_options=_request_options,
310
452
  )
311
453
  return self.do_request(api_request=api_request, return_type=create_entity_t.Data)
312
454
 
@@ -314,6 +456,7 @@ class ClientMethods(ABC):
314
456
  self,
315
457
  *,
316
458
  inputs_to_create: list[create_inputs_t.InputToCreate],
459
+ _request_options: client_config_t.RequestOptions | None = None,
317
460
  ) -> create_inputs_t.Data:
318
461
  """Creates new inputs
319
462
 
@@ -326,20 +469,73 @@ class ClientMethods(ABC):
326
469
  method=create_inputs_t.ENDPOINT_METHOD,
327
470
  endpoint=create_inputs_t.ENDPOINT_PATH,
328
471
  args=args,
472
+ request_options=_request_options,
329
473
  )
330
474
  return self.do_request(api_request=api_request, return_type=create_inputs_t.Data)
331
475
 
476
+ def create_mix_order(
477
+ self,
478
+ *,
479
+ recipe_key: identifier_t.IdentifierKey,
480
+ recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
481
+ _request_options: client_config_t.RequestOptions | None = None,
482
+ ) -> create_mix_order_t.Data:
483
+ """Creates mix order on a recipe workflow step
484
+
485
+ """
486
+ args = create_mix_order_t.Arguments(
487
+ recipe_key=recipe_key,
488
+ recipe_workflow_step_identifier=recipe_workflow_step_identifier,
489
+ )
490
+ api_request = APIRequest(
491
+ method=create_mix_order_t.ENDPOINT_METHOD,
492
+ endpoint=create_mix_order_t.ENDPOINT_PATH,
493
+ args=args,
494
+ request_options=_request_options,
495
+ )
496
+ return self.do_request(api_request=api_request, return_type=create_mix_order_t.Data)
497
+
498
+ def create_or_update_entity(
499
+ self,
500
+ *,
501
+ entity_type: entity_t.EntityType,
502
+ definition_key: identifier_t.IdentifierKey,
503
+ field_values: list[field_values_t.FieldArgumentValue],
504
+ entity_key: identifier_t.IdentifierKey | None = None,
505
+ on_create_init_field_values: list[field_values_t.FieldArgumentValue] | None = None,
506
+ _request_options: client_config_t.RequestOptions | None = None,
507
+ ) -> create_or_update_entity_t.Data:
508
+ """Creates or updates field values for an entity
509
+
510
+ :param on_create_init_field_values: Field values set only when the entity is created (will be ignored if entity already exists)
511
+ """
512
+ args = create_or_update_entity_t.Arguments(
513
+ entity_key=entity_key,
514
+ entity_type=entity_type,
515
+ definition_key=definition_key,
516
+ field_values=field_values,
517
+ on_create_init_field_values=on_create_init_field_values,
518
+ )
519
+ api_request = APIRequest(
520
+ method=create_or_update_entity_t.ENDPOINT_METHOD,
521
+ endpoint=create_or_update_entity_t.ENDPOINT_PATH,
522
+ args=args,
523
+ request_options=_request_options,
524
+ )
525
+ return self.do_request(api_request=api_request, return_type=create_or_update_entity_t.Data)
526
+
332
527
  def create_recipe(
333
528
  self,
334
529
  *,
335
530
  material_family_id: base_t.ObjectId,
336
531
  workflow_id: base_t.ObjectId,
337
- name: typing.Optional[str] = None,
338
- project_id: typing.Optional[base_t.ObjectId] = None,
339
- workflow_variant_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None,
340
- recipe_metadata: typing.Optional[list[recipe_metadata_t.MetadataValue]] = None,
341
- identifiers: typing.Optional[recipe_identifiers_t.RecipeIdentifiers] = None,
342
- definition_key: typing.Optional[identifier_t.IdentifierKey] = None,
532
+ name: str | None = None,
533
+ project_id: base_t.ObjectId | None = None,
534
+ workflow_variant_id: base_t.ObjectId | None = None,
535
+ recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
536
+ identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
537
+ definition_key: identifier_t.IdentifierKey | None = None,
538
+ _request_options: client_config_t.RequestOptions | None = None,
343
539
  ) -> create_recipe_t.Data:
344
540
  """Returns the id of the recipe being created.
345
541
 
@@ -366,6 +562,7 @@ class ClientMethods(ABC):
366
562
  method=create_recipe_t.ENDPOINT_METHOD,
367
563
  endpoint=create_recipe_t.ENDPOINT_PATH,
368
564
  args=args,
565
+ request_options=_request_options,
369
566
  )
370
567
  return self.do_request(api_request=api_request, return_type=create_recipe_t.Data)
371
568
 
@@ -374,8 +571,9 @@ class ClientMethods(ABC):
374
571
  *,
375
572
  recipe_from_key: identifier_t.IdentifierKey,
376
573
  recipe_to_key: identifier_t.IdentifierKey,
377
- link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]],
378
- name: str,
574
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK] | typing.Literal[recipe_links_t.RecipeLinkType.PREVIOUS_EXPERIMENT],
575
+ name: str | None = None,
576
+ _request_options: client_config_t.RequestOptions | None = None,
379
577
  ) -> create_recipe_link_t.Data:
380
578
  """Create a link between two recipes. Skip if the link already exists
381
579
 
@@ -394,6 +592,7 @@ class ClientMethods(ABC):
394
592
  method=create_recipe_link_t.ENDPOINT_METHOD,
395
593
  endpoint=create_recipe_link_t.ENDPOINT_PATH,
396
594
  args=args,
595
+ request_options=_request_options,
397
596
  )
398
597
  return self.do_request(api_request=api_request, return_type=create_recipe_link_t.Data)
399
598
 
@@ -402,9 +601,10 @@ class ClientMethods(ABC):
402
601
  *,
403
602
  material_family_id: base_t.ObjectId,
404
603
  recipe_definitions: list[create_recipes_t.CreateRecipeDefinition],
405
- project_id: typing.Optional[base_t.ObjectId] = None,
604
+ project_id: base_t.ObjectId | None = None,
605
+ _request_options: client_config_t.RequestOptions | None = None,
406
606
  ) -> create_recipes_t.Data:
407
- """Sets inputs values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system
607
+ """Creates recipes in Uncountable, optionally with metadata values, and returns the resulting ids in corresponding order
408
608
 
409
609
  :param material_family_id: The identifier of the material family to create the recipes in
410
610
  :param project_id: The identifier of the project to create the recipes in
@@ -418,6 +618,7 @@ class ClientMethods(ABC):
418
618
  method=create_recipes_t.ENDPOINT_METHOD,
419
619
  endpoint=create_recipes_t.ENDPOINT_PATH,
420
620
  args=args,
621
+ request_options=_request_options,
421
622
  )
422
623
  return self.do_request(api_request=api_request, return_type=create_recipes_t.Data)
423
624
 
@@ -425,6 +626,7 @@ class ClientMethods(ABC):
425
626
  self,
426
627
  *,
427
628
  recipe_key: identifier_t.IdentifierKey,
629
+ _request_options: client_config_t.RequestOptions | None = None,
428
630
  ) -> disassociate_recipe_as_input_t.Data:
429
631
  """Remove any association between a recipe and ingredients
430
632
 
@@ -437,6 +639,7 @@ class ClientMethods(ABC):
437
639
  method=disassociate_recipe_as_input_t.ENDPOINT_METHOD,
438
640
  endpoint=disassociate_recipe_as_input_t.ENDPOINT_PATH,
439
641
  args=args,
642
+ request_options=_request_options,
440
643
  )
441
644
  return self.do_request(api_request=api_request, return_type=disassociate_recipe_as_input_t.Data)
442
645
 
@@ -446,6 +649,7 @@ class ClientMethods(ABC):
446
649
  recipe_key: identifier_t.IdentifierKey,
447
650
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
448
651
  edits: list[edit_recipe_inputs_t.RecipeInputEdit],
652
+ _request_options: client_config_t.RequestOptions | None = None,
449
653
  ) -> edit_recipe_inputs_t.Data:
450
654
  """Clear, update, or add inputs on a recipe
451
655
 
@@ -460,6 +664,7 @@ class ClientMethods(ABC):
460
664
  method=edit_recipe_inputs_t.ENDPOINT_METHOD,
461
665
  endpoint=edit_recipe_inputs_t.ENDPOINT_PATH,
462
666
  args=args,
667
+ request_options=_request_options,
463
668
  )
464
669
  return self.do_request(api_request=api_request, return_type=edit_recipe_inputs_t.Data)
465
670
 
@@ -467,6 +672,7 @@ class ClientMethods(ABC):
467
672
  self,
468
673
  *,
469
674
  requests: list[execute_batch_t.BatchRequest],
675
+ _request_options: client_config_t.RequestOptions | None = None,
470
676
  ) -> execute_batch_t.Data:
471
677
  """Run multiple API calls via one request
472
678
 
@@ -478,6 +684,7 @@ class ClientMethods(ABC):
478
684
  method=execute_batch_t.ENDPOINT_METHOD,
479
685
  endpoint=execute_batch_t.ENDPOINT_PATH,
480
686
  args=args,
687
+ request_options=_request_options,
481
688
  )
482
689
  return self.do_request(api_request=api_request, return_type=execute_batch_t.Data)
483
690
 
@@ -485,6 +692,7 @@ class ClientMethods(ABC):
485
692
  self,
486
693
  *,
487
694
  requests: list[async_batch_t.AsyncBatchRequest],
695
+ _request_options: client_config_t.RequestOptions | None = None,
488
696
  ) -> execute_batch_load_async_t.Data:
489
697
  """Run multiple API calls via one request
490
698
 
@@ -496,14 +704,46 @@ class ClientMethods(ABC):
496
704
  method=execute_batch_load_async_t.ENDPOINT_METHOD,
497
705
  endpoint=execute_batch_load_async_t.ENDPOINT_PATH,
498
706
  args=args,
707
+ request_options=_request_options,
499
708
  )
500
709
  return self.do_request(api_request=api_request, return_type=execute_batch_load_async_t.Data)
501
710
 
711
+ def export_entities(
712
+ self,
713
+ *,
714
+ config_key: identifier_t.IdentifierKey,
715
+ type: exports_t.ExportType = exports_t.ExportType.EXCEL,
716
+ client_timezone: exports_t.ListingExportUserTimezone | None = None,
717
+ limit: int | None = None,
718
+ attributes: list[export_entities_t.ListingAttribute] | None = None,
719
+ _request_options: client_config_t.RequestOptions | None = None,
720
+ ) -> export_entities_t.Data:
721
+ """Uses a structured loading configuration to export entities in the system. This endpoint is asynchronous, and returns the job ID that can be used to query the status of the export.
722
+
723
+ :param config_key: The configuration reference for the listing config
724
+ :param limit: The number of data points to return. If not filled in, all filtered entities will be included in the export.
725
+ """
726
+ args = export_entities_t.Arguments(
727
+ config_key=config_key,
728
+ client_timezone=client_timezone,
729
+ limit=limit,
730
+ type=type,
731
+ attributes=attributes,
732
+ )
733
+ api_request = APIRequest(
734
+ method=export_entities_t.ENDPOINT_METHOD,
735
+ endpoint=export_entities_t.ENDPOINT_PATH,
736
+ args=args,
737
+ request_options=_request_options,
738
+ )
739
+ return self.do_request(api_request=api_request, return_type=export_entities_t.Data)
740
+
502
741
  def get_column_calculation_values(
503
742
  self,
504
743
  *,
505
744
  recipe_keys: list[identifier_t.IdentifierKey],
506
745
  calculation_key: identifier_t.IdentifierKey,
746
+ _request_options: client_config_t.RequestOptions | None = None,
507
747
  ) -> get_column_calculation_values_t.Data:
508
748
  """Get the values for a column calculations for recipes
509
749
 
@@ -518,14 +758,33 @@ class ClientMethods(ABC):
518
758
  method=get_column_calculation_values_t.ENDPOINT_METHOD,
519
759
  endpoint=get_column_calculation_values_t.ENDPOINT_PATH,
520
760
  args=args,
761
+ request_options=_request_options,
521
762
  )
522
763
  return self.do_request(api_request=api_request, return_type=get_column_calculation_values_t.Data)
523
764
 
765
+ def get_current_user_info(
766
+ self,
767
+ *,
768
+ _request_options: client_config_t.RequestOptions | None = None,
769
+ ) -> get_current_user_info_t.Data:
770
+ """Return information about the current user
771
+
772
+ """
773
+ args = get_current_user_info_t.Arguments()
774
+ api_request = APIRequest(
775
+ method=get_current_user_info_t.ENDPOINT_METHOD,
776
+ endpoint=get_current_user_info_t.ENDPOINT_PATH,
777
+ args=args,
778
+ request_options=_request_options,
779
+ )
780
+ return self.do_request(api_request=api_request, return_type=get_current_user_info_t.Data)
781
+
524
782
  def get_curve(
525
783
  self,
526
784
  *,
527
- recipe_output_id: typing.Optional[base_t.ObjectId] = None,
528
- recipe_input_id: typing.Optional[base_t.ObjectId] = None,
785
+ recipe_output_id: base_t.ObjectId | None = None,
786
+ recipe_input_id: base_t.ObjectId | None = None,
787
+ _request_options: client_config_t.RequestOptions | None = None,
529
788
  ) -> get_curve_t.Data:
530
789
  """Returns an array of values for the specified curve id.
531
790
 
@@ -540,6 +799,7 @@ class ClientMethods(ABC):
540
799
  method=get_curve_t.ENDPOINT_METHOD,
541
800
  endpoint=get_curve_t.ENDPOINT_PATH,
542
801
  args=args,
802
+ request_options=_request_options,
543
803
  )
544
804
  return self.do_request(api_request=api_request, return_type=get_curve_t.Data)
545
805
 
@@ -548,6 +808,7 @@ class ClientMethods(ABC):
548
808
  *,
549
809
  entity_ids: list[base_t.ObjectId],
550
810
  entity_type: entity_t.EntityType,
811
+ _request_options: client_config_t.RequestOptions | None = None,
551
812
  ) -> get_entities_data_t.Data:
552
813
  """Gets the details for a passed entity
553
814
 
@@ -562,6 +823,7 @@ class ClientMethods(ABC):
562
823
  method=get_entities_data_t.ENDPOINT_METHOD,
563
824
  endpoint=get_entities_data_t.ENDPOINT_PATH,
564
825
  args=args,
826
+ request_options=_request_options,
565
827
  )
566
828
  return self.do_request(api_request=api_request, return_type=get_entities_data_t.Data)
567
829
 
@@ -569,10 +831,11 @@ class ClientMethods(ABC):
569
831
  self,
570
832
  *,
571
833
  material_family_id: base_t.ObjectId,
572
- input_ids: typing.Optional[list[base_t.ObjectId]],
573
- is_parameter: typing.Optional[bool],
574
- offset: typing.Optional[typing.Optional[int]] = None,
575
- limit: typing.Optional[typing.Optional[int]] = None,
834
+ input_ids: list[base_t.ObjectId] | None,
835
+ is_parameter: bool | None,
836
+ offset: int | None = None,
837
+ limit: int | None = None,
838
+ _request_options: client_config_t.RequestOptions | None = None,
576
839
  ) -> get_input_data_t.Data:
577
840
  """Gets the attribute, categorization and other metadata associated with a set of inputs. An input is either an ingredient or process parameter, with metadata and calculations assigned separately
578
841
 
@@ -593,6 +856,7 @@ class ClientMethods(ABC):
593
856
  method=get_input_data_t.ENDPOINT_METHOD,
594
857
  endpoint=get_input_data_t.ENDPOINT_PATH,
595
858
  args=args,
859
+ request_options=_request_options,
596
860
  )
597
861
  return self.do_request(api_request=api_request, return_type=get_input_data_t.Data)
598
862
 
@@ -600,6 +864,7 @@ class ClientMethods(ABC):
600
864
  self,
601
865
  *,
602
866
  material_family_id: base_t.ObjectId,
867
+ _request_options: client_config_t.RequestOptions | None = None,
603
868
  ) -> get_input_group_names_t.Data:
604
869
  """Gets the name of all input groups in a material family that either the user created, or are shared to all users.
605
870
 
@@ -612,6 +877,7 @@ class ClientMethods(ABC):
612
877
  method=get_input_group_names_t.ENDPOINT_METHOD,
613
878
  endpoint=get_input_group_names_t.ENDPOINT_PATH,
614
879
  args=args,
880
+ request_options=_request_options,
615
881
  )
616
882
  return self.do_request(api_request=api_request, return_type=get_input_group_names_t.Data)
617
883
 
@@ -619,9 +885,10 @@ class ClientMethods(ABC):
619
885
  self,
620
886
  *,
621
887
  material_family_id: base_t.ObjectId,
622
- is_parameter: typing.Optional[bool],
623
- offset: typing.Optional[typing.Optional[int]] = None,
624
- limit: typing.Optional[typing.Optional[int]] = None,
888
+ is_parameter: bool | None,
889
+ offset: int | None = None,
890
+ limit: int | None = None,
891
+ _request_options: client_config_t.RequestOptions | None = None,
625
892
  ) -> get_input_names_t.Data:
626
893
  """Gets the name of all inputs for a material family. An input is either an ingredient or process parameter, with metadata and calculations assigned separately
627
894
 
@@ -640,6 +907,7 @@ class ClientMethods(ABC):
640
907
  method=get_input_names_t.ENDPOINT_METHOD,
641
908
  endpoint=get_input_names_t.ENDPOINT_PATH,
642
909
  args=args,
910
+ request_options=_request_options,
643
911
  )
644
912
  return self.do_request(api_request=api_request, return_type=get_input_names_t.Data)
645
913
 
@@ -647,6 +915,7 @@ class ClientMethods(ABC):
647
915
  self,
648
916
  *,
649
917
  input_ids: list[base_t.ObjectId],
918
+ _request_options: client_config_t.RequestOptions | None = None,
650
919
  ) -> get_inputs_data_t.Data:
651
920
  """Gets the details for passed input ids
652
921
 
@@ -659,6 +928,7 @@ class ClientMethods(ABC):
659
928
  method=get_inputs_data_t.ENDPOINT_METHOD,
660
929
  endpoint=get_inputs_data_t.ENDPOINT_PATH,
661
930
  args=args,
931
+ request_options=_request_options,
662
932
  )
663
933
  return self.do_request(api_request=api_request, return_type=get_inputs_data_t.Data)
664
934
 
@@ -666,9 +936,10 @@ class ClientMethods(ABC):
666
936
  self,
667
937
  *,
668
938
  material_family_id: base_t.ObjectId,
669
- output_ids: typing.Optional[list[base_t.ObjectId]] = None,
670
- offset: typing.Optional[int] = None,
671
- limit: typing.Optional[int] = None,
939
+ output_ids: list[base_t.ObjectId] | None = None,
940
+ offset: int | None = None,
941
+ limit: int | None = None,
942
+ _request_options: client_config_t.RequestOptions | None = None,
672
943
  ) -> get_output_data_t.Data:
673
944
  """Gets the attribute, categorization and other metadata associated with a set of outputs
674
945
 
@@ -687,6 +958,7 @@ class ClientMethods(ABC):
687
958
  method=get_output_data_t.ENDPOINT_METHOD,
688
959
  endpoint=get_output_data_t.ENDPOINT_PATH,
689
960
  args=args,
961
+ request_options=_request_options,
690
962
  )
691
963
  return self.do_request(api_request=api_request, return_type=get_output_data_t.Data)
692
964
 
@@ -694,8 +966,9 @@ class ClientMethods(ABC):
694
966
  self,
695
967
  *,
696
968
  material_family_id: base_t.ObjectId,
697
- offset: typing.Optional[int] = None,
698
- limit: typing.Optional[int] = None,
969
+ offset: int | None = None,
970
+ limit: int | None = None,
971
+ _request_options: client_config_t.RequestOptions | None = None,
699
972
  ) -> get_output_names_t.Data:
700
973
  """Gets the name of all outputs for a material family. An output represents a measurement value of any time (numeric, text, curve, etc). This includes calculations based off of other outputs, such as a calculated change over time
701
974
 
@@ -712,6 +985,7 @@ class ClientMethods(ABC):
712
985
  method=get_output_names_t.ENDPOINT_METHOD,
713
986
  endpoint=get_output_names_t.ENDPOINT_PATH,
714
987
  args=args,
988
+ request_options=_request_options,
715
989
  )
716
990
  return self.do_request(api_request=api_request, return_type=get_output_names_t.Data)
717
991
 
@@ -719,7 +993,8 @@ class ClientMethods(ABC):
719
993
  self,
720
994
  *,
721
995
  all_material_families: bool,
722
- material_family_id: typing.Optional[base_t.ObjectId],
996
+ material_family_id: base_t.ObjectId | None,
997
+ _request_options: client_config_t.RequestOptions | None = None,
723
998
  ) -> get_projects_t.Data:
724
999
  """Gets either all projects created in the platform, or the projects associated with a material family ID. Projects are where experiments are placed in Uncountable, similar to folders in a directory structure
725
1000
 
@@ -734,6 +1009,7 @@ class ClientMethods(ABC):
734
1009
  method=get_projects_t.ENDPOINT_METHOD,
735
1010
  endpoint=get_projects_t.ENDPOINT_PATH,
736
1011
  args=args,
1012
+ request_options=_request_options,
737
1013
  )
738
1014
  return self.do_request(api_request=api_request, return_type=get_projects_t.Data)
739
1015
 
@@ -741,8 +1017,9 @@ class ClientMethods(ABC):
741
1017
  self,
742
1018
  *,
743
1019
  project_ids: list[base_t.ObjectId],
744
- offset: typing.Optional[typing.Optional[int]] = None,
745
- limit: typing.Optional[typing.Optional[int]] = None,
1020
+ offset: int | None = None,
1021
+ limit: int | None = None,
1022
+ _request_options: client_config_t.RequestOptions | None = None,
746
1023
  ) -> get_projects_data_t.Data:
747
1024
  """Gets either all data associated with a set of projects created in the platform. Because Uncountables recipe structure is complex, various data values are exploded out to increase efficiency in parsing, and this page is paginated to prevent too large of return values
748
1025
 
@@ -759,6 +1036,7 @@ class ClientMethods(ABC):
759
1036
  method=get_projects_data_t.ENDPOINT_METHOD,
760
1037
  endpoint=get_projects_data_t.ENDPOINT_PATH,
761
1038
  args=args,
1039
+ request_options=_request_options,
762
1040
  )
763
1041
  return self.do_request(api_request=api_request, return_type=get_projects_data_t.Data)
764
1042
 
@@ -766,7 +1044,8 @@ class ClientMethods(ABC):
766
1044
  self,
767
1045
  *,
768
1046
  recipe_ids: list[base_t.ObjectId],
769
- calculation_ids: typing.Optional[list[base_t.ObjectId]] = None,
1047
+ calculation_ids: list[base_t.ObjectId] | None = None,
1048
+ _request_options: client_config_t.RequestOptions | None = None,
770
1049
  ) -> get_recipe_calculations_t.Data:
771
1050
  """Gets the calculations for the passed recipes
772
1051
 
@@ -781,6 +1060,7 @@ class ClientMethods(ABC):
781
1060
  method=get_recipe_calculations_t.ENDPOINT_METHOD,
782
1061
  endpoint=get_recipe_calculations_t.ENDPOINT_PATH,
783
1062
  args=args,
1063
+ request_options=_request_options,
784
1064
  )
785
1065
  return self.do_request(api_request=api_request, return_type=get_recipe_calculations_t.Data)
786
1066
 
@@ -789,7 +1069,8 @@ class ClientMethods(ABC):
789
1069
  *,
790
1070
  recipe_ids: list[base_t.ObjectId],
791
1071
  depth: int = 1,
792
- link_types: typing.Optional[list[recipe_links_t.RecipeLinkType]],
1072
+ link_types: list[recipe_links_t.RecipeLinkType] | None,
1073
+ _request_options: client_config_t.RequestOptions | None = None,
793
1074
  ) -> get_recipe_links_t.Data:
794
1075
  """Gets the links for the passed recipes
795
1076
 
@@ -806,6 +1087,7 @@ class ClientMethods(ABC):
806
1087
  method=get_recipe_links_t.ENDPOINT_METHOD,
807
1088
  endpoint=get_recipe_links_t.ENDPOINT_PATH,
808
1089
  args=args,
1090
+ request_options=_request_options,
809
1091
  )
810
1092
  return self.do_request(api_request=api_request, return_type=get_recipe_links_t.Data)
811
1093
 
@@ -813,9 +1095,10 @@ class ClientMethods(ABC):
813
1095
  self,
814
1096
  *,
815
1097
  material_family_id: base_t.ObjectId,
816
- recipe_metadata_ids: typing.Optional[list[base_t.ObjectId]],
817
- offset: typing.Optional[typing.Optional[int]] = None,
818
- limit: typing.Optional[typing.Optional[int]] = None,
1098
+ recipe_metadata_ids: list[base_t.ObjectId] | None,
1099
+ offset: int | None = None,
1100
+ limit: int | None = None,
1101
+ _request_options: client_config_t.RequestOptions | None = None,
819
1102
  ) -> get_recipe_metadata_data_t.Data:
820
1103
  """Gets the recipe metadata. Recipe metadata is data associated with experiments that is not an input, output or calculation, such as a sample ID.
821
1104
 
@@ -834,6 +1117,7 @@ class ClientMethods(ABC):
834
1117
  method=get_recipe_metadata_data_t.ENDPOINT_METHOD,
835
1118
  endpoint=get_recipe_metadata_data_t.ENDPOINT_PATH,
836
1119
  args=args,
1120
+ request_options=_request_options,
837
1121
  )
838
1122
  return self.do_request(api_request=api_request, return_type=get_recipe_metadata_data_t.Data)
839
1123
 
@@ -841,6 +1125,7 @@ class ClientMethods(ABC):
841
1125
  self,
842
1126
  *,
843
1127
  project_id: base_t.ObjectId,
1128
+ _request_options: client_config_t.RequestOptions | None = None,
844
1129
  ) -> get_recipe_names_t.Data:
845
1130
  """Gets the name of all recipes (or experiments, used as synonyms by Uncountable) for a project. The call external_get_projects can be used to find projects
846
1131
 
@@ -853,6 +1138,7 @@ class ClientMethods(ABC):
853
1138
  method=get_recipe_names_t.ENDPOINT_METHOD,
854
1139
  endpoint=get_recipe_names_t.ENDPOINT_PATH,
855
1140
  args=args,
1141
+ request_options=_request_options,
856
1142
  )
857
1143
  return self.do_request(api_request=api_request, return_type=get_recipe_names_t.Data)
858
1144
 
@@ -860,6 +1146,7 @@ class ClientMethods(ABC):
860
1146
  self,
861
1147
  *,
862
1148
  recipe_output_ids: list[base_t.ObjectId],
1149
+ _request_options: client_config_t.RequestOptions | None = None,
863
1150
  ) -> get_recipe_output_metadata_t.Data:
864
1151
  """Gets the metadata values for the passed recipe outputs
865
1152
 
@@ -872,16 +1159,19 @@ class ClientMethods(ABC):
872
1159
  method=get_recipe_output_metadata_t.ENDPOINT_METHOD,
873
1160
  endpoint=get_recipe_output_metadata_t.ENDPOINT_PATH,
874
1161
  args=args,
1162
+ request_options=_request_options,
875
1163
  )
876
1164
  return self.do_request(api_request=api_request, return_type=get_recipe_output_metadata_t.Data)
877
1165
 
878
1166
  def get_recipes_data(
879
1167
  self,
880
1168
  *,
881
- recipe_ids: typing.Optional[typing.Optional[list[base_t.ObjectId]]] = None,
882
- project_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None,
883
- offset: typing.Optional[typing.Optional[int]] = None,
884
- limit: typing.Optional[typing.Optional[int]] = None,
1169
+ recipe_ids: list[base_t.ObjectId] | None = None,
1170
+ project_id: base_t.ObjectId | None = None,
1171
+ offset: int | None = None,
1172
+ limit: int | None = None,
1173
+ empty_output_behavior: get_recipes_data_t.RecipeOutputInclusion | None = None,
1174
+ _request_options: client_config_t.RequestOptions | None = None,
885
1175
  ) -> get_recipes_data_t.Data:
886
1176
  """Gets all data associated with a set of recipes. Because Uncountables recipe structure is complex, various data values are exploded out to increase efficiency in parsing, and this page is paginated to prevent too large of return values
887
1177
 
@@ -889,17 +1179,20 @@ class ClientMethods(ABC):
889
1179
  :param project_id: The projects to get the data from. Either these or recipe_ids must be filled in
890
1180
  :param offset: Used for pagination. All pagination is done in order of Recipe ID. [Pagination More Info](#pagination)
891
1181
  :param limit: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
1182
+ :param empty_output_behavior: Recipe output inclusion behavior for empty outputs. Empty recipe outputs are outputs added to the experiment that do not have a value associated with them.
892
1183
  """
893
1184
  args = get_recipes_data_t.Arguments(
894
1185
  recipe_ids=recipe_ids,
895
1186
  project_id=project_id,
896
1187
  offset=offset,
897
1188
  limit=limit,
1189
+ empty_output_behavior=empty_output_behavior,
898
1190
  )
899
1191
  api_request = APIRequest(
900
1192
  method=get_recipes_data_t.ENDPOINT_METHOD,
901
1193
  endpoint=get_recipes_data_t.ENDPOINT_PATH,
902
1194
  args=args,
1195
+ request_options=_request_options,
903
1196
  )
904
1197
  return self.do_request(api_request=api_request, return_type=get_recipes_data_t.Data)
905
1198
 
@@ -909,9 +1202,10 @@ class ClientMethods(ABC):
909
1202
  entity_type: entity_t.LimitedEntityType,
910
1203
  entity_key: identifier_t.IdentifierKey,
911
1204
  permission_types: list[entity_t.GrantableEntityPermissionType],
912
- user_keys: typing.Optional[list[identifier_t.IdentifierKey]] = None,
913
- user_group_keys: typing.Optional[list[identifier_t.IdentifierKey]] = None,
914
- all_users: typing.Optional[bool] = None,
1205
+ user_keys: list[identifier_t.IdentifierKey] | None = None,
1206
+ user_group_keys: list[identifier_t.IdentifierKey] | None = None,
1207
+ all_users: bool | None = None,
1208
+ _request_options: client_config_t.RequestOptions | None = None,
915
1209
  ) -> grant_entity_permissions_t.Data:
916
1210
  """Grant entity permissions to a list of users or user groups or to all users.
917
1211
 
@@ -928,6 +1222,7 @@ class ClientMethods(ABC):
928
1222
  method=grant_entity_permissions_t.ENDPOINT_METHOD,
929
1223
  endpoint=grant_entity_permissions_t.ENDPOINT_PATH,
930
1224
  args=args,
1225
+ request_options=_request_options,
931
1226
  )
932
1227
  return self.do_request(api_request=api_request, return_type=grant_entity_permissions_t.Data)
933
1228
 
@@ -936,8 +1231,9 @@ class ClientMethods(ABC):
936
1231
  *,
937
1232
  uploader_key: identifier_t.IdentifierKey,
938
1233
  destination: generic_upload_t.UploadDestination,
939
- file_id: typing.Optional[base_t.ObjectId] = None,
940
- file_ids: typing.Optional[list[base_t.ObjectId]] = None,
1234
+ file_id: base_t.ObjectId | None = None,
1235
+ file_ids: list[base_t.ObjectId] | None = None,
1236
+ _request_options: client_config_t.RequestOptions | None = None,
941
1237
  ) -> invoke_uploader_t.Data:
942
1238
  """Runs a file through an uploader.
943
1239
 
@@ -953,17 +1249,50 @@ class ClientMethods(ABC):
953
1249
  method=invoke_uploader_t.ENDPOINT_METHOD,
954
1250
  endpoint=invoke_uploader_t.ENDPOINT_PATH,
955
1251
  args=args,
1252
+ request_options=_request_options,
956
1253
  )
957
1254
  return self.do_request(api_request=api_request, return_type=invoke_uploader_t.Data)
958
1255
 
1256
+ def list_aggregate(
1257
+ self,
1258
+ *,
1259
+ config_reference: str,
1260
+ attribute_values: list[list_aggregate_t.AttributeValue] | None = None,
1261
+ offset: int | None = None,
1262
+ limit: int | None = None,
1263
+ _request_options: client_config_t.RequestOptions | None = None,
1264
+ ) -> list_aggregate_t.Data:
1265
+ """Uses a structured loading configuration to list aggregated data from the platform
1266
+
1267
+ :param config_reference: The configuration reference name for the listing config
1268
+ :param attribute_values: Attributes to pass to the configuration for parameterizing filters
1269
+ :param offset: Used for pagination. Pagination is done based on the sorting of the config. [Pagination More Info](#pagination)
1270
+ :param limit: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
1271
+ """
1272
+ args = list_aggregate_t.Arguments(
1273
+ config_reference=config_reference,
1274
+ attribute_values=attribute_values,
1275
+ offset=offset,
1276
+ limit=limit,
1277
+ )
1278
+ api_request = APIRequest(
1279
+ method=list_aggregate_t.ENDPOINT_METHOD,
1280
+ endpoint=list_aggregate_t.ENDPOINT_PATH,
1281
+ args=args,
1282
+ request_options=_request_options,
1283
+ )
1284
+ return self.do_request(api_request=api_request, return_type=list_aggregate_t.Data)
1285
+
959
1286
  def list_entities(
960
1287
  self,
961
1288
  *,
962
1289
  config_reference: str,
963
- entity_type: typing.Optional[entity_t.EntityType] = None,
964
- attributes: typing.Optional[dict[OpaqueKey, base_t.JsonValue]] = None,
965
- offset: typing.Optional[typing.Optional[int]] = None,
966
- limit: typing.Optional[typing.Optional[int]] = None,
1290
+ entity_type: entity_t.EntityType | None = None,
1291
+ attributes: dict[OpaqueKey, base_t.JsonValue] | None = None,
1292
+ offset: int | None = None,
1293
+ limit: int | None = None,
1294
+ additional_filter_configs: list[list_entities_t.AdditionalFilterConfig] | None = None,
1295
+ _request_options: client_config_t.RequestOptions | None = None,
967
1296
  ) -> list_entities_t.Data:
968
1297
  """Uses a structured loading configuration to list entities in the system
969
1298
 
@@ -972,6 +1301,7 @@ class ClientMethods(ABC):
972
1301
  :param attributes: Attributes to pass to the configuration for parameterizing filters
973
1302
  :param offset: Used for pagination. Pagination is done based on the sorting of the config. [Pagination More Info](#pagination)
974
1303
  :param limit: The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100. [Pagination More Info](#pagination)
1304
+ :param additional_filter_configs: Advanced property: Additional filter configurations to apply to the listing. A maximum of 10 additional filter configs are supported.
975
1305
  """
976
1306
  args = list_entities_t.Arguments(
977
1307
  entity_type=entity_type,
@@ -979,11 +1309,13 @@ class ClientMethods(ABC):
979
1309
  attributes=attributes,
980
1310
  offset=offset,
981
1311
  limit=limit,
1312
+ additional_filter_configs=additional_filter_configs,
982
1313
  )
983
1314
  api_request = APIRequest(
984
1315
  method=list_entities_t.ENDPOINT_METHOD,
985
1316
  endpoint=list_entities_t.ENDPOINT_PATH,
986
1317
  args=args,
1318
+ request_options=_request_options,
987
1319
  )
988
1320
  return self.do_request(api_request=api_request, return_type=list_entities_t.Data)
989
1321
 
@@ -992,8 +1324,9 @@ class ClientMethods(ABC):
992
1324
  *,
993
1325
  spec: id_source_t.IdSourceSpec,
994
1326
  search_label: str,
995
- offset: typing.Optional[typing.Optional[int]] = None,
996
- limit: typing.Optional[typing.Optional[int]] = None,
1327
+ offset: int | None = None,
1328
+ limit: int | None = None,
1329
+ _request_options: client_config_t.RequestOptions | None = None,
997
1330
  ) -> list_id_source_t.Data:
998
1331
  """Lists id and label pairs
999
1332
 
@@ -1012,6 +1345,7 @@ class ClientMethods(ABC):
1012
1345
  method=list_id_source_t.ENDPOINT_METHOD,
1013
1346
  endpoint=list_id_source_t.ENDPOINT_PATH,
1014
1347
  args=args,
1348
+ request_options=_request_options,
1015
1349
  )
1016
1350
  return self.do_request(api_request=api_request, return_type=list_id_source_t.Data)
1017
1351
 
@@ -1020,7 +1354,8 @@ class ClientMethods(ABC):
1020
1354
  *,
1021
1355
  entity_key: identifier_t.IdentifierKey,
1022
1356
  entity_type: entity_t.EntityType,
1023
- globally_removable: typing.Optional[bool] = None,
1357
+ globally_removable: bool | None = None,
1358
+ _request_options: client_config_t.RequestOptions | None = None,
1024
1359
  ) -> lock_entity_t.Data:
1025
1360
  """Lock an entity
1026
1361
 
@@ -1036,6 +1371,7 @@ class ClientMethods(ABC):
1036
1371
  method=lock_entity_t.ENDPOINT_METHOD,
1037
1372
  endpoint=lock_entity_t.ENDPOINT_PATH,
1038
1373
  args=args,
1374
+ request_options=_request_options,
1039
1375
  )
1040
1376
  return self.do_request(api_request=api_request, return_type=lock_entity_t.Data)
1041
1377
 
@@ -1045,8 +1381,9 @@ class ClientMethods(ABC):
1045
1381
  type: lock_recipes_t.RecipeLockType = lock_recipes_t.RecipeLockType.ALL,
1046
1382
  recipes: list[identifier_t.IdentifierKey],
1047
1383
  globally_removable: bool,
1048
- lock_samples: typing.Optional[bool] = None,
1049
- comments: typing.Optional[str] = None,
1384
+ lock_samples: bool | None = None,
1385
+ comments: str | None = None,
1386
+ _request_options: client_config_t.RequestOptions | None = None,
1050
1387
  ) -> lock_recipes_t.Data:
1051
1388
  """Lock experiments. Experiments will require unlocking to be editable. Edits to the experiments are blocked while they are locked.
1052
1389
 
@@ -1070,14 +1407,38 @@ class ClientMethods(ABC):
1070
1407
  method=lock_recipes_t.ENDPOINT_METHOD,
1071
1408
  endpoint=lock_recipes_t.ENDPOINT_PATH,
1072
1409
  args=args,
1410
+ request_options=_request_options,
1073
1411
  )
1074
1412
  return self.do_request(api_request=api_request, return_type=lock_recipes_t.Data)
1075
1413
 
1414
+ def lookup_entity(
1415
+ self,
1416
+ *,
1417
+ entity_type: entity_t.EntityType,
1418
+ query: lookup_entity_t.LookupEntityQuery,
1419
+ _request_options: client_config_t.RequestOptions | None = None,
1420
+ ) -> lookup_entity_t.Data:
1421
+ """Look up an entity based on an identifier or field values
1422
+
1423
+ """
1424
+ args = lookup_entity_t.Arguments(
1425
+ entity_type=entity_type,
1426
+ query=query,
1427
+ )
1428
+ api_request = APIRequest(
1429
+ method=lookup_entity_t.ENDPOINT_METHOD,
1430
+ endpoint=lookup_entity_t.ENDPOINT_PATH,
1431
+ args=args,
1432
+ request_options=_request_options,
1433
+ )
1434
+ return self.do_request(api_request=api_request, return_type=lookup_entity_t.Data)
1435
+
1076
1436
  def match_id_source(
1077
1437
  self,
1078
1438
  *,
1079
1439
  spec: id_source_t.IdSourceSpec,
1080
1440
  names: list[str],
1441
+ _request_options: client_config_t.RequestOptions | None = None,
1081
1442
  ) -> match_id_source_t.Data:
1082
1443
  """Lists id and label pairs
1083
1444
 
@@ -1092,14 +1453,66 @@ class ClientMethods(ABC):
1092
1453
  method=match_id_source_t.ENDPOINT_METHOD,
1093
1454
  endpoint=match_id_source_t.ENDPOINT_PATH,
1094
1455
  args=args,
1456
+ request_options=_request_options,
1095
1457
  )
1096
1458
  return self.do_request(api_request=api_request, return_type=match_id_source_t.Data)
1097
1459
 
1460
+ def push_notification(
1461
+ self,
1462
+ *,
1463
+ notification_targets: list[notifications_t.NotificationTarget],
1464
+ subject: str,
1465
+ message: str,
1466
+ display_notice: bool = False,
1467
+ entity: entity_t.EntityIdentifier | None = None,
1468
+ notice_configuration: notices_t.NotificationNoticeConfiguration | None = None,
1469
+ _request_options: client_config_t.RequestOptions | None = None,
1470
+ ) -> push_notification_t.Data:
1471
+ """Push a notification to a user or user group
1472
+
1473
+ """
1474
+ args = push_notification_t.Arguments(
1475
+ notification_targets=notification_targets,
1476
+ subject=subject,
1477
+ message=message,
1478
+ entity=entity,
1479
+ display_notice=display_notice,
1480
+ notice_configuration=notice_configuration,
1481
+ )
1482
+ api_request = APIRequest(
1483
+ method=push_notification_t.ENDPOINT_METHOD,
1484
+ endpoint=push_notification_t.ENDPOINT_PATH,
1485
+ args=args,
1486
+ request_options=_request_options,
1487
+ )
1488
+ return self.do_request(api_request=api_request, return_type=push_notification_t.Data)
1489
+
1490
+ def register_sockets_token(
1491
+ self,
1492
+ *,
1493
+ socket_request: sockets_t.SocketTokenRequest,
1494
+ _request_options: client_config_t.RequestOptions | None = None,
1495
+ ) -> register_sockets_token_t.Data:
1496
+ """Request token for connecting to sockets server
1497
+
1498
+ """
1499
+ args = register_sockets_token_t.Arguments(
1500
+ socket_request=socket_request,
1501
+ )
1502
+ api_request = APIRequest(
1503
+ method=register_sockets_token_t.ENDPOINT_METHOD,
1504
+ endpoint=register_sockets_token_t.ENDPOINT_PATH,
1505
+ args=args,
1506
+ request_options=_request_options,
1507
+ )
1508
+ return self.do_request(api_request=api_request, return_type=register_sockets_token_t.Data)
1509
+
1098
1510
  def remove_recipe_from_project(
1099
1511
  self,
1100
1512
  *,
1101
1513
  recipe_key: identifier_t.IdentifierKey,
1102
1514
  project_key: identifier_t.IdentifierKey,
1515
+ _request_options: client_config_t.RequestOptions | None = None,
1103
1516
  ) -> remove_recipe_from_project_t.Data:
1104
1517
  """Removes a recipe from a project
1105
1518
 
@@ -1114,6 +1527,7 @@ class ClientMethods(ABC):
1114
1527
  method=remove_recipe_from_project_t.ENDPOINT_METHOD,
1115
1528
  endpoint=remove_recipe_from_project_t.ENDPOINT_PATH,
1116
1529
  args=args,
1530
+ request_options=_request_options,
1117
1531
  )
1118
1532
  return self.do_request(api_request=api_request, return_type=remove_recipe_from_project_t.Data)
1119
1533
 
@@ -1122,7 +1536,8 @@ class ClientMethods(ABC):
1122
1536
  *,
1123
1537
  recipe_from_key: identifier_t.IdentifierKey,
1124
1538
  recipe_to_key: identifier_t.IdentifierKey,
1125
- link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]],
1539
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK] | typing.Literal[recipe_links_t.RecipeLinkType.PREVIOUS_EXPERIMENT],
1540
+ _request_options: client_config_t.RequestOptions | None = None,
1126
1541
  ) -> remove_recipe_link_t.Data:
1127
1542
  """Remove a link between two recipes. Skip if the link doesn't already exist
1128
1543
 
@@ -1139,14 +1554,16 @@ class ClientMethods(ABC):
1139
1554
  method=remove_recipe_link_t.ENDPOINT_METHOD,
1140
1555
  endpoint=remove_recipe_link_t.ENDPOINT_PATH,
1141
1556
  args=args,
1557
+ request_options=_request_options,
1142
1558
  )
1143
1559
  return self.do_request(api_request=api_request, return_type=remove_recipe_link_t.Data)
1144
1560
 
1145
1561
  def resolve_entity_ids(
1146
1562
  self,
1147
1563
  *,
1148
- entity_ids: list[typing.Union[str, base_t.ObjectId]],
1564
+ entity_ids: list[str | base_t.ObjectId],
1149
1565
  entity_type: entity_t.EntityType,
1566
+ _request_options: client_config_t.RequestOptions | None = None,
1150
1567
  ) -> resolve_entity_ids_t.Data:
1151
1568
  """Gets the names for passed in ids
1152
1569
 
@@ -1161,6 +1578,7 @@ class ClientMethods(ABC):
1161
1578
  method=resolve_entity_ids_t.ENDPOINT_METHOD,
1162
1579
  endpoint=resolve_entity_ids_t.ENDPOINT_PATH,
1163
1580
  args=args,
1581
+ request_options=_request_options,
1164
1582
  )
1165
1583
  return self.do_request(api_request=api_request, return_type=resolve_entity_ids_t.Data)
1166
1584
 
@@ -1168,6 +1586,7 @@ class ClientMethods(ABC):
1168
1586
  self,
1169
1587
  *,
1170
1588
  requested_conditions: list[resolve_output_conditions_t.ConditionRequest],
1589
+ _request_options: client_config_t.RequestOptions | None = None,
1171
1590
  ) -> resolve_output_conditions_t.Data:
1172
1591
  """For the provided set of condition parameter id and values, returns the existing or newly created output condition id for that value and id pair.
1173
1592
 
@@ -1179,6 +1598,7 @@ class ClientMethods(ABC):
1179
1598
  method=resolve_output_conditions_t.ENDPOINT_METHOD,
1180
1599
  endpoint=resolve_output_conditions_t.ENDPOINT_PATH,
1181
1600
  args=args,
1601
+ request_options=_request_options,
1182
1602
  )
1183
1603
  return self.do_request(api_request=api_request, return_type=resolve_output_conditions_t.Data)
1184
1604
 
@@ -1186,7 +1606,8 @@ class ClientMethods(ABC):
1186
1606
  self,
1187
1607
  *,
1188
1608
  trigger_ref_name: str,
1189
- entity: typing.Optional[entity_t.Entity] = None,
1609
+ entity: entity_t.Entity | None = None,
1610
+ _request_options: client_config_t.RequestOptions | None = None,
1190
1611
  ) -> run_trigger_t.Data:
1191
1612
  """Runs a trigger. Requires admin access
1192
1613
 
@@ -1199,6 +1620,7 @@ class ClientMethods(ABC):
1199
1620
  method=run_trigger_t.ENDPOINT_METHOD,
1200
1621
  endpoint=run_trigger_t.ENDPOINT_PATH,
1201
1622
  args=args,
1623
+ request_options=_request_options,
1202
1624
  )
1203
1625
  return self.do_request(api_request=api_request, return_type=run_trigger_t.Data)
1204
1626
 
@@ -1208,8 +1630,9 @@ class ClientMethods(ABC):
1208
1630
  scope: set_core_permissions_t.PermissionsScope,
1209
1631
  permissions_types: list[permissions_t.CorePermissionType],
1210
1632
  update_type: post_base_t.UpdateType,
1211
- user_group_ids: typing.Optional[list[int]] = None,
1212
- user_ids: typing.Optional[list[int]] = None,
1633
+ user_group_ids: list[int] | None = None,
1634
+ user_ids: list[int] | None = None,
1635
+ _request_options: client_config_t.RequestOptions | None = None,
1213
1636
  ) -> set_core_permissions_t.Data:
1214
1637
  """Sets recipe related permissions
1215
1638
 
@@ -1229,13 +1652,39 @@ class ClientMethods(ABC):
1229
1652
  method=set_core_permissions_t.ENDPOINT_METHOD,
1230
1653
  endpoint=set_core_permissions_t.ENDPOINT_PATH,
1231
1654
  args=args,
1655
+ request_options=_request_options,
1232
1656
  )
1233
1657
  return self.do_request(api_request=api_request, return_type=set_core_permissions_t.Data)
1234
1658
 
1659
+ def set_entity_field_values(
1660
+ self,
1661
+ *,
1662
+ entity_identifier: entity_t.EntityIdentifier,
1663
+ field_values: list[field_values_t.FieldArgumentValue],
1664
+ _request_options: client_config_t.RequestOptions | None = None,
1665
+ ) -> set_entity_field_values_t.Data:
1666
+ """Sets field values for an entity
1667
+
1668
+ :param entity_identifier: Entity to update
1669
+ :param field_values: Field values to set
1670
+ """
1671
+ args = set_entity_field_values_t.Arguments(
1672
+ entity_identifier=entity_identifier,
1673
+ field_values=field_values,
1674
+ )
1675
+ api_request = APIRequest(
1676
+ method=set_entity_field_values_t.ENDPOINT_METHOD,
1677
+ endpoint=set_entity_field_values_t.ENDPOINT_PATH,
1678
+ args=args,
1679
+ request_options=_request_options,
1680
+ )
1681
+ return self.do_request(api_request=api_request, return_type=set_entity_field_values_t.Data)
1682
+
1235
1683
  def set_input_attribute_values(
1236
1684
  self,
1237
1685
  *,
1238
1686
  attribute_values: list[set_input_attribute_values_t.InputAttributeValue],
1687
+ _request_options: client_config_t.RequestOptions | None = None,
1239
1688
  ) -> set_input_attribute_values_t.Data:
1240
1689
  """Sets attribute values for an input
1241
1690
 
@@ -1248,6 +1697,7 @@ class ClientMethods(ABC):
1248
1697
  method=set_input_attribute_values_t.ENDPOINT_METHOD,
1249
1698
  endpoint=set_input_attribute_values_t.ENDPOINT_PATH,
1250
1699
  args=args,
1700
+ request_options=_request_options,
1251
1701
  )
1252
1702
  return self.do_request(api_request=api_request, return_type=set_input_attribute_values_t.Data)
1253
1703
 
@@ -1255,8 +1705,9 @@ class ClientMethods(ABC):
1255
1705
  self,
1256
1706
  *,
1257
1707
  input_key: identifier_t.IdentifierKey,
1258
- category_id: typing.Optional[int],
1259
- material_family_ids: typing.Optional[list[int]] = None,
1708
+ category_id: int | None,
1709
+ material_family_ids: list[int] | None = None,
1710
+ _request_options: client_config_t.RequestOptions | None = None,
1260
1711
  ) -> set_input_category_t.Data:
1261
1712
  """Sets subcategories for an input
1262
1713
 
@@ -1273,6 +1724,7 @@ class ClientMethods(ABC):
1273
1724
  method=set_input_category_t.ENDPOINT_METHOD,
1274
1725
  endpoint=set_input_category_t.ENDPOINT_PATH,
1275
1726
  args=args,
1727
+ request_options=_request_options,
1276
1728
  )
1277
1729
  return self.do_request(api_request=api_request, return_type=set_input_category_t.Data)
1278
1730
 
@@ -1282,6 +1734,7 @@ class ClientMethods(ABC):
1282
1734
  input_key: identifier_t.IdentifierKey,
1283
1735
  subcategory_ids: list[int],
1284
1736
  update_type: post_base_t.UpdateType,
1737
+ _request_options: client_config_t.RequestOptions | None = None,
1285
1738
  ) -> set_input_subcategories_t.Data:
1286
1739
  """Sets subcategories for an input
1287
1740
 
@@ -1298,6 +1751,7 @@ class ClientMethods(ABC):
1298
1751
  method=set_input_subcategories_t.ENDPOINT_METHOD,
1299
1752
  endpoint=set_input_subcategories_t.ENDPOINT_PATH,
1300
1753
  args=args,
1754
+ request_options=_request_options,
1301
1755
  )
1302
1756
  return self.do_request(api_request=api_request, return_type=set_input_subcategories_t.Data)
1303
1757
 
@@ -1306,6 +1760,7 @@ class ClientMethods(ABC):
1306
1760
  *,
1307
1761
  input_key: identifier_t.IdentifierKey,
1308
1762
  intermediate_type: set_intermediate_type_t.IntermediateType,
1763
+ _request_options: client_config_t.RequestOptions | None = None,
1309
1764
  ) -> set_intermediate_type_t.Data:
1310
1765
  """Sets the type of an intermediate ingredient.
1311
1766
 
@@ -1320,6 +1775,7 @@ class ClientMethods(ABC):
1320
1775
  method=set_intermediate_type_t.ENDPOINT_METHOD,
1321
1776
  endpoint=set_intermediate_type_t.ENDPOINT_PATH,
1322
1777
  args=args,
1778
+ request_options=_request_options,
1323
1779
  )
1324
1780
  return self.do_request(api_request=api_request, return_type=set_intermediate_type_t.Data)
1325
1781
 
@@ -1327,6 +1783,7 @@ class ClientMethods(ABC):
1327
1783
  self,
1328
1784
  *,
1329
1785
  input_data: list[set_recipe_inputs_t.RecipeInputValue],
1786
+ _request_options: client_config_t.RequestOptions | None = None,
1330
1787
  ) -> set_recipe_inputs_t.Data:
1331
1788
  """Sets inputs values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system
1332
1789
 
@@ -1339,6 +1796,7 @@ class ClientMethods(ABC):
1339
1796
  method=set_recipe_inputs_t.ENDPOINT_METHOD,
1340
1797
  endpoint=set_recipe_inputs_t.ENDPOINT_PATH,
1341
1798
  args=args,
1799
+ request_options=_request_options,
1342
1800
  )
1343
1801
  return self.do_request(api_request=api_request, return_type=set_recipe_inputs_t.Data)
1344
1802
 
@@ -1347,6 +1805,7 @@ class ClientMethods(ABC):
1347
1805
  *,
1348
1806
  recipe_key: identifier_t.IdentifierKey,
1349
1807
  recipe_metadata: list[recipe_metadata_t.MetadataValue],
1808
+ _request_options: client_config_t.RequestOptions | None = None,
1350
1809
  ) -> set_recipe_metadata_t.Data:
1351
1810
  """Set metadata values on a recipe
1352
1811
 
@@ -1361,6 +1820,7 @@ class ClientMethods(ABC):
1361
1820
  method=set_recipe_metadata_t.ENDPOINT_METHOD,
1362
1821
  endpoint=set_recipe_metadata_t.ENDPOINT_PATH,
1363
1822
  args=args,
1823
+ request_options=_request_options,
1364
1824
  )
1365
1825
  return self.do_request(api_request=api_request, return_type=set_recipe_metadata_t.Data)
1366
1826
 
@@ -1368,6 +1828,7 @@ class ClientMethods(ABC):
1368
1828
  self,
1369
1829
  *,
1370
1830
  updates: list[set_recipe_output_annotations_t.RecipeOutputUpdateAnnotations],
1831
+ _request_options: client_config_t.RequestOptions | None = None,
1371
1832
  ) -> set_recipe_output_annotations_t.Data:
1372
1833
  """Update annotations for an experiments outputs
1373
1834
 
@@ -1380,6 +1841,7 @@ class ClientMethods(ABC):
1380
1841
  method=set_recipe_output_annotations_t.ENDPOINT_METHOD,
1381
1842
  endpoint=set_recipe_output_annotations_t.ENDPOINT_PATH,
1382
1843
  args=args,
1844
+ request_options=_request_options,
1383
1845
  )
1384
1846
  return self.do_request(api_request=api_request, return_type=set_recipe_output_annotations_t.Data)
1385
1847
 
@@ -1387,6 +1849,7 @@ class ClientMethods(ABC):
1387
1849
  self,
1388
1850
  *,
1389
1851
  output_file_data: set_recipe_output_file_t.RecipeOutputFileValue,
1852
+ _request_options: client_config_t.RequestOptions | None = None,
1390
1853
  ) -> set_recipe_output_file_t.Data:
1391
1854
  """Sets output file value for an experiment. Include a single file as part of the FormData of the request with the filename as the key
1392
1855
 
@@ -1399,6 +1862,7 @@ class ClientMethods(ABC):
1399
1862
  method=set_recipe_output_file_t.ENDPOINT_METHOD,
1400
1863
  endpoint=set_recipe_output_file_t.ENDPOINT_PATH,
1401
1864
  args=args,
1865
+ request_options=_request_options,
1402
1866
  )
1403
1867
  return self.do_request(api_request=api_request, return_type=set_recipe_output_file_t.Data)
1404
1868
 
@@ -1406,6 +1870,7 @@ class ClientMethods(ABC):
1406
1870
  self,
1407
1871
  *,
1408
1872
  output_data: list[set_recipe_outputs_t.RecipeOutputValue],
1873
+ _request_options: client_config_t.RequestOptions | None = None,
1409
1874
  ) -> set_recipe_outputs_t.Data:
1410
1875
  """Sets output values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system
1411
1876
 
@@ -1418,6 +1883,7 @@ class ClientMethods(ABC):
1418
1883
  method=set_recipe_outputs_t.ENDPOINT_METHOD,
1419
1884
  endpoint=set_recipe_outputs_t.ENDPOINT_PATH,
1420
1885
  args=args,
1886
+ request_options=_request_options,
1421
1887
  )
1422
1888
  return self.do_request(api_request=api_request, return_type=set_recipe_outputs_t.Data)
1423
1889
 
@@ -1426,6 +1892,7 @@ class ClientMethods(ABC):
1426
1892
  *,
1427
1893
  recipe_key: identifier_t.IdentifierKey,
1428
1894
  recipe_tag_update: set_recipe_tags_t.RecipeTagUpdate,
1895
+ _request_options: client_config_t.RequestOptions | None = None,
1429
1896
  ) -> set_recipe_tags_t.Data:
1430
1897
  """Modifies recipes tags for a recipe
1431
1898
 
@@ -1440,14 +1907,46 @@ class ClientMethods(ABC):
1440
1907
  method=set_recipe_tags_t.ENDPOINT_METHOD,
1441
1908
  endpoint=set_recipe_tags_t.ENDPOINT_PATH,
1442
1909
  args=args,
1910
+ request_options=_request_options,
1443
1911
  )
1444
1912
  return self.do_request(api_request=api_request, return_type=set_recipe_tags_t.Data)
1445
1913
 
1914
+ def set_recipe_total(
1915
+ self,
1916
+ *,
1917
+ recipe_key: identifier_t.IdentifierKey,
1918
+ value: set_recipe_total_t.ValueNumeric,
1919
+ recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier | None = None,
1920
+ calculation_key: identifier_t.IdentifierKey | None = None,
1921
+ _request_options: client_config_t.RequestOptions | None = None,
1922
+ ) -> set_recipe_total_t.Data:
1923
+ """Updates the Set Total value for a recipe or one of its workflow steps
1924
+
1925
+ :param recipe_key: Identifier for the recipe
1926
+ :param recipe_workflow_step_identifier: Identifier for the recipe workflow step
1927
+ :param value: The quantity in mass, volume, or moles to set for the total
1928
+ :param calculation_key: The linked basis calculation to set
1929
+ """
1930
+ args = set_recipe_total_t.Arguments(
1931
+ recipe_key=recipe_key,
1932
+ recipe_workflow_step_identifier=recipe_workflow_step_identifier,
1933
+ value=value,
1934
+ calculation_key=calculation_key,
1935
+ )
1936
+ api_request = APIRequest(
1937
+ method=set_recipe_total_t.ENDPOINT_METHOD,
1938
+ endpoint=set_recipe_total_t.ENDPOINT_PATH,
1939
+ args=args,
1940
+ request_options=_request_options,
1941
+ )
1942
+ return self.do_request(api_request=api_request, return_type=set_recipe_total_t.Data)
1943
+
1446
1944
  def set_values(
1447
1945
  self,
1448
1946
  *,
1449
1947
  entity: entity_t.Entity,
1450
1948
  values: list[field_values_t.ArgumentValueRefName],
1949
+ _request_options: client_config_t.RequestOptions | None = None,
1451
1950
  ) -> set_values_t.Data:
1452
1951
  """Sets field values for an entity
1453
1952
 
@@ -1460,26 +1959,34 @@ class ClientMethods(ABC):
1460
1959
  method=set_values_t.ENDPOINT_METHOD,
1461
1960
  endpoint=set_values_t.ENDPOINT_PATH,
1462
1961
  args=args,
1962
+ request_options=_request_options,
1463
1963
  )
1464
1964
  return self.do_request(api_request=api_request, return_type=set_values_t.Data)
1465
1965
 
1466
1966
  def transition_entity_phase(
1467
1967
  self,
1468
1968
  *,
1469
- entity: entity_t.Entity,
1470
1969
  transition: transition_entity_phase_t.TransitionIdentifier,
1970
+ entity: entity_t.Entity | None = None,
1971
+ entity_identifier: entity_t.EntityIdentifier | None = None,
1972
+ _request_options: client_config_t.RequestOptions | None = None,
1471
1973
  ) -> transition_entity_phase_t.Data:
1472
1974
  """Transitions an entity from one phase to another
1473
1975
 
1976
+ :param entity: Entity to transition. If entity_identifier is provided, this should be omitted.
1977
+ :param entity_identifier: Identifier of the entity to transition. If entity is provided, this should be omitted.
1978
+ :param transition: Identifier of the transition to perform
1474
1979
  """
1475
1980
  args = transition_entity_phase_t.Arguments(
1476
1981
  entity=entity,
1982
+ entity_identifier=entity_identifier,
1477
1983
  transition=transition,
1478
1984
  )
1479
1985
  api_request = APIRequest(
1480
1986
  method=transition_entity_phase_t.ENDPOINT_METHOD,
1481
1987
  endpoint=transition_entity_phase_t.ENDPOINT_PATH,
1482
1988
  args=args,
1989
+ request_options=_request_options,
1483
1990
  )
1484
1991
  return self.do_request(api_request=api_request, return_type=transition_entity_phase_t.Data)
1485
1992
 
@@ -1487,6 +1994,7 @@ class ClientMethods(ABC):
1487
1994
  self,
1488
1995
  *,
1489
1996
  recipes: list[identifier_t.IdentifierKey],
1997
+ _request_options: client_config_t.RequestOptions | None = None,
1490
1998
  ) -> unarchive_recipes_t.Data:
1491
1999
  """Unarchive/restore the provided recipes
1492
2000
 
@@ -1499,6 +2007,7 @@ class ClientMethods(ABC):
1499
2007
  method=unarchive_recipes_t.ENDPOINT_METHOD,
1500
2008
  endpoint=unarchive_recipes_t.ENDPOINT_PATH,
1501
2009
  args=args,
2010
+ request_options=_request_options,
1502
2011
  )
1503
2012
  return self.do_request(api_request=api_request, return_type=unarchive_recipes_t.Data)
1504
2013
 
@@ -1507,6 +2016,7 @@ class ClientMethods(ABC):
1507
2016
  *,
1508
2017
  entity_key: identifier_t.IdentifierKey,
1509
2018
  entity_type: entity_t.EntityType,
2019
+ _request_options: client_config_t.RequestOptions | None = None,
1510
2020
  ) -> unlock_entity_t.Data:
1511
2021
  """Unlock an entity
1512
2022
 
@@ -1520,6 +2030,7 @@ class ClientMethods(ABC):
1520
2030
  method=unlock_entity_t.ENDPOINT_METHOD,
1521
2031
  endpoint=unlock_entity_t.ENDPOINT_PATH,
1522
2032
  args=args,
2033
+ request_options=_request_options,
1523
2034
  )
1524
2035
  return self.do_request(api_request=api_request, return_type=unlock_entity_t.Data)
1525
2036
 
@@ -1528,7 +2039,8 @@ class ClientMethods(ABC):
1528
2039
  *,
1529
2040
  type: unlock_recipes_t.RecipeUnlockType = unlock_recipes_t.RecipeUnlockType.STANDARD,
1530
2041
  recipes: list[identifier_t.IdentifierKey],
1531
- unlock_samples: typing.Optional[bool] = None,
2042
+ unlock_samples: bool | None = None,
2043
+ _request_options: client_config_t.RequestOptions | None = None,
1532
2044
  ) -> unlock_recipes_t.Data:
1533
2045
  """Unlock experiments. Experiments will edtiable after unlocking if they are currently locked.
1534
2046
 
@@ -1545,6 +2057,7 @@ class ClientMethods(ABC):
1545
2057
  method=unlock_recipes_t.ENDPOINT_METHOD,
1546
2058
  endpoint=unlock_recipes_t.ENDPOINT_PATH,
1547
2059
  args=args,
2060
+ request_options=_request_options,
1548
2061
  )
1549
2062
  return self.do_request(api_request=api_request, return_type=unlock_recipes_t.Data)
1550
2063
 
@@ -1552,9 +2065,10 @@ class ClientMethods(ABC):
1552
2065
  self,
1553
2066
  *,
1554
2067
  entity_key: identifier_t.IdentifierKey,
1555
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.RECIPE_METADATA], typing.Literal[entity_t.EntityType.INGREDIENT], typing.Literal[entity_t.EntityType.OUTPUT], typing.Literal[entity_t.EntityType.CONDITION_PARAMETER], typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE]],
2068
+ entity_type: typing.Literal[entity_t.EntityType.RECIPE_METADATA] | typing.Literal[entity_t.EntityType.INGREDIENT] | typing.Literal[entity_t.EntityType.OUTPUT] | typing.Literal[entity_t.EntityType.CONDITION_PARAMETER] | typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[entity_t.EntityType.INGREDIENT_CATEGORY_ALL],
1556
2069
  material_family_ids: list[base_t.ObjectId],
1557
2070
  update_type: post_base_t.UpdateType,
2071
+ _request_options: client_config_t.RequestOptions | None = None,
1558
2072
  ) -> update_entity_material_families_t.Data:
1559
2073
  """Updates the material families that the entity is available in
1560
2074
 
@@ -1573,14 +2087,44 @@ class ClientMethods(ABC):
1573
2087
  method=update_entity_material_families_t.ENDPOINT_METHOD,
1574
2088
  endpoint=update_entity_material_families_t.ENDPOINT_PATH,
1575
2089
  args=args,
2090
+ request_options=_request_options,
1576
2091
  )
1577
2092
  return self.do_request(api_request=api_request, return_type=update_entity_material_families_t.Data)
1578
2093
 
2094
+ def upsert_condition_match(
2095
+ self,
2096
+ *,
2097
+ explicit_name: bool = False,
2098
+ name: str | None = None,
2099
+ condition_parameters: list[upsert_condition_match_t.ConditionParameter] | None = None,
2100
+ output_conditions: list[identifier_t.IdentifierKey] | None = None,
2101
+ existing_condition_match: identifier_t.IdentifierKey | None = None,
2102
+ _request_options: client_config_t.RequestOptions | None = None,
2103
+ ) -> upsert_condition_match_t.Data:
2104
+ """Creates or updates condition match
2105
+
2106
+ """
2107
+ args = upsert_condition_match_t.Arguments(
2108
+ name=name,
2109
+ condition_parameters=condition_parameters,
2110
+ output_conditions=output_conditions,
2111
+ explicit_name=explicit_name,
2112
+ existing_condition_match=existing_condition_match,
2113
+ )
2114
+ api_request = APIRequest(
2115
+ method=upsert_condition_match_t.ENDPOINT_METHOD,
2116
+ endpoint=upsert_condition_match_t.ENDPOINT_PATH,
2117
+ args=args,
2118
+ request_options=_request_options,
2119
+ )
2120
+ return self.do_request(api_request=api_request, return_type=upsert_condition_match_t.Data)
2121
+
1579
2122
  def upsert_field_options(
1580
2123
  self,
1581
2124
  *,
1582
2125
  option_set_key: identifier_t.IdentifierKey,
1583
2126
  field_options: list[upsert_field_options_t.FieldOption],
2127
+ _request_options: client_config_t.RequestOptions | None = None,
1584
2128
  ) -> upsert_field_options_t.Data:
1585
2129
  """Creates or updates field options for an option set
1586
2130
 
@@ -1595,5 +2139,6 @@ class ClientMethods(ABC):
1595
2139
  method=upsert_field_options_t.ENDPOINT_METHOD,
1596
2140
  endpoint=upsert_field_options_t.ENDPOINT_PATH,
1597
2141
  args=args,
2142
+ request_options=_request_options,
1598
2143
  )
1599
2144
  return self.do_request(api_request=api_request, return_type=upsert_field_options_t.Data)