UncountablePythonSDK 0.0.83__py3-none-any.whl → 0.0.132__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (298) hide show
  1. docs/conf.py +54 -7
  2. docs/index.md +107 -4
  3. docs/integration_examples/create_ingredient.md +43 -0
  4. docs/integration_examples/create_output.md +56 -0
  5. docs/integration_examples/index.md +6 -0
  6. docs/justfile +2 -2
  7. docs/requirements.txt +6 -4
  8. examples/basic_auth.py +7 -0
  9. examples/create_ingredient_sdk.py +34 -0
  10. examples/download_files.py +26 -0
  11. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  12. examples/integration-server/jobs/materials_auto/example_cron.py +3 -0
  13. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  14. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  15. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  16. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  17. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  18. examples/integration-server/jobs/materials_auto/example_wh.py +17 -9
  19. examples/integration-server/jobs/materials_auto/profile.yaml +61 -0
  20. examples/integration-server/pyproject.toml +10 -10
  21. examples/oauth.py +7 -0
  22. examples/set_recipe_metadata_file.py +1 -1
  23. examples/upload_files.py +1 -2
  24. pkgs/argument_parser/__init__.py +8 -0
  25. pkgs/argument_parser/_is_namedtuple.py +3 -0
  26. pkgs/argument_parser/argument_parser.py +196 -63
  27. pkgs/filesystem_utils/__init__.py +1 -0
  28. pkgs/filesystem_utils/_blob_session.py +144 -0
  29. pkgs/filesystem_utils/_gdrive_session.py +5 -5
  30. pkgs/filesystem_utils/_s3_session.py +2 -1
  31. pkgs/filesystem_utils/_sftp_session.py +6 -3
  32. pkgs/filesystem_utils/file_type_utils.py +30 -10
  33. pkgs/serialization/__init__.py +7 -2
  34. pkgs/serialization/annotation.py +64 -0
  35. pkgs/serialization/missing_sentry.py +1 -1
  36. pkgs/serialization/opaque_key.py +1 -1
  37. pkgs/serialization/serial_alias.py +47 -0
  38. pkgs/serialization/serial_class.py +40 -48
  39. pkgs/serialization/serial_generic.py +16 -0
  40. pkgs/serialization/serial_union.py +16 -16
  41. pkgs/serialization_util/__init__.py +6 -0
  42. pkgs/serialization_util/dataclasses.py +14 -0
  43. pkgs/serialization_util/serialization_helpers.py +15 -5
  44. pkgs/type_spec/actions_registry/__main__.py +0 -4
  45. pkgs/type_spec/actions_registry/emit_typescript.py +2 -4
  46. pkgs/type_spec/builder.py +248 -70
  47. pkgs/type_spec/builder_types.py +9 -0
  48. pkgs/type_spec/config.py +40 -7
  49. pkgs/type_spec/cross_output_links.py +99 -0
  50. pkgs/type_spec/emit_open_api.py +121 -34
  51. pkgs/type_spec/emit_open_api_util.py +5 -5
  52. pkgs/type_spec/emit_python.py +277 -86
  53. pkgs/type_spec/emit_typescript.py +102 -29
  54. pkgs/type_spec/emit_typescript_util.py +66 -10
  55. pkgs/type_spec/load_types.py +16 -3
  56. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  57. pkgs/type_spec/open_api_util.py +29 -4
  58. pkgs/type_spec/parts/base.py.prepart +11 -8
  59. pkgs/type_spec/parts/base.ts.prepart +4 -0
  60. pkgs/type_spec/type_info/__main__.py +3 -1
  61. pkgs/type_spec/type_info/emit_type_info.py +115 -22
  62. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  63. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  64. pkgs/type_spec/util.py +3 -3
  65. pkgs/type_spec/value_spec/__main__.py +26 -9
  66. pkgs/type_spec/value_spec/convert_type.py +18 -0
  67. pkgs/type_spec/value_spec/emit_python.py +13 -3
  68. pkgs/type_spec/value_spec/types.py +1 -1
  69. uncountable/core/async_batch.py +1 -1
  70. uncountable/core/client.py +133 -34
  71. uncountable/core/environment.py +3 -3
  72. uncountable/core/file_upload.py +39 -15
  73. uncountable/integration/cli.py +116 -23
  74. uncountable/integration/construct_client.py +3 -3
  75. uncountable/integration/executors/executors.py +12 -2
  76. uncountable/integration/executors/generic_upload_executor.py +66 -14
  77. uncountable/integration/http_server/__init__.py +5 -0
  78. uncountable/integration/http_server/types.py +69 -0
  79. uncountable/integration/job.py +192 -7
  80. uncountable/integration/queue_runner/command_server/__init__.py +4 -0
  81. uncountable/integration/queue_runner/command_server/command_client.py +65 -0
  82. uncountable/integration/queue_runner/command_server/command_server.py +83 -5
  83. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  84. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +36 -0
  85. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +28 -11
  86. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +77 -1
  87. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +135 -0
  88. uncountable/integration/queue_runner/command_server/types.py +25 -2
  89. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +168 -11
  90. uncountable/integration/queue_runner/datastore/interface.py +10 -0
  91. uncountable/integration/queue_runner/datastore/model.py +8 -1
  92. uncountable/integration/queue_runner/job_scheduler.py +63 -23
  93. uncountable/integration/queue_runner/queue_runner.py +10 -2
  94. uncountable/integration/queue_runner/worker.py +3 -5
  95. uncountable/integration/scan_profiles.py +1 -1
  96. uncountable/integration/scheduler.py +74 -25
  97. uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  98. uncountable/integration/server.py +42 -12
  99. uncountable/integration/telemetry.py +63 -10
  100. uncountable/integration/webhook_server/entrypoint.py +39 -112
  101. uncountable/types/__init__.py +58 -1
  102. uncountable/types/api/batch/execute_batch.py +5 -6
  103. uncountable/types/api/batch/execute_batch_load_async.py +2 -3
  104. uncountable/types/api/chemical/convert_chemical_formats.py +10 -5
  105. uncountable/types/api/condition_parameters/__init__.py +1 -0
  106. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  107. uncountable/types/api/entity/create_entities.py +7 -7
  108. uncountable/types/api/entity/create_entity.py +8 -8
  109. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  110. uncountable/types/api/entity/export_entities.py +59 -0
  111. uncountable/types/api/entity/get_entities_data.py +3 -4
  112. uncountable/types/api/entity/grant_entity_permissions.py +6 -6
  113. uncountable/types/api/entity/list_aggregate.py +79 -0
  114. uncountable/types/api/entity/list_entities.py +34 -10
  115. uncountable/types/api/entity/lock_entity.py +4 -4
  116. uncountable/types/api/entity/lookup_entity.py +116 -0
  117. uncountable/types/api/entity/resolve_entity_ids.py +5 -6
  118. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  119. uncountable/types/api/entity/set_values.py +3 -3
  120. uncountable/types/api/entity/transition_entity_phase.py +14 -7
  121. uncountable/types/api/entity/unlock_entity.py +3 -3
  122. uncountable/types/api/equipment/associate_equipment_input.py +2 -3
  123. uncountable/types/api/field_options/upsert_field_options.py +7 -7
  124. uncountable/types/api/files/__init__.py +1 -0
  125. uncountable/types/api/files/download_file.py +77 -0
  126. uncountable/types/api/id_source/list_id_source.py +6 -7
  127. uncountable/types/api/id_source/match_id_source.py +4 -5
  128. uncountable/types/api/input_groups/get_input_group_names.py +3 -4
  129. uncountable/types/api/inputs/create_inputs.py +10 -9
  130. uncountable/types/api/inputs/get_input_data.py +11 -12
  131. uncountable/types/api/inputs/get_input_names.py +6 -7
  132. uncountable/types/api/inputs/get_inputs_data.py +6 -7
  133. uncountable/types/api/inputs/set_input_attribute_values.py +5 -6
  134. uncountable/types/api/inputs/set_input_category.py +5 -5
  135. uncountable/types/api/inputs/set_input_subcategories.py +3 -3
  136. uncountable/types/api/inputs/set_intermediate_type.py +4 -4
  137. uncountable/types/api/integrations/__init__.py +1 -0
  138. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  139. uncountable/types/api/integrations/push_notification.py +49 -0
  140. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  141. uncountable/types/api/listing/__init__.py +1 -0
  142. uncountable/types/api/listing/fetch_listing.py +58 -0
  143. uncountable/types/api/material_families/update_entity_material_families.py +3 -4
  144. uncountable/types/api/notebooks/__init__.py +1 -0
  145. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  146. uncountable/types/api/outputs/get_output_data.py +12 -13
  147. uncountable/types/api/outputs/get_output_names.py +5 -6
  148. uncountable/types/api/outputs/get_output_organization.py +173 -0
  149. uncountable/types/api/outputs/resolve_output_conditions.py +7 -8
  150. uncountable/types/api/permissions/set_core_permissions.py +16 -10
  151. uncountable/types/api/project/get_projects.py +6 -7
  152. uncountable/types/api/project/get_projects_data.py +7 -8
  153. uncountable/types/api/recipe_links/create_recipe_link.py +5 -5
  154. uncountable/types/api/recipe_links/remove_recipe_link.py +4 -4
  155. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +6 -7
  156. uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
  157. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  158. uncountable/types/api/recipes/archive_recipes.py +4 -4
  159. uncountable/types/api/recipes/associate_recipe_as_input.py +5 -5
  160. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
  161. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -3
  162. uncountable/types/api/recipes/create_mix_order.py +44 -0
  163. uncountable/types/api/recipes/create_recipe.py +8 -9
  164. uncountable/types/api/recipes/create_recipes.py +8 -9
  165. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
  166. uncountable/types/api/recipes/edit_recipe_inputs.py +101 -24
  167. uncountable/types/api/recipes/get_column_calculation_values.py +4 -5
  168. uncountable/types/api/recipes/get_curve.py +4 -5
  169. uncountable/types/api/recipes/get_recipe_calculations.py +6 -7
  170. uncountable/types/api/recipes/get_recipe_links.py +3 -4
  171. uncountable/types/api/recipes/get_recipe_names.py +3 -4
  172. uncountable/types/api/recipes/get_recipe_output_metadata.py +5 -6
  173. uncountable/types/api/recipes/get_recipes_data.py +62 -34
  174. uncountable/types/api/recipes/lock_recipes.py +9 -8
  175. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
  176. uncountable/types/api/recipes/set_recipe_inputs.py +9 -10
  177. uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
  178. uncountable/types/api/recipes/set_recipe_output_annotations.py +11 -12
  179. uncountable/types/api/recipes/set_recipe_output_file.py +5 -6
  180. uncountable/types/api/recipes/set_recipe_outputs.py +24 -13
  181. uncountable/types/api/recipes/set_recipe_tags.py +14 -9
  182. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  183. uncountable/types/api/recipes/unarchive_recipes.py +3 -3
  184. uncountable/types/api/recipes/unlock_recipes.py +7 -6
  185. uncountable/types/api/runsheet/__init__.py +1 -0
  186. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  187. uncountable/types/api/triggers/run_trigger.py +4 -4
  188. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  189. uncountable/types/api/uploader/invoke_uploader.py +4 -5
  190. uncountable/types/api/user/__init__.py +1 -0
  191. uncountable/types/api/user/get_current_user_info.py +40 -0
  192. uncountable/types/async_batch.py +1 -1
  193. uncountable/types/async_batch_processor.py +506 -23
  194. uncountable/types/async_batch_t.py +35 -8
  195. uncountable/types/async_jobs.py +0 -1
  196. uncountable/types/async_jobs_t.py +1 -2
  197. uncountable/types/auth_retrieval.py +0 -1
  198. uncountable/types/auth_retrieval_t.py +6 -6
  199. uncountable/types/base.py +0 -1
  200. uncountable/types/base_t.py +11 -9
  201. uncountable/types/calculations.py +0 -1
  202. uncountable/types/calculations_t.py +1 -2
  203. uncountable/types/chemical_structure.py +0 -1
  204. uncountable/types/chemical_structure_t.py +5 -5
  205. uncountable/types/client_base.py +614 -69
  206. uncountable/types/client_config.py +1 -1
  207. uncountable/types/client_config_t.py +13 -3
  208. uncountable/types/curves.py +0 -1
  209. uncountable/types/curves_t.py +6 -7
  210. uncountable/types/data.py +12 -0
  211. uncountable/types/data_t.py +103 -0
  212. uncountable/types/entity.py +1 -1
  213. uncountable/types/entity_t.py +90 -10
  214. uncountable/types/experiment_groups.py +0 -1
  215. uncountable/types/experiment_groups_t.py +1 -2
  216. uncountable/types/exports.py +8 -0
  217. uncountable/types/exports_t.py +34 -0
  218. uncountable/types/field_values.py +19 -1
  219. uncountable/types/field_values_t.py +242 -9
  220. uncountable/types/fields.py +0 -1
  221. uncountable/types/fields_t.py +1 -2
  222. uncountable/types/generic_upload.py +0 -1
  223. uncountable/types/generic_upload_t.py +14 -14
  224. uncountable/types/id_source.py +0 -1
  225. uncountable/types/id_source_t.py +13 -7
  226. uncountable/types/identifier.py +0 -1
  227. uncountable/types/identifier_t.py +10 -5
  228. uncountable/types/input_attributes.py +0 -1
  229. uncountable/types/input_attributes_t.py +3 -4
  230. uncountable/types/inputs.py +0 -1
  231. uncountable/types/inputs_t.py +3 -4
  232. uncountable/types/integration_server.py +0 -1
  233. uncountable/types/integration_server_t.py +13 -4
  234. uncountable/types/integration_session.py +10 -0
  235. uncountable/types/integration_session_t.py +60 -0
  236. uncountable/types/integrations.py +10 -0
  237. uncountable/types/integrations_t.py +62 -0
  238. uncountable/types/job_definition.py +2 -1
  239. uncountable/types/job_definition_t.py +57 -32
  240. uncountable/types/listing.py +9 -0
  241. uncountable/types/listing_t.py +51 -0
  242. uncountable/types/notices.py +8 -0
  243. uncountable/types/notices_t.py +37 -0
  244. uncountable/types/notifications.py +11 -0
  245. uncountable/types/notifications_t.py +74 -0
  246. uncountable/types/outputs.py +0 -1
  247. uncountable/types/outputs_t.py +2 -3
  248. uncountable/types/overrides.py +0 -1
  249. uncountable/types/overrides_t.py +10 -4
  250. uncountable/types/permissions.py +0 -1
  251. uncountable/types/permissions_t.py +1 -2
  252. uncountable/types/phases.py +0 -1
  253. uncountable/types/phases_t.py +1 -2
  254. uncountable/types/post_base.py +0 -1
  255. uncountable/types/post_base_t.py +1 -2
  256. uncountable/types/queued_job.py +2 -1
  257. uncountable/types/queued_job_t.py +29 -12
  258. uncountable/types/recipe_identifiers.py +0 -1
  259. uncountable/types/recipe_identifiers_t.py +18 -8
  260. uncountable/types/recipe_inputs.py +0 -1
  261. uncountable/types/recipe_inputs_t.py +1 -2
  262. uncountable/types/recipe_links.py +0 -1
  263. uncountable/types/recipe_links_t.py +3 -4
  264. uncountable/types/recipe_metadata.py +0 -1
  265. uncountable/types/recipe_metadata_t.py +9 -10
  266. uncountable/types/recipe_output_metadata.py +0 -1
  267. uncountable/types/recipe_output_metadata_t.py +1 -2
  268. uncountable/types/recipe_tags.py +0 -1
  269. uncountable/types/recipe_tags_t.py +1 -2
  270. uncountable/types/recipe_workflow_steps.py +0 -1
  271. uncountable/types/recipe_workflow_steps_t.py +7 -7
  272. uncountable/types/recipes.py +0 -1
  273. uncountable/types/recipes_t.py +2 -2
  274. uncountable/types/response.py +0 -1
  275. uncountable/types/response_t.py +2 -2
  276. uncountable/types/secret_retrieval.py +0 -1
  277. uncountable/types/secret_retrieval_t.py +7 -7
  278. uncountable/types/sockets.py +20 -0
  279. uncountable/types/sockets_t.py +169 -0
  280. uncountable/types/structured_filters.py +25 -0
  281. uncountable/types/structured_filters_t.py +248 -0
  282. uncountable/types/units.py +0 -1
  283. uncountable/types/units_t.py +1 -2
  284. uncountable/types/uploader.py +24 -0
  285. uncountable/types/uploader_t.py +222 -0
  286. uncountable/types/users.py +0 -1
  287. uncountable/types/users_t.py +1 -2
  288. uncountable/types/webhook_job.py +1 -1
  289. uncountable/types/webhook_job_t.py +14 -3
  290. uncountable/types/workflows.py +0 -1
  291. uncountable/types/workflows_t.py +3 -4
  292. uncountablepythonsdk-0.0.132.dist-info/METADATA +64 -0
  293. uncountablepythonsdk-0.0.132.dist-info/RECORD +363 -0
  294. {UncountablePythonSDK-0.0.83.dist-info → uncountablepythonsdk-0.0.132.dist-info}/WHEEL +1 -1
  295. UncountablePythonSDK-0.0.83.dist-info/METADATA +0 -60
  296. UncountablePythonSDK-0.0.83.dist-info/RECORD +0 -292
  297. docs/quickstart.md +0 -19
  298. {UncountablePythonSDK-0.0.83.dist-info → uncountablepythonsdk-0.0.132.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -31,12 +30,12 @@ ENDPOINT_PATH = "api/external/outputs/external_get_output_data"
31
30
  @serial_class(
32
31
  named_type_path="sdk.api.outputs.get_output_data.Arguments",
33
32
  )
34
- @dataclasses.dataclass(kw_only=True)
33
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
35
34
  class Arguments:
36
35
  material_family_id: base_t.ObjectId
37
- output_ids: typing.Optional[list[base_t.ObjectId]] = None
38
- offset: typing.Optional[int] = None
39
- limit: typing.Optional[int] = None
36
+ output_ids: list[base_t.ObjectId] | None = None
37
+ offset: int | None = None
38
+ limit: int | None = None
40
39
 
41
40
 
42
41
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -45,18 +44,18 @@ class Arguments:
45
44
  unconverted_values={"quantity_json"},
46
45
  to_string_values={"quantity_dec"},
47
46
  )
