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
@@ -28,7 +28,7 @@ class CurveAxisType(StrEnum):
28
28
  @serial_class(
29
29
  named_type_path="sdk.curves.Curve",
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 Curve:
33
33
  id: base_t.ObjectId
34
34
  x_type: typing.Literal[CurveAxisType.NUMERIC] | typing.Literal[CurveAxisType.TIMESTAMP]
@@ -42,7 +42,7 @@ class Curve:
42
42
  named_type_path="sdk.curves.CurveValue",
43
43
  to_string_values={"quantity"},
44
44
  )
45
- @dataclasses.dataclass(kw_only=True)
45
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
46
46
  class CurveValue:
47
47
  index: int
48
48
  quantity: Decimal | None = None
uncountable/types/data.py CHANGED
@@ -3,10 +3,10 @@
3
3
  # isort: skip_file
4
4
  # DO NOT MODIFY -- This file is generated by type_spec
5
5
  # Kept only for SDK backwards compatibility
6
+ from .data_t import ColorFormat as ColorFormat
6
7
  from .data_t import RgbColor as RgbColor
7
8
  from .data_t import CielabColor as CielabColor
8
9
  from .data_t import XyzColor as XyzColor
9
10
  from .data_t import LChColor as LChColor
10
- from .data_t import HslColor as HslColor
11
- from .data_t import RecipeOutputColor as RecipeOutputColor
11
+ from .data_t import SupportedColorFormatColor as SupportedColorFormatColor
12
12
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -6,26 +6,39 @@ from __future__ import annotations
6
6
  import typing # noqa: F401
7
7
  import datetime # noqa: F401
8
8
  from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
9
10
  import dataclasses
10
11
  from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_union_annotation
13
+ from . import base_t
11
14
 
12
15
  __all__: list[str] = [
13
16
  "CielabColor",
14
- "HslColor",
17
+ "ColorFormat",
15
18
  "LChColor",
16
- "RecipeOutputColor",
17
19
  "RgbColor",
20
+ "SupportedColorFormatColor",
18
21
  "XyzColor",
19
22
  ]
20
23
 
21
24
 
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ class ColorFormat(StrEnum):
27
+ RGB = "rgb"
28
+ LAB = "lab"
29
+ XYZ = "xyz"
30
+ LCH = "lch"
31
+
32
+
22
33
  # DO NOT MODIFY -- This file is generated by type_spec
23
34
  @serial_class(
24
35
  named_type_path="sdk.data.RgbColor",
25
- unconverted_keys={"B", "G", "R"},
36
+ unconverted_keys={"B", "G", "R", "type"},
37
+ parse_require={"type"},
26
38
  )
27
- @dataclasses.dataclass(kw_only=True)
39
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
28
40
  class RgbColor:
41
+ type: typing.Literal[ColorFormat.RGB] = ColorFormat.RGB
29
42
  R: Decimal
30
43
  G: Decimal
31
44
  B: Decimal
@@ -34,10 +47,12 @@ class RgbColor:
34
47
  # DO NOT MODIFY -- This file is generated by type_spec
35
48
  @serial_class(
36
49
  named_type_path="sdk.data.CielabColor",
37
- unconverted_keys={"L", "a", "b"},
50
+ unconverted_keys={"L", "a", "b", "type"},
51
+ parse_require={"type"},
38
52
  )
39
- @dataclasses.dataclass(kw_only=True)
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
54
  class CielabColor:
55
+ type: typing.Literal[ColorFormat.LAB] = ColorFormat.LAB
41
56
  L: Decimal
42
57
  a: Decimal
43
58
  b: Decimal
@@ -46,10 +61,12 @@ class CielabColor:
46
61
  # DO NOT MODIFY -- This file is generated by type_spec
47
62
  @serial_class(
48
63
  named_type_path="sdk.data.XyzColor",
49
- unconverted_keys={"X", "Y", "Z"},
64
+ unconverted_keys={"X", "Y", "Z", "type"},
65
+ parse_require={"type"},
50
66
  )
51
- @dataclasses.dataclass(kw_only=True)
67
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
52
68
  class XyzColor:
69
+ type: typing.Literal[ColorFormat.XYZ] = ColorFormat.XYZ
53
70
  X: Decimal
54
71
  Y: Decimal
55
72
  Z: Decimal
@@ -58,36 +75,29 @@ class XyzColor:
58
75
  # DO NOT MODIFY -- This file is generated by type_spec
59
76
  @serial_class(
60
77
  named_type_path="sdk.data.LChColor",
61
- unconverted_keys={"C", "L", "h"},
78
+ unconverted_keys={"C", "L", "h", "type"},
79
+ parse_require={"type"},
62
80
  )
63
- @dataclasses.dataclass(kw_only=True)
81
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
64
82
  class LChColor:
83
+ type: typing.Literal[ColorFormat.LCH] = ColorFormat.LCH
65
84
  L: Decimal
66
85
  C: Decimal
67
86
  h: Decimal
68
87
 
69
88
 
70
89
  # DO NOT MODIFY -- This file is generated by type_spec
71
- @serial_class(
72
- named_type_path="sdk.data.HslColor",
73
- unconverted_keys={"L", "h", "s"},
74
- )
75
- @dataclasses.dataclass(kw_only=True)
76
- class HslColor:
77
- h: Decimal
78
- s: Decimal
79
- L: Decimal
80
-
81
-
82
- # DO NOT MODIFY -- This file is generated by type_spec
83
- @serial_class(
84
- named_type_path="sdk.data.RecipeOutputColor",
85
- unconverted_keys={"CIELAB", "LCH", "RGB", "XYZ"},
86
- )
87
- @dataclasses.dataclass(kw_only=True)
88
- class RecipeOutputColor:
89
- RGB: RgbColor
90
- CIELAB: CielabColor
91
- XYZ: XyzColor | None = None
92
- LCH: LChColor | None = None
90
+ SupportedColorFormatColor = typing.Annotated[
91
+ RgbColor | CielabColor | XyzColor | LChColor,
92
+ serial_union_annotation(
93
+ named_type_path="sdk.data.SupportedColorFormatColor",
94
+ discriminator="type",
95
+ discriminator_map={
96
+ "rgb": RgbColor,
97
+ "lab": CielabColor,
98
+ "xyz": XyzColor,
99
+ "lch": LChColor,
100
+ },
101
+ ),
102
+ ]
93
103
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -390,7 +390,7 @@ class EntityType(StrEnum):
390
390
 
391
391
  # DO NOT MODIFY -- This file is generated by type_spec
392
392
  LimitedEntityType = typing.Annotated[
393
- typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL] | typing.Literal[EntityType.TIME_SERIES_SEGMENT] | typing.Literal[EntityType.EQUIPMENT_MAINTENANCE] | typing.Literal[EntityType.MAINTENANCE_SCHEDULE] | typing.Literal[EntityType.CONDITION_PARAMETER_RULE],
393
+ typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL] | typing.Literal[EntityType.TIME_SERIES_SEGMENT] | typing.Literal[EntityType.EQUIPMENT_MAINTENANCE] | typing.Literal[EntityType.MAINTENANCE_SCHEDULE] | typing.Literal[EntityType.CONDITION_PARAMETER_RULE] | typing.Literal[EntityType.INGREDIENT],
394
394
  serial_alias_annotation(
395
395
  named_type_path="sdk.entity.LimitedEntityType",
396
396
  ),
