UncountablePythonSDK 0.0.160__py3-none-any.whl → 0.0.162__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.
- docs/requirements.txt +1 -1
- uncountable/types/__init__.py +10 -2
- uncountable/types/api/{files/create_file_record.py → file_folders/add_file_to_folder.py} +9 -7
- uncountable/types/api/outputs/update_output_condition_parameter.py +1 -0
- uncountable/types/api/recipes/create_recipe.py +1 -0
- uncountable/types/api/recipes/upsert_recipe_workflow_step.py +46 -0
- uncountable/types/api/recipes/upsert_step_relationships.py +91 -0
- uncountable/types/async_batch_processor.py +79 -1
- uncountable/types/async_batch_t.py +2 -0
- uncountable/types/client_base.py +83 -19
- uncountable/types/entity_t.py +4 -0
- uncountable/types/listing.py +1 -0
- uncountable/types/listing_t.py +15 -1
- uncountable/types/recipe_workflow_step_types.py +15 -0
- uncountable/types/recipe_workflow_step_types_t.py +118 -0
- uncountable/types/step_relationships.py +15 -0
- uncountable/types/step_relationships_t.py +140 -0
- {uncountablepythonsdk-0.0.160.dist-info → uncountablepythonsdk-0.0.162.dist-info}/METADATA +2 -1
- {uncountablepythonsdk-0.0.160.dist-info → uncountablepythonsdk-0.0.162.dist-info}/RECORD +21 -15
- {uncountablepythonsdk-0.0.160.dist-info → uncountablepythonsdk-0.0.162.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.160.dist-info → uncountablepythonsdk-0.0.162.dist-info}/top_level.txt +0 -0
docs/requirements.txt
CHANGED
uncountable/types/__init__.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# ruff: noqa: E402 Q003
|
|
3
3
|
# fmt: off
|
|
4
4
|
# isort: skip_file
|
|
5
|
+
from .api.file_folders import add_file_to_folder as add_file_to_folder_t
|
|
5
6
|
from .api.notebooks import add_notebook_content as add_notebook_content_t
|
|
6
7
|
from .api.recipes import add_recipe_to_project as add_recipe_to_project_t
|
|
7
8
|
from .api.recipes import add_time_series_data as add_time_series_data_t
|
|
@@ -22,7 +23,6 @@ from .api.runsheet import complete_async_upload as complete_async_upload_t
|
|
|
22
23
|
from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
|
|
23
24
|
from .api.entity import create_entities as create_entities_t
|
|
24
25
|
from .api.entity import create_entity as create_entity_t
|
|
25
|
-
from .api.files import create_file_record as create_file_record_t
|
|
26
26
|
from .api.inputs import create_inputs as create_inputs_t
|
|
27
27
|
from .api.recipes import create_mix_order as create_mix_order_t
|
|
28
28
|
from .api.entity import create_or_update_entity as create_or_update_entity_t
|
|
@@ -102,6 +102,7 @@ from . import recipe_metadata_t as recipe_metadata_t
|
|
|
102
102
|
from . import recipe_output_metadata_t as recipe_output_metadata_t
|
|
103
103
|
from . import recipe_step_relationships_t as recipe_step_relationships_t
|
|
104
104
|
from . import recipe_tags_t as recipe_tags_t
|
|
105
|
+
from . import recipe_workflow_step_types_t as recipe_workflow_step_types_t
|
|
105
106
|
from . import recipe_workflow_steps_t as recipe_workflow_steps_t
|
|
106
107
|
from . import recipes_t as recipes_t
|
|
107
108
|
from .api.integrations import register_sockets_token as register_sockets_token_t
|
|
@@ -132,6 +133,7 @@ from .api.recipes import set_recipe_total as set_recipe_total_t
|
|
|
132
133
|
from .api.entity import set_values as set_values_t
|
|
133
134
|
from . import sockets_t as sockets_t
|
|
134
135
|
from . import specs_t as specs_t
|
|
136
|
+
from . import step_relationships_t as step_relationships_t
|
|
135
137
|
from .api.entity import transition_entity_phase as transition_entity_phase_t
|
|
136
138
|
from .api.recipes import unarchive_recipes as unarchive_recipes_t
|
|
137
139
|
from . import units_t as units_t
|
|
@@ -142,12 +144,15 @@ from .api.outputs import update_output_condition_parameter as update_output_cond
|
|
|
142
144
|
from . import uploader_t as uploader_t
|
|
143
145
|
from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
|
|
144
146
|
from .api.field_options import upsert_field_options as upsert_field_options_t
|
|
147
|
+
from .api.recipes import upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
|
|
148
|
+
from .api.recipes import upsert_step_relationships as upsert_step_relationships_t
|
|
145
149
|
from . import users_t as users_t
|
|
146
150
|
from . import webhook_job_t as webhook_job_t
|
|
147
151
|
from . import workflows_t as workflows_t
|
|
148
152
|
|
|
149
153
|
|
|
150
154
|
__all__: list[str] = [
|
|
155
|
+
"add_file_to_folder_t",
|
|
151
156
|
"add_notebook_content_t",
|
|
152
157
|
"add_recipe_to_project_t",
|
|
153
158
|
"add_time_series_data_t",
|
|
@@ -168,7 +173,6 @@ __all__: list[str] = [
|
|
|
168
173
|
"convert_chemical_formats_t",
|
|
169
174
|
"create_entities_t",
|
|
170
175
|
"create_entity_t",
|
|
171
|
-
"create_file_record_t",
|
|
172
176
|
"create_inputs_t",
|
|
173
177
|
"create_mix_order_t",
|
|
174
178
|
"create_or_update_entity_t",
|
|
@@ -248,6 +252,7 @@ __all__: list[str] = [
|
|
|
248
252
|
"recipe_output_metadata_t",
|
|
249
253
|
"recipe_step_relationships_t",
|
|
250
254
|
"recipe_tags_t",
|
|
255
|
+
"recipe_workflow_step_types_t",
|
|
251
256
|
"recipe_workflow_steps_t",
|
|
252
257
|
"recipes_t",
|
|
253
258
|
"register_sockets_token_t",
|
|
@@ -278,6 +283,7 @@ __all__: list[str] = [
|
|
|
278
283
|
"set_values_t",
|
|
279
284
|
"sockets_t",
|
|
280
285
|
"specs_t",
|
|
286
|
+
"step_relationships_t",
|
|
281
287
|
"transition_entity_phase_t",
|
|
282
288
|
"unarchive_recipes_t",
|
|
283
289
|
"units_t",
|
|
@@ -288,6 +294,8 @@ __all__: list[str] = [
|
|
|
288
294
|
"uploader_t",
|
|
289
295
|
"upsert_condition_match_t",
|
|
290
296
|
"upsert_field_options_t",
|
|
297
|
+
"upsert_recipe_workflow_step_t",
|
|
298
|
+
"upsert_step_relationships_t",
|
|
291
299
|
"users_t",
|
|
292
300
|
"webhook_job_t",
|
|
293
301
|
"workflows_t",
|
|
@@ -8,8 +8,9 @@ import datetime # noqa: F401
|
|
|
8
8
|
from decimal import Decimal # noqa: F401
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import async_batch_t
|
|
11
12
|
from ... import base_t
|
|
12
|
-
from ... import
|
|
13
|
+
from ... import identifier_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
15
16
|
"Arguments",
|
|
@@ -19,23 +20,24 @@ __all__: list[str] = [
|
|
|
19
20
|
]
|
|
20
21
|
|
|
21
22
|
ENDPOINT_METHOD = "POST"
|
|
22
|
-
ENDPOINT_PATH = "api/external/
|
|
23
|
+
ENDPOINT_PATH = "api/external/file_folders/add_file_to_folder"
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
27
|
@serial_class(
|
|
27
|
-
named_type_path="sdk.api.
|
|
28
|
+
named_type_path="sdk.api.file_folders.add_file_to_folder.Arguments",
|
|
28
29
|
)
|
|
29
30
|
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
30
31
|
class Arguments:
|
|
31
|
-
|
|
32
|
+
file_id: base_t.ObjectId
|
|
33
|
+
folder_key: identifier_t.IdentifierKey
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
37
|
@serial_class(
|
|
36
|
-
named_type_path="sdk.api.
|
|
38
|
+
named_type_path="sdk.api.file_folders.add_file_to_folder.Data",
|
|
37
39
|
)
|
|
38
40
|
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
39
|
-
class Data(
|
|
40
|
-
|
|
41
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
42
|
+
pass
|
|
41
43
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -36,6 +36,7 @@ class Arguments:
|
|
|
36
36
|
update_type: post_base_t.UpdateType
|
|
37
37
|
requirement_type: ConditionParameterRequirementType | None = None
|
|
38
38
|
material_family_key: identifier_t.IdentifierKey | None = None
|
|
39
|
+
analytical_method_keys: list[identifier_t.IdentifierKey] | None = None
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -38,6 +38,7 @@ class Arguments:
|
|
|
38
38
|
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None
|
|
39
39
|
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None
|
|
40
40
|
definition_key: identifier_t.IdentifierKey | None = None
|
|
41
|
+
recipe_key: identifier_t.IdentifierKey | None = None
|
|
41
42
|
|
|
42
43
|
|
|
43
44
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
13
|
+
from ... import identifier_t
|
|
14
|
+
from ... import recipe_workflow_step_types_t
|
|
15
|
+
|
|
16
|
+
__all__: list[str] = [
|
|
17
|
+
"Arguments",
|
|
18
|
+
"Data",
|
|
19
|
+
"ENDPOINT_METHOD",
|
|
20
|
+
"ENDPOINT_PATH",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
ENDPOINT_METHOD = "POST"
|
|
24
|
+
ENDPOINT_PATH = "api/external/recipes/upsert_recipe_workflow_step"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
+
@serial_class(
|
|
29
|
+
named_type_path="sdk.api.recipes.upsert_recipe_workflow_step.Arguments",
|
|
30
|
+
)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
|
+
class Arguments:
|
|
33
|
+
recipe_key: identifier_t.IdentifierKey
|
|
34
|
+
data_source: recipe_workflow_step_types_t.RecipeWorkflowStepDataSource
|
|
35
|
+
location: recipe_workflow_step_types_t.RecipeWorkflowStepLocation
|
|
36
|
+
recipe_workflow_step_key: identifier_t.IdentifierKey | None = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
+
@serial_class(
|
|
41
|
+
named_type_path="sdk.api.recipes.upsert_recipe_workflow_step.Data",
|
|
42
|
+
)
|
|
43
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
44
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
45
|
+
pass
|
|
46
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
|
+
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
12
|
+
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from ... import async_batch_t
|
|
14
|
+
from ... import base_t
|
|
15
|
+
from ... import identifier_t
|
|
16
|
+
from ... import recipe_workflow_steps_t
|
|
17
|
+
from ... import step_relationships_t
|
|
18
|
+
|
|
19
|
+
__all__: list[str] = [
|
|
20
|
+
"Arguments",
|
|
21
|
+
"Data",
|
|
22
|
+
"ENDPOINT_METHOD",
|
|
23
|
+
"ENDPOINT_PATH",
|
|
24
|
+
"StepRelationshipEdit",
|
|
25
|
+
"StepRelationshipEditBase",
|
|
26
|
+
"StepRelationshipEditType",
|
|
27
|
+
"StepRelationshipEditUpsert",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
ENDPOINT_METHOD = "POST"
|
|
31
|
+
ENDPOINT_PATH = "api/external/recipes/upsert_step_relationships"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
|
+
class StepRelationshipEditType(StrEnum):
|
|
36
|
+
UPSERT = "upsert"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
+
@serial_class(
|
|
41
|
+
named_type_path="sdk.api.recipes.upsert_step_relationships.StepRelationshipEditBase",
|
|
42
|
+
)
|
|
43
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
44
|
+
class StepRelationshipEditBase:
|
|
45
|
+
type: StepRelationshipEditType
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
49
|
+
@serial_class(
|
|
50
|
+
named_type_path="sdk.api.recipes.upsert_step_relationships.StepRelationshipEditUpsert",
|
|
51
|
+
parse_require={"type"},
|
|
52
|
+
)
|
|
53
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
54
|
+
class StepRelationshipEditUpsert(StepRelationshipEditBase):
|
|
55
|
+
type: typing.Literal[StepRelationshipEditType.UPSERT] = StepRelationshipEditType.UPSERT
|
|
56
|
+
source_recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
|
|
57
|
+
target_recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
|
|
58
|
+
relationship: step_relationships_t.StepRelationshipType
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
62
|
+
StepRelationshipEdit = typing.Annotated[
|
|
63
|
+
typing.Union[StepRelationshipEditUpsert],
|
|
64
|
+
serial_union_annotation(
|
|
65
|
+
named_type_path="sdk.api.recipes.upsert_step_relationships.StepRelationshipEdit",
|
|
66
|
+
discriminator="type",
|
|
67
|
+
discriminator_map={
|
|
68
|
+
"upsert": StepRelationshipEditUpsert,
|
|
69
|
+
},
|
|
70
|
+
),
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
75
|
+
@serial_class(
|
|
76
|
+
named_type_path="sdk.api.recipes.upsert_step_relationships.Arguments",
|
|
77
|
+
)
|
|
78
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
79
|
+
class Arguments:
|
|
80
|
+
recipe_key: identifier_t.IdentifierKey
|
|
81
|
+
edits: list[StepRelationshipEdit]
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
85
|
+
@serial_class(
|
|
86
|
+
named_type_path="sdk.api.recipes.upsert_step_relationships.Data",
|
|
87
|
+
)
|
|
88
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
89
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
90
|
+
pass
|
|
91
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -34,6 +34,7 @@ from uncountable.types import notifications_t
|
|
|
34
34
|
import uncountable.types.api.integrations.push_notification as push_notification_t
|
|
35
35
|
from uncountable.types import recipe_identifiers_t
|
|
36
36
|
from uncountable.types import recipe_metadata_t
|
|
37
|
+
from uncountable.types import recipe_workflow_step_types_t
|
|
37
38
|
from uncountable.types import recipe_workflow_steps_t
|
|
38
39
|
import uncountable.types.api.triggers.run_trigger as run_trigger_t
|
|
39
40
|
import uncountable.types.api.entity.set_barcode as set_barcode_t
|
|
@@ -44,6 +45,8 @@ import uncountable.types.api.entity.unlock_entity as unlock_entity_t
|
|
|
44
45
|
import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
|
|
45
46
|
from uncountable.types import uploader_t
|
|
46
47
|
import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
|
|
48
|
+
import uncountable.types.api.recipes.upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
|
|
49
|
+
import uncountable.types.api.recipes.upsert_step_relationships as upsert_step_relationships_t
|
|
47
50
|
import uuid
|
|
48
51
|
from abc import ABC, abstractmethod
|
|
49
52
|
from pkgs.serialization_util import serialize_for_api
|
|
@@ -362,6 +365,7 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
362
365
|
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
|
|
363
366
|
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
|
|
364
367
|
definition_key: identifier_t.IdentifierKey | None = None,
|
|
368
|
+
recipe_key: identifier_t.IdentifierKey | None = None,
|
|
365
369
|
depends_on: list[str] | None = None,
|
|
366
370
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
367
371
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
@@ -373,8 +377,9 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
373
377
|
:param workflow_id: The identifier of the workflow to create the recipe with
|
|
374
378
|
:param workflow_variant_id: The identifier of the workflow variant to create the recipe with
|
|
375
379
|
:param recipe_metadata: Metadata values to populate the recipe with
|
|
376
|
-
:param identifiers: A recipe won't be created if it matches the identifier. An identifier must be unique in the schema
|
|
380
|
+
:param identifiers: [DEPRECATED] - use `recipeKey`. A recipe won't be created if it matches the identifier. An identifier must be unique in the schema. An error will be raised if an argument is provided to both `recipeKey` and `identifiers` properties.
|
|
377
381
|
:param definition_key: The entity definition identifier, default is used if not supplied
|
|
382
|
+
:param recipe_key: If this identifier matches an existing recipe, the id of the existing recipe will be returned and no update will occur. Use the `lookup_entity` endpoint to match an existing recipe based on a set of field values.
|
|
378
383
|
:param depends_on: A list of batch reference keys to process before processing this request
|
|
379
384
|
"""
|
|
380
385
|
args = create_recipe_t.Arguments(
|
|
@@ -386,6 +391,7 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
386
391
|
recipe_metadata=recipe_metadata,
|
|
387
392
|
identifiers=identifiers,
|
|
388
393
|
definition_key=definition_key,
|
|
394
|
+
recipe_key=recipe_key,
|
|
389
395
|
)
|
|
390
396
|
json_data = serialize_for_api(args)
|
|
391
397
|
|
|
@@ -981,3 +987,75 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
981
987
|
path=req.path,
|
|
982
988
|
batch_reference=req.batch_reference,
|
|
983
989
|
)
|
|
990
|
+
|
|
991
|
+
def upsert_recipe_workflow_step(
|
|
992
|
+
self,
|
|
993
|
+
*,
|
|
994
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
995
|
+
data_source: recipe_workflow_step_types_t.RecipeWorkflowStepDataSource,
|
|
996
|
+
location: recipe_workflow_step_types_t.RecipeWorkflowStepLocation,
|
|
997
|
+
recipe_workflow_step_key: identifier_t.IdentifierKey | None = None,
|
|
998
|
+
depends_on: list[str] | None = None,
|
|
999
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
1000
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
1001
|
+
"""Create or update a recipe workflow step on a recipe
|
|
1002
|
+
|
|
1003
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
1004
|
+
"""
|
|
1005
|
+
args = upsert_recipe_workflow_step_t.Arguments(
|
|
1006
|
+
recipe_key=recipe_key,
|
|
1007
|
+
data_source=data_source,
|
|
1008
|
+
location=location,
|
|
1009
|
+
recipe_workflow_step_key=recipe_workflow_step_key,
|
|
1010
|
+
)
|
|
1011
|
+
json_data = serialize_for_api(args)
|
|
1012
|
+
|
|
1013
|
+
batch_reference = str(uuid.uuid4())
|
|
1014
|
+
|
|
1015
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
1016
|
+
path=async_batch_t.AsyncBatchRequestPath.UPSERT_RECIPE_WORKFLOW_STEP,
|
|
1017
|
+
data=json_data,
|
|
1018
|
+
depends_on=depends_on,
|
|
1019
|
+
batch_reference=batch_reference,
|
|
1020
|
+
)
|
|
1021
|
+
|
|
1022
|
+
self._enqueue(req)
|
|
1023
|
+
|
|
1024
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
1025
|
+
path=req.path,
|
|
1026
|
+
batch_reference=req.batch_reference,
|
|
1027
|
+
)
|
|
1028
|
+
|
|
1029
|
+
def upsert_step_relationships(
|
|
1030
|
+
self,
|
|
1031
|
+
*,
|
|
1032
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
1033
|
+
edits: list[upsert_step_relationships_t.StepRelationshipEdit],
|
|
1034
|
+
depends_on: list[str] | None = None,
|
|
1035
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
1036
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
1037
|
+
"""Upsert step relationships on a recipe
|
|
1038
|
+
|
|
1039
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
1040
|
+
"""
|
|
1041
|
+
args = upsert_step_relationships_t.Arguments(
|
|
1042
|
+
recipe_key=recipe_key,
|
|
1043
|
+
edits=edits,
|
|
1044
|
+
)
|
|
1045
|
+
json_data = serialize_for_api(args)
|
|
1046
|
+
|
|
1047
|
+
batch_reference = str(uuid.uuid4())
|
|
1048
|
+
|
|
1049
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
1050
|
+
path=async_batch_t.AsyncBatchRequestPath.UPSERT_STEP_RELATIONSHIPS,
|
|
1051
|
+
data=json_data,
|
|
1052
|
+
depends_on=depends_on,
|
|
1053
|
+
batch_reference=batch_reference,
|
|
1054
|
+
)
|
|
1055
|
+
|
|
1056
|
+
self._enqueue(req)
|
|
1057
|
+
|
|
1058
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
1059
|
+
path=req.path,
|
|
1060
|
+
batch_reference=req.batch_reference,
|
|
1061
|
+
)
|
|
@@ -53,6 +53,8 @@ class AsyncBatchRequestPath(StrEnum):
|
|
|
53
53
|
LOCK_ENTITY = "entity/lock_entity"
|
|
54
54
|
UNLOCK_ENTITY = "entity/unlock_entity"
|
|
55
55
|
RUN_TRIGGER = "triggers/run_trigger"
|
|
56
|
+
UPSERT_STEP_RELATIONSHIPS = "recipes/upsert_step_relationships"
|
|
57
|
+
UPSERT_RECIPE_WORKFLOW_STEP = "recipes/upsert_recipe_workflow_step"
|
|
56
58
|
|
|
57
59
|
|
|
58
60
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/client_base.py
CHANGED
|
@@ -8,6 +8,7 @@ import typing # noqa: F401
|
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
10
|
from pkgs.serialization import OpaqueKey
|
|
11
|
+
import uncountable.types.api.file_folders.add_file_to_folder as add_file_to_folder_t
|
|
11
12
|
import uncountable.types.api.notebooks.add_notebook_content as add_notebook_content_t
|
|
12
13
|
import uncountable.types.api.recipes.add_recipe_to_project as add_recipe_to_project_t
|
|
13
14
|
import uncountable.types.api.recipes.add_time_series_data as add_time_series_data_t
|
|
@@ -24,7 +25,6 @@ import uncountable.types.api.runsheet.complete_async_upload as complete_async_up
|
|
|
24
25
|
import uncountable.types.api.chemical.convert_chemical_formats as convert_chemical_formats_t
|
|
25
26
|
import uncountable.types.api.entity.create_entities as create_entities_t
|
|
26
27
|
import uncountable.types.api.entity.create_entity as create_entity_t
|
|
27
|
-
import uncountable.types.api.files.create_file_record as create_file_record_t
|
|
28
28
|
import uncountable.types.api.inputs.create_inputs as create_inputs_t
|
|
29
29
|
import uncountable.types.api.recipes.create_mix_order as create_mix_order_t
|
|
30
30
|
import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
|
|
@@ -86,6 +86,7 @@ import uncountable.types.api.integrations.push_notification as push_notification
|
|
|
86
86
|
from uncountable.types import recipe_identifiers_t
|
|
87
87
|
from uncountable.types import recipe_links_t
|
|
88
88
|
from uncountable.types import recipe_metadata_t
|
|
89
|
+
from uncountable.types import recipe_workflow_step_types_t
|
|
89
90
|
from uncountable.types import recipe_workflow_steps_t
|
|
90
91
|
import uncountable.types.api.integrations.register_sockets_token as register_sockets_token_t
|
|
91
92
|
import uncountable.types.api.recipes.remove_recipe_from_project as remove_recipe_from_project_t
|
|
@@ -119,6 +120,8 @@ import uncountable.types.api.outputs.update_output_condition_parameter as update
|
|
|
119
120
|
from uncountable.types import uploader_t
|
|
120
121
|
import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
|
|
121
122
|
import uncountable.types.api.field_options.upsert_field_options as upsert_field_options_t
|
|
123
|
+
import uncountable.types.api.recipes.upsert_recipe_workflow_step as upsert_recipe_workflow_step_t
|
|
124
|
+
import uncountable.types.api.recipes.upsert_step_relationships as upsert_step_relationships_t
|
|
122
125
|
from abc import ABC, abstractmethod
|
|
123
126
|
import dataclasses
|
|
124
127
|
|
|
@@ -139,6 +142,30 @@ class ClientMethods(ABC):
|
|
|
139
142
|
def do_request(self, *, api_request: APIRequest, return_type: type[DT]) -> DT:
|
|
140
143
|
...
|
|
141
144
|
|
|
145
|
+
def add_file_to_folder(
|
|
146
|
+
self,
|
|
147
|
+
*,
|
|
148
|
+
file_id: base_t.ObjectId,
|
|
149
|
+
folder_key: identifier_t.IdentifierKey,
|
|
150
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
151
|
+
) -> add_file_to_folder_t.Data:
|
|
152
|
+
"""Add a previously uploaded file to a folder in the Files repository. This is the second step of a two-step upload workflow: first upload the file via file_upload/external_create_file_record to obtain a file_id, then call this endpoint to place it in a target folder. Returns the created document's ID in result_id.
|
|
153
|
+
|
|
154
|
+
:param file_id: ID of the file upload returned by file_upload/external_create_file_record
|
|
155
|
+
:param folder_key: Target folder to place the file in. Use type 'id' with a folder ID, or type 'ref_name' with 'root' for the top-level folder.
|
|
156
|
+
"""
|
|
157
|
+
args = add_file_to_folder_t.Arguments(
|
|
158
|
+
file_id=file_id,
|
|
159
|
+
folder_key=folder_key,
|
|
160
|
+
)
|
|
161
|
+
api_request = APIRequest(
|
|
162
|
+
method=add_file_to_folder_t.ENDPOINT_METHOD,
|
|
163
|
+
endpoint=add_file_to_folder_t.ENDPOINT_PATH,
|
|
164
|
+
args=args,
|
|
165
|
+
request_options=_request_options,
|
|
166
|
+
)
|
|
167
|
+
return self.do_request(api_request=api_request, return_type=add_file_to_folder_t.Data)
|
|
168
|
+
|
|
142
169
|
def add_notebook_content(
|
|
143
170
|
self,
|
|
144
171
|
*,
|
|
@@ -469,23 +496,6 @@ class ClientMethods(ABC):
|
|
|
469
496
|
)
|
|
470
497
|
return self.do_request(api_request=api_request, return_type=create_entity_t.Data)
|
|
471
498
|
|
|
472
|
-
def create_file_record(
|
|
473
|
-
self,
|
|
474
|
-
*,
|
|
475
|
-
_request_options: client_config_t.RequestOptions | None = None,
|
|
476
|
-
) -> create_file_record_t.Data:
|
|
477
|
-
"""Upload Files to Uncountable and retrieve the File Id. File bytes must be included in a multi-part form field that shares its name with the uploaded file.
|
|
478
|
-
|
|
479
|
-
"""
|
|
480
|
-
args = create_file_record_t.Arguments()
|
|
481
|
-
api_request = APIRequest(
|
|
482
|
-
method=create_file_record_t.ENDPOINT_METHOD,
|
|
483
|
-
endpoint=create_file_record_t.ENDPOINT_PATH,
|
|
484
|
-
args=args,
|
|
485
|
-
request_options=_request_options,
|
|
486
|
-
)
|
|
487
|
-
return self.do_request(api_request=api_request, return_type=create_file_record_t.Data)
|
|
488
|
-
|
|
489
499
|
def external_create_inputs(
|
|
490
500
|
self,
|
|
491
501
|
*,
|
|
@@ -569,6 +579,7 @@ class ClientMethods(ABC):
|
|
|
569
579
|
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
|
|
570
580
|
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
|
|
571
581
|
definition_key: identifier_t.IdentifierKey | None = None,
|
|
582
|
+
recipe_key: identifier_t.IdentifierKey | None = None,
|
|
572
583
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
573
584
|
) -> create_recipe_t.Data:
|
|
574
585
|
"""Returns the id of the recipe being created.
|
|
@@ -579,8 +590,9 @@ class ClientMethods(ABC):
|
|
|
579
590
|
:param workflow_id: The identifier of the workflow to create the recipe with
|
|
580
591
|
:param workflow_variant_id: The identifier of the workflow variant to create the recipe with
|
|
581
592
|
:param recipe_metadata: Metadata values to populate the recipe with
|
|
582
|
-
:param identifiers: A recipe won't be created if it matches the identifier. An identifier must be unique in the schema
|
|
593
|
+
:param identifiers: [DEPRECATED] - use `recipeKey`. A recipe won't be created if it matches the identifier. An identifier must be unique in the schema. An error will be raised if an argument is provided to both `recipeKey` and `identifiers` properties.
|
|
583
594
|
:param definition_key: The entity definition identifier, default is used if not supplied
|
|
595
|
+
:param recipe_key: If this identifier matches an existing recipe, the id of the existing recipe will be returned and no update will occur. Use the `lookup_entity` endpoint to match an existing recipe based on a set of field values.
|
|
584
596
|
"""
|
|
585
597
|
args = create_recipe_t.Arguments(
|
|
586
598
|
name=name,
|
|
@@ -591,6 +603,7 @@ class ClientMethods(ABC):
|
|
|
591
603
|
recipe_metadata=recipe_metadata,
|
|
592
604
|
identifiers=identifiers,
|
|
593
605
|
definition_key=definition_key,
|
|
606
|
+
recipe_key=recipe_key,
|
|
594
607
|
)
|
|
595
608
|
api_request = APIRequest(
|
|
596
609
|
method=create_recipe_t.ENDPOINT_METHOD,
|
|
@@ -2357,6 +2370,7 @@ class ClientMethods(ABC):
|
|
|
2357
2370
|
update_type: post_base_t.UpdateType,
|
|
2358
2371
|
requirement_type: update_output_condition_parameter_t.ConditionParameterRequirementType | None = None,
|
|
2359
2372
|
material_family_key: identifier_t.IdentifierKey | None = None,
|
|
2373
|
+
analytical_method_keys: list[identifier_t.IdentifierKey] | None = None,
|
|
2360
2374
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
2361
2375
|
) -> update_output_condition_parameter_t.Data:
|
|
2362
2376
|
"""Adds, updates, or removes a condition parameter on an output
|
|
@@ -2366,6 +2380,7 @@ class ClientMethods(ABC):
|
|
|
2366
2380
|
:param update_type: Use "append" to add or update, "remove" to delete
|
|
2367
2381
|
:param requirement_type: The requirement level for the condition parameter. Required when update_type is "append"
|
|
2368
2382
|
:param material_family_key: The material family context. If omitted, creates a global setting
|
|
2383
|
+
:param analytical_method_keys: When update_type is "append", sets the analytical methods for this condition parameter on the output. The provided list replaces the existing set of analytical methods.
|
|
2369
2384
|
"""
|
|
2370
2385
|
args = update_output_condition_parameter_t.Arguments(
|
|
2371
2386
|
output_key=output_key,
|
|
@@ -2373,6 +2388,7 @@ class ClientMethods(ABC):
|
|
|
2373
2388
|
update_type=update_type,
|
|
2374
2389
|
requirement_type=requirement_type,
|
|
2375
2390
|
material_family_key=material_family_key,
|
|
2391
|
+
analytical_method_keys=analytical_method_keys,
|
|
2376
2392
|
)
|
|
2377
2393
|
api_request = APIRequest(
|
|
2378
2394
|
method=update_output_condition_parameter_t.ENDPOINT_METHOD,
|
|
@@ -2433,3 +2449,51 @@ class ClientMethods(ABC):
|
|
|
2433
2449
|
request_options=_request_options,
|
|
2434
2450
|
)
|
|
2435
2451
|
return self.do_request(api_request=api_request, return_type=upsert_field_options_t.Data)
|
|
2452
|
+
|
|
2453
|
+
def upsert_recipe_workflow_step(
|
|
2454
|
+
self,
|
|
2455
|
+
*,
|
|
2456
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
2457
|
+
data_source: recipe_workflow_step_types_t.RecipeWorkflowStepDataSource,
|
|
2458
|
+
location: recipe_workflow_step_types_t.RecipeWorkflowStepLocation,
|
|
2459
|
+
recipe_workflow_step_key: identifier_t.IdentifierKey | None = None,
|
|
2460
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
2461
|
+
) -> upsert_recipe_workflow_step_t.Data:
|
|
2462
|
+
"""Create or update a recipe workflow step on a recipe
|
|
2463
|
+
|
|
2464
|
+
"""
|
|
2465
|
+
args = upsert_recipe_workflow_step_t.Arguments(
|
|
2466
|
+
recipe_key=recipe_key,
|
|
2467
|
+
data_source=data_source,
|
|
2468
|
+
location=location,
|
|
2469
|
+
recipe_workflow_step_key=recipe_workflow_step_key,
|
|
2470
|
+
)
|
|
2471
|
+
api_request = APIRequest(
|
|
2472
|
+
method=upsert_recipe_workflow_step_t.ENDPOINT_METHOD,
|
|
2473
|
+
endpoint=upsert_recipe_workflow_step_t.ENDPOINT_PATH,
|
|
2474
|
+
args=args,
|
|
2475
|
+
request_options=_request_options,
|
|
2476
|
+
)
|
|
2477
|
+
return self.do_request(api_request=api_request, return_type=upsert_recipe_workflow_step_t.Data)
|
|
2478
|
+
|
|
2479
|
+
def upsert_step_relationships(
|
|
2480
|
+
self,
|
|
2481
|
+
*,
|
|
2482
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
2483
|
+
edits: list[upsert_step_relationships_t.StepRelationshipEdit],
|
|
2484
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
2485
|
+
) -> upsert_step_relationships_t.Data:
|
|
2486
|
+
"""Upsert step relationships on a recipe
|
|
2487
|
+
|
|
2488
|
+
"""
|
|
2489
|
+
args = upsert_step_relationships_t.Arguments(
|
|
2490
|
+
recipe_key=recipe_key,
|
|
2491
|
+
edits=edits,
|
|
2492
|
+
)
|
|
2493
|
+
api_request = APIRequest(
|
|
2494
|
+
method=upsert_step_relationships_t.ENDPOINT_METHOD,
|
|
2495
|
+
endpoint=upsert_step_relationships_t.ENDPOINT_PATH,
|
|
2496
|
+
args=args,
|
|
2497
|
+
request_options=_request_options,
|
|
2498
|
+
)
|
|
2499
|
+
return self.do_request(api_request=api_request, return_type=upsert_step_relationships_t.Data)
|
uncountable/types/entity_t.py
CHANGED
|
@@ -77,6 +77,7 @@ __all__: list[str] = [
|
|
|
77
77
|
"equipment": "Equipment",
|
|
78
78
|
"equipment_maintenance": "Equipment Maintenance",
|
|
79
79
|
"equipment_type": "Equipment Type",
|
|
80
|
+
"external_ai_connector": "External AI Connector",
|
|
80
81
|
"external_ai_model": "External AI Model",
|
|
81
82
|
"external_ai_session": "External AI Session",
|
|
82
83
|
"experiment_group": "Experiment Group",
|
|
@@ -120,6 +121,7 @@ __all__: list[str] = [
|
|
|
120
121
|
"measurement_group_input": "Request Measurement Group Input",
|
|
121
122
|
"measurement_group_recipe": "Request Measurement Group Experiment",
|
|
122
123
|
"measurement_requested": "Measurement Requested",
|
|
124
|
+
"milestone": "Milestone",
|
|
123
125
|
"ml_job": "Batch Processing Job",
|
|
124
126
|
"naming_scheme": "Naming Scheme",
|
|
125
127
|
"naming_counter": "Naming Counter",
|
|
@@ -305,6 +307,7 @@ class EntityType(StrEnum):
|
|
|
305
307
|
EQUIPMENT = "equipment"
|
|
306
308
|
EQUIPMENT_MAINTENANCE = "equipment_maintenance"
|
|
307
309
|
EQUIPMENT_TYPE = "equipment_type"
|
|
310
|
+
EXTERNAL_AI_CONNECTOR = "external_ai_connector"
|
|
308
311
|
EXTERNAL_AI_MODEL = "external_ai_model"
|
|
309
312
|
EXTERNAL_AI_SESSION = "external_ai_session"
|
|
310
313
|
EXPERIMENT_GROUP = "experiment_group"
|
|
@@ -348,6 +351,7 @@ class EntityType(StrEnum):
|
|
|
348
351
|
MEASUREMENT_GROUP_INPUT = "measurement_group_input"
|
|
349
352
|
MEASUREMENT_GROUP_RECIPE = "measurement_group_recipe"
|
|
350
353
|
MEASUREMENT_REQUESTED = "measurement_requested"
|
|
354
|
+
MILESTONE = "milestone"
|
|
351
355
|
ML_JOB = "ml_job"
|
|
352
356
|
NAMING_SCHEME = "naming_scheme"
|
|
353
357
|
NAMING_COUNTER = "naming_counter"
|
uncountable/types/listing.py
CHANGED
|
@@ -30,6 +30,7 @@ from .listing_t import FilterScalarType as FilterScalarType
|
|
|
30
30
|
from .listing_t import FilterIdType as FilterIdType
|
|
31
31
|
from .listing_t import StringFilterValue as StringFilterValue
|
|
32
32
|
from .listing_t import FilterSpecEquals as FilterSpecEquals
|
|
33
|
+
from .listing_t import FilterSpecEqualsBoolean as FilterSpecEqualsBoolean
|
|
33
34
|
from .listing_t import FilterSpecInclude as FilterSpecInclude
|
|
34
35
|
from .listing_t import FilterSpecIStrContains as FilterSpecIStrContains
|
|
35
36
|
from .listing_t import FilterSpecIStrStartsWith as FilterSpecIStrStartsWith
|
uncountable/types/listing_t.py
CHANGED
|
@@ -33,6 +33,7 @@ __all__: list[str] = [
|
|
|
33
33
|
"FilterSpec",
|
|
34
34
|
"FilterSpecBase",
|
|
35
35
|
"FilterSpecEquals",
|
|
36
|
+
"FilterSpecEqualsBoolean",
|
|
36
37
|
"FilterSpecExists",
|
|
37
38
|
"FilterSpecGeq",
|
|
38
39
|
"FilterSpecGreater",
|
|
@@ -324,6 +325,7 @@ ColumnIdentifier = typing.Annotated[
|
|
|
324
325
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
325
326
|
class FilterRelation(StrEnum):
|
|
326
327
|
EQUALS = "equals"
|
|
328
|
+
EQUALS_BOOLEAN = "equals_boolean"
|
|
327
329
|
GREATER = "greater"
|
|
328
330
|
GEQ = "geq"
|
|
329
331
|
LESS = "less"
|
|
@@ -382,6 +384,17 @@ class FilterSpecEquals(FilterSpecBase):
|
|
|
382
384
|
value: FilterScalarType
|
|
383
385
|
|
|
384
386
|
|
|
387
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
388
|
+
@serial_class(
|
|
389
|
+
named_type_path="sdk.listing.FilterSpecEqualsBoolean",
|
|
390
|
+
parse_require={"relation"},
|
|
391
|
+
)
|
|
392
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
|
|
393
|
+
class FilterSpecEqualsBoolean(FilterSpecBase):
|
|
394
|
+
relation: typing.Literal[FilterRelation.EQUALS_BOOLEAN] = FilterRelation.EQUALS_BOOLEAN
|
|
395
|
+
value: bool
|
|
396
|
+
|
|
397
|
+
|
|
385
398
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
386
399
|
@serial_class(
|
|
387
400
|
named_type_path="sdk.listing.FilterSpecInclude",
|
|
@@ -475,12 +488,13 @@ class FilterSpecLeq(FilterSpecBase):
|
|
|
475
488
|
|
|
476
489
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
477
490
|
FilterSpec = typing.Annotated[
|
|
478
|
-
FilterSpecEquals | FilterSpecGreater | FilterSpecGeq | FilterSpecLeq | FilterSpecIStrContains | FilterSpecIStrStartsWith | FilterSpecInclude | FilterSpecExists | FilterSpecLess,
|
|
491
|
+
FilterSpecEquals | FilterSpecEqualsBoolean | FilterSpecGreater | FilterSpecGeq | FilterSpecLeq | FilterSpecIStrContains | FilterSpecIStrStartsWith | FilterSpecInclude | FilterSpecExists | FilterSpecLess,
|
|
479
492
|
serial_union_annotation(
|
|
480
493
|
named_type_path="sdk.listing.FilterSpec",
|
|
481
494
|
discriminator="relation",
|
|
482
495
|
discriminator_map={
|
|
483
496
|
"equals": FilterSpecEquals,
|
|
497
|
+
"equals_boolean": FilterSpecEqualsBoolean,
|
|
484
498
|
"greater": FilterSpecGreater,
|
|
485
499
|
"geq": FilterSpecGeq,
|
|
486
500
|
"leq": FilterSpecLeq,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ruff: noqa: E402 Q003
|
|
2
|
+
# fmt: off
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
5
|
+
# Kept only for SDK backwards compatibility
|
|
6
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepDataSourceType as RecipeWorkflowStepDataSourceType
|
|
7
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepDataSourceBase as RecipeWorkflowStepDataSourceBase
|
|
8
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepDataSourceWorkflowStep as RecipeWorkflowStepDataSourceWorkflowStep
|
|
9
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep as RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep
|
|
10
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepDataSource as RecipeWorkflowStepDataSource
|
|
11
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepLocationType as RecipeWorkflowStepLocationType
|
|
12
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepLocationBase as RecipeWorkflowStepLocationBase
|
|
13
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepLocationAtEnd as RecipeWorkflowStepLocationAtEnd
|
|
14
|
+
from .recipe_workflow_step_types_t import RecipeWorkflowStepLocation as RecipeWorkflowStepLocation
|
|
15
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
|
+
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
12
|
+
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
14
|
+
from . import identifier_t
|
|
15
|
+
from . import recipe_workflow_steps_t
|
|
16
|
+
|
|
17
|
+
__all__: list[str] = [
|
|
18
|
+
"RecipeWorkflowStepDataSource",
|
|
19
|
+
"RecipeWorkflowStepDataSourceBase",
|
|
20
|
+
"RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep",
|
|
21
|
+
"RecipeWorkflowStepDataSourceType",
|
|
22
|
+
"RecipeWorkflowStepDataSourceWorkflowStep",
|
|
23
|
+
"RecipeWorkflowStepLocation",
|
|
24
|
+
"RecipeWorkflowStepLocationAtEnd",
|
|
25
|
+
"RecipeWorkflowStepLocationBase",
|
|
26
|
+
"RecipeWorkflowStepLocationType",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
31
|
+
class RecipeWorkflowStepDataSourceType(StrEnum):
|
|
32
|
+
WORKFLOW_STEP = "workflow_step"
|
|
33
|
+
COPY_RECIPE_WORKFLOW_STEP = "copy_recipe_workflow_step"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
37
|
+
@serial_class(
|
|
38
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepDataSourceBase",
|
|
39
|
+
)
|
|
40
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
|
+
class RecipeWorkflowStepDataSourceBase:
|
|
42
|
+
type: RecipeWorkflowStepDataSourceType
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
46
|
+
@serial_class(
|
|
47
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepDataSourceWorkflowStep",
|
|
48
|
+
parse_require={"type"},
|
|
49
|
+
)
|
|
50
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
51
|
+
class RecipeWorkflowStepDataSourceWorkflowStep(RecipeWorkflowStepDataSourceBase):
|
|
52
|
+
type: typing.Literal[RecipeWorkflowStepDataSourceType.WORKFLOW_STEP] = RecipeWorkflowStepDataSourceType.WORKFLOW_STEP
|
|
53
|
+
workflow_step_key: identifier_t.IdentifierKey
|
|
54
|
+
name: str | None = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
58
|
+
@serial_class(
|
|
59
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep",
|
|
60
|
+
parse_require={"type"},
|
|
61
|
+
)
|
|
62
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
63
|
+
class RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep(RecipeWorkflowStepDataSourceBase):
|
|
64
|
+
type: typing.Literal[RecipeWorkflowStepDataSourceType.COPY_RECIPE_WORKFLOW_STEP] = RecipeWorkflowStepDataSourceType.COPY_RECIPE_WORKFLOW_STEP
|
|
65
|
+
source_recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifierKey
|
|
66
|
+
name: str | None = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
70
|
+
RecipeWorkflowStepDataSource = typing.Annotated[
|
|
71
|
+
RecipeWorkflowStepDataSourceWorkflowStep | RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep,
|
|
72
|
+
serial_union_annotation(
|
|
73
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepDataSource",
|
|
74
|
+
discriminator="type",
|
|
75
|
+
discriminator_map={
|
|
76
|
+
"workflow_step": RecipeWorkflowStepDataSourceWorkflowStep,
|
|
77
|
+
"copy_recipe_workflow_step": RecipeWorkflowStepDataSourceCopyRecipeWorkflowStep,
|
|
78
|
+
},
|
|
79
|
+
),
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
84
|
+
class RecipeWorkflowStepLocationType(StrEnum):
|
|
85
|
+
AT_END = "at_end"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
89
|
+
@serial_class(
|
|
90
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepLocationBase",
|
|
91
|
+
)
|
|
92
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
93
|
+
class RecipeWorkflowStepLocationBase:
|
|
94
|
+
type: RecipeWorkflowStepLocationType
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
98
|
+
@serial_class(
|
|
99
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepLocationAtEnd",
|
|
100
|
+
parse_require={"type"},
|
|
101
|
+
)
|
|
102
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
103
|
+
class RecipeWorkflowStepLocationAtEnd(RecipeWorkflowStepLocationBase):
|
|
104
|
+
type: typing.Literal[RecipeWorkflowStepLocationType.AT_END] = RecipeWorkflowStepLocationType.AT_END
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
108
|
+
RecipeWorkflowStepLocation = typing.Annotated[
|
|
109
|
+
typing.Union[RecipeWorkflowStepLocationAtEnd],
|
|
110
|
+
serial_union_annotation(
|
|
111
|
+
named_type_path="sdk.recipe_workflow_step_types.RecipeWorkflowStepLocation",
|
|
112
|
+
discriminator="type",
|
|
113
|
+
discriminator_map={
|
|
114
|
+
"at_end": RecipeWorkflowStepLocationAtEnd,
|
|
115
|
+
},
|
|
116
|
+
),
|
|
117
|
+
]
|
|
118
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ruff: noqa: E402 Q003
|
|
2
|
+
# fmt: off
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
5
|
+
# Kept only for SDK backwards compatibility
|
|
6
|
+
from .step_relationships_t import StepRelationshipTypeValue as StepRelationshipTypeValue
|
|
7
|
+
from .step_relationships_t import StepRelationshipTypeBase as StepRelationshipTypeBase
|
|
8
|
+
from .step_relationships_t import StepRelationshipTypeIncludeAll as StepRelationshipTypeIncludeAll
|
|
9
|
+
from .step_relationships_t import StepRelationshipTypeIncludeQuantity as StepRelationshipTypeIncludeQuantity
|
|
10
|
+
from .step_relationships_t import StepRelationshipTypeIncludePercentage as StepRelationshipTypeIncludePercentage
|
|
11
|
+
from .step_relationships_t import StepRelationshipTypeAutoFill as StepRelationshipTypeAutoFill
|
|
12
|
+
from .step_relationships_t import StepRelationshipTypeFeed as StepRelationshipTypeFeed
|
|
13
|
+
from .step_relationships_t import StepRelationshipTypeFeedPercentage as StepRelationshipTypeFeedPercentage
|
|
14
|
+
from .step_relationships_t import StepRelationshipType as StepRelationshipType
|
|
15
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
|
+
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
12
|
+
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
14
|
+
from . import recipe_inputs_t
|
|
15
|
+
|
|
16
|
+
__all__: list[str] = [
|
|
17
|
+
"StepRelationshipType",
|
|
18
|
+
"StepRelationshipTypeAutoFill",
|
|
19
|
+
"StepRelationshipTypeBase",
|
|
20
|
+
"StepRelationshipTypeFeed",
|
|
21
|
+
"StepRelationshipTypeFeedPercentage",
|
|
22
|
+
"StepRelationshipTypeIncludeAll",
|
|
23
|
+
"StepRelationshipTypeIncludePercentage",
|
|
24
|
+
"StepRelationshipTypeIncludeQuantity",
|
|
25
|
+
"StepRelationshipTypeValue",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
30
|
+
class StepRelationshipTypeValue(StrEnum):
|
|
31
|
+
INCLUDE_ALL = "include_all"
|
|
32
|
+
INCLUDE_QUANTITY = "include_quantity"
|
|
33
|
+
INCLUDE_PERCENTAGE = "include_percentage"
|
|
34
|
+
AUTO_FILL = "auto_fill"
|
|
35
|
+
FEED = "feed"
|
|
36
|
+
FEED_PERCENTAGE = "feed_percentage"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
+
@serial_class(
|
|
41
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeBase",
|
|
42
|
+
)
|
|
43
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
44
|
+
class StepRelationshipTypeBase:
|
|
45
|
+
type: StepRelationshipTypeValue
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
49
|
+
@serial_class(
|
|
50
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeIncludeAll",
|
|
51
|
+
parse_require={"type"},
|
|
52
|
+
)
|
|
53
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
54
|
+
class StepRelationshipTypeIncludeAll(StepRelationshipTypeBase):
|
|
55
|
+
type: typing.Literal[StepRelationshipTypeValue.INCLUDE_ALL] = StepRelationshipTypeValue.INCLUDE_ALL
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
59
|
+
@serial_class(
|
|
60
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeIncludeQuantity",
|
|
61
|
+
to_string_values={"quantity"},
|
|
62
|
+
parse_require={"type"},
|
|
63
|
+
)
|
|
64
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
65
|
+
class StepRelationshipTypeIncludeQuantity(StepRelationshipTypeBase):
|
|
66
|
+
type: typing.Literal[StepRelationshipTypeValue.INCLUDE_QUANTITY] = StepRelationshipTypeValue.INCLUDE_QUANTITY
|
|
67
|
+
quantity: Decimal
|
|
68
|
+
quantity_basis: recipe_inputs_t.QuantityBasis | None
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
72
|
+
@serial_class(
|
|
73
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeIncludePercentage",
|
|
74
|
+
to_string_values={"quantity"},
|
|
75
|
+
parse_require={"type"},
|
|
76
|
+
)
|
|
77
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
78
|
+
class StepRelationshipTypeIncludePercentage(StepRelationshipTypeBase):
|
|
79
|
+
type: typing.Literal[StepRelationshipTypeValue.INCLUDE_PERCENTAGE] = StepRelationshipTypeValue.INCLUDE_PERCENTAGE
|
|
80
|
+
quantity: Decimal
|
|
81
|
+
quantity_basis: recipe_inputs_t.QuantityBasis | None
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
85
|
+
@serial_class(
|
|
86
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeAutoFill",
|
|
87
|
+
parse_require={"type"},
|
|
88
|
+
)
|
|
89
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
90
|
+
class StepRelationshipTypeAutoFill(StepRelationshipTypeBase):
|
|
91
|
+
type: typing.Literal[StepRelationshipTypeValue.AUTO_FILL] = StepRelationshipTypeValue.AUTO_FILL
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
95
|
+
@serial_class(
|
|
96
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeFeed",
|
|
97
|
+
to_string_values={"feed_rate", "feed_time", "quantity"},
|
|
98
|
+
parse_require={"type"},
|
|
99
|
+
)
|
|
100
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
101
|
+
class StepRelationshipTypeFeed(StepRelationshipTypeBase):
|
|
102
|
+
type: typing.Literal[StepRelationshipTypeValue.FEED] = StepRelationshipTypeValue.FEED
|
|
103
|
+
quantity: Decimal
|
|
104
|
+
quantity_basis: recipe_inputs_t.QuantityBasis | None
|
|
105
|
+
feed_rate: Decimal | None = None
|
|
106
|
+
feed_time: Decimal | None = None
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
110
|
+
@serial_class(
|
|
111
|
+
named_type_path="sdk.step_relationships.StepRelationshipTypeFeedPercentage",
|
|
112
|
+
to_string_values={"feed_rate", "feed_time", "quantity"},
|
|
113
|
+
parse_require={"type"},
|
|
114
|
+
)
|
|
115
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
116
|
+
class StepRelationshipTypeFeedPercentage(StepRelationshipTypeBase):
|
|
117
|
+
type: typing.Literal[StepRelationshipTypeValue.FEED_PERCENTAGE] = StepRelationshipTypeValue.FEED_PERCENTAGE
|
|
118
|
+
quantity: Decimal
|
|
119
|
+
quantity_basis: recipe_inputs_t.QuantityBasis | None
|
|
120
|
+
feed_rate: Decimal | None = None
|
|
121
|
+
feed_time: Decimal | None = None
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
125
|
+
StepRelationshipType = typing.Annotated[
|
|
126
|
+
StepRelationshipTypeIncludeAll | StepRelationshipTypeIncludeQuantity | StepRelationshipTypeIncludePercentage | StepRelationshipTypeAutoFill | StepRelationshipTypeFeed | StepRelationshipTypeFeedPercentage,
|
|
127
|
+
serial_union_annotation(
|
|
128
|
+
named_type_path="sdk.step_relationships.StepRelationshipType",
|
|
129
|
+
discriminator="type",
|
|
130
|
+
discriminator_map={
|
|
131
|
+
"include_all": StepRelationshipTypeIncludeAll,
|
|
132
|
+
"include_quantity": StepRelationshipTypeIncludeQuantity,
|
|
133
|
+
"include_percentage": StepRelationshipTypeIncludePercentage,
|
|
134
|
+
"auto_fill": StepRelationshipTypeAutoFill,
|
|
135
|
+
"feed": StepRelationshipTypeFeed,
|
|
136
|
+
"feed_percentage": StepRelationshipTypeFeedPercentage,
|
|
137
|
+
},
|
|
138
|
+
),
|
|
139
|
+
]
|
|
140
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.162
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -38,6 +38,7 @@ Requires-Dist: simplejson==3.*
|
|
|
38
38
|
Requires-Dist: grpcio==1.78.0
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
|
+
Requires-Dist: azure-storage-file-share==12.*
|
|
41
42
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
43
|
Requires-Dist: msgspec<0.21,>=0.19
|
|
43
44
|
Requires-Dist: tabulate==0.9.0
|
|
@@ -2,7 +2,7 @@ docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
|
|
|
2
2
|
docs/conf.py,sha256=Ky-_Y76T7pwN2aBG-dSF79Av70e7ASgcOXEdQ1qyor4,3542
|
|
3
3
|
docs/index.md,sha256=g4Yi5831fEkywYkkcFohYLkKzSI91SOZF7DxKsm9zgI,3193
|
|
4
4
|
docs/justfile,sha256=WymCEQ6W2A8Ak79iUPmecmuaUNN2htb7STUrz5K7ELE,273
|
|
5
|
-
docs/requirements.txt,sha256=
|
|
5
|
+
docs/requirements.txt,sha256=V1MVHqwMMjatcTNnZflt-n1t0eOVPkAZajkNfI6ggNo,172
|
|
6
6
|
docs/integration_examples/create_ingredient.md,sha256=bzTQ943YhINxa3HQylEA26rbAsjr6HvvN_HkVkrzUeA,1547
|
|
7
7
|
docs/integration_examples/create_output.md,sha256=aDn2TjzKgY-HnxnvgsZS578cvajmHpF1y2HKkHfdtd4,2104
|
|
8
8
|
docs/integration_examples/index.md,sha256=LaQiK1fT8XLtazxLvPr2YjIf3Jh_Mi-goOMLatiozK8,85
|
|
@@ -159,10 +159,10 @@ uncountable/integration/queue_runner/datastore/model.py,sha256=YPqlULU7FxuwjmhXG
|
|
|
159
159
|
uncountable/integration/secret_retrieval/__init__.py,sha256=3QXVj35w8rRMxVvmmsViFYDi3lcb3g70incfalOEm6o,87
|
|
160
160
|
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=LBEf18KHtXZxg-ZZ80stJ1vW39AWf0CQllP6pNu3Eq8,2994
|
|
161
161
|
uncountable/integration/webhook_server/entrypoint.py,sha256=RQndrVCKdaVBk-xJ592eGqeN-O0IOM7flXDGoJ2HXsc,3505
|
|
162
|
-
uncountable/types/__init__.py,sha256=
|
|
162
|
+
uncountable/types/__init__.py,sha256=FTfD4Xlv77YSf3SrclyexVxEzJcIme-0MOq3oZBCi3o,12990
|
|
163
163
|
uncountable/types/async_batch.py,sha256=yCCWrrLQfxXVqZp-KskxLBNkNmuELdz4PJjx8ULppgs,662
|
|
164
|
-
uncountable/types/async_batch_processor.py,sha256=
|
|
165
|
-
uncountable/types/async_batch_t.py,sha256=
|
|
164
|
+
uncountable/types/async_batch_processor.py,sha256=GMEoEqh0BClpYv9ZGJZLT9CUrsw-XtD1XA-rmSnE61s,40266
|
|
165
|
+
uncountable/types/async_batch_t.py,sha256=AA2Jdf1z67qMocK81XlhVmVWp5j_ZCqQwks7GbR5r04,4310
|
|
166
166
|
uncountable/types/async_jobs.py,sha256=JI0ScfawaqMRbJ2jbgW3YQLhijPnBeYdMnZJjygSxHg,322
|
|
167
167
|
uncountable/types/async_jobs_t.py,sha256=u4xd3i512PZ-9592Q2ZgWh_faMiI4UMm0F_gOmZnerI,1389
|
|
168
168
|
uncountable/types/auth_retrieval.py,sha256=770zjN1K9EF5zs1Xml7x6ke6Hkze7rcMT5FdDVCIl9M,549
|
|
@@ -173,7 +173,7 @@ uncountable/types/calculations.py,sha256=fApOFpgBemt_t7IVneVR0VdI3X5EOxiG6Xhzr6R
|
|
|
173
173
|
uncountable/types/calculations_t.py,sha256=pl-lhjyDQuj11Sf9g1-0BsSkN7Ez8UxDp8-KMQ_3enM,709
|
|
174
174
|
uncountable/types/chemical_structure.py,sha256=ujyragaD26-QG5jgKnWhO7TN3N1V9b_04T2WhqNYxxo,281
|
|
175
175
|
uncountable/types/chemical_structure_t.py,sha256=VFFyits_vx4t5L2euu_qFiSpsGJjURkDPr3ISnr3nPc,855
|
|
176
|
-
uncountable/types/client_base.py,sha256=
|
|
176
|
+
uncountable/types/client_base.py,sha256=piLkQpFo83kpPTIgFqLNb6mtEGcOC_h_IElsmcK5kBg,111793
|
|
177
177
|
uncountable/types/client_config.py,sha256=M7FZ0m_lGmBsIYcMn8pm92DdoVzrLpzd8sH6DqTQLKo,456
|
|
178
178
|
uncountable/types/client_config_t.py,sha256=m1sVg0zaVf8DvQKaDJH_fG1abU2-VZZH0wOIMDjlECU,1944
|
|
179
179
|
uncountable/types/curves.py,sha256=QyEyC20jsG-LGKVx6miiF-w70vKMwNkILFBDIJ5Ok9g,345
|
|
@@ -181,7 +181,7 @@ uncountable/types/curves_t.py,sha256=DxYepdC3QKKR7mepOOBoyarNcFZQdUa5ZYH-hwCY3BI
|
|
|
181
181
|
uncountable/types/data.py,sha256=u2isf4XEug3Eu-xSIoqGaCQmW2dFaKBHCkP_WKYwwBc,500
|
|
182
182
|
uncountable/types/data_t.py,sha256=vFoypK_WMGfN28r1sSlDYHZNUdBQC0XCN7-_Mlo4FJk,2832
|
|
183
183
|
uncountable/types/entity.py,sha256=Zclk1LYcRaYrMDhqyCjMSLEg0fE6_q8LHvV22Qvscgs,566
|
|
184
|
-
uncountable/types/entity_t.py,sha256=
|
|
184
|
+
uncountable/types/entity_t.py,sha256=Y6IE-ylyikpwH55hV40mhjr1VMoQEj3isdDUyxx8KOs,25778
|
|
185
185
|
uncountable/types/experiment_groups.py,sha256=qUpFOx1AKgzaT_4khCOv5Xs6jwiQGbvHH-GUh3v1nv4,288
|
|
186
186
|
uncountable/types/experiment_groups_t.py,sha256=29Ct-WPejpYMuGfnFfOoosU9iSfjzxpabpBX6oTPFUA,761
|
|
187
187
|
uncountable/types/exports.py,sha256=VMmxUO2PpV1Y63hZ2AnVor4H-B6aswJ7YpSru_u89lU,334
|
|
@@ -208,8 +208,8 @@ uncountable/types/integrations.py,sha256=0fOhtbLIOl9w1GP9J3PTagRU8mjOKV48JNLLH3S
|
|
|
208
208
|
uncountable/types/integrations_t.py,sha256=ihyhuMDKtJarQ19OppS0fYpJUYd8o5-w6YCDE440O-w,1871
|
|
209
209
|
uncountable/types/job_definition.py,sha256=hYp5jPYLLYm3NKEqzQrQfXL0Ms5KgEQGTON13YWSPYk,1804
|
|
210
210
|
uncountable/types/job_definition_t.py,sha256=3rdN-wNtswOEoWssbv2kVGw_J8fiUZRhCjCSr1h1c3U,9662
|
|
211
|
-
uncountable/types/listing.py,sha256=
|
|
212
|
-
uncountable/types/listing_t.py,sha256=
|
|
211
|
+
uncountable/types/listing.py,sha256=U-0-opI0Wgxzmwp4y0qhyT26aK_BjaqdlFVpjud-ryk,2838
|
|
212
|
+
uncountable/types/listing_t.py,sha256=pMvBcIZJY_94-fS2paRl0DxbWJPNYVeF6OYYyX-ppgM,18942
|
|
213
213
|
uncountable/types/notices.py,sha256=j3BWaogmbLsVSqxdk6GZEnzIj30f0KVdNTP660kMeMk,346
|
|
214
214
|
uncountable/types/notices_t.py,sha256=GibfAH5Ed68PqoNFyjXR9vPgQLVwH1zjaFC8EL_Ysf8,1021
|
|
215
215
|
uncountable/types/notifications.py,sha256=ZGr1ULMG3cPMED83NbMjrjmgVzCeOTS1Tc-pFTNuY4Y,600
|
|
@@ -240,6 +240,8 @@ uncountable/types/recipe_step_relationships.py,sha256=qx2-_YA0Q4PuiwcM0BDixgnaxV
|
|
|
240
240
|
uncountable/types/recipe_step_relationships_t.py,sha256=wwaAGq8NYkg9430BDdxFd89c4ubsJRft94FmrI3HPwM,520
|
|
241
241
|
uncountable/types/recipe_tags.py,sha256=tKIwHY677lZCxrmOk1bbuZQgDuf1n1cNyp6c5r1uRbo,270
|
|
242
242
|
uncountable/types/recipe_tags_t.py,sha256=zsA9NuIKsJg9kkN32gMxU32OjkJr2v2thgPgu7DXkCw,731
|
|
243
|
+
uncountable/types/recipe_workflow_step_types.py,sha256=ibdK4aKoy2iRD7wC85BR34Qq8geTnpKIBTLR5NjmVMQ,1229
|
|
244
|
+
uncountable/types/recipe_workflow_step_types_t.py,sha256=Z5Kd4zGldAuJhPv63GpJwjKIPjNQqYLfY-JRJGDhLbI,4597
|
|
243
245
|
uncountable/types/recipe_workflow_steps.py,sha256=fb55_sREdeZrtguIZOuy4ZcTLbRBNAxQ3A0oGbH8muA,950
|
|
244
246
|
uncountable/types/recipe_workflow_steps_t.py,sha256=sOpRcH2wGbqQ7UY9DhkaPaZcdVjMDx4ZrycEH3WLB7g,3671
|
|
245
247
|
uncountable/types/recipes.py,sha256=6Z7bagYXX15kGlhYt_OFiYSD3lqFp4H0EquI1fUfYyk,286
|
|
@@ -256,6 +258,8 @@ uncountable/types/sockets.py,sha256=OogyQ-pLyhJkV6JrBSLTOz9v6cDViYY5QM1ScSXPU3U,
|
|
|
256
258
|
uncountable/types/sockets_t.py,sha256=s--y5nbN4uHA2HVKW6rOz3HwIMk3MT2VKGXCA7reXb4,5608
|
|
257
259
|
uncountable/types/specs.py,sha256=e2bsHJl2rbGn52k2Gg5nM4_0mON6eGm4BQKrxi3qpLM,258
|
|
258
260
|
uncountable/types/specs_t.py,sha256=WuFwuHGzbz-Z9x1hH9Tyz3tuk8HXqbQsnK6dmtyv5H0,534
|
|
261
|
+
uncountable/types/step_relationships.py,sha256=I6t7tj-VmHAhH8YpJPIUFBxPaRiXU_Zg-4Kf0g0pfHY,1073
|
|
262
|
+
uncountable/types/step_relationships_t.py,sha256=53zMcuh5jRFynjuHUVMVx4BJHMVCVD9a_mwsUEezq1Q,5670
|
|
259
263
|
uncountable/types/units.py,sha256=yxuddayiE8cnzrjQiIsURisWc-Vm1F37uyS3fjM--Ao,254
|
|
260
264
|
uncountable/types/units_t.py,sha256=d62vY2ETqIgMHASw_IcREwDDqKAqI-vPnoBOqzMt4-o,704
|
|
261
265
|
uncountable/types/uploader.py,sha256=odT7wkBfXUf1MoFy6W5JzZ-WY8JX0vO6odGOS_C2Voo,1222
|
|
@@ -296,9 +300,9 @@ uncountable/types/api/equipment/associate_equipment_input.py,sha256=K3LBXzmtOLgC
|
|
|
296
300
|
uncountable/types/api/field_options/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
297
301
|
uncountable/types/api/field_options/upsert_field_options.py,sha256=yhgbPXd75fTDzXJhZg2fiv3Nq_Ks6dhwDv6Q-6EjmZo,1631
|
|
298
302
|
uncountable/types/api/file_folders/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
303
|
+
uncountable/types/api/file_folders/add_file_to_folder.py,sha256=h8mGJss2F-pWM2OaJFUlqTRyWbXx8Gz1GXGk1s5yDVo,1265
|
|
299
304
|
uncountable/types/api/file_folders/modify_file_system.py,sha256=oklJa6g_KC18mQA-kkFmICO9pyGKLQNNG_QSYegkdkE,2815
|
|
300
305
|
uncountable/types/api/files/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
301
|
-
uncountable/types/api/files/create_file_record.py,sha256=joaPDTxCD518RjB0-dWVWoBYGpPqHWYYsqFzsVIt5MI,1167
|
|
302
306
|
uncountable/types/api/files/download_file.py,sha256=pxFEha3PglQ767sSh3RjrT1a2Wu1P9uetNuEoBwAO24,3372
|
|
303
307
|
uncountable/types/api/id_source/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
304
308
|
uncountable/types/api/id_source/list_id_source.py,sha256=td3pA624Sv7tSpg5zifhx42AM203-m875i9JXo3P7kk,1542
|
|
@@ -331,7 +335,7 @@ uncountable/types/api/outputs/get_output_data.py,sha256=luGoQZzbZsGIzo2dXMD5f6rD
|
|
|
331
335
|
uncountable/types/api/outputs/get_output_names.py,sha256=myxLS1YedzWlKs3st64jmM9XMUphrUltxKISBz4pVSo,1539
|
|
332
336
|
uncountable/types/api/outputs/get_output_organization.py,sha256=-oi9LjPVH_UzloxwFJSAoT8OPZLuqF-KoeuSQEmcn90,6609
|
|
333
337
|
uncountable/types/api/outputs/resolve_output_conditions.py,sha256=X8qHd_xZUxIlmfPyLyaBbVjdH_dIN4tj7xVuFFvaQsw,2578
|
|
334
|
-
uncountable/types/api/outputs/update_output_condition_parameter.py,sha256=
|
|
338
|
+
uncountable/types/api/outputs/update_output_condition_parameter.py,sha256=qE-VVyrFh5Fo7yavdjEYYfT1H0RFw_QSwQapIXrFAqw,1796
|
|
335
339
|
uncountable/types/api/permissions/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
336
340
|
uncountable/types/api/permissions/set_core_permissions.py,sha256=RtI5l9iyR80mkh9PzpCvn02xfCKsuvHYYCXDr48FT_Q,3651
|
|
337
341
|
uncountable/types/api/permissions/set_entity_permission.py,sha256=4t8JdUyCTEplB9rs7A04dw7Id-HT3k4Ff7V3X6DL9d8,3745
|
|
@@ -351,7 +355,7 @@ uncountable/types/api/recipes/associate_recipe_as_input.py,sha256=vXtdffaWJGvK1r
|
|
|
351
355
|
uncountable/types/api/recipes/associate_recipe_as_lot.py,sha256=SBfeNGn6TF2Fawemc1hkJkElWrxD89jvZiQvCnTawBs,1283
|
|
352
356
|
uncountable/types/api/recipes/clear_recipe_outputs.py,sha256=IOHeOl7eO5Arzpfgjhk3y5eWY1lWb6xSzOrIC4uH78w,1227
|
|
353
357
|
uncountable/types/api/recipes/create_mix_order.py,sha256=LMLTw5malVnHsegFsKW04SBHJFDIJheh_qQClRFRsPM,1345
|
|
354
|
-
uncountable/types/api/recipes/create_recipe.py,sha256=
|
|
358
|
+
uncountable/types/api/recipes/create_recipe.py,sha256=xN8tmQ5rXQDyCVUqIOOlRKZf6KbH1HtzxdUhK5X7sVM,1651
|
|
355
359
|
uncountable/types/api/recipes/create_recipes.py,sha256=vSBCmHWdXDGacNXiRgK22G_nei8SHK1kwSJRRBQnaPU,2106
|
|
356
360
|
uncountable/types/api/recipes/disassociate_recipe_as_input.py,sha256=Lka3041BI6nXYIzKFjvKs_E9XO67ioHuFg8bEB85GCM,1251
|
|
357
361
|
uncountable/types/api/recipes/edit_recipe_inputs.py,sha256=TnkdLxbiU_27IJBPUrcAxjPZ3RlUV43Qf2-PXDtDlMs,14755
|
|
@@ -373,6 +377,8 @@ uncountable/types/api/recipes/set_recipe_tags.py,sha256=C4GzlHVfTDUA2CrgDqfYrDpS
|
|
|
373
377
|
uncountable/types/api/recipes/set_recipe_total.py,sha256=K1eHfz95txl6EUoDNap3QEsRX-if2Ns5UihzMBawwMM,1859
|
|
374
378
|
uncountable/types/api/recipes/unarchive_recipes.py,sha256=ke3JPaj6hRdTjP-Qot8Gc-_ptTYqC_1ZF3kKbPJ0H88,1145
|
|
375
379
|
uncountable/types/api/recipes/unlock_recipes.py,sha256=Qa_qLyp0McWpaIAXIOJxe6L9p5dfdEId_TtgUk8Lnzo,1471
|
|
380
|
+
uncountable/types/api/recipes/upsert_recipe_workflow_step.py,sha256=S0IagClvKmTIX98GnMkREBri2qdgvOjao-p6afCwpEc,1509
|
|
381
|
+
uncountable/types/api/recipes/upsert_step_relationships.py,sha256=FzIwxBRZYtsYwELGWZpPTFhqAEZVB0egX3XDvmZfYnQ,3097
|
|
376
382
|
uncountable/types/api/runsheet/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
377
383
|
uncountable/types/api/runsheet/complete_async_upload.py,sha256=r3zsmD8tcalMfa67MNdF7LE_YJjBsSXK07zZ9fMap0Y,1156
|
|
378
384
|
uncountable/types/api/runsheet/export_default_runsheet.py,sha256=Jk6e5U5LQXN_rjbJV7g6FO2YFEDVhK3m0PxDEywHDOk,1425
|
|
@@ -383,7 +389,7 @@ uncountable/types/api/uploader/complete_async_parse.py,sha256=ffS3ApqCNkZb6QPuYE
|
|
|
383
389
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=Bj7Dq4A90k00suacwk3bLA_dCb2aovS1kAbVam2AQnM,1395
|
|
384
390
|
uncountable/types/api/user/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
385
391
|
uncountable/types/api/user/get_current_user_info.py,sha256=Avqi_RXtRgbefrT_dwJ9MrO6eDNSSa_Nu650FSuESlg,1109
|
|
386
|
-
uncountablepythonsdk-0.0.
|
|
387
|
-
uncountablepythonsdk-0.0.
|
|
388
|
-
uncountablepythonsdk-0.0.
|
|
389
|
-
uncountablepythonsdk-0.0.
|
|
392
|
+
uncountablepythonsdk-0.0.162.dist-info/METADATA,sha256=rms0l-jk3HaKExTdt3MknfZGNeZimXkm6TJLKAIeNic,2289
|
|
393
|
+
uncountablepythonsdk-0.0.162.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
394
|
+
uncountablepythonsdk-0.0.162.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
395
|
+
uncountablepythonsdk-0.0.162.dist-info/RECORD,,
|
|
File without changes
|
{uncountablepythonsdk-0.0.160.dist-info → uncountablepythonsdk-0.0.162.dist-info}/top_level.txt
RENAMED
|
File without changes
|