UncountablePythonSDK 0.0.91__py3-none-any.whl → 0.0.93__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 (193) hide show
  1. {UncountablePythonSDK-0.0.91.dist-info → UncountablePythonSDK-0.0.93.dist-info}/METADATA +2 -2
  2. UncountablePythonSDK-0.0.93.dist-info/RECORD +301 -0
  3. {UncountablePythonSDK-0.0.91.dist-info → UncountablePythonSDK-0.0.93.dist-info}/WHEEL +1 -1
  4. examples/set_recipe_metadata_file.py +1 -1
  5. examples/upload_files.py +1 -2
  6. pkgs/argument_parser/__init__.py +3 -0
  7. pkgs/argument_parser/argument_parser.py +52 -23
  8. pkgs/filesystem_utils/__init__.py +1 -0
  9. pkgs/filesystem_utils/_gdrive_session.py +4 -4
  10. pkgs/filesystem_utils/_s3_session.py +2 -1
  11. pkgs/filesystem_utils/_sftp_session.py +2 -3
  12. pkgs/filesystem_utils/file_type_utils.py +10 -10
  13. pkgs/serialization/annotation.py +5 -5
  14. pkgs/serialization/missing_sentry.py +1 -1
  15. pkgs/serialization/serial_alias.py +3 -3
  16. pkgs/serialization/serial_class.py +10 -10
  17. pkgs/serialization/serial_generic.py +1 -1
  18. pkgs/serialization/serial_union.py +10 -10
  19. pkgs/serialization_util/__init__.py +2 -0
  20. pkgs/serialization_util/serialization_helpers.py +1 -4
  21. pkgs/type_spec/actions_registry/__main__.py +0 -4
  22. pkgs/type_spec/builder.py +121 -40
  23. pkgs/type_spec/config.py +10 -5
  24. pkgs/type_spec/emit_open_api.py +2 -2
  25. pkgs/type_spec/emit_open_api_util.py +1 -1
  26. pkgs/type_spec/emit_python.py +145 -63
  27. pkgs/type_spec/emit_typescript.py +57 -10
  28. pkgs/type_spec/load_types.py +1 -2
  29. pkgs/type_spec/open_api_util.py +1 -2
  30. pkgs/type_spec/parts/base.py.prepart +2 -0
  31. pkgs/type_spec/type_info/emit_type_info.py +8 -8
  32. pkgs/type_spec/util.py +5 -7
  33. pkgs/type_spec/value_spec/__main__.py +15 -5
  34. pkgs/type_spec/value_spec/emit_python.py +5 -2
  35. pkgs/type_spec/value_spec/types.py +1 -1
  36. uncountable/core/client.py +16 -15
  37. uncountable/core/file_upload.py +39 -15
  38. uncountable/integration/construct_client.py +3 -3
  39. uncountable/integration/executors/generic_upload_executor.py +1 -1
  40. uncountable/integration/job.py +2 -2
  41. uncountable/integration/queue_runner/command_server/types.py +1 -1
  42. uncountable/integration/queue_runner/worker.py +1 -1
  43. uncountable/integration/server.py +4 -4
  44. uncountable/integration/telemetry.py +11 -0
  45. uncountable/types/__init__.py +0 -1
  46. uncountable/types/api/batch/execute_batch.py +1 -2
  47. uncountable/types/api/batch/execute_batch_load_async.py +0 -1
  48. uncountable/types/api/chemical/convert_chemical_formats.py +0 -1
  49. uncountable/types/api/entity/create_entities.py +3 -4
  50. uncountable/types/api/entity/create_entity.py +4 -5
  51. uncountable/types/api/entity/get_entities_data.py +0 -1
  52. uncountable/types/api/entity/grant_entity_permissions.py +3 -4
  53. uncountable/types/api/entity/list_entities.py +5 -6
  54. uncountable/types/api/entity/lock_entity.py +1 -2
  55. uncountable/types/api/entity/resolve_entity_ids.py +2 -3
  56. uncountable/types/api/entity/set_entity_field_values.py +0 -1
  57. uncountable/types/api/entity/set_values.py +0 -1
  58. uncountable/types/api/entity/transition_entity_phase.py +1 -2
  59. uncountable/types/api/entity/unlock_entity.py +0 -1
  60. uncountable/types/api/equipment/associate_equipment_input.py +0 -1
  61. uncountable/types/api/field_options/upsert_field_options.py +3 -4
  62. uncountable/types/api/files/download_file.py +1 -2
  63. uncountable/types/api/id_source/list_id_source.py +3 -4
  64. uncountable/types/api/id_source/match_id_source.py +1 -2
  65. uncountable/types/api/input_groups/get_input_group_names.py +0 -1
  66. uncountable/types/api/inputs/create_inputs.py +4 -5
  67. uncountable/types/api/inputs/get_input_data.py +5 -6
  68. uncountable/types/api/inputs/get_input_names.py +3 -4
  69. uncountable/types/api/inputs/get_inputs_data.py +0 -1
  70. uncountable/types/api/inputs/set_input_attribute_values.py +2 -3
  71. uncountable/types/api/inputs/set_input_category.py +2 -3
  72. uncountable/types/api/inputs/set_input_subcategories.py +0 -1
  73. uncountable/types/api/inputs/set_intermediate_type.py +1 -2
  74. uncountable/types/api/material_families/update_entity_material_families.py +1 -2
  75. uncountable/types/api/outputs/get_output_data.py +6 -7
  76. uncountable/types/api/outputs/get_output_names.py +2 -3
  77. uncountable/types/api/outputs/resolve_output_conditions.py +2 -3
  78. uncountable/types/api/permissions/set_core_permissions.py +3 -4
  79. uncountable/types/api/project/get_projects.py +3 -4
  80. uncountable/types/api/project/get_projects_data.py +4 -5
  81. uncountable/types/api/recipe_links/create_recipe_link.py +1 -2
  82. uncountable/types/api/recipe_links/remove_recipe_link.py +1 -2
  83. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -4
  84. uncountable/types/api/recipes/add_recipe_to_project.py +0 -1
  85. uncountable/types/api/recipes/archive_recipes.py +1 -2
  86. uncountable/types/api/recipes/associate_recipe_as_input.py +2 -3
  87. uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -1
  88. uncountable/types/api/recipes/clear_recipe_outputs.py +0 -1
  89. uncountable/types/api/recipes/create_recipe.py +6 -7
  90. uncountable/types/api/recipes/create_recipes.py +4 -5
  91. uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -1
  92. uncountable/types/api/recipes/edit_recipe_inputs.py +9 -10
  93. uncountable/types/api/recipes/get_column_calculation_values.py +1 -2
  94. uncountable/types/api/recipes/get_curve.py +2 -3
  95. uncountable/types/api/recipes/get_recipe_calculations.py +3 -4
  96. uncountable/types/api/recipes/get_recipe_links.py +1 -2
  97. uncountable/types/api/recipes/get_recipe_names.py +0 -1
  98. uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -1
  99. uncountable/types/api/recipes/get_recipes_data.py +22 -23
  100. uncountable/types/api/recipes/lock_recipes.py +3 -4
  101. uncountable/types/api/recipes/remove_recipe_from_project.py +0 -1
  102. uncountable/types/api/recipes/set_recipe_inputs.py +6 -7
  103. uncountable/types/api/recipes/set_recipe_metadata.py +0 -1
  104. uncountable/types/api/recipes/set_recipe_output_annotations.py +5 -6
  105. uncountable/types/api/recipes/set_recipe_output_file.py +2 -3
  106. uncountable/types/api/recipes/set_recipe_outputs.py +8 -9
  107. uncountable/types/api/recipes/set_recipe_tags.py +2 -3
  108. uncountable/types/api/recipes/unarchive_recipes.py +0 -1
  109. uncountable/types/api/recipes/unlock_recipes.py +2 -3
  110. uncountable/types/api/triggers/run_trigger.py +1 -2
  111. uncountable/types/api/uploader/invoke_uploader.py +2 -3
  112. uncountable/types/async_batch.py +0 -1
  113. uncountable/types/async_batch_processor.py +23 -24
  114. uncountable/types/async_batch_t.py +5 -6
  115. uncountable/types/async_jobs.py +0 -1
  116. uncountable/types/async_jobs_t.py +1 -2
  117. uncountable/types/auth_retrieval.py +0 -1
  118. uncountable/types/auth_retrieval_t.py +2 -3
  119. uncountable/types/base.py +0 -1
  120. uncountable/types/base_t.py +2 -1
  121. uncountable/types/calculations.py +0 -1
  122. uncountable/types/calculations_t.py +0 -1
  123. uncountable/types/chemical_structure.py +0 -1
  124. uncountable/types/chemical_structure_t.py +3 -4
  125. uncountable/types/client_base.py +65 -66
  126. uncountable/types/client_config.py +0 -1
  127. uncountable/types/client_config_t.py +1 -2
  128. uncountable/types/curves.py +0 -1
  129. uncountable/types/curves_t.py +4 -5
  130. uncountable/types/entity.py +0 -1
  131. uncountable/types/entity_t.py +3 -4
  132. uncountable/types/experiment_groups.py +0 -1
  133. uncountable/types/experiment_groups_t.py +0 -1
  134. uncountable/types/field_values.py +0 -1
  135. uncountable/types/field_values_t.py +6 -7
  136. uncountable/types/fields.py +0 -1
  137. uncountable/types/fields_t.py +0 -1
  138. uncountable/types/generic_upload.py +0 -1
  139. uncountable/types/generic_upload_t.py +7 -8
  140. uncountable/types/id_source.py +0 -1
  141. uncountable/types/id_source_t.py +2 -3
  142. uncountable/types/identifier.py +0 -1
  143. uncountable/types/identifier_t.py +1 -2
  144. uncountable/types/input_attributes.py +0 -1
  145. uncountable/types/input_attributes_t.py +2 -3
  146. uncountable/types/inputs.py +0 -1
  147. uncountable/types/inputs_t.py +2 -3
  148. uncountable/types/integration_server.py +0 -1
  149. uncountable/types/integration_server_t.py +2 -3
  150. uncountable/types/job_definition.py +0 -1
  151. uncountable/types/job_definition_t.py +16 -17
  152. uncountable/types/outputs.py +0 -1
  153. uncountable/types/outputs_t.py +1 -2
  154. uncountable/types/overrides.py +0 -1
  155. uncountable/types/overrides_t.py +0 -1
  156. uncountable/types/permissions.py +0 -1
  157. uncountable/types/permissions_t.py +1 -2
  158. uncountable/types/phases.py +0 -1
  159. uncountable/types/phases_t.py +0 -1
  160. uncountable/types/post_base.py +0 -1
  161. uncountable/types/post_base_t.py +1 -2
  162. uncountable/types/queued_job.py +0 -1
  163. uncountable/types/queued_job_t.py +2 -3
  164. uncountable/types/recipe_identifiers.py +0 -1
  165. uncountable/types/recipe_identifiers_t.py +3 -4
  166. uncountable/types/recipe_inputs.py +0 -1
  167. uncountable/types/recipe_inputs_t.py +1 -2
  168. uncountable/types/recipe_links.py +0 -1
  169. uncountable/types/recipe_links_t.py +2 -3
  170. uncountable/types/recipe_metadata.py +0 -1
  171. uncountable/types/recipe_metadata_t.py +6 -7
  172. uncountable/types/recipe_output_metadata.py +0 -1
  173. uncountable/types/recipe_output_metadata_t.py +0 -1
  174. uncountable/types/recipe_tags.py +0 -1
  175. uncountable/types/recipe_tags_t.py +0 -1
  176. uncountable/types/recipe_workflow_steps.py +0 -1
  177. uncountable/types/recipe_workflow_steps_t.py +2 -3
  178. uncountable/types/recipes.py +0 -1
  179. uncountable/types/recipes_t.py +0 -1
  180. uncountable/types/response.py +0 -1
  181. uncountable/types/response_t.py +0 -1
  182. uncountable/types/secret_retrieval.py +0 -1
  183. uncountable/types/secret_retrieval_t.py +3 -4
  184. uncountable/types/units.py +0 -1
  185. uncountable/types/units_t.py +0 -1
  186. uncountable/types/users.py +0 -1
  187. uncountable/types/users_t.py +0 -1
  188. uncountable/types/webhook_job.py +0 -1
  189. uncountable/types/webhook_job_t.py +0 -1
  190. uncountable/types/workflows.py +0 -1
  191. uncountable/types/workflows_t.py +1 -2
  192. UncountablePythonSDK-0.0.91.dist-info/RECORD +0 -301
  193. {UncountablePythonSDK-0.0.91.dist-info → UncountablePythonSDK-0.0.93.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -53,7 +52,7 @@ class TransitionIdentifierTransition:
53
52
 
54
53
  # DO NOT MODIFY -- This file is generated by type_spec
55
54
  TransitionIdentifier = typing.Annotated[
56
- typing.Union[TransitionIdentifierPhases, TransitionIdentifierTransition],
55
+ TransitionIdentifierPhases | TransitionIdentifierTransition,
57
56
  serial_alias_annotation(
58
57
  named_type_path="sdk.api.entity.transition_entity_phase.TransitionIdentifier",
59
58
  ),
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -30,9 +29,9 @@ ENDPOINT_PATH = "api/external/field_options/upsert_field_options"
30
29
  @dataclasses.dataclass(kw_only=True)
31
30
  class FieldOption:
32
31
  option_id: str
33
- option_value: typing.Optional[str] = None
34
- archived: typing.Optional[bool] = None
35
- subsets: typing.Optional[list[str]] = None
32
+ option_value: str | None = None
33
+ archived: bool | None = None
34
+ subsets: list[str] | None = None
36
35
 
37
36
 
38
37
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -7,7 +6,7 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
9
+ from enum import StrEnum
11
10
  import dataclasses
12
11
  from pkgs.serialization import serial_class
13
12
  from pkgs.serialization import serial_union_annotation
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -32,8 +31,8 @@ ENDPOINT_PATH = "api/external/id_source/list_id_source"
32
31
  class Arguments:
33
32
  spec: id_source_t.IdSourceSpec
34
33
  search_label: str
35
- offset: typing.Optional[typing.Optional[int]] = None
36
- limit: typing.Optional[typing.Optional[int]] = None
34
+ offset: int | None = None
35
+ limit: int | None = None
37
36
 
38
37
 
39
38
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -42,7 +41,7 @@ class Arguments:
42
41
  )
43
42
  @dataclasses.dataclass(kw_only=True)
44
43
  class IdName:
45
- id: typing.Union[base_t.ObjectId, str]
44
+ id: base_t.ObjectId | str
46
45
  name: str
47
46
 
48
47
 
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -41,7 +40,7 @@ class Arguments:
41
40
  @dataclasses.dataclass(kw_only=True)
42
41
  class Match:
43
42
  name: str
44
- ids: list[typing.Union[base_t.ObjectId, str]]
43
+ ids: list[base_t.ObjectId | str]
45
44
 
46
45
 
47
46
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -43,10 +42,10 @@ class Arguments:
43
42
  class InputToCreate:
44
43
  name: str
45
44
  material_family_ids: list[base_t.ObjectId]
46
- quantity_type: typing.Union[typing.Literal[inputs_t.IngredientQuantityType.NUMERIC], typing.Literal[inputs_t.IngredientQuantityType.TEXT]]
47
- type: typing.Union[typing.Literal[inputs_t.IngredientType.INGREDIENT], typing.Literal[inputs_t.IngredientType.PROCESS_PARAMETER]]
48
- attributes: typing.Optional[list[input_attributes_t.InputAttributeValue]] = None
49
- category_id: typing.Optional[base_t.ObjectId] = None
45
+ quantity_type: typing.Literal[inputs_t.IngredientQuantityType.NUMERIC] | typing.Literal[inputs_t.IngredientQuantityType.TEXT]
46
+ type: typing.Literal[inputs_t.IngredientType.INGREDIENT] | typing.Literal[inputs_t.IngredientType.PROCESS_PARAMETER]
47
+ attributes: list[input_attributes_t.InputAttributeValue] | None = None
48
+ category_id: base_t.ObjectId | None = None
50
49
 
51
50
 
52
51
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -34,10 +33,10 @@ ENDPOINT_PATH = "api/external/inputs/external_get_input_data"
34
33
  @dataclasses.dataclass(kw_only=True)
35
34
  class Arguments:
36
35
  material_family_id: base_t.ObjectId
37
- input_ids: typing.Optional[list[base_t.ObjectId]]
38
- is_parameter: typing.Optional[bool]
39
- offset: typing.Optional[typing.Optional[int]] = None
40
- limit: typing.Optional[typing.Optional[int]] = None
36
+ input_ids: list[base_t.ObjectId] | None
37
+ is_parameter: bool | None
38
+ offset: int | None = None
39
+ limit: int | None = None
41
40
 
42
41
 
43
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -82,7 +81,7 @@ class FullInput:
82
81
  quantity_type: str
83
82
  is_parameter: bool
84
83
  attributes: list[input_attributes_t.InputAttributeValue]
85
- global_category_id: typing.Optional[base_t.ObjectId]
84
+ global_category_id: base_t.ObjectId | None
86
85
  subcategory_ids: list[base_t.ObjectId]
87
86
 
88
87
 
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -30,9 +29,9 @@ ENDPOINT_PATH = "api/external/inputs/external_get_input_names"
30
29
  @dataclasses.dataclass(kw_only=True)
31
30
  class Arguments:
32
31
  material_family_id: base_t.ObjectId
33
- is_parameter: typing.Optional[bool]
34
- offset: typing.Optional[typing.Optional[int]] = None
35
- limit: typing.Optional[typing.Optional[int]] = None
32
+ is_parameter: bool | None
33
+ offset: int | None = None
34
+ limit: int | None = None
36
35
 
37
36
 
38
37
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -43,8 +42,8 @@ class Arguments:
43
42
  class InputAttributeValue:
44
43
  input_id: base_t.ObjectId
45
44
  attribute_id: base_t.ObjectId
46
- quantity_dec: typing.Optional[Decimal] = None
47
- quantity_json: typing.Optional[base_t.JsonValue] = None
45
+ quantity_dec: Decimal | None = None
46
+ quantity_json: base_t.JsonValue | None = None
48
47
 
49
48
 
50
49
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -30,8 +29,8 @@ ENDPOINT_PATH = "api/external/inputs/external_set_input_category"
30
29
  @dataclasses.dataclass(kw_only=True)
31
30
  class Arguments:
32
31
  input_key: identifier_t.IdentifierKey
33
- category_id: typing.Optional[int]
34
- material_family_ids: typing.Optional[list[int]] = None
32
+ category_id: int | None
33
+ material_family_ids: list[int] | None = None
35
34
 
36
35
 
37
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -7,7 +6,7 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
9
+ from enum import StrEnum
11
10
  import dataclasses
12
11
  from pkgs.serialization import serial_class
13
12
  from ... import identifier_t
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -33,7 +32,7 @@ ENDPOINT_PATH = "api/external/material_families/external_update_entity_material_
33
32
  @dataclasses.dataclass(kw_only=True)
34
33
  class Arguments:
35
34
  entity_key: identifier_t.IdentifierKey
36
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.RECIPE_METADATA], typing.Literal[entity_t.EntityType.INGREDIENT], typing.Literal[entity_t.EntityType.OUTPUT], typing.Literal[entity_t.EntityType.CONDITION_PARAMETER], typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE]]
35
+ entity_type: typing.Literal[entity_t.EntityType.RECIPE_METADATA] | typing.Literal[entity_t.EntityType.INGREDIENT] | typing.Literal[entity_t.EntityType.OUTPUT] | typing.Literal[entity_t.EntityType.CONDITION_PARAMETER] | typing.Literal[entity_t.EntityType.INGREDIENT_ATTRIBUTE]
37
36
  material_family_ids: list[base_t.ObjectId]
