UncountablePythonSDK 0.0.110__py3-none-any.whl → 0.0.112__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 (136) hide show
  1. docs/conf.py +2 -2
  2. docs/justfile +1 -1
  3. examples/create_ingredient_sdk.py +34 -0
  4. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
  5. examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
  6. examples/integration-server/pyproject.toml +2 -2
  7. pkgs/argument_parser/argument_parser.py +9 -6
  8. pkgs/type_spec/builder.py +19 -2
  9. pkgs/type_spec/emit_python.py +9 -3
  10. pkgs/type_spec/emit_typescript_util.py +16 -1
  11. pkgs/type_spec/parts/base.py.prepart +4 -0
  12. pkgs/type_spec/type_info/emit_type_info.py +12 -3
  13. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  14. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
  15. pkgs/type_spec/value_spec/convert_type.py +13 -0
  16. uncountable/core/client.py +7 -4
  17. uncountable/integration/executors/generic_upload_executor.py +3 -2
  18. uncountable/integration/job.py +24 -1
  19. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
  20. uncountable/integration/scheduler.py +4 -3
  21. uncountable/types/__init__.py +4 -0
  22. uncountable/types/api/batch/execute_batch.py +4 -4
  23. uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  24. uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
  25. uncountable/types/api/condition_parameters/__init__.py +1 -0
  26. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  27. uncountable/types/api/entity/create_entities.py +3 -3
  28. uncountable/types/api/entity/create_entity.py +3 -3
  29. uncountable/types/api/entity/create_or_update_entity.py +3 -2
  30. uncountable/types/api/entity/get_entities_data.py +3 -3
  31. uncountable/types/api/entity/grant_entity_permissions.py +3 -2
  32. uncountable/types/api/entity/list_entities.py +4 -4
  33. uncountable/types/api/entity/lock_entity.py +3 -2
  34. uncountable/types/api/entity/lookup_entity.py +5 -5
  35. uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  36. uncountable/types/api/entity/set_entity_field_values.py +3 -2
  37. uncountable/types/api/entity/set_values.py +3 -2
  38. uncountable/types/api/entity/transition_entity_phase.py +5 -4
  39. uncountable/types/api/entity/unlock_entity.py +3 -2
  40. uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  41. uncountable/types/api/field_options/upsert_field_options.py +4 -3
  42. uncountable/types/api/files/download_file.py +4 -3
  43. uncountable/types/api/id_source/list_id_source.py +3 -3
  44. uncountable/types/api/id_source/match_id_source.py +3 -3
  45. uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  46. uncountable/types/api/inputs/create_inputs.py +6 -4
  47. uncountable/types/api/inputs/get_input_data.py +6 -6
  48. uncountable/types/api/inputs/get_input_names.py +3 -3
  49. uncountable/types/api/inputs/get_inputs_data.py +6 -6
  50. uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  51. uncountable/types/api/inputs/set_input_category.py +3 -2
  52. uncountable/types/api/inputs/set_input_subcategories.py +3 -2
  53. uncountable/types/api/inputs/set_intermediate_type.py +3 -2
  54. uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  55. uncountable/types/api/outputs/get_output_data.py +6 -6
  56. uncountable/types/api/outputs/get_output_names.py +3 -3
  57. uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  58. uncountable/types/api/permissions/set_core_permissions.py +7 -6
  59. uncountable/types/api/project/get_projects.py +3 -3
  60. uncountable/types/api/project/get_projects_data.py +3 -3
  61. uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
  62. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
  63. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  64. uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
  65. uncountable/types/api/recipes/add_time_series_data.py +4 -3
  66. uncountable/types/api/recipes/archive_recipes.py +3 -2
  67. uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
  68. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
  69. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
  70. uncountable/types/api/recipes/create_recipe.py +2 -2
  71. uncountable/types/api/recipes/create_recipes.py +4 -4
  72. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
  73. uncountable/types/api/recipes/edit_recipe_inputs.py +18 -16
  74. uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  75. uncountable/types/api/recipes/get_curve.py +2 -2
  76. uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  77. uncountable/types/api/recipes/get_recipe_links.py +2 -2
  78. uncountable/types/api/recipes/get_recipe_names.py +3 -3
  79. uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  80. uncountable/types/api/recipes/get_recipes_data.py +11 -11
  81. uncountable/types/api/recipes/lock_recipes.py +4 -3
  82. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
  83. uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  84. uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
  85. uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  86. uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  87. uncountable/types/api/recipes/set_recipe_outputs.py +4 -4
  88. uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  89. uncountable/types/api/recipes/unarchive_recipes.py +3 -2
  90. uncountable/types/api/recipes/unlock_recipes.py +3 -2
  91. uncountable/types/api/runsheet/__init__.py +1 -0
  92. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  93. uncountable/types/api/triggers/run_trigger.py +3 -2
  94. uncountable/types/api/uploader/invoke_uploader.py +2 -2
  95. uncountable/types/async_batch_processor.py +74 -0
  96. uncountable/types/async_batch_t.py +7 -5
  97. uncountable/types/auth_retrieval_t.py +4 -3
  98. uncountable/types/base_t.py +4 -0
  99. uncountable/types/calculations_t.py +1 -1
  100. uncountable/types/chemical_structure_t.py +2 -1
  101. uncountable/types/client_base.py +48 -0
  102. uncountable/types/client_config_t.py +2 -1
  103. uncountable/types/curves_t.py +2 -2
  104. uncountable/types/data_t.py +22 -21
  105. uncountable/types/entity_t.py +9 -3
  106. uncountable/types/experiment_groups_t.py +1 -1
  107. uncountable/types/field_values_t.py +20 -20
  108. uncountable/types/fields_t.py +1 -1
  109. uncountable/types/generic_upload_t.py +7 -6
  110. uncountable/types/id_source_t.py +5 -4
  111. uncountable/types/identifier_t.py +3 -3
  112. uncountable/types/input_attributes_t.py +1 -1
  113. uncountable/types/inputs_t.py +1 -1
  114. uncountable/types/integration_server_t.py +2 -1
  115. uncountable/types/job_definition_t.py +14 -13
  116. uncountable/types/outputs_t.py +1 -1
  117. uncountable/types/overrides_t.py +3 -2
  118. uncountable/types/phases_t.py +1 -1
  119. uncountable/types/queued_job_t.py +7 -7
  120. uncountable/types/recipe_identifiers_t.py +3 -3
  121. uncountable/types/recipe_links_t.py +1 -1
  122. uncountable/types/recipe_metadata_t.py +3 -3
  123. uncountable/types/recipe_output_metadata_t.py +1 -1
  124. uncountable/types/recipe_tags_t.py +1 -1
  125. uncountable/types/recipe_workflow_steps_t.py +5 -4
  126. uncountable/types/recipes_t.py +2 -1
  127. uncountable/types/response_t.py +2 -1
  128. uncountable/types/secret_retrieval_t.py +4 -3
  129. uncountable/types/units_t.py +1 -1
  130. uncountable/types/users_t.py +1 -1
  131. uncountable/types/webhook_job_t.py +4 -3
  132. uncountable/types/workflows_t.py +2 -2
  133. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/METADATA +2 -1
  134. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/RECORD +136 -128
  135. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/WHEEL +1 -1
  136. {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/top_level.txt +0 -0
@@ -30,7 +30,7 @@ ENDPOINT_PATH = "api/external/outputs/external_resolve_output_conditions"
30
30
  named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionParameterValueRecord",
31
31
  to_string_values={"value_numeric"},
32
32
  )