48
- @dataclasses.dataclass(kw_only=True)
47
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
49
48
  class OutputAttrVal:
50
49
  attribute_id: base_t.ObjectId
51
50
  quantity_json: base_t.JsonValue
52
- quantity_dec: typing.Optional[Decimal] = None
51
+ quantity_dec: Decimal | None = None
53
52
 
54
53
 
55
54
  # DO NOT MODIFY -- This file is generated by type_spec
56
55
  @serial_class(
57
56
  named_type_path="sdk.api.outputs.get_output_data.SimpleOutputAttr",
58
57
  )
59
- @dataclasses.dataclass(kw_only=True)
58
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
60
59
  class SimpleOutputAttr:
61
60
  attribute_id: base_t.ObjectId
62
61
  name: str
@@ -67,7 +66,7 @@ class SimpleOutputAttr:
67
66
  @serial_class(
68
67
  named_type_path="sdk.api.outputs.get_output_data.SimpleOutputGlobalCategory",
69
68
  )
70
- @dataclasses.dataclass(kw_only=True)
69
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
71
70
  class SimpleOutputGlobalCategory:
72
71
  category_id: base_t.ObjectId
73
72
  name: str
@@ -77,21 +76,21 @@ class SimpleOutputGlobalCategory:
77
76
  @serial_class(
78
77
  named_type_path="sdk.api.outputs.get_output_data.FullOutput",
79
78
  )
