UncountablePythonSDK 0.0.161__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.
- uncountable/types/__init__.py +6 -2
- uncountable/types/api/{files/create_file_record.py → file_folders/add_file_to_folder.py} +9 -7
- uncountable/types/api/recipes/create_recipe.py +1 -0
- uncountable/types/api/recipes/upsert_recipe_workflow_step.py +46 -0
- uncountable/types/async_batch_processor.py +44 -1
- uncountable/types/async_batch_t.py +1 -0
- uncountable/types/client_base.py +57 -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
- {uncountablepythonsdk-0.0.161.dist-info → uncountablepythonsdk-0.0.162.dist-info}/METADATA +2 -1
- {uncountablepythonsdk-0.0.161.dist-info → uncountablepythonsdk-0.0.162.dist-info}/RECORD +16 -13
- {uncountablepythonsdk-0.0.161.dist-info → uncountablepythonsdk-0.0.162.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.161.dist-info → uncountablepythonsdk-0.0.162.dist-info}/top_level.txt +0 -0
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
|
|
@@ -143,6 +144,7 @@ from .api.outputs import update_output_condition_parameter as update_output_cond
|
|
|
143
144
|
from . import uploader_t as uploader_t
|
|
144
145
|
from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
|
|
145
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
|
|
146
148
|
from .api.recipes import upsert_step_relationships as upsert_step_relationships_t
|
|
147
149
|
from . import users_t as users_t
|
|
148
150
|
from . import webhook_job_t as webhook_job_t
|
|
@@ -150,6 +152,7 @@ from . import workflows_t as workflows_t
|
|
|
150
152
|
|
|
151
153
|
|
|
152
154
|
__all__: list[str] = [
|
|
155
|
+
"add_file_to_folder_t",
|
|
153
156
|
"add_notebook_content_t",
|
|
154
157
|
"add_recipe_to_project_t",
|
|
155
158
|
"add_time_series_data_t",
|
|
@@ -170,7 +173,6 @@ __all__: list[str] = [
|
|
|
170
173
|
"convert_chemical_formats_t",
|
|
171
174
|
"create_entities_t",
|
|
172
175
|
"create_entity_t",
|
|
173
|
-
"create_file_record_t",
|
|
174
176
|
"create_inputs_t",
|
|
175
177
|
"create_mix_order_t",
|
|
176
178
|
"create_or_update_entity_t",
|
|
@@ -250,6 +252,7 @@ __all__: list[str] = [
|
|
|
250
252
|
"recipe_output_metadata_t",
|
|
251
253
|
"recipe_step_relationships_t",
|
|
252
254
|
"recipe_tags_t",
|
|
255
|
+
"recipe_workflow_step_types_t",
|
|
253
256
|
"recipe_workflow_steps_t",
|
|
254
257
|
"recipes_t",
|
|
255
258
|
"register_sockets_token_t",
|
|
@@ -291,6 +294,7 @@ __all__: list[str] = [
|
|
|
291
294
|
"uploader_t",
|
|
292
295
|
"upsert_condition_match_t",
|
|
293
296
|
"upsert_field_options_t",
|
|
297
|
+
"upsert_recipe_workflow_step_t",
|
|
294
298
|
"upsert_step_relationships_t",
|
|
295
299
|
"users_t",
|
|
296
300
|
"webhook_job_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
|
|
@@ -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
|
|
@@ -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,7 @@ 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
|
|
47
49
|
import uncountable.types.api.recipes.upsert_step_relationships as upsert_step_relationships_t
|
|
48
50
|
import uuid
|
|
49
51
|
from abc import ABC, abstractmethod
|
|
@@ -363,6 +365,7 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
363
365
|
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
|
|
364
366
|
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
|
|
365
367
|
definition_key: identifier_t.IdentifierKey | None = None,
|
|
368
|
+
recipe_key: identifier_t.IdentifierKey | None = None,
|
|
366
369
|
depends_on: list[str] | None = None,
|
|
367
370
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
368
371
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
@@ -374,8 +377,9 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
374
377
|
:param workflow_id: The identifier of the workflow to create the recipe with
|
|
375
378
|
:param workflow_variant_id: The identifier of the workflow variant to create the recipe with
|
|
376
379
|
:param recipe_metadata: Metadata values to populate the recipe with
|
|
377
|
-
: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.
|
|
378
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.
|
|
379
383
|
:param depends_on: A list of batch reference keys to process before processing this request
|
|
380
384
|
"""
|
|
381
385
|
args = create_recipe_t.Arguments(
|
|
@@ -387,6 +391,7 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
387
391
|
recipe_metadata=recipe_metadata,
|
|
388
392
|
identifiers=identifiers,
|
|
389
393
|
definition_key=definition_key,
|
|
394
|
+
recipe_key=recipe_key,
|
|
390
395
|
)
|
|
391
396
|
json_data = serialize_for_api(args)
|
|
392
397
|
|
|
@@ -983,6 +988,44 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
983
988
|
batch_reference=req.batch_reference,
|
|
984
989
|
)
|
|
985
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
|
+
|
|
986
1029
|
def upsert_step_relationships(
|
|
987
1030
|
self,
|
|
988
1031
|
*,
|
|
@@ -54,6 +54,7 @@ class AsyncBatchRequestPath(StrEnum):
|
|
|
54
54
|
UNLOCK_ENTITY = "entity/unlock_entity"
|
|
55
55
|
RUN_TRIGGER = "triggers/run_trigger"
|
|
56
56
|
UPSERT_STEP_RELATIONSHIPS = "recipes/upsert_step_relationships"
|
|
57
|
+
UPSERT_RECIPE_WORKFLOW_STEP = "recipes/upsert_recipe_workflow_step"
|
|
57
58
|
|
|
58
59
|
|
|
59
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,7 @@ 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
|
|
122
124
|
import uncountable.types.api.recipes.upsert_step_relationships as upsert_step_relationships_t
|
|
123
125
|
from abc import ABC, abstractmethod
|
|
124
126
|
import dataclasses
|
|
@@ -140,6 +142,30 @@ class ClientMethods(ABC):
|
|
|
140
142
|
def do_request(self, *, api_request: APIRequest, return_type: type[DT]) -> DT:
|
|
141
143
|
...
|
|
142
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
|
+
|
|
143
169
|
def add_notebook_content(
|
|
144
170
|
self,
|
|
145
171
|
*,
|
|
@@ -470,23 +496,6 @@ class ClientMethods(ABC):
|
|
|
470
496
|
)
|
|
471
497
|
return self.do_request(api_request=api_request, return_type=create_entity_t.Data)
|
|
472
498
|
|
|
473
|
-
def create_file_record(
|
|
474
|
-
self,
|
|
475
|
-
*,
|
|
476
|
-
_request_options: client_config_t.RequestOptions | None = None,
|
|
477
|
-
) -> create_file_record_t.Data:
|
|
478
|
-
"""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.
|
|
479
|
-
|
|
480
|
-
"""
|
|
481
|
-
args = create_file_record_t.Arguments()
|
|
482
|
-
api_request = APIRequest(
|
|
483
|
-
method=create_file_record_t.ENDPOINT_METHOD,
|
|
484
|
-
endpoint=create_file_record_t.ENDPOINT_PATH,
|
|
485
|
-
args=args,
|
|
486
|
-
request_options=_request_options,
|
|
487
|
-
)
|
|
488
|
-
return self.do_request(api_request=api_request, return_type=create_file_record_t.Data)
|
|
489
|
-
|
|
490
499
|
def external_create_inputs(
|
|
491
500
|
self,
|
|
492
501
|
*,
|
|
@@ -570,6 +579,7 @@ class ClientMethods(ABC):
|
|
|
570
579
|
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
|
|
571
580
|
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
|
|
572
581
|
definition_key: identifier_t.IdentifierKey | None = None,
|
|
582
|
+
recipe_key: identifier_t.IdentifierKey | None = None,
|
|
573
583
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
574
584
|
) -> create_recipe_t.Data:
|
|
575
585
|
"""Returns the id of the recipe being created.
|
|
@@ -580,8 +590,9 @@ class ClientMethods(ABC):
|
|
|
580
590
|
:param workflow_id: The identifier of the workflow to create the recipe with
|
|
581
591
|
:param workflow_variant_id: The identifier of the workflow variant to create the recipe with
|
|
582
592
|
:param recipe_metadata: Metadata values to populate the recipe with
|
|
583
|
-
: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.
|
|
584
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.
|
|
585
596
|
"""
|
|
586
597
|
args = create_recipe_t.Arguments(
|
|
587
598
|
name=name,
|
|
@@ -592,6 +603,7 @@ class ClientMethods(ABC):
|
|
|
592
603
|
recipe_metadata=recipe_metadata,
|
|
593
604
|
identifiers=identifiers,
|
|
594
605
|
definition_key=definition_key,
|
|
606
|
+
recipe_key=recipe_key,
|
|
595
607
|
)
|
|
596
608
|
api_request = APIRequest(
|
|
597
609
|
method=create_recipe_t.ENDPOINT_METHOD,
|
|
@@ -2438,6 +2450,32 @@ class ClientMethods(ABC):
|
|
|
2438
2450
|
)
|
|
2439
2451
|
return self.do_request(api_request=api_request, return_type=upsert_field_options_t.Data)
|
|
2440
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
|
+
|
|
2441
2479
|
def upsert_step_relationships(
|
|
2442
2480
|
self,
|
|
2443
2481
|
*,
|
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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -298,9 +300,9 @@ uncountable/types/api/equipment/associate_equipment_input.py,sha256=K3LBXzmtOLgC
|
|
|
298
300
|
uncountable/types/api/field_options/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
299
301
|
uncountable/types/api/field_options/upsert_field_options.py,sha256=yhgbPXd75fTDzXJhZg2fiv3Nq_Ks6dhwDv6Q-6EjmZo,1631
|
|
300
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
|
|
301
304
|
uncountable/types/api/file_folders/modify_file_system.py,sha256=oklJa6g_KC18mQA-kkFmICO9pyGKLQNNG_QSYegkdkE,2815
|
|
302
305
|
uncountable/types/api/files/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
303
|
-
uncountable/types/api/files/create_file_record.py,sha256=joaPDTxCD518RjB0-dWVWoBYGpPqHWYYsqFzsVIt5MI,1167
|
|
304
306
|
uncountable/types/api/files/download_file.py,sha256=pxFEha3PglQ767sSh3RjrT1a2Wu1P9uetNuEoBwAO24,3372
|
|
305
307
|
uncountable/types/api/id_source/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
306
308
|
uncountable/types/api/id_source/list_id_source.py,sha256=td3pA624Sv7tSpg5zifhx42AM203-m875i9JXo3P7kk,1542
|
|
@@ -353,7 +355,7 @@ uncountable/types/api/recipes/associate_recipe_as_input.py,sha256=vXtdffaWJGvK1r
|
|
|
353
355
|
uncountable/types/api/recipes/associate_recipe_as_lot.py,sha256=SBfeNGn6TF2Fawemc1hkJkElWrxD89jvZiQvCnTawBs,1283
|
|
354
356
|
uncountable/types/api/recipes/clear_recipe_outputs.py,sha256=IOHeOl7eO5Arzpfgjhk3y5eWY1lWb6xSzOrIC4uH78w,1227
|
|
355
357
|
uncountable/types/api/recipes/create_mix_order.py,sha256=LMLTw5malVnHsegFsKW04SBHJFDIJheh_qQClRFRsPM,1345
|
|
356
|
-
uncountable/types/api/recipes/create_recipe.py,sha256=
|
|
358
|
+
uncountable/types/api/recipes/create_recipe.py,sha256=xN8tmQ5rXQDyCVUqIOOlRKZf6KbH1HtzxdUhK5X7sVM,1651
|
|
357
359
|
uncountable/types/api/recipes/create_recipes.py,sha256=vSBCmHWdXDGacNXiRgK22G_nei8SHK1kwSJRRBQnaPU,2106
|
|
358
360
|
uncountable/types/api/recipes/disassociate_recipe_as_input.py,sha256=Lka3041BI6nXYIzKFjvKs_E9XO67ioHuFg8bEB85GCM,1251
|
|
359
361
|
uncountable/types/api/recipes/edit_recipe_inputs.py,sha256=TnkdLxbiU_27IJBPUrcAxjPZ3RlUV43Qf2-PXDtDlMs,14755
|
|
@@ -375,6 +377,7 @@ uncountable/types/api/recipes/set_recipe_tags.py,sha256=C4GzlHVfTDUA2CrgDqfYrDpS
|
|
|
375
377
|
uncountable/types/api/recipes/set_recipe_total.py,sha256=K1eHfz95txl6EUoDNap3QEsRX-if2Ns5UihzMBawwMM,1859
|
|
376
378
|
uncountable/types/api/recipes/unarchive_recipes.py,sha256=ke3JPaj6hRdTjP-Qot8Gc-_ptTYqC_1ZF3kKbPJ0H88,1145
|
|
377
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
|
|
378
381
|
uncountable/types/api/recipes/upsert_step_relationships.py,sha256=FzIwxBRZYtsYwELGWZpPTFhqAEZVB0egX3XDvmZfYnQ,3097
|
|
379
382
|
uncountable/types/api/runsheet/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
380
383
|
uncountable/types/api/runsheet/complete_async_upload.py,sha256=r3zsmD8tcalMfa67MNdF7LE_YJjBsSXK07zZ9fMap0Y,1156
|
|
@@ -386,7 +389,7 @@ uncountable/types/api/uploader/complete_async_parse.py,sha256=ffS3ApqCNkZb6QPuYE
|
|
|
386
389
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=Bj7Dq4A90k00suacwk3bLA_dCb2aovS1kAbVam2AQnM,1395
|
|
387
390
|
uncountable/types/api/user/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
388
391
|
uncountable/types/api/user/get_current_user_info.py,sha256=Avqi_RXtRgbefrT_dwJ9MrO6eDNSSa_Nu650FSuESlg,1109
|
|
389
|
-
uncountablepythonsdk-0.0.
|
|
390
|
-
uncountablepythonsdk-0.0.
|
|
391
|
-
uncountablepythonsdk-0.0.
|
|
392
|
-
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.161.dist-info → uncountablepythonsdk-0.0.162.dist-info}/top_level.txt
RENAMED
|
File without changes
|