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