UncountablePythonSDK 0.0.111__py3-none-any.whl → 0.0.113__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/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
  4. examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
  5. examples/integration-server/pyproject.toml +2 -2
  6. pkgs/argument_parser/argument_parser.py +6 -3
  7. pkgs/filesystem_utils/_blob_session.py +8 -1
  8. pkgs/type_spec/emit_python.py +9 -3
  9. pkgs/type_spec/emit_typescript_util.py +16 -1
  10. pkgs/type_spec/parts/base.py.prepart +4 -0
  11. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  12. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
  13. pkgs/type_spec/value_spec/convert_type.py +13 -0
  14. uncountable/core/client.py +7 -4
  15. uncountable/integration/executors/generic_upload_executor.py +3 -2
  16. uncountable/integration/job.py +24 -1
  17. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
  18. uncountable/integration/scan_profiles.py +1 -1
  19. uncountable/integration/scheduler.py +4 -3
  20. uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  21. uncountable/types/__init__.py +2 -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/upsert_condition_match.py +4 -3
  26. uncountable/types/api/entity/create_entities.py +3 -3
  27. uncountable/types/api/entity/create_entity.py +3 -3
  28. uncountable/types/api/entity/create_or_update_entity.py +3 -2
  29. uncountable/types/api/entity/get_entities_data.py +3 -3
  30. uncountable/types/api/entity/grant_entity_permissions.py +3 -2
  31. uncountable/types/api/entity/list_entities.py +4 -4
  32. uncountable/types/api/entity/lock_entity.py +3 -2
  33. uncountable/types/api/entity/lookup_entity.py +5 -5
  34. uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  35. uncountable/types/api/entity/set_entity_field_values.py +3 -2
  36. uncountable/types/api/entity/set_values.py +3 -2
  37. uncountable/types/api/entity/transition_entity_phase.py +5 -4
  38. uncountable/types/api/entity/unlock_entity.py +3 -2
  39. uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  40. uncountable/types/api/field_options/upsert_field_options.py +4 -3
  41. uncountable/types/api/files/download_file.py +4 -3
  42. uncountable/types/api/id_source/list_id_source.py +3 -3
  43. uncountable/types/api/id_source/match_id_source.py +3 -3
  44. uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  45. uncountable/types/api/inputs/create_inputs.py +4 -4
  46. uncountable/types/api/inputs/get_input_data.py +6 -6
  47. uncountable/types/api/inputs/get_input_names.py +3 -3
  48. uncountable/types/api/inputs/get_inputs_data.py +6 -6
  49. uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  50. uncountable/types/api/inputs/set_input_category.py +3 -2
  51. uncountable/types/api/inputs/set_input_subcategories.py +3 -2
  52. uncountable/types/api/inputs/set_intermediate_type.py +3 -2
  53. uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  54. uncountable/types/api/outputs/get_output_data.py +6 -6
  55. uncountable/types/api/outputs/get_output_names.py +3 -3
  56. uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  57. uncountable/types/api/permissions/set_core_permissions.py +7 -6
  58. uncountable/types/api/project/get_projects.py +3 -3
  59. uncountable/types/api/project/get_projects_data.py +3 -3
  60. uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
  61. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
  62. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  63. uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
  64. uncountable/types/api/recipes/add_time_series_data.py +4 -3
  65. uncountable/types/api/recipes/archive_recipes.py +3 -2
  66. uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
  67. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
  68. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
  69. uncountable/types/api/recipes/create_recipe.py +2 -2
  70. uncountable/types/api/recipes/create_recipes.py +4 -4
  71. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
  72. uncountable/types/api/recipes/edit_recipe_inputs.py +17 -16
  73. uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  74. uncountable/types/api/recipes/get_curve.py +2 -2
  75. uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  76. uncountable/types/api/recipes/get_recipe_links.py +2 -2
  77. uncountable/types/api/recipes/get_recipe_names.py +3 -3
  78. uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  79. uncountable/types/api/recipes/get_recipes_data.py +11 -11
  80. uncountable/types/api/recipes/lock_recipes.py +4 -3
  81. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
  82. uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  83. uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
  84. uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  85. uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  86. uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
  87. uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  88. uncountable/types/api/recipes/unarchive_recipes.py +3 -2
  89. uncountable/types/api/recipes/unlock_recipes.py +3 -2
  90. uncountable/types/api/runsheet/__init__.py +1 -0
  91. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  92. uncountable/types/api/triggers/run_trigger.py +3 -2
  93. uncountable/types/api/uploader/invoke_uploader.py +2 -2
  94. uncountable/types/async_batch_processor.py +34 -0
  95. uncountable/types/async_batch_t.py +6 -5
  96. uncountable/types/auth_retrieval_t.py +4 -3
  97. uncountable/types/base_t.py +4 -0
  98. uncountable/types/calculations_t.py +1 -1
  99. uncountable/types/chemical_structure_t.py +2 -1
  100. uncountable/types/client_base.py +21 -0
  101. uncountable/types/client_config_t.py +2 -1
  102. uncountable/types/curves_t.py +2 -2
  103. uncountable/types/data.py +2 -2
  104. uncountable/types/data_t.py +42 -32
  105. uncountable/types/entity_t.py +3 -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.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/METADATA +2 -1
  134. {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/RECORD +136 -131
  135. {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/WHEEL +1 -1
  136. {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/top_level.txt +0 -0
@@ -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,7 +139,7 @@ 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
@@ -151,7 +152,7 @@ class RecipeInputEditSetLot(RecipeInputEditBase):
151
152
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAddInstructions",
152
153
  parse_require={"type"},
153
154
  )
154
- @dataclasses.dataclass(kw_only=True)
155
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
155
156
  class RecipeInputEditAddInstructions(RecipeInputEditBase):
156
157
  type: typing.Literal[RecipeInputEditType.ADD_INSTRUCTIONS] = RecipeInputEditType.ADD_INSTRUCTIONS
157
158
  instructions: str
@@ -162,7 +163,7 @@ class RecipeInputEditAddInstructions(RecipeInputEditBase):
162
163
  named_type_path="sdk.api.recipes.edit_recipe_inputs.AnnotationEdit",
163
164
  to_string_values={"lower_value", "upper_value"},
164
165
  )
165
- @dataclasses.dataclass(kw_only=True)
166
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
166
167
  class AnnotationEdit:
167
168
  annotation_type_key: identifier_t.IdentifierKey
168
169
  lower_value: Decimal | None = None
@@ -174,7 +175,7 @@ class AnnotationEdit:
174
175
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditUpdateAnnotations",
175
176
  parse_require={"type"},
176
177
  )
