UncountablePythonSDK 0.0.92__py3-none-any.whl → 0.0.95__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 (178) hide show
  1. {UncountablePythonSDK-0.0.92.dist-info → UncountablePythonSDK-0.0.95.dist-info}/METADATA +2 -1
  2. UncountablePythonSDK-0.0.95.dist-info/RECORD +302 -0
  3. pkgs/argument_parser/argument_parser.py +7 -7
  4. pkgs/filesystem_utils/_s3_session.py +2 -1
  5. pkgs/serialization/annotation.py +3 -3
  6. pkgs/serialization/missing_sentry.py +1 -1
  7. pkgs/serialization/serial_alias.py +2 -2
  8. pkgs/serialization/serial_class.py +1 -1
  9. pkgs/serialization/serial_generic.py +1 -1
  10. pkgs/serialization/serial_union.py +3 -3
  11. pkgs/serialization_util/_env_flags.py +3 -0
  12. pkgs/serialization_util/serialization_helpers.py +5 -5
  13. pkgs/type_spec/actions_registry/__main__.py +0 -4
  14. pkgs/type_spec/builder.py +25 -21
  15. pkgs/type_spec/config.py +2 -5
  16. pkgs/type_spec/emit_open_api.py +1 -1
  17. pkgs/type_spec/emit_python.py +44 -28
  18. pkgs/type_spec/emit_typescript.py +13 -6
  19. pkgs/type_spec/parts/base.py.prepart +2 -0
  20. pkgs/type_spec/util.py +3 -5
  21. pkgs/type_spec/value_spec/__main__.py +15 -5
  22. pkgs/type_spec/value_spec/emit_python.py +5 -2
  23. pkgs/type_spec/value_spec/types.py +1 -1
  24. uncountable/core/client.py +14 -6
  25. uncountable/core/file_upload.py +5 -0
  26. uncountable/integration/job.py +2 -2
  27. uncountable/integration/queue_runner/command_server/types.py +1 -1
  28. uncountable/integration/server.py +4 -4
  29. uncountable/types/__init__.py +0 -1
  30. uncountable/types/api/batch/execute_batch.py +1 -2
  31. uncountable/types/api/batch/execute_batch_load_async.py +0 -1
  32. uncountable/types/api/chemical/convert_chemical_formats.py +0 -1
  33. uncountable/types/api/entity/create_entities.py +1 -2
  34. uncountable/types/api/entity/create_entity.py +2 -3
  35. uncountable/types/api/entity/get_entities_data.py +0 -1
  36. uncountable/types/api/entity/grant_entity_permissions.py +0 -1
  37. uncountable/types/api/entity/list_entities.py +3 -4
  38. uncountable/types/api/entity/lock_entity.py +0 -1
  39. uncountable/types/api/entity/resolve_entity_ids.py +2 -3
  40. uncountable/types/api/entity/set_entity_field_values.py +0 -1
  41. uncountable/types/api/entity/set_values.py +0 -1
  42. uncountable/types/api/entity/transition_entity_phase.py +1 -2
  43. uncountable/types/api/entity/unlock_entity.py +0 -1
  44. uncountable/types/api/equipment/associate_equipment_input.py +0 -1
  45. uncountable/types/api/field_options/upsert_field_options.py +0 -1
  46. uncountable/types/api/files/download_file.py +1 -2
  47. uncountable/types/api/id_source/list_id_source.py +3 -4
  48. uncountable/types/api/id_source/match_id_source.py +1 -2
  49. uncountable/types/api/input_groups/get_input_group_names.py +0 -1
  50. uncountable/types/api/inputs/create_inputs.py +2 -3
  51. uncountable/types/api/inputs/get_input_data.py +5 -6
  52. uncountable/types/api/inputs/get_input_names.py +3 -4
  53. uncountable/types/api/inputs/get_inputs_data.py +0 -1
  54. uncountable/types/api/inputs/set_input_attribute_values.py +0 -1
  55. uncountable/types/api/inputs/set_input_category.py +1 -2
  56. uncountable/types/api/inputs/set_input_subcategories.py +0 -1
  57. uncountable/types/api/inputs/set_intermediate_type.py +1 -2
  58. uncountable/types/api/material_families/update_entity_material_families.py +1 -2
  59. uncountable/types/api/outputs/get_output_data.py +2 -3
  60. uncountable/types/api/outputs/get_output_names.py +0 -1
  61. uncountable/types/api/outputs/resolve_output_conditions.py +0 -1
  62. uncountable/types/api/permissions/set_core_permissions.py +1 -2
  63. uncountable/types/api/project/get_projects.py +3 -4
  64. uncountable/types/api/project/get_projects_data.py +4 -5
  65. uncountable/types/api/recipe_links/create_recipe_link.py +1 -2
  66. uncountable/types/api/recipe_links/remove_recipe_link.py +1 -2
  67. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -4
  68. uncountable/types/api/recipes/add_recipe_to_project.py +0 -1
  69. uncountable/types/api/recipes/archive_recipes.py +0 -1
  70. uncountable/types/api/recipes/associate_recipe_as_input.py +0 -1
  71. uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -1
  72. uncountable/types/api/recipes/clear_recipe_outputs.py +0 -1
  73. uncountable/types/api/recipes/create_recipe.py +1 -2
  74. uncountable/types/api/recipes/create_recipes.py +1 -2
  75. uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -1
  76. uncountable/types/api/recipes/edit_recipe_inputs.py +3 -4
  77. uncountable/types/api/recipes/get_column_calculation_values.py +0 -1
  78. uncountable/types/api/recipes/get_curve.py +0 -1
  79. uncountable/types/api/recipes/get_recipe_calculations.py +0 -1
  80. uncountable/types/api/recipes/get_recipe_links.py +1 -2
  81. uncountable/types/api/recipes/get_recipe_names.py +0 -1
  82. uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -1
  83. uncountable/types/api/recipes/get_recipes_data.py +13 -14
  84. uncountable/types/api/recipes/lock_recipes.py +1 -2
  85. uncountable/types/api/recipes/remove_recipe_from_project.py +0 -1
  86. uncountable/types/api/recipes/set_recipe_inputs.py +1 -2
  87. uncountable/types/api/recipes/set_recipe_metadata.py +0 -1
  88. uncountable/types/api/recipes/set_recipe_output_annotations.py +2 -3
  89. uncountable/types/api/recipes/set_recipe_output_file.py +0 -1
  90. uncountable/types/api/recipes/set_recipe_outputs.py +3 -4
  91. uncountable/types/api/recipes/set_recipe_tags.py +2 -3
  92. uncountable/types/api/recipes/unarchive_recipes.py +0 -1
  93. uncountable/types/api/recipes/unlock_recipes.py +1 -2
  94. uncountable/types/api/triggers/run_trigger.py +0 -1
  95. uncountable/types/api/uploader/invoke_uploader.py +0 -1
  96. uncountable/types/async_batch.py +0 -1
  97. uncountable/types/async_batch_processor.py +1 -2
  98. uncountable/types/async_batch_t.py +1 -2
  99. uncountable/types/async_jobs.py +0 -1
  100. uncountable/types/async_jobs_t.py +1 -2
  101. uncountable/types/auth_retrieval.py +0 -1
  102. uncountable/types/auth_retrieval_t.py +2 -3
  103. uncountable/types/base.py +0 -1
  104. uncountable/types/base_t.py +2 -1
  105. uncountable/types/calculations.py +0 -1
  106. uncountable/types/calculations_t.py +0 -1
  107. uncountable/types/chemical_structure.py +0 -1
  108. uncountable/types/chemical_structure_t.py +0 -1
  109. uncountable/types/client_base.py +29 -30
  110. uncountable/types/client_config.py +0 -1
  111. uncountable/types/client_config_t.py +1 -2
  112. uncountable/types/curves.py +0 -1
  113. uncountable/types/curves_t.py +2 -3
  114. uncountable/types/entity.py +0 -1
  115. uncountable/types/entity_t.py +3 -4
  116. uncountable/types/experiment_groups.py +0 -1
  117. uncountable/types/experiment_groups_t.py +0 -1
  118. uncountable/types/field_values.py +0 -1
  119. uncountable/types/field_values_t.py +6 -7
  120. uncountable/types/fields.py +0 -1
  121. uncountable/types/fields_t.py +0 -1
  122. uncountable/types/generic_upload.py +0 -1
  123. uncountable/types/generic_upload_t.py +2 -3
  124. uncountable/types/id_source.py +0 -1
  125. uncountable/types/id_source_t.py +1 -2
  126. uncountable/types/identifier.py +0 -1
  127. uncountable/types/identifier_t.py +1 -2
  128. uncountable/types/input_attributes.py +0 -1
  129. uncountable/types/input_attributes_t.py +0 -1
  130. uncountable/types/inputs.py +0 -1
  131. uncountable/types/inputs_t.py +2 -3
  132. uncountable/types/integration_server.py +0 -1
  133. uncountable/types/integration_server_t.py +1 -2
  134. uncountable/types/job_definition.py +0 -1
  135. uncountable/types/job_definition_t.py +5 -6
  136. uncountable/types/outputs.py +0 -1
  137. uncountable/types/outputs_t.py +1 -2
  138. uncountable/types/overrides.py +0 -1
  139. uncountable/types/overrides_t.py +0 -1
  140. uncountable/types/permissions.py +0 -1
  141. uncountable/types/permissions_t.py +1 -2
  142. uncountable/types/phases.py +0 -1
  143. uncountable/types/phases_t.py +0 -1
  144. uncountable/types/post_base.py +0 -1
  145. uncountable/types/post_base_t.py +1 -2
  146. uncountable/types/queued_job.py +0 -1
  147. uncountable/types/queued_job_t.py +2 -3
  148. uncountable/types/recipe_identifiers.py +0 -1
  149. uncountable/types/recipe_identifiers_t.py +1 -2
  150. uncountable/types/recipe_inputs.py +0 -1
  151. uncountable/types/recipe_inputs_t.py +1 -2
  152. uncountable/types/recipe_links.py +0 -1
  153. uncountable/types/recipe_links_t.py +2 -3
  154. uncountable/types/recipe_metadata.py +0 -1
  155. uncountable/types/recipe_metadata_t.py +0 -1
  156. uncountable/types/recipe_output_metadata.py +0 -1
  157. uncountable/types/recipe_output_metadata_t.py +0 -1
  158. uncountable/types/recipe_tags.py +0 -1
  159. uncountable/types/recipe_tags_t.py +0 -1
  160. uncountable/types/recipe_workflow_steps.py +0 -1
  161. uncountable/types/recipe_workflow_steps_t.py +2 -3
  162. uncountable/types/recipes.py +0 -1
  163. uncountable/types/recipes_t.py +0 -1
  164. uncountable/types/response.py +0 -1
  165. uncountable/types/response_t.py +0 -1
  166. uncountable/types/secret_retrieval.py +0 -1
  167. uncountable/types/secret_retrieval_t.py +2 -3
  168. uncountable/types/units.py +0 -1
  169. uncountable/types/units_t.py +0 -1
  170. uncountable/types/users.py +0 -1
  171. uncountable/types/users_t.py +0 -1
  172. uncountable/types/webhook_job.py +0 -1
  173. uncountable/types/webhook_job_t.py +0 -1
  174. uncountable/types/workflows.py +0 -1
  175. uncountable/types/workflows_t.py +1 -2
  176. UncountablePythonSDK-0.0.92.dist-info/RECORD +0 -301
  177. {UncountablePythonSDK-0.0.92.dist-info → UncountablePythonSDK-0.0.95.dist-info}/WHEEL +0 -0
  178. {UncountablePythonSDK-0.0.92.dist-info → UncountablePythonSDK-0.0.95.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
@@ -43,10 +42,10 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
43
42
  )