33
- @dataclasses.dataclass(kw_only=True)
33
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
34
34
  class ConditionParameterValueRecord:
35
35
  condition_parameter_id: base_t.ObjectId
36
36
  value_numeric: Decimal | None = None
@@ -41,7 +41,7 @@ class ConditionParameterValueRecord:
41
41
  @serial_class(
42
42
  named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionRequest",
43
43
  )
44
- @dataclasses.dataclass(kw_only=True)
44
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
45
45
  class ConditionRequest:
46
46
  conditions: list[ConditionParameterValueRecord]
47
47
 
@@ -50,7 +50,7 @@ class ConditionRequest:
50
50
  @serial_class(
51
51
  named_type_path="sdk.api.outputs.resolve_output_conditions.Arguments",
52
52
  )
53
- @dataclasses.dataclass(kw_only=True)
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
54
54
  class Arguments:
55
55
  requested_conditions: list[ConditionRequest]
56
56
 
@@ -59,7 +59,7 @@ class Arguments:
59
59
  @serial_class(
60
60
  named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionResponse",
61
61
  )
62
- @dataclasses.dataclass(kw_only=True)
62
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
63
63
  class ConditionResponse:
64
64
  conditions: list[ConditionParameterValueRecord]
65
65
  output_condition_id: base_t.ObjectId
