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
@@ -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]
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
 
14
15
  __all__: list[str] = [
@@ -34,7 +35,7 @@ class RecipeLockType(StrEnum):
34
35
  @serial_class(
35
36
  named_type_path="sdk.api.recipes.lock_recipes.RecipeLockBase",
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 RecipeLockBase:
39
40
  recipe: identifier_t.IdentifierKey
40
41
 
@@ -43,7 +44,7 @@ class RecipeLockBase:
43
44
  @serial_class(
44
45
  named_type_path="sdk.api.recipes.lock_recipes.Arguments",
45
46
  )
46
- @dataclasses.dataclass(kw_only=True)
47
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
47
48
  class Arguments:
48
49
  type: RecipeLockType = RecipeLockType.ALL
49
50
  recipes: list[identifier_t.IdentifierKey]
@@ -56,7 +57,7 @@ class Arguments:
56
57
  @serial_class(
57
58
  named_type_path="sdk.api.recipes.lock_recipes.Data",
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 Data:
61
62
  pass
62
63
  # 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/remove_recipe_from_project"
25
26
  @serial_class(
26
27
  named_type_path="sdk.api.recipes.remove_recipe_from_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.remove_recipe_from_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
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
27
27
  named_type_path="sdk.api.recipes.set_recipe_inputs.RecipeInputValue",
28
28
  to_string_values={"value_numeric"},
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 RecipeInputValue:
32
32
  recipe_id: base_t.ObjectId
33
33
  input_id: base_t.ObjectId
@@ -43,7 +43,7 @@ class RecipeInputValue:
43
43
  @serial_class(
44
44
  named_type_path="sdk.api.recipes.set_recipe_inputs.Arguments",
45
45
  )
46
- @dataclasses.dataclass(kw_only=True)
46
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
47
47
  class Arguments:
48
48
  input_data: list[RecipeInputValue]
49
49
 
@@ -52,7 +52,7 @@ class Arguments:
52
52
  @serial_class(
53
53
  named_type_path="sdk.api.recipes.set_recipe_inputs.Data",
54
54
  )
55
- @dataclasses.dataclass(kw_only=True)
55
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
56
56
  class Data:
57
57
  pass
58
58
  # 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
  from ... import recipe_metadata_t
13
14
 
@@ -26,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/set_recipe_metadata"
26
27
  @serial_class(
27
28
  named_type_path="sdk.api.recipes.set_recipe_metadata.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
  recipe_metadata: list[recipe_metadata_t.MetadataValue]
@@ -36,7 +37,7 @@ class Arguments:
36
37
  @serial_class(
37
38
  named_type_path="sdk.api.recipes.set_recipe_metadata.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:
41
42
  pass
42
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -35,7 +35,7 @@ ENDPOINT_PATH = "api/external/recipes/set_recipe_output_annotations"
35
35
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.AnnotationEdit",
36
36
  to_string_values={"lower_value", "upper_value"},
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 AnnotationEdit:
40
40
  annotation_type_key: identifier_t.IdentifierKey
41
41
  lower_value: Decimal | None = None
@@ -52,7 +52,7 @@ class AnnotationUpdateType(StrEnum):
52
52
  @serial_class(
53
53
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputEditBase",
54
54
  )
55
- @dataclasses.dataclass(kw_only=True)
55
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
56
56
  class RecipeOutputEditBase:
57
57
  recipe_id: base_t.ObjectId
58
58
  output_id: base_t.ObjectId
@@ -66,7 +66,7 @@ class RecipeOutputEditBase:
66
66
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputMergeAnnotations",
67
67
  parse_require={"type"},
68
68
  )
69
- @dataclasses.dataclass(kw_only=True)
69
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
70
70
  class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
71
71
  type: typing.Literal[AnnotationUpdateType.MERGE] = AnnotationUpdateType.MERGE
72
72
 
@@ -76,7 +76,7 @@ class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
76
76
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputReplaceAnnotations",
77
77
  parse_require={"type"},
78
78
  )
79
- @dataclasses.dataclass(kw_only=True)
79
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
80
80
  class RecipeOutputReplaceAnnotations(RecipeOutputEditBase):
81
81
  type: typing.Literal[AnnotationUpdateType.REPLACE] = AnnotationUpdateType.REPLACE
82
82
 
@@ -99,7 +99,7 @@ RecipeOutputUpdateAnnotations = typing.Annotated[
99
99
  @serial_class(
100
100
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.Arguments",
101
101
  )
102
- @dataclasses.dataclass(kw_only=True)
102
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
103
103
  class Arguments:
104
104
  updates: list[RecipeOutputUpdateAnnotations]
105
105
 
@@ -108,7 +108,7 @@ class Arguments:
108
108
  @serial_class(
109
109
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.Data",
110
110
  )
111
- @dataclasses.dataclass(kw_only=True)
111
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
112
112
  class Data:
113
113
  pass
114
114
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_output_file"
27
27
  @serial_class(
28
28
  named_type_path="sdk.api.recipes.set_recipe_output_file.RecipeOutputFileValue",
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 RecipeOutputFileValue:
32
32
  recipe_id: base_t.ObjectId
33
33
  output_id: base_t.ObjectId
@@ -40,7 +40,7 @@ class RecipeOutputFileValue:
40
40
  @serial_class(
41
41
  named_type_path="sdk.api.recipes.set_recipe_output_file.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
  output_file_data: RecipeOutputFileValue
46
46
 
@@ -49,7 +49,7 @@ class Arguments:
49
49
  @serial_class(
50
50
  named_type_path="sdk.api.recipes.set_recipe_output_file.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(response_t.Response):
54
54
  pass
55
55
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -33,7 +33,7 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_outputs"
33
33
  @serial_class(
34
34
  named_type_path="sdk.api.recipes.set_recipe_outputs.CurveValues",
35
35
  )
36
- @dataclasses.dataclass(kw_only=True)
36
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
37
37
  class CurveValues:
38
38
  x_values: list[Decimal | None]
39
39
  y_values: list[Decimal | None]
@@ -50,7 +50,7 @@ class NullBehavior(StrEnum):
50
50
  named_type_path="sdk.api.recipes.set_recipe_outputs.RecipeOutputValue",
51
51
  to_string_values={"value_numeric"},
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 RecipeOutputValue:
55
55
  recipe_id: base_t.ObjectId
56
56
  output_id: base_t.ObjectId
@@ -69,7 +69,7 @@ class RecipeOutputValue:
69
69
  @serial_class(
70
70
  named_type_path="sdk.api.recipes.set_recipe_outputs.Arguments",
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 Arguments:
74
74
  output_data: list[RecipeOutputValue]
75
75
 
@@ -78,7 +78,7 @@ class Arguments:
78
78
  @serial_class(
79
79
  named_type_path="sdk.api.recipes.set_recipe_outputs.Data",
80
80
  )
81
- @dataclasses.dataclass(kw_only=True)
81
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
82
82
  class Data(response_t.Response):
83
83
  pass
84
84
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -41,7 +41,7 @@ class RecipeTagUpdateType(StrEnum):
41
41
  @serial_class(
42
42
  named_type_path="sdk.api.recipes.set_recipe_tags.RecipeTagUpdateBase",
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 RecipeTagUpdateBase:
46
46
  type: RecipeTagUpdateType
47
47
 
@@ -51,7 +51,7 @@ class RecipeTagUpdateBase:
51
51
  named_type_path="sdk.api.recipes.set_recipe_tags.RecipeTagAppend",
52
52
  parse_require={"type"},
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 RecipeTagAppend(RecipeTagUpdateBase):
56
56
  type: typing.Literal[RecipeTagUpdateType.APPEND] = RecipeTagUpdateType.APPEND
57
57
  recipe_tag_ids: list[base_t.ObjectId]
@@ -62,7 +62,7 @@ class RecipeTagAppend(RecipeTagUpdateBase):
62
62
  named_type_path="sdk.api.recipes.set_recipe_tags.RecipeTagRemove",
63
63
  parse_require={"type"},
64
64
  )
65
- @dataclasses.dataclass(kw_only=True)
65
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
66
66
  class RecipeTagRemove(RecipeTagUpdateBase):
67
67
  type: typing.Literal[RecipeTagUpdateType.REMOVE] = RecipeTagUpdateType.REMOVE
68
68
  recipe_tag_ids: list[base_t.ObjectId]
@@ -73,7 +73,7 @@ class RecipeTagRemove(RecipeTagUpdateBase):
73
73
  named_type_path="sdk.api.recipes.set_recipe_tags.RecipeTagOverride",
74
74
  parse_require={"type"},
75
75
  )
76
- @dataclasses.dataclass(kw_only=True)
76
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
77
77
  class RecipeTagOverride(RecipeTagUpdateBase):
78
78
  type: typing.Literal[RecipeTagUpdateType.OVERRIDE] = RecipeTagUpdateType.OVERRIDE
79
79
  recipe_tag_ids: list[base_t.ObjectId]
@@ -92,7 +92,7 @@ RecipeTagUpdate = typing.Annotated[
92
92
  @serial_class(
93
93
  named_type_path="sdk.api.recipes.set_recipe_tags.Arguments",
94
94
  )
95
- @dataclasses.dataclass(kw_only=True)
95
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
96
96
  class Arguments:
97
97
  recipe_key: identifier_t.IdentifierKey
98
98
  recipe_tag_update: RecipeTagUpdate
@@ -102,7 +102,7 @@ class Arguments:
102
102
  @serial_class(
103
103
  named_type_path="sdk.api.recipes.set_recipe_tags.Data",
104
104
  )
105
- @dataclasses.dataclass(kw_only=True)
105
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
106
106
  class Data:
107
107
  pass
108
108
  # 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/unarchive"
25
26
  @serial_class(
26
27
  named_type_path="sdk.api.recipes.unarchive_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
 
@@ -34,7 +35,7 @@ class Arguments:
34
35
  @serial_class(
35
36
  named_type_path="sdk.api.recipes.unarchive_recipes.Data",
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 Data:
39
40
  pass
40
41
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
9
9
  from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
+ from ... import base_t
12
13
  from ... import identifier_t
13
14
 
14
15
  __all__: list[str] = [
@@ -32,7 +33,7 @@ class RecipeUnlockType(StrEnum):
32
33
  @serial_class(
33
34
  named_type_path="sdk.api.recipes.unlock_recipes.Arguments",
34
35
  )
35
- @dataclasses.dataclass(kw_only=True)
36
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
36
37
  class Arguments:
37
38
  type: RecipeUnlockType = RecipeUnlockType.STANDARD
38
39
  recipes: list[identifier_t.IdentifierKey]
@@ -43,7 +44,7 @@ class Arguments:
43
44
  @serial_class(
44
45
  named_type_path="sdk.api.recipes.unlock_recipes.Data",
45
46
  )
46
- @dataclasses.dataclass(kw_only=True)
47
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
47
48
  class Data:
48
49
  pass
49
50
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,41 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from ... import base_t
12
+
13
+ __all__: list[str] = [
14
+ "Arguments",
15
+ "Data",
16
+ "ENDPOINT_METHOD",
17
+ "ENDPOINT_PATH",
18
+ ]
19
+
20
+ ENDPOINT_METHOD = "POST"
21
+ ENDPOINT_PATH = "api/external/runsheet/complete_async_upload"
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ @serial_class(
26
+ named_type_path="sdk.api.runsheet.complete_async_upload.Arguments",
27
+ )
28
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
+ class Arguments:
30
+ async_job_id: base_t.ObjectId
31
+ file_id: base_t.ObjectId
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @serial_class(
36
+ named_type_path="sdk.api.runsheet.complete_async_upload.Data",
37
+ )
38
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
39
+ class Data:
40
+ pass
41
+ # 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 entity_t
12
13
  from ... import response_t
13
14
 
@@ -26,7 +27,7 @@ ENDPOINT_PATH = "api/external/triggers/run_trigger"
26
27
  @serial_class(
27
28
  named_type_path="sdk.api.triggers.run_trigger.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
  trigger_ref_name: str
32
33
  entity: entity_t.Entity | None = None
@@ -36,7 +37,7 @@ class Arguments:
36
37
  @serial_class(
37
38
  named_type_path="sdk.api.triggers.run_trigger.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(response_t.Response):
41
42
  pass
42
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -28,7 +28,7 @@ ENDPOINT_PATH = "api/external/uploader/invoke_uploader"
28
28
  @serial_class(
29
29
  named_type_path="sdk.api.uploader.invoke_uploader.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
  uploader_key: identifier_t.IdentifierKey
34
34
  destination: generic_upload_t.UploadDestination
@@ -40,7 +40,7 @@ class Arguments:
40
40
  @serial_class(
41
41
  named_type_path="sdk.api.uploader.invoke_uploader.Data",
42
42
  )
43
- @dataclasses.dataclass(kw_only=True)
43
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
44
44
  class Data(async_batch_t.AsyncBatchActionReturn):
45
45
  pass
46
46
  # DO NOT MODIFY -- This file is generated by type_spec