UncountablePythonSDK 0.0.115__py3-none-any.whl → 0.0.142.dev0__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 (119) hide show
  1. docs/conf.py +52 -5
  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 +1 -1
  7. docs/requirements.txt +3 -2
  8. examples/basic_auth.py +7 -0
  9. examples/integration-server/jobs/materials_auto/example_cron.py +3 -0
  10. examples/integration-server/jobs/materials_auto/example_http.py +19 -7
  11. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  12. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  13. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  14. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +57 -16
  15. examples/integration-server/jobs/materials_auto/profile.yaml +27 -0
  16. examples/integration-server/pyproject.toml +4 -4
  17. examples/oauth.py +7 -0
  18. pkgs/argument_parser/__init__.py +1 -0
  19. pkgs/argument_parser/_is_namedtuple.py +3 -0
  20. pkgs/argument_parser/argument_parser.py +22 -3
  21. pkgs/serialization_util/serialization_helpers.py +3 -1
  22. pkgs/type_spec/builder.py +66 -19
  23. pkgs/type_spec/builder_types.py +9 -0
  24. pkgs/type_spec/config.py +26 -5
  25. pkgs/type_spec/cross_output_links.py +10 -16
  26. pkgs/type_spec/emit_open_api.py +72 -22
  27. pkgs/type_spec/emit_open_api_util.py +1 -0
  28. pkgs/type_spec/emit_python.py +76 -12
  29. pkgs/type_spec/emit_typescript.py +48 -32
  30. pkgs/type_spec/emit_typescript_util.py +44 -6
  31. pkgs/type_spec/load_types.py +2 -2
  32. pkgs/type_spec/open_api_util.py +16 -1
  33. pkgs/type_spec/parts/base.ts.prepart +4 -0
  34. pkgs/type_spec/type_info/emit_type_info.py +37 -4
  35. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +1 -0
  36. pkgs/type_spec/value_spec/__main__.py +2 -2
  37. pkgs/type_spec/value_spec/emit_python.py +6 -1
  38. uncountable/core/client.py +10 -3
  39. uncountable/integration/cli.py +175 -23
  40. uncountable/integration/executors/executors.py +1 -2
  41. uncountable/integration/executors/generic_upload_executor.py +1 -1
  42. uncountable/integration/http_server/types.py +3 -1
  43. uncountable/integration/job.py +35 -3
  44. uncountable/integration/queue_runner/command_server/__init__.py +4 -0
  45. uncountable/integration/queue_runner/command_server/command_client.py +89 -0
  46. uncountable/integration/queue_runner/command_server/command_server.py +117 -5
  47. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  48. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +51 -0
  49. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +34 -11
  50. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +102 -1
  51. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +180 -0
  52. uncountable/integration/queue_runner/command_server/types.py +44 -1
  53. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +189 -8
  54. uncountable/integration/queue_runner/datastore/interface.py +13 -0
  55. uncountable/integration/queue_runner/datastore/model.py +8 -1
  56. uncountable/integration/queue_runner/job_scheduler.py +85 -21
  57. uncountable/integration/queue_runner/queue_runner.py +10 -2
  58. uncountable/integration/queue_runner/types.py +2 -0
  59. uncountable/integration/queue_runner/worker.py +28 -29
  60. uncountable/integration/scheduler.py +121 -23
  61. uncountable/integration/server.py +36 -6
  62. uncountable/integration/telemetry.py +129 -8
  63. uncountable/integration/webhook_server/entrypoint.py +2 -0
  64. uncountable/types/__init__.py +38 -0
  65. uncountable/types/api/entity/create_or_update_entity.py +1 -0
  66. uncountable/types/api/entity/export_entities.py +13 -0
  67. uncountable/types/api/entity/list_aggregate.py +79 -0
  68. uncountable/types/api/entity/list_entities.py +25 -0
  69. uncountable/types/api/entity/set_barcode.py +43 -0
  70. uncountable/types/api/entity/transition_entity_phase.py +2 -1
  71. uncountable/types/api/files/download_file.py +15 -1
  72. uncountable/types/api/integrations/__init__.py +1 -0
  73. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  74. uncountable/types/api/integrations/push_notification.py +49 -0
  75. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  76. uncountable/types/api/listing/__init__.py +1 -0
  77. uncountable/types/api/listing/fetch_listing.py +57 -0
  78. uncountable/types/api/notebooks/__init__.py +1 -0
  79. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  80. uncountable/types/api/outputs/get_output_organization.py +173 -0
  81. uncountable/types/api/recipes/edit_recipe_inputs.py +1 -1
  82. uncountable/types/api/recipes/get_recipe_output_metadata.py +2 -2
  83. uncountable/types/api/recipes/get_recipes_data.py +29 -0
  84. uncountable/types/api/recipes/lock_recipes.py +2 -1
  85. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  86. uncountable/types/api/recipes/unlock_recipes.py +2 -1
  87. uncountable/types/api/runsheet/export_default_runsheet.py +44 -0
  88. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  89. uncountable/types/api/user/__init__.py +1 -0
  90. uncountable/types/api/user/get_current_user_info.py +40 -0
  91. uncountable/types/async_batch_processor.py +266 -0
  92. uncountable/types/async_batch_t.py +5 -0
  93. uncountable/types/client_base.py +432 -2
  94. uncountable/types/client_config.py +1 -0
  95. uncountable/types/client_config_t.py +10 -0
  96. uncountable/types/entity_t.py +9 -1
  97. uncountable/types/exports_t.py +1 -0
  98. uncountable/types/integration_server_t.py +2 -0
  99. uncountable/types/integration_session.py +10 -0
  100. uncountable/types/integration_session_t.py +60 -0
  101. uncountable/types/integrations.py +10 -0
  102. uncountable/types/integrations_t.py +62 -0
  103. uncountable/types/listing.py +46 -0
  104. uncountable/types/listing_t.py +533 -0
  105. uncountable/types/notices.py +8 -0
  106. uncountable/types/notices_t.py +37 -0
  107. uncountable/types/notifications.py +11 -0
  108. uncountable/types/notifications_t.py +74 -0
  109. uncountable/types/queued_job.py +2 -0
  110. uncountable/types/queued_job_t.py +20 -2
  111. uncountable/types/sockets.py +20 -0
  112. uncountable/types/sockets_t.py +169 -0
  113. uncountable/types/uploader.py +24 -0
  114. uncountable/types/uploader_t.py +222 -0
  115. {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/METADATA +5 -2
  116. {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/RECORD +118 -79
  117. docs/quickstart.md +0 -19
  118. {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/WHEEL +0 -0
  119. {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/top_level.txt +0 -0
@@ -8,6 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.serialization import OpaqueKey
11
+ import uncountable.types.api.notebooks.add_notebook_content as add_notebook_content_t
11
12
  import uncountable.types.api.recipes.add_recipe_to_project as add_recipe_to_project_t
12
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
@@ -17,6 +18,8 @@ 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
20
23
  import uncountable.types.api.runsheet.complete_async_upload as complete_async_upload_t
21
24
  import uncountable.types.api.chemical.convert_chemical_formats as convert_chemical_formats_t
22
25
  import uncountable.types.api.entity.create_entities as create_entities_t
@@ -34,9 +37,11 @@ import uncountable.types.api.batch.execute_batch as execute_batch_t
34
37
  import uncountable.types.api.batch.execute_batch_load_async as execute_batch_load_async_t
35
38
  import uncountable.types.api.entity.export_entities as export_entities_t
36
39
  from uncountable.types import exports_t
40
+ import uncountable.types.api.listing.fetch_listing as fetch_listing_t
37
41
  from uncountable.types import field_values_t
38
42
  from uncountable.types import generic_upload_t
39
43
  import uncountable.types.api.recipes.get_column_calculation_values as get_column_calculation_values_t
44
+ import uncountable.types.api.user.get_current_user_info as get_current_user_info_t
40
45
  import uncountable.types.api.recipes.get_curve as get_curve_t
41
46
  import uncountable.types.api.entity.get_entities_data as get_entities_data_t
42
47
  import uncountable.types.api.inputs.get_input_data as get_input_data_t
@@ -45,6 +50,7 @@ import uncountable.types.api.inputs.get_input_names as get_input_names_t
45
50
  import uncountable.types.api.inputs.get_inputs_data as get_inputs_data_t
46
51
  import uncountable.types.api.outputs.get_output_data as get_output_data_t
47
52
  import uncountable.types.api.outputs.get_output_names as get_output_names_t
53
+ import uncountable.types.api.outputs.get_output_organization as get_output_organization_t
48
54
  import uncountable.types.api.project.get_projects as get_projects_t
49
55
  import uncountable.types.api.project.get_projects_data as get_projects_data_t
50
56
  import uncountable.types.api.recipes.get_recipe_calculations as get_recipe_calculations_t
@@ -57,23 +63,30 @@ import uncountable.types.api.entity.grant_entity_permissions as grant_entity_per
57
63
  from uncountable.types import id_source_t
58
64
  from uncountable.types import identifier_t
59
65
  import uncountable.types.api.uploader.invoke_uploader as invoke_uploader_t
66
+ import uncountable.types.api.entity.list_aggregate as list_aggregate_t
60
67
  import uncountable.types.api.entity.list_entities as list_entities_t
61
68
  import uncountable.types.api.id_source.list_id_source as list_id_source_t
69
+ from uncountable.types import listing_t
62
70
  import uncountable.types.api.entity.lock_entity as lock_entity_t
63
71
  import uncountable.types.api.recipes.lock_recipes as lock_recipes_t
64
72
  import uncountable.types.api.entity.lookup_entity as lookup_entity_t
65
73
  import uncountable.types.api.id_source.match_id_source as match_id_source_t
74
+ from uncountable.types import notices_t
75
+ from uncountable.types import notifications_t
66
76
  from uncountable.types import permissions_t
67
77
  from uncountable.types import post_base_t
78
+ import uncountable.types.api.integrations.push_notification as push_notification_t
68
79
  from uncountable.types import recipe_identifiers_t
69
80
  from uncountable.types import recipe_links_t
70
81
  from uncountable.types import recipe_metadata_t
71
82
  from uncountable.types import recipe_workflow_steps_t
83
+ import uncountable.types.api.integrations.register_sockets_token as register_sockets_token_t
72
84
  import uncountable.types.api.recipes.remove_recipe_from_project as remove_recipe_from_project_t
73
85
  import uncountable.types.api.recipe_links.remove_recipe_link as remove_recipe_link_t
74
86
  import uncountable.types.api.entity.resolve_entity_ids as resolve_entity_ids_t
75
87
  import uncountable.types.api.outputs.resolve_output_conditions as resolve_output_conditions_t
76
88
  import uncountable.types.api.triggers.run_trigger as run_trigger_t
89
+ import uncountable.types.api.entity.set_barcode as set_barcode_t
77
90
  import uncountable.types.api.permissions.set_core_permissions as set_core_permissions_t
78
91
  import uncountable.types.api.entity.set_entity_field_values as set_entity_field_values_t
79
92
  import uncountable.types.api.inputs.set_input_attribute_values as set_input_attribute_values_t
@@ -86,12 +99,15 @@ import uncountable.types.api.recipes.set_recipe_output_annotations as set_recipe
86
99
  import uncountable.types.api.recipes.set_recipe_output_file as set_recipe_output_file_t
87
100
  import uncountable.types.api.recipes.set_recipe_outputs as set_recipe_outputs_t
88
101
  import uncountable.types.api.recipes.set_recipe_tags as set_recipe_tags_t
102
+ import uncountable.types.api.recipes.set_recipe_total as set_recipe_total_t
89
103
  import uncountable.types.api.entity.set_values as set_values_t
104
+ from uncountable.types import sockets_t
90
105
  import uncountable.types.api.entity.transition_entity_phase as transition_entity_phase_t
91
106
  import uncountable.types.api.recipes.unarchive_recipes as unarchive_recipes_t
92
107
  import uncountable.types.api.entity.unlock_entity as unlock_entity_t
93
108
  import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
94
109
  import uncountable.types.api.material_families.update_entity_material_families as update_entity_material_families_t
110
+ from uncountable.types import uploader_t
95
111
  import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
96
112
  import uncountable.types.api.field_options.upsert_field_options as upsert_field_options_t
97
113
  from abc import ABC, abstractmethod
@@ -105,6 +121,7 @@ class APIRequest:
105
121
  method: str
106
122
  endpoint: str
107
123
  args: typing.Any
124
+ request_options: client_config_t.RequestOptions | None = None
108
125
 
109
126
 
110
127
  class ClientMethods(ABC):
@@ -113,11 +130,39 @@ class ClientMethods(ABC):
113
130
  def do_request(self, *, api_request: APIRequest, return_type: type[DT]) -> DT:
114
131
  ...
115
132
 
133
+ def add_notebook_content(
134
+ self,
135
+ *,
136
+ notebook_key: identifier_t.IdentifierKey,
137
+ location: add_notebook_content_t.Location,
138
+ contents: list[add_notebook_content_t.InputContent],
139
+ _request_options: client_config_t.RequestOptions | None = None,
140
+ ) -> add_notebook_content_t.Data:
141
+ """Adds content to an existing notebook
142
+
143
+ :param notebook_key: Key of the notebook to add the content to
144
+ :param location: The location to add the content to in the notebook
145
+ :param contents: List of input content to add to the notebook
146
+ """
147
+ args = add_notebook_content_t.Arguments(
148
+ notebook_key=notebook_key,
149
+ location=location,
150
+ contents=contents,
151
+ )
152
+ api_request = APIRequest(
153
+ method=add_notebook_content_t.ENDPOINT_METHOD,
154
+ endpoint=add_notebook_content_t.ENDPOINT_PATH,
155
+ args=args,
156
+ request_options=_request_options,
157
+ )
158
+ return self.do_request(api_request=api_request, return_type=add_notebook_content_t.Data)
159
+
116
160
  def add_recipe_to_project(
117
161
  self,
118
162
  *,
119
163
  recipe_key: identifier_t.IdentifierKey,
120
164
  project_key: identifier_t.IdentifierKey,
165
+ _request_options: client_config_t.RequestOptions | None = None,
121
166
  ) -> add_recipe_to_project_t.Data:
122
167
  """Adds a recipe to a project
123
168
 
@@ -132,6 +177,7 @@ class ClientMethods(ABC):
132
177
  method=add_recipe_to_project_t.ENDPOINT_METHOD,
133
178
  endpoint=add_recipe_to_project_t.ENDPOINT_PATH,
134
179
  args=args,
180
+ request_options=_request_options,
135
181
  )
136
182
  return self.do_request(api_request=api_request, return_type=add_recipe_to_project_t.Data)
137
183
 
@@ -141,6 +187,7 @@ class ClientMethods(ABC):
141
187
  time_series_segment_key: identifier_t.IdentifierKey,
142
188
  time_series_data: list[add_time_series_data_t.TimeSeriesDatum],
143
189
  on_conflict: add_time_series_data_t.OnTimepointConflict = add_time_series_data_t.OnTimepointConflict.ERROR,
190
+ _request_options: client_config_t.RequestOptions | None = None,
144
191
  ) -> add_time_series_data_t.Data:
145
192
  """Add timepoint data to a time series segment.
146
193
 
@@ -157,6 +204,7 @@ class ClientMethods(ABC):
157
204
  method=add_time_series_data_t.ENDPOINT_METHOD,
158
205
  endpoint=add_time_series_data_t.ENDPOINT_PATH,
159
206
  args=args,
207
+ request_options=_request_options,
160
208
  )
161
209
  return self.do_request(api_request=api_request, return_type=add_time_series_data_t.Data)
162
210
 
@@ -165,6 +213,7 @@ class ClientMethods(ABC):
165
213
  *,
166
214
  recipes: list[identifier_t.IdentifierKey],
167
215
  reason: str | None = None,
216
+ _request_options: client_config_t.RequestOptions | None = None,
168
217
  ) -> archive_recipes_t.Data:
169
218
  """Archive the provided recipes and their children
170
219
 
@@ -179,6 +228,7 @@ class ClientMethods(ABC):
179
228
  method=archive_recipes_t.ENDPOINT_METHOD,
180
229
  endpoint=archive_recipes_t.ENDPOINT_PATH,
181
230
  args=args,
231
+ request_options=_request_options,
182
232
  )
183
233
  return self.do_request(api_request=api_request, return_type=archive_recipes_t.Data)
184
234
 
@@ -187,6 +237,7 @@ class ClientMethods(ABC):
187
237
  *,
188
238
  equipment_key: identifier_t.IdentifierKey,
189
239
  material_family_ids: list[base_t.ObjectId],
240
+ _request_options: client_config_t.RequestOptions | None = None,
190
241
  ) -> associate_equipment_input_t.Data:
191
242
  """Create or return the input association for equipment
192
243
 
@@ -201,6 +252,7 @@ class ClientMethods(ABC):
201
252
  method=associate_equipment_input_t.ENDPOINT_METHOD,
202
253
  endpoint=associate_equipment_input_t.ENDPOINT_PATH,
203
254
  args=args,
255
+ request_options=_request_options,
204
256
  )
205
257
  return self.do_request(api_request=api_request, return_type=associate_equipment_input_t.Data)
206
258
 
@@ -210,6 +262,7 @@ class ClientMethods(ABC):
210
262
  recipe_key: identifier_t.IdentifierKey,
211
263
  input_key: identifier_t.IdentifierKey | None = None,
212
264
  show_in_listings: bool | None = None,
265
+ _request_options: client_config_t.RequestOptions | None = None,
213
266
  ) -> associate_recipe_as_input_t.Data:
214
267
  """Create or return the input association for a recipe
215
268
 
@@ -226,6 +279,7 @@ class ClientMethods(ABC):
226
279
  method=associate_recipe_as_input_t.ENDPOINT_METHOD,
227
280
  endpoint=associate_recipe_as_input_t.ENDPOINT_PATH,
228
281
  args=args,
282
+ request_options=_request_options,
229
283
  )
230
284
  return self.do_request(api_request=api_request, return_type=associate_recipe_as_input_t.Data)
231
285
 
@@ -234,6 +288,7 @@ class ClientMethods(ABC):
234
288
  *,
235
289
  recipe_key: identifier_t.IdentifierKey,
236
290
  ingredient_key: identifier_t.IdentifierKey,
291
+ _request_options: client_config_t.RequestOptions | None = None,
237
292
  ) -> associate_recipe_as_lot_t.Data:
238
293
  """Create a new lot association for the provided recipe with the provided ingredient
239
294
 
@@ -248,6 +303,7 @@ class ClientMethods(ABC):
248
303
  method=associate_recipe_as_lot_t.ENDPOINT_METHOD,
249
304
  endpoint=associate_recipe_as_lot_t.ENDPOINT_PATH,
250
305
  args=args,
306
+ request_options=_request_options,
251
307
  )
252
308
  return self.do_request(api_request=api_request, return_type=associate_recipe_as_lot_t.Data)
253
309
 
@@ -255,6 +311,7 @@ class ClientMethods(ABC):
255
311
  self,
256
312
  *,
257
313
  recipe_key: identifier_t.IdentifierKey,
314
+ _request_options: client_config_t.RequestOptions | None = None,
258
315
  ) -> clear_recipe_outputs_t.Data:
259
316
  """Clears all output values & output metadata for a given recipe
260
317
 
@@ -267,14 +324,40 @@ class ClientMethods(ABC):
267
324
  method=clear_recipe_outputs_t.ENDPOINT_METHOD,
268
325
  endpoint=clear_recipe_outputs_t.ENDPOINT_PATH,
269
326
  args=args,
327
+ request_options=_request_options,
270
328
  )
271
329
  return self.do_request(api_request=api_request, return_type=clear_recipe_outputs_t.Data)
272
330
 
331
+ def complete_async_parse(
332
+ self,
333
+ *,
334
+ parsed_file_data: list[uploader_t.ParsedFileData],
335
+ async_job_key: identifier_t.IdentifierKey,
336
+ upload_destination: generic_upload_t.UploadDestinationRecipe,
337
+ _request_options: client_config_t.RequestOptions | None = None,
338
+ ) -> complete_async_parse_t.Data:
339
+ """Parses uploaded files asynchronously
340
+
341
+ """
342
+ args = complete_async_parse_t.Arguments(
343
+ parsed_file_data=parsed_file_data,
344
+ async_job_key=async_job_key,
345
+ upload_destination=upload_destination,
346
+ )
347
+ api_request = APIRequest(
348
+ method=complete_async_parse_t.ENDPOINT_METHOD,
349
+ endpoint=complete_async_parse_t.ENDPOINT_PATH,
350
+ args=args,
351
+ request_options=_request_options,
352
+ )
353
+ return self.do_request(api_request=api_request, return_type=complete_async_parse_t.Data)
354
+
273
355
  def complete_async_upload(
274
356
  self,
275
357
  *,
276
358
  async_job_id: base_t.ObjectId,
277
359
  file_id: base_t.ObjectId,
360
+ _request_options: client_config_t.RequestOptions | None = None,
278
361
  ) -> complete_async_upload_t.Data:
279
362
  """Processes an file id with a given async job id to be uploaded asynchronously
280
363
 
@@ -287,6 +370,7 @@ class ClientMethods(ABC):
287
370
  method=complete_async_upload_t.ENDPOINT_METHOD,
288
371
  endpoint=complete_async_upload_t.ENDPOINT_PATH,
289
372
  args=args,
373
+ request_options=_request_options,
290
374
  )
291
375
  return self.do_request(api_request=api_request, return_type=complete_async_upload_t.Data)
292
376
 
@@ -294,6 +378,7 @@ class ClientMethods(ABC):
294
378
  self,
295
379
  *,
296
380
  source_chemical_structures: list[convert_chemical_formats_t.ChemicalStructureFile],
381
+ _request_options: client_config_t.RequestOptions | None = None,
297
382
  ) -> convert_chemical_formats_t.Data:
298
383
  """Converts chemical formats, into the format used by Uncountable and usable in other APIs for eg. set_input_attribute_values
299
384
 
@@ -305,6 +390,7 @@ class ClientMethods(ABC):
305
390
  method=convert_chemical_formats_t.ENDPOINT_METHOD,
306
391
  endpoint=convert_chemical_formats_t.ENDPOINT_PATH,
307
392
  args=args,
393
+ request_options=_request_options,
308
394
  )
309
395
  return self.do_request(api_request=api_request, return_type=convert_chemical_formats_t.Data)
310
396
 
@@ -315,6 +401,7 @@ class ClientMethods(ABC):
315
401
  entities_to_create: list[create_entities_t.EntityToCreate],
316
402
  definition_id: base_t.ObjectId | None = None,
317
403
  definition_key: identifier_t.IdentifierKey | None = None,
404
+ _request_options: client_config_t.RequestOptions | None = None,
318
405
  ) -> create_entities_t.Data:
319
406
  """Creates new Uncountable entities
320
407
 
@@ -333,6 +420,7 @@ class ClientMethods(ABC):
333
420
  method=create_entities_t.ENDPOINT_METHOD,
334
421
  endpoint=create_entities_t.ENDPOINT_PATH,
335
422
  args=args,
423
+ request_options=_request_options,
336
424
  )
337
425
  return self.do_request(api_request=api_request, return_type=create_entities_t.Data)
338
426
 
@@ -344,6 +432,7 @@ class ClientMethods(ABC):
344
432
  definition_key: identifier_t.IdentifierKey | None = None,
345
433
  field_values: list[field_values_t.FieldRefNameValue] | None = None,
346
434
  parent_entity: entity_t.Entity | None = None,
435
+ _request_options: client_config_t.RequestOptions | None = None,
347
436
  ) -> create_entity_t.Data:
348
437
  """Creates a new Uncountable entity
349
438
 
@@ -363,6 +452,7 @@ class ClientMethods(ABC):
363
452
  method=create_entity_t.ENDPOINT_METHOD,
364
453
  endpoint=create_entity_t.ENDPOINT_PATH,
365
454
  args=args,
455
+ request_options=_request_options,
366
456
  )
367
457
  return self.do_request(api_request=api_request, return_type=create_entity_t.Data)
368
458
 
@@ -370,6 +460,7 @@ class ClientMethods(ABC):
370
460
  self,
371
461
  *,
372
462
  inputs_to_create: list[create_inputs_t.InputToCreate],
463
+ _request_options: client_config_t.RequestOptions | None = None,
373
464
  ) -> create_inputs_t.Data:
374
465
  """Creates new inputs
375
466
 
@@ -382,6 +473,7 @@ class ClientMethods(ABC):
382
473
  method=create_inputs_t.ENDPOINT_METHOD,
383
474
  endpoint=create_inputs_t.ENDPOINT_PATH,
384
475
  args=args,
476
+ request_options=_request_options,
385
477
  )
386
478
  return self.do_request(api_request=api_request, return_type=create_inputs_t.Data)
387
479
 
@@ -390,6 +482,7 @@ class ClientMethods(ABC):
390
482
  *,
391
483
  recipe_key: identifier_t.IdentifierKey,
392
484
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
485
+ _request_options: client_config_t.RequestOptions | None = None,
393
486
  ) -> create_mix_order_t.Data:
394
487
  """Creates mix order on a recipe workflow step
395
488
 
@@ -402,6 +495,7 @@ class ClientMethods(ABC):
402
495
  method=create_mix_order_t.ENDPOINT_METHOD,
403
496
  endpoint=create_mix_order_t.ENDPOINT_PATH,
404
497
  args=args,
498
+ request_options=_request_options,
405
499
  )
406
500
  return self.do_request(api_request=api_request, return_type=create_mix_order_t.Data)
407
501
 
@@ -412,20 +506,25 @@ class ClientMethods(ABC):
412
506
  definition_key: identifier_t.IdentifierKey,
413
507
  field_values: list[field_values_t.FieldArgumentValue],
414
508
  entity_key: identifier_t.IdentifierKey | None = None,
509
+ on_create_init_field_values: list[field_values_t.FieldArgumentValue] | None = None,
510
+ _request_options: client_config_t.RequestOptions | None = None,
415
511
  ) -> create_or_update_entity_t.Data:
416
512
  """Creates or updates field values for an entity
417
513
 
514
+ :param on_create_init_field_values: Field values set only when the entity is created (will be ignored if entity already exists)
418
515
  """
419
516
  args = create_or_update_entity_t.Arguments(
420
517
  entity_key=entity_key,
421
518
  entity_type=entity_type,
422
519
  definition_key=definition_key,
423
520
  field_values=field_values,
521
+ on_create_init_field_values=on_create_init_field_values,
424
522
  )
425
523
  api_request = APIRequest(
426
524
  method=create_or_update_entity_t.ENDPOINT_METHOD,
427
525
  endpoint=create_or_update_entity_t.ENDPOINT_PATH,
428
526
  args=args,
527
+ request_options=_request_options,
429
528
  )
430
529
  return self.do_request(api_request=api_request, return_type=create_or_update_entity_t.Data)
431
530
 
@@ -440,6 +539,7 @@ class ClientMethods(ABC):
440
539
  recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
441
540
  identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
442
541
  definition_key: identifier_t.IdentifierKey | None = None,
542
+ _request_options: client_config_t.RequestOptions | None = None,
443
543
  ) -> create_recipe_t.Data:
444
544
  """Returns the id of the recipe being created.
445
545
 
@@ -466,6 +566,7 @@ class ClientMethods(ABC):
466
566
  method=create_recipe_t.ENDPOINT_METHOD,
467
567
  endpoint=create_recipe_t.ENDPOINT_PATH,
468
568
  args=args,
569
+ request_options=_request_options,
469
570
  )
470
571
  return self.do_request(api_request=api_request, return_type=create_recipe_t.Data)
471
572
 
@@ -476,6 +577,7 @@ class ClientMethods(ABC):
476
577
  recipe_to_key: identifier_t.IdentifierKey,
477
578
  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],
478
579
  name: str | None = None,
580
+ _request_options: client_config_t.RequestOptions | None = None,
479
581
  ) -> create_recipe_link_t.Data:
480
582
  """Create a link between two recipes. Skip if the link already exists
481
583
 
@@ -494,6 +596,7 @@ class ClientMethods(ABC):
494
596
  method=create_recipe_link_t.ENDPOINT_METHOD,
495
597
  endpoint=create_recipe_link_t.ENDPOINT_PATH,
496
598
  args=args,
599
+ request_options=_request_options,
497
600
  )
498
601
  return self.do_request(api_request=api_request, return_type=create_recipe_link_t.Data)
499
602
 
@@ -503,8 +606,9 @@ class ClientMethods(ABC):
503
606
  material_family_id: base_t.ObjectId,
504
607
  recipe_definitions: list[create_recipes_t.CreateRecipeDefinition],
505
608
  project_id: base_t.ObjectId | None = None,
609
+ _request_options: client_config_t.RequestOptions | None = None,
506
610
  ) -> create_recipes_t.Data:
507
- """Sets inputs values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system
611
+ """Creates recipes in Uncountable, optionally with metadata values, and returns the resulting ids in corresponding order
508
612
 
509
613
  :param material_family_id: The identifier of the material family to create the recipes in
510
614
  :param project_id: The identifier of the project to create the recipes in
@@ -518,6 +622,7 @@ class ClientMethods(ABC):
518
622
  method=create_recipes_t.ENDPOINT_METHOD,
519
623
  endpoint=create_recipes_t.ENDPOINT_PATH,
520
624
  args=args,
625
+ request_options=_request_options,
521
626
  )
522
627
  return self.do_request(api_request=api_request, return_type=create_recipes_t.Data)
523
628
 
@@ -525,6 +630,7 @@ class ClientMethods(ABC):
525
630
  self,
526
631
  *,
527
632
  recipe_key: identifier_t.IdentifierKey,
633
+ _request_options: client_config_t.RequestOptions | None = None,
528
634
  ) -> disassociate_recipe_as_input_t.Data:
529
635
  """Remove any association between a recipe and ingredients
530
636
 
@@ -537,6 +643,7 @@ class ClientMethods(ABC):
537
643
  method=disassociate_recipe_as_input_t.ENDPOINT_METHOD,
538
644
  endpoint=disassociate_recipe_as_input_t.ENDPOINT_PATH,
539
645
  args=args,
646
+ request_options=_request_options,
540
647
  )
541
648
  return self.do_request(api_request=api_request, return_type=disassociate_recipe_as_input_t.Data)
542
649
 
@@ -546,6 +653,7 @@ class ClientMethods(ABC):
546
653
  recipe_key: identifier_t.IdentifierKey,
547
654
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
548
655
  edits: list[edit_recipe_inputs_t.RecipeInputEdit],
656
+ _request_options: client_config_t.RequestOptions | None = None,
549
657
  ) -> edit_recipe_inputs_t.Data:
550
658
  """Clear, update, or add inputs on a recipe
551
659
 
@@ -560,6 +668,7 @@ class ClientMethods(ABC):
560
668
  method=edit_recipe_inputs_t.ENDPOINT_METHOD,
561
669
  endpoint=edit_recipe_inputs_t.ENDPOINT_PATH,
562
670
  args=args,
671
+ request_options=_request_options,
563
672
  )
564
673
  return self.do_request(api_request=api_request, return_type=edit_recipe_inputs_t.Data)
565
674
 
@@ -567,6 +676,7 @@ class ClientMethods(ABC):
567
676
  self,
568
677
  *,
569
678
  requests: list[execute_batch_t.BatchRequest],
679
+ _request_options: client_config_t.RequestOptions | None = None,
570
680
  ) -> execute_batch_t.Data:
571
681
  """Run multiple API calls via one request
572
682
 
@@ -578,6 +688,7 @@ class ClientMethods(ABC):
578
688
  method=execute_batch_t.ENDPOINT_METHOD,
579
689
  endpoint=execute_batch_t.ENDPOINT_PATH,
580
690
  args=args,
691
+ request_options=_request_options,
581
692
  )
582
693
  return self.do_request(api_request=api_request, return_type=execute_batch_t.Data)
583
694
 
@@ -585,6 +696,7 @@ class ClientMethods(ABC):
585
696
  self,
586
697
  *,
587
698
  requests: list[async_batch_t.AsyncBatchRequest],
699
+ _request_options: client_config_t.RequestOptions | None = None,
588
700
  ) -> execute_batch_load_async_t.Data:
589
701
  """Run multiple API calls via one request
590
702
 
@@ -596,6 +708,7 @@ class ClientMethods(ABC):
596
708
  method=execute_batch_load_async_t.ENDPOINT_METHOD,
597
709
  endpoint=execute_batch_load_async_t.ENDPOINT_PATH,
598
710
  args=args,
711
+ request_options=_request_options,
599
712
  )
600
713
  return self.do_request(api_request=api_request, return_type=execute_batch_load_async_t.Data)
601
714
 
@@ -606,6 +719,8 @@ class ClientMethods(ABC):
606
719
  type: exports_t.ExportType = exports_t.ExportType.EXCEL,
607
720
  client_timezone: exports_t.ListingExportUserTimezone | None = None,
608
721
  limit: int | None = None,
722
+ attributes: list[export_entities_t.ListingAttribute] | None = None,
723
+ _request_options: client_config_t.RequestOptions | None = None,
609
724
  ) -> export_entities_t.Data:
610
725
  """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.