80
- @dataclasses.dataclass(kw_only=True)
79
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
81
80
  class FullOutput:
82
81
  output_id: base_t.ObjectId
83
82
  name: str
84
83
  quantity_type: str
85
84
  attributes: list[OutputAttrVal]
86
- global_category_id: typing.Optional[base_t.ObjectId]
87
- unit_id: typing.Optional[base_t.ObjectId]
85
+ global_category_id: base_t.ObjectId | None
86
+ unit_id: base_t.ObjectId | None
88
87
 
89
88
 
90
89
  # DO NOT MODIFY -- This file is generated by type_spec
91
90
  @serial_class(
92
91
  named_type_path="sdk.api.outputs.get_output_data.Data",
93
92
  )
94
- @dataclasses.dataclass(kw_only=True)
93
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
95
94
  class Data:
96
95
  outputs: list[FullOutput]
97
96
  attrs: list[SimpleOutputAttr]
@@ -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
@@ -27,18 +26,18 @@ ENDPOINT_PATH = "api/external/outputs/external_get_output_names"
27
26
  @serial_class(
28
27
  named_type_path="sdk.api.outputs.get_output_names.Arguments",
29
28
  )
30
- @dataclasses.dataclass(kw_only=True)
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
30
  class Arguments:
32
31
  material_family_id: base_t.ObjectId
