UncountablePythonSDK 0.0.41__py3-none-any.whl → 0.0.42__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 (123) hide show
  1. {UncountablePythonSDK-0.0.41.dist-info → UncountablePythonSDK-0.0.42.dist-info}/METADATA +5 -1
  2. {UncountablePythonSDK-0.0.41.dist-info → UncountablePythonSDK-0.0.42.dist-info}/RECORD +122 -104
  3. docs/requirements.txt +3 -3
  4. examples/invoke_uploader.py +23 -0
  5. pkgs/argument_parser/argument_parser.py +1 -1
  6. pkgs/filesystem_utils/__init__.py +17 -0
  7. pkgs/filesystem_utils/_gdrive_session.py +306 -0
  8. pkgs/filesystem_utils/_local_session.py +69 -0
  9. pkgs/filesystem_utils/_sftp_session.py +147 -0
  10. pkgs/filesystem_utils/file_type_utils.py +61 -0
  11. pkgs/filesystem_utils/filesystem_session.py +39 -0
  12. pkgs/type_spec/emit_open_api.py +4 -2
  13. pkgs/type_spec/emit_open_api_util.py +4 -2
  14. pkgs/type_spec/emit_python.py +13 -14
  15. uncountable/core/file_upload.py +13 -3
  16. uncountable/integration/construct_client.py +1 -1
  17. uncountable/integration/cron.py +9 -6
  18. uncountable/integration/entrypoint.py +1 -1
  19. uncountable/integration/executors/executors.py +24 -0
  20. uncountable/integration/executors/generic_upload_executor.py +245 -0
  21. uncountable/integration/executors/script_executor.py +1 -1
  22. uncountable/integration/job.py +18 -1
  23. uncountable/integration/secret_retrieval/__init__.py +3 -0
  24. uncountable/integration/secret_retrieval/retrieve_secret.py +40 -0
  25. uncountable/integration/server.py +1 -1
  26. uncountable/types/__init__.py +8 -0
  27. uncountable/types/api/batch/execute_batch.py +5 -5
  28. uncountable/types/api/batch/execute_batch_load_async.py +3 -3
  29. uncountable/types/api/chemical/convert_chemical_formats.py +4 -4
  30. uncountable/types/api/entity/create_entities.py +4 -4
  31. uncountable/types/api/entity/create_entity.py +4 -4
  32. uncountable/types/api/entity/get_entities_data.py +4 -4
  33. uncountable/types/api/entity/list_entities.py +5 -5
  34. uncountable/types/api/entity/lock_entity.py +3 -3
  35. uncountable/types/api/entity/resolve_entity_ids.py +4 -4
  36. uncountable/types/api/entity/set_values.py +3 -3
  37. uncountable/types/api/entity/transition_entity_phase.py +5 -5
  38. uncountable/types/api/entity/unlock_entity.py +3 -3
  39. uncountable/types/api/equipment/associate_equipment_input.py +3 -3
  40. uncountable/types/api/field_options/upsert_field_options.py +4 -4
  41. uncountable/types/api/id_source/list_id_source.py +4 -4
  42. uncountable/types/api/id_source/match_id_source.py +4 -4
  43. uncountable/types/api/input_groups/get_input_group_names.py +4 -4
  44. uncountable/types/api/inputs/create_inputs.py +5 -5
  45. uncountable/types/api/inputs/get_input_data.py +7 -7
  46. uncountable/types/api/inputs/get_input_names.py +4 -4
  47. uncountable/types/api/inputs/get_inputs_data.py +7 -7
  48. uncountable/types/api/inputs/set_input_attribute_values.py +4 -4
  49. uncountable/types/api/inputs/set_input_category.py +3 -3
  50. uncountable/types/api/inputs/set_input_subcategories.py +3 -3
  51. uncountable/types/api/inputs/set_intermediate_type.py +3 -3
  52. uncountable/types/api/material_families/update_entity_material_families.py +3 -3
  53. uncountable/types/api/outputs/get_output_data.py +7 -7
  54. uncountable/types/api/outputs/get_output_names.py +4 -4
  55. uncountable/types/api/outputs/resolve_output_conditions.py +6 -6
  56. uncountable/types/api/permissions/set_core_permissions.py +7 -7
  57. uncountable/types/api/project/get_projects.py +4 -4
  58. uncountable/types/api/project/get_projects_data.py +4 -4
  59. uncountable/types/api/recipe_links/create_recipe_link.py +3 -3
  60. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -3
  61. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +4 -4
  62. uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
  63. uncountable/types/api/recipes/archive_recipes.py +3 -3
  64. uncountable/types/api/recipes/associate_recipe_as_input.py +3 -3
  65. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
  66. uncountable/types/api/recipes/create_recipe.py +3 -3
  67. uncountable/types/api/recipes/create_recipes.py +5 -5
  68. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
  69. uncountable/types/api/recipes/edit_recipe_inputs.py +12 -12
  70. uncountable/types/api/recipes/get_curve.py +3 -3
  71. uncountable/types/api/recipes/get_recipe_calculations.py +4 -4
  72. uncountable/types/api/recipes/get_recipe_links.py +3 -3
  73. uncountable/types/api/recipes/get_recipe_names.py +4 -4
  74. uncountable/types/api/recipes/get_recipe_output_metadata.py +4 -4
  75. uncountable/types/api/recipes/get_recipes_data.py +12 -12
  76. uncountable/types/api/recipes/lock_recipes.py +4 -4
  77. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
  78. uncountable/types/api/recipes/set_recipe_inputs.py +4 -4
  79. uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
  80. uncountable/types/api/recipes/set_recipe_output_annotations.py +7 -7
  81. uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
  82. uncountable/types/api/recipes/set_recipe_tags.py +7 -7
  83. uncountable/types/api/recipes/unarchive_recipes.py +3 -3
  84. uncountable/types/api/recipes/unlock_recipes.py +3 -3
  85. uncountable/types/api/triggers/run_trigger.py +3 -3
  86. uncountable/types/api/uploader/__init__.py +1 -0
  87. uncountable/types/api/uploader/invoke_uploader.py +38 -0
  88. uncountable/types/async_batch_processor.py +36 -0
  89. uncountable/types/async_batch_t.py +6 -4
  90. uncountable/types/calculations_t.py +2 -2
  91. uncountable/types/chemical_structure_t.py +2 -2
  92. uncountable/types/client_base.py +25 -2
  93. uncountable/types/curves_t.py +3 -3
  94. uncountable/types/entity_t.py +2 -2
  95. uncountable/types/experiment_groups_t.py +2 -2
  96. uncountable/types/field_values_t.py +5 -5
  97. uncountable/types/fields_t.py +2 -2
  98. uncountable/types/generic_upload.py +9 -0
  99. uncountable/types/generic_upload_t.py +41 -0
  100. uncountable/types/id_source_t.py +5 -5
  101. uncountable/types/identifier_t.py +4 -4
  102. uncountable/types/input_attributes_t.py +2 -2
  103. uncountable/types/inputs_t.py +2 -2
  104. uncountable/types/job_definition.py +26 -0
  105. uncountable/types/job_definition_t.py +203 -0
  106. uncountable/types/outputs_t.py +2 -2
  107. uncountable/types/phases_t.py +2 -2
  108. uncountable/types/recipe_identifiers_t.py +4 -4
  109. uncountable/types/recipe_links_t.py +2 -2
  110. uncountable/types/recipe_metadata_t.py +4 -4
  111. uncountable/types/recipe_output_metadata_t.py +2 -2
  112. uncountable/types/recipe_tags_t.py +2 -2
  113. uncountable/types/recipe_workflow_steps_t.py +5 -5
  114. uncountable/types/recipes_t.py +2 -2
  115. uncountable/types/response_t.py +2 -2
  116. uncountable/types/secret_retrieval.py +12 -0
  117. uncountable/types/secret_retrieval_t.py +69 -0
  118. uncountable/types/units_t.py +2 -2
  119. uncountable/types/users_t.py +2 -2
  120. uncountable/types/workflows_t.py +3 -3
  121. uncountable/integration/types.py +0 -89
  122. {UncountablePythonSDK-0.0.41.dist-info → UncountablePythonSDK-0.0.42.dist-info}/WHEEL +0 -0
  123. {UncountablePythonSDK-0.0.41.dist-info → UncountablePythonSDK-0.0.42.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import base_t
12
12
  from ... import identifier_t
13
13
  from ... import recipe_identifiers_t
@@ -25,7 +25,7 @@ ENDPOINT_PATH = "api/external/recipes/create_recipe"
25
25
 
26
26
 
27
27
  # DO NOT MODIFY -- This file is generated by type_spec
28
- @dataclass(kw_only=True)
28
+ @dataclasses.dataclass(kw_only=True)
29
29
  class Arguments:
30
30
  material_family_id: base_t.ObjectId
31
31
  workflow_id: base_t.ObjectId
@@ -38,7 +38,7 @@ class Arguments:
38
38
 
39
39
 
40
40
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclass(kw_only=True)
41
+ @dataclasses.dataclass(kw_only=True)
42
42
  class Data:
43
43
  result_id: base_t.ObjectId
44
44
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import base_t
12
12
  from ... import recipe_metadata_t
13
13
 
@@ -25,7 +25,7 @@ ENDPOINT_PATH = "api/external/recipes/external_create_recipes"
25
25
 
26
26
 
27
27
  # DO NOT MODIFY -- This file is generated by type_spec
28
- @dataclass(kw_only=True)
28
+ @dataclasses.dataclass(kw_only=True)
29
29
  class CreateRecipeDefinition:
30
30
  workflow_id: base_t.ObjectId
31
31
  name: typing.Optional[str] = None
@@ -34,7 +34,7 @@ class CreateRecipeDefinition:
34
34
 
35
35
 
36
36
  # DO NOT MODIFY -- This file is generated by type_spec
37
- @dataclass(kw_only=True)
37
+ @dataclasses.dataclass(kw_only=True)
38
38
  class Arguments:
39
39
  material_family_id: base_t.ObjectId
40
40
  recipe_definitions: list[CreateRecipeDefinition]
@@ -42,13 +42,13 @@ class Arguments:
42
42
 
43
43
 
44
44
  # DO NOT MODIFY -- This file is generated by type_spec
45
- @dataclass(kw_only=True)
45
+ @dataclasses.dataclass(kw_only=True)
46
46
  class CreateRecipeResult:
47
47
  recipe_id: base_t.ObjectId
48
48
 
49
49
 
50
50
  # DO NOT MODIFY -- This file is generated by type_spec
51
- @dataclass(kw_only=True)
51
+ @dataclasses.dataclass(kw_only=True)
52
52
  class Data:
53
53
  recipes: list[CreateRecipeResult]
54
54
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import async_batch_t
12
12
  from ... import identifier_t
13
13
 
@@ -23,13 +23,13 @@ ENDPOINT_PATH = "api/external/recipes/disassociate_recipe_as_input"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
26
+ @dataclasses.dataclass(kw_only=True)
27
27
  class Arguments:
28
28
  recipe_key: identifier_t.IdentifierKey
29
29
 
30
30
 
31
31
  # DO NOT MODIFY -- This file is generated by type_spec
32
- @dataclass(kw_only=True)
32
+ @dataclasses.dataclass(kw_only=True)
33
33
  class Data(async_batch_t.AsyncBatchActionReturn):
34
34
  pass
35
35
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -8,7 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
11
+ import dataclasses
12
12
  from pkgs.serialization import serial_class
13
13
  from pkgs.serialization import serial_union_annotation
14
14
  from ... import identifier_t
@@ -48,7 +48,7 @@ class RecipeInputEditType(StrEnum):
48
48
 
49
49
 
50
50
  # DO NOT MODIFY -- This file is generated by type_spec
51
- @dataclass(kw_only=True)
51
+ @dataclasses.dataclass(kw_only=True)
52
52
  class RecipeInputEditBase:
53
53
  type: RecipeInputEditType
54
54
 
@@ -57,7 +57,7 @@ class RecipeInputEditBase:
57
57
  @serial_class(
58
58
  parse_require={"type"},
59
59
  )
60
- @dataclass(kw_only=True)
60
+ @dataclasses.dataclass(kw_only=True)
61
61
  class RecipeInputEditClearInputs(RecipeInputEditBase):
62
62
  type: typing.Literal[RecipeInputEditType.CLEAR_INPUTS] = RecipeInputEditType.CLEAR_INPUTS
63
63
 
@@ -66,7 +66,7 @@ class RecipeInputEditClearInputs(RecipeInputEditBase):
66
66
  @serial_class(
67
67
  to_string_values={"value_numeric"},
68
68
  )
69
- @dataclass(kw_only=True)
69
+ @dataclasses.dataclass(kw_only=True)
70
70
  class RecipeInputEditInputBase(RecipeInputEditBase):
71
71
  ingredient_key: identifier_t.IdentifierKey
72
72
  quantity_basis: recipe_inputs_t.QuantityBasis = recipe_inputs_t.QuantityBasis.MASS
@@ -80,7 +80,7 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
80
80
  @serial_class(
81
81
  parse_require={"type"},
82
82
  )
83
- @dataclass(kw_only=True)
83
+ @dataclasses.dataclass(kw_only=True)
84
84
  class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
85
85
  type: typing.Literal[RecipeInputEditType.CHANGE_BASIS] = RecipeInputEditType.CHANGE_BASIS
86
86
 
@@ -89,7 +89,7 @@ class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
89
89
  @serial_class(
90
90
  parse_require={"type"},
91
91
  )
92
- @dataclass(kw_only=True)
92
+ @dataclasses.dataclass(kw_only=True)
93
93
  class RecipeInputEditUpsertInput(RecipeInputEditInputBase):
94
94
  type: typing.Literal[RecipeInputEditType.UPSERT_INPUT] = RecipeInputEditType.UPSERT_INPUT
95
95
  clear_first: bool
@@ -99,7 +99,7 @@ class RecipeInputEditUpsertInput(RecipeInputEditInputBase):
99
99
  @serial_class(
100
100
  parse_require={"type"},
101
101
  )
102
- @dataclass(kw_only=True)
102
+ @dataclasses.dataclass(kw_only=True)
103
103
  class RecipeInputEditAddInput(RecipeInputEditInputBase):
104
104
  type: typing.Literal[RecipeInputEditType.ADD_INPUT] = RecipeInputEditType.ADD_INPUT
105
105
 
@@ -108,7 +108,7 @@ class RecipeInputEditAddInput(RecipeInputEditInputBase):
108
108
  @serial_class(
109
109
  parse_require={"type"},
110
110
  )
111
- @dataclass(kw_only=True)
111
+ @dataclasses.dataclass(kw_only=True)
112
112
  class RecipeInputEditSetLot(RecipeInputEditBase):
113
113
  type: typing.Literal[RecipeInputEditType.SET_LOT] = RecipeInputEditType.SET_LOT
114
114
  ingredient_key: identifier_t.IdentifierKey
@@ -119,7 +119,7 @@ class RecipeInputEditSetLot(RecipeInputEditBase):
119
119
  @serial_class(
120
120
  to_string_values={"lower_value", "upper_value"},
121
121
  )
122
- @dataclass(kw_only=True)
122
+ @dataclasses.dataclass(kw_only=True)
123
123
  class AnnotationEdit:
124
124
  annotation_type_key: identifier_t.IdentifierKey
125
125
  lower_value: typing.Optional[Decimal] = None
@@ -130,7 +130,7 @@ class AnnotationEdit:
130
130
  @serial_class(
131
131
  parse_require={"type"},
132
132
  )
133
- @dataclass(kw_only=True)
133
+ @dataclasses.dataclass(kw_only=True)
134
134
  class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
135
135
  type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
136
136
  ingredient_key: identifier_t.IdentifierKey
@@ -156,7 +156,7 @@ RecipeInputEdit = typing.Annotated[
156
156
 
157
157
 
158
158
  # DO NOT MODIFY -- This file is generated by type_spec
159
- @dataclass(kw_only=True)
159
+ @dataclasses.dataclass(kw_only=True)
160
160
  class Arguments:
161
161
  recipe_key: identifier_t.IdentifierKey
162
162
  recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
@@ -164,7 +164,7 @@ class Arguments:
164
164
 
165
165
 
166
166
  # DO NOT MODIFY -- This file is generated by type_spec
167
- @dataclass(kw_only=True)
167
+ @dataclasses.dataclass(kw_only=True)
168
168
  class Data:
169
169
  pass
170
170
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import base_t
12
12
  from ... import curves_t
13
13
 
@@ -23,14 +23,14 @@ ENDPOINT_PATH = "api/external/recipes/external_get_curve"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
26
+ @dataclasses.dataclass(kw_only=True)
27
27
  class Arguments:
28
28
  recipe_output_id: typing.Optional[base_t.ObjectId] = None
29
29
  recipe_input_id: typing.Optional[base_t.ObjectId] = None
30
30
 
31
31
 
32
32
  # DO NOT MODIFY -- This file is generated by type_spec
33
- @dataclass(kw_only=True)
33
+ @dataclasses.dataclass(kw_only=True)
34
34
  class Data:
35
35
  curve: curves_t.Curve
36
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base_t
13
13
  from ... import calculations_t
@@ -25,7 +25,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_calculations"
25
25
 
26
26
 
27
27
  # DO NOT MODIFY -- This file is generated by type_spec
28
- @dataclass(kw_only=True)
28
+ @dataclasses.dataclass(kw_only=True)
29
29
  class Arguments:
30
30
  recipe_ids: list[base_t.ObjectId]
31
31
  calculation_ids: typing.Optional[list[base_t.ObjectId]] = None
@@ -36,7 +36,7 @@ class Arguments:
36
36
  unconverted_values={"quantity_json"},
37
37
  to_string_values={"quantity_dec"},
38
38
  )
39
- @dataclass(kw_only=True)
39
+ @dataclasses.dataclass(kw_only=True)
40
40
  class RecipeCalculation:
41
41
  recipe_id: base_t.ObjectId
42
42
  calculation_id: base_t.ObjectId
@@ -45,7 +45,7 @@ class RecipeCalculation:
45
45
 
46
46
 
47
47
  # DO NOT MODIFY -- This file is generated by type_spec
48
- @dataclass(kw_only=True)
48
+ @dataclasses.dataclass(kw_only=True)
49
49
  class Data:
50
50
  recipe_calculations: list[RecipeCalculation]
51
51
  calculations: list[calculations_t.Calculation]
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import base_t
12
12
  from ... import recipe_links_t
13
13
 
@@ -23,7 +23,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_links"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
26
+ @dataclasses.dataclass(kw_only=True)
27
27
  class Arguments:
28
28
  recipe_ids: list[base_t.ObjectId]
29
29
  depth: int = 1
@@ -31,7 +31,7 @@ class Arguments:
31
31
 
32
32
 
33
33
  # DO NOT MODIFY -- This file is generated by type_spec
34
- @dataclass(kw_only=True)
34
+ @dataclasses.dataclass(kw_only=True)
35
35
  class Data:
36
36
  recipe_links: list[recipe_links_t.RecipeLink]
37
37
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import base_t
12
12
 
13
13
  __all__: list[str] = [
@@ -23,20 +23,20 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_names"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
26
+ @dataclasses.dataclass(kw_only=True)
27
27
  class Arguments:
28
28
  project_id: base_t.ObjectId
29
29
 
30
30
 
31
31
  # DO NOT MODIFY -- This file is generated by type_spec
32
- @dataclass(kw_only=True)
32
+ @dataclasses.dataclass(kw_only=True)
33
33
  class SimpleRecipe:
34
34
  id: base_t.ObjectId
35
35
  name: str
36
36
 
37
37
 
38
38
  # DO NOT MODIFY -- This file is generated by type_spec
39
- @dataclass(kw_only=True)
39
+ @dataclasses.dataclass(kw_only=True)
40
40
  class Data:
41
41
  recipes: list[SimpleRecipe]
42
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base_t
13
13
  from ... import recipe_output_metadata_t
@@ -25,7 +25,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_output_metadata"
25
25
 
26
26
 
27
27
  # DO NOT MODIFY -- This file is generated by type_spec
28
- @dataclass(kw_only=True)
28
+ @dataclasses.dataclass(kw_only=True)
29
29
  class Arguments:
30
30
  recipe_output_ids: list[base_t.ObjectId]
31
31
 
@@ -35,7 +35,7 @@ class Arguments:
35
35
  unconverted_values={"quantity_json"},
36
36
  to_string_values={"quantity_dec"},
37
37
  )
38
- @dataclass(kw_only=True)
38
+ @dataclasses.dataclass(kw_only=True)
39
39
  class RecipeOutputMetadata:
40
40
  recipe_output_id: base_t.ObjectId
41
41
  recipe_output_metadata_field_id: base_t.ObjectId
@@ -44,7 +44,7 @@ class RecipeOutputMetadata:
44
44
 
45
45
 
46
46
  # DO NOT MODIFY -- This file is generated by type_spec
47
- @dataclass(kw_only=True)
47
+ @dataclasses.dataclass(kw_only=True)
48
48
  class Data:
49
49
  recipe_output_metadata: list[RecipeOutputMetadata]
50
50
  recipe_output_metadata_fields: list[recipe_output_metadata_t.RecipeOutputMetadataField]
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base_t
13
13
  from ... import experiment_groups_t
@@ -38,7 +38,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
38
38
 
39
39
 
40
40
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclass(kw_only=True)
41
+ @dataclasses.dataclass(kw_only=True)
42
42
  class Arguments:
43
43
  recipe_ids: typing.Optional[typing.Optional[list[base_t.ObjectId]]] = None
44
44
  project_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
@@ -51,7 +51,7 @@ class Arguments:
51
51
  unconverted_values={"quantity_json"},
52
52
  to_string_values={"quantity_dec"},
53
53
  )
