UncountablePythonSDK 0.0.40__py3-none-any.whl → 0.0.42__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of UncountablePythonSDK might be problematic. Click here for more details.
- {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/METADATA +5 -1
- {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/RECORD +126 -107
- docs/requirements.txt +3 -3
- examples/invoke_uploader.py +23 -0
- pkgs/argument_parser/argument_parser.py +2 -2
- pkgs/filesystem_utils/__init__.py +17 -0
- pkgs/filesystem_utils/_gdrive_session.py +306 -0
- pkgs/filesystem_utils/_local_session.py +69 -0
- pkgs/filesystem_utils/_sftp_session.py +147 -0
- pkgs/filesystem_utils/file_type_utils.py +61 -0
- pkgs/filesystem_utils/filesystem_session.py +39 -0
- pkgs/serialization/yaml.py +54 -0
- pkgs/type_spec/config.py +1 -13
- pkgs/type_spec/emit_open_api.py +7 -5
- pkgs/type_spec/emit_open_api_util.py +4 -2
- pkgs/type_spec/emit_python.py +13 -14
- pkgs/type_spec/load_types.py +2 -1
- pkgs/type_spec/value_spec/__main__.py +1 -1
- uncountable/core/file_upload.py +13 -3
- uncountable/integration/construct_client.py +1 -1
- uncountable/integration/cron.py +11 -6
- uncountable/integration/entrypoint.py +6 -7
- uncountable/integration/executors/executors.py +24 -0
- uncountable/integration/executors/generic_upload_executor.py +245 -0
- uncountable/integration/executors/script_executor.py +1 -1
- uncountable/integration/job.py +19 -2
- uncountable/integration/secret_retrieval/__init__.py +3 -0
- uncountable/integration/secret_retrieval/retrieve_secret.py +40 -0
- uncountable/integration/server.py +1 -1
- uncountable/types/__init__.py +8 -0
- uncountable/types/api/batch/execute_batch.py +5 -5
- uncountable/types/api/batch/execute_batch_load_async.py +3 -3
- uncountable/types/api/chemical/convert_chemical_formats.py +4 -4
- uncountable/types/api/entity/create_entities.py +4 -4
- uncountable/types/api/entity/create_entity.py +4 -4
- uncountable/types/api/entity/get_entities_data.py +4 -4
- uncountable/types/api/entity/list_entities.py +5 -5
- uncountable/types/api/entity/lock_entity.py +3 -3
- uncountable/types/api/entity/resolve_entity_ids.py +4 -4
- uncountable/types/api/entity/set_values.py +3 -3
- uncountable/types/api/entity/transition_entity_phase.py +5 -5
- uncountable/types/api/entity/unlock_entity.py +3 -3
- uncountable/types/api/equipment/associate_equipment_input.py +3 -3
- uncountable/types/api/field_options/upsert_field_options.py +4 -4
- uncountable/types/api/id_source/list_id_source.py +4 -4
- uncountable/types/api/id_source/match_id_source.py +4 -4
- uncountable/types/api/input_groups/get_input_group_names.py +4 -4
- uncountable/types/api/inputs/create_inputs.py +5 -5
- uncountable/types/api/inputs/get_input_data.py +7 -7
- uncountable/types/api/inputs/get_input_names.py +4 -4
- uncountable/types/api/inputs/get_inputs_data.py +7 -7
- uncountable/types/api/inputs/set_input_attribute_values.py +4 -4
- uncountable/types/api/inputs/set_input_category.py +3 -3
- uncountable/types/api/inputs/set_input_subcategories.py +3 -3
- uncountable/types/api/inputs/set_intermediate_type.py +3 -3
- uncountable/types/api/material_families/update_entity_material_families.py +3 -3
- uncountable/types/api/outputs/get_output_data.py +7 -7
- uncountable/types/api/outputs/get_output_names.py +4 -4
- uncountable/types/api/outputs/resolve_output_conditions.py +6 -6
- uncountable/types/api/permissions/set_core_permissions.py +7 -7
- uncountable/types/api/project/get_projects.py +4 -4
- uncountable/types/api/project/get_projects_data.py +4 -4
- uncountable/types/api/recipe_links/create_recipe_link.py +3 -3
- uncountable/types/api/recipe_links/remove_recipe_link.py +3 -3
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +4 -4
- uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
- uncountable/types/api/recipes/archive_recipes.py +3 -3
- uncountable/types/api/recipes/associate_recipe_as_input.py +3 -3
- uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
- uncountable/types/api/recipes/create_recipe.py +3 -3
- uncountable/types/api/recipes/create_recipes.py +5 -5
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
- uncountable/types/api/recipes/edit_recipe_inputs.py +12 -12
- uncountable/types/api/recipes/get_curve.py +3 -3
- uncountable/types/api/recipes/get_recipe_calculations.py +4 -4
- uncountable/types/api/recipes/get_recipe_links.py +3 -3
- uncountable/types/api/recipes/get_recipe_names.py +4 -4
- uncountable/types/api/recipes/get_recipe_output_metadata.py +4 -4
- uncountable/types/api/recipes/get_recipes_data.py +12 -12
- uncountable/types/api/recipes/lock_recipes.py +4 -4
- uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
- uncountable/types/api/recipes/set_recipe_inputs.py +4 -4
- uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
- uncountable/types/api/recipes/set_recipe_output_annotations.py +7 -7
- uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
- uncountable/types/api/recipes/set_recipe_tags.py +7 -7
- uncountable/types/api/recipes/unarchive_recipes.py +3 -3
- uncountable/types/api/recipes/unlock_recipes.py +3 -3
- uncountable/types/api/triggers/run_trigger.py +3 -3
- uncountable/types/api/uploader/__init__.py +1 -0
- uncountable/types/api/uploader/invoke_uploader.py +38 -0
- uncountable/types/async_batch_processor.py +36 -0
- uncountable/types/async_batch_t.py +6 -4
- uncountable/types/calculations_t.py +2 -2
- uncountable/types/chemical_structure_t.py +2 -2
- uncountable/types/client_base.py +25 -2
- uncountable/types/curves_t.py +3 -3
- uncountable/types/entity_t.py +2 -2
- uncountable/types/experiment_groups_t.py +2 -2
- uncountable/types/field_values_t.py +5 -5
- uncountable/types/fields_t.py +2 -2
- uncountable/types/generic_upload.py +9 -0
- uncountable/types/generic_upload_t.py +41 -0
- uncountable/types/id_source_t.py +5 -5
- uncountable/types/identifier_t.py +4 -4
- uncountable/types/input_attributes_t.py +2 -2
- uncountable/types/inputs_t.py +2 -2
- uncountable/types/job_definition.py +26 -0
- uncountable/types/job_definition_t.py +203 -0
- uncountable/types/outputs_t.py +2 -2
- uncountable/types/phases_t.py +2 -2
- uncountable/types/recipe_identifiers_t.py +4 -4
- uncountable/types/recipe_links_t.py +2 -2
- uncountable/types/recipe_metadata_t.py +4 -4
- uncountable/types/recipe_output_metadata_t.py +2 -2
- uncountable/types/recipe_tags_t.py +2 -2
- uncountable/types/recipe_workflow_steps_t.py +5 -5
- uncountable/types/recipes_t.py +2 -2
- uncountable/types/response_t.py +2 -2
- uncountable/types/secret_retrieval.py +12 -0
- uncountable/types/secret_retrieval_t.py +69 -0
- uncountable/types/units_t.py +2 -2
- uncountable/types/users_t.py +2 -2
- uncountable/types/workflows_t.py +3 -3
- uncountable/integration/types.py +0 -89
- {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/WHEEL +0 -0
- {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from uncountable.types.job_definition_t import ProfileMetadata
|
|
4
|
+
from uncountable.types.secret_retrieval_t import (
|
|
5
|
+
SecretRetrieval,
|
|
6
|
+
SecretRetrievalAWS,
|
|
7
|
+
SecretRetrievalEnv,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class SecretRetrievalError(BaseException):
|
|
12
|
+
def __init__(
|
|
13
|
+
self, secret_retrieval: SecretRetrieval, message: str | None = None
|
|
14
|
+
) -> None:
|
|
15
|
+
self.secret_retrieval = secret_retrieval
|
|
16
|
+
self.message = message
|
|
17
|
+
|
|
18
|
+
def __str__(self) -> str:
|
|
19
|
+
append_message = ""
|
|
20
|
+
if self.message is not None:
|
|
21
|
+
append_message = f": {self.message}"
|
|
22
|
+
return f"{self.secret_retrieval.type} secret retrieval failed{append_message}"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def retrieve_secret(
|
|
26
|
+
secret_retrieval: SecretRetrieval, profile_metadata: ProfileMetadata
|
|
27
|
+
) -> str:
|
|
28
|
+
match secret_retrieval:
|
|
29
|
+
case SecretRetrievalEnv():
|
|
30
|
+
env_name = (
|
|
31
|
+
f"UNC_{profile_metadata.name.upper()}_{secret_retrieval.env_key.upper()}"
|
|
32
|
+
)
|
|
33
|
+
secret = os.environ.get(env_name)
|
|
34
|
+
if secret is None:
|
|
35
|
+
raise SecretRetrievalError(
|
|
36
|
+
secret_retrieval, f"environment variable {env_name} missing"
|
|
37
|
+
)
|
|
38
|
+
return secret
|
|
39
|
+
case SecretRetrievalAWS():
|
|
40
|
+
raise NotImplementedError("aws secret retrieval not yet implemented")
|
|
@@ -11,7 +11,7 @@ from apscheduler.triggers.cron import CronTrigger
|
|
|
11
11
|
from sqlalchemy.engine.base import Engine
|
|
12
12
|
|
|
13
13
|
from uncountable.integration.cron import CronJobArgs, cron_job_executor
|
|
14
|
-
from uncountable.
|
|
14
|
+
from uncountable.types.job_definition_t import (
|
|
15
15
|
AuthRetrieval,
|
|
16
16
|
CronJobDefinition,
|
|
17
17
|
JobDefinition,
|
uncountable/types/__init__.py
CHANGED
|
@@ -28,6 +28,7 @@ from .api.batch import execute_batch_load_async as execute_batch_load_async_t
|
|
|
28
28
|
from . import experiment_groups_t as experiment_groups_t
|
|
29
29
|
from . import field_values_t as field_values_t
|
|
30
30
|
from . import fields_t as fields_t
|
|
31
|
+
from . import generic_upload_t as generic_upload_t
|
|
31
32
|
from .api.recipes import get_curve as get_curve_t
|
|
32
33
|
from .api.entity import get_entities_data as get_entities_data_t
|
|
33
34
|
from .api.inputs import get_input_data as get_input_data_t
|
|
@@ -48,6 +49,8 @@ from . import id_source_t as id_source_t
|
|
|
48
49
|
from . import identifier_t as identifier_t
|
|
49
50
|
from . import input_attributes_t as input_attributes_t
|
|
50
51
|
from . import inputs_t as inputs_t
|
|
52
|
+
from .api.uploader import invoke_uploader as invoke_uploader_t
|
|
53
|
+
from . import job_definition_t as job_definition_t
|
|
51
54
|
from .api.entity import list_entities as list_entities_t
|
|
52
55
|
from .api.id_source import list_id_source as list_id_source_t
|
|
53
56
|
from .api.entity import lock_entity as lock_entity_t
|
|
@@ -71,6 +74,7 @@ from .api.entity import resolve_entity_ids as resolve_entity_ids_t
|
|
|
71
74
|
from .api.outputs import resolve_output_conditions as resolve_output_conditions_t
|
|
72
75
|
from . import response_t as response_t
|
|
73
76
|
from .api.triggers import run_trigger as run_trigger_t
|
|
77
|
+
from . import secret_retrieval_t as secret_retrieval_t
|
|
74
78
|
from .api.permissions import set_core_permissions as set_core_permissions_t
|
|
75
79
|
from .api.inputs import set_input_attribute_values as set_input_attribute_values_t
|
|
76
80
|
from .api.inputs import set_input_category as set_input_category_t
|
|
@@ -119,6 +123,7 @@ __all__: list[str] = [
|
|
|
119
123
|
"experiment_groups_t",
|
|
120
124
|
"field_values_t",
|
|
121
125
|
"fields_t",
|
|
126
|
+
"generic_upload_t",
|
|
122
127
|
"get_curve_t",
|
|
123
128
|
"get_entities_data_t",
|
|
124
129
|
"get_input_data_t",
|
|
@@ -139,6 +144,8 @@ __all__: list[str] = [
|
|
|
139
144
|
"identifier_t",
|
|
140
145
|
"input_attributes_t",
|
|
141
146
|
"inputs_t",
|
|
147
|
+
"invoke_uploader_t",
|
|
148
|
+
"job_definition_t",
|
|
142
149
|
"list_entities_t",
|
|
143
150
|
"list_id_source_t",
|
|
144
151
|
"lock_entity_t",
|
|
@@ -162,6 +169,7 @@ __all__: list[str] = [
|
|
|
162
169
|
"resolve_output_conditions_t",
|
|
163
170
|
"response_t",
|
|
164
171
|
"run_trigger_t",
|
|
172
|
+
"secret_retrieval_t",
|
|
165
173
|
"set_core_permissions_t",
|
|
166
174
|
"set_input_attribute_values_t",
|
|
167
175
|
"set_input_category_t",
|
|
@@ -8,7 +8,7 @@ import typing # noqa: F401
|
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
10
|
from pkgs.strenum_compat import StrEnum
|
|
11
|
-
|
|
11
|
+
import dataclasses
|
|
12
12
|
from pkgs.serialization import serial_class
|
|
13
13
|
from ... import base_t
|
|
14
14
|
|
|
@@ -43,7 +43,7 @@ class RequestMethod(StrEnum):
|
|
|
43
43
|
@serial_class(
|
|
44
44
|
unconverted_values={"data"},
|
|
45
45
|
)
|
|
46
|
-
@dataclass(kw_only=True)
|
|
46
|
+
@dataclasses.dataclass(kw_only=True)
|
|
47
47
|
class BatchRequest:
|
|
48
48
|
path: str
|
|
49
49
|
method: RequestMethod
|
|
@@ -51,7 +51,7 @@ class BatchRequest:
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
54
|
-
@dataclass(kw_only=True)
|
|
54
|
+
@dataclasses.dataclass(kw_only=True)
|
|
55
55
|
class Arguments:
|
|
56
56
|
requests: list[BatchRequest]
|
|
57
57
|
|
|
@@ -60,7 +60,7 @@ class Arguments:
|
|
|
60
60
|
@serial_class(
|
|
61
61
|
unconverted_values={"response"},
|
|
62
62
|
)
|
|
63
|
-
@dataclass(kw_only=True)
|
|
63
|
+
@dataclasses.dataclass(kw_only=True)
|
|
64
64
|
class BatchResponse:
|
|
65
65
|
path: str
|
|
66
66
|
method: RequestMethod
|
|
@@ -69,7 +69,7 @@ class BatchResponse:
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
72
|
-
@dataclass(kw_only=True)
|
|
72
|
+
@dataclasses.dataclass(kw_only=True)
|
|
73
73
|
class Data:
|
|
74
74
|
responses: list[BatchResponse]
|
|
75
75
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import async_batch_t
|
|
12
12
|
from ... import base_t
|
|
13
13
|
|
|
@@ -23,13 +23,13 @@ ENDPOINT_PATH = "api/external/batch/execute_batch_load_async"
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
-
@dataclass(kw_only=True)
|
|
26
|
+
@dataclasses.dataclass(kw_only=True)
|
|
27
27
|
class Arguments:
|
|
28
28
|
requests: list[async_batch_t.AsyncBatchRequest]
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
32
|
-
@dataclass(kw_only=True)
|
|
32
|
+
@dataclasses.dataclass(kw_only=True)
|
|
33
33
|
class Data:
|
|
34
34
|
job_id: base_t.ObjectId
|
|
35
35
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from ... import base_t
|
|
13
13
|
|
|
@@ -25,13 +25,13 @@ ENDPOINT_PATH = "api/external/chemical/convert_chemical_formats"
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
-
@dataclass(kw_only=True)
|
|
28
|
+
@dataclasses.dataclass(kw_only=True)
|
|
29
29
|
class ChemicalStructureFile:
|
|
30
30
|
struct_file: str
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class Arguments:
|
|
36
36
|
source_chemical_structures: list[ChemicalStructureFile]
|
|
37
37
|
|
|
@@ -44,7 +44,7 @@ UncountableChemicalStructure = dict[str, base_t.JsonValue]
|
|
|
44
44
|
@serial_class(
|
|
45
45
|
unconverted_values={"chemical_structures"},
|
|
46
46
|
)
|
|
47
|
-
@dataclass(kw_only=True)
|
|
47
|
+
@dataclasses.dataclass(kw_only=True)
|
|
48
48
|
class Data:
|
|
49
49
|
chemical_structures: list[UncountableChemicalStructure]
|
|
50
50
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
from ... import field_values_t
|
|
@@ -25,13 +25,13 @@ ENDPOINT_PATH = "api/external/entity/external_create_entities"
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
-
@dataclass(kw_only=True)
|
|
28
|
+
@dataclasses.dataclass(kw_only=True)
|
|
29
29
|
class EntityToCreate:
|
|
30
30
|
field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class Arguments:
|
|
36
36
|
definition_id: base_t.ObjectId
|
|
37
37
|
entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK]]
|
|
@@ -39,7 +39,7 @@ class Arguments:
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
42
|
-
@dataclass(kw_only=True)
|
|
42
|
+
@dataclasses.dataclass(kw_only=True)
|
|
43
43
|
class Data:
|
|
44
44
|
entities: list[entity_t.Entity]
|
|
45
45
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from ... import base_t
|
|
13
13
|
from ... import entity_t
|
|
@@ -29,7 +29,7 @@ ENDPOINT_PATH = "api/external/entity/external_create_entity"
|
|
|
29
29
|
@serial_class(
|
|
30
30
|
unconverted_values={"value"},
|
|
31
31
|
)
|
|
32
|
-
@dataclass(kw_only=True)
|
|
32
|
+
@dataclasses.dataclass(kw_only=True)
|
|
33
33
|
class EntityFieldInitialValue:
|
|
34
34
|
field_ref_name: str
|
|
35
35
|
value: base_t.JsonValue
|
|
@@ -37,7 +37,7 @@ class EntityFieldInitialValue:
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
-
@dataclass(kw_only=True)
|
|
40
|
+
@dataclasses.dataclass(kw_only=True)
|
|
41
41
|
class Arguments:
|
|
42
42
|
definition_id: base_t.ObjectId
|
|
43
43
|
entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK]]
|
|
@@ -45,7 +45,7 @@ class Arguments:
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
48
|
-
@dataclass(kw_only=True)
|
|
48
|
+
@dataclasses.dataclass(kw_only=True)
|
|
49
49
|
class Data:
|
|
50
50
|
entity: entity_t.Entity
|
|
51
51
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
from ... import field_values_t
|
|
@@ -25,21 +25,21 @@ ENDPOINT_PATH = "api/external/entity/external_get_entities_data"
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
-
@dataclass(kw_only=True)
|
|
28
|
+
@dataclasses.dataclass(kw_only=True)
|
|
29
29
|
class Arguments:
|
|
30
30
|
entity_ids: list[base_t.ObjectId]
|
|
31
31
|
entity_type: entity_t.EntityType
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
|
-
@dataclass(kw_only=True)
|
|
35
|
+
@dataclasses.dataclass(kw_only=True)
|
|
36
36
|
class EntityDetails:
|
|
37
37
|
entity: entity_t.Entity
|
|
38
38
|
field_values: list[field_values_t.FieldRefIdNameValue]
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
42
|
-
@dataclass(kw_only=True)
|
|
42
|
+
@dataclasses.dataclass(kw_only=True)
|
|
43
43
|
class Data:
|
|
44
44
|
entity_details: list[EntityDetails]
|
|
45
45
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from pkgs.serialization import OpaqueKey
|
|
13
13
|
from ... import base_t
|
|
@@ -30,7 +30,7 @@ ENDPOINT_PATH = "api/external/entity/external_list_entities"
|
|
|
30
30
|
@serial_class(
|
|
31
31
|
unconverted_values={"attributes"},
|
|
32
32
|
)
|
|
33
|
-
@dataclass(kw_only=True)
|
|
33
|
+
@dataclasses.dataclass(kw_only=True)
|
|
34
34
|
class Arguments:
|
|
35
35
|
config_reference: str
|
|
36
36
|
entity_type: typing.Optional[entity_t.EntityType] = None
|
|
@@ -43,21 +43,21 @@ class Arguments:
|
|
|
43
43
|
@serial_class(
|
|
44
44
|
unconverted_values={"column_values"},
|
|
45
45
|
)
|
|
46
|
-
@dataclass(kw_only=True)
|
|
46
|
+
@dataclasses.dataclass(kw_only=True)
|
|
47
47
|
class EntityResult:
|
|
48
48
|
entity: entity_t.Entity
|
|
49
49
|
column_values: list[base_t.JsonValue]
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
53
|
-
@dataclass(kw_only=True)
|
|
53
|
+
@dataclasses.dataclass(kw_only=True)
|
|
54
54
|
class ColumnAccess:
|
|
55
55
|
name: str
|
|
56
56
|
table_label: typing.Optional[str]
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
60
|
-
@dataclass(kw_only=True)
|
|
60
|
+
@dataclasses.dataclass(kw_only=True)
|
|
61
61
|
class Data:
|
|
62
62
|
columns: list[ColumnAccess]
|
|
63
63
|
results: list[EntityResult]
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import async_batch_t
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
from ... import identifier_t
|
|
@@ -24,7 +24,7 @@ ENDPOINT_PATH = "api/external/entity/external_lock_entity"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
entity_key: identifier_t.IdentifierKey
|
|
30
30
|
entity_type: entity_t.EntityType
|
|
@@ -32,7 +32,7 @@ class Arguments:
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
|
-
@dataclass(kw_only=True)
|
|
35
|
+
@dataclasses.dataclass(kw_only=True)
|
|
36
36
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
37
37
|
pass
|
|
38
38
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
|
|
@@ -24,21 +24,21 @@ ENDPOINT_PATH = "api/external/entity/external_resolve_entity_ids"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
entity_ids: list[typing.Union[str, base_t.ObjectId]]
|
|
30
30
|
entity_type: entity_t.EntityType
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class EntityNames:
|
|
36
36
|
id: typing.Union[str, int]
|
|
37
37
|
name: str
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
41
|
-
@dataclass(kw_only=True)
|
|
41
|
+
@dataclasses.dataclass(kw_only=True)
|
|
42
42
|
class Data:
|
|
43
43
|
items: list[EntityNames]
|
|
44
44
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import entity_t
|
|
12
12
|
from ... import field_values_t
|
|
13
13
|
from ... import response_t
|
|
@@ -24,14 +24,14 @@ ENDPOINT_PATH = "api/external/entity/external_set_values"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
entity: entity_t.Entity
|
|
30
30
|
values: list[field_values_t.ArgumentValueRefName]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class Data(response_t.Response):
|
|
36
36
|
pass
|
|
37
37
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
from ... import identifier_t
|
|
@@ -31,7 +31,7 @@ ENDPOINT_PATH = "api/external/entity/transition_entity_phase"
|
|
|
31
31
|
@serial_class(
|
|
32
32
|
parse_require={"type"},
|
|
33
33
|
)
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class TransitionIdentifierPhases:
|
|
36
36
|
type: typing.Literal["phases"] = "phases"
|
|
37
37
|
phase_from_key: identifier_t.IdentifierKey
|
|
@@ -42,7 +42,7 @@ class TransitionIdentifierPhases:
|
|
|
42
42
|
@serial_class(
|
|
43
43
|
parse_require={"type"},
|
|
44
44
|
)
|
|
45
|
-
@dataclass(kw_only=True)
|
|
45
|
+
@dataclasses.dataclass(kw_only=True)
|
|
46
46
|
class TransitionIdentifierTransition:
|
|
47
47
|
type: typing.Literal["transition"] = "transition"
|
|
48
48
|
transition_key: identifier_t.IdentifierKey
|
|
@@ -53,14 +53,14 @@ TransitionIdentifier = typing.Union[TransitionIdentifierPhases, TransitionIdenti
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
56
|
-
@dataclass(kw_only=True)
|
|
56
|
+
@dataclasses.dataclass(kw_only=True)
|
|
57
57
|
class Arguments:
|
|
58
58
|
entity: entity_t.Entity
|
|
59
59
|
transition: TransitionIdentifier
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
63
|
-
@dataclass(kw_only=True)
|
|
63
|
+
@dataclasses.dataclass(kw_only=True)
|
|
64
64
|
class Data(response_t.Response):
|
|
65
65
|
pass
|
|
66
66
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import async_batch_t
|
|
12
12
|
from ... import entity_t
|
|
13
13
|
from ... import identifier_t
|
|
@@ -24,14 +24,14 @@ ENDPOINT_PATH = "api/external/entity/external_unlock_entity"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
entity_key: identifier_t.IdentifierKey
|
|
30
30
|
entity_type: entity_t.EntityType
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
36
36
|
pass
|
|
37
37
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import async_batch_t
|
|
12
12
|
from ... import base_t
|
|
13
13
|
from ... import identifier_t
|
|
@@ -24,14 +24,14 @@ ENDPOINT_PATH = "api/external/equipment/associate_equipment_input"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
equipment_key: identifier_t.IdentifierKey
|
|
30
30
|
material_family_ids: list[base_t.ObjectId]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
36
36
|
pass
|
|
37
37
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import identifier_t
|
|
12
12
|
|
|
13
13
|
__all__: list[str] = [
|
|
@@ -23,7 +23,7 @@ ENDPOINT_PATH = "api/external/field_options/upsert_field_options"
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
-
@dataclass(kw_only=True)
|
|
26
|
+
@dataclasses.dataclass(kw_only=True)
|
|
27
27
|
class FieldOption:
|
|
28
28
|
option_id: str
|
|
29
29
|
option_value: typing.Optional[str] = None
|
|
@@ -32,14 +32,14 @@ class FieldOption:
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
|
-
@dataclass(kw_only=True)
|
|
35
|
+
@dataclasses.dataclass(kw_only=True)
|
|
36
36
|
class Arguments:
|
|
37
37
|
option_set_key: identifier_t.IdentifierKey
|
|
38
38
|
field_options: list[FieldOption]
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
42
|
-
@dataclass(kw_only=True)
|
|
42
|
+
@dataclasses.dataclass(kw_only=True)
|
|
43
43
|
class Data:
|
|
44
44
|
pass
|
|
45
45
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import id_source_t
|
|
13
13
|
|
|
@@ -24,7 +24,7 @@ ENDPOINT_PATH = "api/external/id_source/list_id_source"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
spec: id_source_t.IdSourceSpec
|
|
30
30
|
search_label: str
|
|
@@ -33,14 +33,14 @@ class Arguments:
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
36
|
-
@dataclass(kw_only=True)
|
|
36
|
+
@dataclasses.dataclass(kw_only=True)
|
|
37
37
|
class IdName:
|
|
38
38
|
id: typing.Union[base_t.ObjectId, str]
|
|
39
39
|
name: str
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
43
|
-
@dataclass(kw_only=True)
|
|
43
|
+
@dataclasses.dataclass(kw_only=True)
|
|
44
44
|
class Data:
|
|
45
45
|
results: list[IdName]
|
|
46
46
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import id_source_t
|
|
13
13
|
|
|
@@ -24,21 +24,21 @@ ENDPOINT_PATH = "api/external/id_source/match_id_source"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
-
@dataclass(kw_only=True)
|
|
27
|
+
@dataclasses.dataclass(kw_only=True)
|
|
28
28
|
class Arguments:
|
|
29
29
|
spec: id_source_t.IdSourceSpec
|
|
30
30
|
names: list[str]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@dataclass(kw_only=True)
|
|
34
|
+
@dataclasses.dataclass(kw_only=True)
|
|
35
35
|
class Match:
|
|
36
36
|
name: str
|
|
37
37
|
ids: list[typing.Union[base_t.ObjectId, str]]
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
41
|
-
@dataclass(kw_only=True)
|
|
41
|
+
@dataclasses.dataclass(kw_only=True)
|
|
42
42
|
class Data:
|
|
43
43
|
results: list[Match]
|
|
44
44
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import typing # noqa: F401
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
|
|
10
|
+
import dataclasses
|
|
11
11
|
from ... import base_t
|
|
12
12
|
|
|
13
13
|
__all__: list[str] = [
|
|
@@ -23,20 +23,20 @@ ENDPOINT_PATH = "api/external/input_groups/external_get_input_group_names"
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
-
@dataclass(kw_only=True)
|
|
26
|
+
@dataclasses.dataclass(kw_only=True)
|
|
27
27
|
class Arguments:
|
|
28
28
|
material_family_id: base_t.ObjectId
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
32
|
-
@dataclass(kw_only=True)
|
|
32
|
+
@dataclasses.dataclass(kw_only=True)
|
|
33
33
|
class SimpleInputGroup:
|
|
34
34
|
input_group_id: base_t.ObjectId
|
|
35
35
|
name: str
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
39
|
-
@dataclass(kw_only=True)
|
|
39
|
+
@dataclasses.dataclass(kw_only=True)
|
|
40
40
|
class Data:
|
|
41
41
|
input_groups: list[SimpleInputGroup]
|
|
42
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|