33
- offset: typing.Optional[int] = None
34
- limit: typing.Optional[int] = None
32
+ offset: int | None = None
33
+ limit: int | None = None
35
34
 
36
35
 
37
36
  # DO NOT MODIFY -- This file is generated by type_spec
38
37
  @serial_class(
39
38
  named_type_path="sdk.api.outputs.get_output_names.OutputWithName",
40
39
  )
41
- @dataclasses.dataclass(kw_only=True)
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
41
  class OutputWithName:
43
42
  output_id: base_t.ObjectId
44
43
  name: str
@@ -48,7 +47,7 @@ class OutputWithName:
48
47
  @serial_class(
49
48
  named_type_path="sdk.api.outputs.get_output_names.Data",
50
49
  )
51
- @dataclasses.dataclass(kw_only=True)
50
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
52
51
  class Data:
53
52
  outputs: list[OutputWithName]
54
53
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,173 @@
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
+ from enum import StrEnum
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_union_annotation
13
+ from pkgs.serialization import serial_alias_annotation
14
+ from ... import base_t
15
+
16
+ __all__: list[str] = [
17
+ "Arguments",
18
+ "Data",
19
+ "ENDPOINT_METHOD",
20
+ "ENDPOINT_PATH",
21
+ "OrganizationParameter",
22
+ "OrganizationParameterBase",
23
+ "OrganizationParameterCategory",
24
+ "OrganizationParameterConditionParameter",
25
+ "OrganizationParameterRecipeInput",
26
+ "OrganizationParameterType",
27
+ "OutputOrganizationRequest",
28
+ "OutputOrganizationRequestMaterialFamily",
29
+ "OutputOrganizationRequestProject",
30
+ "OutputOrganizationRequestScope",
31
+ "OutputOrganizationRequestUser",
32
+ ]
33
+
34
+ ENDPOINT_METHOD = "GET"
35
+ ENDPOINT_PATH = "api/external/outputs/get_output_organization"
36
+
37
+
38
+ # DO NOT MODIFY -- This file is generated by type_spec
39
+ class OutputOrganizationRequestScope(StrEnum):
40
+ MATERIAL_FAMILY = "material_family"
41
+ PROJECT = "project"
42
+ USER = "user"
43
+
44
+
45
+ # DO NOT MODIFY -- This file is generated by type_spec
46
+ @serial_class(
47
+ named_type_path="sdk.api.outputs.get_output_organization.OutputOrganizationRequestMaterialFamily",
48
+ parse_require={"scope"},
49
+ )
50
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
51
+ class OutputOrganizationRequestMaterialFamily:
52
+ scope: typing.Literal[OutputOrganizationRequestScope.MATERIAL_FAMILY] = OutputOrganizationRequestScope.MATERIAL_FAMILY
53
+ material_family_id: base_t.ObjectId
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ @serial_class(
58
+ named_type_path="sdk.api.outputs.get_output_organization.OutputOrganizationRequestProject",
59
+ parse_require={"scope"},
60
+ )
61
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
62
+ class OutputOrganizationRequestProject:
63
+ scope: typing.Literal[OutputOrganizationRequestScope.PROJECT] = OutputOrganizationRequestScope.PROJECT
64
+ project_id: base_t.ObjectId
65
+
66
+
67
+ # DO NOT MODIFY -- This file is generated by type_spec
68
+ @serial_class(
69
+ named_type_path="sdk.api.outputs.get_output_organization.OutputOrganizationRequestUser",
70
+ parse_require={"scope"},
71
+ )
72
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
73
+ class OutputOrganizationRequestUser:
74
+ scope: typing.Literal[OutputOrganizationRequestScope.USER] = OutputOrganizationRequestScope.USER
75
+ material_family_id: base_t.ObjectId
76
+ user_id: base_t.ObjectId
77
+ project_id: base_t.ObjectId | None = None
78
+
79
+
80
+ # DO NOT MODIFY -- This file is generated by type_spec
81
+ OutputOrganizationRequest = typing.Annotated[
82
+ OutputOrganizationRequestMaterialFamily | OutputOrganizationRequestProject | OutputOrganizationRequestUser,
83
+ serial_alias_annotation(
84
+ named_type_path="sdk.api.outputs.get_output_organization.OutputOrganizationRequest",
85
+ ),
86
+ ]
87
+
88
+
89
+ # DO NOT MODIFY -- This file is generated by type_spec
90
+ @serial_class(
91
+ named_type_path="sdk.api.outputs.get_output_organization.Arguments",
92
+ )
93
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
94
+ class Arguments:
95
+ request: OutputOrganizationRequest
96
+
97
+
98
+ # DO NOT MODIFY -- This file is generated by type_spec
99
+ class OrganizationParameterType(StrEnum):
100
+ CATEGORY = "category"
101
+ RECIPE_INPUT = "recipe_input"
102
+ CONDITION_PARAMETER = "condition_parameter"
103
+
104
+
105
+ # DO NOT MODIFY -- This file is generated by type_spec
106
+ @serial_class(
107
+ named_type_path="sdk.api.outputs.get_output_organization.OrganizationParameterBase",
108
+ )
109
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
110
+ class OrganizationParameterBase:
111
+ output_organization_parameter_id: base_t.ObjectId
112
+ null_on_top: bool
113
+ sort_asc: bool
114
+ type: OrganizationParameterType
115
+
116
+
117
+ # DO NOT MODIFY -- This file is generated by type_spec
118
+ @serial_class(
119
+ named_type_path="sdk.api.outputs.get_output_organization.OrganizationParameterCategory",
120
+ parse_require={"type"},
121
+ )
122
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
123
+ class OrganizationParameterCategory(OrganizationParameterBase):
124
+ type: typing.Literal[OrganizationParameterType.CATEGORY] = OrganizationParameterType.CATEGORY
125
+
126
+
127
+ # DO NOT MODIFY -- This file is generated by type_spec
128
+ @serial_class(
129
+ named_type_path="sdk.api.outputs.get_output_organization.OrganizationParameterRecipeInput",
130
+ parse_require={"type"},
131
+ )
132
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
133
+ class OrganizationParameterRecipeInput(OrganizationParameterBase):
134
+ input_id: base_t.ObjectId
135
+ type: typing.Literal[OrganizationParameterType.RECIPE_INPUT] = OrganizationParameterType.RECIPE_INPUT
136
+
137
+
138
+ # DO NOT MODIFY -- This file is generated by type_spec
139
+ @serial_class(
140
+ named_type_path="sdk.api.outputs.get_output_organization.OrganizationParameterConditionParameter",
141
+ parse_require={"type"},
142
+ )
143
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
144
+ class OrganizationParameterConditionParameter(OrganizationParameterBase):
145
+ condition_parameter_id: base_t.ObjectId
146
+ type: typing.Literal[OrganizationParameterType.CONDITION_PARAMETER] = OrganizationParameterType.CONDITION_PARAMETER
147
+
148
+
149
+ # DO NOT MODIFY -- This file is generated by type_spec
150
+ OrganizationParameter = typing.Annotated[
151
+ OrganizationParameterCategory | OrganizationParameterRecipeInput | OrganizationParameterConditionParameter,
152
+ serial_union_annotation(
153
+ named_type_path="sdk.api.outputs.get_output_organization.OrganizationParameter",
154
+ discriminator="type",
155
+ discriminator_map={
156
+ "category": OrganizationParameterCategory,
157
+ "recipe_input": OrganizationParameterRecipeInput,
158
+ "condition_parameter": OrganizationParameterConditionParameter,
159
+ },
160
+ ),
161
+ ]
162
+
163
+
164
+ # DO NOT MODIFY -- This file is generated by type_spec
165
+ @serial_class(
166
+ named_type_path="sdk.api.outputs.get_output_organization.Data",
167
+ )
168
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
169
+ class Data:
170
+ organization_id: base_t.ObjectId | None
171
+ column_definitions: list[OrganizationParameter]
172
+ table_definitions: list[OrganizationParameter]
173
+ # 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
@@ -31,18 +30,18 @@ ENDPOINT_PATH = "api/external/outputs/external_resolve_output_conditions"
31
30
  named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionParameterValueRecord",