54
- @dataclass(kw_only=True)
54
+ @dataclasses.dataclass(kw_only=True)
55
55
  class RecipeOutput:
56
56
  id: base_t.ObjectId
57
57
  output_id: base_t.ObjectId
@@ -67,7 +67,7 @@ class RecipeOutput:
67
67
  unconverted_values={"quantity_json"},
68
68
  to_string_values={"quantity_dec"},
69
69
  )
70
- @dataclass(kw_only=True)
70
+ @dataclasses.dataclass(kw_only=True)
71
71
  class ConditionParameterValue:
72
72
  condition_parameter_id: base_t.ObjectId
73
73
  condition_parameter_name: str
@@ -76,7 +76,7 @@ class ConditionParameterValue:
76
76
 
77
77
 
78
78
  # DO NOT MODIFY -- This file is generated by type_spec
79
- @dataclass(kw_only=True)
79
+ @dataclasses.dataclass(kw_only=True)
80
80
  class SimpleOutputCondition:
81
81
  output_condition_id: base_t.ObjectId
82
82
  condition_parameter_values: list[ConditionParameterValue]
@@ -87,7 +87,7 @@ class SimpleOutputCondition:
87
87
  unconverted_values={"actual_quantity_json", "quantity_json"},
88
88
  to_string_values={"actual_quantity_dec", "quantity_dec"},