38
37
  update_type: post_base_t.UpdateType
39
38
 
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -34,9 +33,9 @@ ENDPOINT_PATH = "api/external/outputs/external_get_output_data"
34
33
  @dataclasses.dataclass(kw_only=True)
35
34
  class Arguments:
36
35
  material_family_id: base_t.ObjectId
37
- output_ids: typing.Optional[list[base_t.ObjectId]] = None
38
- offset: typing.Optional[int] = None
39
- limit: typing.Optional[int] = None
36
+ output_ids: list[base_t.ObjectId] | None = None
37
+ offset: int | None = None
38
+ limit: int | None = None
40
39
 
41
40
 
42
41
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -49,7 +48,7 @@ class Arguments:
49
48
  class OutputAttrVal:
50
49
  attribute_id: base_t.ObjectId
51
50
  quantity_json: base_t.JsonValue
52
- quantity_dec: typing.Optional[Decimal] = None
51
+ quantity_dec: Decimal | None = None
53
52
 
54
53
 
55
54
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -83,8 +82,8 @@ class FullOutput:
83
82
  name: str
84
83
  quantity_type: str
85
84
  attributes: list[OutputAttrVal]
86
- global_category_id: typing.Optional[base_t.ObjectId]
87
- unit_id: typing.Optional[base_t.ObjectId]
85
+ global_category_id: base_t.ObjectId | None
86
+ unit_id: base_t.ObjectId | None
88
87
 