32
31
  to_string_values={"value_numeric"},
33
32
  )
34
- @dataclasses.dataclass(kw_only=True)
33
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
35
34
  class ConditionParameterValueRecord:
36
35
  condition_parameter_id: base_t.ObjectId
37
- value_numeric: typing.Optional[Decimal] = None
38
- value_string: typing.Optional[str] = None
36
+ value_numeric: Decimal | None = None
37
+ value_string: str | None = None
39
38
 
40
39
 
41
40
  # DO NOT MODIFY -- This file is generated by type_spec
42
41
  @serial_class(
43
42
  named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionRequest",
44
43
  )
45
- @dataclasses.dataclass(kw_only=True)
44
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
46
45
  class ConditionRequest:
47
46
  conditions: list[ConditionParameterValueRecord]
48
47
 
@@ -51,7 +50,7 @@ class ConditionRequest:
51
50
  @serial_class(
52
51
  named_type_path="sdk.api.outputs.resolve_output_conditions.Arguments",
53
52
  )
54
- @dataclasses.dataclass(kw_only=True)
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
54
  class Arguments:
56
55
  requested_conditions: list[ConditionRequest]
57
56
 
@@ -60,7 +59,7 @@ class Arguments:
60
59
  @serial_class(
61
60
  named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionResponse",
62
61
  )