@@ -419,7 +419,7 @@ GrantableEntityPermissionType = typing.Annotated[
419
419
  @serial_class(
420
420
  named_type_path="sdk.entity.Entity",
421
421
  )
422
- @dataclasses.dataclass(kw_only=True)
422
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
423
423
  class Entity:
424
424
  id: base_t.ObjectId
425
425
  type: EntityType
@@ -429,7 +429,7 @@ class Entity:
429
429
  @serial_class(
430
430
  named_type_path="sdk.entity.EntityIdentifier",
431
431
  )
432
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
432
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
433
433
  class EntityIdentifier:
434
434
  identifier_key: identifier_t.IdentifierKey
435
435
  type: EntityType
@@ -19,7 +19,7 @@ __all__: list[str] = [
19
19
  @serial_class(
20
20
  named_type_path="sdk.experiment_groups.SimpleExperimentGroup",
21
21
  )
22
- @dataclasses.dataclass(kw_only=True)
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
23
23
  class SimpleExperimentGroup:
24
24
  experiment_group_id: base_t.ObjectId
25
25
  name: str
@@ -46,7 +46,7 @@ __all__: list[str] = [
46
46
  named_type_path="sdk.field_values.FieldRefNameValue",
47
47
  unconverted_values={"value"},
48
48
  )
49
- @dataclasses.dataclass(kw_only=True)
49
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
50
50
  class FieldRefNameValue:
51
51
  field_ref_name: str
52
52
  value: base_t.JsonValue
@@ -58,7 +58,7 @@ class FieldRefNameValue:
58
58
  named_type_path="sdk.field_values.FieldRefIdNameValue",
59
59
  unconverted_values={"value"},
60
60
  )
61
- @dataclasses.dataclass(kw_only=True)
61
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
62
62
  class FieldRefIdNameValue:
63
63
  field_id: base_t.ObjectId
64
64
  field_ref_name: str
@@ -71,7 +71,7 @@ class FieldRefIdNameValue:
71
71
  named_type_path="sdk.field_values.ArgumentValueRefName",
72
72
  unconverted_values={"value"},
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 ArgumentValueRefName:
76
76
  field_ref_name: str
77
77
  value: base_t.JsonValue
@@ -83,7 +83,7 @@ class ArgumentValueRefName:
83
83
  named_type_path="sdk.field_values.ArgumentValueId",
84
84
  unconverted_values={"value"},
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 ArgumentValueId:
88
88
  field_id: base_t.ObjectId
89
89
  value: base_t.JsonValue
@@ -112,7 +112,7 @@ class FieldValueType(StrEnum):
112
112
  @serial_class(
113
113
  named_type_path="sdk.field_values.FieldValueBase",
114
114
  )
115
- @dataclasses.dataclass(kw_only=True)
115
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
116
116
  class FieldValueBase:
117
117
  type: FieldValueType
118
118
 
@@ -122,7 +122,7 @@ class FieldValueBase:
122
122
  named_type_path="sdk.field_values.FieldValueFiles",
123
123
  parse_require={"type"},
124
124
  )
125
- @dataclasses.dataclass(kw_only=True)
125
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
126
126
  class FieldValueFiles(FieldValueBase):
127
127
  type: typing.Literal[FieldValueType.FILES] = FieldValueType.FILES
128
128
  file_ids: list[base_t.ObjectId]
@@ -139,7 +139,7 @@ class ValueResolution(StrEnum):
139
139
  named_type_path="sdk.field_values.FieldValueFieldOption",
140
140
  parse_require={"type"},
141
141
  )
142
- @dataclasses.dataclass(kw_only=True)
142
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
143
143
  class FieldValueFieldOption(FieldValueBase):
144
144
  type: typing.Literal[FieldValueType.FIELD_OPTION] = FieldValueType.FIELD_OPTION
145
145
  value: str
@@ -151,7 +151,7 @@ class FieldValueFieldOption(FieldValueBase):
151
151
  named_type_path="sdk.field_values.FieldValueFieldOptions",
152
152
  parse_require={"type"},
153
153
  )
154
- @dataclasses.dataclass(kw_only=True)
154
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
155
155
  class FieldValueFieldOptions(FieldValueBase):
156
156
  type: typing.Literal[FieldValueType.FIELD_OPTIONS] = FieldValueType.FIELD_OPTIONS
157
157
  value: list[str]
@@ -163,7 +163,7 @@ class FieldValueFieldOptions(FieldValueBase):
163
163
  named_type_path="sdk.field_values.FieldValueId",
164
164
  parse_require={"type"},
165
165
  )
166
- @dataclasses.dataclass(kw_only=True)
166
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
167
167
  class FieldValueId(FieldValueBase):
168
168
  type: typing.Literal[FieldValueType.ID] = FieldValueType.ID
169
169
  entity_type: entity_t.EntityType
@@ -175,7 +175,7 @@ class FieldValueId(FieldValueBase):
175
175
  named_type_path="sdk.field_values.FieldValueIds",