89
88
 
90
89
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -30,8 +29,8 @@ ENDPOINT_PATH = "api/external/outputs/external_get_output_names"
30
29
  @dataclasses.dataclass(kw_only=True)
31
30
  class Arguments:
32
31
  material_family_id: base_t.ObjectId
33
- offset: typing.Optional[int] = None
34
- limit: typing.Optional[int] = None
32
+ offset: int | None = None
33
+ limit: int | None = None
35
34
 
36
35
 
37
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -34,8 +33,8 @@ ENDPOINT_PATH = "api/external/outputs/external_resolve_output_conditions"
34
33
  @dataclasses.dataclass(kw_only=True)
35
34
  class ConditionParameterValueRecord:
36
35
  condition_parameter_id: base_t.ObjectId
37
- value_numeric: typing.Optional[Decimal] = None
38
- value_string: typing.Optional[str] = None
36
+ value_numeric: Decimal | None = None
37
+ value_string: str | None = None
39
38
 
40
39
 
41
40
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -75,7 +74,7 @@ class PermissionsScopeAllMaterialFamilies:
75
74
 
76
75
  # DO NOT MODIFY -- This file is generated by type_spec
77
76
  PermissionsScope = typing.Annotated[
78
- typing.Union[PermissionsScopeProject, PermissionsScopeRecipe, PermissionsScopeMaterialFamily, PermissionsScopeAllMaterialFamilies],
77
+ PermissionsScopeProject | PermissionsScopeRecipe | PermissionsScopeMaterialFamily | PermissionsScopeAllMaterialFamilies,
79
78
  serial_alias_annotation(
80
79
  named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScope",
81
80
  ),
@@ -91,8 +90,8 @@ class Arguments:
91
90
  scope: PermissionsScope
92
91
  permissions_types: list[permissions_t.CorePermissionType]
93
92
  update_type: post_base_t.UpdateType
94
- user_group_ids: typing.Optional[list[int]] = None
95
- user_ids: typing.Optional[list[int]] = None
93
+ user_group_ids: list[int] | None = None
94
+ user_ids: list[int] | None = None
96
95
 
97
96
 
98
97
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -31,7 +30,7 @@ ENDPOINT_PATH = "api/external/project/external_get_projects"
31
30
  @dataclasses.dataclass(kw_only=True)
32
31
  class Arguments:
33
32
  all_material_families: bool
34
- material_family_id: typing.Optional[base_t.ObjectId]
33
+ material_family_id: base_t.ObjectId | None
35
34
 
36
35
 
37
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -43,8 +42,8 @@ class Project:
43
42
  id: base_t.ObjectId
44
43
  name: str
45
44
  material_family_id: base_t.ObjectId
46
- project_owner_id: typing.Optional[base_t.ObjectId]
47
- phase_id: typing.Optional[base_t.ObjectId]
45
+ project_owner_id: base_t.ObjectId | None
46
+ phase_id: base_t.ObjectId | None
48
47
 
49
48
 
50
49
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -33,8 +32,8 @@ ENDPOINT_PATH = "api/external/project/external_get_projects_data"
33
32
  @dataclasses.dataclass(kw_only=True)
34
33
  class Arguments:
35
34
  project_ids: list[base_t.ObjectId]
36
- offset: typing.Optional[typing.Optional[int]] = None
37
- limit: typing.Optional[typing.Optional[int]] = None
35
+ offset: int | None = None
36
+ limit: int | None = None
38
37
 
39
38
 
40
39
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -46,8 +45,8 @@ class ProjectDetailed:
46
45
  id: base_t.ObjectId
47
46
  name: str
48
47
  material_family_id: base_t.ObjectId
49
- project_owner_id: typing.Optional[base_t.ObjectId]
50
- phase_id: typing.Optional[base_t.ObjectId]
48
+ project_owner_id: base_t.ObjectId | None
49
+ phase_id: base_t.ObjectId | None
51
50
  values: list[field_values_t.ArgumentValueId]
52
51
 
53
52
 
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -32,7 +31,7 @@ ENDPOINT_PATH = "api/external/recipe_links/create_recipe_link"
32
31
  class Arguments:
33
32
  recipe_from_key: identifier_t.IdentifierKey
34
33
  recipe_to_key: identifier_t.IdentifierKey
35
- link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
34
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]
36
35
  name: str
