UncountablePythonSDK 0.0.110__py3-none-any.whl → 0.0.112__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.
- docs/conf.py +2 -2
- docs/justfile +1 -1
- examples/create_ingredient_sdk.py +34 -0
- examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
- examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
- examples/integration-server/pyproject.toml +2 -2
- pkgs/argument_parser/argument_parser.py +9 -6
- pkgs/type_spec/builder.py +19 -2
- pkgs/type_spec/emit_python.py +9 -3
- pkgs/type_spec/emit_typescript_util.py +16 -1
- pkgs/type_spec/parts/base.py.prepart +4 -0
- pkgs/type_spec/type_info/emit_type_info.py +12 -3
- pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
- pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
- pkgs/type_spec/value_spec/convert_type.py +13 -0
- uncountable/core/client.py +7 -4
- uncountable/integration/executors/generic_upload_executor.py +3 -2
- uncountable/integration/job.py +24 -1
- uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
- uncountable/integration/scheduler.py +4 -3
- uncountable/types/__init__.py +4 -0
- uncountable/types/api/batch/execute_batch.py +4 -4
- uncountable/types/api/batch/execute_batch_load_async.py +2 -2
- uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
- uncountable/types/api/condition_parameters/__init__.py +1 -0
- uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
- uncountable/types/api/entity/create_entities.py +3 -3
- uncountable/types/api/entity/create_entity.py +3 -3
- uncountable/types/api/entity/create_or_update_entity.py +3 -2
- uncountable/types/api/entity/get_entities_data.py +3 -3
- uncountable/types/api/entity/grant_entity_permissions.py +3 -2
- uncountable/types/api/entity/list_entities.py +4 -4
- uncountable/types/api/entity/lock_entity.py +3 -2
- uncountable/types/api/entity/lookup_entity.py +5 -5
- uncountable/types/api/entity/resolve_entity_ids.py +3 -3
- uncountable/types/api/entity/set_entity_field_values.py +3 -2
- uncountable/types/api/entity/set_values.py +3 -2
- uncountable/types/api/entity/transition_entity_phase.py +5 -4
- uncountable/types/api/entity/unlock_entity.py +3 -2
- uncountable/types/api/equipment/associate_equipment_input.py +2 -2
- uncountable/types/api/field_options/upsert_field_options.py +4 -3
- uncountable/types/api/files/download_file.py +4 -3
- uncountable/types/api/id_source/list_id_source.py +3 -3
- uncountable/types/api/id_source/match_id_source.py +3 -3
- uncountable/types/api/input_groups/get_input_group_names.py +3 -3
- uncountable/types/api/inputs/create_inputs.py +6 -4
- uncountable/types/api/inputs/get_input_data.py +6 -6
- uncountable/types/api/inputs/get_input_names.py +3 -3
- uncountable/types/api/inputs/get_inputs_data.py +6 -6
- uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
- uncountable/types/api/inputs/set_input_category.py +3 -2
- uncountable/types/api/inputs/set_input_subcategories.py +3 -2
- uncountable/types/api/inputs/set_intermediate_type.py +3 -2
- uncountable/types/api/material_families/update_entity_material_families.py +2 -2
- uncountable/types/api/outputs/get_output_data.py +6 -6
- uncountable/types/api/outputs/get_output_names.py +3 -3
- uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
- uncountable/types/api/permissions/set_core_permissions.py +7 -6
- uncountable/types/api/project/get_projects.py +3 -3
- uncountable/types/api/project/get_projects_data.py +3 -3
- uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
- uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
- uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
- uncountable/types/api/recipes/add_time_series_data.py +4 -3
- uncountable/types/api/recipes/archive_recipes.py +3 -2
- uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
- uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
- uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
- uncountable/types/api/recipes/create_recipe.py +2 -2
- uncountable/types/api/recipes/create_recipes.py +4 -4
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
- uncountable/types/api/recipes/edit_recipe_inputs.py +18 -16
- uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
- uncountable/types/api/recipes/get_curve.py +2 -2
- uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
- uncountable/types/api/recipes/get_recipe_links.py +2 -2
- uncountable/types/api/recipes/get_recipe_names.py +3 -3
- uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
- uncountable/types/api/recipes/get_recipes_data.py +11 -11
- uncountable/types/api/recipes/lock_recipes.py +4 -3
- uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
- uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
- uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
- uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
- uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
- uncountable/types/api/recipes/set_recipe_outputs.py +4 -4
- uncountable/types/api/recipes/set_recipe_tags.py +6 -6
- uncountable/types/api/recipes/unarchive_recipes.py +3 -2
- uncountable/types/api/recipes/unlock_recipes.py +3 -2
- uncountable/types/api/runsheet/__init__.py +1 -0
- uncountable/types/api/runsheet/complete_async_upload.py +41 -0
- uncountable/types/api/triggers/run_trigger.py +3 -2
- uncountable/types/api/uploader/invoke_uploader.py +2 -2
- uncountable/types/async_batch_processor.py +74 -0
- uncountable/types/async_batch_t.py +7 -5
- uncountable/types/auth_retrieval_t.py +4 -3
- uncountable/types/base_t.py +4 -0
- uncountable/types/calculations_t.py +1 -1
- uncountable/types/chemical_structure_t.py +2 -1
- uncountable/types/client_base.py +48 -0
- uncountable/types/client_config_t.py +2 -1
- uncountable/types/curves_t.py +2 -2
- uncountable/types/data_t.py +22 -21
- uncountable/types/entity_t.py +9 -3
- uncountable/types/experiment_groups_t.py +1 -1
- uncountable/types/field_values_t.py +20 -20
- uncountable/types/fields_t.py +1 -1
- uncountable/types/generic_upload_t.py +7 -6
- uncountable/types/id_source_t.py +5 -4
- uncountable/types/identifier_t.py +3 -3
- uncountable/types/input_attributes_t.py +1 -1
- uncountable/types/inputs_t.py +1 -1
- uncountable/types/integration_server_t.py +2 -1
- uncountable/types/job_definition_t.py +14 -13
- uncountable/types/outputs_t.py +1 -1
- uncountable/types/overrides_t.py +3 -2
- uncountable/types/phases_t.py +1 -1
- uncountable/types/queued_job_t.py +7 -7
- uncountable/types/recipe_identifiers_t.py +3 -3
- uncountable/types/recipe_links_t.py +1 -1
- uncountable/types/recipe_metadata_t.py +3 -3
- uncountable/types/recipe_output_metadata_t.py +1 -1
- uncountable/types/recipe_tags_t.py +1 -1
- uncountable/types/recipe_workflow_steps_t.py +5 -4
- uncountable/types/recipes_t.py +2 -1
- uncountable/types/response_t.py +2 -1
- uncountable/types/secret_retrieval_t.py +4 -3
- uncountable/types/units_t.py +1 -1
- uncountable/types/users_t.py +1 -1
- uncountable/types/webhook_job_t.py +4 -3
- uncountable/types/workflows_t.py +2 -2
- {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/METADATA +2 -1
- {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/RECORD +136 -128
- {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/WHEEL +1 -1
- {uncountablepythonsdk-0.0.110.dist-info → uncountablepythonsdk-0.0.112.dist-info}/top_level.txt +0 -0
uncountable/core/client.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
import datetime
|
|
2
3
|
import re
|
|
3
4
|
import typing
|
|
4
5
|
from dataclasses import dataclass
|
|
5
|
-
from datetime import
|
|
6
|
+
from datetime import UTC, timedelta
|
|
6
7
|
from enum import StrEnum
|
|
7
8
|
from io import BytesIO
|
|
8
9
|
from urllib.parse import unquote, urljoin
|
|
@@ -145,7 +146,7 @@ class SDKError(Exception):
|
|
|
145
146
|
@dataclass(kw_only=True)
|
|
146
147
|
class OAuthBearerTokenCache:
|
|
147
148
|
token: str
|
|
148
|
-
expires_at: datetime
|
|
149
|
+
expires_at: datetime.datetime
|
|
149
150
|
|
|
150
151
|
|
|
151
152
|
@dataclass(kw_only=True)
|
|
@@ -274,7 +275,8 @@ class Client(ClientMethods):
|
|
|
274
275
|
if (
|
|
275
276
|
self._oauth_bearer_token_cache is None
|
|
276
277
|
or (
|
|
277
|
-
self._oauth_bearer_token_cache.expires_at
|
|
278
|
+
self._oauth_bearer_token_cache.expires_at
|
|
279
|
+
- datetime.datetime.now(tz=UTC)
|
|
278
280
|
).total_seconds()
|
|
279
281
|
< OAUTH_REFRESH_WINDOW_SECONDS
|
|
280
282
|
):
|
|
@@ -290,7 +292,8 @@ class Client(ClientMethods):
|
|
|
290
292
|
token_data = oauth_bearer_token_data_parser.parse_storage(data)
|
|
291
293
|
self._oauth_bearer_token_cache = OAuthBearerTokenCache(
|
|
292
294
|
token=token_data.access_token,
|
|
293
|
-
expires_at=datetime.now(
|
|
295
|
+
expires_at=datetime.datetime.now(tz=UTC)
|
|
296
|
+
+ timedelta(seconds=token_data.expires_in),
|
|
294
297
|
)
|
|
295
298
|
|
|
296
299
|
return self._oauth_bearer_token_cache.token
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import datetime
|
|
1
2
|
import io
|
|
2
3
|
import os
|
|
3
4
|
import re
|
|
4
|
-
from datetime import
|
|
5
|
+
from datetime import UTC
|
|
5
6
|
|
|
6
7
|
import paramiko
|
|
7
8
|
|
|
@@ -164,7 +165,7 @@ def _move_files_post_upload(
|
|
|
164
165
|
appended_text = ""
|
|
165
166
|
|
|
166
167
|
if remote_directory_scope.prepend_date_on_archive:
|
|
167
|
-
appended_text = f"-{datetime.now(
|
|
168
|
+
appended_text = f"-{datetime.datetime.now(UTC).timestamp()}"
|
|
168
169
|
|
|
169
170
|
for file_path in success_file_paths:
|
|
170
171
|
filename = os.path.split(file_path)[-1]
|
uncountable/integration/job.py
CHANGED
|
@@ -6,8 +6,9 @@ from dataclasses import dataclass
|
|
|
6
6
|
from pkgs.argument_parser import CachedParser
|
|
7
7
|
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
8
8
|
from uncountable.core.client import Client
|
|
9
|
+
from uncountable.core.file_upload import FileUpload
|
|
9
10
|
from uncountable.integration.telemetry import JobLogger
|
|
10
|
-
from uncountable.types import base_t, webhook_job_t
|
|
11
|
+
from uncountable.types import base_t, entity_t, webhook_job_t
|
|
11
12
|
from uncountable.types.job_definition_t import JobDefinition, JobResult, ProfileMetadata
|
|
12
13
|
|
|
13
14
|
|
|
@@ -91,3 +92,25 @@ class RunsheetWebhookJob(WebhookJob[webhook_job_t.RunsheetWebhookPayload]):
|
|
|
91
92
|
@property
|
|
92
93
|
def webhook_payload_type(self) -> type:
|
|
93
94
|
return webhook_job_t.RunsheetWebhookPayload
|
|
95
|
+
|
|
96
|
+
@abstractmethod
|
|
97
|
+
def build_runsheet(
|
|
98
|
+
self,
|
|
99
|
+
*,
|
|
100
|
+
args: JobArguments,
|
|
101
|
+
entities: list[entity_t.Entity],
|
|
102
|
+
) -> FileUpload: ...
|
|
103
|
+
|
|
104
|
+
def run(
|
|
105
|
+
self, args: JobArguments, payload: webhook_job_t.RunsheetWebhookPayload
|
|
106
|
+
) -> JobResult:
|
|
107
|
+
runsheet = self.build_runsheet(args=args, entities=payload.entities)
|
|
108
|
+
|
|
109
|
+
files = args.client.upload_files(file_uploads=[runsheet])
|
|
110
|
+
args.client.complete_async_upload(
|
|
111
|
+
async_job_id=payload.async_job_id, file_id=files[0].file_id
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
return JobResult(
|
|
115
|
+
success=True,
|
|
116
|
+
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import datetime
|
|
1
2
|
import uuid
|
|
2
|
-
from datetime import
|
|
3
|
+
from datetime import UTC
|
|
3
4
|
|
|
4
5
|
from sqlalchemy import delete, insert, select, update
|
|
5
6
|
from sqlalchemy.engine import Engine
|
|
@@ -30,7 +31,7 @@ class DatastoreSqlite(Datastore):
|
|
|
30
31
|
serialized_payload = serialize_for_storage(job_payload)
|
|
31
32
|
queued_job_uuid = str(uuid.uuid4())
|
|
32
33
|
num_attempts = 0
|
|
33
|
-
submitted_at = datetime.now(
|
|
34
|
+
submitted_at = datetime.datetime.now(UTC)
|
|
34
35
|
insert_stmt = insert(QueuedJob).values({
|
|
35
36
|
QueuedJob.id.key: queued_job_uuid,
|
|
36
37
|
QueuedJob.job_ref_name.key: job_ref_name,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import datetime
|
|
1
2
|
import multiprocessing
|
|
2
3
|
import subprocess
|
|
3
4
|
import sys
|
|
4
5
|
import time
|
|
5
6
|
from dataclasses import dataclass
|
|
6
|
-
from datetime import
|
|
7
|
+
from datetime import UTC
|
|
7
8
|
|
|
8
9
|
from opentelemetry.trace import get_current_span
|
|
9
10
|
|
|
@@ -96,7 +97,7 @@ def _wait_queue_runner_online() -> None:
|
|
|
96
97
|
QUEUE_RUNNER_HEALTH_CHECK_DELAY_SECS = 1
|
|
97
98
|
|
|
98
99
|
num_attempts = 0
|
|
99
|
-
before = datetime.now(
|
|
100
|
+
before = datetime.datetime.now(UTC)
|
|
100
101
|
while num_attempts < MAX_QUEUE_RUNNER_HEALTH_CHECKS:
|
|
101
102
|
try:
|
|
102
103
|
if check_health(port=get_local_admin_server_port()):
|
|
@@ -105,7 +106,7 @@ def _wait_queue_runner_online() -> None:
|
|
|
105
106
|
pass
|
|
106
107
|
num_attempts += 1
|
|
107
108
|
time.sleep(QUEUE_RUNNER_HEALTH_CHECK_DELAY_SECS)
|
|
108
|
-
after = datetime.now(
|
|
109
|
+
after = datetime.datetime.now(UTC)
|
|
109
110
|
duration_secs = (after - before).seconds
|
|
110
111
|
raise Exception(f"queue runner failed to come online after {duration_secs} seconds")
|
|
111
112
|
|
uncountable/types/__init__.py
CHANGED
|
@@ -16,6 +16,7 @@ from . import calculations_t as calculations_t
|
|
|
16
16
|
from . import chemical_structure_t as chemical_structure_t
|
|
17
17
|
from .api.recipes import clear_recipe_outputs as clear_recipe_outputs_t
|
|
18
18
|
from . import client_config_t as client_config_t
|
|
19
|
+
from .api.runsheet import complete_async_upload as complete_async_upload_t
|
|
19
20
|
from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
|
|
20
21
|
from .api.entity import create_entities as create_entities_t
|
|
21
22
|
from .api.entity import create_entity as create_entity_t
|
|
@@ -107,6 +108,7 @@ from . import units_t as units_t
|
|
|
107
108
|
from .api.entity import unlock_entity as unlock_entity_t
|
|
108
109
|
from .api.recipes import unlock_recipes as unlock_recipes_t
|
|
109
110
|
from .api.material_families import update_entity_material_families as update_entity_material_families_t
|
|
111
|
+
from .api.condition_parameters import upsert_condition_match as upsert_condition_match_t
|
|
110
112
|
from .api.field_options import upsert_field_options as upsert_field_options_t
|
|
111
113
|
from . import users_t as users_t
|
|
112
114
|
from . import webhook_job_t as webhook_job_t
|
|
@@ -128,6 +130,7 @@ __all__: list[str] = [
|
|
|
128
130
|
"chemical_structure_t",
|
|
129
131
|
"clear_recipe_outputs_t",
|
|
130
132
|
"client_config_t",
|
|
133
|
+
"complete_async_upload_t",
|
|
131
134
|
"convert_chemical_formats_t",
|
|
132
135
|
"create_entities_t",
|
|
133
136
|
"create_entity_t",
|
|
@@ -219,6 +222,7 @@ __all__: list[str] = [
|
|
|
219
222
|
"unlock_entity_t",
|
|
220
223
|
"unlock_recipes_t",
|
|
221
224
|
"update_entity_material_families_t",
|
|
225
|
+
"upsert_condition_match_t",
|
|
222
226
|
"upsert_field_options_t",
|
|
223
227
|
"users_t",
|
|
224
228
|
"webhook_job_t",
|
|
@@ -43,7 +43,7 @@ class RequestMethod(StrEnum):
|
|
|
43
43
|
named_type_path="sdk.api.batch.execute_batch.BatchRequest",
|
|
44
44
|
unconverted_values={"data"},
|
|
45
45
|
)
|
|
46
|
-
@dataclasses.dataclass(kw_only=True)
|
|
46
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
47
47
|
class BatchRequest:
|
|
48
48
|
path: str
|
|
49
49
|
method: RequestMethod
|
|
@@ -54,7 +54,7 @@ class BatchRequest:
|
|
|
54
54
|
@serial_class(
|
|
55
55
|
named_type_path="sdk.api.batch.execute_batch.Arguments",
|
|
56
56
|
)
|
|
57
|
-
@dataclasses.dataclass(kw_only=True)
|
|
57
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
58
58
|
class Arguments:
|
|
59
59
|
requests: list[BatchRequest]
|
|
60
60
|
|
|
@@ -64,7 +64,7 @@ class Arguments:
|
|
|
64
64
|
named_type_path="sdk.api.batch.execute_batch.BatchResponse",
|
|
65
65
|
unconverted_values={"response"},
|
|
66
66
|
)
|
|
67
|
-
@dataclasses.dataclass(kw_only=True)
|
|
67
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
68
68
|
class BatchResponse:
|
|
69
69
|
path: str
|
|
70
70
|
method: RequestMethod
|
|
@@ -76,7 +76,7 @@ class BatchResponse:
|
|
|
76
76
|
@serial_class(
|
|
77
77
|
named_type_path="sdk.api.batch.execute_batch.Data",
|
|
78
78
|
)
|
|
79
|
-
@dataclasses.dataclass(kw_only=True)
|
|
79
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
80
80
|
class Data:
|
|
81
81
|
responses: list[BatchResponse]
|
|
82
82
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/batch/execute_batch_load_async"
|
|
|
26
26
|
@serial_class(
|
|
27
27
|
named_type_path="sdk.api.batch.execute_batch_load_async.Arguments",
|
|
28
28
|
)
|
|
29
|
-
@dataclasses.dataclass(kw_only=True)
|
|
29
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
30
30
|
class Arguments:
|
|
31
31
|
requests: list[async_batch_t.AsyncBatchRequest]
|
|
32
32
|
|
|
@@ -35,7 +35,7 @@ class Arguments:
|
|
|
35
35
|
@serial_class(
|
|
36
36
|
named_type_path="sdk.api.batch.execute_batch_load_async.Data",
|
|
37
37
|
)
|
|
38
|
-
@dataclasses.dataclass(kw_only=True)
|
|
38
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
39
39
|
class Data:
|
|
40
40
|
job_id: base_t.ObjectId
|
|
41
41
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -28,7 +28,7 @@ ENDPOINT_PATH = "api/external/chemical/convert_chemical_formats"
|
|
|
28
28
|
@serial_class(
|
|
29
29
|
named_type_path="sdk.api.chemical.convert_chemical_formats.ChemicalStructureFile",
|
|
30
30
|
)
|
|
31
|
-
@dataclasses.dataclass(kw_only=True)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
32
|
class ChemicalStructureFile:
|
|
33
33
|
struct_file: str
|
|
34
34
|
|
|
@@ -37,7 +37,7 @@ class ChemicalStructureFile:
|
|
|
37
37
|
@serial_class(
|
|
38
38
|
named_type_path="sdk.api.chemical.convert_chemical_formats.Arguments",
|
|
39
39
|
)
|
|
40
|
-
@dataclasses.dataclass(kw_only=True)
|
|
40
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
41
|
class Arguments:
|
|
42
42
|
source_chemical_structures: list[ChemicalStructureFile]
|
|
43
43
|
|
|
@@ -56,7 +56,7 @@ UncountableChemicalStructure = typing.Annotated[
|
|
|
56
56
|
named_type_path="sdk.api.chemical.convert_chemical_formats.Data",
|
|
57
57
|
unconverted_values={"chemical_structures"},
|
|
58
58
|
)
|
|
59
|
-
@dataclasses.dataclass(kw_only=True)
|
|
59
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
60
60
|
class Data:
|
|
61
61
|
chemical_structures: list[UncountableChemicalStructure]
|
|
62
62
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,72 @@
|
|
|
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 ... import async_batch_t
|
|
13
|
+
from ... import base_t
|
|
14
|
+
from ... import identifier_t
|
|
15
|
+
|
|
16
|
+
__all__: list[str] = [
|
|
17
|
+
"Arguments",
|
|
18
|
+
"ConditionParameter",
|
|
19
|
+
"Data",
|
|
20
|
+
"ENDPOINT_METHOD",
|
|
21
|
+
"ENDPOINT_PATH",
|
|
22
|
+
"MatchType",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
ENDPOINT_METHOD = "POST"
|
|
26
|
+
ENDPOINT_PATH = "api/external/condition_parameters/upsert_condition_match"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
30
|
+
@serial_class(
|
|
31
|
+
named_type_path="sdk.api.condition_parameters.upsert_condition_match.ConditionParameter",
|
|
32
|
+
to_string_values={"max_value", "min_value"},
|
|
33
|
+
)
|
|
34
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
35
|
+
class ConditionParameter:
|
|
36
|
+
condition_parameter_key: identifier_t.IdentifierKey
|
|
37
|
+
allow_null: bool
|
|
38
|
+
min_value: Decimal | None = None
|
|
39
|
+
max_value: Decimal | None = None
|
|
40
|
+
categorical_values: list[str | None] | None = None
|
|
41
|
+
match_type: MatchType | None = None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
45
|
+
class MatchType(StrEnum):
|
|
46
|
+
ALL = "all"
|
|
47
|
+
EQ = "eq"
|
|
48
|
+
EQCATEGORICAL = "eqCategorical"
|
|
49
|
+
RANGE = "range"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
53
|
+
@serial_class(
|
|
54
|
+
named_type_path="sdk.api.condition_parameters.upsert_condition_match.Arguments",
|
|
55
|
+
)
|
|
56
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
57
|
+
class Arguments:
|
|
58
|
+
explicit_name: bool = False
|
|
59
|
+
name: str | None = None
|
|
60
|
+
condition_parameters: list[ConditionParameter] | None = None
|
|
61
|
+
output_conditions: list[identifier_t.IdentifierKey] | None = None
|
|
62
|
+
existing_condition_match: identifier_t.IdentifierKey | None = None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
66
|
+
@serial_class(
|
|
67
|
+
named_type_path="sdk.api.condition_parameters.upsert_condition_match.Data",
|
|
68
|
+
)
|
|
69
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
70
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
71
|
+
pass
|
|
72
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -29,7 +29,7 @@ ENDPOINT_PATH = "api/external/entity/external_create_entities"
|
|
|
29
29
|
@serial_class(
|
|
30
30
|
named_type_path="sdk.api.entity.create_entities.EntityToCreate",
|
|
31
31
|
)
|
|
32
|
-
@dataclasses.dataclass(kw_only=True)
|
|
32
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
33
33
|
class EntityToCreate:
|
|
34
34
|
field_values: list[field_values_t.FieldRefNameValue] | None = None
|
|
35
35
|
parent_entity: entity_t.Entity | None = None
|
|
@@ -39,7 +39,7 @@ class EntityToCreate:
|
|
|
39
39
|
@serial_class(
|
|
40
40
|
named_type_path="sdk.api.entity.create_entities.Arguments",
|
|
41
41
|
)
|
|
42
|
-
@dataclasses.dataclass(kw_only=True)
|
|
42
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
43
43
|
class Arguments:
|
|
44
44
|
entity_type: entity_t.LimitedEntityType
|
|
45
45
|
entities_to_create: list[EntityToCreate]
|
|
@@ -51,7 +51,7 @@ class Arguments:
|
|
|
51
51
|
@serial_class(
|
|
52
52
|
named_type_path="sdk.api.entity.create_entities.Data",
|
|
53
53
|
)
|
|
54
|
-
@dataclasses.dataclass(kw_only=True)
|
|
54
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
55
55
|
class Data:
|
|
56
56
|
entities: list[entity_t.Entity]
|
|
57
57
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -30,7 +30,7 @@ ENDPOINT_PATH = "api/external/entity/external_create_entity"
|
|
|
30
30
|
named_type_path="sdk.api.entity.create_entity.EntityFieldInitialValue",
|
|
31
31
|
unconverted_values={"value"},
|
|
32
32
|
)
|
|
33
|
-
@dataclasses.dataclass(kw_only=True)
|
|
33
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
34
34
|
class EntityFieldInitialValue:
|
|
35
35
|
field_ref_name: str
|
|
36
36
|
value: base_t.JsonValue
|
|
@@ -41,7 +41,7 @@ class EntityFieldInitialValue:
|
|
|
41
41
|
@serial_class(
|
|
42
42
|
named_type_path="sdk.api.entity.create_entity.Arguments",
|
|
43
43
|
)
|
|
44
|
-
@dataclasses.dataclass(kw_only=True)
|
|
44
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
45
|
class Arguments:
|
|
46
46
|
entity_type: entity_t.LimitedEntityType
|
|
47
47
|
definition_id: base_t.ObjectId | None = None
|
|
@@ -54,7 +54,7 @@ class Arguments:
|
|
|
54
54
|
@serial_class(
|
|
55
55
|
named_type_path="sdk.api.entity.create_entity.Data",
|
|
56
56
|
)
|
|
57
|
-
@dataclasses.dataclass(kw_only=True)
|
|
57
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
58
58
|
class Data:
|
|
59
59
|
entity: entity_t.Entity
|
|
60
60
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
|
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import entity_t
|
|
13
14
|
from ... import field_values_t
|
|
14
15
|
from ... import identifier_t
|
|
@@ -28,7 +29,7 @@ ENDPOINT_PATH = "api/external/entity/create_or_update_entity"
|
|
|
28
29
|
@serial_class(
|
|
29
30
|
named_type_path="sdk.api.entity.create_or_update_entity.Arguments",
|
|
30
31
|
)
|
|
31
|
-
@dataclasses.dataclass(kw_only=True)
|
|
32
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
33
|
class Arguments:
|
|
33
34
|
entity_type: entity_t.EntityType
|
|
34
35
|
definition_key: identifier_t.IdentifierKey
|
|
@@ -40,7 +41,7 @@ class Arguments:
|
|
|
40
41
|
@serial_class(
|
|
41
42
|
named_type_path="sdk.api.entity.create_or_update_entity.Data",
|
|
42
43
|
)
|
|
43
|
-
@dataclasses.dataclass(kw_only=True)
|
|
44
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
44
45
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
45
46
|
pass
|
|
46
47
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -28,7 +28,7 @@ ENDPOINT_PATH = "api/external/entity/external_get_entities_data"
|
|
|
28
28
|
@serial_class(
|
|
29
29
|
named_type_path="sdk.api.entity.get_entities_data.Arguments",
|
|
30
30
|
)
|
|
31
|
-
@dataclasses.dataclass(kw_only=True)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
32
|
class Arguments:
|
|
33
33
|
entity_ids: list[base_t.ObjectId]
|
|
34
34
|
entity_type: entity_t.EntityType
|
|
@@ -38,7 +38,7 @@ class Arguments:
|
|
|
38
38
|
@serial_class(
|
|
39
39
|
named_type_path="sdk.api.entity.get_entities_data.EntityDetails",
|
|
40
40
|
)
|
|
41
|
-
@dataclasses.dataclass(kw_only=True)
|
|
41
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
42
42
|
class EntityDetails:
|
|
43
43
|
entity: entity_t.Entity
|
|
44
44
|
field_values: list[field_values_t.FieldRefIdNameValue]
|
|
@@ -48,7 +48,7 @@ class EntityDetails:
|
|
|
48
48
|
@serial_class(
|
|
49
49
|
named_type_path="sdk.api.entity.get_entities_data.Data",
|
|
50
50
|
)
|
|
51
|
-
@dataclasses.dataclass(kw_only=True)
|
|
51
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
52
52
|
class Data:
|
|
53
53
|
entity_details: list[EntityDetails]
|
|
54
54
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
|
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import entity_t
|
|
13
14
|
from ... import identifier_t
|
|
14
15
|
|
|
@@ -27,7 +28,7 @@ ENDPOINT_PATH = "api/external/entity/grant_entity_permissions"
|
|
|
27
28
|
@serial_class(
|
|
28
29
|
named_type_path="sdk.api.entity.grant_entity_permissions.Arguments",
|
|
29
30
|
)
|
|
30
|
-
@dataclasses.dataclass(kw_only=True)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
32
|
class Arguments:
|
|
32
33
|
entity_type: entity_t.LimitedEntityType
|
|
33
34
|
entity_key: identifier_t.IdentifierKey
|
|
@@ -41,7 +42,7 @@ class Arguments:
|
|
|
41
42
|
@serial_class(
|
|
42
43
|
named_type_path="sdk.api.entity.grant_entity_permissions.Data",
|
|
43
44
|
)
|
|
44
|
-
@dataclasses.dataclass(kw_only=True)
|
|
45
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
46
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
46
47
|
pass
|
|
47
48
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -30,7 +30,7 @@ ENDPOINT_PATH = "api/external/entity/external_list_entities"
|
|
|
30
30
|
named_type_path="sdk.api.entity.list_entities.Arguments",
|
|
31
31
|
unconverted_values={"attributes"},
|
|
32
32
|
)
|
|
33
|
-
@dataclasses.dataclass(kw_only=True)
|
|
33
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
34
34
|
class Arguments:
|
|
35
35
|
config_reference: str
|
|
36
36
|
entity_type: entity_t.EntityType | None = None
|
|
@@ -44,7 +44,7 @@ class Arguments:
|
|
|
44
44
|
named_type_path="sdk.api.entity.list_entities.EntityResult",
|
|
45
45
|
unconverted_values={"column_values"},
|
|
46
46
|
)
|
|
47
|
-
@dataclasses.dataclass(kw_only=True)
|
|
47
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
48
48
|
class EntityResult:
|
|
49
49
|
entity: entity_t.Entity
|
|
50
50
|
column_values: list[base_t.JsonValue]
|
|
@@ -54,7 +54,7 @@ class EntityResult:
|
|
|
54
54
|
@serial_class(
|
|
55
55
|
named_type_path="sdk.api.entity.list_entities.ColumnAccess",
|
|
56
56
|
)
|
|
57
|
-
@dataclasses.dataclass(kw_only=True)
|
|
57
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
58
58
|
class ColumnAccess:
|
|
59
59
|
name: str
|
|
60
60
|
table_label: str | None
|
|
@@ -64,7 +64,7 @@ class ColumnAccess:
|
|
|
64
64
|
@serial_class(
|
|
65
65
|
named_type_path="sdk.api.entity.list_entities.Data",
|
|
66
66
|
)
|
|
67
|
-
@dataclasses.dataclass(kw_only=True)
|
|
67
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
68
68
|
class Data:
|
|
69
69
|
columns: list[ColumnAccess]
|
|
70
70
|
results: list[EntityResult]
|
|
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
|
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import entity_t
|
|
13
14
|
from ... import identifier_t
|
|
14
15
|
|
|
@@ -27,7 +28,7 @@ ENDPOINT_PATH = "api/external/entity/external_lock_entity"
|
|
|
27
28
|
@serial_class(
|
|
28
29
|
named_type_path="sdk.api.entity.lock_entity.Arguments",
|
|
29
30
|
)
|
|
30
|
-
@dataclasses.dataclass(kw_only=True)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
32
|
class Arguments:
|
|
32
33
|
entity_key: identifier_t.IdentifierKey
|
|
33
34
|
entity_type: entity_t.EntityType
|
|
@@ -38,7 +39,7 @@ class Arguments:
|
|
|
38
39
|
@serial_class(
|
|
39
40
|
named_type_path="sdk.api.entity.lock_entity.Data",
|
|
40
41
|
)
|
|
41
|
-
@dataclasses.dataclass(kw_only=True)
|
|
42
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
42
43
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
43
44
|
pass
|
|
44
45
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -41,7 +41,7 @@ class LookupEntityQueryType(StrEnum):
|
|
|
41
41
|
@serial_class(
|
|
42
42
|
named_type_path="sdk.api.entity.lookup_entity.LookupEntityQueryBase",
|
|
43
43
|
)
|
|
44
|
-
@dataclasses.dataclass(kw_only=True)
|
|
44
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
45
|
class LookupEntityQueryBase:
|
|
46
46
|
type: LookupEntityQueryType
|
|
47
47
|
|
|
@@ -51,7 +51,7 @@ class LookupEntityQueryBase:
|
|
|
51
51
|
named_type_path="sdk.api.entity.lookup_entity.LookupFieldArgumentValue",
|
|
52
52
|
unconverted_values={"field_value"},
|
|
53
53
|
)
|
|
54
|
-
@dataclasses.dataclass(kw_only=True)
|
|
54
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
55
55
|
class LookupFieldArgumentValue:
|
|
56
56
|
field_key: identifier_t.IdentifierKey
|
|
57
57
|
field_value: base_t.JsonValue
|
|
@@ -63,7 +63,7 @@ class LookupFieldArgumentValue:
|
|
|
63
63
|
named_type_path="sdk.api.entity.lookup_entity.LookupEntityFieldValue",
|
|
64
64
|
parse_require={"type"},
|
|
65
65
|
)
|
|
66
|
-
@dataclasses.dataclass(kw_only=True)
|
|
66
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
67
67
|
class LookupEntityFieldValue:
|
|
68
68
|
type: typing.Literal[LookupEntityQueryType.FIELD_VALUE] = LookupEntityQueryType.FIELD_VALUE
|
|
69
69
|
value: LookupFieldArgumentValue
|
|
@@ -86,7 +86,7 @@ LookupEntityQuery = typing.Annotated[
|
|
|
86
86
|
@serial_class(
|
|
87
87
|
named_type_path="sdk.api.entity.lookup_entity.Arguments",
|
|
88
88
|
)
|
|
89
|
-
@dataclasses.dataclass(kw_only=True)
|
|
89
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
90
90
|
class Arguments:
|
|
91
91
|
entity_type: entity_t.EntityType
|
|
92
92
|
query: LookupEntityQuery
|
|
@@ -96,7 +96,7 @@ class Arguments:
|
|
|
96
96
|
@serial_class(
|
|
97
97
|
named_type_path="sdk.api.entity.lookup_entity.Data",
|
|
98
98
|
)
|
|
99
|
-
@dataclasses.dataclass(kw_only=True)
|
|
99
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
100
100
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
101
101
|
pass
|
|
102
102
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/entity/external_resolve_entity_ids"
|
|
|
27
27
|
@serial_class(
|
|
28
28
|
named_type_path="sdk.api.entity.resolve_entity_ids.Arguments",
|
|
29
29
|
)
|
|
30
|
-
@dataclasses.dataclass(kw_only=True)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
31
|
class Arguments:
|
|
32
32
|
entity_ids: list[str | base_t.ObjectId]
|
|
33
33
|
entity_type: entity_t.EntityType
|
|
@@ -37,7 +37,7 @@ class Arguments:
|
|
|
37
37
|
@serial_class(
|
|
38
38
|
named_type_path="sdk.api.entity.resolve_entity_ids.EntityNames",
|
|
39
39
|
)
|
|
40
|
-
@dataclasses.dataclass(kw_only=True)
|
|
40
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
41
|
class EntityNames:
|
|
42
42
|
id: str | int
|
|
43
43
|
name: str
|
|
@@ -47,7 +47,7 @@ class EntityNames:
|
|
|
47
47
|
@serial_class(
|
|
48
48
|
named_type_path="sdk.api.entity.resolve_entity_ids.Data",
|
|
49
49
|
)
|
|
50
|
-
@dataclasses.dataclass(kw_only=True)
|
|
50
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
51
51
|
class Data:
|
|
52
52
|
items: list[EntityNames]
|
|
53
53
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
|
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import entity_t
|
|
13
14
|
from ... import field_values_t
|
|
14
15
|
|
|
@@ -27,7 +28,7 @@ ENDPOINT_PATH = "api/external/entity/set_entity_field_values"
|
|
|
27
28
|
@serial_class(
|
|
28
29
|
named_type_path="sdk.api.entity.set_entity_field_values.Arguments",
|
|
29
30
|
)
|
|
30
|
-
@dataclasses.dataclass(kw_only=True)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
32
|
class Arguments:
|
|
32
33
|
entity_identifier: entity_t.EntityIdentifier
|
|
33
34
|
field_values: list[field_values_t.FieldArgumentValue]
|
|
@@ -37,7 +38,7 @@ class Arguments:
|
|
|
37
38
|
@serial_class(
|
|
38
39
|
named_type_path="sdk.api.entity.set_entity_field_values.Data",
|
|
39
40
|
)
|
|
40
|
-
@dataclasses.dataclass(kw_only=True)
|
|
41
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
42
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
42
43
|
pass
|
|
43
44
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -8,6 +8,7 @@ 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 base_t
|
|
11
12
|
from ... import entity_t
|
|
12
13
|
from ... import field_values_t
|
|
13
14
|
from ... import response_t
|
|
@@ -27,7 +28,7 @@ ENDPOINT_PATH = "api/external/entity/external_set_values"
|
|
|
27
28
|
@serial_class(
|
|
28
29
|
named_type_path="sdk.api.entity.set_values.Arguments",
|
|
29
30
|
)
|
|
30
|
-
@dataclasses.dataclass(kw_only=True)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
32
|
class Arguments:
|
|
32
33
|
entity: entity_t.Entity
|
|
33
34
|
values: list[field_values_t.ArgumentValueRefName]
|
|
@@ -37,7 +38,7 @@ class Arguments:
|
|
|
37
38
|
@serial_class(
|
|
38
39
|
named_type_path="sdk.api.entity.set_values.Data",
|
|
39
40
|
)
|
|
40
|
-
@dataclasses.dataclass(kw_only=True)
|
|
41
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
42
|
class Data(response_t.Response):
|
|
42
43
|
pass
|
|
43
44
|
# DO NOT MODIFY -- This file is generated by type_spec
|