176
176
  parse_require={"type"},
177
177
  )
178
- @dataclasses.dataclass(kw_only=True)
178
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
179
179
  class FieldValueIds(FieldValueBase):
180
180
  type: typing.Literal[FieldValueType.IDS] = FieldValueType.IDS
181
181
  entity_type: entity_t.EntityType
@@ -187,7 +187,7 @@ class FieldValueIds(FieldValueBase):
187
187
  named_type_path="sdk.field_values.FieldValueText",
188
188
  parse_require={"type"},
189
189
  )
190
- @dataclasses.dataclass(kw_only=True)
190
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
191
191
  class FieldValueText(FieldValueBase):
192
192
  type: typing.Literal[FieldValueType.TEXT] = FieldValueType.TEXT
193
193
  value: str
@@ -198,7 +198,7 @@ class FieldValueText(FieldValueBase):
198
198
  named_type_path="sdk.field_values.FieldValueTexts",
199
199
  parse_require={"type"},
200
200
  )
201
- @dataclasses.dataclass(kw_only=True)
201
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
202
202
  class FieldValueTexts(FieldValueBase):
203
203
  type: typing.Literal[FieldValueType.TEXTS] = FieldValueType.TEXTS
204
204
  value: list[str]
@@ -209,7 +209,7 @@ class FieldValueTexts(FieldValueBase):
209
209
  named_type_path="sdk.field_values.FieldValueBoolean",
210
210
  parse_require={"type"},
211
211
  )
212
- @dataclasses.dataclass(kw_only=True)
212
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
213
213
  class FieldValueBoolean(FieldValueBase):
214
214
  type: typing.Literal[FieldValueType.BOOLEAN] = FieldValueType.BOOLEAN
215
215
  value: bool
@@ -221,7 +221,7 @@ class FieldValueBoolean(FieldValueBase):
221
221
  to_string_values={"value"},
222
222
  parse_require={"type"},
223
223
  )
224
- @dataclasses.dataclass(kw_only=True)
224
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
225
225
  class FieldValueNumeric(FieldValueBase):
226
226
  type: typing.Literal[FieldValueType.NUMERIC] = FieldValueType.NUMERIC
227
227
  value: Decimal
@@ -232,7 +232,7 @@ class FieldValueNumeric(FieldValueBase):
232
232
  named_type_path="sdk.field_values.FieldValueBatchReference",
233
233
  parse_require={"type"},
234
234
  )
235
- @dataclasses.dataclass(kw_only=True)
235
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
236
236
  class FieldValueBatchReference(FieldValueBase):
237
237
  type: typing.Literal[FieldValueType.BATCH_REFERENCE] = FieldValueType.BATCH_REFERENCE
238
238
  reference_key: identifier_t.IdentifierKeyBatchReference
@@ -244,7 +244,7 @@ class FieldValueBatchReference(FieldValueBase):
244
244
  named_type_path="sdk.field_values.FieldValueNull",
245
245
  parse_require={"type"},
246
246
  )
247
- @dataclasses.dataclass(kw_only=True)
247
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
248
248
  class FieldValueNull(FieldValueBase):
249
249
  type: typing.Literal[FieldValueType.NULL_VALUE] = FieldValueType.NULL_VALUE
250
250
 
@@ -254,7 +254,7 @@ class FieldValueNull(FieldValueBase):
254
254
  named_type_path="sdk.field_values.FieldValueNotes",
255
255
  parse_require={"type"},
256
256
  )
257
- @dataclasses.dataclass(kw_only=True)
257
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
258
258
  class FieldValueNotes(FieldValueBase):
259
259
  type: typing.Literal[FieldValueType.NOTES] = FieldValueType.NOTES
260
260
  value: str
@@ -265,7 +265,7 @@ class FieldValueNotes(FieldValueBase):
265
265
  named_type_path="sdk.field_values.FieldValueDate",
266
266
  parse_require={"type"},
267
267
  )
268
- @dataclasses.dataclass(kw_only=True)
268
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
269
269
  class FieldValueDate(FieldValueBase):
270
270
  type: typing.Literal[FieldValueType.DATE] = FieldValueType.DATE
271
271
  value: datetime.date
