UncountablePythonSDK 0.0.7__py3-none-any.whl → 0.0.9__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 (95) hide show
  1. {UncountablePythonSDK-0.0.7.dist-info → UncountablePythonSDK-0.0.9.dist-info}/METADATA +4 -2
  2. UncountablePythonSDK-0.0.9.dist-info/RECORD +145 -0
  3. pkgs/argument_parser/argument_parser.py +2 -2
  4. pkgs/serialization/missing_sentry.py +1 -1
  5. pkgs/serialization_util/serialization_helpers.py +3 -0
  6. pkgs/type_spec/emit_open_api.py +34 -17
  7. pkgs/type_spec/emit_open_api_util.py +4 -9
  8. pkgs/type_spec/emit_python.py +8 -5
  9. pkgs/type_spec/open_api_util.py +13 -12
  10. type_spec/external/api/entity/create_entities.yaml +1 -1
  11. type_spec/external/api/entity/create_entity.yaml +1 -1
  12. type_spec/external/api/entity/get_entities_data.yaml +4 -30
  13. type_spec/external/api/entity/list_entities.yaml +4 -14
  14. type_spec/external/api/entity/resolve_entity_ids.yaml +2 -2
  15. type_spec/external/api/entity/set_values.yaml +3 -30
  16. type_spec/external/api/input_groups/get_input_group_names.yaml +2 -2
  17. type_spec/external/api/inputs/create_inputs.yaml +6 -19
  18. type_spec/external/api/inputs/get_input_data.yaml +11 -24
  19. type_spec/external/api/inputs/get_input_names.yaml +4 -4
  20. type_spec/external/api/inputs/get_inputs_data.yaml +7 -20
  21. type_spec/external/api/inputs/set_input_attribute_values.yaml +3 -7
  22. type_spec/external/api/outputs/get_output_data.yaml +9 -20
  23. type_spec/external/api/outputs/get_output_names.yaml +2 -2
  24. type_spec/external/api/project/get_projects.yaml +6 -16
  25. type_spec/external/api/project/get_projects_data.yaml +10 -46
  26. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +5 -5
  27. type_spec/external/api/recipes/create_recipes.yaml +5 -18
  28. type_spec/external/api/recipes/get_curve.yaml +2 -34
  29. type_spec/external/api/recipes/get_recipe_calculations.yaml +7 -17
  30. type_spec/external/api/recipes/get_recipe_links.yaml +1 -1
  31. type_spec/external/api/recipes/get_recipe_names.yaml +2 -2
  32. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +4 -17
  33. type_spec/external/api/recipes/get_recipes_data.yaml +31 -165
  34. type_spec/external/api/recipes/set_recipe_inputs.yaml +3 -3
  35. type_spec/external/api/recipes/set_recipe_outputs.yaml +4 -8
  36. uncountable/integration/__init__.py +0 -0
  37. uncountable/integration/construct_client.py +30 -0
  38. uncountable/integration/cron.py +29 -0
  39. uncountable/integration/db/__init__.py +0 -0
  40. uncountable/integration/db/connect.py +8 -0
  41. uncountable/integration/entrypoint.py +41 -0
  42. uncountable/integration/executors/__init__.py +0 -0
  43. uncountable/integration/executors/script_executor.py +18 -0
  44. uncountable/integration/job.py +39 -0
  45. uncountable/integration/server.py +86 -0
  46. uncountable/integration/types.py +89 -0
  47. uncountable/types/__init__.py +30 -0
  48. uncountable/types/api/entity/create_entities.py +2 -1
  49. uncountable/types/api/entity/create_entity.py +1 -1
  50. uncountable/types/api/entity/get_entities_data.py +6 -26
  51. uncountable/types/api/entity/list_entities.py +5 -12
  52. uncountable/types/api/entity/resolve_entity_ids.py +4 -2
  53. uncountable/types/api/entity/set_values.py +7 -29
  54. uncountable/types/api/input_groups/get_input_group_names.py +3 -2
  55. uncountable/types/api/inputs/create_inputs.py +8 -20
  56. uncountable/types/api/inputs/get_input_data.py +12 -25
  57. uncountable/types/api/inputs/get_input_names.py +5 -4
  58. uncountable/types/api/inputs/get_inputs_data.py +8 -21
  59. uncountable/types/api/inputs/set_input_attribute_values.py +5 -7
  60. uncountable/types/api/outputs/get_output_data.py +10 -17
  61. uncountable/types/api/outputs/get_output_names.py +3 -2
  62. uncountable/types/api/project/get_projects.py +8 -14
  63. uncountable/types/api/project/get_projects_data.py +13 -40
  64. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +6 -5
  65. uncountable/types/api/recipes/create_recipes.py +6 -18
  66. uncountable/types/api/recipes/get_curve.py +4 -26
  67. uncountable/types/api/recipes/get_recipe_calculations.py +8 -15
  68. uncountable/types/api/recipes/get_recipe_links.py +2 -1
  69. uncountable/types/api/recipes/get_recipe_names.py +3 -2
  70. uncountable/types/api/recipes/get_recipe_output_metadata.py +5 -13
  71. uncountable/types/api/recipes/get_recipes_data.py +36 -122
  72. uncountable/types/api/recipes/set_recipe_inputs.py +4 -3
  73. uncountable/types/api/recipes/set_recipe_outputs.py +7 -8
  74. uncountable/types/calculations.py +23 -0
  75. uncountable/types/client_base.py +43 -43
  76. uncountable/types/curves.py +47 -0
  77. uncountable/types/entity.py +4 -1
  78. uncountable/types/experiment_groups.py +23 -0
  79. uncountable/types/field_values.py +37 -0
  80. uncountable/types/fields.py +24 -0
  81. uncountable/types/input_attributes.py +29 -0
  82. uncountable/types/inputs.py +61 -0
  83. uncountable/types/outputs.py +26 -0
  84. uncountable/types/phases.py +23 -0
  85. uncountable/types/recipe_links.py +3 -2
  86. uncountable/types/recipe_metadata.py +50 -0
  87. uncountable/types/recipe_output_metadata.py +24 -0
  88. uncountable/types/recipe_tags.py +23 -0
  89. uncountable/types/response.py +25 -0
  90. uncountable/types/units.py +23 -0
  91. uncountable/types/users.py +24 -0
  92. uncountable/types/workflows.py +32 -0
  93. UncountablePythonSDK-0.0.7.dist-info/RECORD +0 -119
  94. {UncountablePythonSDK-0.0.7.dist-info → UncountablePythonSDK-0.0.9.dist-info}/WHEEL +0 -0
  95. {UncountablePythonSDK-0.0.7.dist-info → UncountablePythonSDK-0.0.9.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,13 @@ from decimal import Decimal # noqa: F401
10
10
  from dataclasses import dataclass
11
11
  from pkgs.serialization import serial_class
12
12
  from ... import base as base_t
13
+ from ... import experiment_groups as experiment_groups_t
14
+ from ... import inputs as inputs_t
15
+ from ... import outputs as outputs_t
16
+ from ... import recipe_metadata as recipe_metadata_t
17
+ from ... import recipe_tags as recipe_tags_t
18
+ from ... import users as users_t
19
+ from ... import workflows as workflows_t
13
20
 
14
21
  __all__: list[str] = [
15
22
  "Arguments",
@@ -19,22 +26,12 @@ __all__: list[str] = [
19
26
  "ENDPOINT_PATH",
20
27
  "Recipe",
21
28
  "RecipeInput",
22
- "RecipeMetadata",
23
29
  "RecipeOutput",
24
30
  "RecipeStep",
25
31
  "RecipeStepGroup",
26
32
  "RecipeStepRelationship",
27
33
  "RecipeWorkflowStep",
28
- "SimpleExperimentGroup",
29
- "SimpleInput",
30
- "SimpleOutput",
31
34
  "SimpleOutputCondition",
32
- "SimpleRecipeMetadataField",
33
- "SimpleRecipeTag",
34
- "SimpleUnit",
35
- "SimpleUser",
36
- "SimpleWorkflow",
37
- "SimpleWorkflowStep",
38
35
  ]
39
36
 
40
37
  ENDPOINT_METHOD = "GET"
@@ -44,51 +41,10 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
44
41
  # DO NOT MODIFY -- This file is generated by type_spec
45
42
  @dataclass(kw_only=True)
46
43
  class Arguments:
47
- recipe_ids: typing.Optional[list[int]]
48
- project_id: typing.Optional[int]
49
- offset: typing.Optional[int]
50
- limit: typing.Optional[int]
51
-
52
-
53
- # DO NOT MODIFY -- This file is generated by type_spec
54
- @dataclass(kw_only=True)
55
- class SimpleRecipeMetadataField:
56
- metadata_id: int
57
- name: str
58
- quantity_type: str
59
-
60
-
61
- # DO NOT MODIFY -- This file is generated by type_spec
62
- @serial_class(
63
- unconverted_values={"quantity_json"},
64
- to_string_values={"quantity_dec"},
65
- )
66
- @dataclass(kw_only=True)
67
- class RecipeMetadata:
68
- metadata_id: int
69
- quantity_dec: Decimal
70
- quantity_json: base_t.JsonValue
71
-
72
-
73
- # DO NOT MODIFY -- This file is generated by type_spec
74
- @dataclass(kw_only=True)
75
- class SimpleRecipeTag:
76
- recipe_tag_id: int
77
- name: str
78
-
79
-
80
- # DO NOT MODIFY -- This file is generated by type_spec
81
- @dataclass(kw_only=True)
82
- class SimpleExperimentGroup:
83
- experiment_group_id: int
84
- name: str
85
-
86
-
87
- # DO NOT MODIFY -- This file is generated by type_spec
88
- @dataclass(kw_only=True)
89
- class SimpleUnit:
90
- unit_id: int
91
- name: str
44
+ recipe_ids: typing.Optional[typing.Optional[list[base_t.ObjectId]]] = None
45
+ project_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
46
+ offset: typing.Optional[typing.Optional[int]] = None
47
+ limit: typing.Optional[typing.Optional[int]] = None
92
48
 
93
49
 
94
50
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -98,22 +54,13 @@ class SimpleUnit:
98
54
  )
99
55
  @dataclass(kw_only=True)
100
56
  class RecipeOutput:
101
- id: int
102
- output_id: int
57
+ id: base_t.ObjectId
58
+ output_id: base_t.ObjectId
103
59
  replicate_num: int
104
60
  quantity_dec: Decimal
105
61
  quantity_json: base_t.JsonValue
106
- curve_id: int
107
- output_condition_id: int
108
-
109
-
110
- # DO NOT MODIFY -- This file is generated by type_spec
111
- @dataclass(kw_only=True)
112
- class SimpleOutput:
113
- output_id: int
114
- name: str
115
- unit: typing.Optional[SimpleUnit]
116
- quantity_type: str
62
+ curve_id: base_t.ObjectId
63
+ output_condition_id: base_t.ObjectId
117
64
 
118
65
 
119
66
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -123,7 +70,7 @@ class SimpleOutput:
123
70
  )