89
89
  )
90
- @dataclass(kw_only=True)
90
+ @dataclasses.dataclass(kw_only=True)
91
91
  class RecipeInput:
92
92
  id: base_t.ObjectId
93
93
  input_id: base_t.ObjectId
@@ -102,7 +102,7 @@ class RecipeInput:
102
102
 
103
103
 
104
104
  # DO NOT MODIFY -- This file is generated by type_spec
105
- @dataclass(kw_only=True)
105
+ @dataclasses.dataclass(kw_only=True)
106
106
  class RecipeStep:
107
107
  name: typing.Optional[str]
108
108
  recipe_step_id: base_t.ObjectId
@@ -111,14 +111,14 @@ class RecipeStep:
111
111
 
112
112
 
113
113
  # DO NOT MODIFY -- This file is generated by type_spec
114
- @dataclass(kw_only=True)
114
+ @dataclasses.dataclass(kw_only=True)
115
115
  class RecipeStepGroup:
116
116
  name: typing.Optional[str]
117
117
  recipe_steps: list[RecipeStep]
118
118
 
119
119
 
120
120
  # DO NOT MODIFY -- This file is generated by type_spec
121
- @dataclass(kw_only=True)
121
+ @dataclasses.dataclass(kw_only=True)
122
122
  class RecipeWorkflowStep:
123
123
  recipe_workflow_step_id: base_t.ObjectId
124
124
  workflow_step_id: base_t.ObjectId
@@ -129,7 +129,7 @@ class RecipeWorkflowStep:
129
129
  @serial_class(
130
130
  to_string_values={"actual_quantity_dec", "quantity_dec"},
131
131
  )
132
- @dataclass(kw_only=True)
132
+ @dataclasses.dataclass(kw_only=True)
133
133
  class RecipeStepRelationship:
134
134
  step_relationship_id: base_t.ObjectId
135
135
  name: typing.Optional[str]
@@ -140,7 +140,7 @@ class RecipeStepRelationship:
140
140
 
141
141
 
142
142
  # DO NOT MODIFY -- This file is generated by type_spec
143
- @dataclass(kw_only=True)
143
+ @dataclasses.dataclass(kw_only=True)
144
144
  class Recipe:
145
145
  recipe_id: base_t.ObjectId
146
146
  create_datetime: str
@@ -160,7 +160,7 @@ class Recipe:
160
160
 
161
161
 
162
162
  # DO NOT MODIFY -- This file is generated by type_spec
163
- @dataclass(kw_only=True)
163
+ @dataclasses.dataclass(kw_only=True)
164
164
  class Data:
165
165
  recipes: list[Recipe]