611
726
 
@@ -617,19 +732,55 @@ class ClientMethods(ABC):
617
732
  client_timezone=client_timezone,
618
733
  limit=limit,
619
734
  type=type,
735
+ attributes=attributes,
620
736
  )
621
737
  api_request = APIRequest(
622
738
  method=export_entities_t.ENDPOINT_METHOD,
623
739
  endpoint=export_entities_t.ENDPOINT_PATH,
624
740
  args=args,
741
+ request_options=_request_options,
625
742
  )
626
743
  return self.do_request(api_request=api_request, return_type=export_entities_t.Data)
627
744
 
745
+ def fetch_listing(
746
+ self,
747
+ *,
748
+ entity_type: entity_t.EntityType,
749
+ columns: list[listing_t.ColumnIdentifier],
750
+ filters: listing_t.FilterNode | None = None,
751
+ limit: int | None = None,
752
+ offset: int | None = None,
753
+ _request_options: client_config_t.RequestOptions | None = None,
754
+ ) -> fetch_listing_t.Data:
755
+ """External API for fetching a listing based on some structured columns and filters
756
+
757
+ :param entity_type: The entity type to fetch listing entries for
758
+ :param columns: The columns to include in the results
759
+ :param filters: Structured filters to apply to the listing, represented by a FilterNode object
760
+ :param limit: The number of entries to return. If not provided, defaults to 100. Note a maximum of 100 entries can be returned.
761
+ :param offset: The number of entries to skip for pagination
762
+ """
763
+ args = fetch_listing_t.Arguments(
764
+ entity_type=entity_type,
765
+ columns=columns,
766
+ filters=filters,
767
+ limit=limit,
768
+ offset=offset,
769
+ )
770
+ api_request = APIRequest(
771
+ method=fetch_listing_t.ENDPOINT_METHOD,
772
+ endpoint=fetch_listing_t.ENDPOINT_PATH,
773
+ args=args,
774
+ request_options=_request_options,
775
+ )
776
+ return self.do_request(api_request=api_request, return_type=fetch_listing_t.Data)
777
+
628
778
  def get_column_calculation_values(
629
779
  self,
630
780
  *,
631
781
  recipe_keys: list[identifier_t.IdentifierKey],
632
782
  calculation_key: identifier_t.IdentifierKey,
783
+ _request_options: client_config_t.RequestOptions | None = None,
633
784
  ) -> get_column_calculation_values_t.Data:
634
785
  """Get the values for a column calculations for recipes
635
786
 
@@ -644,14 +795,33 @@ class ClientMethods(ABC):
644
795
  method=get_column_calculation_values_t.ENDPOINT_METHOD,
645
796
  endpoint=get_column_calculation_values_t.ENDPOINT_PATH,
646
797
  args=args,
798
+ request_options=_request_options,
647
799
  )
648
800
  return self.do_request(api_request=api_request, return_type=get_column_calculation_values_t.Data)
649
801
 
802
+ def get_current_user_info(
803
+ self,
804
+ *,
805
+ _request_options: client_config_t.RequestOptions | None = None,
806
+ ) -> get_current_user_info_t.Data:
807
+ """Return information about the current user
808
+
809
+ """
810
+ args = get_current_user_info_t.Arguments()
811
+ api_request = APIRequest(
812
+ method=get_current_user_info_t.ENDPOINT_METHOD,
813
+ endpoint=get_current_user_info_t.ENDPOINT_PATH,
814
+ args=args,
815
+ request_options=_request_options,
816
+ )
817
+ return self.do_request(api_request=api_request, return_type=get_current_user_info_t.Data)
818
+
650
819
  def get_curve(
651
820
  self,
652
821
  *,
653
822
  recipe_output_id: base_t.ObjectId | None = None,
654
823
  recipe_input_id: base_t.ObjectId | None = None,
824
+ _request_options: client_config_t.RequestOptions | None = None,
655
825
  ) -> get_curve_t.Data:
656
826
  """Returns an array of values for the specified curve id.
657
827
 
@@ -666,6 +836,7 @@ class ClientMethods(ABC):
666
836
  method=get_curve_t.ENDPOINT_METHOD,
667
837
  endpoint=get_curve_t.ENDPOINT_PATH,
668
838
  args=args,
839
+ request_options=_request_options,
669
840
  )
670
841
  return self.do_request(api_request=api_request, return_type=get_curve_t.Data)
671
842
 
@@ -674,6 +845,7 @@ class ClientMethods(ABC):
674
845
  *,
675
846
  entity_ids: list[base_t.ObjectId],
676
847
  entity_type: entity_t.EntityType,
848
+ _request_options: client_config_t.RequestOptions | None = None,
677
849
  ) -> get_entities_data_t.Data:
678
850
  """Gets the details for a passed entity
679
851
 
@@ -688,6 +860,7 @@ class ClientMethods(ABC):
688
860
  method=get_entities_data_t.ENDPOINT_METHOD,
689
861
  endpoint=get_entities_data_t.ENDPOINT_PATH,
690
862
  args=args,
863
+ request_options=_request_options,
691
864
  )
692
865
  return self.do_request(api_request=api_request, return_type=get_entities_data_t.Data)
693
866
 
@@ -699,6 +872,7 @@ class ClientMethods(ABC):
699
872
  is_parameter: bool | None,
700
873
  offset: int | None = None,
701
874
  limit: int | None = None,
875
+ _request_options: client_config_t.RequestOptions | None = None,
702
876
  ) -> get_input_data_t.Data:
703
877
  """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
704
878
 
@@ -719,6 +893,7 @@ class ClientMethods(ABC):
719
893
  method=get_input_data_t.ENDPOINT_METHOD,
720
894
  endpoint=get_input_data_t.ENDPOINT_PATH,
721
895
  args=args,
896
+ request_options=_request_options,
722
897
  )
723
898
  return self.do_request(api_request=api_request, return_type=get_input_data_t.Data)
724
899
 
@@ -726,6 +901,7 @@ class ClientMethods(ABC):
726
901
  self,
727
902
  *,
728
903
  material_family_id: base_t.ObjectId,
904
+ _request_options: client_config_t.RequestOptions | None = None,
729
905
  ) -> get_input_group_names_t.Data:
730
906
  """Gets the name of all input groups in a material family that either the user created, or are shared to all users.
731
907
 
@@ -738,6 +914,7 @@ class ClientMethods(ABC):
738
914
  method=get_input_group_names_t.ENDPOINT_METHOD,
739
915
  endpoint=get_input_group_names_t.ENDPOINT_PATH,
740
916
  args=args,
917
+ request_options=_request_options,
741
918
  )
742
919
  return self.do_request(api_request=api_request, return_type=get_input_group_names_t.Data)
743
920
 
@@ -748,6 +925,7 @@ class ClientMethods(ABC):
748
925
  is_parameter: bool | None,
749
926
  offset: int | None = None,
750
927
  limit: int | None = None,
928
+ _request_options: client_config_t.RequestOptions | None = None,
751
929
  ) -> get_input_names_t.Data:
752
930
  """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
753
931
 
@@ -766,6 +944,7 @@ class ClientMethods(ABC):
766
944
  method=get_input_names_t.ENDPOINT_METHOD,
767
945
  endpoint=get_input_names_t.ENDPOINT_PATH,
768
946
  args=args,
947
+ request_options=_request_options,
769
948
  )
770
949
  return self.do_request(api_request=api_request, return_type=get_input_names_t.Data)
771
950
 
@@ -773,6 +952,7 @@ class ClientMethods(ABC):
773
952
  self,
774
953
  *,
775
954
  input_ids: list[base_t.ObjectId],
955
+ _request_options: client_config_t.RequestOptions | None = None,
776
956
  ) -> get_inputs_data_t.Data:
777
957
  """Gets the details for passed input ids
778
958
 
@@ -785,6 +965,7 @@ class ClientMethods(ABC):
785
965
  method=get_inputs_data_t.ENDPOINT_METHOD,
786
966
  endpoint=get_inputs_data_t.ENDPOINT_PATH,
787
967
  args=args,
968
+ request_options=_request_options,
788
969
  )
789
970
  return self.do_request(api_request=api_request, return_type=get_inputs_data_t.Data)
790
971
 
@@ -795,6 +976,7 @@ class ClientMethods(ABC):
795
976
  output_ids: list[base_t.ObjectId] | None = None,
796
977
  offset: int | None = None,
797
978
  limit: int | None = None,
979
+ _request_options: client_config_t.RequestOptions | None = None,
798
980
  ) -> get_output_data_t.Data:
799
981
  """Gets the attribute, categorization and other metadata associated with a set of outputs
800
982
 
@@ -813,6 +995,7 @@ class ClientMethods(ABC):
813
995
  method=get_output_data_t.ENDPOINT_METHOD,
814
996
  endpoint=get_output_data_t.ENDPOINT_PATH,
815
997
  args=args,
998
+ request_options=_request_options,
816
999
  )
817
1000
  return self.do_request(api_request=api_request, return_type=get_output_data_t.Data)
818
1001
 
@@ -822,6 +1005,7 @@ class ClientMethods(ABC):
822
1005
  material_family_id: base_t.ObjectId,
823
1006
  offset: int | None = None,
824
1007
  limit: int | None = None,
1008
+ _request_options: client_config_t.RequestOptions | None = None,
825
1009
  ) -> get_output_names_t.Data:
826
1010
  """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
827
1011
 
@@ -838,14 +1022,36 @@ class ClientMethods(ABC):
838
1022
  method=get_output_names_t.ENDPOINT_METHOD,
839
1023
  endpoint=get_output_names_t.ENDPOINT_PATH,
840
1024
  args=args,
1025
+ request_options=_request_options,
841
1026
  )
842
1027
  return self.do_request(api_request=api_request, return_type=get_output_names_t.Data)
843
1028
 
1029
+ def get_output_organization(
1030
+ self,
1031
+ *,
1032
+ request: get_output_organization_t.OutputOrganizationRequest,
1033
+ _request_options: client_config_t.RequestOptions | None = None,
1034
+ ) -> get_output_organization_t.Data:
1035
+ """Returns the output organization for the specified material family, project, or user
1036
+
1037
+ """
1038
+ args = get_output_organization_t.Arguments(
1039
+ request=request,
1040
+ )
1041
+ api_request = APIRequest(
1042
+ method=get_output_organization_t.ENDPOINT_METHOD,
1043
+ endpoint=get_output_organization_t.ENDPOINT_PATH,
1044
+ args=args,
1045
+ request_options=_request_options,
1046
+ )
1047
+ return self.do_request(api_request=api_request, return_type=get_output_organization_t.Data)
1048
+
844
1049
  def get_projects(
845
1050
  self,
846
1051
  *,
847
1052
  all_material_families: bool,
848
1053
  material_family_id: base_t.ObjectId | None,
1054
+ _request_options: client_config_t.RequestOptions | None = None,
849
1055
  ) -> get_projects_t.Data:
850
1056
  """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