63
- @dataclasses.dataclass(kw_only=True)
62
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
64
63
  class ConditionResponse:
65
64
  conditions: list[ConditionParameterValueRecord]
66
65
  output_condition_id: base_t.ObjectId
@@ -70,7 +69,7 @@ class ConditionResponse:
70
69
  @serial_class(
71
70
  named_type_path="sdk.api.outputs.resolve_output_conditions.Data",
72
71
  )
73
- @dataclasses.dataclass(kw_only=True)
72
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
74
73
  class Data:
75
74
  resolved_conditions: list[ConditionResponse]
76
75
 
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -9,6 +8,8 @@ import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
11
10
  from pkgs.serialization import serial_class
11
+ from pkgs.serialization import serial_alias_annotation
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
  from ... import permissions_t
14
15
  from ... import post_base_t
@@ -34,7 +35,7 @@ ENDPOINT_PATH = "api/external/permissions/external_set_core_permissions"
34
35
  named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeProject",
35
36
  parse_require={"type"},
36
37
  )
37
- @dataclasses.dataclass(kw_only=True)
38
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
38
39
  class PermissionsScopeProject:
39
40
  type: typing.Literal["project"] = "project"
40
41
  project_key: identifier_t.IdentifierKey
@@ -45,7 +46,7 @@ class PermissionsScopeProject:
45
46
  named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeRecipe",
46
47
  parse_require={"type"},
47
48
  )
48
- @dataclasses.dataclass(kw_only=True)
49
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
49
50
  class PermissionsScopeRecipe:
50
51
  type: typing.Literal["recipe"] = "recipe"