166
166
  workflows: list[workflows_t.SimpleWorkflow]
@@ -8,7 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
11
+ import dataclasses
12
12
  from ... import identifier_t
13
13
 
14
14
  __all__: list[str] = [
@@ -31,13 +31,13 @@ class RecipeLockType(StrEnum):
31
31
 
32
32
 
33
33
  # DO NOT MODIFY -- This file is generated by type_spec
34
- @dataclass(kw_only=True)
34
+ @dataclasses.dataclass(kw_only=True)
35
35
  class RecipeLockBase:
36
36
  recipe: identifier_t.IdentifierKey
37
37
 
38
38
 
39
39
  # DO NOT MODIFY -- This file is generated by type_spec
40
- @dataclass(kw_only=True)
40
+ @dataclasses.dataclass(kw_only=True)
41
41
  class Arguments:
42
42
  type: RecipeLockType = RecipeLockType.ALL
43
43
  recipes: list[identifier_t.IdentifierKey]
@@ -47,7 +47,7 @@ class Arguments:
47
47
 
48
48
 
49
49
  # DO NOT MODIFY -- This file is generated by type_spec
50
- @dataclass(kw_only=True)
50
+ @dataclasses.dataclass(kw_only=True)
51
51
  class Data:
52
52
  pass
53
53
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import identifier_t
12
12
 
13
13
  __all__: list[str] = [
@@ -22,14 +22,14 @@ ENDPOINT_PATH = "api/external/recipes/remove_recipe_from_project"
22
22
 
23
23
 
24
24
  # DO NOT MODIFY -- This file is generated by type_spec
25
- @dataclass(kw_only=True)
25
+ @dataclasses.dataclass(kw_only=True)
26
26
  class Arguments:
27
27
  recipe_key: identifier_t.IdentifierKey
28
28
  project_key: identifier_t.IdentifierKey
29
29
 
30
30
 
31
31
  # DO NOT MODIFY -- This file is generated by type_spec
32
- @dataclass(kw_only=True)
32
+ @dataclasses.dataclass(kw_only=True)
33
33
  class Data:
34
34
  pass
35
35
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base_t
13
13
 
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
27
27
  @serial_class(
28
28
  to_string_values={"value_numeric"},
29
29
  )
30
- @dataclass(kw_only=True)
30
+ @dataclasses.dataclass(kw_only=True)
31
31
  class RecipeInputValue:
32
32
  recipe_id: base_t.ObjectId
33
33
  input_id: base_t.ObjectId
@@ -40,13 +40,13 @@ class RecipeInputValue:
40
40
 
41
41
 
42
42
  # DO NOT MODIFY -- This file is generated by type_spec
43
- @dataclass(kw_only=True)
43
+ @dataclasses.dataclass(kw_only=True)
44
44
  class Arguments:
45
45
  input_data: list[RecipeInputValue]
46
46
 
47
47
 
48
48
  # DO NOT MODIFY -- This file is generated by type_spec
49
- @dataclass(kw_only=True)
49
+ @dataclasses.dataclass(kw_only=True)
50
50
  class Data:
51
51
  pass
52
52
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from ... import identifier_t
12
12
  from ... import recipe_metadata_t
13
13
 
@@ -23,14 +23,14 @@ ENDPOINT_PATH = "api/external/recipes/set_recipe_metadata"
23
23
 
24
24
 
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
26
+ @dataclasses.dataclass(kw_only=True)
27
27
  class Arguments:
28
28
  recipe_key: identifier_t.IdentifierKey
29
29
  recipe_metadata: list[recipe_metadata_t.MetadataValue]
30
30
 
31
31
 
32
32
  # DO NOT MODIFY -- This file is generated by type_spec
33
- @dataclass(kw_only=True)
33
+ @dataclasses.dataclass(kw_only=True)
34
34
  class Data:
35
35
  pass
36
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -8,7 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
11
+ import dataclasses
12
12
  from pkgs.serialization import serial_class
13
13
  from pkgs.serialization import serial_union_annotation
14
14
  from ... import base_t
@@ -35,7 +35,7 @@ ENDPOINT_PATH = "api/external/recipes/set_recipe_output_annotations"
35
35
  @serial_class(
36
36
  to_string_values={"lower_value", "upper_value"},
37
37
  )
38
- @dataclass(kw_only=True)
38
+ @dataclasses.dataclass(kw_only=True)
39
39
  class AnnotationEdit:
40
40
  annotation_type_key: identifier_t.IdentifierKey
41
41
  lower_value: typing.Optional[Decimal] = None
@@ -49,7 +49,7 @@ class AnnotationUpdateType(StrEnum):
49
49
 
50
50
 
51
51
  # DO NOT MODIFY -- This file is generated by type_spec
52
- @dataclass(kw_only=True)
52
+ @dataclasses.dataclass(kw_only=True)
53
53
  class RecipeOutputEditBase:
54
54
  recipe_id: base_t.ObjectId
55
55
  output_id: base_t.ObjectId
@@ -62,7 +62,7 @@ class RecipeOutputEditBase:
62
62
  @serial_class(
63
63
  parse_require={"type"},
64
64
  )
65
- @dataclass(kw_only=True)
65
+ @dataclasses.dataclass(kw_only=True)
66
66
  class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
67
67
  type: typing.Literal[AnnotationUpdateType.MERGE] = AnnotationUpdateType.MERGE
68
68
 
@@ -71,7 +71,7 @@ class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
71
71
  @serial_class(
72
72
  parse_require={"type"},
73
73
  )
74
- @dataclass(kw_only=True)
74
+ @dataclasses.dataclass(kw_only=True)
75
75
  class RecipeOutputReplaceAnnotations(RecipeOutputEditBase):
76
76
  type: typing.Literal[AnnotationUpdateType.REPLACE] = AnnotationUpdateType.REPLACE
77
77
 
@@ -90,13 +90,13 @@ RecipeOutputUpdateAnnotations = typing.Annotated[
90
90
 
91
91
 
92
92
  # DO NOT MODIFY -- This file is generated by type_spec
93
- @dataclass(kw_only=True)
93
+ @dataclasses.dataclass(kw_only=True)
94
94
  class Arguments:
95
95
  updates: list[RecipeOutputUpdateAnnotations]
96
96
 
97
97
 
98
98
  # DO NOT MODIFY -- This file is generated by type_spec
99
- @dataclass(kw_only=True)
99
+ @dataclasses.dataclass(kw_only=True)
100
100
  class Data:
101
101
  pass
102
102
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base_t
13
13
  from ... import recipes_t
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_outputs"
27
27
 
28
28
 
29
29
  # DO NOT MODIFY -- This file is generated by type_spec
30
- @dataclass(kw_only=True)
30
+ @dataclasses.dataclass(kw_only=True)
31
31
  class CurveValues:
32
32
  x_values: list[typing.Optional[Decimal]]
33
33
  y_values: list[typing.Optional[Decimal]]
@@ -37,7 +37,7 @@ class CurveValues:
37
37
  @serial_class(
38
38
  to_string_values={"value_numeric"},
39
39
  )
40
- @dataclass(kw_only=True)
40
+ @dataclasses.dataclass(kw_only=True)
41
41
  class RecipeOutputValue:
42
42
  recipe_id: base_t.ObjectId
43
43
  output_id: base_t.ObjectId
@@ -50,13 +50,13 @@ class RecipeOutputValue:
50
50
 
51
51
 
52
52
  # DO NOT MODIFY -- This file is generated by type_spec
53
- @dataclass(kw_only=True)
53
+ @dataclasses.dataclass(kw_only=True)
54
54
  class Arguments:
55
55
  output_data: list[RecipeOutputValue]
56
56
 
57
57
 
58
58
  # DO NOT MODIFY -- This file is generated by type_spec
59
- @dataclass(kw_only=True)
59
+ @dataclasses.dataclass(kw_only=True)
60
60
  class Data(response_t.Response):
61
61
  pass
62
62
  # DO NOT MODIFY -- This file is generated by type_spec