851
1057
 
@@ -860,6 +1066,7 @@ class ClientMethods(ABC):
860
1066
  method=get_projects_t.ENDPOINT_METHOD,
861
1067
  endpoint=get_projects_t.ENDPOINT_PATH,
862
1068
  args=args,
1069
+ request_options=_request_options,
863
1070
  )
864
1071
  return self.do_request(api_request=api_request, return_type=get_projects_t.Data)
865
1072
 
@@ -869,6 +1076,7 @@ class ClientMethods(ABC):
869
1076
  project_ids: list[base_t.ObjectId],
870
1077
  offset: int | None = None,
871
1078
  limit: int | None = None,
1079
+ _request_options: client_config_t.RequestOptions | None = None,
872
1080
  ) -> get_projects_data_t.Data:
873
1081
  """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
874
1082
 
@@ -885,6 +1093,7 @@ class ClientMethods(ABC):
885
1093
  method=get_projects_data_t.ENDPOINT_METHOD,
886
1094
  endpoint=get_projects_data_t.ENDPOINT_PATH,
887
1095
  args=args,
1096
+ request_options=_request_options,
888
1097
  )
889
1098
  return self.do_request(api_request=api_request, return_type=get_projects_data_t.Data)
890
1099
 
@@ -893,6 +1102,7 @@ class ClientMethods(ABC):
893
1102
  *,
894
1103
  recipe_ids: list[base_t.ObjectId],
895
1104
  calculation_ids: list[base_t.ObjectId] | None = None,
1105
+ _request_options: client_config_t.RequestOptions | None = None,
896
1106
  ) -> get_recipe_calculations_t.Data:
897
1107
  """Gets the calculations for the passed recipes
898
1108
 
@@ -907,6 +1117,7 @@ class ClientMethods(ABC):
907
1117
  method=get_recipe_calculations_t.ENDPOINT_METHOD,
908
1118
  endpoint=get_recipe_calculations_t.ENDPOINT_PATH,
909
1119
  args=args,
1120
+ request_options=_request_options,
910
1121
  )
911
1122
  return self.do_request(api_request=api_request, return_type=get_recipe_calculations_t.Data)
912
1123
 
@@ -916,6 +1127,7 @@ class ClientMethods(ABC):
916
1127
  recipe_ids: list[base_t.ObjectId],
917
1128
  depth: int = 1,
918
1129
  link_types: list[recipe_links_t.RecipeLinkType] | None,
1130
+ _request_options: client_config_t.RequestOptions | None = None,
919
1131
  ) -> get_recipe_links_t.Data:
920
1132
  """Gets the links for the passed recipes
921
1133
 
@@ -932,6 +1144,7 @@ class ClientMethods(ABC):
932
1144
  method=get_recipe_links_t.ENDPOINT_METHOD,
933
1145
  endpoint=get_recipe_links_t.ENDPOINT_PATH,
934
1146
  args=args,
1147
+ request_options=_request_options,
935
1148
  )
936
1149
  return self.do_request(api_request=api_request, return_type=get_recipe_links_t.Data)
937
1150
 
@@ -942,6 +1155,7 @@ class ClientMethods(ABC):
942
1155
  recipe_metadata_ids: list[base_t.ObjectId] | None,
943
1156
  offset: int | None = None,
944
1157
  limit: int | None = None,
1158
+ _request_options: client_config_t.RequestOptions | None = None,
945
1159
  ) -> get_recipe_metadata_data_t.Data:
946
1160
  """Gets the recipe metadata. Recipe metadata is data associated with experiments that is not an input, output or calculation, such as a sample ID.
947
1161
 
@@ -960,6 +1174,7 @@ class ClientMethods(ABC):
960
1174
  method=get_recipe_metadata_data_t.ENDPOINT_METHOD,
961
1175
  endpoint=get_recipe_metadata_data_t.ENDPOINT_PATH,
962
1176
  args=args,
1177
+ request_options=_request_options,
963
1178
  )
964
1179
  return self.do_request(api_request=api_request, return_type=get_recipe_metadata_data_t.Data)
965
1180
 
@@ -967,6 +1182,7 @@ class ClientMethods(ABC):
967
1182
  self,
968
1183
  *,
969
1184
  project_id: base_t.ObjectId,
1185
+ _request_options: client_config_t.RequestOptions | None = None,
970
1186
  ) -> get_recipe_names_t.Data:
971
1187
  """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
972
1188
 
@@ -979,6 +1195,7 @@ class ClientMethods(ABC):
979
1195
  method=get_recipe_names_t.ENDPOINT_METHOD,
980
1196
  endpoint=get_recipe_names_t.ENDPOINT_PATH,
981
1197
  args=args,
1198
+ request_options=_request_options,
982
1199
  )
983
1200
  return self.do_request(api_request=api_request, return_type=get_recipe_names_t.Data)
984
1201
 
@@ -986,6 +1203,7 @@ class ClientMethods(ABC):
986
1203
  self,
987
1204
  *,
988
1205
  recipe_output_ids: list[base_t.ObjectId],
1206
+ _request_options: client_config_t.RequestOptions | None = None,
989
1207
  ) -> get_recipe_output_metadata_t.Data:
990
1208
  """Gets the metadata values for the passed recipe outputs
991
1209
 
@@ -998,6 +1216,7 @@ class ClientMethods(ABC):
998
1216
  method=get_recipe_output_metadata_t.ENDPOINT_METHOD,
999
1217
  endpoint=get_recipe_output_metadata_t.ENDPOINT_PATH,
1000
1218
  args=args,
1219
+ request_options=_request_options,
1001
1220
  )
1002
1221
  return self.do_request(api_request=api_request, return_type=get_recipe_output_metadata_t.Data)
1003
1222
 
@@ -1008,6 +1227,8 @@ class ClientMethods(ABC):
1008
1227
  project_id: base_t.ObjectId | None = None,
1009
1228
  offset: int | None = None,
1010
1229
  limit: int | None = None,
1230
+ empty_output_behavior: get_recipes_data_t.RecipeOutputInclusion | None = None,
1231
+ _request_options: client_config_t.RequestOptions | None = None,
1011
1232
  ) -> get_recipes_data_t.Data:
1012
1233
  """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
1013
1234
 
@@ -1015,17 +1236,20 @@ class ClientMethods(ABC):
1015
1236
  :param project_id: The projects to get the data from. Either these or recipe_ids must be filled in
1016
1237
  :param offset: Used for pagination. All pagination is done in order of Recipe ID. [Pagination More Info](#pagination)
1017
1238
  :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)
1239
+ :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.
1018
1240
  """
1019
1241
  args = get_recipes_data_t.Arguments(
1020
1242
  recipe_ids=recipe_ids,
1021
1243
  project_id=project_id,
1022
1244
  offset=offset,
1023
1245
  limit=limit,
1246
+ empty_output_behavior=empty_output_behavior,
1024
1247
  )
1025
1248
  api_request = APIRequest(
1026
1249
  method=get_recipes_data_t.ENDPOINT_METHOD,
1027
1250
  endpoint=get_recipes_data_t.ENDPOINT_PATH,
1028
1251
  args=args,
1252
+ request_options=_request_options,
1029
1253
  )
1030
1254
  return self.do_request(api_request=api_request, return_type=get_recipes_data_t.Data)
1031
1255
 
@@ -1038,6 +1262,7 @@ class ClientMethods(ABC):
1038
1262
  user_keys: list[identifier_t.IdentifierKey] | None = None,
1039
1263
  user_group_keys: list[identifier_t.IdentifierKey] | None = None,
1040
1264
  all_users: bool | None = None,
1265
+ _request_options: client_config_t.RequestOptions | None = None,
1041
1266
  ) -> grant_entity_permissions_t.Data:
1042
1267
  """Grant entity permissions to a list of users or user groups or to all users.
1043
1268
 
@@ -1054,6 +1279,7 @@ class ClientMethods(ABC):
1054
1279
  method=grant_entity_permissions_t.ENDPOINT_METHOD,
1055
1280
  endpoint=grant_entity_permissions_t.ENDPOINT_PATH,
1056
1281
  args=args,
1282
+ request_options=_request_options,
1057
1283
  )
1058
1284
  return self.do_request(api_request=api_request, return_type=grant_entity_permissions_t.Data)
1059
1285
 
@@ -1064,6 +1290,7 @@ class ClientMethods(ABC):
1064
1290
  destination: generic_upload_t.UploadDestination,
1065
1291
  file_id: base_t.ObjectId | None = None,
1066
1292
  file_ids: list[base_t.ObjectId] | None = None,
1293
+ _request_options: client_config_t.RequestOptions | None = None,
1067
1294
  ) -> invoke_uploader_t.Data:
1068
1295
  """Runs a file through an uploader.
1069
1296
 
@@ -1079,9 +1306,40 @@ class ClientMethods(ABC):
1079
1306
  method=invoke_uploader_t.ENDPOINT_METHOD,
1080
1307
  endpoint=invoke_uploader_t.ENDPOINT_PATH,
1081
1308
  args=args,
1309
+ request_options=_request_options,
1082
1310
  )
1083
1311
  return self.do_request(api_request=api_request, return_type=invoke_uploader_t.Data)
1084
1312
 
1313
+ def list_aggregate(
1314
+ self,
1315
+ *,
1316
+ config_reference: str,
1317
+ attribute_values: list[list_aggregate_t.AttributeValue] | None = None,
1318
+ offset: int | None = None,
1319
+ limit: int | None = None,
1320
+ _request_options: client_config_t.RequestOptions | None = None,
1321
+ ) -> list_aggregate_t.Data:
1322
+ """Uses a structured loading configuration to list aggregated data from the platform
1323
+
1324
+ :param config_reference: The configuration reference name for the listing config
1325
+ :param attribute_values: Attributes to pass to the configuration for parameterizing filters
1326
+ :param offset: Used for pagination. Pagination is done based on the sorting of the config. [Pagination More Info](#pagination)
1327
+ :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)
1328
+ """
1329
+ args = list_aggregate_t.Arguments(
1330
+ config_reference=config_reference,
1331
+ attribute_values=attribute_values,
1332
+ offset=offset,
1333
+ limit=limit,
1334
+ )
1335
+ api_request = APIRequest(
1336
+ method=list_aggregate_t.ENDPOINT_METHOD,
1337
+ endpoint=list_aggregate_t.ENDPOINT_PATH,
1338
+ args=args,
1339
+ request_options=_request_options,
1340
+ )
1341
+ return self.do_request(api_request=api_request, return_type=list_aggregate_t.Data)
1342
+
1085
1343
  def list_entities(
1086
1344
  self,
1087
1345
  *,
@@ -1090,6 +1348,8 @@ class ClientMethods(ABC):
1090
1348
  attributes: dict[OpaqueKey, base_t.JsonValue] | None = None,
1091
1349
  offset: int | None = None,
1092
1350
  limit: int | None = None,
1351
+ additional_filter_configs: list[list_entities_t.AdditionalFilterConfig] | None = None,
1352
+ _request_options: client_config_t.RequestOptions | None = None,
1093
1353
  ) -> list_entities_t.Data:
1094
1354
  """Uses a structured loading configuration to list entities in the system
1095
1355
 
@@ -1098,6 +1358,7 @@ class ClientMethods(ABC):
1098
1358
  :param attributes: Attributes to pass to the configuration for parameterizing filters
1099
1359
  :param offset: Used for pagination. Pagination is done based on the sorting of the config. [Pagination More Info](#pagination)
1100
1360
  :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)
1361
+ :param additional_filter_configs: Advanced property: Additional filter configurations to apply to the listing. A maximum of 10 additional filter configs are supported.
1101
1362
  """
1102
1363
  args = list_entities_t.Arguments(
1103
1364
  entity_type=entity_type,
@@ -1105,11 +1366,13 @@ class ClientMethods(ABC):
1105
1366
  attributes=attributes,
1106
1367
  offset=offset,
1107
1368
  limit=limit,
1369
+ additional_filter_configs=additional_filter_configs,
1108
1370
  )
1109
1371
  api_request = APIRequest(
1110
1372
  method=list_entities_t.ENDPOINT_METHOD,
1111
1373
  endpoint=list_entities_t.ENDPOINT_PATH,
1112
1374
  args=args,
1375
+ request_options=_request_options,
1113
1376
  )
1114
1377
  return self.do_request(api_request=api_request, return_type=list_entities_t.Data)
1115
1378
 
@@ -1120,6 +1383,7 @@ class ClientMethods(ABC):
1120
1383
  search_label: str,
1121
1384
  offset: int | None = None,
1122
1385
  limit: int | None = None,
1386
+ _request_options: client_config_t.RequestOptions | None = None,
1123
1387
  ) -> list_id_source_t.Data:
1124
1388
  """Lists id and label pairs
1125
1389
 
@@ -1138,6 +1402,7 @@ class ClientMethods(ABC):
1138
1402
  method=list_id_source_t.ENDPOINT_METHOD,
1139
1403
  endpoint=list_id_source_t.ENDPOINT_PATH,
1140
1404
  args=args,
1405
+ request_options=_request_options,
1141
1406
  )
1142
1407
  return self.do_request(api_request=api_request, return_type=list_id_source_t.Data)
1143
1408
 
@@ -1147,6 +1412,7 @@ class ClientMethods(ABC):
1147
1412
  entity_key: identifier_t.IdentifierKey,
1148
1413
  entity_type: entity_t.EntityType,
1149
1414
  globally_removable: bool | None = None,
1415
+ _request_options: client_config_t.RequestOptions | None = None,
1150
1416
  ) -> lock_entity_t.Data:
1151
1417
  """Lock an entity
1152
1418
 
@@ -1162,6 +1428,7 @@ class ClientMethods(ABC):
1162
1428
  method=lock_entity_t.ENDPOINT_METHOD,
1163
1429
  endpoint=lock_entity_t.ENDPOINT_PATH,
1164
1430
  args=args,
1431
+ request_options=_request_options,
1165
1432
  )
1166
1433
  return self.do_request(api_request=api_request, return_type=lock_entity_t.Data)
1167
1434
 
@@ -1173,6 +1440,7 @@ class ClientMethods(ABC):
1173
1440
  globally_removable: bool,
1174
1441
  lock_samples: bool | None = None,
1175
1442
  comments: str | None = None,
1443
+ _request_options: client_config_t.RequestOptions | None = None,
1176
1444
  ) -> lock_recipes_t.Data:
1177
1445
  """Lock experiments. Experiments will require unlocking to be editable. Edits to the experiments are blocked while they are locked.
1178
1446
 
@@ -1196,6 +1464,7 @@ class ClientMethods(ABC):
1196
1464
  method=lock_recipes_t.ENDPOINT_METHOD,
1197
1465
  endpoint=lock_recipes_t.ENDPOINT_PATH,
1198
1466
  args=args,
1467
+ request_options=_request_options,
1199
1468
  )
1200
1469
  return self.do_request(api_request=api_request, return_type=lock_recipes_t.Data)
1201
1470
 
@@ -1204,6 +1473,7 @@ class ClientMethods(ABC):
1204
1473
  *,
1205
1474
  entity_type: entity_t.EntityType,
1206
1475
  query: lookup_entity_t.LookupEntityQuery,
1476
+ _request_options: client_config_t.RequestOptions | None = None,
1207
1477
  ) -> lookup_entity_t.Data:
1208
1478
  """Look up an entity based on an identifier or field values
1209
1479
 
@@ -1216,6 +1486,7 @@ class ClientMethods(ABC):
1216
1486
  method=lookup_entity_t.ENDPOINT_METHOD,
1217
1487
  endpoint=lookup_entity_t.ENDPOINT_PATH,
1218
1488
  args=args,
1489
+ request_options=_request_options,
1219
1490
  )
1220
1491
  return self.do_request(api_request=api_request, return_type=lookup_entity_t.Data)
1221
1492
 
@@ -1224,6 +1495,7 @@ class ClientMethods(ABC):
1224
1495
  *,
1225
1496
  spec: id_source_t.IdSourceSpec,
1226
1497
  names: list[str],
1498
+ _request_options: client_config_t.RequestOptions | None = None,
1227
1499
  ) -> match_id_source_t.Data:
1228
1500
  """Lists id and label pairs
1229
1501
 
@@ -1238,14 +1510,66 @@ class ClientMethods(ABC):
1238
1510
  method=match_id_source_t.ENDPOINT_METHOD,
1239
1511
  endpoint=match_id_source_t.ENDPOINT_PATH,
1240
1512
  args=args,
1513
+ request_options=_request_options,
1241
1514
  )
1242
1515
  return self.do_request(api_request=api_request, return_type=match_id_source_t.Data)
1243
1516
 
1517
+ def push_notification(
1518
+ self,
1519
+ *,
1520
+ notification_targets: list[notifications_t.NotificationTarget],
1521
+ subject: str,
1522
+ message: str,
1523
+ display_notice: bool = False,
1524
+ entity: entity_t.EntityIdentifier | None = None,
1525
+ notice_configuration: notices_t.NotificationNoticeConfiguration | None = None,
1526
+ _request_options: client_config_t.RequestOptions | None = None,
1527
+ ) -> push_notification_t.Data:
1528
+ """Push a notification to a user or user group
1529
+
1530
+ """
1531
+ args = push_notification_t.Arguments(
1532
+ notification_targets=notification_targets,
1533
+ subject=subject,
1534
+ message=message,
1535
+ entity=entity,
1536
+ display_notice=display_notice,
1537
+ notice_configuration=notice_configuration,
1538
+ )
1539
+ api_request = APIRequest(
1540
+ method=push_notification_t.ENDPOINT_METHOD,
1541
+ endpoint=push_notification_t.ENDPOINT_PATH,
1542
+ args=args,
1543
+ request_options=_request_options,
1544
+ )
1545
+ return self.do_request(api_request=api_request, return_type=push_notification_t.Data)
1546
+
1547
+ def register_sockets_token(
1548
+ self,
1549
+ *,
1550
+ socket_request: sockets_t.SocketTokenRequest,
1551
+ _request_options: client_config_t.RequestOptions | None = None,
1552
+ ) -> register_sockets_token_t.Data:
1553
+ """Request token for connecting to sockets server
1554
+
1555
+ """
1556
+ args = register_sockets_token_t.Arguments(
1557
+ socket_request=socket_request,
1558
+ )
1559
+ api_request = APIRequest(
1560
+ method=register_sockets_token_t.ENDPOINT_METHOD,
1561
+ endpoint=register_sockets_token_t.ENDPOINT_PATH,
1562
+ args=args,
1563
+ request_options=_request_options,
1564
+ )
1565
+ return self.do_request(api_request=api_request, return_type=register_sockets_token_t.Data)
1566
+
1244
1567
  def remove_recipe_from_project(
1245
1568
  self,
1246
1569
  *,
1247
1570
  recipe_key: identifier_t.IdentifierKey,
1248
1571
  project_key: identifier_t.IdentifierKey,
1572
+ _request_options: client_config_t.RequestOptions | None = None,
1249
1573
  ) -> remove_recipe_from_project_t.Data:
1250
1574
  """Removes a recipe from a project
1251
1575
 
@@ -1260,6 +1584,7 @@ class ClientMethods(ABC):
1260
1584
  method=remove_recipe_from_project_t.ENDPOINT_METHOD,
1261
1585
  endpoint=remove_recipe_from_project_t.ENDPOINT_PATH,
1262
1586
  args=args,
1587
+ request_options=_request_options,
1263
1588
  )
1264
1589
  return self.do_request(api_request=api_request, return_type=remove_recipe_from_project_t.Data)
1265
1590
 
@@ -1269,6 +1594,7 @@ class ClientMethods(ABC):
1269
1594
  recipe_from_key: identifier_t.IdentifierKey,
1270
1595
  recipe_to_key: identifier_t.IdentifierKey,
1271
1596
  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],
1597
+ _request_options: client_config_t.RequestOptions | None = None,
1272
1598
  ) -> remove_recipe_link_t.Data:
1273
1599
  """Remove a link between two recipes. Skip if the link doesn't already exist
1274
1600
 
@@ -1285,6 +1611,7 @@ class ClientMethods(ABC):
1285
1611
  method=remove_recipe_link_t.ENDPOINT_METHOD,
1286
1612
  endpoint=remove_recipe_link_t.ENDPOINT_PATH,
1287
1613
  args=args,
1614
+ request_options=_request_options,
1288
1615
  )
1289
1616
  return self.do_request(api_request=api_request, return_type=remove_recipe_link_t.Data)
1290
1617
 
@@ -1293,6 +1620,7 @@ class ClientMethods(ABC):
1293
1620
  *,
1294
1621
  entity_ids: list[str | base_t.ObjectId],
1295
1622
  entity_type: entity_t.EntityType,
1623
+ _request_options: client_config_t.RequestOptions | None = None,
1296
1624
  ) -> resolve_entity_ids_t.Data:
1297
1625
  """Gets the names for passed in ids
1298
1626
 
@@ -1307,6 +1635,7 @@ class ClientMethods(ABC):
1307
1635
  method=resolve_entity_ids_t.ENDPOINT_METHOD,
1308
1636
  endpoint=resolve_entity_ids_t.ENDPOINT_PATH,
1309
1637
  args=args,
1638
+ request_options=_request_options,
1310
1639
  )
1311
1640
  return self.do_request(api_request=api_request, return_type=resolve_entity_ids_t.Data)
1312
1641
 
@@ -1314,6 +1643,7 @@ class ClientMethods(ABC):
1314
1643
  self,
1315
1644
  *,
1316
1645
  requested_conditions: list[resolve_output_conditions_t.ConditionRequest],
1646
+ _request_options: client_config_t.RequestOptions | None = None,
1317
1647
  ) -> resolve_output_conditions_t.Data:
1318
1648
  """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.
1319
1649
 
@@ -1325,6 +1655,7 @@ class ClientMethods(ABC):
1325
1655
  method=resolve_output_conditions_t.ENDPOINT_METHOD,
1326
1656
  endpoint=resolve_output_conditions_t.ENDPOINT_PATH,
1327
1657
  args=args,
1658
+ request_options=_request_options,
1328
1659
  )
1329
1660
  return self.do_request(api_request=api_request, return_type=resolve_output_conditions_t.Data)
1330
1661
 
@@ -1333,6 +1664,7 @@ class ClientMethods(ABC):
1333
1664
  *,
1334
1665
  trigger_ref_name: str,
1335
1666
  entity: entity_t.Entity | None = None,
1667
+ _request_options: client_config_t.RequestOptions | None = None,
1336
1668
  ) -> run_trigger_t.Data:
1337
1669
  """Runs a trigger. Requires admin access
1338
1670
 
@@ -1345,9 +1677,32 @@ class ClientMethods(ABC):
1345
1677
  method=run_trigger_t.ENDPOINT_METHOD,
1346
1678
  endpoint=run_trigger_t.ENDPOINT_PATH,
1347
1679
  args=args,
1680
+ request_options=_request_options,
1348
1681
  )
1349
1682
  return self.do_request(api_request=api_request, return_type=run_trigger_t.Data)
1350
1683
 
1684
+ def set_barcode(
1685
+ self,
1686
+ *,
1687
+ entity_key: entity_t.EntityIdentifier,
1688
+ barcode_value: str,
1689
+ _request_options: client_config_t.RequestOptions | None = None,
1690
+ ) -> set_barcode_t.Data:
1691
+ """Sets the barcode for an entity
1692
+
1693
+ """
1694
+ args = set_barcode_t.Arguments(
1695
+ entity_key=entity_key,
1696
+ barcode_value=barcode_value,
1697
+ )
1698
+ api_request = APIRequest(
1699
+ method=set_barcode_t.ENDPOINT_METHOD,
1700
+ endpoint=set_barcode_t.ENDPOINT_PATH,
1701
+ args=args,
1702
+ request_options=_request_options,
1703
+ )
1704
+ return self.do_request(api_request=api_request, return_type=set_barcode_t.Data)
1705
+
1351
1706
  def set_core_permissions(
1352
1707
  self,
1353
1708
  *,
@@ -1356,6 +1711,7 @@ class ClientMethods(ABC):
1356
1711
  update_type: post_base_t.UpdateType,
1357
1712
  user_group_ids: list[int] | None = None,
1358
1713
  user_ids: list[int] | None = None,
1714
+ _request_options: client_config_t.RequestOptions | None = None,
1359
1715
  ) -> set_core_permissions_t.Data:
1360
1716
  """Sets recipe related permissions
1361
1717
 
@@ -1375,6 +1731,7 @@ class ClientMethods(ABC):
1375
1731
  method=set_core_permissions_t.ENDPOINT_METHOD,
1376
1732
  endpoint=set_core_permissions_t.ENDPOINT_PATH,
1377
1733
  args=args,
1734
+ request_options=_request_options,
1378
1735
  )
1379
1736
  return self.do_request(api_request=api_request, return_type=set_core_permissions_t.Data)
1380
1737
 
@@ -1383,6 +1740,7 @@ class ClientMethods(ABC):
1383
1740
  *,
1384
1741
  entity_identifier: entity_t.EntityIdentifier,
1385
1742
  field_values: list[field_values_t.FieldArgumentValue],
1743
+ _request_options: client_config_t.RequestOptions | None = None,
1386
1744
  ) -> set_entity_field_values_t.Data:
1387
1745
  """Sets field values for an entity
1388
1746
 
@@ -1397,6 +1755,7 @@ class ClientMethods(ABC):
1397
1755
  method=set_entity_field_values_t.ENDPOINT_METHOD,
1398
1756
  endpoint=set_entity_field_values_t.ENDPOINT_PATH,
1399
1757
  args=args,
1758
+ request_options=_request_options,
1400
1759
  )
1401
1760
  return self.do_request(api_request=api_request, return_type=set_entity_field_values_t.Data)
1402
1761
 
@@ -1404,6 +1763,7 @@ class ClientMethods(ABC):
1404
1763
  self,
1405
1764
  *,
1406
1765
  attribute_values: list[set_input_attribute_values_t.InputAttributeValue],
1766
+ _request_options: client_config_t.RequestOptions | None = None,
1407
1767
  ) -> set_input_attribute_values_t.Data:
1408
1768
  """Sets attribute values for an input
1409
1769
 
@@ -1416,6 +1776,7 @@ class ClientMethods(ABC):
1416
1776
  method=set_input_attribute_values_t.ENDPOINT_METHOD,
1417
1777
  endpoint=set_input_attribute_values_t.ENDPOINT_PATH,
1418
1778
  args=args,
1779
+ request_options=_request_options,
1419
1780
  )
1420
1781
  return self.do_request(api_request=api_request, return_type=set_input_attribute_values_t.Data)
1421
1782
 
@@ -1425,6 +1786,7 @@ class ClientMethods(ABC):
1425
1786
  input_key: identifier_t.IdentifierKey,
1426
1787
  category_id: int | None,
1427
1788
  material_family_ids: list[int] | None = None,
1789
+ _request_options: client_config_t.RequestOptions | None = None,
1428
1790
  ) -> set_input_category_t.Data:
1429
1791
  """Sets subcategories for an input
1430
1792
 
@@ -1441,6 +1803,7 @@ class ClientMethods(ABC):
1441
1803
  method=set_input_category_t.ENDPOINT_METHOD,
1442
1804
  endpoint=set_input_category_t.ENDPOINT_PATH,
1443
1805
  args=args,
1806
+ request_options=_request_options,
1444
1807
  )
1445
1808
  return self.do_request(api_request=api_request, return_type=set_input_category_t.Data)
1446
1809
 
@@ -1450,6 +1813,7 @@ class ClientMethods(ABC):
1450
1813
  input_key: identifier_t.IdentifierKey,
1451
1814
  subcategory_ids: list[int],
1452
1815
  update_type: post_base_t.UpdateType,
1816
+ _request_options: client_config_t.RequestOptions | None = None,
1453
1817
  ) -> set_input_subcategories_t.Data:
1454
1818
  """Sets subcategories for an input
1455
1819
 
@@ -1466,6 +1830,7 @@ class ClientMethods(ABC):
1466
1830
  method=set_input_subcategories_t.ENDPOINT_METHOD,
1467
1831
  endpoint=set_input_subcategories_t.ENDPOINT_PATH,
1468
1832
  args=args,
1833
+ request_options=_request_options,
1469
1834
  )
1470
1835
  return self.do_request(api_request=api_request, return_type=set_input_subcategories_t.Data)
1471
1836
 
@@ -1474,6 +1839,7 @@ class ClientMethods(ABC):
1474
1839
  *,
1475
1840
  input_key: identifier_t.IdentifierKey,
1476
1841
  intermediate_type: set_intermediate_type_t.IntermediateType,
1842
+ _request_options: client_config_t.RequestOptions | None = None,
1477
1843
  ) -> set_intermediate_type_t.Data:
1478
1844
  """Sets the type of an intermediate ingredient.
1479
1845
 
@@ -1488,6 +1854,7 @@ class ClientMethods(ABC):
1488
1854
  method=set_intermediate_type_t.ENDPOINT_METHOD,
1489
1855
  endpoint=set_intermediate_type_t.ENDPOINT_PATH,
1490
1856
  args=args,
1857
+ request_options=_request_options,
1491
1858
  )
1492
1859
  return self.do_request(api_request=api_request, return_type=set_intermediate_type_t.Data)
1493
1860
 
@@ -1495,6 +1862,7 @@ class ClientMethods(ABC):
1495
1862
  self,
1496
1863
  *,
1497
1864
  input_data: list[set_recipe_inputs_t.RecipeInputValue],
1865
+ _request_options: client_config_t.RequestOptions | None = None,
1498
1866
  ) -> set_recipe_inputs_t.Data:
1499
1867
  """Sets inputs values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system
1500
1868
 
@@ -1507,6 +1875,7 @@ class ClientMethods(ABC):
1507
1875
  method=set_recipe_inputs_t.ENDPOINT_METHOD,
1508
1876
  endpoint=set_recipe_inputs_t.ENDPOINT_PATH,
1509
1877
  args=args,
1878
+ request_options=_request_options,
1510
1879
  )
1511
1880
  return self.do_request(api_request=api_request, return_type=set_recipe_inputs_t.Data)
1512
1881
 
@@ -1515,6 +1884,7 @@ class ClientMethods(ABC):
1515
1884
  *,
1516
1885
  recipe_key: identifier_t.IdentifierKey,
1517
1886
  recipe_metadata: list[recipe_metadata_t.MetadataValue],
1887
+ _request_options: client_config_t.RequestOptions | None = None,
1518
1888
  ) -> set_recipe_metadata_t.Data:
1519
1889
  """Set metadata values on a recipe
1520
1890
 
@@ -1529,6 +1899,7 @@ class ClientMethods(ABC):
1529
1899
  method=set_recipe_metadata_t.ENDPOINT_METHOD,
1530
1900
  endpoint=set_recipe_metadata_t.ENDPOINT_PATH,
1531
1901
  args=args,
1902
+ request_options=_request_options,
1532
1903
  )
1533
1904
  return self.do_request(api_request=api_request, return_type=set_recipe_metadata_t.Data)
1534
1905
 
@@ -1536,6 +1907,7 @@ class ClientMethods(ABC):
1536
1907
  self,
1537
1908
  *,
1538
1909
  updates: list[set_recipe_output_annotations_t.RecipeOutputUpdateAnnotations],
1910
+ _request_options: client_config_t.RequestOptions | None = None,
1539
1911
  ) -> set_recipe_output_annotations_t.Data:
1540
1912
  """Update annotations for an experiments outputs
1541
1913
 
@@ -1548,6 +1920,7 @@ class ClientMethods(ABC):
1548
1920
  method=set_recipe_output_annotations_t.ENDPOINT_METHOD,
1549
1921
  endpoint=set_recipe_output_annotations_t.ENDPOINT_PATH,
1550
1922
  args=args,
1923
+ request_options=_request_options,
1551
1924
  )
1552
1925
  return self.do_request(api_request=api_request, return_type=set_recipe_output_annotations_t.Data)
1553
1926
 
@@ -1555,6 +1928,7 @@ class ClientMethods(ABC):
1555
1928
  self,
1556
1929
  *,
1557
1930
  output_file_data: set_recipe_output_file_t.RecipeOutputFileValue,
1931
+ _request_options: client_config_t.RequestOptions | None = None,
1558
1932
  ) -> set_recipe_output_file_t.Data:
1559
1933
  """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
1560
1934
 
@@ -1567,6 +1941,7 @@ class ClientMethods(ABC):
1567
1941
  method=set_recipe_output_file_t.ENDPOINT_METHOD,
1568
1942
  endpoint=set_recipe_output_file_t.ENDPOINT_PATH,
1569
1943
  args=args,
1944
+ request_options=_request_options,
1570
1945
  )
1571
1946
  return self.do_request(api_request=api_request, return_type=set_recipe_output_file_t.Data)
