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

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

Potentially problematic release.


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

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