44
43
  @dataclasses.dataclass(kw_only=True)
45
44
  class Arguments:
46
- recipe_ids: typing.Optional[list[base_t.ObjectId]] | None = None
47
- project_id: typing.Optional[base_t.ObjectId] | None = None
48
- offset: typing.Optional[int] | None = None
49
- limit: typing.Optional[int] | None = None
45
+ recipe_ids: list[base_t.ObjectId] | None = None
46
+ project_id: base_t.ObjectId | None = None
47
+ offset: int | None = None
48
+ limit: int | None = None
50
49
 
51
50
 
52
51
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -61,8 +60,8 @@ class RecipeOutput:
61
60
  output_id: base_t.ObjectId
62
61
  replicate_num: int
63
62
  quantity_json: base_t.JsonValue
64
- curve_id: typing.Optional[base_t.ObjectId]
65
- output_condition_id: typing.Optional[base_t.ObjectId]
63
+ curve_id: base_t.ObjectId | None
64
+ output_condition_id: base_t.ObjectId | None
66
65
  quantity_dec: Decimal | None = None
67
66
 
68
67
 
@@ -100,13 +99,13 @@ class SimpleOutputCondition:
100
99
  class RecipeInput:
101
100
  id: base_t.ObjectId
102
101
  input_id: base_t.ObjectId