37
36
 
38
37
 
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -32,7 +31,7 @@ ENDPOINT_PATH = "api/external/recipe_links/remove_recipe_link"
32
31
  class Arguments:
33
32
  recipe_from_key: identifier_t.IdentifierKey
34
33
  recipe_to_key: identifier_t.IdentifierKey
35
- link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
34
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]
36
35
 
37
36
 
38
37
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -30,9 +29,9 @@ ENDPOINT_PATH = "api/external/recipe_metadata/external_get_recipe_metadata_data"
30
29
  @dataclasses.dataclass(kw_only=True)
31
30
  class Arguments:
32
31
  material_family_id: base_t.ObjectId
33
- recipe_metadata_ids: typing.Optional[list[base_t.ObjectId]]
34
- offset: typing.Optional[typing.Optional[int]] = None
35
- limit: typing.Optional[typing.Optional[int]] = None
32
+ recipe_metadata_ids: list[base_t.ObjectId] | None
33
+ offset: int | None = None
34
+ limit: int | None = None
36
35
 
37
36
 
38
37
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -29,7 +28,7 @@ ENDPOINT_PATH = "api/external/recipes/archive"
29
28
  @dataclasses.dataclass(kw_only=True)
30
29
  class Arguments:
31
30
  recipes: list[identifier_t.IdentifierKey]