51
52
  recipe_key: identifier_t.IdentifierKey
@@ -56,7 +57,7 @@ class PermissionsScopeRecipe:
56
57
  named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeMaterialFamily",
57
58
  parse_require={"type"},
58
59
  )
59
- @dataclasses.dataclass(kw_only=True)
60
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
60
61
  class PermissionsScopeMaterialFamily:
61
62
  type: typing.Literal["material_family"] = "material_family"
62
63
  material_family_key: identifier_t.IdentifierKey
@@ -67,33 +68,38 @@ class PermissionsScopeMaterialFamily:
67
68
  named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeAllMaterialFamilies",
68
69
  parse_require={"type"},
69
70
  )
70
- @dataclasses.dataclass(kw_only=True)
71
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
71
72
  class PermissionsScopeAllMaterialFamilies:
72
73
  type: typing.Literal["all_material_families"] = "all_material_families"
73
74
 
74
75
 
75
76
  # DO NOT MODIFY -- This file is generated by type_spec
76
- PermissionsScope = typing.Union[PermissionsScopeProject, PermissionsScopeRecipe, PermissionsScopeMaterialFamily, PermissionsScopeAllMaterialFamilies]
77
+ PermissionsScope = typing.Annotated[
78
+ PermissionsScopeProject | PermissionsScopeRecipe | PermissionsScopeMaterialFamily | PermissionsScopeAllMaterialFamilies,
79
+ serial_alias_annotation(
80
+ named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScope",
81
+ ),
82
+ ]
77
83
 
78
84
 
79
85
  # DO NOT MODIFY -- This file is generated by type_spec
80
86
  @serial_class(
81
87
  named_type_path="sdk.api.permissions.set_core_permissions.Arguments",
82
88
  )
83
- @dataclasses.dataclass(kw_only=True)
89
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
84
90
  class Arguments:
85
91
  scope: PermissionsScope
86
92
  permissions_types: list[permissions_t.CorePermissionType]
87
93
  update_type: post_base_t.UpdateType
88
- user_group_ids: typing.Optional[list[int]] = None
89
- user_ids: typing.Optional[list[int]] = None
94
+ user_group_ids: list[int] | None = None
95
+ user_ids: list[int] | None = None
90
96
 
91
97
 
92
98
  # DO NOT MODIFY -- This file is generated by type_spec
93
99
  @serial_class(
94
100
  named_type_path="sdk.api.permissions.set_core_permissions.Data",
95
101
  )
96
- @dataclasses.dataclass(kw_only=True)
102
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
97
103
  class Data:
98
104
  pass
99
105
  # 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
@@ -28,30 +27,30 @@ ENDPOINT_PATH = "api/external/project/external_get_projects"
28
27
  @serial_class(
29
28
  named_type_path="sdk.api.project.get_projects.Arguments",
30
29
  )
31
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
32
31
  class Arguments:
33
32
  all_material_families: bool
34
- material_family_id: typing.Optional[base_t.ObjectId]
33
+ material_family_id: base_t.ObjectId | None
35
34
 
36
35
 
37
36
  # DO NOT MODIFY -- This file is generated by type_spec
38
37
  @serial_class(
39
38
  named_type_path="sdk.api.project.get_projects.Project",
40
39
  )
41
- @dataclasses.dataclass(kw_only=True)
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
41
  class Project:
43
42
  id: base_t.ObjectId
44
43
  name: str
45
44
  material_family_id: base_t.ObjectId
46
- project_owner_id: typing.Optional[base_t.ObjectId]
47
- phase_id: typing.Optional[base_t.ObjectId]
45
+ project_owner_id: base_t.ObjectId | None
46
+ phase_id: base_t.ObjectId | None
48
47
 
49
48
 
50
49
  # DO NOT MODIFY -- This file is generated by type_spec
51
50
  @serial_class(
52
51
  named_type_path="sdk.api.project.get_projects.Data",
53
52
  )
54
- @dataclasses.dataclass(kw_only=True)
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
54
  class Data:
56
55
  projects: list[Project]
57
56
  phases: list[phases_t.Phase]
@@ -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
@@ -30,24 +29,24 @@ ENDPOINT_PATH = "api/external/project/external_get_projects_data"
30
29
  @serial_class(
31
30
  named_type_path="sdk.api.project.get_projects_data.Arguments",
32
31
  )
33
- @dataclasses.dataclass(kw_only=True)
32
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
34
33
  class Arguments:
35
34
  project_ids: list[base_t.ObjectId]
36
- offset: typing.Optional[typing.Optional[int]] = None
37
- limit: typing.Optional[typing.Optional[int]] = None
35
+ offset: int | None = None
36
+ limit: int | None = None
38
37
 
39
38
 
40
39
  # DO NOT MODIFY -- This file is generated by type_spec
41
40
  @serial_class(
42
41
  named_type_path="sdk.api.project.get_projects_data.ProjectDetailed",
43
42
  )
44
- @dataclasses.dataclass(kw_only=True)
43
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
45
44
  class ProjectDetailed:
46
45
  id: base_t.ObjectId
47
46
  name: str
48
47
  material_family_id: base_t.ObjectId
49
- project_owner_id: typing.Optional[base_t.ObjectId]
50
- phase_id: typing.Optional[base_t.ObjectId]
48
+ project_owner_id: base_t.ObjectId | None
49
+ phase_id: base_t.ObjectId | None
51
50
  values: list[field_values_t.ArgumentValueId]
52
51
 
53
52
 