103
- input_lot_recipe_id: typing.Optional[base_t.ObjectId]
102
+ input_lot_recipe_id: base_t.ObjectId | None
104
103
  recipe_step_id: base_t.ObjectId
105
104
  quantity_json: base_t.JsonValue
106
- curve_id: typing.Optional[base_t.ObjectId]
105
+ curve_id: base_t.ObjectId | None
107
106
  actual_quantity_json: base_t.JsonValue
108
107
  behavior: str
109
- ingredient_role_id: typing.Optional[base_t.ObjectId]
108
+ ingredient_role_id: base_t.ObjectId | None
110
109
  quantity_dec: Decimal | None = None
111
110
  actual_quantity_dec: Decimal | None = None
112
111
 
@@ -117,7 +116,7 @@ class RecipeInput:
117
116
  )
118
117
  @dataclasses.dataclass(kw_only=True)
119
118
  class RecipeStep:
120
- name: typing.Optional[str]
119
+ name: str | None
121
120
  recipe_step_id: base_t.ObjectId
122
121
  recipe_step_number: int
123
122
  instructions: str | None = None
@@ -129,7 +128,7 @@ class RecipeStep:
129
128
  )
130
129
  @dataclasses.dataclass(kw_only=True)
131
130
  class RecipeStepGroup:
132
- name: typing.Optional[str]
131
+ name: str | None
133
132
  recipe_steps: list[RecipeStep]
134
133
 
135
134
 
@@ -152,7 +151,7 @@ class RecipeWorkflowStep:
152
151
  @dataclasses.dataclass(kw_only=True)
153
152
  class RecipeStepRelationship:
154
153
  step_relationship_id: base_t.ObjectId
155
- name: typing.Optional[str]
154
+ name: str | None
156
155
  source_recipe_workflow_step_id: base_t.ObjectId
157
156
  target_recipe_step_id: base_t.ObjectId
158
157
  quantity_dec: Decimal | None = None
@@ -169,7 +168,7 @@ class Recipe:
169
168
  create_datetime: str
170
169
  last_modified_datetime: str
171
170
  name: str
172
- notes: typing.Optional[str]
171
+ notes: str | None
173
172
  workflow_id: base_t.ObjectId
174
173
  metadata: list[recipe_metadata_t.RecipeMetadata]
175
174
  inputs: list[RecipeInput]
@@ -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
@@ -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/recipes/external_set_recipe_inputs"
32
31
  class RecipeInputValue:
33
32
  recipe_id: base_t.ObjectId
34
33
  input_id: base_t.ObjectId
35
- recipe_step_id: typing.Optional[base_t.ObjectId] | None = None
34
+ recipe_step_id: base_t.ObjectId | None = None
36
35
  value_numeric: Decimal | None = None
37
36
  value_str: str | None = None
38
37
  set_actual_value: bool | None = None
@@ -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
@@ -84,7 +83,7 @@ class RecipeOutputReplaceAnnotations(RecipeOutputEditBase):
84
83
 