1572
1947
 
@@ -1574,6 +1949,7 @@ class ClientMethods(ABC):
1574
1949
  self,
1575
1950
  *,
1576
1951
  output_data: list[set_recipe_outputs_t.RecipeOutputValue],
1952
+ _request_options: client_config_t.RequestOptions | None = None,
1577
1953
  ) -> set_recipe_outputs_t.Data:
1578
1954
  """Sets output values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system
1579
1955
 
@@ -1586,6 +1962,7 @@ class ClientMethods(ABC):
1586
1962
  method=set_recipe_outputs_t.ENDPOINT_METHOD,
1587
1963
  endpoint=set_recipe_outputs_t.ENDPOINT_PATH,
1588
1964
  args=args,
1965
+ request_options=_request_options,
1589
1966
  )
1590
1967
  return self.do_request(api_request=api_request, return_type=set_recipe_outputs_t.Data)
1591
1968
 
@@ -1594,6 +1971,7 @@ class ClientMethods(ABC):
1594
1971
  *,
1595
1972
  recipe_key: identifier_t.IdentifierKey,
1596
1973
  recipe_tag_update: set_recipe_tags_t.RecipeTagUpdate,
1974
+ _request_options: client_config_t.RequestOptions | None = None,
1597
1975
  ) -> set_recipe_tags_t.Data:
1598
1976
  """Modifies recipes tags for a recipe
1599
1977
 
@@ -1608,14 +1986,46 @@ class ClientMethods(ABC):
1608
1986
  method=set_recipe_tags_t.ENDPOINT_METHOD,
1609
1987
  endpoint=set_recipe_tags_t.ENDPOINT_PATH,
1610
1988
  args=args,
1989
+ request_options=_request_options,
1611
1990
  )
1612
1991
  return self.do_request(api_request=api_request, return_type=set_recipe_tags_t.Data)
1613
1992
 
1993
+ def set_recipe_total(
1994
+ self,
1995
+ *,
1996
+ recipe_key: identifier_t.IdentifierKey,
1997
+ value: set_recipe_total_t.ValueNumeric,
1998
+ recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier | None = None,
1999
+ calculation_key: identifier_t.IdentifierKey | None = None,
2000
+ _request_options: client_config_t.RequestOptions | None = None,
2001
+ ) -> set_recipe_total_t.Data:
2002
+ """Updates the Set Total value for a recipe or one of its workflow steps
2003
+
2004
+ :param recipe_key: Identifier for the recipe
2005
+ :param recipe_workflow_step_identifier: Identifier for the recipe workflow step
2006
+ :param value: The quantity in mass, volume, or moles to set for the total
2007
+ :param calculation_key: The linked basis calculation to set
2008
+ """
2009
+ args = set_recipe_total_t.Arguments(
2010
+ recipe_key=recipe_key,
2011
+ recipe_workflow_step_identifier=recipe_workflow_step_identifier,
2012
+ value=value,
2013
+ calculation_key=calculation_key,
2014
+ )
2015
+ api_request = APIRequest(
2016
+ method=set_recipe_total_t.ENDPOINT_METHOD,
2017
+ endpoint=set_recipe_total_t.ENDPOINT_PATH,
2018
+ args=args,
2019
+ request_options=_request_options,
2020
+ )
2021
+ return self.do_request(api_request=api_request, return_type=set_recipe_total_t.Data)
2022
+
1614
2023
  def set_values(
1615
2024
  self,
1616
2025
  *,
1617
2026
  entity: entity_t.Entity,
1618
2027
  values: list[field_values_t.ArgumentValueRefName],
2028
+ _request_options: client_config_t.RequestOptions | None = None,
1619
2029
  ) -> set_values_t.Data:
1620
2030
  """Sets field values for an entity
1621
2031
 
@@ -1628,26 +2038,34 @@ class ClientMethods(ABC):
1628
2038
  method=set_values_t.ENDPOINT_METHOD,
1629
2039
  endpoint=set_values_t.ENDPOINT_PATH,
1630
2040
  args=args,
2041
+ request_options=_request_options,
1631
2042
  )
1632
2043
  return self.do_request(api_request=api_request, return_type=set_values_t.Data)
1633
2044
 
1634
2045
  def transition_entity_phase(
1635
2046
  self,
1636
2047
  *,
1637
- entity: entity_t.Entity,
1638
2048
  transition: transition_entity_phase_t.TransitionIdentifier,
2049
+ entity: entity_t.Entity | None = None,
2050
+ entity_identifier: entity_t.EntityIdentifier | None = None,
2051
+ _request_options: client_config_t.RequestOptions | None = None,
1639
2052
  ) -> transition_entity_phase_t.Data:
1640
2053
  """Transitions an entity from one phase to another
1641
2054
 
2055
+ :param entity: Entity to transition. If entity_identifier is provided, this should be omitted.
2056
+ :param entity_identifier: Identifier of the entity to transition. If entity is provided, this should be omitted.
2057
+ :param transition: Identifier of the transition to perform
1642
2058
  """
1643
2059
  args = transition_entity_phase_t.Arguments(
1644
2060
  entity=entity,
2061
+ entity_identifier=entity_identifier,
1645
2062
  transition=transition,
1646
2063
  )
1647
2064
  api_request = APIRequest(
1648
2065
  method=transition_entity_phase_t.ENDPOINT_METHOD,
1649
2066
  endpoint=transition_entity_phase_t.ENDPOINT_PATH,
1650
2067
  args=args,
2068
+ request_options=_request_options,
1651
2069
  )
1652
2070
  return self.do_request(api_request=api_request, return_type=transition_entity_phase_t.Data)
1653
2071
 
@@ -1655,6 +2073,7 @@ class ClientMethods(ABC):
1655
2073
  self,
1656
2074
  *,
1657
2075
  recipes: list[identifier_t.IdentifierKey],
2076
+ _request_options: client_config_t.RequestOptions | None = None,
1658
2077
  ) -> unarchive_recipes_t.Data:
1659
2078
  """Unarchive/restore the provided recipes
1660
2079
 
@@ -1667,6 +2086,7 @@ class ClientMethods(ABC):
1667
2086
  method=unarchive_recipes_t.ENDPOINT_METHOD,
1668
2087
  endpoint=unarchive_recipes_t.ENDPOINT_PATH,
1669
2088
  args=args,
2089
+ request_options=_request_options,
1670
2090
  )
1671
2091
  return self.do_request(api_request=api_request, return_type=unarchive_recipes_t.Data)
1672
2092
 
@@ -1675,6 +2095,7 @@ class ClientMethods(ABC):
1675
2095
  *,
1676
2096
  entity_key: identifier_t.IdentifierKey,
1677
2097
  entity_type: entity_t.EntityType,
2098
+ _request_options: client_config_t.RequestOptions | None = None,
1678
2099
  ) -> unlock_entity_t.Data:
1679
2100
  """Unlock an entity
1680
2101
 
@@ -1688,6 +2109,7 @@ class ClientMethods(ABC):
1688
2109
  method=unlock_entity_t.ENDPOINT_METHOD,
1689
2110
  endpoint=unlock_entity_t.ENDPOINT_PATH,
1690
2111
  args=args,
2112
+ request_options=_request_options,
1691
2113
  )
1692
2114
  return self.do_request(api_request=api_request, return_type=unlock_entity_t.Data)
1693
2115
 
@@ -1697,6 +2119,7 @@ class ClientMethods(ABC):
1697
2119
  type: unlock_recipes_t.RecipeUnlockType = unlock_recipes_t.RecipeUnlockType.STANDARD,
1698
2120
  recipes: list[identifier_t.IdentifierKey],
1699
2121
  unlock_samples: bool | None = None,
2122
+ _request_options: client_config_t.RequestOptions | None = None,
1700
2123
  ) -> unlock_recipes_t.Data:
1701
2124
  """Unlock experiments. Experiments will edtiable after unlocking if they are currently locked.
1702
2125
 
@@ -1713,6 +2136,7 @@ class ClientMethods(ABC):
1713
2136
  method=unlock_recipes_t.ENDPOINT_METHOD,
1714
2137
  endpoint=unlock_recipes_t.ENDPOINT_PATH,
1715
2138
  args=args,
2139
+ request_options=_request_options,
1716
2140
  )
1717
2141
  return self.do_request(api_request=api_request, return_type=unlock_recipes_t.Data)
1718
2142
 
@@ -1723,6 +2147,7 @@ class ClientMethods(ABC):
1723
2147
  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],
1724
2148
  material_family_ids: list[base_t.ObjectId],
1725
2149
  update_type: post_base_t.UpdateType,
2150
+ _request_options: client_config_t.RequestOptions | None = None,
1726
2151
  ) -> update_entity_material_families_t.Data:
1727
2152
  """Updates the material families that the entity is available in
1728
2153
 
@@ -1741,6 +2166,7 @@ class ClientMethods(ABC):
1741
2166
  method=update_entity_material_families_t.ENDPOINT_METHOD,
1742
2167
  endpoint=update_entity_material_families_t.ENDPOINT_PATH,
1743
2168
  args=args,
2169
+ request_options=_request_options,
1744
2170
  )
1745
2171
  return self.do_request(api_request=api_request, return_type=update_entity_material_families_t.Data)
1746
2172
 
@@ -1752,6 +2178,7 @@ class ClientMethods(ABC):
1752
2178
  condition_parameters: list[upsert_condition_match_t.ConditionParameter] | None = None,
1753
2179
  output_conditions: list[identifier_t.IdentifierKey] | None = None,
1754
2180
  existing_condition_match: identifier_t.IdentifierKey | None = None,
2181
+ _request_options: client_config_t.RequestOptions | None = None,
1755
2182
  ) -> upsert_condition_match_t.Data:
1756
2183
  """Creates or updates condition match
1757
2184
 
@@ -1767,6 +2194,7 @@ class ClientMethods(ABC):
1767
2194
  method=upsert_condition_match_t.ENDPOINT_METHOD,
1768
2195
  endpoint=upsert_condition_match_t.ENDPOINT_PATH,
1769
2196
  args=args,
2197
+ request_options=_request_options,
1770
2198
  )
1771
2199
  return self.do_request(api_request=api_request, return_type=upsert_condition_match_t.Data)
1772
2200
 
@@ -1775,6 +2203,7 @@ class ClientMethods(ABC):
1775
2203
  *,
1776
2204
  option_set_key: identifier_t.IdentifierKey,
1777
2205
  field_options: list[upsert_field_options_t.FieldOption],
2206
+ _request_options: client_config_t.RequestOptions | None = None,
1778
2207
  ) -> upsert_field_options_t.Data:
1779
2208
  """Creates or updates field options for an option set
1780
2209
 
@@ -1789,5 +2218,6 @@ class ClientMethods(ABC):
1789
2218
  method=upsert_field_options_t.ENDPOINT_METHOD,
1790
2219
  endpoint=upsert_field_options_t.ENDPOINT_PATH,
1791
2220
  args=args,
2221
+ request_options=_request_options,
1792
2222
  )
1793
2223
  return self.do_request(api_request=api_request, return_type=upsert_field_options_t.Data)