UncountablePythonSDK 0.0.183__py3-none-any.whl → 0.0.185__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- docs/requirements.txt +1 -1
- examples/integration-server/jobs/materials_auto/example_http_get.py +44 -0
- examples/integration-server/jobs/materials_auto/profile.yaml +7 -0
- examples/integration-server/pyproject.toml +1 -1
- pkgs/serialization_util/serialization_helpers.py +1 -2
- pkgs/type_spec/actions_registry/__main__.py +1 -0
- pkgs/type_spec/actions_registry/emit_python.py +2 -0
- pkgs/type_spec/actions_registry/emit_typescript.py +4 -0
- pkgs/type_spec/builder.py +6 -0
- pkgs/type_spec/emit_python.py +34 -6
- uncountable/integration/http_server/types.py +1 -0
- uncountable/integration/webhook_server/entrypoint.py +38 -6
- uncountable/types/api/files/download_file.py +1 -1
- uncountable/types/entity_t.py +13 -1
- uncountable/types/job_definition.py +1 -0
- uncountable/types/job_definition_t.py +8 -0
- uncountable/types/uploader.py +2 -0
- uncountable/types/uploader_t.py +26 -1
- {uncountablepythonsdk-0.0.183.dist-info → uncountablepythonsdk-0.0.185.dist-info}/METADATA +1 -1
- {uncountablepythonsdk-0.0.183.dist-info → uncountablepythonsdk-0.0.185.dist-info}/RECORD +22 -21
- {uncountablepythonsdk-0.0.183.dist-info → uncountablepythonsdk-0.0.185.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.183.dist-info → uncountablepythonsdk-0.0.185.dist-info}/top_level.txt +0 -0
docs/requirements.txt
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
from uncountable.integration.http_server import (
|
|
4
|
+
GenericHttpRequest,
|
|
5
|
+
GenericHttpResponse,
|
|
6
|
+
HttpException,
|
|
7
|
+
)
|
|
8
|
+
from uncountable.integration.job import CustomHttpJob, register_job
|
|
9
|
+
from uncountable.types import job_definition_t
|
|
10
|
+
|
|
11
|
+
_EXPECTED_USER_ID = 1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@register_job
|
|
15
|
+
class HttpGetExample(CustomHttpJob):
|
|
16
|
+
@staticmethod
|
|
17
|
+
def validate_request(
|
|
18
|
+
*,
|
|
19
|
+
request: GenericHttpRequest,
|
|
20
|
+
job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
|
|
21
|
+
profile_meta: job_definition_t.ProfileMetadata,
|
|
22
|
+
) -> None:
|
|
23
|
+
if (
|
|
24
|
+
CustomHttpJob.get_validated_oauth_request_user_id(
|
|
25
|
+
request=request, profile_metadata=profile_meta
|
|
26
|
+
)
|
|
27
|
+
!= _EXPECTED_USER_ID
|
|
28
|
+
):
|
|
29
|
+
raise HttpException(
|
|
30
|
+
message="unauthorized; invalid oauth token", error_code=401
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def handle_request(
|
|
35
|
+
*,
|
|
36
|
+
request: GenericHttpRequest,
|
|
37
|
+
job_definition: job_definition_t.HttpJobDefinitionBase, # ruff:ignore[unused-static-method-argument]
|
|
38
|
+
profile_meta: job_definition_t.ProfileMetadata, # ruff:ignore[unused-static-method-argument]
|
|
39
|
+
) -> GenericHttpResponse:
|
|
40
|
+
return GenericHttpResponse(
|
|
41
|
+
response=json.dumps(request.query_params),
|
|
42
|
+
status_code=200,
|
|
43
|
+
headers={"Content-Type": "application/json"},
|
|
44
|
+
)
|
|
@@ -74,6 +74,13 @@ jobs:
|
|
|
74
74
|
executor:
|
|
75
75
|
type: script
|
|
76
76
|
import_path: example_http
|
|
77
|
+
- id: example_http_get
|
|
78
|
+
type: custom_http
|
|
79
|
+
name: Custom HTTP GET
|
|
80
|
+
http_method: get
|
|
81
|
+
executor:
|
|
82
|
+
type: script
|
|
83
|
+
import_path: example_http_get
|
|
77
84
|
- id: example_runsheet_wh
|
|
78
85
|
type: webhook
|
|
79
86
|
name: Runsheet Webhook
|
|
@@ -210,8 +210,7 @@ def serialize_for_api(obj: Any) -> JsonValue:
|
|
|
210
210
|
serialization_type == SerializationType.UNKNOWN
|
|
211
211
|
): # performance optimization to not do function lookup
|
|
212
212
|
return obj # type: ignore
|
|
213
|
-
|
|
214
|
-
return r
|
|
213
|
+
return _CONVERSION_SERIALIZATION_FUNCS[serialization_type](obj)
|
|
215
214
|
|
|
216
215
|
|
|
217
216
|
_SERIALIZATION_FUNCS_DICT: dict[
|
|
@@ -82,6 +82,7 @@ def main() -> None:
|
|
|
82
82
|
short_description=definition.short_description,
|
|
83
83
|
description=definition.description,
|
|
84
84
|
icon=definition.icon,
|
|
85
|
+
action=definition.action,
|
|
85
86
|
ref_name=ref_name,
|
|
86
87
|
module=actions_registry_t.ActionsRegistryModule(
|
|
87
88
|
ts_name(module_str, name_case=builder.NameCase.convert)
|
|
@@ -51,6 +51,8 @@ def _emit_action_definition(
|
|
|
51
51
|
out.write(f"{sub_indent}description={_py_str(action.description)},\n")
|
|
52
52
|
if action.icon is not None:
|
|
53
53
|
out.write(f"{sub_indent}icon={_py_str(action.icon)},\n")
|
|
54
|
+
if action.action is not None:
|
|
55
|
+
out.write(f"{sub_indent}action={_py_str(action.action)},\n")
|
|
54
56
|
out.write(f"{sub_indent}ref_name={_py_str(action.ref_name)},\n")
|
|
55
57
|
out.write(
|
|
56
58
|
f"{sub_indent}module=actions_registry_t.ActionsRegistryModule.{action.module.name},\n"
|
|
@@ -130,6 +130,10 @@ def _emit_action_definition(
|
|
|
130
130
|
out.write(
|
|
131
131
|
f"{sub_indent}icon: {encode_common_string(action_definition.icon)},\n"
|
|
132
132
|
)
|
|
133
|
+
if action_definition.action is not None:
|
|
134
|
+
out.write(
|
|
135
|
+
f"{sub_indent}action: {encode_common_string(action_definition.action)},\n"
|
|
136
|
+
)
|
|
133
137
|
out.write(
|
|
134
138
|
f"{sub_indent}shortDescription: {encode_common_string(action_definition.short_description)},\n"
|
|
135
139
|
)
|
pkgs/type_spec/builder.py
CHANGED
|
@@ -1106,6 +1106,7 @@ class SpecEndpoint:
|
|
|
1106
1106
|
desc: str | None = None
|
|
1107
1107
|
account_type: str | None
|
|
1108
1108
|
route_group: str | None
|
|
1109
|
+
allow_non_materials_path: bool = False
|
|
1109
1110
|
|
|
1110
1111
|
# function, path details per api endpoint
|
|
1111
1112
|
path_per_api_endpoint: dict[str, EndpointSpecificPath]
|
|
@@ -1135,6 +1136,7 @@ class SpecEndpoint:
|
|
|
1135
1136
|
"has_attachment",
|
|
1136
1137
|
"account_type",
|
|
1137
1138
|
"route_group",
|
|
1139
|
+
"allow_non_materials_path",
|
|
1138
1140
|
]
|
|
1139
1141
|
+ list(builder.api_endpoints.keys()),
|
|
1140
1142
|
)
|
|
@@ -1188,6 +1190,10 @@ class SpecEndpoint:
|
|
|
1188
1190
|
assert isinstance(suppress_ts, bool)
|
|
1189
1191
|
self.suppress_ts = suppress_ts
|
|
1190
1192
|
|
|
1193
|
+
allow_non_materials_path = data.get("allow_non_materials_path", False)
|
|
1194
|
+
assert isinstance(allow_non_materials_path, bool)
|
|
1195
|
+
self.allow_non_materials_path = allow_non_materials_path
|
|
1196
|
+
|
|
1191
1197
|
self.result_type = ResultType(data.get("result_type", ResultType.json.value))
|
|
1192
1198
|
self.has_attachment = data.get("has_attachment", False)
|
|
1193
1199
|
self.desc = data.get("desc")
|
pkgs/type_spec/emit_python.py
CHANGED
|
@@ -1166,13 +1166,25 @@ def _emit_routes(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
|
|
|
1166
1166
|
continue
|
|
1167
1167
|
|
|
1168
1168
|
endpoints.append(endpoint)
|
|
1169
|
+
|
|
1170
|
+
has_route_opts = any(
|
|
1171
|
+
endpoint.allow_non_materials_path for endpoint in endpoints
|
|
1172
|
+
)
|
|
1173
|
+
route_opts_import = ["RouteOpts"] if has_route_opts else []
|
|
1174
|
+
static_route_imports = ", ".join(
|
|
1175
|
+
sorted(["StaticRouteType", *route_opts_import])
|
|
1176
|
+
)
|
|
1177
|
+
dynamic_route_imports = ", ".join(
|
|
1178
|
+
sorted(["DynamicRouteType", *route_opts_import])
|
|
1179
|
+
)
|
|
1180
|
+
|
|
1169
1181
|
static_out = io.StringIO()
|
|
1170
1182
|
static_out.write(
|
|
1171
1183
|
f"""{MODIFY_NOTICE}{LINT_HEADER}{ROUTE_NOTICE}
|
|
1172
1184
|
|
|
1173
1185
|
# Static routes for use locally and to ensure linting/mypy finds all modules
|
|
1174
1186
|
|
|
1175
|
-
from main.site.framework.types import
|
|
1187
|
+
from main.site.framework.types import {static_route_imports}
|
|
1176
1188
|
"""
|
|
1177
1189
|
)
|
|
1178
1190
|
|
|
@@ -1218,7 +1230,7 @@ ROUTES: list[StaticRouteType] = [
|
|
|
1218
1230
|
|
|
1219
1231
|
# Dynamic loaded routes to provide faster startup times
|
|
1220
1232
|
|
|
1221
|
-
from main.site.framework.types import
|
|
1233
|
+
from main.site.framework.types import {dynamic_route_imports}
|
|
1222
1234
|
|
|
1223
1235
|
ROUTE_PREFIX = "/{last_endpoint.path_per_api_endpoint[endpoint_root].path_root}"
|
|
1224
1236
|
|
|
@@ -1226,19 +1238,35 @@ ROUTES: list[DynamicRouteType] = [
|
|
|
1226
1238
|
"""
|
|
1227
1239
|
)
|
|
1228
1240
|
|
|
1241
|
+
route_opts_out = io.StringIO()
|
|
1229
1242
|
for endpoint in sorted_endpoints:
|
|
1230
1243
|
endpoint_function_path = endpoint.path_per_api_endpoint[endpoint_root]
|
|
1244
|
+
route = f"{endpoint_function_path.path_dirname}/{endpoint_function_path.path_basename}"
|
|
1231
1245
|
dynamic_out.write(
|
|
1232
|
-
f'{INDENT}("{
|
|
1246
|
+
f'{INDENT}("{route}", "{endpoint_function_path.function}", ["{endpoint.method.upper()}"]),\n'
|
|
1233
1247
|
)
|
|
1234
1248
|
|
|
1235
1249
|
assert endpoint_function_path.function
|
|
1236
1250
|
static_out.write(
|
|
1237
|
-
f'{INDENT}("{
|
|
1251
|
+
f'{INDENT}("{route}", {endpoint_function_path.function}, ["{endpoint.method.upper()}"]),\n'
|
|
1238
1252
|
)
|
|
1239
1253
|
|
|
1240
|
-
|
|
1241
|
-
|
|
1254
|
+
if endpoint.allow_non_materials_path:
|
|
1255
|
+
route_opts_out.write(
|
|
1256
|
+
f'{INDENT}"{route}": RouteOpts(allow_non_materials_path=True),\n'
|
|
1257
|
+
)
|
|
1258
|
+
|
|
1259
|
+
routes_close = f"{MODIFY_NOTICE}]\n"
|
|
1260
|
+
dynamic_out.write(routes_close)
|
|
1261
|
+
static_out.write(routes_close)
|
|
1262
|
+
|
|
1263
|
+
if has_route_opts:
|
|
1264
|
+
route_opts_emit = f"""
|
|
1265
|
+
ROUTE_OPTS: dict[str, RouteOpts] = {{
|
|
1266
|
+
{route_opts_out.getvalue()}{MODIFY_NOTICE}}}
|
|
1267
|
+
"""
|
|
1268
|
+
dynamic_out.write(route_opts_emit)
|
|
1269
|
+
static_out.write(route_opts_emit)
|
|
1242
1270
|
|
|
1243
1271
|
util.rewrite_file(f"{output}/routes_static.py", static_out.getvalue())
|
|
1244
1272
|
util.rewrite_file(f"{output}/routes_dynamic.py", dynamic_out.getvalue())
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
from typing import assert_never
|
|
2
3
|
|
|
3
4
|
import flask
|
|
4
5
|
from flask.typing import ResponseReturnValue
|
|
@@ -16,12 +17,31 @@ from uncountable.types import job_definition_t
|
|
|
16
17
|
|
|
17
18
|
app = flask.Flask(__name__)
|
|
18
19
|
|
|
20
|
+
HttpJobDefinition = (
|
|
21
|
+
job_definition_t.CustomHttpJobDefinition
|
|
22
|
+
| job_definition_t.WebhookJobDefinition
|
|
23
|
+
| job_definition_t.UncountableWebhookJobDefinition
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _resolve_route_http_method(job: HttpJobDefinition) -> job_definition_t.HttpMethod:
|
|
28
|
+
match job:
|
|
29
|
+
case job_definition_t.CustomHttpJobDefinition():
|
|
30
|
+
return job.http_method
|
|
31
|
+
case (
|
|
32
|
+
job_definition_t.WebhookJobDefinition()
|
|
33
|
+
| job_definition_t.UncountableWebhookJobDefinition()
|
|
34
|
+
):
|
|
35
|
+
return job_definition_t.HttpMethod.POST
|
|
36
|
+
case _:
|
|
37
|
+
assert_never(job)
|
|
38
|
+
|
|
19
39
|
|
|
20
40
|
def register_route(
|
|
21
41
|
*,
|
|
22
42
|
server_logger: Logger,
|
|
23
43
|
profile_meta: job_definition_t.ProfileMetadata,
|
|
24
|
-
job:
|
|
44
|
+
job: HttpJobDefinition,
|
|
25
45
|
) -> None:
|
|
26
46
|
route = f"/{profile_meta.name}/{job.id}"
|
|
27
47
|
log_attributes = {
|
|
@@ -56,6 +76,7 @@ def register_route(
|
|
|
56
76
|
http_request = GenericHttpRequest(
|
|
57
77
|
body_base64=base64.b64encode(flask.request.get_data()).decode(),
|
|
58
78
|
headers=dict(flask.request.headers),
|
|
79
|
+
query_params=flask.request.args.to_dict(flat=False),
|
|
59
80
|
)
|
|
60
81
|
job_instance.validate_request(
|
|
61
82
|
request=http_request, job_definition=job, profile_meta=profile_meta
|
|
@@ -88,7 +109,7 @@ def register_route(
|
|
|
88
109
|
route,
|
|
89
110
|
endpoint=f"handle_request_{job.id}",
|
|
90
111
|
view_func=handle_request,
|
|
91
|
-
methods=[
|
|
112
|
+
methods=[_resolve_route_http_method(job).value.upper()],
|
|
92
113
|
)
|
|
93
114
|
|
|
94
115
|
server_logger.log_debug(
|
|
@@ -103,10 +124,21 @@ def main() -> None:
|
|
|
103
124
|
for profile_metadata in profiles:
|
|
104
125
|
server_logger = Logger(get_current_span())
|
|
105
126
|
for job in profile_metadata.jobs:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
match job:
|
|
128
|
+
case job_definition_t.CronJobDefinition():
|
|
129
|
+
continue
|
|
130
|
+
case (
|
|
131
|
+
job_definition_t.CustomHttpJobDefinition()
|
|
132
|
+
| job_definition_t.WebhookJobDefinition()
|
|
133
|
+
| job_definition_t.UncountableWebhookJobDefinition()
|
|
134
|
+
):
|
|
135
|
+
register_route(
|
|
136
|
+
server_logger=server_logger,
|
|
137
|
+
profile_meta=profile_metadata,
|
|
138
|
+
job=job,
|
|
139
|
+
)
|
|
140
|
+
case _:
|
|
141
|
+
assert_never(job)
|
|
110
142
|
|
|
111
143
|
|
|
112
144
|
main()
|
|
@@ -30,7 +30,7 @@ __all__: list[str] = [
|
|
|
30
30
|
|
|
31
31
|
ENDPOINT_METHOD = "GET"
|
|
32
32
|
ENDPOINT_PATH = "api/external/files/download_file"
|
|
33
|
-
ENDPOINT_DESCRIPTION = "Download an attachment field value from an entity (e.g. a file attached to a form field) by entity + field reference, or download a text document by its ID. When querying by entity field, if the field contains a single file it is returned directly (X-File-Download-Type: raw); if multiple files are attached, they are bundled into a ZIP archive (X-File-Download-Type: archive). For downloading the binary file stored on a recipe output of type image or file, use recipes/external_download_recipe_output_file instead."
|
|
33
|
+
ENDPOINT_DESCRIPTION = "Download an attachment field value from an entity (e.g. a file attached to a form field) by entity + field reference, or download a text document by its ID. When querying by entity field, if the field contains a single file it is returned directly (X-File-Download-Type: raw); if multiple files are attached, they are bundled into a ZIP archive (X-File-Download-Type: archive). For downloading the binary file stored on a recipe output of type image or file, use recipes/external_download_recipe_output_file instead. A file that has not cleared virus scanning is not returned: a file still being scanned responds with HTTP 422 indicating the scan is in progress, and a file that failed the scan responds with HTTP 422 indicating a security-scan failure."
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/entity_t.py
CHANGED
|
@@ -27,6 +27,7 @@ __all__: list[str] = [
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
28
|
@serial_string_enum(
|
|
29
29
|
labels={
|
|
30
|
+
"agent_memory": "Agent Memory",
|
|
30
31
|
"aggregated_data_view": "Aggregated Data View",
|
|
31
32
|
"analytical_method": "Analytical Method",
|
|
32
33
|
"analytical_method_category": "Analytical Method Category",
|
|
@@ -35,6 +36,8 @@ __all__: list[str] = [
|
|
|
35
36
|
"approval": "Approval",
|
|
36
37
|
"async_job": "Async Job",
|
|
37
38
|
"barcode": "Barcode",
|
|
39
|
+
"cad_document": "CAD Document",
|
|
40
|
+
"cad_relationship": "CAD Relationship",
|
|
38
41
|
"calculation": "Calculation",
|
|
39
42
|
"calendar": "Calendar",
|
|
40
43
|
"calendar_event": "Calendar Event",
|
|
@@ -57,6 +60,7 @@ __all__: list[str] = [
|
|
|
57
60
|
"credit_balance": "Credit Balance",
|
|
58
61
|
"curve_settings": "Curve Settings",
|
|
59
62
|
"custom_entity": "Custom Entity",
|
|
63
|
+
"data_pipeline": "Data Pipeline",
|
|
60
64
|
"dataset_binding": "Dataset Binding",
|
|
61
65
|
"default_permissions_new_project": "Default Permissions New Project",
|
|
62
66
|
"document": "Document",
|
|
@@ -90,6 +94,7 @@ __all__: list[str] = [
|
|
|
90
94
|
"external_ai_model": "External AI Model",
|
|
91
95
|
"external_ai_session": "External AI Session",
|
|
92
96
|
"external_ai_usage": "External AI Usage",
|
|
97
|
+
"external_ai_plugin": "External AI Plugin",
|
|
93
98
|
"external_oauth_provider": "External OAuth Provider",
|
|
94
99
|
"experiment_group": "Experiment Group",
|
|
95
100
|
"experiment_group_member": "Experiment Group Member",
|
|
@@ -206,6 +211,7 @@ __all__: list[str] = [
|
|
|
206
211
|
"regional_entity_group": "Regional Entity Group",
|
|
207
212
|
"regulation": "Regulation",
|
|
208
213
|
"regulation_cas": "Regulation CAS",
|
|
214
|
+
"regulation_product_category": "Regulation Product Category",
|
|
209
215
|
"metadata_value": "Metadata Value",
|
|
210
216
|
"report_definition": "Report Definition",
|
|
211
217
|
"reusable_field_condition": "Reusable Field Condition",
|
|
@@ -297,6 +303,7 @@ __all__: list[str] = [
|
|
|
297
303
|
},
|
|
298
304
|
)
|
|
299
305
|
class EntityType(StrEnum):
|
|
306
|
+
AGENT_MEMORY = "agent_memory"
|
|
300
307
|
AGGREGATED_DATA_VIEW = "aggregated_data_view"
|
|
301
308
|
ANALYTICAL_METHOD = "analytical_method"
|
|
302
309
|
ANALYTICAL_METHOD_CATEGORY = "analytical_method_category"
|
|
@@ -305,6 +312,8 @@ class EntityType(StrEnum):
|
|
|
305
312
|
APPROVAL = "approval"
|
|
306
313
|
ASYNC_JOB = "async_job"
|
|
307
314
|
BARCODE = "barcode"
|
|
315
|
+
CAD_DOCUMENT = "cad_document"
|
|
316
|
+
CAD_RELATIONSHIP = "cad_relationship"
|
|
308
317
|
CALCULATION = "calculation"
|
|
309
318
|
CALENDAR = "calendar"
|
|
310
319
|
CALENDAR_EVENT = "calendar_event"
|
|
@@ -327,6 +336,7 @@ class EntityType(StrEnum):
|
|
|
327
336
|
CREDIT_BALANCE = "credit_balance"
|
|
328
337
|
CURVE_SETTINGS = "curve_settings"
|
|
329
338
|
CUSTOM_ENTITY = "custom_entity"
|
|
339
|
+
DATA_PIPELINE = "data_pipeline"
|
|
330
340
|
DATASET_BINDING = "dataset_binding"
|
|
331
341
|
DEFAULT_PERMISSIONS_NEW_PROJECT = "default_permissions_new_project"
|
|
332
342
|
DOCUMENT = "document"
|
|
@@ -360,6 +370,7 @@ class EntityType(StrEnum):
|
|
|
360
370
|
EXTERNAL_AI_MODEL = "external_ai_model"
|
|
361
371
|
EXTERNAL_AI_SESSION = "external_ai_session"
|
|
362
372
|
EXTERNAL_AI_USAGE = "external_ai_usage"
|
|
373
|
+
EXTERNAL_AI_PLUGIN = "external_ai_plugin"
|
|
363
374
|
EXTERNAL_OAUTH_PROVIDER = "external_oauth_provider"
|
|
364
375
|
EXPERIMENT_GROUP = "experiment_group"
|
|
365
376
|
EXPERIMENT_GROUP_MEMBER = "experiment_group_member"
|
|
@@ -476,6 +487,7 @@ class EntityType(StrEnum):
|
|
|
476
487
|
REGIONAL_ENTITY_GROUP = "regional_entity_group"
|
|
477
488
|
REGULATION = "regulation"
|
|
478
489
|
REGULATION_CAS = "regulation_cas"
|
|
490
|
+
REGULATION_PRODUCT_CATEGORY = "regulation_product_category"
|
|
479
491
|
METADATA_VALUE = "metadata_value"
|
|
480
492
|
REPORT_DEFINITION = "report_definition"
|
|
481
493
|
REUSABLE_FIELD_CONDITION = "reusable_field_condition"
|
|
@@ -568,7 +580,7 @@ class EntityType(StrEnum):
|
|
|
568
580
|
|
|
569
581
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
570
582
|
LimitedEntityType = typing.Annotated[
|
|
571
|
-
typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.NOTEBOOK] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.CONSTRAINT_SET] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL] | typing.Literal[EntityType.TIME_SERIES_SEGMENT] | typing.Literal[EntityType.EQUIPMENT_MAINTENANCE] | typing.Literal[EntityType.MAINTENANCE_SCHEDULE] | typing.Literal[EntityType.CONDITION_PARAMETER_RULE] | typing.Literal[EntityType.INGREDIENT] | typing.Literal[EntityType.TIMESHEET_ENTRY] | typing.Literal[EntityType.SAVE] | typing.Literal[EntityType.RECIPE_CHECK] | typing.Literal[EntityType.EXPERIMENT_GROUP_MEMBER] | typing.Literal[EntityType.CALENDAR_EVENT],
|
|
583
|
+
typing.Literal[EntityType.LAB_REQUEST] | typing.Literal[EntityType.APPROVAL] | typing.Literal[EntityType.CUSTOM_ENTITY] | typing.Literal[EntityType.INGREDIENT_ATTRIBUTE] | typing.Literal[EntityType.INVENTORY_AMOUNT] | typing.Literal[EntityType.TASK] | typing.Literal[EntityType.PROJECT] | typing.Literal[EntityType.EQUIPMENT] | typing.Literal[EntityType.INV_LOCAL_LOCATIONS] | typing.Literal[EntityType.FIELD_OPTION_SET] | typing.Literal[EntityType.WEBHOOK] | typing.Literal[EntityType.SPECS] | typing.Literal[EntityType.GOAL] | typing.Literal[EntityType.INGREDIENT_TAG_MAP] | typing.Literal[EntityType.INGREDIENT_TAG] | typing.Literal[EntityType.CONDITION_PARAMETER] | typing.Literal[EntityType.NOTEBOOK] | typing.Literal[EntityType.OUTPUT] | typing.Literal[EntityType.OUTPUT_CONDITION_PARAMETER] | typing.Literal[EntityType.ASYNC_JOB] | typing.Literal[EntityType.CONSTRAINT] | typing.Literal[EntityType.CONSTRAINT_SET] | typing.Literal[EntityType.INGREDIENT_CATEGORY_ALL] | typing.Literal[EntityType.TIME_SERIES_SEGMENT] | typing.Literal[EntityType.EQUIPMENT_MAINTENANCE] | typing.Literal[EntityType.MAINTENANCE_SCHEDULE] | typing.Literal[EntityType.CONDITION_PARAMETER_RULE] | typing.Literal[EntityType.INGREDIENT] | typing.Literal[EntityType.TIMESHEET_ENTRY] | typing.Literal[EntityType.SAVE] | typing.Literal[EntityType.RECIPE_CHECK] | typing.Literal[EntityType.EXPERIMENT_GROUP_MEMBER] | typing.Literal[EntityType.INPUT_GROUP] | typing.Literal[EntityType.INPUT_GROUP_MEMBER] | typing.Literal[EntityType.CALENDAR_EVENT],
|
|
572
584
|
serial_alias_annotation(
|
|
573
585
|
named_type_path="sdk.entity.LimitedEntityType",
|
|
574
586
|
),
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
5
5
|
# Kept only for SDK backwards compatibility
|
|
6
6
|
from .job_definition_t import JobDefinitionType as JobDefinitionType
|
|
7
|
+
from .job_definition_t import HttpMethod as HttpMethod
|
|
7
8
|
from .job_definition_t import JobExecutorType as JobExecutorType
|
|
8
9
|
from .job_definition_t import GenericUploadDataSourceType as GenericUploadDataSourceType
|
|
9
10
|
from .job_definition_t import JobExecutorBase as JobExecutorBase
|
|
@@ -27,6 +27,7 @@ __all__: list[str] = [
|
|
|
27
27
|
"GenericUploadDataSourceSFTP",
|
|
28
28
|
"GenericUploadDataSourceType",
|
|
29
29
|
"HttpJobDefinitionBase",
|
|
30
|
+
"HttpMethod",
|
|
30
31
|
"JobDefinition",
|
|
31
32
|
"JobDefinitionBase",
|
|
32
33
|
"JobDefinitionType",
|
|
@@ -53,6 +54,12 @@ class JobDefinitionType(StrEnum):
|
|
|
53
54
|
CUSTOM_HTTP = "custom_http"
|
|
54
55
|
|
|
55
56
|
|
|
57
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
58
|
+
class HttpMethod(StrEnum):
|
|
59
|
+
GET = "get"
|
|
60
|
+
POST = "post"
|
|
61
|
+
|
|
62
|
+
|
|
56
63
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
57
64
|
class JobExecutorType(StrEnum):
|
|
58
65
|
SCRIPT = "script"
|
|
@@ -224,6 +231,7 @@ class HttpJobDefinitionBase(JobDefinitionBase):
|
|
|
224
231
|
@dataclasses.dataclass(slots=True, kw_only=True)
|
|
225
232
|
class CustomHttpJobDefinition(HttpJobDefinitionBase):
|
|
226
233
|
type: typing.Literal[JobDefinitionType.CUSTOM_HTTP] = JobDefinitionType.CUSTOM_HTTP
|
|
234
|
+
http_method: HttpMethod = HttpMethod.POST
|
|
227
235
|
|
|
228
236
|
|
|
229
237
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/uploader.py
CHANGED
|
@@ -8,8 +8,10 @@ from .uploader_t import ChannelType as ChannelType
|
|
|
8
8
|
from .uploader_t import StructureElementType as StructureElementType
|
|
9
9
|
from .uploader_t import StructureElementBase as StructureElementBase
|
|
10
10
|
from .uploader_t import DecimalValue as DecimalValue
|
|
11
|
+
from .uploader_t import IdValue as IdValue
|
|
11
12
|
from .uploader_t import StringValue as StringValue
|
|
12
13
|
from .uploader_t import BaseData as BaseData
|
|
14
|
+
from .uploader_t import FileHeaderData as FileHeaderData
|
|
13
15
|
from .uploader_t import NumericHeaderData as NumericHeaderData
|
|
14
16
|
from .uploader_t import TextHeaderData as TextHeaderData
|
|
15
17
|
from .uploader_t import HeaderValue as HeaderValue
|
uncountable/types/uploader_t.py
CHANGED
|
@@ -10,6 +10,7 @@ from enum import StrEnum
|
|
|
10
10
|
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
15
16
|
"BaseData",
|
|
@@ -17,9 +18,11 @@ __all__: list[str] = [
|
|
|
17
18
|
"ChannelType",
|
|
18
19
|
"DataChannel",
|
|
19
20
|
"DecimalValue",
|
|
21
|
+
"FileHeaderData",
|
|
20
22
|
"HeaderEntry",
|
|
21
23
|
"HeaderType",
|
|
22
24
|
"HeaderValue",
|
|
25
|
+
"IdValue",
|
|
23
26
|
"NumericChannelData",
|
|
24
27
|
"NumericHeaderData",
|
|
25
28
|
"ParsedFileData",
|
|
@@ -35,6 +38,7 @@ __all__: list[str] = [
|
|
|
35
38
|
|
|
36
39
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
37
40
|
class HeaderType(StrEnum):
|
|
41
|
+
FILE_HEADER = "file_header"
|
|
38
42
|
NUMERIC_HEADER = "numeric_header"
|
|
39
43
|
TEXT_HEADER = "text_header"
|
|
40
44
|
|
|
@@ -71,6 +75,15 @@ class DecimalValue:
|
|
|
71
75
|
value: Decimal
|
|
72
76
|
|
|
73
77
|
|
|
78
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
79
|
+
@serial_class(
|
|
80
|
+
named_type_path="sdk.uploader.IdValue",
|
|
81
|
+
)
|
|
82
|
+
@dataclasses.dataclass(slots=True, kw_only=True)
|
|
83
|
+
class IdValue:
|
|
84
|
+
value: base_t.ObjectId
|
|
85
|
+
|
|
86
|
+
|
|
74
87
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
75
88
|
@serial_class(
|
|
76
89
|
named_type_path="sdk.uploader.StringValue",
|
|
@@ -90,6 +103,17 @@ class BaseData:
|
|
|
90
103
|
type: str
|
|
91
104
|
|
|
92
105
|
|
|
106
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
107
|
+
@serial_class(
|
|
108
|
+
named_type_path="sdk.uploader.FileHeaderData",
|
|
109
|
+
parse_require={"type"},
|
|
110
|
+
)
|
|
111
|
+
@dataclasses.dataclass(slots=True, kw_only=True)
|
|
112
|
+
class FileHeaderData(BaseData):
|
|
113
|
+
type: typing.Literal[HeaderType.FILE_HEADER] = HeaderType.FILE_HEADER
|
|
114
|
+
data: IdValue | None
|
|
115
|
+
|
|
116
|
+
|
|
93
117
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
94
118
|
@serial_class(
|
|
95
119
|
named_type_path="sdk.uploader.NumericHeaderData",
|
|
@@ -114,11 +138,12 @@ class TextHeaderData(BaseData):
|
|
|
114
138
|
|
|
115
139
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
116
140
|
HeaderValue = typing.Annotated[
|
|
117
|
-
NumericHeaderData | TextHeaderData,
|
|
141
|
+
FileHeaderData | NumericHeaderData | TextHeaderData,
|
|
118
142
|
serial_union_annotation(
|
|
119
143
|
named_type_path="sdk.uploader.HeaderValue",
|
|
120
144
|
discriminator="type",
|
|
121
145
|
discriminator_map={
|
|
146
|
+
"file_header": FileHeaderData,
|
|
122
147
|
"numeric_header": NumericHeaderData,
|
|
123
148
|
"text_header": TextHeaderData,
|
|
124
149
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.185
|
|
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
|
|
@@ -3,7 +3,7 @@ docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
|
|
|
3
3
|
docs/conf.py,sha256=KivJNvQWboXqJ07NMgcYY5tsV6CoIfyTpZh8jdn_5Qk,4239
|
|
4
4
|
docs/index.md,sha256=g4Yi5831fEkywYkkcFohYLkKzSI91SOZF7DxKsm9zgI,3193
|
|
5
5
|
docs/justfile,sha256=WymCEQ6W2A8Ak79iUPmecmuaUNN2htb7STUrz5K7ELE,273
|
|
6
|
-
docs/requirements.txt,sha256=
|
|
6
|
+
docs/requirements.txt,sha256=_GyKrMFrmjp2hKhTLlhGdKqD7kXs_bomeY4yGt1oI7c,172
|
|
7
7
|
docs/integration_examples/add_file_to_folder.md,sha256=ZCv8miP7ZlPjor-ZGDwy2oucyopqMPa3aXlmOEfbX10,1556
|
|
8
8
|
docs/integration_examples/create_ingredient.md,sha256=ufzAzPyGaDr9rCBDMGQAE8xahsCMkVfG8VLs1pb3qr0,1549
|
|
9
9
|
docs/integration_examples/create_output.md,sha256=aDn2TjzKgY-HnxnvgsZS578cvajmHpF1y2HKkHfdtd4,2104
|
|
@@ -33,16 +33,17 @@ examples/set_recipe_metadata_file.py,sha256=cRVXGz4UN4aqnNrNSzyBmikYHpe63lMIuzOp
|
|
|
33
33
|
examples/set_recipe_output_file_sdk.py,sha256=Lz1amqppnWTX83z-C090wCJ4hcKmCD3kb-4v0uBRi0Y,782
|
|
34
34
|
examples/stream_dataset_measurements.py,sha256=iLmDn7Yv-deeUsfDY9DhYckheoTfLhj5_ORjO0oLHng,5890
|
|
35
35
|
examples/upload_files.py,sha256=qMaSvMSdTMPOOP55y1AwEurc0SOdZAMvEydlqJPsGpg,432
|
|
36
|
-
examples/integration-server/pyproject.toml,sha256=
|
|
36
|
+
examples/integration-server/pyproject.toml,sha256=CxNt8vQ17Po7h4fOXT8jtbrFJosxBVTVY8kTuRyxtjY,11590
|
|
37
37
|
examples/integration-server/jobs/materials_auto/concurrent_cron.py,sha256=xsK3H9ZEaniedC2nJUB0rqOcFI8y-ojfl_nLSJb9AMM,312
|
|
38
38
|
examples/integration-server/jobs/materials_auto/example_cron.py,sha256=y1nAtGwbPJfIrfQsrHVmJLAHmQtCEHIy1g-0PjeXx04,735
|
|
39
39
|
examples/integration-server/jobs/materials_auto/example_http.py,sha256=hA--iNztlTwLaEBzlmoRZ6-hRTUExUUqLV0-ipU7_mo,1560
|
|
40
|
+
examples/integration-server/jobs/materials_auto/example_http_get.py,sha256=_MyrwSBVCbDbb0VEmCpXpHIJzKC8NnEwjAXpQFiotyM,1438
|
|
40
41
|
examples/integration-server/jobs/materials_auto/example_instrument.py,sha256=XWy1mCvDwL_Yfl3psFkD1ZX3K2vDQxPXgcMIABB5bLQ,3351
|
|
41
42
|
examples/integration-server/jobs/materials_auto/example_parse.py,sha256=Z3iqAUdI5ya07VS3XayjK8brKuAyaqXlImJMJIUHz_4,8660
|
|
42
43
|
examples/integration-server/jobs/materials_auto/example_predictions.py,sha256=5fO4rqRa80_968A1uVZn2TlMOUib54A8rumGW02sIMM,2112
|
|
43
44
|
examples/integration-server/jobs/materials_auto/example_runsheet_wh.py,sha256=7FWDz3QpueVcf83fPrwGSqxs9pX06iKcQFte_vz3dC8,2944
|
|
44
45
|
examples/integration-server/jobs/materials_auto/example_wh.py,sha256=PN-skP27yJwDZboWk5g5EZEc3AKfVayQLfnopjsDKJc,659
|
|
45
|
-
examples/integration-server/jobs/materials_auto/profile.yaml,sha256=
|
|
46
|
+
examples/integration-server/jobs/materials_auto/profile.yaml,sha256=qEgEunAcmuIIVsGCvNZ1sFJPfrefonN5r9BLTt5DIFg,2750
|
|
46
47
|
pkgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
48
|
pkgs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
49
|
pkgs/argument_parser/__init__.py,sha256=cEEOAQS8UJ4Kbuo0oCVAHHhkbYCfrH6cUTTt2Mq3PmI,1445
|
|
@@ -81,19 +82,19 @@ pkgs/serialization_util/__init__.py,sha256=DEMIjEmOVZHuSwsxI9uUs3CNDSztNgcpOp35D
|
|
|
81
82
|
pkgs/serialization_util/_get_type_for_serialization.py,sha256=dW5_W9MFd6wgWfW5qlWork-GBb-QFLtiOZkjk2Zqn2M,1177
|
|
82
83
|
pkgs/serialization_util/convert_to_snakecase.py,sha256=VeI7d6JMexvfveZBZE4brMTyW4I9BEdl38bioQn8M6g,759
|
|
83
84
|
pkgs/serialization_util/dataclasses.py,sha256=ErjxC60hnn_2XpQM-OyQBsVOaTz8JaHB--g4CjwoTK4,417
|
|
84
|
-
pkgs/serialization_util/serialization_helpers.py,sha256=
|
|
85
|
+
pkgs/serialization_util/serialization_helpers.py,sha256=UhekzGUcscopGTknPeb-_XM19u17jLBmbqhrpqNjkcg,7794
|
|
85
86
|
pkgs/strenum_compat/__init__.py,sha256=Bq1kcPIQsXRiLUGWc63QGnVa5BlhvuFWpMMvdNcHy00,76
|
|
86
87
|
pkgs/strenum_compat/strenum_compat.py,sha256=uOUAgpYTjHs1MX8dG81jRlyTkt3KNbkV_25zp7xTX2s,36
|
|
87
88
|
pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
|
|
88
89
|
pkgs/type_spec/__main__.py,sha256=snBwPNvzU46Rqp4HlYb5Urv10Rs36gUbsPoFZfQcWRY,1162
|
|
89
|
-
pkgs/type_spec/builder.py,sha256=
|
|
90
|
+
pkgs/type_spec/builder.py,sha256=i8uMhsG7cJa5Dxn25RQyJk9pgwvOd1mc-bO0O49tYxA,66376
|
|
90
91
|
pkgs/type_spec/builder_types.py,sha256=EFXvwd3DhuFcqMtG12U9RHNYXHxi_g6kY5AVPBo3fCg,253
|
|
91
92
|
pkgs/type_spec/config.py,sha256=8SQkCRAKzrcycR-9Tjt6J4-kNalN8IvbE7zo1FMlrZc,7226
|
|
92
93
|
pkgs/type_spec/cross_output_links.py,sha256=exmHrdr-Mrq6FyMXzWgmuKhE-uqo_rN5k_PcirQgrGU,3037
|
|
93
94
|
pkgs/type_spec/emit_io_ts.py,sha256=sIdS5f_C79SiaSqVS4HtQ8SFxA87ehXkj9CrmrpjTzg,5862
|
|
94
95
|
pkgs/type_spec/emit_open_api.py,sha256=C3PRRSQJpHUZkS4CeEMGywhbLYs_MD3t6u-DlVIe2WA,28638
|
|
95
96
|
pkgs/type_spec/emit_open_api_util.py,sha256=bTmRvrGP82-eB75hwf9ySI7pDEC87FNQTF18VKEWSXY,2367
|
|
96
|
-
pkgs/type_spec/emit_python.py,sha256=
|
|
97
|
+
pkgs/type_spec/emit_python.py,sha256=R66jEWVL0RcN15xDUvjNBe4YcT15hBfKyWU-k5ipbWo,59567
|
|
97
98
|
pkgs/type_spec/emit_scss.py,sha256=6psmBAJyu7cvfQAIvIIMk2U6VFG_xeWy1Ea4afv0XyM,1497
|
|
98
99
|
pkgs/type_spec/emit_typescript.py,sha256=Qu9f1Yv_wc449KHcBGO58hatbzvPvgMbZ11jferi3oY,11567
|
|
99
100
|
pkgs/type_spec/emit_typescript_util.py,sha256=dRiOm38M4DR5NtvJyaEoGXE8Zzrfnae6yuDC76OzCeU,14915
|
|
@@ -103,9 +104,9 @@ pkgs/type_spec/open_api_util.py,sha256=LX6ny4xNOWXQO3qWVM8elrSDTqWsj_7jFplax2POS
|
|
|
103
104
|
pkgs/type_spec/test.py,sha256=4ueujBq-pEgnX3Z69HyPmD-bullFXmpixcpVzfOkhP4,489
|
|
104
105
|
pkgs/type_spec/util.py,sha256=Yc7QTZDjlu4ndOu3BwxLy5gRwG2mhnXN_s-iY9SYnIo,4834
|
|
105
106
|
pkgs/type_spec/actions_registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
106
|
-
pkgs/type_spec/actions_registry/__main__.py,sha256=
|
|
107
|
-
pkgs/type_spec/actions_registry/emit_python.py,sha256=
|
|
108
|
-
pkgs/type_spec/actions_registry/emit_typescript.py,sha256=
|
|
107
|
+
pkgs/type_spec/actions_registry/__main__.py,sha256=hWUnmiG68xeW5GhnIolfHOvPY2GI_kxMgqwtOSgLlvo,4723
|
|
108
|
+
pkgs/type_spec/actions_registry/emit_python.py,sha256=atY1_Z9Ue6r1nBsMeoeX02vQCc_UpAnDLK7gdVNemZ4,3753
|
|
109
|
+
pkgs/type_spec/actions_registry/emit_typescript.py,sha256=XqmbX5OrgjdCGQf4-iNc_aZ7JiXgaVGt1wJcpAUh8SA,6787
|
|
109
110
|
pkgs/type_spec/parts/base.py.prepart,sha256=1BCL7DCPoot5CYR3O-IpcOvMVthe1cbTQkTiUeZvuk8,2316
|
|
110
111
|
pkgs/type_spec/parts/base.ts.prepart,sha256=m5aM7AU_42w3Lpbm_s3GYnuFxH3EcUlnFq7zOIE1fDo,1820
|
|
111
112
|
pkgs/type_spec/type_info/__main__.py,sha256=TLNvCHGcmaj_8Sj5bAQNpuNaaw2dpDzoFDWZds0V4Qo,1002
|
|
@@ -151,7 +152,7 @@ uncountable/integration/executors/executors.py,sha256=E3a0_yrQesfigDzjhUAwD7-l-o
|
|
|
151
152
|
uncountable/integration/executors/generic_upload_executor.py,sha256=MuNzrMnAaj6PBhrfTKX6e6vyQhwoDeBrYLz96ai653k,12149
|
|
152
153
|
uncountable/integration/executors/script_executor.py,sha256=hKq09fOG89OAZ1Iq7wm2OgpUz1bh7DIYdZ2yn6ySr10,881
|
|
153
154
|
uncountable/integration/http_server/__init__.py,sha256=ld7hD3wOGwAbnVRBrkTUCP5zNG-kptMd4wGJyQvUWVc,170
|
|
154
|
-
uncountable/integration/http_server/types.py,sha256=
|
|
155
|
+
uncountable/integration/http_server/types.py,sha256=yrpSEPz7mS8xfNHCsYtDD3OIgZpu1dsND4pRELxFI6A,2464
|
|
155
156
|
uncountable/integration/queue_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
157
|
uncountable/integration/queue_runner/job_process.py,sha256=OONJ7aLsE80qIJ2ABLY3HYyKI7VdpBjI_pPQ3GCC13U,2586
|
|
157
158
|
uncountable/integration/queue_runner/job_runner.py,sha256=Yh9hYfEYOya3BR6ypsal3LKPKrrEb4VQwfGuh4qyU2w,6115
|
|
@@ -180,7 +181,7 @@ uncountable/integration/queue_runner/datastore/model.py,sha256=06_fGS0QTALEA_381
|
|
|
180
181
|
uncountable/integration/secret_retrieval/__init__.py,sha256=sisf8cxCYcJmCXCKjEPoT2xIxm1j-Ru9iTfMVxH6NM0,171
|
|
181
182
|
uncountable/integration/secret_retrieval/basic_secret.py,sha256=PfpeaEDwdi8nFlHUJnzCob9GYgGG5O_3mmcaxPPY6zI,3272
|
|
182
183
|
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=c0VkCvppWKXwgxdblQuj2WhRaEGBPa7vLDoS6mlNOAQ,3919
|
|
183
|
-
uncountable/integration/webhook_server/entrypoint.py,sha256=
|
|
184
|
+
uncountable/integration/webhook_server/entrypoint.py,sha256=e7aYLsp5ht8Bzmj522_-5xSEm9zyHw-NGvggYCWClDE,5399
|
|
184
185
|
uncountable/types/__init__.py,sha256=7fIYhDsz995jFGK7wBXIVMzIxUJbltUmdqm9U6HA_QQ,14367
|
|
185
186
|
uncountable/types/async_batch.py,sha256=yCCWrrLQfxXVqZp-KskxLBNkNmuELdz4PJjx8ULppgs,662
|
|
186
187
|
uncountable/types/async_batch_processor.py,sha256=6Z1qx_H9IqLqp0rzpCtrRvw0DqQ2O5ctkEnw0yNVaV8,48727
|
|
@@ -207,7 +208,7 @@ uncountable/types/data_t.py,sha256=U_dIh5GcyaJlkrHEI4Qf4TOo1uJX07PYO70sYzzKtTo,2
|
|
|
207
208
|
uncountable/types/dataset_measurements.py,sha256=CVwWePUC02B_R_UB86yfNBwnclR-5xpZaiCs2jWtu2A,512
|
|
208
209
|
uncountable/types/dataset_measurements_t.py,sha256=iVwh-3Z23aXmPJcUJ3s9axPeOs627DElE_dhfj_PRlQ,1711
|
|
209
210
|
uncountable/types/entity.py,sha256=Zclk1LYcRaYrMDhqyCjMSLEg0fE6_q8LHvV22Qvscgs,566
|
|
210
|
-
uncountable/types/entity_t.py,sha256=
|
|
211
|
+
uncountable/types/entity_t.py,sha256=1ysk_fygPjWr3MQlWQYLCZkcpxHGEiwDGebqMTGfaDo,29968
|
|
211
212
|
uncountable/types/experiment_groups.py,sha256=qUpFOx1AKgzaT_4khCOv5Xs6jwiQGbvHH-GUh3v1nv4,288
|
|
212
213
|
uncountable/types/experiment_groups_t.py,sha256=QjZBdjnbsD1D-VpPSSV6hBg-Q7mujjKvYtdMewtXNVU,712
|
|
213
214
|
uncountable/types/exports.py,sha256=VMmxUO2PpV1Y63hZ2AnVor4H-B6aswJ7YpSru_u89lU,334
|
|
@@ -232,8 +233,8 @@ uncountable/types/integration_session.py,sha256=MVTtZa04INF4L8PxPjqz3l1Lse6Hze3I
|
|
|
232
233
|
uncountable/types/integration_session_t.py,sha256=Nnes-u2RzvZYsybQsNhtBfbA3d2W_nuDjAS_mU6L6yM,1801
|
|
233
234
|
uncountable/types/integrations.py,sha256=0fOhtbLIOl9w1GP9J3PTagRU8mjOKV48JNLLH3SJQP0,472
|
|
234
235
|
uncountable/types/integrations_t.py,sha256=ZWwEP13mIkSiljSHN2p05XCwRgT2bdADs-8hiVQTs3I,1752
|
|
235
|
-
uncountable/types/job_definition.py,sha256=
|
|
236
|
-
uncountable/types/job_definition_t.py,sha256=
|
|
236
|
+
uncountable/types/job_definition.py,sha256=s6hjlxlJgAyD9aDjV0EdAMc0zW91XCD8h7VBX9I9bIE,1956
|
|
237
|
+
uncountable/types/job_definition_t.py,sha256=bGBvhDi0CIRmeKC5jGw5bb-LDBG53czZaZlYbgo5tuQ,9832
|
|
237
238
|
uncountable/types/listing.py,sha256=U-0-opI0Wgxzmwp4y0qhyT26aK_BjaqdlFVpjud-ryk,2838
|
|
238
239
|
uncountable/types/listing_t.py,sha256=z0hpUlburpIrVA5KcO1TRjkyAGGuAHvpHt5Fo6cAqIc,17521
|
|
239
240
|
uncountable/types/ml_reports.py,sha256=qhZ36pbFLOcoET3D_K2DiNx59bjp8WyurbCrWPsZTrM,757
|
|
@@ -292,8 +293,8 @@ uncountable/types/step_relationships.py,sha256=I6t7tj-VmHAhH8YpJPIUFBxPaRiXU_Zg-
|
|
|
292
293
|
uncountable/types/step_relationships_t.py,sha256=pS9NJxYUab0XsHnninHXR8V-4ohofSP67iIDIhPR_QI,5306
|
|
293
294
|
uncountable/types/units.py,sha256=yxuddayiE8cnzrjQiIsURisWc-Vm1F37uyS3fjM--Ao,254
|
|
294
295
|
uncountable/types/units_t.py,sha256=6u4JAQFzVtaLcKo15JHsDXZ09no5nlHRQKAhGfiySPE,655
|
|
295
|
-
uncountable/types/uploader.py,sha256=
|
|
296
|
-
uncountable/types/uploader_t.py,sha256=
|
|
296
|
+
uncountable/types/uploader.py,sha256=k9OEe6jxjlBcc3iiMl5LoLFEIuI-Z0z6-ec3OYMa5nQ,1322
|
|
297
|
+
uncountable/types/uploader_t.py,sha256=YrC8XQpMy6avkOTeBv-ma9iHE3pClJx6ZxgOVykKP3Q,6830
|
|
297
298
|
uncountable/types/users.py,sha256=R-bFIh07mMl6HyxP8hKmlT-QMbBXZPZ7mVuOIeOlCsg,254
|
|
298
299
|
uncountable/types/users_t.py,sha256=n2Ldc78cMU8gKynf2u9GvcKdelcKDRkjaOpAUO6Q5m4,678
|
|
299
300
|
uncountable/types/webhook.py,sha256=ZLXFWaup9ueboI8D4-V3sRGZyb0pFXjzOTywlk8ZfF0,264
|
|
@@ -338,7 +339,7 @@ uncountable/types/api/file_folders/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHk
|
|
|
338
339
|
uncountable/types/api/file_folders/add_file_to_folder.py,sha256=0CnGFFSKyLsN6bOOYieh0Esiqq5XgQWA83bUn1jWXwY,1534
|
|
339
340
|
uncountable/types/api/file_folders/modify_file_system.py,sha256=tXjHwtR7hUudCiwtcM2lHXVc4sgCI_R3-w6SWWwpCTU,2950
|
|
340
341
|
uncountable/types/api/files/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
341
|
-
uncountable/types/api/files/download_file.py,sha256=
|
|
342
|
+
uncountable/types/api/files/download_file.py,sha256=w_GNviiXHqrnFU2pbriy6sl5i415JA0TFzXeJB_o00A,3983
|
|
342
343
|
uncountable/types/api/id_source/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
343
344
|
uncountable/types/api/id_source/list_id_source.py,sha256=tvrFKTynmfcLekUJnYSxSQi5V0N68ULjtn6xx0RmKec,1585
|
|
344
345
|
uncountable/types/api/id_source/match_id_source.py,sha256=xnKnhHQBYipJmMxfH-7MHyNM6QOTrkSApuN9oAlk2PA,1560
|
|
@@ -433,7 +434,7 @@ uncountable/types/api/uploader/complete_async_parse.py,sha256=Os1HAubxTlbut6Gylj
|
|
|
433
434
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=QU1KmAFgGHSWskZEKfaAww8rCj-hVNP0i4kMQE3x3Fc,1822
|
|
434
435
|
uncountable/types/api/user/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
435
436
|
uncountable/types/api/user/get_current_user_info.py,sha256=BT7bGp5SOHz3XdKWhhdZ6acnInafT2PgdJ-H4YH3W7c,1181
|
|
436
|
-
uncountablepythonsdk-0.0.
|
|
437
|
-
uncountablepythonsdk-0.0.
|
|
438
|
-
uncountablepythonsdk-0.0.
|
|
439
|
-
uncountablepythonsdk-0.0.
|
|
437
|
+
uncountablepythonsdk-0.0.185.dist-info/METADATA,sha256=E0K3f473FaOotwX30VtrvhiIc-YIbHCdyS2TyY2-pVY,2211
|
|
438
|
+
uncountablepythonsdk-0.0.185.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
439
|
+
uncountablepythonsdk-0.0.185.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
440
|
+
uncountablepythonsdk-0.0.185.dist-info/RECORD,,
|
|
File without changes
|
{uncountablepythonsdk-0.0.183.dist-info → uncountablepythonsdk-0.0.185.dist-info}/top_level.txt
RENAMED
|
File without changes
|