85
84
  # DO NOT MODIFY -- This file is generated by type_spec
86
85
  RecipeOutputUpdateAnnotations = typing.Annotated[
87
- typing.Union[RecipeOutputMergeAnnotations, RecipeOutputReplaceAnnotations],
86
+ RecipeOutputMergeAnnotations | RecipeOutputReplaceAnnotations,
88
87
  serial_union_annotation(
89
88
  named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputUpdateAnnotations",
90
89
  discriminator="type",
@@ -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,8 +32,8 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_outputs"
33
32
  )
34
33
  @dataclasses.dataclass(kw_only=True)
35
34
  class CurveValues:
36
- x_values: list[typing.Optional[Decimal]]
37
- y_values: list[typing.Optional[Decimal]]
35
+ x_values: list[Decimal | None]
36
+ y_values: list[Decimal | None]
38
37
 
39
38
 
40
39
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -52,7 +51,7 @@ class RecipeOutputValue:
52
51
  value_str: str | None = None
53
52
  value_curve: CurveValues | None = None
54
53
  formatting: recipes_t.RecipeAttributeFormatting | None = None
55
- field_values: list[typing.Union[field_values_t.ArgumentValueRefName, field_values_t.ArgumentValueId]] | None = None
54
+ field_values: list[field_values_t.ArgumentValueRefName | field_values_t.ArgumentValueId] | None = None
56
55
 
57
56
 
58
57
  # 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_alias_annotation
@@ -82,7 +81,7 @@ class RecipeTagOverride(RecipeTagUpdateBase):
82
81
 
83
82
  # DO NOT MODIFY -- This file is generated by type_spec
84
83
  RecipeTagUpdate = typing.Annotated[
85
- typing.Union[RecipeTagAppend, RecipeTagRemove, RecipeTagOverride],
84
+ RecipeTagAppend | RecipeTagRemove | RecipeTagOverride,
86
85
  serial_alias_annotation(
87
86
  named_type_path="sdk.api.recipes.set_recipe_tags.RecipeTagUpdate",
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
@@ -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
@@ -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,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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
@@ -152,7 +151,7 @@ class AsyncBatchProcessorBase(ABC):
152
151
  workflow_id: base_t.ObjectId,
153
152
  name: str | None = None,
154
153
  project_id: base_t.ObjectId | None = None,
155
- workflow_variant_id: typing.Optional[base_t.ObjectId] | None = None,
154
+ workflow_variant_id: base_t.ObjectId | None = None,
156
155
  recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
157
156
  identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
158
157
  definition_key: identifier_t.IdentifierKey | None = None,
@@ -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 base_t
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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
  from pkgs.serialization import serial_string_enum
12
11
 
13
12
  __all__: list[str] = [
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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
@@ -62,7 +61,7 @@ class AuthRetrievalBasic(AuthRetrievalBase):
62
61
 
63
62
  # DO NOT MODIFY -- This file is generated by type_spec
64
63
  AuthRetrieval = typing.Annotated[
65
- typing.Union[AuthRetrievalOAuth, AuthRetrievalBasic],
64
+ AuthRetrievalOAuth | AuthRetrievalBasic,
66
65
  serial_union_annotation(
67
66
  named_type_path="sdk.auth_retrieval.AuthRetrieval",
68
67
  discriminator="type",
uncountable/types/base.py CHANGED
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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
@@ -39,6 +38,8 @@ PureJsonScalar = Union[str, float, bool, None]
39
38
  # Regular expressions for identifying ref names and IDs. Ref names should be
40
39
  # using this regular expression as a constriant in the database.
41
40
  REF_NAME_REGEX = r"^[a-zA-Z0-9_/-]+$"
41
+ REF_NAME_STRICT_REGEX_STRING = "^[a-zA-Z_][a-zA-Z0-9_]*$"
42
+ REF_NAME_STRICT_REGEX = rf"{REF_NAME_STRICT_REGEX_STRING}"
42
43
  # Ids matching a strict integer number are converted to integers
43
44
  ID_REGEX = r"-?[1-9][0-9]{0,20}"
44
45
 
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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
@@ -290,7 +289,7 @@ class ClientMethods(ABC):
290
289
  entity_type: entity_t.LimitedEntityType,
291
290
  definition_id: base_t.ObjectId | None = None,
292
291
  definition_key: identifier_t.IdentifierKey | None = None,
293
- field_values: typing.Optional[list[field_values_t.FieldRefNameValue]] | None = None,
292
+ field_values: list[field_values_t.FieldRefNameValue] | None = None,
294
293
  ) -> create_entity_t.Data:
295
294
  """Creates a new Uncountable entity
296
295
 
@@ -337,7 +336,7 @@ class ClientMethods(ABC):
337
336
  workflow_id: base_t.ObjectId,
338
337
  name: str | None = None,
339
338
  project_id: base_t.ObjectId | None = None,
340
- workflow_variant_id: typing.Optional[base_t.ObjectId] | None = None,
339
+ workflow_variant_id: base_t.ObjectId | None = None,
341
340
  recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
342
341
  identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
343
342
  definition_key: identifier_t.IdentifierKey | None = None,
@@ -375,7 +374,7 @@ class ClientMethods(ABC):
375
374
  *,
376
375
  recipe_from_key: identifier_t.IdentifierKey,
377
376
  recipe_to_key: identifier_t.IdentifierKey,
378
- 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]],
377
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK],
379
378
  name: str,
380
379
  ) -> create_recipe_link_t.Data:
381
380
  """Create a link between two recipes. Skip if the link already exists
@@ -570,10 +569,10 @@ class ClientMethods(ABC):
570
569
  self,
571
570
  *,
572
571
  material_family_id: base_t.ObjectId,
573
- input_ids: typing.Optional[list[base_t.ObjectId]],
574
- is_parameter: typing.Optional[bool],
575
- offset: typing.Optional[int] | None = None,
576
- limit: typing.Optional[int] | None = None,
572
+ input_ids: list[base_t.ObjectId] | None,
573
+ is_parameter: bool | None,
574
+ offset: int | None = None,
575
+ limit: int | None = None,
577
576
  ) -> get_input_data_t.Data:
578
577
  """Gets the attribute, categorization and other metadata associated with a set of inputs. An input is either an ingredient or process parameter, with metadata and calculations assigned separately
579
578
 
@@ -620,9 +619,9 @@ class ClientMethods(ABC):
620
619
  self,
621
620
  *,
622
621
  material_family_id: base_t.ObjectId,
623
- is_parameter: typing.Optional[bool],
624
- offset: typing.Optional[int] | None = None,
625
- limit: typing.Optional[int] | None = None,
622
+ is_parameter: bool | None,
623
+ offset: int | None = None,
624
+ limit: int | None = None,
626
625
  ) -> get_input_names_t.Data:
627
626
  """Gets the name of all inputs for a material family. An input is either an ingredient or process parameter, with metadata and calculations assigned separately
628
627
 
@@ -720,7 +719,7 @@ class ClientMethods(ABC):
720
719
  self,
721
720
  *,
722
721
  all_material_families: bool,
723
- material_family_id: typing.Optional[base_t.ObjectId],
722
+ material_family_id: base_t.ObjectId | None,
724
723
  ) -> get_projects_t.Data:
725
724
  """Gets either all projects created in the platform, or the projects associated with a material family ID. Projects are where experiments are placed in Uncountable, similar to folders in a directory structure
726
725
 
@@ -742,8 +741,8 @@ class ClientMethods(ABC):
742
741
  self,
743
742
  *,
744
743
  project_ids: list[base_t.ObjectId],
745
- offset: typing.Optional[int] | None = None,
746
- limit: typing.Optional[int] | None = None,
744
+ offset: int | None = None,
745
+ limit: int | None = None,
747
746
  ) -> get_projects_data_t.Data:
748
747
  """Gets either all data associated with a set of projects created in the platform. Because Uncountables recipe structure is complex, various data values are exploded out to increase efficiency in parsing, and this page is paginated to prevent too large of return values
749
748
 
@@ -790,7 +789,7 @@ class ClientMethods(ABC):
790
789
  *,
791
790
  recipe_ids: list[base_t.ObjectId],
792
791
  depth: int = 1,
793
- link_types: typing.Optional[list[recipe_links_t.RecipeLinkType]],
792
+ link_types: list[recipe_links_t.RecipeLinkType] | None,
794
793
  ) -> get_recipe_links_t.Data:
795
794
  """Gets the links for the passed recipes
796
795
 
@@ -814,9 +813,9 @@ class ClientMethods(ABC):
814
813
  self,
815
814
  *,
816
815
  material_family_id: base_t.ObjectId,
817
- recipe_metadata_ids: typing.Optional[list[base_t.ObjectId]],
818
- offset: typing.Optional[int] | None = None,
819
- limit: typing.Optional[int] | None = None,
816
+ recipe_metadata_ids: list[base_t.ObjectId] | None,
817
+ offset: int | None = None,
818
+ limit: int | None = None,
820
819
  ) -> get_recipe_metadata_data_t.Data:
821
820
  """Gets the recipe metadata. Recipe metadata is data associated with experiments that is not an input, output or calculation, such as a sample ID.
822
821
 
@@ -879,10 +878,10 @@ class ClientMethods(ABC):
879
878
  def get_recipes_data(
880
879
  self,
881
880
  *,
882
- recipe_ids: typing.Optional[list[base_t.ObjectId]] | None = None,
883
- project_id: typing.Optional[base_t.ObjectId] | None = None,
884
- offset: typing.Optional[int] | None = None,
885
- limit: typing.Optional[int] | None = None,
881
+ recipe_ids: list[base_t.ObjectId] | None = None,
882
+ project_id: base_t.ObjectId | None = None,
883
+ offset: int | None = None,
884
+ limit: int | None = None,
886
885
  ) -> get_recipes_data_t.Data:
887
886
  """Gets all data associated with a set of recipes. Because Uncountables recipe structure is complex, various data values are exploded out to increase efficiency in parsing, and this page is paginated to prevent too large of return values
888
887
 
@@ -963,8 +962,8 @@ class ClientMethods(ABC):
963
962
  config_reference: str,
964
963
  entity_type: entity_t.EntityType | None = None,
965
964
  attributes: dict[OpaqueKey, base_t.JsonValue] | None = None,
966
- offset: typing.Optional[int] | None = None,
967
- limit: typing.Optional[int] | None = None,
965
+ offset: int | None = None,
966
+ limit: int | None = None,
968
967
  ) -> list_entities_t.Data:
969
968
  """Uses a structured loading configuration to list entities in the system
970
969
 
@@ -993,8 +992,8 @@ class ClientMethods(ABC):
993
992
  *,
994
993
  spec: id_source_t.IdSourceSpec,
995
994
  search_label: str,
996
- offset: typing.Optional[int] | None = None,
997
- limit: typing.Optional[int] | None = None,
995
+ offset: int | None = None,
996
+ limit: int | None = None,
998
997
  ) -> list_id_source_t.Data:
999
998
  """Lists id and label pairs
1000
999
 
@@ -1123,7 +1122,7 @@ class ClientMethods(ABC):
1123
1122
  *,
1124
1123
  recipe_from_key: identifier_t.IdentifierKey,
1125
1124
  recipe_to_key: identifier_t.IdentifierKey,
1126
- 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]],
1125
+ link_type: typing.Literal[recipe_links_t.RecipeLinkType.CHILD] | typing.Literal[recipe_links_t.RecipeLinkType.CONTROL] | typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK],
1127
1126
  ) -> remove_recipe_link_t.Data:
1128
1127
  """Remove a link between two recipes. Skip if the link doesn't already exist
1129
1128
 
@@ -1146,7 +1145,7 @@ class ClientMethods(ABC):
1146
1145
  def resolve_entity_ids(
1147
1146
  self,
1148
1147
  *,
1149
- entity_ids: list[typing.Union[str, base_t.ObjectId]],
1148
+ entity_ids: list[str | base_t.ObjectId],
1150
1149
  entity_type: entity_t.EntityType,
1151
1150
  ) -> resolve_entity_ids_t.Data:
1152
1151
  """Gets the names for passed in ids
@@ -1278,7 +1277,7 @@ class ClientMethods(ABC):
1278
1277
  self,
1279
1278
  *,
1280
1279
  input_key: identifier_t.IdentifierKey,
1281
- category_id: typing.Optional[int],
1280
+ category_id: int | None,
1282
1281
  material_family_ids: list[int] | None = None,
1283
1282
  ) -> set_input_category_t.Data:
1284
1283
  """Sets subcategories for an input
@@ -1575,7 +1574,7 @@ class ClientMethods(ABC):
1575
1574
  self,
1576
1575
  *,
1577
1576
  entity_key: identifier_t.IdentifierKey,
1578
- 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]],
1577
+ 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],
1579
1578
  material_family_ids: list[base_t.ObjectId],
