UncountablePythonSDK 0.0.44__py3-none-any.whl → 0.0.46__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.44.dist-info → UncountablePythonSDK-0.0.46.dist-info}/METADATA +1 -1
- {UncountablePythonSDK-0.0.44.dist-info → UncountablePythonSDK-0.0.46.dist-info}/RECORD +20 -18
- {UncountablePythonSDK-0.0.44.dist-info → UncountablePythonSDK-0.0.46.dist-info}/WHEEL +1 -1
- pkgs/type_spec/emit_python.py +8 -0
- uncountable/core/async_batch.py +15 -0
- uncountable/core/client.py +2 -3
- uncountable/integration/construct_client.py +21 -9
- uncountable/integration/cron.py +13 -1
- uncountable/integration/entrypoint.py +1 -0
- uncountable/integration/executors/generic_upload_executor.py +2 -2
- uncountable/integration/job.py +3 -6
- uncountable/integration/server.py +6 -1
- uncountable/types/__init__.py +2 -0
- uncountable/types/client_config.py +8 -0
- uncountable/types/client_config_t.py +22 -0
- uncountable/types/entity_t.py +61 -7
- uncountable/types/job_definition.py +1 -0
- uncountable/types/job_definition_t.py +10 -0
- uncountable/types/recipe_links_t.py +1 -1
- {UncountablePythonSDK-0.0.44.dist-info → UncountablePythonSDK-0.0.46.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.46
|
|
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
|
|
@@ -50,7 +50,7 @@ pkgs/type_spec/config.py,sha256=IQyo2Vj11uNt7_d6jQxvominAOU-oPB8ldEmuGzJLpU,4644
|
|
|
50
50
|
pkgs/type_spec/emit_io_ts.py,sha256=Ghd8XYqyNYldHQDepwa9GLfHXcoi48ztBw84K28ETic,5707
|
|
51
51
|
pkgs/type_spec/emit_open_api.py,sha256=92POd3j4nrrROrw9M-bgEmK4ukYbI0TW6E9IigJzoTE,24512
|
|
52
52
|
pkgs/type_spec/emit_open_api_util.py,sha256=y2slouAflUJmyTPH_d4CbXql9zpOoD1uTOELqL3NX-M,2448
|
|
53
|
-
pkgs/type_spec/emit_python.py,sha256=
|
|
53
|
+
pkgs/type_spec/emit_python.py,sha256=bQUqVmfVgAXw8rGcqlg93YbUsUvawgR2o_NrV_c9Zio,46873
|
|
54
54
|
pkgs/type_spec/emit_typescript.py,sha256=cdr5h8N70PuwORcvhURUujzwH9r1LVwJB8V2EoipGkw,17917
|
|
55
55
|
pkgs/type_spec/emit_typescript_util.py,sha256=sR7ys3Ilnh6SQiXJbfYk4pxfOu0bDjbUFTEYEW-ud6c,863
|
|
56
56
|
pkgs/type_spec/load_types.py,sha256=BOLyndtxPqqhUqZAh-lIbN5IZBaW_m-bdYpKGsbPyXM,3654
|
|
@@ -72,25 +72,25 @@ pkgs/type_spec/value_spec/types.py,sha256=a2zxbbCRWepY1l8OtjeCDKgBKFPFHVgV99oP6p
|
|
|
72
72
|
uncountable/__init__.py,sha256=8l8XWNCKsu7TG94c-xa2KHpDegvxDC2FyQISdWC763Y,89
|
|
73
73
|
uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
74
|
uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,341
|
|
75
|
-
uncountable/core/async_batch.py,sha256=
|
|
76
|
-
uncountable/core/client.py,sha256=
|
|
75
|
+
uncountable/core/async_batch.py,sha256=Gur0VOS0AH2ugwvk65hwoX-iqwQAAyJaejY_LyAZZPo,1210
|
|
76
|
+
uncountable/core/client.py,sha256=2QRLy0GcSamQDqUABQq8R7D_wGofYewSoTQiZzOyZXk,10168
|
|
77
77
|
uncountable/core/file_upload.py,sha256=TkQ0fKbbYrPgns1Jh51JU35DUqZHB3ljOaVgjSlBx9Y,3149
|
|
78
78
|
uncountable/core/types.py,sha256=s2CjqYJpsmbC7xMwxxT7kJ_V9bwokrjjWVVjpMcQpKI,333
|
|
79
79
|
uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
-
uncountable/integration/construct_client.py,sha256=
|
|
81
|
-
uncountable/integration/cron.py,sha256=
|
|
82
|
-
uncountable/integration/entrypoint.py,sha256=
|
|
83
|
-
uncountable/integration/job.py,sha256=
|
|
84
|
-
uncountable/integration/server.py,sha256=
|
|
80
|
+
uncountable/integration/construct_client.py,sha256=9ZsfkA0oZIE04mPnwGlt6EcrlnpaUPA93K100FS1F7A,1546
|
|
81
|
+
uncountable/integration/cron.py,sha256=n4HjW-KNruYQ_09iwNBd9i4-Juy_9ddzbf71_wnydHA,1674
|
|
82
|
+
uncountable/integration/entrypoint.py,sha256=9rk06gBTsCqytIs8Shsnlf6ir_4Uq5d5rfP1veiSLzc,1437
|
|
83
|
+
uncountable/integration/job.py,sha256=5HJcjtwj_pGFYAZ6SK7xa9RqDXCoBb5rAb_OHdTR61Q,1463
|
|
84
|
+
uncountable/integration/server.py,sha256=85yzQrrpp8OEG37CTN9wtgB9UrzWnDLuDkY0nWcp--k,3548
|
|
85
85
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
86
86
|
uncountable/integration/db/connect.py,sha256=YtQHJ1DBGPhxKFRCfiXqohOYUceKSxMVOJ88aPI48Ug,181
|
|
87
87
|
uncountable/integration/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
88
|
uncountable/integration/executors/executors.py,sha256=v5ClGVUlvrZcMdmGQa8Ll668G_HGTnKpGOnTM7UMZCQ,956
|
|
89
|
-
uncountable/integration/executors/generic_upload_executor.py,sha256=
|
|
89
|
+
uncountable/integration/executors/generic_upload_executor.py,sha256=axGpIfF0IMHilGzFawDizWoDhYffeqYXuhfyYkQhWF4,8754
|
|
90
90
|
uncountable/integration/executors/script_executor.py,sha256=OmSBOtU48G3mqza9c2lCm84pGGyaDk-ZBJCx3RsdJXc,846
|
|
91
91
|
uncountable/integration/secret_retrieval/__init__.py,sha256=3QXVj35w8rRMxVvmmsViFYDi3lcb3g70incfalOEm6o,87
|
|
92
92
|
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=M0qXVJpD8hMYIFypHFeyh598sqmIDX8ZOyXK23CluF0,1323
|
|
93
|
-
uncountable/types/__init__.py,sha256=
|
|
93
|
+
uncountable/types/__init__.py,sha256=95iOd3WXWoI_4a461IS2ieWRic3zRyNaCYzfTpX764o,8162
|
|
94
94
|
uncountable/types/async_batch.py,sha256=ihCv5XWSTTPmuO-GMPn1EACGI2CBUIJTATZ3aPgsNBA,523
|
|
95
95
|
uncountable/types/async_batch_processor.py,sha256=BNEWdRIcuJHGeY4KVCudf4gG-kV6_dZR7aeSWupCPjk,8581
|
|
96
96
|
uncountable/types/async_batch_t.py,sha256=9jp9rOyetRdD5aQVyijzQggTyYU4021PBVGXk0ooBCQ,1911
|
|
@@ -101,10 +101,12 @@ uncountable/types/calculations_t.py,sha256=7GTSi2L8NYjzjUJJx3cmtVkK9uD-uhfYvIFK-
|
|
|
101
101
|
uncountable/types/chemical_structure.py,sha256=E-LnikTFDoVQ1b2zKaVUIO_PAKm-7aZZYJi8I8SDSic,302
|
|
102
102
|
uncountable/types/chemical_structure_t.py,sha256=aFsTkkbzy6Gvyde3qrrEYD95gcYhxkgKMiDRaRE0o-Y,760
|
|
103
103
|
uncountable/types/client_base.py,sha256=Z3tQl_RPOd6SCWY2emeYrdguKGEFyoo__wqXzj2eipM,65171
|
|
104
|
+
uncountable/types/client_config.py,sha256=4h5Liko9uKCo9_0gdbPhoK6Jr2Kv7tioLiQ8iKeq-_4,301
|
|
105
|
+
uncountable/types/client_config_t.py,sha256=_HdS37gMSTIiD4qLnW9dIgt8_Rt5A6xhwMGGga7vnLg,625
|
|
104
106
|
uncountable/types/curves.py,sha256=W6uMpG5SyW1MS82szNpxkFEn1MnxNpBFyFbQb2Ysfng,366
|
|
105
107
|
uncountable/types/curves_t.py,sha256=TDpsThz4lKmiBmS9b4ItUSCp64TGv8-qDkxb4B2RoTo,1314
|
|
106
108
|
uncountable/types/entity.py,sha256=3XhLteFDRDZvHejDuYh-KvB65hpwrBygljFfiUcOAM8,315
|
|
107
|
-
uncountable/types/entity_t.py,sha256=
|
|
109
|
+
uncountable/types/entity_t.py,sha256=HhKmcH5Op8rEkDhpw7SXQ7QakbFdvG5FpB6O4e7cMY0,14439
|
|
108
110
|
uncountable/types/experiment_groups.py,sha256=_0OXcPzSAbkE-rfKt5tPx178YJ4pcEKZvrCxUHgDnvw,309
|
|
109
111
|
uncountable/types/experiment_groups_t.py,sha256=0IGAXwkYiwdjj6aFjLMihxwauACQTyuRU_1usJTeUg4,593
|
|
110
112
|
uncountable/types/field_values.py,sha256=uuIWX-xmfvcinYPdfkWJeb56zzQY01mc9rmotMPMh24,503
|
|
@@ -121,8 +123,8 @@ uncountable/types/input_attributes.py,sha256=IrIKQnHqHdS1Utdfzr9GnOe17a8riaqYcO1
|
|
|
121
123
|
uncountable/types/input_attributes_t.py,sha256=wE1ekiQfb72Z9VpF5SHipKJkgaJFUHJrNkkJdmuhF9w,820
|
|
122
124
|
uncountable/types/inputs.py,sha256=6RIEFfCxLqpeHEGOpu63O4i8zPogjGeB7wiV_rPBw_g,404
|
|
123
125
|
uncountable/types/inputs_t.py,sha256=RW7gF9zTOwByu-nMTMVuBabLOuWKx4O1nvfgvx_R55o,1611
|
|
124
|
-
uncountable/types/job_definition.py,sha256=
|
|
125
|
-
uncountable/types/job_definition_t.py,sha256=
|
|
126
|
+
uncountable/types/job_definition.py,sha256=W2wth9vPRBVL0temwnSmvfxxPMKFxZqbQtsMXn8BU3U,1637
|
|
127
|
+
uncountable/types/job_definition_t.py,sha256=1VZO3l5oGnvtG-ikQB6YuukblHhEwtmJfQpGmo0Gi40,5735
|
|
126
128
|
uncountable/types/outputs.py,sha256=sUZx_X-TKCZtLm1YCEH8OISX9DdPlv9ZuUfM3-askCc,281
|
|
127
129
|
uncountable/types/outputs_t.py,sha256=2aORUOr0ls1ZYo-ddkWax3D1ZndmQsWtHfJxpYozlhg,656
|
|
128
130
|
uncountable/types/permissions.py,sha256=1mRnSsmRgjuLgp6pylTwwACD_YRIcmlqxHkufwZtMns,297
|
|
@@ -136,7 +138,7 @@ uncountable/types/recipe_identifiers_t.py,sha256=suumLdp_8SZD7oqIxSEaV9D1irMeLJ5
|
|
|
136
138
|
uncountable/types/recipe_inputs.py,sha256=5ThNFEOGbADqqfj1V3hNvZUcO5pn1Gm17LmzQkWDrtI,351
|
|
137
139
|
uncountable/types/recipe_inputs_t.py,sha256=t5nFzuF1AU6SUHpya6xKHSlcckmt3XxAuk9ofjZ2oGU,746
|
|
138
140
|
uncountable/types/recipe_links.py,sha256=YRiu6t7FWr7ZWycIaOPXBtQFqbY_q5unaP6KQzh1LzE,343
|
|
139
|
-
uncountable/types/recipe_links_t.py,sha256=
|
|
141
|
+
uncountable/types/recipe_links_t.py,sha256=ZaTeP8AsIT9-gDRi_uQreDsAzEmqF34YTesh9uydYa0,1417
|
|
140
142
|
uncountable/types/recipe_metadata.py,sha256=Zpcrupq_mlT2UhXpMJup5XjtubmvgZ8SbJNq7da2pCs,441
|
|
141
143
|
uncountable/types/recipe_metadata_t.py,sha256=y2O2rIanS6WG0j1UDSsRSwyEKYNDeNaixlR3PmkYnkU,1455
|
|
142
144
|
uncountable/types/recipe_output_metadata.py,sha256=83jKZCvogG9QjZeJpQptdSam_MnnUj-tqh9EVIrTWjE,322
|
|
@@ -235,7 +237,7 @@ uncountable/types/api/triggers/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr
|
|
|
235
237
|
uncountable/types/api/triggers/run_trigger.py,sha256=_Rpha9nxXI3Xr17CrGDtofg4HZ81x2lt0rMZ6As0qfE,893
|
|
236
238
|
uncountable/types/api/uploader/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
237
239
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=2RCvnccwEm6J5dt7UJVLUKxfk49vfpGXjBLCWIBD3Ck,1006
|
|
238
|
-
UncountablePythonSDK-0.0.
|
|
239
|
-
UncountablePythonSDK-0.0.
|
|
240
|
-
UncountablePythonSDK-0.0.
|
|
241
|
-
UncountablePythonSDK-0.0.
|
|
240
|
+
UncountablePythonSDK-0.0.46.dist-info/METADATA,sha256=T5qGdsLkqIsqutdNrO1eUtVrnZwQ-gCfKcaaDpimbrQ,1707
|
|
241
|
+
UncountablePythonSDK-0.0.46.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
|
242
|
+
UncountablePythonSDK-0.0.46.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
243
|
+
UncountablePythonSDK-0.0.46.dist-info/RECORD,,
|
pkgs/type_spec/emit_python.py
CHANGED
|
@@ -719,6 +719,14 @@ def _emit_properties(
|
|
|
719
719
|
default = "None"
|
|
720
720
|
elif prop.has_default:
|
|
721
721
|
default = _emit_value(ctx, prop.spec_type, prop.default)
|
|
722
|
+
if (
|
|
723
|
+
isinstance(prop.spec_type, builder.SpecTypeInstance)
|
|
724
|
+
and (
|
|
725
|
+
prop.spec_type.defn_type.is_base_type(builder.BaseTypeName.s_list)
|
|
726
|
+
)
|
|
727
|
+
and default == "[]"
|
|
728
|
+
):
|
|
729
|
+
default = "dataclasses.field(default_factory=list)"
|
|
722
730
|
class_out.write(f"{INDENT * num_indent}{py_name}: {ref_type}")
|
|
723
731
|
if default:
|
|
724
732
|
class_out.write(f" = {default}")
|
uncountable/core/async_batch.py
CHANGED
|
@@ -4,19 +4,34 @@ from uncountable.types.async_batch import AsyncBatchRequest
|
|
|
4
4
|
from uncountable.types.async_batch_processor import AsyncBatchProcessorBase
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
class AsyncBatchSubmissionError(BaseException):
|
|
8
|
+
pass
|
|
9
|
+
|
|
10
|
+
|
|
7
11
|
class AsyncBatchProcessor(AsyncBatchProcessorBase):
|
|
8
12
|
_client: Client
|
|
9
13
|
_queue: list[AsyncBatchRequest]
|
|
14
|
+
_submitted_job_ids: list[base_t.ObjectId]
|
|
10
15
|
|
|
11
16
|
def __init__(self, *, client: Client) -> None:
|
|
12
17
|
super().__init__()
|
|
13
18
|
self._client = client
|
|
14
19
|
self._queue = []
|
|
20
|
+
self._submitted_job_ids = []
|
|
15
21
|
|
|
16
22
|
def _enqueue(self, req: async_batch_t.AsyncBatchRequest) -> None:
|
|
17
23
|
self._queue.append(req)
|
|
18
24
|
|
|
25
|
+
def current_queue_size(self) -> int:
|
|
26
|
+
return len(self._queue)
|
|
27
|
+
|
|
19
28
|
def send(self) -> base_t.ObjectId:
|
|
29
|
+
if len(self._queue) == 0:
|
|
30
|
+
raise AsyncBatchSubmissionError("queue is empty")
|
|
20
31
|
job_id = self._client.execute_batch_load_async(requests=self._queue).job_id
|
|
32
|
+
self._submitted_job_ids.append(job_id)
|
|
21
33
|
self._queue = []
|
|
22
34
|
return job_id
|
|
35
|
+
|
|
36
|
+
def get_submitted_job_ids(self) -> list[base_t.ObjectId]:
|
|
37
|
+
return self._submitted_job_ids
|
uncountable/core/client.py
CHANGED
|
@@ -15,6 +15,7 @@ from pkgs.argument_parser import CachedParser
|
|
|
15
15
|
from pkgs.serialization_util import serialize_for_api
|
|
16
16
|
from pkgs.serialization_util.serialization_helpers import JsonValue
|
|
17
17
|
from uncountable.types.client_base import APIRequest, ClientMethods
|
|
18
|
+
from uncountable.types.client_config import ClientConfigOptions
|
|
18
19
|
|
|
19
20
|
from .file_upload import FileUpload, FileUploader, UploadedFile
|
|
20
21
|
from .types import AuthDetailsAll, AuthDetailsApiKey, AuthDetailsOAuth
|
|
@@ -58,9 +59,7 @@ HTTPRequest = HTTPPostRequest | HTTPGetRequest
|
|
|
58
59
|
|
|
59
60
|
|
|
60
61
|
@dataclass(kw_only=True)
|
|
61
|
-
class ClientConfig:
|
|
62
|
-
allow_insecure_tls: bool = False
|
|
63
|
-
extra_headers: dict[str, str] | None = None
|
|
62
|
+
class ClientConfig(ClientConfigOptions):
|
|
64
63
|
transform_request: typing.Callable[[requests.Request], requests.Request] | None = None
|
|
65
64
|
|
|
66
65
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import assert_never
|
|
3
2
|
|
|
4
3
|
from uncountable.core import AuthDetailsApiKey, Client
|
|
4
|
+
from uncountable.core.client import ClientConfig
|
|
5
|
+
from uncountable.core.types import AuthDetailsAll
|
|
5
6
|
from uncountable.types.job_definition_t import (
|
|
6
7
|
AuthRetrievalEnv,
|
|
7
8
|
ProfileMetadata,
|
|
@@ -15,7 +16,7 @@ def _get_env_var(name: str) -> str:
|
|
|
15
16
|
return value
|
|
16
17
|
|
|
17
18
|
|
|
18
|
-
def
|
|
19
|
+
def _construct_auth_details(profile_meta: ProfileMetadata) -> AuthDetailsAll:
|
|
19
20
|
match profile_meta.auth_retrieval:
|
|
20
21
|
case AuthRetrievalEnv():
|
|
21
22
|
api_id = _get_env_var(f"UNC_PROFILE_{profile_meta.name.upper()}_API_ID")
|
|
@@ -26,10 +27,21 @@ def construct_uncountable_client(profile_meta: ProfileMetadata) -> Client:
|
|
|
26
27
|
assert api_id is not None
|
|
27
28
|
assert api_secret_key is not None
|
|
28
29
|
|
|
29
|
-
return
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
return AuthDetailsApiKey(api_id=api_id, api_secret_key=api_secret_key)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _construct_client_config(profile_meta: ProfileMetadata) -> ClientConfig | None:
|
|
34
|
+
if profile_meta.client_options is None:
|
|
35
|
+
return None
|
|
36
|
+
return ClientConfig(
|
|
37
|
+
allow_insecure_tls=profile_meta.client_options.allow_insecure_tls,
|
|
38
|
+
extra_headers=profile_meta.client_options.extra_headers,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def construct_uncountable_client(profile_meta: ProfileMetadata) -> Client:
|
|
43
|
+
return Client(
|
|
44
|
+
base_url=profile_meta.base_url,
|
|
45
|
+
auth_details=_construct_auth_details(profile_meta),
|
|
46
|
+
config=_construct_client_config(profile_meta),
|
|
47
|
+
)
|
uncountable/integration/cron.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
|
|
3
3
|
from pkgs.argument_parser import CachedParser
|
|
4
|
+
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
4
5
|
from uncountable.integration.construct_client import construct_uncountable_client
|
|
5
6
|
from uncountable.integration.executors.executors import resolve_executor
|
|
6
7
|
from uncountable.integration.job import CronJobArguments, JobLogger
|
|
@@ -18,9 +19,12 @@ cron_args_parser = CachedParser(CronJobArgs)
|
|
|
18
19
|
|
|
19
20
|
def cron_job_executor(**kwargs: dict) -> None:
|
|
20
21
|
args_passed = cron_args_parser.parse_storage(kwargs)
|
|
22
|
+
client = construct_uncountable_client(profile_meta=args_passed.profile_metadata)
|
|
23
|
+
batch_processor = AsyncBatchProcessor(client=client)
|
|
21
24
|
args = CronJobArguments(
|
|
22
25
|
job_definition=args_passed.definition,
|
|
23
|
-
client=
|
|
26
|
+
client=client,
|
|
27
|
+
batch_processor=batch_processor,
|
|
24
28
|
profile_metadata=args_passed.profile_metadata,
|
|
25
29
|
logger=JobLogger(
|
|
26
30
|
profile_metadata=args_passed.profile_metadata,
|
|
@@ -33,3 +37,11 @@ def cron_job_executor(**kwargs: dict) -> None:
|
|
|
33
37
|
print(f"running job {args_passed.definition.name}")
|
|
34
38
|
|
|
35
39
|
job.run(args=args)
|
|
40
|
+
|
|
41
|
+
if batch_processor.current_queue_size() != 0:
|
|
42
|
+
batch_processor.send()
|
|
43
|
+
|
|
44
|
+
print(f"completed job {args_passed.definition.name}")
|
|
45
|
+
submitted_batch_job_ids = batch_processor.get_submitted_job_ids()
|
|
46
|
+
if len(submitted_batch_job_ids) != 0:
|
|
47
|
+
print("submitted batch jobs", submitted_batch_job_ids)
|
|
@@ -2,7 +2,6 @@ import io
|
|
|
2
2
|
import os
|
|
3
3
|
import re
|
|
4
4
|
from datetime import datetime, timezone
|
|
5
|
-
from tempfile import NamedTemporaryFile
|
|
6
5
|
|
|
7
6
|
import paramiko
|
|
8
7
|
|
|
@@ -17,7 +16,7 @@ from pkgs.filesystem_utils import (
|
|
|
17
16
|
from pkgs.filesystem_utils.filesystem_session import FileSystemSession
|
|
18
17
|
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
19
18
|
from uncountable.core.file_upload import DataFileUpload, FileUpload
|
|
20
|
-
from uncountable.integration.job import Job, JobArguments, JobLogger
|
|
19
|
+
from uncountable.integration.job import Job, JobArguments, JobLogger
|
|
21
20
|
from uncountable.integration.secret_retrieval import retrieve_secret
|
|
22
21
|
from uncountable.types.generic_upload_t import (
|
|
23
22
|
GenericRemoteDirectoryScope,
|
|
@@ -26,6 +25,7 @@ from uncountable.types.generic_upload_t import (
|
|
|
26
25
|
from uncountable.types.job_definition_t import (
|
|
27
26
|
GenericUploadDataSource,
|
|
28
27
|
GenericUploadDataSourceSFTP,
|
|
28
|
+
JobResult,
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
|
uncountable/integration/job.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
|
|
4
|
+
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
4
5
|
from uncountable.core.client import Client
|
|
5
|
-
from uncountable.types.job_definition_t import JobDefinition, ProfileMetadata
|
|
6
|
+
from uncountable.types.job_definition_t import JobDefinition, JobResult, ProfileMetadata
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class JobLogger:
|
|
@@ -25,6 +26,7 @@ class JobArgumentsBase:
|
|
|
25
26
|
job_definition: JobDefinition
|
|
26
27
|
profile_metadata: ProfileMetadata
|
|
27
28
|
client: Client
|
|
29
|
+
batch_processor: AsyncBatchProcessor
|
|
28
30
|
logger: JobLogger
|
|
29
31
|
|
|
30
32
|
|
|
@@ -37,11 +39,6 @@ class CronJobArguments(JobArgumentsBase):
|
|
|
37
39
|
JobArguments = CronJobArguments
|
|
38
40
|
|
|
39
41
|
|
|
40
|
-
@dataclass
|
|
41
|
-
class JobResult:
|
|
42
|
-
success: bool
|
|
43
|
-
|
|
44
|
-
|
|
45
42
|
class Job(ABC):
|
|
46
43
|
_unc_job_registered: bool = False
|
|
47
44
|
|
|
@@ -11,6 +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.types.client_config_t import ClientConfigOptions
|
|
14
15
|
from uncountable.types.job_definition_t import (
|
|
15
16
|
AuthRetrieval,
|
|
16
17
|
CronJobDefinition,
|
|
@@ -40,10 +41,14 @@ class IntegrationServer:
|
|
|
40
41
|
base_url: str,
|
|
41
42
|
auth_retrieval: AuthRetrieval,
|
|
42
43
|
jobs: list[JobDefinition],
|
|
44
|
+
client_options: Optional[ClientConfigOptions],
|
|
43
45
|
) -> None:
|
|
44
46
|
for job_defn in jobs:
|
|
45
47
|
profile_metadata = ProfileMetadata(
|
|
46
|
-
name=profile_name,
|
|
48
|
+
name=profile_name,
|
|
49
|
+
auth_retrieval=auth_retrieval,
|
|
50
|
+
base_url=base_url,
|
|
51
|
+
client_options=client_options,
|
|
47
52
|
)
|
|
48
53
|
match job_defn:
|
|
49
54
|
case CronJobDefinition():
|
uncountable/types/__init__.py
CHANGED
|
@@ -12,6 +12,7 @@ from . import async_batch_t as async_batch_t
|
|
|
12
12
|
from . import base_t as base_t
|
|
13
13
|
from . import calculations_t as calculations_t
|
|
14
14
|
from . import chemical_structure_t as chemical_structure_t
|
|
15
|
+
from . import client_config_t as client_config_t
|
|
15
16
|
from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
|
|
16
17
|
from .api.entity import create_entities as create_entities_t
|
|
17
18
|
from .api.entity import create_entity as create_entity_t
|
|
@@ -107,6 +108,7 @@ __all__: list[str] = [
|
|
|
107
108
|
"base_t",
|
|
108
109
|
"calculations_t",
|
|
109
110
|
"chemical_structure_t",
|
|
111
|
+
"client_config_t",
|
|
110
112
|
"convert_chemical_formats_t",
|
|
111
113
|
"create_entities_t",
|
|
112
114
|
"create_entity_t",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# flake8: noqa: F821
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
6
|
+
# Kept only for SDK backwards compatibility
|
|
7
|
+
from .client_config_t import ClientConfigOptions as ClientConfigOptions
|
|
8
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# flake8: noqa: F821
|
|
3
|
+
# ruff: noqa: E402 Q003
|
|
4
|
+
# fmt: off
|
|
5
|
+
# isort: skip_file
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import typing # noqa: F401
|
|
8
|
+
import datetime # noqa: F401
|
|
9
|
+
from decimal import Decimal # noqa: F401
|
|
10
|
+
import dataclasses
|
|
11
|
+
|
|
12
|
+
__all__: list[str] = [
|
|
13
|
+
"ClientConfigOptions",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
18
|
+
@dataclasses.dataclass(kw_only=True)
|
|
19
|
+
class ClientConfigOptions:
|
|
20
|
+
allow_insecure_tls: bool = False
|
|
21
|
+
extra_headers: typing.Optional[typing.Optional[dict[str, str]]] = None
|
|
22
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/entity_t.py
CHANGED
|
@@ -29,40 +29,53 @@ __all__: list[str] = [
|
|
|
29
29
|
"calendar": "Calendar",
|
|
30
30
|
"calendar_event": "Calendar Event",
|
|
31
31
|
"certification": "Certification",
|
|
32
|
+
"characterization": "Characterization",
|
|
32
33
|
"comment": "Comment",
|
|
33
34
|
"comment_thread": "Comment Thread",
|
|
34
35
|
"condition_parameter": "Condition Parameter",
|
|
35
36
|
"condition_parameter_mat_family": "Condition Parameter Material Family",
|
|
37
|
+
"condition_parameter_value": "Condition Parameter Value",
|
|
36
38
|
"constraint": "Constraint",
|
|
37
39
|
"constraint_set": "Constraint Set",
|
|
38
40
|
"curve_settings": "Curve Settings",
|
|
39
41
|
"custom_entity": "Custom Entity",
|
|
40
42
|
"doe_run": "Suggest Experiments",
|
|
43
|
+
"email_record_external": "External Emails",
|
|
44
|
+
"email_relay_server": "Email Relay Server",
|
|
45
|
+
"enter_recipe_view_preference": "Enter Recipe View Preference",
|
|
41
46
|
"entities_viewed": "Entities Viewed",
|
|
47
|
+
"entity_annotation": "Annotation",
|
|
42
48
|
"entity_field": "Field",
|
|
43
49
|
"entity_field_audit_log": "Entity Field Audit Log",
|
|
50
|
+
"entity_link": "Entity Link",
|
|
44
51
|
"entity_phase_event": "Entity Phase Event",
|
|
52
|
+
"entity_search": "Entity Search",
|
|
45
53
|
"entity_tag": "Entity Tag",
|
|
46
54
|
"equipment": "Equipment",
|
|
55
|
+
"equipment_maintenance": "Equipment Maintenance",
|
|
47
56
|
"equipment_type": "Equipment Type",
|
|
48
57
|
"experiment_group": "Experiment Group",
|
|
49
58
|
"experiment_group_type": "Experiment Group Type",
|
|
50
59
|
"favorite_link": "Favorite Link",
|
|
51
60
|
"field_option_set": "Field Option Set",
|
|
61
|
+
"field_option": "Field Option",
|
|
52
62
|
"file_folder": "File Folder",
|
|
53
63
|
"file_folder_membership": "File Folder Membership",
|
|
54
64
|
"goal": "Goal",
|
|
55
65
|
"ingredient": "Ingredient",
|
|
56
66
|
"ingredient_attribute": "Ingredient Attribute",
|
|
57
67
|
"ingredient_attribute_category": "Ingredient Attribute Category",
|
|
58
|
-
"ingredient_category": "Ingredient Category",
|
|
68
|
+
"ingredient_category": "Ingredient Category (Project)",
|
|
59
69
|
"ingredient_category_all": "Ingredient Category",
|
|
70
|
+
"ingredient_category_all_material_family": "Ingredient Category Material Family",
|
|
60
71
|
"ingredient_lot": "Ingredient Lot",
|
|
61
72
|
"ingredient_role": "Ingredient Role",
|
|
62
73
|
"ingredient_tag": "Ingredient Subcategory",
|
|
63
74
|
"input_group": "Input Group",
|
|
64
75
|
"inv_local_locations": "Inventory Location",
|
|
65
76
|
"inventory_amount": "Inventory Amount",
|
|
77
|
+
"inventory_limit": "Inventory Limit",
|
|
78
|
+
"inventory_history": "Inventory History",
|
|
66
79
|
"lab_location": "Lab Location",
|
|
67
80
|
"lab_request": "Lab Request",
|
|
68
81
|
"license": "License",
|
|
@@ -82,46 +95,59 @@ __all__: list[str] = [
|
|
|
82
95
|
"output_condition_parameter_analytical_method_category": "Output Condition Parameter Analytical Method Category",
|
|
83
96
|
"output_condition_parameter_analytical_method": "Output Condition Parameter Analytical Method",
|
|
84
97
|
"output_group": "Output Group",
|
|
85
|
-
"recipe_output_metadata": "Recipe Output Metadata",
|
|
86
98
|
"permission": "Permission",
|
|
99
|
+
"permissions_recipe_link_inheritance": "Permissions Recipe Link Inheritance",
|
|
87
100
|
"phase_workflow": "Phase Workflow",
|
|
101
|
+
"platform_config": "Platform Config",
|
|
88
102
|
"predictive_model": "Predictive Model",
|
|
89
103
|
"product": "Product",
|
|
90
104
|
"project": "Project",
|
|
105
|
+
"project_workbook_comment": "Notebook Cell Comment",
|
|
91
106
|
"recipe": "Experiment",
|
|
107
|
+
"recipe_audit_log": "Experiment Audit Log",
|
|
92
108
|
"recipe_calculation": "Recipe Calculation",
|
|
93
|
-
"recipe_permission_view": "Recipe Permission View",
|
|
94
|
-
"recipe_project": "Recipe Project",
|
|
95
109
|
"recipe_check": "Experiment Check",
|
|
96
110
|
"recipe_export": "Recipe Export",
|
|
111
|
+
"recipe_ingredient": "Recipe Ingredient",
|
|
112
|
+
"recipe_ingredient_actual": "Recipe Ingredient Actual",
|
|
97
113
|
"recipe_ingredients_compounded": "Recipe Ingredients Compounded",
|
|
98
114
|
"recipe_ingredients_compounded_calculation": "Recipe Ingredients Compounded Caclulation",
|
|
115
|
+
"recipe_output": "Recipe Output",
|
|
116
|
+
"recipe_output_metadata": "Recipe Output Metadata",
|
|
117
|
+
"recipe_permission_view": "Recipe Permission View",
|
|
118
|
+
"recipe_project": "Recipe Project",
|
|
99
119
|
"recipe_step": "Recipe Step",
|
|
100
120
|
"recipe_tag": "Recipe Tag",
|
|
101
121
|
"recipe_metadata": "Experiment Metadata",
|
|
122
|
+
"metadata_value": "Metadata Value",
|
|
102
123
|
"review": "Review",
|
|
103
124
|
"review_entity_user_status": "Review Entity User Status",
|
|
104
125
|
"review_user": "Review User",
|
|
105
126
|
"rlw_phase": "Phase",
|
|
127
|
+
"rlw_trigger": "Trigger",
|
|
106
128
|
"rlw_trigger_set": "Trigger Set",
|
|
107
129
|
"safety_data_sheet": "Safety Data Sheet",
|
|
108
130
|
"scheduled_notification": "Scheduled Notification",
|
|
109
131
|
"specs": "Spec",
|
|
110
132
|
"split_template": "Split Template",
|
|
111
133
|
"structured_loading_user_config": "List Config",
|
|
134
|
+
"table_builder_config": "Table Builder Config",
|
|
112
135
|
"task": "Task",
|
|
113
136
|
"task_board": "Task Board",
|
|
114
137
|
"template": "Template",
|
|
115
138
|
"timesheet_entry": "Timesheet Entry",
|
|
116
139
|
"training_run": "Analyze Experiment",
|
|
140
|
+
"training_run_template": "Scheduled Training Run",
|
|
117
141
|
"training_set": "Training Set",
|
|
118
142
|
"time_series": "Time Series",
|
|
143
|
+
"time_series_stage": "Time Series Stage",
|
|
119
144
|
"units": "Units",
|
|
120
145
|
"user_favorite": "User Favorite",
|
|
121
146
|
"user": "User",
|
|
122
147
|
"user_certification": "User Certification",
|
|
123
148
|
"user_group": "User Group",
|
|
124
149
|
"user_list_set": "User List Set",
|
|
150
|
+
"value_spec_property": "Value Spec Property",
|
|
125
151
|
"webhook": "Webhook",
|
|
126
152
|
"webhook_event": "Webhook Event",
|
|
127
153
|
"workflow": "Workflow",
|
|
@@ -135,6 +161,7 @@ __all__: list[str] = [
|
|
|
135
161
|
"public_data_sourced_output": "ChemQuery Property",
|
|
136
162
|
"public_data_sourced_project": "ChemQuery Category",
|
|
137
163
|
"public_data_sourced_recipe": "ChemQuery Product",
|
|
164
|
+
"public_data_sourced_raw_material": "ChemQuery Raw Materials",
|
|
138
165
|
"public_data_sourced_recipe_project": "ChemQuery Product Category",
|
|
139
166
|
"public_data_sourced_recipe_metadata": "ChemQuery Product Information",
|
|
140
167
|
"public_data_sourced_units": "ChemQuery Units",
|
|
@@ -152,26 +179,36 @@ class EntityType(StrEnum):
|
|
|
152
179
|
CALENDAR = "calendar"
|
|
153
180
|
CALENDAR_EVENT = "calendar_event"
|
|
154
181
|
CERTIFICATION = "certification"
|
|
182
|
+
CHARACTERIZATION = "characterization"
|
|
155
183
|
COMMENT = "comment"
|
|
156
184
|
COMMENT_THREAD = "comment_thread"
|
|
157
185
|
CONDITION_PARAMETER = "condition_parameter"
|
|
158
186
|
CONDITION_PARAMETER_MAT_FAMILY = "condition_parameter_mat_family"
|
|
187
|
+
CONDITION_PARAMETER_VALUE = "condition_parameter_value"
|
|
159
188
|
CONSTRAINT = "constraint"
|
|
160
189
|
CONSTRAINT_SET = "constraint_set"
|
|
161
190
|
CURVE_SETTINGS = "curve_settings"
|
|
162
191
|
CUSTOM_ENTITY = "custom_entity"
|
|
163
192
|
DOE_RUN = "doe_run"
|
|
193
|
+
EMAIL_RECORD_EXTERNAL = "email_record_external"
|
|
194
|
+
EMAIL_RELAY_SERVER = "email_relay_server"
|
|
195
|
+
ENTER_RECIPE_VIEW_PREFERENCE = "enter_recipe_view_preference"
|
|
164
196
|
ENTITIES_VIEWED = "entities_viewed"
|
|
197
|
+
ENTITY_ANNOTATION = "entity_annotation"
|
|
165
198
|
ENTITY_FIELD = "entity_field"
|
|
166
199
|
ENTITY_FIELD_AUDIT_LOG = "entity_field_audit_log"
|
|
200
|
+
ENTITY_LINK = "entity_link"
|
|
167
201
|
ENTITY_PHASE_EVENT = "entity_phase_event"
|
|
202
|
+
ENTITY_SEARCH = "entity_search"
|
|
168
203
|
ENTITY_TAG = "entity_tag"
|
|
169
204
|
EQUIPMENT = "equipment"
|
|
205
|
+
EQUIPMENT_MAINTENANCE = "equipment_maintenance"
|
|
170
206
|
EQUIPMENT_TYPE = "equipment_type"
|
|
171
207
|
EXPERIMENT_GROUP = "experiment_group"
|
|
172
208
|
EXPERIMENT_GROUP_TYPE = "experiment_group_type"
|
|
173
209
|
FAVORITE_LINK = "favorite_link"
|
|
174
210
|
FIELD_OPTION_SET = "field_option_set"
|
|
211
|
+
FIELD_OPTION = "field_option"
|
|
175
212
|
FILE_FOLDER = "file_folder"
|
|
176
213
|
FILE_FOLDER_MEMBERSHIP = "file_folder_membership"
|
|
177
214
|
GOAL = "goal"
|
|
@@ -180,12 +217,15 @@ class EntityType(StrEnum):
|
|
|
180
217
|
INGREDIENT_ATTRIBUTE_CATEGORY = "ingredient_attribute_category"
|
|
181
218
|
INGREDIENT_CATEGORY = "ingredient_category"
|
|
182
219
|
INGREDIENT_CATEGORY_ALL = "ingredient_category_all"
|
|
220
|
+
INGREDIENT_CATEGORY_ALL_MATERIAL_FAMILY = "ingredient_category_all_material_family"
|
|
183
221
|
INGREDIENT_LOT = "ingredient_lot"
|
|
184
222
|
INGREDIENT_ROLE = "ingredient_role"
|
|
185
223
|
INGREDIENT_TAG = "ingredient_tag"
|
|
186
224
|
INPUT_GROUP = "input_group"
|
|
187
225
|
INV_LOCAL_LOCATIONS = "inv_local_locations"
|
|
188
226
|
INVENTORY_AMOUNT = "inventory_amount"
|
|
227
|
+
INVENTORY_LIMIT = "inventory_limit"
|
|
228
|
+
INVENTORY_HISTORY = "inventory_history"
|
|
189
229
|
LAB_LOCATION = "lab_location"
|
|
190
230
|
LAB_REQUEST = "lab_request"
|
|
191
231
|
LICENSE = "license"
|
|
@@ -205,46 +245,59 @@ class EntityType(StrEnum):
|
|
|
205
245
|
OUTPUT_CONDITION_PARAMETER_ANALYTICAL_METHOD_CATEGORY = "output_condition_parameter_analytical_method_category"
|
|
206
246
|
OUTPUT_CONDITION_PARAMETER_ANALYTICAL_METHOD = "output_condition_parameter_analytical_method"
|
|
207
247
|
OUTPUT_GROUP = "output_group"
|
|
208
|
-
RECIPE_OUTPUT_METADATA = "recipe_output_metadata"
|
|
209
248
|
PERMISSION = "permission"
|
|
249
|
+
PERMISSIONS_RECIPE_LINK_INHERITANCE = "permissions_recipe_link_inheritance"
|
|
210
250
|
PHASE_WORKFLOW = "phase_workflow"
|
|
251
|
+
PLATFORM_CONFIG = "platform_config"
|
|
211
252
|
PREDICTIVE_MODEL = "predictive_model"
|
|
212
253
|
PRODUCT = "product"
|
|
213
254
|
PROJECT = "project"
|
|
255
|
+
PROJECT_WORKBOOK_COMMENT = "project_workbook_comment"
|
|
214
256
|
RECIPE = "recipe"
|
|
257
|
+
RECIPE_AUDIT_LOG = "recipe_audit_log"
|
|
215
258
|
RECIPE_CALCULATION = "recipe_calculation"
|
|
216
|
-
RECIPE_PERMISSION_VIEW = "recipe_permission_view"
|
|
217
|
-
RECIPE_PROJECT = "recipe_project"
|
|
218
259
|
RECIPE_CHECK = "recipe_check"
|
|
219
260
|
RECIPE_EXPORT = "recipe_export"
|
|
261
|
+
RECIPE_INGREDIENT = "recipe_ingredient"
|
|
262
|
+
RECIPE_INGREDIENT_ACTUAL = "recipe_ingredient_actual"
|
|
220
263
|
RECIPE_INGREDIENTS_COMPOUNDED = "recipe_ingredients_compounded"
|
|
221
264
|
RECIPE_INGREDIENTS_COMPOUNDED_CALCULATION = "recipe_ingredients_compounded_calculation"
|
|
265
|
+
RECIPE_OUTPUT = "recipe_output"
|
|
266
|
+
RECIPE_OUTPUT_METADATA = "recipe_output_metadata"
|
|
267
|
+
RECIPE_PERMISSION_VIEW = "recipe_permission_view"
|
|
268
|
+
RECIPE_PROJECT = "recipe_project"
|
|
222
269
|
RECIPE_STEP = "recipe_step"
|
|
223
270
|
RECIPE_TAG = "recipe_tag"
|
|
224
271
|
RECIPE_METADATA = "recipe_metadata"
|
|
272
|
+
METADATA_VALUE = "metadata_value"
|
|
225
273
|
REVIEW = "review"
|
|
226
274
|
REVIEW_ENTITY_USER_STATUS = "review_entity_user_status"
|
|
227
275
|
REVIEW_USER = "review_user"
|
|
228
276
|
RLW_PHASE = "rlw_phase"
|
|
277
|
+
RLW_TRIGGER = "rlw_trigger"
|
|
229
278
|
RLW_TRIGGER_SET = "rlw_trigger_set"
|
|
230
279
|
SAFETY_DATA_SHEET = "safety_data_sheet"
|
|
231
280
|
SCHEDULED_NOTIFICATION = "scheduled_notification"
|
|
232
281
|
SPECS = "specs"
|
|
233
282
|
SPLIT_TEMPLATE = "split_template"
|
|
234
283
|
STRUCTURED_LOADING_USER_CONFIG = "structured_loading_user_config"
|
|
284
|
+
TABLE_BUILDER_CONFIG = "table_builder_config"
|
|
235
285
|
TASK = "task"
|
|
236
286
|
TASK_BOARD = "task_board"
|
|
237
287
|
TEMPLATE = "template"
|
|
238
288
|
TIMESHEET_ENTRY = "timesheet_entry"
|
|
239
289
|
TRAINING_RUN = "training_run"
|
|
290
|
+
TRAINING_RUN_TEMPLATE = "training_run_template"
|
|
240
291
|
TRAINING_SET = "training_set"
|
|
241
292
|
TIME_SERIES = "time_series"
|
|
293
|
+
TIME_SERIES_STAGE = "time_series_stage"
|
|
242
294
|
UNITS = "units"
|
|
243
295
|
USER_FAVORITE = "user_favorite"
|
|
244
296
|
USER = "user"
|
|
245
297
|
USER_CERTIFICATION = "user_certification"
|
|
246
298
|
USER_GROUP = "user_group"
|
|
247
299
|
USER_LIST_SET = "user_list_set"
|
|
300
|
+
VALUE_SPEC_PROPERTY = "value_spec_property"
|
|
248
301
|
WEBHOOK = "webhook"
|
|
249
302
|
WEBHOOK_EVENT = "webhook_event"
|
|
250
303
|
WORKFLOW = "workflow"
|
|
@@ -258,6 +311,7 @@ class EntityType(StrEnum):
|
|
|
258
311
|
PUBLIC_DATA_SOURCED_OUTPUT = "public_data_sourced_output"
|
|
259
312
|
PUBLIC_DATA_SOURCED_PROJECT = "public_data_sourced_project"
|
|
260
313
|
PUBLIC_DATA_SOURCED_RECIPE = "public_data_sourced_recipe"
|
|
314
|
+
PUBLIC_DATA_SOURCED_RAW_MATERIAL = "public_data_sourced_raw_material"
|
|
261
315
|
PUBLIC_DATA_SOURCED_RECIPE_PROJECT = "public_data_sourced_recipe_project"
|
|
262
316
|
PUBLIC_DATA_SOURCED_RECIPE_METADATA = "public_data_sourced_recipe_metadata"
|
|
263
317
|
PUBLIC_DATA_SOURCED_UNITS = "public_data_sourced_units"
|
|
@@ -23,4 +23,5 @@ from .job_definition_t import AuthRetrievalEnv as AuthRetrievalEnv
|
|
|
23
23
|
from .job_definition_t import AuthRetrieval as AuthRetrieval
|
|
24
24
|
from .job_definition_t import ProfileDefinition as ProfileDefinition
|
|
25
25
|
from .job_definition_t import ProfileMetadata as ProfileMetadata
|
|
26
|
+
from .job_definition_t import JobResult as JobResult
|
|
26
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -11,6 +11,7 @@ from pkgs.strenum_compat import StrEnum
|
|
|
11
11
|
import dataclasses
|
|
12
12
|
from pkgs.serialization import serial_class
|
|
13
13
|
from pkgs.serialization import serial_union_annotation
|
|
14
|
+
from . import client_config_t
|
|
14
15
|
from . import generic_upload_t
|
|
15
16
|
from . import secret_retrieval_t
|
|
16
17
|
|
|
@@ -32,6 +33,7 @@ __all__: list[str] = [
|
|
|
32
33
|
"JobExecutorGenericUpload",
|
|
33
34
|
"JobExecutorScript",
|
|
34
35
|
"JobExecutorType",
|
|
36
|
+
"JobResult",
|
|
35
37
|
"ProfileDefinition",
|
|
36
38
|
"ProfileMetadata",
|
|
37
39
|
]
|
|
@@ -192,6 +194,7 @@ class ProfileDefinition:
|
|
|
192
194
|
auth_retrieval: AuthRetrieval
|
|
193
195
|
base_url: str
|
|
194
196
|
jobs: list[JobDefinition]
|
|
197
|
+
client_options: typing.Optional[client_config_t.ClientConfigOptions] = None
|
|
195
198
|
|
|
196
199
|
|
|
197
200
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -200,4 +203,11 @@ class ProfileMetadata:
|
|
|
200
203
|
name: str
|
|
201
204
|
base_url: str
|
|
202
205
|
auth_retrieval: AuthRetrieval
|
|
206
|
+
client_options: typing.Optional[client_config_t.ClientConfigOptions]
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
210
|
+
@dataclasses.dataclass(kw_only=True)
|
|
211
|
+
class JobResult:
|
|
212
|
+
success: bool
|
|
203
213
|
# DO NOT MODIFY -- This file is generated by type_spec
|
{UncountablePythonSDK-0.0.44.dist-info → UncountablePythonSDK-0.0.46.dist-info}/top_level.txt
RENAMED
|
File without changes
|