@@ -69,7 +69,7 @@ class ConditionResponse:
69
69
  @serial_class(
70
70
  named_type_path="sdk.api.outputs.resolve_output_conditions.Data",
71
71
  )
72
- @dataclasses.dataclass(kw_only=True)
72
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
73
73
  class Data:
74
74
  resolved_conditions: list[ConditionResponse]
75
75
 
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
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,7 +68,7 @@ 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
 
@@ -85,7 +86,7 @@ PermissionsScope = typing.Annotated[
85
86
  @serial_class(
86
87
  named_type_path="sdk.api.permissions.set_core_permissions.Arguments",
87
88
  )
88
- @dataclasses.dataclass(kw_only=True)
89
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
89
90
  class Arguments:
90
91
  scope: PermissionsScope
91
92
  permissions_types: list[permissions_t.CorePermissionType]
@@ -98,7 +99,7 @@ class Arguments:
98
99
  @serial_class(
99
100
  named_type_path="sdk.api.permissions.set_core_permissions.Data",
100
101
  )
101
- @dataclasses.dataclass(kw_only=True)
102
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
102
103
  class Data:
103
104
  pass
104
105
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/project/external_get_projects"
27
27
  @serial_class(
28
28
  named_type_path="sdk.api.project.get_projects.Arguments",
29
29
  )
30
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
31
  class Arguments:
32
32
  all_material_families: bool
33
33
  material_family_id: base_t.ObjectId | None
@@ -37,7 +37,7 @@ class Arguments:
37
37
  @serial_class(
38
38
  named_type_path="sdk.api.project.get_projects.Project",
39
39
  )
40
- @dataclasses.dataclass(kw_only=True)
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
41
41
  class Project:
42
42
  id: base_t.ObjectId
43
43
  name: str
@@ -50,7 +50,7 @@ class Project:
50
50
  @serial_class(
51
51
  named_type_path="sdk.api.project.get_projects.Data",
52
52
  )
53
- @dataclasses.dataclass(kw_only=True)
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
54
54
  class Data:
55
55
  projects: list[Project]
56
56
  phases: list[phases_t.Phase]
@@ -29,7 +29,7 @@ ENDPOINT_PATH = "api/external/project/external_get_projects_data"
29
29
  @serial_class(
30
30
  named_type_path="sdk.api.project.get_projects_data.Arguments",
31
31
  )
32
- @dataclasses.dataclass(kw_only=True)
32
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
33
33
  class Arguments:
34
34
  project_ids: list[base_t.ObjectId]
35
35
  offset: int | None = None
@@ -40,7 +40,7 @@ class Arguments:
40
40
  @serial_class(
41
41
  named_type_path="sdk.api.project.get_projects_data.ProjectDetailed",
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 ProjectDetailed:
45
45
  id: base_t.ObjectId
46
46
  name: str
@@ -54,7 +54,7 @@ class ProjectDetailed:
54
54
  @serial_class(
55
55
  named_type_path="sdk.api.project.get_projects_data.Data",
56
56
  )
57
- @dataclasses.dataclass(kw_only=True)
57
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
58
58
  class Data:
59
59
  projects: list[ProjectDetailed]
60
60
  phases: list[phases_t.Phase]
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import async_batch_t
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
  from ... import recipe_links_t
14
15
 
@@ -27,7 +28,7 @@ ENDPOINT_PATH = "api/external/recipe_links/create_recipe_link"
27
28
  @serial_class(
28
29
  named_type_path="sdk.api.recipe_links.create_recipe_link.Arguments",
29
30
  )
30
- @dataclasses.dataclass(kw_only=True)
31
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
32
  class Arguments:
32
33
  recipe_from_key: identifier_t.IdentifierKey
33
34
  recipe_to_key: identifier_t.IdentifierKey
@@ -39,7 +40,7 @@ class Arguments:
39
40
  @serial_class(
40
41
  named_type_path="sdk.api.recipe_links.create_recipe_link.Data",
41
42
  )
42
- @dataclasses.dataclass(kw_only=True)
43
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
43
44
  class Data(async_batch_t.AsyncBatchActionReturn):
44
45
  pass
45
46
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import async_batch_t
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
  from ... import recipe_links_t
14
15
 
@@ -27,7 +28,7 @@ ENDPOINT_PATH = "api/external/recipe_links/remove_recipe_link"
27
28
  @serial_class(
28
29
  named_type_path="sdk.api.recipe_links.remove_recipe_link.Arguments",
29
30
  )
30
- @dataclasses.dataclass(kw_only=True)
31
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
32
  class Arguments:
32
33
  recipe_from_key: identifier_t.IdentifierKey
33
34
  recipe_to_key: identifier_t.IdentifierKey
@@ -38,7 +39,7 @@ class Arguments:
38
39
  @serial_class(
39
40
  named_type_path="sdk.api.recipe_links.remove_recipe_link.Data",
40
41
  )
41
- @dataclasses.dataclass(kw_only=True)
42
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
43
  class Data(async_batch_t.AsyncBatchActionReturn):
43
44
  pass
44
45
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipe_metadata/external_get_recipe_metadata_data"
26
26
  @serial_class(
27
27
  named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.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
  material_family_id: base_t.ObjectId
32
32
  recipe_metadata_ids: list[base_t.ObjectId] | None
@@ -38,7 +38,7 @@ class Arguments:
38
38
  @serial_class(
39
39
  named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.FullRecipeMetadataField",
40
40
  )
41
- @dataclasses.dataclass(kw_only=True)
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
42
  class FullRecipeMetadataField:
43
43
  recipe_metadata_id: base_t.ObjectId
44
44
  name: str
@@ -49,7 +49,7 @@ class FullRecipeMetadataField:
49
49
  @serial_class(
50
50
  named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.Data",
51
51
  )
52
- @dataclasses.dataclass(kw_only=True)
52
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
53
53
  class Data:
54
54
  recipe_metadata: list[FullRecipeMetadataField]
55
55
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -8,6 +8,7 @@ import datetime # noqa: F401
8
8
  from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
+ from ... import base_t
11
12
  from ... import identifier_t
12
13
 
13
14
  __all__: list[str] = [
@@ -25,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/add_recipe_to_project"
25
26
  @serial_class(
26
27
  named_type_path="sdk.api.recipes.add_recipe_to_project.Arguments",
27
28
  )
28
- @dataclasses.dataclass(kw_only=True)
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
30
  class Arguments:
30
31
  recipe_key: identifier_t.IdentifierKey
31
32
  project_key: identifier_t.IdentifierKey
@@ -35,7 +36,7 @@ class Arguments:
35
36
  @serial_class(
36
37
  named_type_path="sdk.api.recipes.add_recipe_to_project.Data",
37
38
  )
38
- @dataclasses.dataclass(kw_only=True)
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
40
  class Data:
40
41
  pass
41
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import async_batch_t
13
+ from ... import base_t
13
14
  from ... import identifier_t
14
15
 
15
16
  __all__: list[str] = [
@@ -36,7 +37,7 @@ class OnTimepointConflict(StrEnum):
36
37
  named_type_path="sdk.api.recipes.add_time_series_data.TimeSeriesDatum",
37
38
  to_string_values={"value"},
38
39
  )
39
- @dataclasses.dataclass(kw_only=True)
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
41
  class TimeSeriesDatum:
41
42
  timestamp: datetime.datetime
42
43
  value: Decimal | None = None
@@ -46,7 +47,7 @@ class TimeSeriesDatum:
46
47
  @serial_class(
47
48
  named_type_path="sdk.api.recipes.add_time_series_data.Arguments",
48
49
  )
49
- @dataclasses.dataclass(kw_only=True)
50
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
50
51
  class Arguments:
51
52
  time_series_segment_key: identifier_t.IdentifierKey
52
53
  time_series_data: list[TimeSeriesDatum]
@@ -57,7 +58,7 @@ class Arguments:
57
58
  @serial_class(
58
59
  named_type_path="sdk.api.recipes.add_time_series_data.Data",
59
60
  )
60
- @dataclasses.dataclass(kw_only=True)
61
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
61
62
  class Data(async_batch_t.AsyncBatchActionReturn):
62
63
  pass
63
64
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -8,6 +8,7 @@ import datetime # noqa: F401
8
8
  from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
+ from ... import base_t
11
12
  from ... import identifier_t
12
13
 
13
14
  __all__: list[str] = [
@@ -25,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/archive"
25
26
  @serial_class(
26
27
  named_type_path="sdk.api.recipes.archive_recipes.Arguments",
27
28
  )
28
- @dataclasses.dataclass(kw_only=True)
29
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
30
  class Arguments:
30
31
  recipes: list[identifier_t.IdentifierKey]
31
32
  reason: str | None = None
@@ -35,7 +36,7 @@ class Arguments:
35
36
  @serial_class(
36
37
  named_type_path="sdk.api.recipes.archive_recipes.Data",
37
38
  )
38
- @dataclasses.dataclass(kw_only=True)
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
40
  class Data:
40
41
  pass
41
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import async_batch_t
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
 
14
15
  __all__: list[str] = [
@@ -26,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_input"
26
27
  @serial_class(
27
28
  named_type_path="sdk.api.recipes.associate_recipe_as_input.Arguments",
28
29
  )
29
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
30
31
  class Arguments:
31
32
  recipe_key: identifier_t.IdentifierKey
32
33
  input_key: identifier_t.IdentifierKey | None = None
@@ -37,7 +38,7 @@ class Arguments:
37
38
  @serial_class(
38
39
  named_type_path="sdk.api.recipes.associate_recipe_as_input.Data",
39
40
  )
40
- @dataclasses.dataclass(kw_only=True)
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
41
42
  class Data(async_batch_t.AsyncBatchActionReturn):
42
43
  pass
43
44
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import async_batch_t
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
 
14
15
  __all__: list[str] = [
@@ -26,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_lot"
26
27
  @serial_class(
27
28
  named_type_path="sdk.api.recipes.associate_recipe_as_lot.Arguments",
28
29
  )
29
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
30
31
  class Arguments:
31
32
  recipe_key: identifier_t.IdentifierKey
32
33
  ingredient_key: identifier_t.IdentifierKey
@@ -36,7 +37,7 @@ class Arguments:
36
37
  @serial_class(
37
38
  named_type_path="sdk.api.recipes.associate_recipe_as_lot.Data",
38
39
  )
39
- @dataclasses.dataclass(kw_only=True)
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
41
  class Data(async_batch_t.AsyncBatchActionReturn):
41
42
  pass
42
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import async_batch_t
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
 
14
15
  __all__: list[str] = [
@@ -26,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/clear_recipe_outputs"
26
27
  @serial_class(
27
28
  named_type_path="sdk.api.recipes.clear_recipe_outputs.Arguments",
28
29
  )
29
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
30
31
  class Arguments:
31
32
  recipe_key: identifier_t.IdentifierKey
32
33
 
@@ -35,7 +36,7 @@ class Arguments:
35
36
  @serial_class(
36
37
  named_type_path="sdk.api.recipes.clear_recipe_outputs.Data",
37
38
  )
38
- @dataclasses.dataclass(kw_only=True)
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
40
  class Data(async_batch_t.AsyncBatchActionReturn):
40
41
  pass
41
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -28,7 +28,7 @@ ENDPOINT_PATH = "api/external/recipes/create_recipe"
28
28
  @serial_class(
29
29
  named_type_path="sdk.api.recipes.create_recipe.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
  material_family_id: base_t.ObjectId
34
34
  workflow_id: base_t.ObjectId
@@ -44,7 +44,7 @@ class Arguments:
44
44
  @serial_class(
45
45
  named_type_path="sdk.api.recipes.create_recipe.Data",
46
46
  )
47
- @dataclasses.dataclass(kw_only=True)
47
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
48
48
  class Data:
49
49
  result_id: base_t.ObjectId
50
50
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -28,7 +28,7 @@ ENDPOINT_PATH = "api/external/recipes/external_create_recipes"
28
28
  @serial_class(
29
29
  named_type_path="sdk.api.recipes.create_recipes.CreateRecipeDefinition",
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 CreateRecipeDefinition:
33
33
  workflow_id: base_t.ObjectId
34
34
  name: str | None = None
@@ -40,7 +40,7 @@ class CreateRecipeDefinition:
40
40
  @serial_class(
41
41
  named_type_path="sdk.api.recipes.create_recipes.Arguments",
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 Arguments:
45
45
  material_family_id: base_t.ObjectId
46
46
  recipe_definitions: list[CreateRecipeDefinition]
@@ -51,7 +51,7 @@ class Arguments:
51
51
  @serial_class(
52
52
  named_type_path="sdk.api.recipes.create_recipes.CreateRecipeResult",
53
53
  )
54
- @dataclasses.dataclass(kw_only=True)
54
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
55
  class CreateRecipeResult:
56
56
  recipe_id: base_t.ObjectId
57
57
 
@@ -60,7 +60,7 @@ class CreateRecipeResult:
60
60
  @serial_class(
61
61
  named_type_path="sdk.api.recipes.create_recipes.Data",
62
62
  )
63
- @dataclasses.dataclass(kw_only=True)
63
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
64
64
  class Data:
65
65
  recipes: list[CreateRecipeResult]
66
66
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from ... import async_batch_t
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
 
14
15
  __all__: list[str] = [
@@ -26,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/disassociate_recipe_as_input"
26
27
  @serial_class(
27
28
  named_type_path="sdk.api.recipes.disassociate_recipe_as_input.Arguments",
28
29
  )
29
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
30
31
  class Arguments:
31
32
  recipe_key: identifier_t.IdentifierKey
32
33
 
@@ -35,7 +36,7 @@ class Arguments:
35
36
  @serial_class(
36
37
  named_type_path="sdk.api.recipes.disassociate_recipe_as_input.Data",
37
38
  )
38
- @dataclasses.dataclass(kw_only=True)
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
40
  class Data(async_batch_t.AsyncBatchActionReturn):
40
41
  pass
41
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from pkgs.serialization import serial_union_annotation
13
+ from ... import base_t
13
14
  from ... import identifier_t
14
15
  from ... import inputs_t
15
16
  from ... import recipe_inputs_t
@@ -69,7 +70,7 @@ class MixStepMatchStrategy(StrEnum):
69
70
  @serial_class(
70
71
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditBase",
71
72
  )
72
- @dataclasses.dataclass(kw_only=True)
73
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
73
74
  class RecipeInputEditBase:
74
75
  type: RecipeInputEditType
75
76
 
@@ -79,7 +80,7 @@ class RecipeInputEditBase:
79
80
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditClearInputs",
80
81
  parse_require={"type"},
81
82
  )
82
- @dataclasses.dataclass(kw_only=True)
83
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
83
84
  class RecipeInputEditClearInputs(RecipeInputEditBase):
84
85
  type: typing.Literal[RecipeInputEditType.CLEAR_INPUTS] = RecipeInputEditType.CLEAR_INPUTS
85
86
 
@@ -89,7 +90,7 @@ class RecipeInputEditClearInputs(RecipeInputEditBase):
89
90
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditInputBase",
90
91
  to_string_values={"value_numeric"},
91
92
  )
92
- @dataclasses.dataclass(kw_only=True)
93
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
93
94
  class RecipeInputEditInputBase(RecipeInputEditBase):
94
95
  ingredient_key: identifier_t.IdentifierKey
95
96
  quantity_basis: recipe_inputs_t.QuantityBasis = recipe_inputs_t.QuantityBasis.MASS
@@ -105,7 +106,7 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
105
106
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditChangeBasisViewed",
106
107
  parse_require={"type"},
107
108
  )
108
- @dataclasses.dataclass(kw_only=True)
109
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
109
110
  class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
110
111
  type: typing.Literal[RecipeInputEditType.CHANGE_BASIS] = RecipeInputEditType.CHANGE_BASIS
111
112
  mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
@@ -116,7 +117,7 @@ class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
116
117
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditUpsertInput",
117
118
  parse_require={"type"},
118
119
  )
119
- @dataclasses.dataclass(kw_only=True)
120
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
120
121
  class RecipeInputEditUpsertInput(RecipeInputEditInputBase):
121
122
  type: typing.Literal[RecipeInputEditType.UPSERT_INPUT] = RecipeInputEditType.UPSERT_INPUT
122
123
  clear_first: bool
@@ -128,7 +129,7 @@ class RecipeInputEditUpsertInput(RecipeInputEditInputBase):
128
129
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAddInput",
129
130
  parse_require={"type"},
130
131
  )
131
- @dataclasses.dataclass(kw_only=True)
132
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
132
133
  class RecipeInputEditAddInput(RecipeInputEditInputBase):
133
134
  type: typing.Literal[RecipeInputEditType.ADD_INPUT] = RecipeInputEditType.ADD_INPUT
134
135
 
@@ -138,11 +139,12 @@ class RecipeInputEditAddInput(RecipeInputEditInputBase):
138
139
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditSetLot",
139
140
  parse_require={"type"},
140
141
  )
141
- @dataclasses.dataclass(kw_only=True)
142
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
142
143
  class RecipeInputEditSetLot(RecipeInputEditBase):
143
144
  type: typing.Literal[RecipeInputEditType.SET_LOT] = RecipeInputEditType.SET_LOT
144
145
  ingredient_key: identifier_t.IdentifierKey
145
146
  ingredient_lot_recipe_key: identifier_t.IdentifierKey
147
+ mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
146
148
 
147
149
 
148
150
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -150,7 +152,7 @@ class RecipeInputEditSetLot(RecipeInputEditBase):
150
152
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAddInstructions",
151
153
  parse_require={"type"},
152
154
  )
153
- @dataclasses.dataclass(kw_only=True)
155
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
154
156
  class RecipeInputEditAddInstructions(RecipeInputEditBase):
155
157
  type: typing.Literal[RecipeInputEditType.ADD_INSTRUCTIONS] = RecipeInputEditType.ADD_INSTRUCTIONS
156
158
  instructions: str
@@ -161,7 +163,7 @@ class RecipeInputEditAddInstructions(RecipeInputEditBase):
161
163
  named_type_path="sdk.api.recipes.edit_recipe_inputs.AnnotationEdit",
162
164
  to_string_values={"lower_value", "upper_value"},
163
165
  )
164
- @dataclasses.dataclass(kw_only=True)
166
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
165
167
  class AnnotationEdit:
166
168
  annotation_type_key: identifier_t.IdentifierKey
167
169
  lower_value: Decimal | None = None
@@ -173,7 +175,7 @@ class AnnotationEdit:
173
175
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditUpdateAnnotations",
174
176
  parse_require={"type"},
175
177
  )
176
- @dataclasses.dataclass(kw_only=True)
178
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
177
179
  class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
178
180
  type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
179
181
  clear_first: bool
@@ -186,7 +188,7 @@ class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
186
188
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditSetRole",
187
189
  parse_require={"type"},
188
190
  )
189
- @dataclasses.dataclass(kw_only=True)
191
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
190
192
  class RecipeInputEditSetRole(RecipeInputEditBase):
191
193
  type: typing.Literal[RecipeInputEditType.SET_ROLE] = RecipeInputEditType.SET_ROLE
192
194
  ingredient_key: identifier_t.IdentifierKey
@@ -207,7 +209,7 @@ class PlaceholderDisplayMode(StrEnum):
207
209
  @serial_class(
208
210
  named_type_path="sdk.api.recipes.edit_recipe_inputs.PlaceholderBase",
209
211
  )
210
- @dataclasses.dataclass(kw_only=True)
212
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
211
213
  class PlaceholderBase:
212
214
  type: PlaceholderType
213
215
  require_for_creation: bool = True
@@ -219,7 +221,7 @@ class PlaceholderBase:
219
221
  named_type_path="sdk.api.recipes.edit_recipe_inputs.SubcategoryPlaceholder",
220
222
  parse_require={"type"},
221
223
  )
222
- @dataclasses.dataclass(kw_only=True)
224
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
223
225
  class SubcategoryPlaceholder(PlaceholderBase):
224
226
  type: typing.Literal[PlaceholderType.SUBCATEGORY] = PlaceholderType.SUBCATEGORY
225
227
  subcategory_identifier: identifier_t.IdentifierKey
@@ -243,7 +245,7 @@ RecipeInputPlaceholder = typing.Annotated[
243
245
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditPlaceholder",
244
246
  parse_require={"type"},
245
247
  )
246
- @dataclasses.dataclass(kw_only=True)
248
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
247
249
  class RecipeInputEditPlaceholder(RecipeInputEditBase):
248
250
  type: typing.Literal[RecipeInputEditType.SET_PLACEHOLDER] = RecipeInputEditType.SET_PLACEHOLDER
249
251
  ingredient_key: identifier_t.IdentifierKey
@@ -276,7 +278,7 @@ RecipeInputEdit = typing.Annotated[
276
278
  @serial_class(
277
279
  named_type_path="sdk.api.recipes.edit_recipe_inputs.Arguments",
278
280
  )
279
- @dataclasses.dataclass(kw_only=True)
281
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
280
282
  class Arguments:
281
283
  recipe_key: identifier_t.IdentifierKey
282
284
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
@@ -287,7 +289,7 @@ class Arguments:
287
289
  @serial_class(
288
290
  named_type_path="sdk.api.recipes.edit_recipe_inputs.Data",
289
291
  )
290
- @dataclasses.dataclass(kw_only=True)
292
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
291
293
  class Data:
292
294
  pass
293
295
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/get_column_calculation_values"
27
27
  @serial_class(
28
28
  named_type_path="sdk.api.recipes.get_column_calculation_values.Arguments",
29
29
  )
30
- @dataclasses.dataclass(kw_only=True)
30
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
31
  class Arguments:
32
32
  recipe_keys: list[identifier_t.IdentifierKey]
33
33
  calculation_key: identifier_t.IdentifierKey
@@ -38,7 +38,7 @@ class Arguments:
38
38
  named_type_path="sdk.api.recipes.get_column_calculation_values.RecipeColumnCalculationValue",
39
39
  to_string_values={"calculation_quantity"},
40
40
  )
41
- @dataclasses.dataclass(kw_only=True)
41
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
42
  class RecipeColumnCalculationValue:
43
43
  recipe_id: base_t.ObjectId
44
44
  ingredient_id: base_t.ObjectId
@@ -51,7 +51,7 @@ class RecipeColumnCalculationValue:
51
51
  @serial_class(
52
52
  named_type_path="sdk.api.recipes.get_column_calculation_values.Data",
53
53
  )
54
- @dataclasses.dataclass(kw_only=True)
54
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
55
  class Data:
56
56
  values: list[RecipeColumnCalculationValue]
57
57
  # DO NOT MODIFY -- This file is generated by type_spec