1580
1579
  update_type: post_base_t.UpdateType,
1581
1580
  ) -> update_entity_material_families_t.Data:
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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
@@ -22,5 +21,5 @@ __all__: list[str] = [
22
21
  @dataclasses.dataclass(kw_only=True)
23
22
  class ClientConfigOptions:
24
23
  allow_insecure_tls: bool = False
25
- extra_headers: typing.Optional[dict[str, str]] | None = None
24
+ extra_headers: dict[str, str] | None = None
26
25
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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 base_t
@@ -32,7 +31,7 @@ class CurveAxisType(StrEnum):
32
31
  @dataclasses.dataclass(kw_only=True)
33
32
  class Curve:
34
33
  id: base_t.ObjectId
35
- x_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC], typing.Literal[CurveAxisType.TIMESTAMP]]
34
+ x_type: typing.Literal[CurveAxisType.NUMERIC] | typing.Literal[CurveAxisType.TIMESTAMP]
36
35
  x_values: list[CurveValue]
37
36
  y_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC]]
38
37
  y_values: list[CurveValue]
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # 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_alias_annotation
@@ -347,7 +346,7 @@ class EntityType(StrEnum):
347
346
 
348
347
  # DO NOT MODIFY -- This file is generated by type_spec
349
348
  LimitedEntityType = typing.Annotated[
350
- typing.Union[typing.Literal[EntityType.LAB_REQUEST], typing.Literal[EntityType.APPROVAL], typing.Literal[EntityType.CUSTOM_ENTITY], typing.Literal[EntityType.INVENTORY_AMOUNT], typing.Literal[EntityType.TASK], typing.Literal[EntityType.PROJECT], typing.Literal[EntityType.EQUIPMENT], typing.Literal[EntityType.INV_LOCAL_LOCATIONS], typing.Literal[EntityType.FIELD_OPTION_SET], typing.Literal[EntityType.WEBHOOK], typing.Literal[EntityType.SPECS], typing.Literal[EntityType.GOAL], typing.Literal[EntityType.INGREDIENT_TAG_MAP], typing.Literal[EntityType.INGREDIENT_TAG], typing.Literal[EntityType.CONDITION_PARAMETER], typing.Literal[EntityType.OUTPUT], typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER], typing.Literal[EntityType.ASYNC_JOB]],
349
+ typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB],
351
350
  serial_alias_annotation(
352
351
  named_type_path="sdk.entity.LimitedEntityType",
353
352
  ),
@@ -365,7 +364,7 @@ class EntityPermissionType(StrEnum):
365
364
 
366
365
  # DO NOT MODIFY -- This file is generated by type_spec
367
366
  GrantableEntityPermissionType = typing.Annotated[
368
- typing.Union[typing.Literal[EntityPermissionType.READ], typing.Literal[EntityPermissionType.WRITE]],
367
+ typing.Literal[EntityPermissionType.READ] | typing.Literal[EntityPermissionType.WRITE],
369
368
  serial_alias_annotation(
370
369
  named_type_path="sdk.entity.GrantableEntityPermissionType",
371
370
  ),
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file