32
- reason: typing.Optional[str] = None
31
+ reason: str | None = None
33
32
 
34
33
 
35
34
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -30,8 +29,8 @@ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_input"
30
29
  @dataclasses.dataclass(kw_only=True)
31
30
  class Arguments:
32
31
  recipe_key: identifier_t.IdentifierKey
33
- input_key: typing.Optional[identifier_t.IdentifierKey] = None
34
- show_in_listings: typing.Optional[bool] = None
32
+ input_key: identifier_t.IdentifierKey | None = None
33
+ show_in_listings: bool | None = None
35
34
 
36
35
 
37
36
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -33,12 +32,12 @@ ENDPOINT_PATH = "api/external/recipes/create_recipe"
33
32
  class Arguments:
34
33
  material_family_id: base_t.ObjectId
35
34
  workflow_id: base_t.ObjectId
36
- name: typing.Optional[str] = None
37
- project_id: typing.Optional[base_t.ObjectId] = None
38
- workflow_variant_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
39
- recipe_metadata: typing.Optional[list[recipe_metadata_t.MetadataValue]] = None
40
- identifiers: typing.Optional[recipe_identifiers_t.RecipeIdentifiers] = None
41
- definition_key: typing.Optional[identifier_t.IdentifierKey] = None
35
+ name: str | None = None
36
+ project_id: base_t.ObjectId | None = None
37
+ workflow_variant_id: base_t.ObjectId | None = None
38
+ recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None
39
+ identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None
40
+ definition_key: identifier_t.IdentifierKey | None = None
42
41
 