@@ -55,7 +54,7 @@ class ProjectDetailed:
55
54
  @serial_class(
56
55
  named_type_path="sdk.api.project.get_projects_data.Data",
57
56
  )
58
- @dataclasses.dataclass(kw_only=True)
57
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
59
58
  class Data:
60
59
  projects: list[ProjectDetailed]
61
60
  phases: list[phases_t.Phase]
@@ -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
@@ -10,6 +9,7 @@ from decimal import Decimal # noqa: F401
10
9
  import dataclasses
11
10
  from pkgs.serialization import serial_class
12
11
  from ... import async_batch_t
12
+ from ... import base_t
13
13
  from ... import identifier_t
14
14
  from ... import recipe_links_t
15
15
 
@@ -28,19 +28,19 @@ ENDPOINT_PATH = "api/external/recipe_links/create_recipe_link"
28
28
  @serial_class(
29
29
  named_type_path="sdk.api.recipe_links.create_recipe_link.Arguments",
30
30
  )
31
- @dataclasses.dataclass(kw_only=True)
31
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
32
32
  class Arguments:
33
33
  recipe_from_key: identifier_t.IdentifierKey
34
34
  recipe_to_key: identifier_t.IdentifierKey
35
- link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
36
- name: str
35
+ 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]
36
+ name: str | None = None
37
37
 
38
38
 
39
39
  # DO NOT MODIFY -- This file is generated by type_spec
40
40
  @serial_class(
41
41
  named_type_path="sdk.api.recipe_links.create_recipe_link.Data",
42
42
  )
43
- @dataclasses.dataclass(kw_only=True)
43
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
44
44
  class Data(async_batch_t.AsyncBatchActionReturn):
45
45
  pass
46
46
  # 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
@@ -10,6 +9,7 @@ from decimal import Decimal # noqa: F401
10
9
  import dataclasses
11
10
  from pkgs.serialization import serial_class
12
11
  from ... import async_batch_t
12
+ from ... import base_t
13
13
  from ... import identifier_t
14
14
  from ... import recipe_links_t
15
15
 
@@ -28,18 +28,18 @@ ENDPOINT_PATH = "api/external/recipe_links/remove_recipe_link"
28
28
  @serial_class(
29
29
  named_type_path="sdk.api.recipe_links.remove_recipe_link.Arguments",
30
30
  )
31
- @dataclasses.dataclass(kw_only=True)
31
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
32
32
  class Arguments:
33
33
  recipe_from_key: identifier_t.IdentifierKey
34
34
  recipe_to_key: identifier_t.IdentifierKey
35
- link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
35
+ 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]
36
36
 
37
37
 
38
38
  # DO NOT MODIFY -- This file is generated by type_spec
39
39
  @serial_class(
40
40
  named_type_path="sdk.api.recipe_links.remove_recipe_link.Data",
41
41
  )
42
- @dataclasses.dataclass(kw_only=True)
42
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
43
43
  class Data(async_batch_t.AsyncBatchActionReturn):
44
44
  pass
45
45
  # 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
@@ -27,19 +26,19 @@ ENDPOINT_PATH = "api/external/recipe_metadata/external_get_recipe_metadata_data"
27
26
  @serial_class(
28
27
  named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.Arguments",
29
28
  )
30
- @dataclasses.dataclass(kw_only=True)
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
30
  class Arguments:
32
31
  material_family_id: base_t.ObjectId
33
- recipe_metadata_ids: typing.Optional[list[base_t.ObjectId]]
34
- offset: typing.Optional[typing.Optional[int]] = None
35
- limit: typing.Optional[typing.Optional[int]] = None
32
+ recipe_metadata_ids: list[base_t.ObjectId] | None
33
+ offset: int | None = None
34
+ limit: int | None = None
36
35
 
37
36
 
38
37
  # DO NOT MODIFY -- This file is generated by type_spec
39
38
  @serial_class(
40
39
  named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.FullRecipeMetadataField",
41
40
  )
42
- @dataclasses.dataclass(kw_only=True)
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
43
42
  class FullRecipeMetadataField:
44
43
  recipe_metadata_id: base_t.ObjectId
45
44
  name: str
@@ -50,7 +49,7 @@ class FullRecipeMetadataField:
50
49
  @serial_class(
51
50
  named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.Data",
52
51
  )
53
- @dataclasses.dataclass(kw_only=True)
52
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
54
53
  class Data:
55
54
  recipe_metadata: list[FullRecipeMetadataField]
56
55
  # 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
@@ -9,6 +8,7 @@ import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
11
10
  from pkgs.serialization import serial_class
11
+ from ... import base_t
12
12
  from ... import identifier_t
13
13
 
14
14
  __all__: list[str] = [
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/add_recipe_to_project"
26
26
  @serial_class(
27
27
  named_type_path="sdk.api.recipes.add_recipe_to_project.Arguments",
28
28
  )
29
- @dataclasses.dataclass(kw_only=True)
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
30
30
  class Arguments:
31
31
  recipe_key: identifier_t.IdentifierKey
32
32
  project_key: identifier_t.IdentifierKey
@@ -36,7 +36,7 @@ class Arguments:
36
36
  @serial_class(
37
37
  named_type_path="sdk.api.recipes.add_recipe_to_project.Data",
38
38
  )
39
- @dataclasses.dataclass(kw_only=True)
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
40
  class Data:
41
41
  pass
42
42
  # DO NOT MODIFY -- This file is generated by type_spec