124
71
  @dataclass(kw_only=True)
125
72
  class ConditionParameterValue:
126
- condition_parameter_id: int
73
+ condition_parameter_id: base_t.ObjectId
127
74
  condition_parameter_name: str
128
75
  quantity_dec: Decimal
129
76
  quantity_json: base_t.JsonValue
@@ -132,25 +79,10 @@ class ConditionParameterValue:
132
79
  # DO NOT MODIFY -- This file is generated by type_spec
133
80
  @dataclass(kw_only=True)
134
81
  class SimpleOutputCondition:
135
- output_condition_id: int
82
+ output_condition_id: base_t.ObjectId
136
83
  condition_parameter_values: list[ConditionParameterValue]
137
84
 
138
85
 
139
- # DO NOT MODIFY -- This file is generated by type_spec
140
- @dataclass(kw_only=True)
141
- class SimpleWorkflowStep:
142
- workflow_step_id: int
143
- name: str
144
-
145
-
146
- # DO NOT MODIFY -- This file is generated by type_spec
147
- @dataclass(kw_only=True)
148
- class SimpleWorkflow:
149
- workflow_id: int
150
- name: str
151
- workflow_steps: list[SimpleWorkflowStep]
152
-
153
-
154
86
  # DO NOT MODIFY -- This file is generated by type_spec