43
42
 
44
43
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -32,9 +31,9 @@ ENDPOINT_PATH = "api/external/recipes/external_create_recipes"
32
31
  @dataclasses.dataclass(kw_only=True)
33
32
  class CreateRecipeDefinition:
34
33
  workflow_id: base_t.ObjectId
35
- name: typing.Optional[str] = None
36
- workflow_variant_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
37
- recipe_metadata: typing.Optional[list[recipe_metadata_t.MetadataValue]] = None
34
+ name: str | None = None
35
+ workflow_variant_id: base_t.ObjectId | None = None
36
+ recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None
38
37
 
39
38
 
40
39
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -45,7 +44,7 @@ class CreateRecipeDefinition:
45
44
  class Arguments:
46
45
  material_family_id: base_t.ObjectId
47
46
  recipe_definitions: list[CreateRecipeDefinition]
48
- project_id: typing.Optional[base_t.ObjectId] = None
47
+ project_id: base_t.ObjectId | None = None
49
48
 
50
49
 
51
50
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -7,7 +6,7 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
9
+ from enum import StrEnum
11
10
  import dataclasses
12
11
  from pkgs.serialization import serial_class
13
12
  from pkgs.serialization import serial_union_annotation
@@ -88,10 +87,10 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
88
87
  ingredient_key: identifier_t.IdentifierKey