@@ -276,7 +276,7 @@ class FieldValueDate(FieldValueBase):
276
276
  named_type_path="sdk.field_values.FieldValueDatetime",
277
277
  parse_require={"type"},
278
278
  )
279
- @dataclasses.dataclass(kw_only=True)
279
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
280
280
  class FieldValueDatetime(FieldValueBase):
281
281
  type: typing.Literal[FieldValueType.DATETIME] = FieldValueType.DATETIME
282
282
  value: datetime.datetime
@@ -295,7 +295,7 @@ FieldValue = typing.Annotated[
295
295
  @serial_class(
296
296
  named_type_path="sdk.field_values.FieldArgumentValue",
297
297
  )
298
- @dataclasses.dataclass(kw_only=True)
298
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
299
299
  class FieldArgumentValue:
300
300
  field_key: identifier_t.IdentifierKey
301
301
  value: FieldValue
@@ -19,7 +19,7 @@ __all__: list[str] = [
19
19
  @serial_class(
20
20
  named_type_path="sdk.fields.Field",
21
21
  )
22
- @dataclasses.dataclass(kw_only=True)
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
23
23
  class Field:
24
24
  id: base_t.ObjectId
25
25
  name: str
@@ -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
 
15
16
  __all__: list[str] = [
@@ -28,7 +29,7 @@ __all__: list[str] = [
28
29
  @serial_class(
29
30
  named_type_path="sdk.generic_upload.GenericRemoteDirectoryScope",
30
31
  )
31
- @dataclasses.dataclass(kw_only=True)
32
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
32
33
  class GenericRemoteDirectoryScope:
33
34
  src_path: str
34
35
  success_archive_path: str
@@ -53,7 +54,7 @@ class UploadDestinationType(StrEnum):
53
54
  @serial_class(
54
55
  named_type_path="sdk.generic_upload.UploadDestinationBase",
55
56
  )
56
- @dataclasses.dataclass(kw_only=True)
57
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
57
58
  class UploadDestinationBase:
58
59
  type: UploadDestinationType
59
60
 
@@ -63,7 +64,7 @@ class UploadDestinationBase:
63
64
  named_type_path="sdk.generic_upload.UploadDestinationProject",
64
65
  parse_require={"type"},
65
66
  )
66
- @dataclasses.dataclass(kw_only=True)
67
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
67
68
  class UploadDestinationProject(UploadDestinationBase):
68
69
  type: typing.Literal[UploadDestinationType.PROJECT] = UploadDestinationType.PROJECT
69
70
  project_key: identifier_t.IdentifierKey
@@ -74,7 +75,7 @@ class UploadDestinationProject(UploadDestinationBase):
74
75
  named_type_path="sdk.generic_upload.UploadDestinationMaterialFamily",
75
76
  parse_require={"type"},
76
77
  )
77
- @dataclasses.dataclass(kw_only=True)
78
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
78
79
  class UploadDestinationMaterialFamily(UploadDestinationBase):
79
80
  type: typing.Literal[UploadDestinationType.MATERIAL_FAMILY] = UploadDestinationType.MATERIAL_FAMILY
80
81
  material_family_key: identifier_t.IdentifierKey
@@ -85,7 +86,7 @@ class UploadDestinationMaterialFamily(UploadDestinationBase):
85
86
  named_type_path="sdk.generic_upload.UploadDestinationRecipe",
86
87
  parse_require={"type"},
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 UploadDestinationRecipe(UploadDestinationBase):
90
91
  type: typing.Literal[UploadDestinationType.RECIPE] = UploadDestinationType.RECIPE
91
92
  recipe_key: identifier_t.IdentifierKey
@@ -110,7 +111,7 @@ UploadDestination = typing.Annotated[
110
111
  @serial_class(
111
112
  named_type_path="sdk.generic_upload.GenericUploadStrategy",
112
113
  )
113
- @dataclasses.dataclass(kw_only=True)
114
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
114
115
  class GenericUploadStrategy:
115
116
  uploader_key: identifier_t.IdentifierKey
116
117
  destinations: list[UploadDestination]
@@ -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 entity_t
13
14
 
14
15
  __all__: list[str] = [
@@ -24,7 +25,7 @@ __all__: list[str] = [
24
25
  @serial_class(
25
26
  named_type_path="sdk.id_source.IdSourceSpecBase",
26
27
  )
27
- @dataclasses.dataclass(kw_only=True)
28
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
28
29
  class IdSourceSpecBase:
29
30
  pass
30
31
 
@@ -33,7 +34,7 @@ class IdSourceSpecBase:
33
34
  @serial_class(
34
35
  named_type_path="sdk.id_source.IdSourceSpecEntity",
35
36
  )
36
- @dataclasses.dataclass(kw_only=True)
37
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
37
38
  class IdSourceSpecEntity(IdSourceSpecBase):
38
39
  entity_type: entity_t.EntityType
39
40
 
@@ -42,7 +43,7 @@ class IdSourceSpecEntity(IdSourceSpecBase):
42
43
  @serial_class(
43
44
  named_type_path="sdk.id_source.IdSourceSpecCustomEntity",
44
45
  )
45
- @dataclasses.dataclass(kw_only=True)
46
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
46
47
  class IdSourceSpecCustomEntity(IdSourceSpecBase):
47
48
  definition_ref_name: str
48
49
 
@@ -51,7 +52,7 @@ class IdSourceSpecCustomEntity(IdSourceSpecBase):
51
52
  @serial_class(
52
53
  named_type_path="sdk.id_source.IdSourceSpecFieldOptions",
53
54
  )
54
- @dataclasses.dataclass(kw_only=True)
55
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
55
56
  class IdSourceSpecFieldOptions(IdSourceSpecBase):
56
57
  set_ref_name: str
57
58
  subset_ref_name: str | None = None
@@ -24,7 +24,7 @@ __all__: list[str] = [
24
24
  named_type_path="sdk.identifier.IdentifierKeyId",
25
25
  parse_require={"type"},
26
26
  )
27
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
27
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
28
28
  class IdentifierKeyId:
29
29
  type: typing.Literal["id"] = "id"
30
30
  id: base_t.ObjectId
@@ -35,7 +35,7 @@ class IdentifierKeyId:
35
35
  named_type_path="sdk.identifier.IdentifierKeyRefName",
36
36
  parse_require={"type"},
37
37
  )
38
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
38
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
39
39
  class IdentifierKeyRefName:
40
40
  type: typing.Literal["ref_name"] = "ref_name"
41
41
  ref_name: str
@@ -46,7 +46,7 @@ class IdentifierKeyRefName:
46
46
  named_type_path="sdk.identifier.IdentifierKeyBatchReference",
47
47
  parse_require={"type"},
48
48
  )
49
- @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
49
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
50
50
  class IdentifierKeyBatchReference:
51
51
  type: typing.Literal["batch_reference"] = "batch_reference"
52
52
  reference: str
@@ -21,7 +21,7 @@ __all__: list[str] = [
21
21
  unconverted_values={"quantity_json"},
22
22
  to_string_values={"quantity_dec"},
23
23
  )
24
- @dataclasses.dataclass(kw_only=True)
24
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
25
25
  class InputAttributeValue:
26
26
  attribute_id: base_t.ObjectId
27
27
  quantity_dec: Decimal | None = None
@@ -71,7 +71,7 @@ class IngredientBehavior(StrEnum):
71
71
  @serial_class(
72
72
  named_type_path="sdk.inputs.SimpleInput",
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 SimpleInput:
76
76
  input_id: base_t.ObjectId
77
77
  quantity_type: IngredientQuantityType
@@ -10,6 +10,7 @@ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from . import auth_retrieval_t
13
+ from . import base_t
13
14
  from . import client_config_t
14
15
 
15
16
  __all__: list[str] = [
@@ -29,7 +30,7 @@ class IntegrationEnvironment(StrEnum):
29
30
  @serial_class(
30
31
  named_type_path="sdk.integration_server.EnvironmentConfig",
31
32
  )
32
- @dataclasses.dataclass(kw_only=True)
33
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
33
34
  class EnvironmentConfig:
34
35
  auth_retrieval: auth_retrieval_t.AuthRetrieval
35
36
  base_url: str