155
87
  @serial_class(
156
88
  unconverted_values={"actual_quantity_json", "quantity_json"},
@@ -158,9 +90,9 @@ class SimpleWorkflow:
158
90
  )
159
91
  @dataclass(kw_only=True)
160
92
  class RecipeInput:
161
- input_id: int
162
- input_lot_recipe_id: typing.Optional[int]
163
- recipe_step_id: int
93
+ input_id: base_t.ObjectId
94
+ input_lot_recipe_id: typing.Optional[base_t.ObjectId]
95
+ recipe_step_id: base_t.ObjectId
164
96
  quantity_dec: Decimal
165
97
  quantity_json: base_t.JsonValue
166
98
  actual_quantity_dec: Decimal
@@ -169,21 +101,11 @@ class RecipeInput:
169
101
  behavior: str
170
102
 
171
103
 
172
- # DO NOT MODIFY -- This file is generated by type_spec
173
- @dataclass(kw_only=True)
174
- class SimpleInput:
175
- input_id: int
176
- quantity_type: str
177
- name: str
178
- is_parameter: bool
179
- intermediate_recipe_id: typing.Optional[int]
180
-
181
-
182
104
  # DO NOT MODIFY -- This file is generated by type_spec
183
105
  @dataclass(kw_only=True)
184
106
  class RecipeStep:
185
107
  name: typing.Optional[str]
186
- recipe_step_id: int
108
+ recipe_step_id: base_t.ObjectId
187
109
  recipe_step_number: int
188
110
  instructions: typing.Optional[str] = None
189
111
 
@@ -198,19 +120,11 @@ class RecipeStepGroup:
198
120
  # DO NOT MODIFY -- This file is generated by type_spec
199
121
  @dataclass(kw_only=True)
200
122
  class RecipeWorkflowStep:
201
- recipe_workflow_step_id: int
202
- workflow_step_id: int
123
+ recipe_workflow_step_id: base_t.ObjectId
124
+ workflow_step_id: base_t.ObjectId
203
125
  recipe_step_groups: list[RecipeStepGroup]
204
126
 
205
127
 
206
- # DO NOT MODIFY -- This file is generated by type_spec
207
- @dataclass(kw_only=True)
208
- class SimpleUser:
209
- user_id: int
210
- display_name: str
211
- email: str
212
-
213
-
214
128
  # DO NOT MODIFY -- This file is generated by type_spec
215
129
  @serial_class(
216
130
  to_string_values={"actual_quantity_dec", "quantity_dec"},
@@ -228,20 +142,20 @@ class RecipeStepRelationship:
228
142
  # DO NOT MODIFY -- This file is generated by type_spec
229
143
  @dataclass(kw_only=True)
230
144
  class Recipe:
231
- recipe_id: int
145
+ recipe_id: base_t.ObjectId
232
146
  create_datetime: str
233
147
  last_modified_datetime: str
234
148
  name: str
235
149
  notes: typing.Optional[str]
236
- workflow_id: int
237
- metadata: list[RecipeMetadata]
150
+ workflow_id: base_t.ObjectId
151
+ metadata: list[recipe_metadata_t.RecipeMetadata]
238
152
  inputs: list[RecipeInput]
239
153
  outputs: list[RecipeOutput]
240
154
  workflow_steps: list[RecipeWorkflowStep]
241
- tag_ids: list[int]
242
- experiment_group_ids: list[int]
155
+ tag_ids: list[base_t.ObjectId]
156
+ experiment_group_ids: list[base_t.ObjectId]
243
157
  step_relationships: list[RecipeStepRelationship]
244
- creating_user_id: typing.Optional[int] = None
158
+ creating_user_id: typing.Optional[base_t.ObjectId] = None
245
159
  barcode_value: typing.Optional[str] = None
246
160
 
247
161
 
@@ -249,12 +163,12 @@ class Recipe:
249
163
  @dataclass(kw_only=True)
250
164
  class Data:
251
165
  recipes: list[Recipe]
252
- workflows: list[SimpleWorkflow]
253
- metadata: list[SimpleRecipeMetadataField]
254
- inputs: list[SimpleInput]
255
- outputs: list[SimpleOutput]
166
+ workflows: list[workflows_t.SimpleWorkflow]
167
+ metadata: list[recipe_metadata_t.SimpleRecipeMetadataField]
168
+ inputs: list[inputs_t.SimpleInput]
169
+ outputs: list[outputs_t.SimpleOutput]
256
170
  output_conditions: list[SimpleOutputCondition]
257
- users: list[SimpleUser]
258
- recipe_tags: list[SimpleRecipeTag]
259
- experiment_groups: list[SimpleExperimentGroup]
171
+ users: list[users_t.SimpleUser]
172
+ recipe_tags: list[recipe_tags_t.SimpleRecipeTag]
173
+ experiment_groups: list[experiment_groups_t.SimpleExperimentGroup]
260
174
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -9,6 +9,7 @@ import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from dataclasses import dataclass
11
11
  from pkgs.serialization import serial_class
12
+ from ... import base as base_t
12
13
 
13
14
  __all__: list[str] = [
14
15
  "Arguments",
@@ -28,9 +29,9 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
28
29
  )
29
30
  @dataclass(kw_only=True)
30
31
  class RecipeInputValue:
31
- recipe_id: int
32
- input_id: int
33
- recipe_step_id: typing.Optional[typing.Optional[int]] = None
32
+ recipe_id: base_t.ObjectId
33
+ input_id: base_t.ObjectId
34
+ recipe_step_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
34
35
  value_numeric: typing.Optional[Decimal] = None
35
36
  value_str: typing.Optional[str] = None
36
37
  set_actual_value: typing.Optional[bool] = None
@@ -9,6 +9,8 @@ import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from dataclasses import dataclass
11
11
  from pkgs.serialization import serial_class
12
+ from ... import base as base_t
13
+ from ... import response as response_t
12
14
 
13
15
  __all__: list[str] = [
14
16
  "Arguments",
@@ -36,10 +38,10 @@ class CurveValues:
36
38
  )
37
39
  @dataclass(kw_only=True)
38
40
  class RecipeOutputValue:
39
- recipe_id: int
40
- output_id: int
41
+ recipe_id: base_t.ObjectId
42
+ output_id: base_t.ObjectId
41
43
  experiment_num: int
42
- condition_id: typing.Optional[int] = None
44
+ condition_id: typing.Optional[base_t.ObjectId] = None
43
45
  value_numeric: typing.Optional[Decimal] = None
44
46
  value_str: typing.Optional[str] = None
45
47
  value_curve: typing.Optional[CurveValues] = None
@@ -52,10 +54,7 @@ class Arguments:
52
54
 
53
55
 
54
56
  # DO NOT MODIFY -- This file is generated by type_spec
55
- @serial_class(
56
- parse_require={"status"},
57
- )
58
57
  @dataclass(kw_only=True)
59
- class Data:
60
- status: typing.Literal["ok"] = "ok"
58
+ class Data(response_t.Response):
59
+ pass
61
60
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,23 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from . import base as base_t
12
+
13
+ __all__: list[str] = [
14
+ "Calculation",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @dataclass(kw_only=True)
20
+ class Calculation:
21
+ id: base_t.ObjectId
22
+ name: str
23
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -64,7 +64,7 @@ class ClientMethods(ABC):
64
64
  def create_entities(
65
65
  self,
66
66
  *,
67
- definition_id: int,
67
+ definition_id: base_t.ObjectId,
68
68
  entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT]],
69
69
  entities_to_create: list[create_entities_t.EntityToCreate],
70
70
  ) -> create_entities_t.Data:
@@ -84,7 +84,7 @@ class ClientMethods(ABC):
84
84
  def create_entity(
85
85
  self,
86
86
  *,
87
- definition_id: int,
87
+ definition_id: base_t.ObjectId,
88
88
  entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT]],
89
89
  field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None,
90
90
  ) -> create_entity_t.Data:
@@ -120,9 +120,9 @@ class ClientMethods(ABC):
120
120
  def create_recipes(
121
121
  self,
122
122
  *,
123
- material_family_id: int,
123
+ material_family_id: base_t.ObjectId,
124
124
  recipe_definitions: list[create_recipes_t.CreateRecipeDefinition],
125
- project_id: typing.Optional[int] = None,
125
+ project_id: typing.Optional[base_t.ObjectId] = None,
126
126
  ) -> create_recipes_t.Data:
127
127
  args = create_recipes_t.Arguments(
128
128
  material_family_id=material_family_id,
@@ -156,7 +156,7 @@ class ClientMethods(ABC):
156
156
  def get_curve(
157
157
  self,
158
158
  *,
159
- recipe_output_id: int,
159
+ recipe_output_id: base_t.ObjectId,
160
160
  ) -> get_curve_t.Data:
161
161
  args = get_curve_t.Arguments(
162
162
  recipe_output_id=recipe_output_id,
@@ -172,8 +172,8 @@ class ClientMethods(ABC):
172
172
  def get_entities_data(
173
173
  self,
174
174
  *,
175
- entity_ids: list[int],
176
- entity_type: str,
175
+ entity_ids: list[base_t.ObjectId],
176
+ entity_type: entity_t.EntityType,
177
177
  ) -> get_entities_data_t.Data:
178
178
  args = get_entities_data_t.Arguments(
179
179
  entity_ids=entity_ids,
@@ -190,11 +190,11 @@ class ClientMethods(ABC):
190
190
  def get_input_data(
191
191
  self,
192
192
  *,
193
- material_family_id: int,
194
- input_ids: typing.Optional[list[int]],
195
- offset: typing.Optional[int],
193
+ material_family_id: base_t.ObjectId,
194
+ input_ids: typing.Optional[list[base_t.ObjectId]],
196
195
  is_parameter: typing.Optional[bool],
197
- limit: typing.Optional[int],
196
+ offset: typing.Optional[typing.Optional[int]] = None,
197
+ limit: typing.Optional[typing.Optional[int]] = None,
198
198
  ) -> get_input_data_t.Data:
199
199
  args = get_input_data_t.Arguments(
200
200
  material_family_id=material_family_id,
@@ -214,7 +214,7 @@ class ClientMethods(ABC):
214
214
  def get_input_group_names(
215
215
  self,
216
216
  *,
217
- material_family_id: int,
217
+ material_family_id: base_t.ObjectId,
218
218
  ) -> get_input_group_names_t.Data:
219
219
  args = get_input_group_names_t.Arguments(
220
220
  material_family_id=material_family_id,
@@ -230,10 +230,10 @@ class ClientMethods(ABC):
230
230
  def get_input_names(
231
231
  self,
232
232
  *,
233
- material_family_id: int,
234
- offset: typing.Optional[int],
233
+ material_family_id: base_t.ObjectId,
235
234
  is_parameter: typing.Optional[bool],
236
- limit: typing.Optional[int],
235
+ offset: typing.Optional[typing.Optional[int]] = None,
236
+ limit: typing.Optional[typing.Optional[int]] = None,
237
237
  ) -> get_input_names_t.Data:
238
238
  args = get_input_names_t.Arguments(
239
239
  material_family_id=material_family_id,
@@ -252,7 +252,7 @@ class ClientMethods(ABC):
252
252
  def get_inputs_data(
253
253
  self,
254
254
  *,
255
- input_ids: list[int],
255
+ input_ids: list[base_t.ObjectId],
256
256
  ) -> get_inputs_data_t.Data:
257
257
  args = get_inputs_data_t.Arguments(
258
258
  input_ids=input_ids,
@@ -268,8 +268,8 @@ class ClientMethods(ABC):
268
268
  def get_output_data(
269
269
  self,
270
270
  *,
271
- material_family_id: int,
272
- output_ids: typing.Optional[list[int]] = None,
271
+ material_family_id: base_t.ObjectId,
272
+ output_ids: typing.Optional[list[base_t.ObjectId]] = None,
273
273
  offset: typing.Optional[int] = None,
274
274
  limit: typing.Optional[int] = None,
275
275
  ) -> get_output_data_t.Data:
@@ -290,7 +290,7 @@ class ClientMethods(ABC):
290
290
  def get_output_names(
291
291
  self,
292
292
  *,
293
- material_family_id: int,
293
+ material_family_id: base_t.ObjectId,
294
294
  offset: typing.Optional[int] = None,
295
295
  limit: typing.Optional[int] = None,
296
296
  ) -> get_output_names_t.Data:
@@ -311,7 +311,7 @@ class ClientMethods(ABC):
311
311
  self,
312
312
  *,
313
313
  all_material_families: bool,
314
- material_family_id: typing.Optional[int],
314
+ material_family_id: typing.Optional[base_t.ObjectId],
315
315
  ) -> get_projects_t.Data:
316
316
  args = get_projects_t.Arguments(
317
317
  all_material_families=all_material_families,
@@ -328,9 +328,9 @@ class ClientMethods(ABC):
328
328
  def get_projects_data(
329
329
  self,
330
330
  *,
331
- project_ids: list[int],
332
- offset: typing.Optional[int],
333
- limit: typing.Optional[int],
331
+ project_ids: list[base_t.ObjectId],
332
+ offset: typing.Optional[typing.Optional[int]] = None,
333
+ limit: typing.Optional[typing.Optional[int]] = None,
334
334
  ) -> get_projects_data_t.Data:
335
335
  args = get_projects_data_t.Arguments(
336
336
  project_ids=project_ids,
@@ -348,8 +348,8 @@ class ClientMethods(ABC):
348
348
  def get_recipe_calculations(
349
349
  self,
350
350
  *,
351
- recipe_ids: list[int],
352
- calculation_ids: typing.Optional[list[int]] = None,
351
+ recipe_ids: list[base_t.ObjectId],
352
+ calculation_ids: typing.Optional[list[base_t.ObjectId]] = None,
353
353
  ) -> get_recipe_calculations_t.Data:
354
354
  args = get_recipe_calculations_t.Arguments(
355
355
  recipe_ids=recipe_ids,
@@ -366,7 +366,7 @@ class ClientMethods(ABC):
366
366
  def get_recipe_links(
367
367
  self,
368
368
  *,
369
- recipe_ids: list[int],
369
+ recipe_ids: list[base_t.ObjectId],
370
370
  depth: int = 1,
371
371
  link_types: typing.Optional[list[recipe_links_t.RecipeLinkType]],
372
372
  ) -> get_recipe_links_t.Data:
@@ -386,10 +386,10 @@ class ClientMethods(ABC):
386
386
  def get_recipe_metadata_data(
387
387
  self,
388
388
  *,
389
- material_family_id: int,
390
- recipe_metadata_ids: typing.Optional[list[int]],
391
- offset: typing.Optional[int],
392
- limit: typing.Optional[int],
389
+ material_family_id: base_t.ObjectId,
390
+ recipe_metadata_ids: typing.Optional[list[base_t.ObjectId]],
391
+ offset: typing.Optional[typing.Optional[int]] = None,
392
+ limit: typing.Optional[typing.Optional[int]] = None,
393
393
  ) -> get_recipe_metadata_data_t.Data:
394
394
  args = get_recipe_metadata_data_t.Arguments(
395
395
  material_family_id=material_family_id,
@@ -408,7 +408,7 @@ class ClientMethods(ABC):
408
408
  def get_recipe_names(
409
409
  self,
410
410
  *,
411
- project_id: int,
411
+ project_id: base_t.ObjectId,
412
412
  ) -> get_recipe_names_t.Data:
413
413
  args = get_recipe_names_t.Arguments(
414
414
  project_id=project_id,
@@ -424,7 +424,7 @@ class ClientMethods(ABC):
424
424
  def get_recipe_output_metadata(
425
425
  self,
426
426
  *,
427
- recipe_output_ids: list[int],
427
+ recipe_output_ids: list[base_t.ObjectId],
428
428
  ) -> get_recipe_output_metadata_t.Data:
429
429
  args = get_recipe_output_metadata_t.Arguments(
430
430
  recipe_output_ids=recipe_output_ids,
@@ -440,10 +440,10 @@ class ClientMethods(ABC):
440
440
  def get_recipes_data(
441
441
  self,
442
442
  *,
443
- recipe_ids: typing.Optional[list[int]],
444
- project_id: typing.Optional[int],
445
- offset: typing.Optional[int],
446
- limit: typing.Optional[int],
443
+ recipe_ids: typing.Optional[typing.Optional[list[base_t.ObjectId]]] = None,
444
+ project_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None,
445
+ offset: typing.Optional[typing.Optional[int]] = None,
446
+ limit: typing.Optional[typing.Optional[int]] = None,
447
447
  ) -> get_recipes_data_t.Data:
448
448
  args = get_recipes_data_t.Arguments(
449
449
  recipe_ids=recipe_ids,
@@ -462,11 +462,11 @@ class ClientMethods(ABC):
462
462
  def list_entities(
463
463
  self,
464
464
  *,
465
- entity_type: str,
465
+ entity_type: entity_t.EntityType,
466
466
  config_reference: str,
467
- offset: typing.Optional[int],
468
- limit: typing.Optional[int],
469
467
  attributes: typing.Optional[dict[OpaqueKey, base_t.JsonValue]] = None,
468
+ offset: typing.Optional[typing.Optional[int]] = None,
469
+ limit: typing.Optional[typing.Optional[int]] = None,
470
470
  ) -> list_entities_t.Data:
471
471
  args = list_entities_t.Arguments(
472
472
  entity_type=entity_type,
@@ -486,8 +486,8 @@ class ClientMethods(ABC):
486
486
  def resolve_entity_ids(
487
487
  self,
488
488
  *,
489
- entity_ids: list[typing.Union[str, int]],
490
- entity_type: str,
489
+ entity_ids: list[typing.Union[str, base_t.ObjectId]],
490
+ entity_type: entity_t.EntityType,
491
491
  ) -> resolve_entity_ids_t.Data:
492
492
  args = resolve_entity_ids_t.Arguments(
493
493
  entity_ids=entity_ids,
@@ -568,8 +568,8 @@ class ClientMethods(ABC):
568
568
  def set_values(
569
569
  self,
570
570
  *,
571
- entity: set_values_t.Entity,
572
- values: list[set_values_t.EntityFieldValues],
571
+ entity: entity_t.Entity,
572
+ values: list[field_values_t.ArgumentValueRefName],
573
573
  ) -> set_values_t.Data:
574
574
  args = set_values_t.Arguments(
575
575
  entity=entity,
@@ -0,0 +1,47 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from dataclasses import dataclass
12
+ from pkgs.serialization import serial_class
13
+ from . import base as base_t
14
+
15
+ __all__: list[str] = [
16
+ "Curve",
17
+ "CurveAxisType",
18
+ "CurveValue",
19
+ ]
20
+
21
+
22
+ # DO NOT MODIFY -- This file is generated by type_spec
23
+ class CurveAxisType(StrEnum):
24
+ NUMERIC = "numeric"
25
+ TIMESTAMP = "timestamp"
26
+
27
+
28
+ # DO NOT MODIFY -- This file is generated by type_spec
29
+ @dataclass(kw_only=True)
30
+ class Curve:
31
+ id: base_t.ObjectId
32
+ x_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC], typing.Literal[CurveAxisType.TIMESTAMP]]
33
+ x_values: list[CurveValue]
34
+ y_type: typing.Union[typing.Literal[CurveAxisType.NUMERIC]]
35
+ y_values: list[CurveValue]
36
+
37
+
38
+ # DO NOT MODIFY -- This file is generated by type_spec
39
+ @serial_class(
40
+ to_string_values={"quantity"},
41
+ )
42
+ @dataclass(kw_only=True)
43
+ class CurveValue:
44
+ index: int
45
+ quantity: typing.Optional[Decimal] = None
46
+ quantity_timestamp: typing.Optional[datetime.datetime] = None
47
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,6 +10,7 @@ from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
11
  from dataclasses import dataclass
12
12
  from pkgs.serialization import serial_string_enum
13
+ from . import base as base_t
13
14
 
14
15
  __all__: list[str] = [
15
16
  "Entity",
@@ -114,6 +115,7 @@ __all__: list[str] = [
114
115
  "timesheet_entry": "Timesheet Entry",
115
116
  "training_run": "Analyze Experiment",
116
117
  "training_set": "Training Set",
118
+ "time_series": "Time Series",
117
119
  "units": "Units",
118
120
  "user_favorite": "User Favorite",
119
121
  "user": "User",
@@ -236,6 +238,7 @@ class EntityType(StrEnum):
236
238
  TIMESHEET_ENTRY = "timesheet_entry"
237
239
  TRAINING_RUN = "training_run"
238
240
  TRAINING_SET = "training_set"
241
+ TIME_SERIES = "time_series"
239
242
  UNITS = "units"
240
243
  USER_FAVORITE = "user_favorite"
241
244
  USER = "user"
@@ -266,6 +269,6 @@ class EntityType(StrEnum):
266
269
  # DO NOT MODIFY -- This file is generated by type_spec
267
270
  @dataclass(kw_only=True)
268
271
  class Entity:
269
- id: int
272
+ id: base_t.ObjectId
270
273
  type: EntityType
271
274
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,23 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from . import base as base_t
12
+
13
+ __all__: list[str] = [
14
+ "SimpleExperimentGroup",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @dataclass(kw_only=True)
20
+ class SimpleExperimentGroup:
21
+ experiment_group_id: base_t.ObjectId
22
+ name: str
23
+ # DO NOT MODIFY -- This file is generated by type_spec