89
88
  quantity_basis: recipe_inputs_t.QuantityBasis = recipe_inputs_t.QuantityBasis.MASS
90
89
  input_value_type: recipe_inputs_t.InputValueType = recipe_inputs_t.InputValueType.VALUE
91
- value_numeric: typing.Optional[Decimal] = None
92
- value_str: typing.Optional[str] = None
93
- behavior: typing.Optional[inputs_t.IngredientBehavior] = None
94
- calculation_key: typing.Optional[identifier_t.IdentifierKey] = None
90
+ value_numeric: Decimal | None = None
91
+ value_str: str | None = None
92
+ behavior: inputs_t.IngredientBehavior | None = None
93
+ calculation_key: identifier_t.IdentifierKey | None = None
95
94
 
96
95
 
97
96
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -156,8 +155,8 @@ class RecipeInputEditAddInstructions(RecipeInputEditBase):
156
155
  @dataclasses.dataclass(kw_only=True)
157
156
  class AnnotationEdit:
158
157
  annotation_type_key: identifier_t.IdentifierKey
159
- lower_value: typing.Optional[Decimal] = None
160
- upper_value: typing.Optional[Decimal] = None
158
+ lower_value: Decimal | None = None
159
+ upper_value: Decimal | None = None
161
160
 
162
161
 
163
162
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -181,7 +180,7 @@ class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
181
180
  class RecipeInputEditSetRole(RecipeInputEditBase):
182
181
  type: typing.Literal[RecipeInputEditType.SET_ROLE] = RecipeInputEditType.SET_ROLE
183
182
  ingredient_key: identifier_t.IdentifierKey
184
- ingredient_role_key: typing.Optional[identifier_t.IdentifierKey]
183
+ ingredient_role_key: identifier_t.IdentifierKey | None
185
184
 
186
185
 
187
186
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -243,7 +242,7 @@ class RecipeInputEditPlaceholder(RecipeInputEditBase):
243
242
 
244
243
  # DO NOT MODIFY -- This file is generated by type_spec
245
244
  RecipeInputEdit = typing.Annotated[
246
- typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations, RecipeInputEditSetLot, RecipeInputEditChangeBasisViewed, RecipeInputEditAddInstructions, RecipeInputEditSetRole, RecipeInputEditPlaceholder],
245
+ RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder,
247
246
  serial_union_annotation(
248
247
  named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEdit",
249
248
  discriminator="type",