177
- @dataclasses.dataclass(kw_only=True)
178
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
178
179
  class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
179
180
  type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
180
181
  clear_first: bool
@@ -187,7 +188,7 @@ class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
187
188
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditSetRole",
188
189
  parse_require={"type"},
189
190
  )
190
- @dataclasses.dataclass(kw_only=True)
191
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
191
192
  class RecipeInputEditSetRole(RecipeInputEditBase):
192
193
  type: typing.Literal[RecipeInputEditType.SET_ROLE] = RecipeInputEditType.SET_ROLE
193
194
  ingredient_key: identifier_t.IdentifierKey
@@ -208,7 +209,7 @@ class PlaceholderDisplayMode(StrEnum):
208
209
  @serial_class(
209
210
  named_type_path="sdk.api.recipes.edit_recipe_inputs.PlaceholderBase",
210
211
  )
211
- @dataclasses.dataclass(kw_only=True)
212
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
212
213
  class PlaceholderBase:
213
214
  type: PlaceholderType
214
215
  require_for_creation: bool = True
@@ -220,7 +221,7 @@ class PlaceholderBase:
220
221
  named_type_path="sdk.api.recipes.edit_recipe_inputs.SubcategoryPlaceholder",
221
222
  parse_require={"type"},
222
223
  )
223
- @dataclasses.dataclass(kw_only=True)
224
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
224
225
  class SubcategoryPlaceholder(PlaceholderBase):
225
226
  type: typing.Literal[PlaceholderType.SUBCATEGORY] = PlaceholderType.SUBCATEGORY
226
227
  subcategory_identifier: identifier_t.IdentifierKey
@@ -244,7 +245,7 @@ RecipeInputPlaceholder = typing.Annotated[
244
245
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditPlaceholder",
245
246
  parse_require={"type"},
246
247
  )
247
- @dataclasses.dataclass(kw_only=True)
248
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
248
249
  class RecipeInputEditPlaceholder(RecipeInputEditBase):
