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

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

Potentially problematic release.


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

Files changed (316) hide show
  1. docs/conf.py +54 -7
  2. docs/index.md +107 -4
  3. docs/integration_examples/create_ingredient.md +43 -0
  4. docs/integration_examples/create_output.md +56 -0
  5. docs/integration_examples/index.md +6 -0
  6. docs/justfile +2 -2
  7. docs/requirements.txt +6 -4
  8. examples/async_batch.py +3 -3
  9. examples/basic_auth.py +7 -0
  10. examples/create_entity.py +3 -1
  11. examples/create_ingredient_sdk.py +34 -0
  12. examples/download_files.py +26 -0
  13. examples/edit_recipe_inputs.py +4 -2
  14. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  15. examples/integration-server/jobs/materials_auto/example_cron.py +21 -0
  16. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  17. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  18. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  19. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  20. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  21. examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
  22. examples/integration-server/jobs/materials_auto/profile.yaml +104 -0
  23. examples/integration-server/pyproject.toml +224 -0
  24. examples/invoke_uploader.py +4 -1
  25. examples/oauth.py +7 -0
  26. examples/set_recipe_metadata_file.py +40 -0
  27. examples/set_recipe_output_file_sdk.py +26 -0
  28. examples/upload_files.py +1 -2
  29. pkgs/argument_parser/__init__.py +9 -0
  30. pkgs/argument_parser/_is_namedtuple.py +3 -0
  31. pkgs/argument_parser/argument_parser.py +217 -70
  32. pkgs/filesystem_utils/__init__.py +1 -0
  33. pkgs/filesystem_utils/_blob_session.py +144 -0
  34. pkgs/filesystem_utils/_gdrive_session.py +10 -7
  35. pkgs/filesystem_utils/_s3_session.py +15 -13
  36. pkgs/filesystem_utils/_sftp_session.py +11 -7
  37. pkgs/filesystem_utils/file_type_utils.py +30 -10
  38. pkgs/py.typed +0 -0
  39. pkgs/serialization/__init__.py +7 -2
  40. pkgs/serialization/annotation.py +64 -0
  41. pkgs/serialization/missing_sentry.py +1 -1
  42. pkgs/serialization/opaque_key.py +1 -1
  43. pkgs/serialization/serial_alias.py +47 -0
  44. pkgs/serialization/serial_class.py +47 -26
  45. pkgs/serialization/serial_generic.py +16 -0
  46. pkgs/serialization/serial_union.py +17 -14
  47. pkgs/serialization/yaml.py +4 -1
  48. pkgs/serialization_util/__init__.py +6 -0
  49. pkgs/serialization_util/dataclasses.py +14 -0
  50. pkgs/serialization_util/serialization_helpers.py +15 -5
  51. pkgs/type_spec/actions_registry/__main__.py +0 -4
  52. pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
  53. pkgs/type_spec/builder.py +354 -119
  54. pkgs/type_spec/builder_types.py +9 -0
  55. pkgs/type_spec/config.py +51 -11
  56. pkgs/type_spec/cross_output_links.py +99 -0
  57. pkgs/type_spec/emit_io_ts.py +1 -1
  58. pkgs/type_spec/emit_open_api.py +127 -36
  59. pkgs/type_spec/emit_open_api_util.py +5 -6
  60. pkgs/type_spec/emit_python.py +329 -121
  61. pkgs/type_spec/emit_typescript.py +117 -256
  62. pkgs/type_spec/emit_typescript_util.py +291 -2
  63. pkgs/type_spec/load_types.py +18 -4
  64. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  65. pkgs/type_spec/open_api_util.py +29 -4
  66. pkgs/type_spec/parts/base.py.prepart +13 -10
  67. pkgs/type_spec/parts/base.ts.prepart +4 -0
  68. pkgs/type_spec/type_info/__main__.py +3 -1
  69. pkgs/type_spec/type_info/emit_type_info.py +124 -29
  70. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  71. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  72. pkgs/type_spec/util.py +4 -4
  73. pkgs/type_spec/value_spec/__main__.py +26 -9
  74. pkgs/type_spec/value_spec/convert_type.py +21 -1
  75. pkgs/type_spec/value_spec/emit_python.py +25 -7
  76. pkgs/type_spec/value_spec/types.py +1 -1
  77. uncountable/core/async_batch.py +1 -1
  78. uncountable/core/client.py +142 -39
  79. uncountable/core/environment.py +41 -0
  80. uncountable/core/file_upload.py +52 -18
  81. uncountable/integration/cli.py +142 -0
  82. uncountable/integration/construct_client.py +8 -8
  83. uncountable/integration/cron.py +11 -37
  84. uncountable/integration/db/connect.py +12 -2
  85. uncountable/integration/db/session.py +25 -0
  86. uncountable/integration/entrypoint.py +8 -37
  87. uncountable/integration/executors/executors.py +125 -2
  88. uncountable/integration/executors/generic_upload_executor.py +87 -29
  89. uncountable/integration/executors/script_executor.py +3 -3
  90. uncountable/integration/http_server/__init__.py +5 -0
  91. uncountable/integration/http_server/types.py +69 -0
  92. uncountable/integration/job.py +242 -12
  93. uncountable/integration/queue_runner/__init__.py +0 -0
  94. uncountable/integration/queue_runner/command_server/__init__.py +28 -0
  95. uncountable/integration/queue_runner/command_server/command_client.py +133 -0
  96. uncountable/integration/queue_runner/command_server/command_server.py +142 -0
  97. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  98. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  99. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +58 -0
  100. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +57 -0
  101. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +114 -0
  102. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +264 -0
  103. uncountable/integration/queue_runner/command_server/types.py +75 -0
  104. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  105. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +250 -0
  106. uncountable/integration/queue_runner/datastore/interface.py +29 -0
  107. uncountable/integration/queue_runner/datastore/model.py +24 -0
  108. uncountable/integration/queue_runner/job_scheduler.py +200 -0
  109. uncountable/integration/queue_runner/queue_runner.py +34 -0
  110. uncountable/integration/queue_runner/types.py +7 -0
  111. uncountable/integration/queue_runner/worker.py +116 -0
  112. uncountable/integration/scan_profiles.py +67 -0
  113. uncountable/integration/scheduler.py +199 -0
  114. uncountable/integration/secret_retrieval/retrieve_secret.py +26 -4
  115. uncountable/integration/server.py +94 -69
  116. uncountable/integration/telemetry.py +150 -34
  117. uncountable/integration/webhook_server/entrypoint.py +97 -0
  118. uncountable/types/__init__.py +78 -1
  119. uncountable/types/api/batch/execute_batch.py +13 -6
  120. uncountable/types/api/batch/execute_batch_load_async.py +9 -3
  121. uncountable/types/api/chemical/convert_chemical_formats.py +17 -5
  122. uncountable/types/api/condition_parameters/__init__.py +1 -0
  123. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  124. uncountable/types/api/entity/create_entities.py +19 -7
  125. uncountable/types/api/entity/create_entity.py +17 -8
  126. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  127. uncountable/types/api/entity/export_entities.py +59 -0
  128. uncountable/types/api/entity/get_entities_data.py +13 -4
  129. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  130. uncountable/types/api/entity/list_aggregate.py +79 -0
  131. uncountable/types/api/entity/list_entities.py +42 -10
  132. uncountable/types/api/entity/lock_entity.py +11 -4
  133. uncountable/types/api/entity/lookup_entity.py +116 -0
  134. uncountable/types/api/entity/resolve_entity_ids.py +15 -6
  135. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  136. uncountable/types/api/entity/set_values.py +10 -3
  137. uncountable/types/api/entity/transition_entity_phase.py +22 -7
  138. uncountable/types/api/entity/unlock_entity.py +10 -3
  139. uncountable/types/api/equipment/associate_equipment_input.py +9 -3
  140. uncountable/types/api/field_options/upsert_field_options.py +17 -7
  141. uncountable/types/api/files/__init__.py +1 -0
  142. uncountable/types/api/files/download_file.py +77 -0
  143. uncountable/types/api/id_source/list_id_source.py +16 -7
  144. uncountable/types/api/id_source/match_id_source.py +14 -5
  145. uncountable/types/api/input_groups/get_input_group_names.py +13 -4
  146. uncountable/types/api/inputs/create_inputs.py +23 -9
  147. uncountable/types/api/inputs/get_input_data.py +30 -12
  148. uncountable/types/api/inputs/get_input_names.py +16 -7
  149. uncountable/types/api/inputs/get_inputs_data.py +25 -7
  150. uncountable/types/api/inputs/set_input_attribute_values.py +12 -6
  151. uncountable/types/api/inputs/set_input_category.py +12 -5
  152. uncountable/types/api/inputs/set_input_subcategories.py +10 -3
  153. uncountable/types/api/inputs/set_intermediate_type.py +11 -4
  154. uncountable/types/api/integrations/__init__.py +1 -0
  155. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  156. uncountable/types/api/integrations/push_notification.py +49 -0
  157. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  158. uncountable/types/api/listing/__init__.py +1 -0
  159. uncountable/types/api/listing/fetch_listing.py +58 -0
  160. uncountable/types/api/material_families/update_entity_material_families.py +10 -4
  161. uncountable/types/api/notebooks/__init__.py +1 -0
  162. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  163. uncountable/types/api/outputs/get_output_data.py +28 -13
  164. uncountable/types/api/outputs/get_output_names.py +15 -6
  165. uncountable/types/api/outputs/get_output_organization.py +173 -0
  166. uncountable/types/api/outputs/resolve_output_conditions.py +20 -8
  167. uncountable/types/api/permissions/set_core_permissions.py +26 -10
  168. uncountable/types/api/project/get_projects.py +16 -7
  169. uncountable/types/api/project/get_projects_data.py +17 -8
  170. uncountable/types/api/recipe_links/create_recipe_link.py +12 -5
  171. uncountable/types/api/recipe_links/remove_recipe_link.py +11 -4
  172. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +16 -7
  173. uncountable/types/api/recipes/add_recipe_to_project.py +10 -3
  174. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  175. uncountable/types/api/recipes/archive_recipes.py +11 -4
  176. uncountable/types/api/recipes/associate_recipe_as_input.py +12 -5
  177. uncountable/types/api/recipes/associate_recipe_as_lot.py +10 -3
  178. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  179. uncountable/types/api/recipes/create_mix_order.py +44 -0
  180. uncountable/types/api/recipes/create_recipe.py +15 -9
  181. uncountable/types/api/recipes/create_recipes.py +21 -9
  182. uncountable/types/api/recipes/disassociate_recipe_as_input.py +10 -3
  183. uncountable/types/api/recipes/edit_recipe_inputs.py +134 -22
  184. uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
  185. uncountable/types/api/recipes/get_curve.py +11 -5
  186. uncountable/types/api/recipes/get_recipe_calculations.py +13 -7
  187. uncountable/types/api/recipes/get_recipe_links.py +10 -4
  188. uncountable/types/api/recipes/get_recipe_names.py +13 -4
  189. uncountable/types/api/recipes/get_recipe_output_metadata.py +12 -6
  190. uncountable/types/api/recipes/get_recipes_data.py +87 -33
  191. uncountable/types/api/recipes/lock_recipes.py +19 -8
  192. uncountable/types/api/recipes/remove_recipe_from_project.py +10 -3
  193. uncountable/types/api/recipes/set_recipe_inputs.py +16 -10
  194. uncountable/types/api/recipes/set_recipe_metadata.py +10 -3
  195. uncountable/types/api/recipes/set_recipe_output_annotations.py +24 -12
  196. uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
  197. uncountable/types/api/recipes/set_recipe_outputs.py +35 -12
  198. uncountable/types/api/recipes/set_recipe_tags.py +26 -9
  199. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  200. uncountable/types/api/recipes/unarchive_recipes.py +10 -3
  201. uncountable/types/api/recipes/unlock_recipes.py +14 -6
  202. uncountable/types/api/runsheet/__init__.py +1 -0
  203. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  204. uncountable/types/api/triggers/run_trigger.py +11 -4
  205. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  206. uncountable/types/api/uploader/invoke_uploader.py +13 -6
  207. uncountable/types/api/user/__init__.py +1 -0
  208. uncountable/types/api/user/get_current_user_info.py +40 -0
  209. uncountable/types/async_batch.py +2 -1
  210. uncountable/types/async_batch_processor.py +618 -18
  211. uncountable/types/async_batch_t.py +54 -7
  212. uncountable/types/async_jobs.py +8 -0
  213. uncountable/types/async_jobs_t.py +52 -0
  214. uncountable/types/auth_retrieval.py +11 -0
  215. uncountable/types/auth_retrieval_t.py +75 -0
  216. uncountable/types/base.py +0 -1
  217. uncountable/types/base_t.py +13 -11
  218. uncountable/types/calculations.py +0 -1
  219. uncountable/types/calculations_t.py +5 -2
  220. uncountable/types/chemical_structure.py +0 -1
  221. uncountable/types/chemical_structure_t.py +6 -5
  222. uncountable/types/client_base.py +751 -70
  223. uncountable/types/client_config.py +1 -1
  224. uncountable/types/client_config_t.py +17 -3
  225. uncountable/types/curves.py +0 -1
  226. uncountable/types/curves_t.py +10 -7
  227. uncountable/types/data.py +12 -0
  228. uncountable/types/data_t.py +103 -0
  229. uncountable/types/entity.py +4 -1
  230. uncountable/types/entity_t.py +125 -7
  231. uncountable/types/experiment_groups.py +0 -1
  232. uncountable/types/experiment_groups_t.py +5 -2
  233. uncountable/types/exports.py +8 -0
  234. uncountable/types/exports_t.py +34 -0
  235. uncountable/types/field_values.py +19 -1
  236. uncountable/types/field_values_t.py +246 -9
  237. uncountable/types/fields.py +0 -1
  238. uncountable/types/fields_t.py +5 -2
  239. uncountable/types/generic_upload.py +6 -1
  240. uncountable/types/generic_upload_t.py +88 -9
  241. uncountable/types/id_source.py +0 -1
  242. uncountable/types/id_source_t.py +26 -7
  243. uncountable/types/identifier.py +0 -1
  244. uncountable/types/identifier_t.py +13 -5
  245. uncountable/types/input_attributes.py +0 -1
  246. uncountable/types/input_attributes_t.py +4 -4
  247. uncountable/types/inputs.py +1 -1
  248. uncountable/types/inputs_t.py +24 -4
  249. uncountable/types/integration_server.py +8 -0
  250. uncountable/types/integration_server_t.py +46 -0
  251. uncountable/types/integration_session.py +10 -0
  252. uncountable/types/integration_session_t.py +60 -0
  253. uncountable/types/integrations.py +10 -0
  254. uncountable/types/integrations_t.py +62 -0
  255. uncountable/types/job_definition.py +4 -6
  256. uncountable/types/job_definition_t.py +96 -65
  257. uncountable/types/listing.py +9 -0
  258. uncountable/types/listing_t.py +51 -0
  259. uncountable/types/notices.py +8 -0
  260. uncountable/types/notices_t.py +37 -0
  261. uncountable/types/notifications.py +11 -0
  262. uncountable/types/notifications_t.py +74 -0
  263. uncountable/types/outputs.py +0 -1
  264. uncountable/types/outputs_t.py +6 -3
  265. uncountable/types/overrides.py +9 -0
  266. uncountable/types/overrides_t.py +49 -0
  267. uncountable/types/permissions.py +0 -1
  268. uncountable/types/permissions_t.py +1 -2
  269. uncountable/types/phases.py +0 -1
  270. uncountable/types/phases_t.py +5 -2
  271. uncountable/types/post_base.py +0 -1
  272. uncountable/types/post_base_t.py +1 -2
  273. uncountable/types/queued_job.py +17 -0
  274. uncountable/types/queued_job_t.py +140 -0
  275. uncountable/types/recipe_identifiers.py +0 -1
  276. uncountable/types/recipe_identifiers_t.py +21 -8
  277. uncountable/types/recipe_inputs.py +0 -1
  278. uncountable/types/recipe_inputs_t.py +1 -2
  279. uncountable/types/recipe_links.py +0 -1
  280. uncountable/types/recipe_links_t.py +7 -4
  281. uncountable/types/recipe_metadata.py +0 -1
  282. uncountable/types/recipe_metadata_t.py +14 -9
  283. uncountable/types/recipe_output_metadata.py +0 -1
  284. uncountable/types/recipe_output_metadata_t.py +5 -2
  285. uncountable/types/recipe_tags.py +0 -1
  286. uncountable/types/recipe_tags_t.py +5 -2
  287. uncountable/types/recipe_workflow_steps.py +0 -1
  288. uncountable/types/recipe_workflow_steps_t.py +14 -7
  289. uncountable/types/recipes.py +0 -1
  290. uncountable/types/recipes_t.py +6 -2
  291. uncountable/types/response.py +0 -1
  292. uncountable/types/response_t.py +3 -2
  293. uncountable/types/secret_retrieval.py +0 -1
  294. uncountable/types/secret_retrieval_t.py +13 -7
  295. uncountable/types/sockets.py +20 -0
  296. uncountable/types/sockets_t.py +169 -0
  297. uncountable/types/structured_filters.py +25 -0
  298. uncountable/types/structured_filters_t.py +248 -0
  299. uncountable/types/units.py +0 -1
  300. uncountable/types/units_t.py +5 -2
  301. uncountable/types/uploader.py +24 -0
  302. uncountable/types/uploader_t.py +222 -0
  303. uncountable/types/users.py +0 -1
  304. uncountable/types/users_t.py +5 -2
  305. uncountable/types/webhook_job.py +9 -0
  306. uncountable/types/webhook_job_t.py +48 -0
  307. uncountable/types/workflows.py +0 -1
  308. uncountable/types/workflows_t.py +10 -4
  309. uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
  310. uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
  311. {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
  312. UncountablePythonSDK-0.0.52.dist-info/METADATA +0 -56
  313. UncountablePythonSDK-0.0.52.dist-info/RECORD +0 -246
  314. docs/quickstart.md +0 -19
  315. uncountable/core/version.py +0 -11
  316. {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,57 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from ... import base_t
12
+ from ... import identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ "RecipeColumnCalculationValue",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "GET"
23
+ ENDPOINT_PATH = "api/external/recipes/get_column_calculation_values"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ @serial_class(
28
+ named_type_path="sdk.api.recipes.get_column_calculation_values.Arguments",
29
+ )
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
+ class Arguments:
32
+ recipe_keys: list[identifier_t.IdentifierKey]
33
+ calculation_key: identifier_t.IdentifierKey
34
+
35
+
36
+ # DO NOT MODIFY -- This file is generated by type_spec
37
+ @serial_class(
38
+ named_type_path="sdk.api.recipes.get_column_calculation_values.RecipeColumnCalculationValue",
39
+ to_string_values={"calculation_quantity"},
40
+ )
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
+ class RecipeColumnCalculationValue:
43
+ recipe_id: base_t.ObjectId
44
+ ingredient_id: base_t.ObjectId
45
+ recipe_step_id: base_t.ObjectId
46
+ recipe_input_id: base_t.ObjectId
47
+ calculation_quantity: Decimal | None = None
48
+
49
+
50
+ # DO NOT MODIFY -- This file is generated by type_spec
51
+ @serial_class(
52
+ named_type_path="sdk.api.recipes.get_column_calculation_values.Data",
53
+ )
54
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
+ class Data:
56
+ values: list[RecipeColumnCalculationValue]
57
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -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
@@ -8,6 +7,7 @@ import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
10
+ from pkgs.serialization import serial_class
11
11
  from ... import base_t
12
12
  from ... import curves_t
13
13
 
@@ -23,14 +23,20 @@ ENDPOINT_PATH = "api/external/recipes/external_get_curve"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclasses.dataclass(kw_only=True)
26
+ @serial_class(
27
+ named_type_path="sdk.api.recipes.get_curve.Arguments",
28
+ )
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
27
30
  class Arguments:
28
- recipe_output_id: typing.Optional[base_t.ObjectId] = None
29
- recipe_input_id: typing.Optional[base_t.ObjectId] = None
31
+ recipe_output_id: base_t.ObjectId | None = None
32
+ recipe_input_id: base_t.ObjectId | None = None
30
33
 
31
34
 
32
35
  # DO NOT MODIFY -- This file is generated by type_spec
33
- @dataclasses.dataclass(kw_only=True)
36
+ @serial_class(
37
+ named_type_path="sdk.api.recipes.get_curve.Data",
38
+ )
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
34
40
  class Data:
35
41
  curve: curves_t.Curve
36
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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
@@ -25,27 +24,34 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_calculations"
25
24
 
26
25
 
27
26
  # DO NOT MODIFY -- This file is generated by type_spec
28
- @dataclasses.dataclass(kw_only=True)
27
+ @serial_class(
28
+ named_type_path="sdk.api.recipes.get_recipe_calculations.Arguments",
29
+ )
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
31
  class Arguments:
30
32
  recipe_ids: list[base_t.ObjectId]
31
- calculation_ids: typing.Optional[list[base_t.ObjectId]] = None
33
+ calculation_ids: list[base_t.ObjectId] | None = None
32
34
 
33
35
 
34
36
  # DO NOT MODIFY -- This file is generated by type_spec
35
37
  @serial_class(
38
+ named_type_path="sdk.api.recipes.get_recipe_calculations.RecipeCalculation",
36
39
  unconverted_values={"quantity_json"},
37
40
  to_string_values={"quantity_dec"},
38
41
  )
39
- @dataclasses.dataclass(kw_only=True)
42
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
43
  class RecipeCalculation:
41
44
  recipe_id: base_t.ObjectId
42
45
  calculation_id: base_t.ObjectId
43
- quantity_dec: typing.Optional[Decimal] = None
44
- quantity_json: typing.Optional[base_t.JsonValue] = None
46
+ quantity_dec: Decimal | None = None
47
+ quantity_json: base_t.JsonValue | None = None
45
48
 
46
49
 
47
50
  # DO NOT MODIFY -- This file is generated by type_spec
48
- @dataclasses.dataclass(kw_only=True)
51
+ @serial_class(
52
+ named_type_path="sdk.api.recipes.get_recipe_calculations.Data",
53
+ )
54
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
49
55
  class Data:
50
56
  recipe_calculations: list[RecipeCalculation]
51
57
  calculations: list[calculations_t.Calculation]
@@ -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
@@ -8,6 +7,7 @@ import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
10
+ from pkgs.serialization import serial_class
11
11
  from ... import base_t
12
12
  from ... import recipe_links_t
13
13
 
@@ -23,15 +23,21 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_links"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclasses.dataclass(kw_only=True)
26
+ @serial_class(
27
+ named_type_path="sdk.api.recipes.get_recipe_links.Arguments",
28
+ )
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
27
30
  class Arguments:
28
31
  recipe_ids: list[base_t.ObjectId]
29
32
  depth: int = 1
30
- link_types: typing.Optional[list[recipe_links_t.RecipeLinkType]]
33
+ link_types: list[recipe_links_t.RecipeLinkType] | None
31
34
 
32
35
 
33
36
  # DO NOT MODIFY -- This file is generated by type_spec
34
- @dataclasses.dataclass(kw_only=True)
37
+ @serial_class(
38
+ named_type_path="sdk.api.recipes.get_recipe_links.Data",
39
+ )
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
35
41
  class Data:
36
42
  recipe_links: list[recipe_links_t.RecipeLink]
37
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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
@@ -8,6 +7,7 @@ import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
10
+ from pkgs.serialization import serial_class
11
11
  from ... import base_t
12
12
 
13
13
  __all__: list[str] = [
@@ -23,20 +23,29 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_names"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclasses.dataclass(kw_only=True)
26
+ @serial_class(
27
+ named_type_path="sdk.api.recipes.get_recipe_names.Arguments",
28
+ )
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
27
30
  class Arguments:
28
31
  project_id: base_t.ObjectId
29
32
 
30
33
 
31
34
  # DO NOT MODIFY -- This file is generated by type_spec
32
- @dataclasses.dataclass(kw_only=True)
35
+ @serial_class(
36
+ named_type_path="sdk.api.recipes.get_recipe_names.SimpleRecipe",
37
+ )
38
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
33
39
  class SimpleRecipe:
34
40
  id: base_t.ObjectId
35
41
  name: str
36
42
 
37
43
 
38
44
  # DO NOT MODIFY -- This file is generated by type_spec
39
- @dataclasses.dataclass(kw_only=True)
45
+ @serial_class(
46
+ named_type_path="sdk.api.recipes.get_recipe_names.Data",
47
+ )
48
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
49
  class Data:
41
50
  recipes: list[SimpleRecipe]
42
51
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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
@@ -25,26 +24,33 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_output_metadata"
25
24
 
26
25
 
27
26
  # DO NOT MODIFY -- This file is generated by type_spec
28
- @dataclasses.dataclass(kw_only=True)
27
+ @serial_class(
28
+ named_type_path="sdk.api.recipes.get_recipe_output_metadata.Arguments",
29
+ )
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
31
  class Arguments:
30
32
  recipe_output_ids: list[base_t.ObjectId]
31
33
 
32
34
 
33
35
  # DO NOT MODIFY -- This file is generated by type_spec
34
36
  @serial_class(
37
+ named_type_path="sdk.api.recipes.get_recipe_output_metadata.RecipeOutputMetadata",
35
38
  unconverted_values={"quantity_json"},
36
39
  to_string_values={"quantity_dec"},
37
40
  )
38
- @dataclasses.dataclass(kw_only=True)
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
42
  class RecipeOutputMetadata:
40
43
  recipe_output_id: base_t.ObjectId
41
44
  recipe_output_metadata_field_id: base_t.ObjectId
42
- quantity_dec: Decimal
43
- quantity_json: base_t.JsonValue
45
+ quantity_dec: Decimal | None = None
46
+ quantity_json: base_t.JsonValue | None = None
44
47
 
45
48
 
46
49
  # DO NOT MODIFY -- This file is generated by type_spec
47
- @dataclasses.dataclass(kw_only=True)
50
+ @serial_class(
51
+ named_type_path="sdk.api.recipes.get_recipe_output_metadata.Data",
52
+ )
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
48
54
  class Data:
49
55
  recipe_output_metadata: list[RecipeOutputMetadata]
50
56
  recipe_output_metadata_fields: list[recipe_output_metadata_t.RecipeOutputMetadataField]
@@ -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
@@ -7,8 +6,10 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_string_enum
12
13
  from ... import base_t
13
14
  from ... import experiment_groups_t
14
15
  from ... import inputs_t
@@ -25,7 +26,9 @@ __all__: list[str] = [
25
26
  "ENDPOINT_PATH",
26
27
  "Recipe",
27
28
  "RecipeInput",
29
+ "RecipeLockStatus",
28
30
  "RecipeOutput",
31
+ "RecipeOutputInclusion",
29
32
  "RecipeStep",
30
33
  "RecipeStepGroup",
31
34
  "RecipeStepRelationship",
@@ -38,45 +41,66 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
38
41
 
39
42
 
40
43
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclasses.dataclass(kw_only=True)
44
+ @serial_class(
45
+ named_type_path="sdk.api.recipes.get_recipes_data.Arguments",
46
+ )
47
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
48
  class Arguments:
43
- recipe_ids: typing.Optional[typing.Optional[list[base_t.ObjectId]]] = None
44
- project_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
45
- offset: typing.Optional[typing.Optional[int]] = None
46
- limit: typing.Optional[typing.Optional[int]] = None
49
+ recipe_ids: list[base_t.ObjectId] | None = None
50
+ project_id: base_t.ObjectId | None = None
51
+ offset: int | None = None
52
+ limit: int | None = None
53
+ empty_output_behavior: RecipeOutputInclusion | None = None
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ @serial_string_enum(
58
+ labels={
59
+ "include_null": "Include Outputs without values",
60
+ "exclude_null": "Exclude Outputs without values",
61
+ },
62
+ )
63
+ class RecipeOutputInclusion(StrEnum):
64
+ INCLUDE_NULL = "include_null"
65
+ EXCLUDE_NULL = "exclude_null"
47
66
 
48
67
 
49
68
  # DO NOT MODIFY -- This file is generated by type_spec
50
69
  @serial_class(
70
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeOutput",
51
71
  unconverted_values={"quantity_json"},
52
72
  to_string_values={"quantity_dec"},
53
73
  )
54
- @dataclasses.dataclass(kw_only=True)
74
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
75
  class RecipeOutput:
56
76
  id: base_t.ObjectId
57
77
  output_id: base_t.ObjectId
58
78
  replicate_num: int
59
79
  quantity_json: base_t.JsonValue
60
- curve_id: typing.Optional[base_t.ObjectId]
61
- output_condition_id: typing.Optional[base_t.ObjectId]
62
- quantity_dec: typing.Optional[Decimal] = None
80
+ curve_id: base_t.ObjectId | None
81
+ output_condition_id: base_t.ObjectId | None
82
+ quantity_dec: Decimal | None = None
63
83
 
64
84
 
65
85
  # DO NOT MODIFY -- This file is generated by type_spec
66
86
  @serial_class(
87
+ named_type_path="sdk.api.recipes.get_recipes_data.ConditionParameterValue",
67
88
  unconverted_values={"quantity_json"},
68
89
  to_string_values={"quantity_dec"},
69
90
  )
70
- @dataclasses.dataclass(kw_only=True)
91
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
71
92
  class ConditionParameterValue:
72
93
  condition_parameter_id: base_t.ObjectId
73
94
  condition_parameter_name: str
74
95
  quantity_json: base_t.JsonValue
75
- quantity_dec: typing.Optional[Decimal] = None
96
+ quantity_dec: Decimal | None = None
76
97
 
77
98
 
78
99
  # DO NOT MODIFY -- This file is generated by type_spec
79
- @dataclasses.dataclass(kw_only=True)
100
+ @serial_class(
101
+ named_type_path="sdk.api.recipes.get_recipes_data.SimpleOutputCondition",
102
+ )
103
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
80
104
  class SimpleOutputCondition:
81
105
  output_condition_id: base_t.ObjectId
82
106
  condition_parameter_values: list[ConditionParameterValue]
@@ -84,42 +108,54 @@ class SimpleOutputCondition:
84
108
 
85
109
  # DO NOT MODIFY -- This file is generated by type_spec
86
110
  @serial_class(
111
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeInput",
87
112
  unconverted_values={"actual_quantity_json", "quantity_json"},
88
113
  to_string_values={"actual_quantity_dec", "quantity_dec"},
89
114
  )
90
- @dataclasses.dataclass(kw_only=True)
115
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
91
116
  class RecipeInput:
92
117
  id: base_t.ObjectId
93
118
  input_id: base_t.ObjectId
94
- input_lot_recipe_id: typing.Optional[base_t.ObjectId]
119
+ input_lot_recipe_id: base_t.ObjectId | None
95
120
  recipe_step_id: base_t.ObjectId
96
121
  quantity_json: base_t.JsonValue
97
- curve_id: typing.Optional[base_t.ObjectId]
122
+ curve_id: base_t.ObjectId | None
98
123
  actual_quantity_json: base_t.JsonValue
99
124
  behavior: str
100
- quantity_dec: typing.Optional[Decimal] = None
101
- actual_quantity_dec: typing.Optional[Decimal] = None
125
+ ingredient_role_id: base_t.ObjectId | None
126
+ quantity_dec: Decimal | None = None
127
+ actual_quantity_dec: Decimal | None = None
102
128
 
103
129
 
104
130
  # DO NOT MODIFY -- This file is generated by type_spec
105
- @dataclasses.dataclass(kw_only=True)
131
+ @serial_class(
132
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeStep",
133
+ )
134
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
106
135
  class RecipeStep:
107
- name: typing.Optional[str]
136
+ name: str | None
108
137
  recipe_step_id: base_t.ObjectId
109
138
  recipe_step_number: int
110
- instructions: typing.Optional[str] = None
139
+ instructions: str | None = None
111
140
 
112
141
 
113
142
  # DO NOT MODIFY -- This file is generated by type_spec
114
- @dataclasses.dataclass(kw_only=True)
143
+ @serial_class(
144
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepGroup",
145
+ )
146
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
115
147
  class RecipeStepGroup:
116
- name: typing.Optional[str]
148
+ name: str | None
117
149
  recipe_steps: list[RecipeStep]
118
150
 
119
151
 
120
152
  # DO NOT MODIFY -- This file is generated by type_spec
121
- @dataclasses.dataclass(kw_only=True)
153
+ @serial_class(
154
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeWorkflowStep",
155
+ )
156
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
122
157
  class RecipeWorkflowStep:
158
+ recipe_workflow_step_name: str | None
123
159
  recipe_workflow_step_id: base_t.ObjectId
124
160
  workflow_step_id: base_t.ObjectId
125
161
  recipe_step_groups: list[RecipeStepGroup]
@@ -127,26 +163,40 @@ class RecipeWorkflowStep:
127
163
 
128
164
  # DO NOT MODIFY -- This file is generated by type_spec
129
165
  @serial_class(
166
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepRelationship",
130
167
  to_string_values={"actual_quantity_dec", "quantity_dec"},
131
168
  )
132
- @dataclasses.dataclass(kw_only=True)
169
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
133
170
  class RecipeStepRelationship:
134
171
  step_relationship_id: base_t.ObjectId
135
- name: typing.Optional[str]
172
+ name: str | None
136
173
  source_recipe_workflow_step_id: base_t.ObjectId
137
174
  target_recipe_step_id: base_t.ObjectId
138
- quantity_dec: typing.Optional[Decimal] = None
139
- actual_quantity_dec: typing.Optional[Decimal] = None
175
+ quantity_dec: Decimal | None = None
176
+ actual_quantity_dec: Decimal | None = None
140
177
 
141
178
 
142
179
  # DO NOT MODIFY -- This file is generated by type_spec
143
- @dataclasses.dataclass(kw_only=True)
180
+ @serial_class(
181
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeLockStatus",
182
+ )
183
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
184
+ class RecipeLockStatus:
185
+ has_locked_inputs: bool
186
+ has_locked_outputs: bool
187
+
188
+
189
+ # DO NOT MODIFY -- This file is generated by type_spec
190
+ @serial_class(
191
+ named_type_path="sdk.api.recipes.get_recipes_data.Recipe",
192
+ )
193
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
144
194
  class Recipe:
145
195
  recipe_id: base_t.ObjectId
146
196
  create_datetime: str
147
197
  last_modified_datetime: str
148
198
  name: str
149
- notes: typing.Optional[str]
199
+ notes: str | None
150
200
  workflow_id: base_t.ObjectId
151
201
  metadata: list[recipe_metadata_t.RecipeMetadata]
152
202
  inputs: list[RecipeInput]
@@ -155,12 +205,16 @@ class Recipe:
155
205
  tag_ids: list[base_t.ObjectId]
156
206
  experiment_group_ids: list[base_t.ObjectId]
157
207
  step_relationships: list[RecipeStepRelationship]
158
- creating_user_id: typing.Optional[base_t.ObjectId] = None
159
- barcode_value: typing.Optional[str] = None
208
+ recipe_lock_status: RecipeLockStatus
209
+ creating_user_id: base_t.ObjectId | None = None
210
+ barcode_value: str | None = None
160
211
 
161
212
 
162
213
  # DO NOT MODIFY -- This file is generated by type_spec
163
- @dataclasses.dataclass(kw_only=True)
214
+ @serial_class(
215
+ named_type_path="sdk.api.recipes.get_recipes_data.Data",
216
+ )
217
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
164
218
  class Data:
165
219
  recipes: list[Recipe]
166
220
  workflows: list[workflows_t.SimpleWorkflow]
@@ -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
@@ -7,8 +6,11 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
9
+ from enum import StrEnum
11
10
  import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from ... import async_batch_t
13
+ from ... import base_t
12
14
  from ... import identifier_t
13
15
 
14
16
  __all__: list[str] = [
@@ -31,23 +33,32 @@ class RecipeLockType(StrEnum):
31
33
 
32
34
 
33
35
  # DO NOT MODIFY -- This file is generated by type_spec
34
- @dataclasses.dataclass(kw_only=True)
36
+ @serial_class(
37
+ named_type_path="sdk.api.recipes.lock_recipes.RecipeLockBase",
38
+ )
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
35
40
  class RecipeLockBase:
36
41
  recipe: identifier_t.IdentifierKey
37
42
 
38
43
 
39
44
  # DO NOT MODIFY -- This file is generated by type_spec
40
- @dataclasses.dataclass(kw_only=True)
45
+ @serial_class(
46
+ named_type_path="sdk.api.recipes.lock_recipes.Arguments",
47
+ )
48
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
41
49
  class Arguments:
42
50
  type: RecipeLockType = RecipeLockType.ALL
43
51
  recipes: list[identifier_t.IdentifierKey]
44
52
  globally_removable: bool
45
- lock_samples: typing.Optional[bool] = None
46
- comments: typing.Optional[str] = None
53
+ lock_samples: bool | None = None
54
+ comments: str | None = None
47
55
 
48
56
 
49
57
  # DO NOT MODIFY -- This file is generated by type_spec
50
- @dataclasses.dataclass(kw_only=True)
51
- class Data:
58
+ @serial_class(
59
+ named_type_path="sdk.api.recipes.lock_recipes.Data",
60
+ )
61
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
62
+ class Data(async_batch_t.AsyncBatchActionReturn):
52
63
  pass
53
64
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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
@@ -8,6 +7,8 @@ import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from ... import base_t
11
12
  from ... import identifier_t
12
13
 
13
14
  __all__: list[str] = [
@@ -22,14 +23,20 @@ ENDPOINT_PATH = "api/external/recipes/remove_recipe_from_project"
22
23
 
23
24
 
24
25
  # DO NOT MODIFY -- This file is generated by type_spec
25
- @dataclasses.dataclass(kw_only=True)
26
+ @serial_class(
27
+ named_type_path="sdk.api.recipes.remove_recipe_from_project.Arguments",
28
+ )
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
26
30
  class Arguments:
27
31
  recipe_key: identifier_t.IdentifierKey
28
32
  project_key: identifier_t.IdentifierKey
29
33
 
30
34
 
31
35
  # DO NOT MODIFY -- This file is generated by type_spec
32
- @dataclasses.dataclass(kw_only=True)
36
+ @serial_class(
37
+ named_type_path="sdk.api.recipes.remove_recipe_from_project.Data",
38
+ )
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
33
40
  class Data:
34
41
  pass
35
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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
@@ -25,28 +24,35 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
25
24
 
26
25
  # DO NOT MODIFY -- This file is generated by type_spec
27
26
  @serial_class(
27
+ named_type_path="sdk.api.recipes.set_recipe_inputs.RecipeInputValue",
28
28
  to_string_values={"value_numeric"},
29
29
  )
30
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
31
  class RecipeInputValue:
32
32
  recipe_id: base_t.ObjectId
33
33
  input_id: base_t.ObjectId
34
- recipe_step_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
35
- value_numeric: typing.Optional[Decimal] = None
36
- value_str: typing.Optional[str] = None
37
- set_actual_value: typing.Optional[bool] = None
38
- lot_recipe_id: typing.Optional[base_t.ObjectId] = None
39
- remove: typing.Optional[bool] = None
34
+ recipe_step_id: base_t.ObjectId | None = None
35
+ value_numeric: Decimal | None = None
36
+ value_str: str | None = None
37
+ set_actual_value: bool | None = None
38
+ lot_recipe_id: base_t.ObjectId | None = None
39
+ remove: bool | None = None
40
40
 
41
41
 
42
42
  # DO NOT MODIFY -- This file is generated by type_spec
43
- @dataclasses.dataclass(kw_only=True)
43
+ @serial_class(
44
+ named_type_path="sdk.api.recipes.set_recipe_inputs.Arguments",
45
+ )
46
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
44
47
  class Arguments:
45
48
  input_data: list[RecipeInputValue]
46
49
 
47
50
 
48
51
  # DO NOT MODIFY -- This file is generated by type_spec
49
- @dataclasses.dataclass(kw_only=True)
52
+ @serial_class(
53
+ named_type_path="sdk.api.recipes.set_recipe_inputs.Data",
54
+ )
55
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
50
56
  class Data:
51
57
  pass
52
58
  # DO NOT MODIFY -- This file is generated by type_spec