249
250
  type: typing.Literal[RecipeInputEditType.SET_PLACEHOLDER] = RecipeInputEditType.SET_PLACEHOLDER
250
251
  ingredient_key: identifier_t.IdentifierKey
@@ -277,7 +278,7 @@ RecipeInputEdit = typing.Annotated[
277
278
  @serial_class(
278
279
  named_type_path="sdk.api.recipes.edit_recipe_inputs.Arguments",
279
280
  )
280
- @dataclasses.dataclass(kw_only=True)
281
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
281
282
  class Arguments:
282
283
  recipe_key: identifier_t.IdentifierKey
283
284
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
@@ -288,7 +289,7 @@ class Arguments:
288
289
  @serial_class(
289
290
  named_type_path="sdk.api.recipes.edit_recipe_inputs.Data",
290
291
  )
291
- @dataclasses.dataclass(kw_only=True)
292
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
292
293
  class Data:
293
294
  pass
294
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
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_curve"
26
26
  @serial_class(
27
27
  named_type_path="sdk.api.recipes.get_curve.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_output_id: base_t.ObjectId | None = None
32
32
  recipe_input_id: base_t.ObjectId | None = None
@@ -36,7 +36,7 @@ class Arguments:
36
36
  @serial_class(
37
37
  named_type_path="sdk.api.recipes.get_curve.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
  curve: curves_t.Curve
42
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_calculations"
27
27
  @serial_class(
28
28
  named_type_path="sdk.api.recipes.get_recipe_calculations.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_ids: list[base_t.ObjectId]
33
33
  calculation_ids: list[base_t.ObjectId] | None = None
@@ -39,7 +39,7 @@ class Arguments:
39
39
  unconverted_values={"quantity_json"},
40
40
  to_string_values={"quantity_dec"},
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 RecipeCalculation:
44
44
  recipe_id: base_t.ObjectId
45
45
  calculation_id: base_t.ObjectId
@@ -51,7 +51,7 @@ class RecipeCalculation:
51
51
  @serial_class(
52
52
  named_type_path="sdk.api.recipes.get_recipe_calculations.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
  recipe_calculations: list[RecipeCalculation]
57
57
  calculations: list[calculations_t.Calculation]
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_links"
26
26
  @serial_class(
27
27
  named_type_path="sdk.api.recipes.get_recipe_links.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_ids: list[base_t.ObjectId]
32
32
  depth: int = 1
@@ -37,7 +37,7 @@ class Arguments:
37
37
  @serial_class(
38
38
  named_type_path="sdk.api.recipes.get_recipe_links.Data",
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 Data:
42
42
  recipe_links: list[recipe_links_t.RecipeLink]
43
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_names"
26
26
  @serial_class(
27
27
  named_type_path="sdk.api.recipes.get_recipe_names.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
  project_id: base_t.ObjectId
32
32
 
@@ -35,7 +35,7 @@ class Arguments:
35
35
  @serial_class(
36
36
  named_type_path="sdk.api.recipes.get_recipe_names.SimpleRecipe",
37
37
  )
38
- @dataclasses.dataclass(kw_only=True)
38
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
39
  class SimpleRecipe:
40
40
  id: base_t.ObjectId
41
41
  name: str
@@ -45,7 +45,7 @@ class SimpleRecipe:
45
45
  @serial_class(
46
46
  named_type_path="sdk.api.recipes.get_recipe_names.Data",
47
47
  )
48
- @dataclasses.dataclass(kw_only=True)
48
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
49
49
  class Data:
50
50
  recipes: list[SimpleRecipe]
51
51
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_output_metadata"
27
27
  @serial_class(
28
28
  named_type_path="sdk.api.recipes.get_recipe_output_metadata.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_output_ids: list[base_t.ObjectId]
33
33
 
@@ -38,7 +38,7 @@ class Arguments:
38
38
  unconverted_values={"quantity_json"},
39
39
  to_string_values={"quantity_dec"},
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 RecipeOutputMetadata:
43
43
  recipe_output_id: base_t.ObjectId
44
44
  recipe_output_metadata_field_id: base_t.ObjectId
@@ -50,7 +50,7 @@ class RecipeOutputMetadata:
50
50
  @serial_class(
51
51
  named_type_path="sdk.api.recipes.get_recipe_output_metadata.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
  recipe_output_metadata: list[RecipeOutputMetadata]
56
56
  recipe_output_metadata_fields: list[recipe_output_metadata_t.RecipeOutputMetadataField]
@@ -40,7 +40,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
40
40
  @serial_class(
41
41
  named_type_path="sdk.api.recipes.get_recipes_data.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
  recipe_ids: list[base_t.ObjectId] | None = None
46
46
  project_id: base_t.ObjectId | None = None
@@ -54,7 +54,7 @@ class Arguments:
54
54
  unconverted_values={"quantity_json"},
55
55
  to_string_values={"quantity_dec"},
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 RecipeOutput:
59
59
  id: base_t.ObjectId
60
60
  output_id: base_t.ObjectId
@@ -71,7 +71,7 @@ class RecipeOutput:
71
71
  unconverted_values={"quantity_json"},
72
72
  to_string_values={"quantity_dec"},
73
73
  )
74
- @dataclasses.dataclass(kw_only=True)
74
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
75
75
  class ConditionParameterValue:
76
76
  condition_parameter_id: base_t.ObjectId
77
77
  condition_parameter_name: str
@@ -83,7 +83,7 @@ class ConditionParameterValue:
83
83
  @serial_class(
84
84
  named_type_path="sdk.api.recipes.get_recipes_data.SimpleOutputCondition",
85
85
  )
86
- @dataclasses.dataclass(kw_only=True)
86
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
87
87
  class SimpleOutputCondition:
88
88
  output_condition_id: base_t.ObjectId
89
89
  condition_parameter_values: list[ConditionParameterValue]
@@ -95,7 +95,7 @@ class SimpleOutputCondition:
95
95
  unconverted_values={"actual_quantity_json", "quantity_json"},
96
96
  to_string_values={"actual_quantity_dec", "quantity_dec"},
97
97
  )
98
- @dataclasses.dataclass(kw_only=True)
98
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
99
99
  class RecipeInput:
100
100
  id: base_t.ObjectId
101
101
  input_id: base_t.ObjectId
@@ -114,7 +114,7 @@ class RecipeInput:
114
114
  @serial_class(
115
115
  named_type_path="sdk.api.recipes.get_recipes_data.RecipeStep",
116
116
  )
117
- @dataclasses.dataclass(kw_only=True)
117
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
118
118
  class RecipeStep:
119
119
  name: str | None
120
120
  recipe_step_id: base_t.ObjectId
@@ -126,7 +126,7 @@ class RecipeStep:
126
126
  @serial_class(
127
127
  named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepGroup",
128
128
  )
129
- @dataclasses.dataclass(kw_only=True)
129
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
130
130
  class RecipeStepGroup:
131
131
  name: str | None
132
132
  recipe_steps: list[RecipeStep]
@@ -136,7 +136,7 @@ class RecipeStepGroup:
136
136
  @serial_class(
137
137
  named_type_path="sdk.api.recipes.get_recipes_data.RecipeWorkflowStep",
138
138
  )
139
- @dataclasses.dataclass(kw_only=True)
139
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
140
140
  class RecipeWorkflowStep:
141
141
  recipe_workflow_step_id: base_t.ObjectId
142
142
  workflow_step_id: base_t.ObjectId
@@ -148,7 +148,7 @@ class RecipeWorkflowStep:
148
148
  named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepRelationship",
149
149
  to_string_values={"actual_quantity_dec", "quantity_dec"},
150
150
  )
151
- @dataclasses.dataclass(kw_only=True)
151
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
152
152
  class RecipeStepRelationship:
153
153
  step_relationship_id: base_t.ObjectId
154
154
  name: str | None
@@ -162,7 +162,7 @@ class RecipeStepRelationship:
162
162
  @serial_class(
163
163
  named_type_path="sdk.api.recipes.get_recipes_data.Recipe",
164
164
  )
165
- @dataclasses.dataclass(kw_only=True)
165
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
166
166
  class Recipe:
167
167
  recipe_id: base_t.ObjectId
168
168
  create_datetime: str
@@ -185,7 +185,7 @@ class Recipe:
185
185
  @serial_class(
186
186
  named_type_path="sdk.api.recipes.get_recipes_data.Data",
187
187
  )
188
- @dataclasses.dataclass(kw_only=True)
188
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
189
189
  class Data:
190
190
  recipes: list[Recipe]
191
191
  workflows: list[workflows_t.SimpleWorkflow]