UncountablePythonSDK 0.0.76__py3-none-any.whl → 0.0.78__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.76.dist-info → UncountablePythonSDK-0.0.78.dist-info}/METADATA +1 -1
- {UncountablePythonSDK-0.0.76.dist-info → UncountablePythonSDK-0.0.78.dist-info}/RECORD +23 -21
- {UncountablePythonSDK-0.0.76.dist-info → UncountablePythonSDK-0.0.78.dist-info}/WHEEL +1 -1
- pkgs/argument_parser/argument_parser.py +7 -7
- pkgs/filesystem_utils/_s3_session.py +3 -3
- pkgs/type_spec/builder.py +19 -19
- pkgs/type_spec/config.py +3 -3
- pkgs/type_spec/emit_io_ts.py +6 -6
- pkgs/type_spec/emit_open_api.py +4 -4
- pkgs/type_spec/emit_python.py +15 -15
- pkgs/type_spec/emit_typescript.py +4 -4
- pkgs/type_spec/emit_typescript_util.py +4 -4
- pkgs/type_spec/type_info/emit_type_info.py +6 -6
- uncountable/core/file_upload.py +1 -3
- uncountable/integration/executors/generic_upload_executor.py +7 -7
- uncountable/integration/executors/script_executor.py +3 -3
- uncountable/integration/scheduler.py +1 -3
- uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
- uncountable/types/__init__.py +2 -0
- uncountable/types/async_jobs.py +9 -0
- uncountable/types/async_jobs_t.py +53 -0
- uncountable/types/entity_t.py +1 -1
- {UncountablePythonSDK-0.0.76.dist-info → UncountablePythonSDK-0.0.78.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.78
|
|
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
|
|
@@ -29,12 +29,12 @@ pkgs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
29
29
|
pkgs/argument_parser/__init__.py,sha256=JRfZkC0-q6axr8F5_TKrjSprJ7d7chfcPvf-iMQqFg0,447
|
|
30
30
|
pkgs/argument_parser/_is_enum.py,sha256=Gw6jJa8nBwYGqXwwCZbSnWL8Rvr5alkg5lSVAqXtOZM,257
|
|
31
31
|
pkgs/argument_parser/_is_namedtuple.py,sha256=Rjc1bKanIPPogl3qG5JPBxglG1TqWYOo1nxxhBASQWY,265
|
|
32
|
-
pkgs/argument_parser/argument_parser.py,sha256=
|
|
32
|
+
pkgs/argument_parser/argument_parser.py,sha256=XjWQdcWanfaCGdLx7c_yQtqbZp7db-KAWzw8sTpXOsY,17713
|
|
33
33
|
pkgs/argument_parser/case_convert.py,sha256=NuJLJUJRbyVb6_Slen4uqaStEHbcOS1d-hBBfDrrw-c,605
|
|
34
34
|
pkgs/filesystem_utils/__init__.py,sha256=NSsQrUCoGISBCqCCyq6_583sYHTVEQeDjDO8hvZn3ag,1261
|
|
35
35
|
pkgs/filesystem_utils/_gdrive_session.py,sha256=GJuZYJq1W4QQ_7OLvZIMK99FgRq8FxJHg6cMUx9prtA,11077
|
|
36
36
|
pkgs/filesystem_utils/_local_session.py,sha256=xFEYhAvNqrOYqwt4jrEYOuYkjJn0zclZhTelW_Q1-rw,2325
|
|
37
|
-
pkgs/filesystem_utils/_s3_session.py,sha256=
|
|
37
|
+
pkgs/filesystem_utils/_s3_session.py,sha256=_jLK5C-UElT5Sl5teM2pFR7fQe11NlhUd04EgwN9FRs,3962
|
|
38
38
|
pkgs/filesystem_utils/_sftp_session.py,sha256=6zoF7YsEUp0GpyFb-BeIhUAWvbTK7IUjvPNJ1B0vEyI,4743
|
|
39
39
|
pkgs/filesystem_utils/file_type_utils.py,sha256=Xd-mg35mAENUgNJVz5uK8nEfrUp-NQld_gnXFEq3K-8,1487
|
|
40
40
|
pkgs/filesystem_utils/filesystem_session.py,sha256=BQ2Go8Mu9-GcnaWh2Pm4x7ugLVsres6XrOQ8RoiEpcE,1045
|
|
@@ -52,14 +52,14 @@ pkgs/strenum_compat/__init__.py,sha256=wXRFeNvBm8RU6dy1PFJ5sRLgUIEeH_DVR95Sv5qpG
|
|
|
52
52
|
pkgs/strenum_compat/strenum_compat.py,sha256=uOUAgpYTjHs1MX8dG81jRlyTkt3KNbkV_25zp7xTX2s,36
|
|
53
53
|
pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
|
|
54
54
|
pkgs/type_spec/__main__.py,sha256=5bJaX9Y_-FavP0qwzhk-z-V97UY7uaezJTa1zhO_HHQ,1048
|
|
55
|
-
pkgs/type_spec/builder.py,sha256=
|
|
56
|
-
pkgs/type_spec/config.py,sha256=
|
|
57
|
-
pkgs/type_spec/emit_io_ts.py,sha256=
|
|
58
|
-
pkgs/type_spec/emit_open_api.py,sha256=
|
|
55
|
+
pkgs/type_spec/builder.py,sha256=0CF9xJaZ74LsmRh4GzgxBsUkTjAObariAB0M399r-MI,48796
|
|
56
|
+
pkgs/type_spec/config.py,sha256=pMUNnpZRuS8hybgcPZiVYXz79qZcO9i_ZoiFAgbtVq4,4813
|
|
57
|
+
pkgs/type_spec/emit_io_ts.py,sha256=CUvBs0boB_X-Kndh66yYcqFfq3oC_LGs8YffLkJ0ZXA,5707
|
|
58
|
+
pkgs/type_spec/emit_open_api.py,sha256=_oBTuYixZUp3DT2cJaiY55VnCi_jGjqV_1vBx2dYdsw,24596
|
|
59
59
|
pkgs/type_spec/emit_open_api_util.py,sha256=x4GCiZSGdypJ9Qtm6I5W_3UvwdJyMs8_OGhJ8_THznA,2401
|
|
60
|
-
pkgs/type_spec/emit_python.py,sha256=
|
|
61
|
-
pkgs/type_spec/emit_typescript.py,sha256=
|
|
62
|
-
pkgs/type_spec/emit_typescript_util.py,sha256=
|
|
60
|
+
pkgs/type_spec/emit_python.py,sha256=GC-HSMTS0E0QgREjv8DbMRA9NJ1RkYywTOTqZ5ZHmkM,47375
|
|
61
|
+
pkgs/type_spec/emit_typescript.py,sha256=PNeXHoeMA8UWgxsgJisIhJeFX5CNXn0NIz8UtgTvxes,8838
|
|
62
|
+
pkgs/type_spec/emit_typescript_util.py,sha256=lG3Wtm5vN6etE0NeYrKfnrxj1vVWGzQBSDcDItaszWk,10319
|
|
63
63
|
pkgs/type_spec/load_types.py,sha256=vO8VLI7aTKzzHQIla-WO-5Z_mfTuwUqH4ZSKN9E9n5U,3688
|
|
64
64
|
pkgs/type_spec/open_api_util.py,sha256=IGh-_snGPST_P_8FdYtO8MTEa9PUxRW6Rzg9X9EgQik,7114
|
|
65
65
|
pkgs/type_spec/test.py,sha256=4ueujBq-pEgnX3Z69HyPmD-bullFXmpixcpVzfOkhP4,489
|
|
@@ -70,7 +70,7 @@ pkgs/type_spec/actions_registry/emit_typescript.py,sha256=Z1ZM4zOw26tvLspvW6Emg7
|
|
|
70
70
|
pkgs/type_spec/parts/base.py.prepart,sha256=wGNoDyQnLolHRZGRwHQX5TrPfKnu558NXCocYvqyroc,2174
|
|
71
71
|
pkgs/type_spec/parts/base.ts.prepart,sha256=2FJJvpg2olCcavxj0nbYWdwKl6KeScour2JjSvN42l8,1001
|
|
72
72
|
pkgs/type_spec/type_info/__main__.py,sha256=pmVjVqXyVh8vKTNCTFgz80Sg74C5BKToP3E6GS-X_So,857
|
|
73
|
-
pkgs/type_spec/type_info/emit_type_info.py,sha256=
|
|
73
|
+
pkgs/type_spec/type_info/emit_type_info.py,sha256=EzX0ONjrLtQFlN5cEAaw2RPVyadmgmZazOfqHUbL_PI,13362
|
|
74
74
|
pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
|
|
75
75
|
pkgs/type_spec/value_spec/__main__.py,sha256=6bzP85p_Cm4bPp5tXz8D_4p64wMn5SKsXC7SqSZquYc,8318
|
|
76
76
|
pkgs/type_spec/value_spec/convert_type.py,sha256=Tg5YsYOwvmf_EqbCAtCmqy3-dud8OwdbEOzAaRN7cCs,2286
|
|
@@ -82,7 +82,7 @@ uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,
|
|
|
82
82
|
uncountable/core/async_batch.py,sha256=Gur0VOS0AH2ugwvk65hwoX-iqwQAAyJaejY_LyAZZPo,1210
|
|
83
83
|
uncountable/core/client.py,sha256=qTM61IJV4DTE2LsTZyv4kePBZAv55vncWt2rtBf-SLQ,10632
|
|
84
84
|
uncountable/core/environment.py,sha256=K2TtE52JbW5UOBkBSc2Ee2l9rDIoRNoFDXDqRha1fJI,1036
|
|
85
|
-
uncountable/core/file_upload.py,sha256=
|
|
85
|
+
uncountable/core/file_upload.py,sha256=L1tjW-zw0vu6y7ytqSWR_aVF8OIsqlQYHCa-24kbAf4,3408
|
|
86
86
|
uncountable/core/types.py,sha256=s2CjqYJpsmbC7xMwxxT7kJ_V9bwokrjjWVVjpMcQpKI,333
|
|
87
87
|
uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
88
|
uncountable/integration/cli.py,sha256=h3RE0l1SdjkveOKeY2amlmrJppK4HEQJXk8VG9UJRWg,1359
|
|
@@ -91,7 +91,7 @@ uncountable/integration/cron.py,sha256=6eH-kIs3sdYPCyb62_L2M7U_uQTdMTdwY5hreEJb0
|
|
|
91
91
|
uncountable/integration/entrypoint.py,sha256=BHOYPQgKvZE6HG8Rv15MkdYl8lRkvfDgv1OdLo0oQ9Q,433
|
|
92
92
|
uncountable/integration/job.py,sha256=af197JUceIKzpIN5C2z8zeZOPhIQ16ipyC6qVt1WXv0,2386
|
|
93
93
|
uncountable/integration/scan_profiles.py,sha256=760zbv7O7wXxHUHqUkFBpd1Afe8hqxMPU3ugwZGdhEo,2925
|
|
94
|
-
uncountable/integration/scheduler.py,sha256=
|
|
94
|
+
uncountable/integration/scheduler.py,sha256=UdcRXIxoq6CFON3uokyK5yzsKsvGxo7LmIRJ3XJIvBk,4499
|
|
95
95
|
uncountable/integration/server.py,sha256=Hwi3fpdhcSK2HynI6Zwi7A3mWTTCaK_ic53M5-4IEp4,4716
|
|
96
96
|
uncountable/integration/telemetry.py,sha256=bX68_a2PyG23n1QtIFxcH30JynUoovMz6HgA_jgUb1A,7132
|
|
97
97
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -99,8 +99,8 @@ uncountable/integration/db/connect.py,sha256=mE3bdV0huclH2iT_dXCQdRL4LkjIuf_myAR
|
|
|
99
99
|
uncountable/integration/db/session.py,sha256=96cGQXpe6IugBTdSsjdP0S5yhJ6toSmbVB6qhc3FJzE,693
|
|
100
100
|
uncountable/integration/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
101
|
uncountable/integration/executors/executors.py,sha256=CbwatKkHrLhnqYr_nsBjr0KYeOn8KqijxrZPHbxChBY,1961
|
|
102
|
-
uncountable/integration/executors/generic_upload_executor.py,sha256=
|
|
103
|
-
uncountable/integration/executors/script_executor.py,sha256=
|
|
102
|
+
uncountable/integration/executors/generic_upload_executor.py,sha256=0vs9NVk1UL2FBhiMCH6o8p4KtVXNFNvv861QCOD3UU4,10375
|
|
103
|
+
uncountable/integration/executors/script_executor.py,sha256=BBQ9f0l7uH2hgKf60jtm-pONzwk-EeOhM2qBAbv_URo,846
|
|
104
104
|
uncountable/integration/queue_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
105
|
uncountable/integration/queue_runner/job_scheduler.py,sha256=5Z74Wb17oohz7EFN40JBymH1UWW7-Dnk9HhOz3wZ08E,5005
|
|
106
106
|
uncountable/integration/queue_runner/queue_runner.py,sha256=0BmYu5zHdothTevGsB-nXg6MBd1UD-WkP3h1WCKMdQg,710
|
|
@@ -120,12 +120,14 @@ uncountable/integration/queue_runner/datastore/datastore_sqlite.py,sha256=UZQABT
|
|
|
120
120
|
uncountable/integration/queue_runner/datastore/interface.py,sha256=j4D-zVvLq-48VTVwHVei82UVUJ_P3cxiseyiTl0MoNw,534
|
|
121
121
|
uncountable/integration/queue_runner/datastore/model.py,sha256=8-RI5A2yPZVGBLWINVmMd6VOl_oHtqGtnaNXcapAChw,577
|
|
122
122
|
uncountable/integration/secret_retrieval/__init__.py,sha256=3QXVj35w8rRMxVvmmsViFYDi3lcb3g70incfalOEm6o,87
|
|
123
|
-
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=
|
|
123
|
+
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=9iz9N8Z-B68QwFCXsx8hTYbgDbk06ejkJ3RQ9mCLMyM,3000
|
|
124
124
|
uncountable/integration/webhook_server/entrypoint.py,sha256=aaulH6GS7uvBw1jPrZwPDS3mRE9NY-lKxuX7vtoJcGg,5407
|
|
125
|
-
uncountable/types/__init__.py,sha256=
|
|
125
|
+
uncountable/types/__init__.py,sha256=OAuDaFSXysVPw0Y8slVJuBviSNfAXNzPKKG2eGHeeM8,9028
|
|
126
126
|
uncountable/types/async_batch.py,sha256=_OhT25_dEVts_z_n1kqfJH3xlZg3btLqR6TNkfFLlXE,609
|
|
127
127
|
uncountable/types/async_batch_processor.py,sha256=DJn9KdgUv_l7ojCVJ_d9wCS3GUNc21b5cOrpunty2KU,13129
|
|
128
128
|
uncountable/types/async_batch_t.py,sha256=niXgIM7FQXb_1RLX8CBXiGaYSa8nqd-jqX68p7gMgJo,2558
|
|
129
|
+
uncountable/types/async_jobs.py,sha256=gFtEPBZot72sR5zrMWc5zD5QrgNmFmGyD67Y-KhyAmo,343
|
|
130
|
+
uncountable/types/async_jobs_t.py,sha256=sEh1Ev46ff4n1v8mMV3rEbH3MGmaXnLuvYf0UhDdzeU,1425
|
|
129
131
|
uncountable/types/auth_retrieval.py,sha256=FY8Vr_BWD4O8PsauPNt_7_08YZSHFaUlTT72L5XJ-4o,570
|
|
130
132
|
uncountable/types/auth_retrieval_t.py,sha256=D2ptCIsuCecJa_P8K2qrNk2-zz1WuBpOrsZ65BRP-Dw,2221
|
|
131
133
|
uncountable/types/base.py,sha256=xVSjWvA_fUUnkCg83EjoYEFvAfmskinKFMeYFOxNc9E,359
|
|
@@ -140,7 +142,7 @@ uncountable/types/client_config_t.py,sha256=6dStfR0IEHiPW8f9_aF3DD_tHmXXw2rEVrgp
|
|
|
140
142
|
uncountable/types/curves.py,sha256=W6uMpG5SyW1MS82szNpxkFEn1MnxNpBFyFbQb2Ysfng,366
|
|
141
143
|
uncountable/types/curves_t.py,sha256=lKhRM-2cZ_sFaW7pa_I_Ipz_pJhm3_yTFehRXI79pKk,1416
|
|
142
144
|
uncountable/types/entity.py,sha256=ECvhswTj9xp4gUEKTZoZYyxHvx1oyvE5FNiGNfSyUgk,528
|
|
143
|
-
uncountable/types/entity_t.py,sha256=
|
|
145
|
+
uncountable/types/entity_t.py,sha256=78elxgVHHQ9GM9uvQVtTMSLnRXgDiznk9GEbAIzlK-k,16246
|
|
144
146
|
uncountable/types/experiment_groups.py,sha256=_0OXcPzSAbkE-rfKt5tPx178YJ4pcEKZvrCxUHgDnvw,309
|
|
145
147
|
uncountable/types/experiment_groups_t.py,sha256=qEs8YW0eJOJ_sCOObT5v9QRx9wsjLYpJqJhCJXa-vNA,721
|
|
146
148
|
uncountable/types/field_values.py,sha256=uuIWX-xmfvcinYPdfkWJeb56zzQY01mc9rmotMPMh24,503
|
|
@@ -283,7 +285,7 @@ uncountable/types/api/triggers/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr
|
|
|
283
285
|
uncountable/types/api/triggers/run_trigger.py,sha256=-oZgPyn43xEKSCs81DVNzwaYMCdRJxbM9GY6fsqKwf4,1090
|
|
284
286
|
uncountable/types/api/uploader/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
285
287
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=6mwVG136oLp9JcbB2I-kZnrcm3aeZzYZB-SFjEImY2o,1314
|
|
286
|
-
UncountablePythonSDK-0.0.
|
|
287
|
-
UncountablePythonSDK-0.0.
|
|
288
|
-
UncountablePythonSDK-0.0.
|
|
289
|
-
UncountablePythonSDK-0.0.
|
|
288
|
+
UncountablePythonSDK-0.0.78.dist-info/METADATA,sha256=z7rTA15JsIE1WhHYiuLtKruYxb51j5FN6mx2rG31EDc,2051
|
|
289
|
+
UncountablePythonSDK-0.0.78.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
|
|
290
|
+
UncountablePythonSDK-0.0.78.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
291
|
+
UncountablePythonSDK-0.0.78.dist-info/RECORD,,
|
|
@@ -49,7 +49,7 @@ class ParserExtraFieldsError(ParserError):
|
|
|
49
49
|
self.extra_fields = extra_fields
|
|
50
50
|
|
|
51
51
|
def __str__(self) -> str:
|
|
52
|
-
return f"extra fields were provided: {
|
|
52
|
+
return f"extra fields were provided: {', '.join(self.extra_fields)}"
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
def is_optional(field_type: typing.Any) -> bool:
|
|
@@ -268,15 +268,15 @@ def _build_parser_inner(
|
|
|
268
268
|
|
|
269
269
|
def parse_int(value: typing.Any) -> T:
|
|
270
270
|
if isinstance(value, str):
|
|
271
|
-
assert (
|
|
272
|
-
"
|
|
273
|
-
)
|
|
271
|
+
assert "_" not in value, (
|
|
272
|
+
"numbers with underscores not considered integers"
|
|
273
|
+
)
|
|
274
274
|
|
|
275
275
|
dec_value = Decimal(value)
|
|
276
276
|
int_value = int(dec_value)
|
|
277
|
-
assert (
|
|
278
|
-
|
|
279
|
-
)
|
|
277
|
+
assert int_value == dec_value, (
|
|
278
|
+
f"value ({value}) cannot be parsed to int without discarding precision"
|
|
279
|
+
)
|
|
280
280
|
return int_value # type: ignore
|
|
281
281
|
|
|
282
282
|
return parse_int
|
|
@@ -76,9 +76,9 @@ class S3Session(FileSystemSession):
|
|
|
76
76
|
filepaths: list[FileSystemObject],
|
|
77
77
|
) -> list[FileObjectData]:
|
|
78
78
|
downloaded_files: list[FileObjectData] = []
|
|
79
|
-
assert (
|
|
80
|
-
|
|
81
|
-
)
|
|
79
|
+
assert self.bucket is not None, (
|
|
80
|
+
"call to download_files on uninitialized s3 session"
|
|
81
|
+
)
|
|
82
82
|
|
|
83
83
|
for file_object in filepaths:
|
|
84
84
|
if (
|
pkgs/type_spec/builder.py
CHANGED
|
@@ -359,9 +359,9 @@ class SpecTypeDefn(SpecType):
|
|
|
359
359
|
property_name_case = NameCase(name_case_raw)
|
|
360
360
|
|
|
361
361
|
if property_name_case != NameCase.preserve:
|
|
362
|
-
assert util.is_valid_property_name(
|
|
363
|
-
name
|
|
364
|
-
)
|
|
362
|
+
assert util.is_valid_property_name(name), (
|
|
363
|
+
f"{name} is not a valid property name"
|
|
364
|
+
)
|
|
365
365
|
|
|
366
366
|
data_type = data.get("type")
|
|
367
367
|
builder.ensure(data_type is not None, "missing `type` entry")
|
|
@@ -590,21 +590,21 @@ class SpecTypeDefnUnion(SpecTypeDefn):
|
|
|
590
590
|
self.discriminator_map = {}
|
|
591
591
|
for sub_type in self.types:
|
|
592
592
|
builder.push_where(sub_type.name)
|
|
593
|
-
assert isinstance(
|
|
594
|
-
|
|
595
|
-
)
|
|
593
|
+
assert isinstance(sub_type, SpecTypeDefnObject), (
|
|
594
|
+
"union-type-must-be-object"
|
|
595
|
+
)
|
|
596
596
|
assert sub_type.properties is not None
|
|
597
597
|
discriminator_type = sub_type.properties.get(self.discriminator)
|
|
598
|
-
assert (
|
|
599
|
-
|
|
600
|
-
)
|
|
598
|
+
assert discriminator_type is not None, (
|
|
599
|
+
f"missing-discriminator-field: {sub_type}"
|
|
600
|
+
)
|
|
601
601
|
prop_type = unwrap_literal_type(discriminator_type.spec_type)
|
|
602
602
|
assert prop_type is not None
|
|
603
603
|
assert prop_type.is_value_to_string()
|
|
604
604
|
discriminant = str(prop_type.value)
|
|
605
|
-
assert (
|
|
606
|
-
discriminant
|
|
607
|
-
)
|
|
605
|
+
assert discriminant not in self.discriminator_map, (
|
|
606
|
+
f"duplicated-discriminant, {discriminant} in {sub_type}"
|
|
607
|
+
)
|
|
608
608
|
self.discriminator_map[discriminant] = sub_type
|
|
609
609
|
|
|
610
610
|
builder.pop_where()
|
|
@@ -924,9 +924,9 @@ class SpecEndpoint:
|
|
|
924
924
|
self.is_external = self.path_root == "api/external"
|
|
925
925
|
self.has_attachment = data.get("has_attachment", False)
|
|
926
926
|
|
|
927
|
-
assert (
|
|
928
|
-
|
|
929
|
-
)
|
|
927
|
+
assert not is_sdk or self.desc is not None, (
|
|
928
|
+
f"Endpoint description required for SDK endpoints, missing: {path}"
|
|
929
|
+
)
|
|
930
930
|
|
|
931
931
|
@property
|
|
932
932
|
def resolved_path(self: Self) -> str:
|
|
@@ -1108,9 +1108,9 @@ class SpecNamespace:
|
|
|
1108
1108
|
continue
|
|
1109
1109
|
|
|
1110
1110
|
if "value" in defn:
|
|
1111
|
-
assert util.is_valid_property_name(
|
|
1112
|
-
name
|
|
1113
|
-
)
|
|
1111
|
+
assert util.is_valid_property_name(name), (
|
|
1112
|
+
f"{name} is not a valid constant name"
|
|
1113
|
+
)
|
|
1114
1114
|
spec_constant = SpecConstant(self, name)
|
|
1115
1115
|
self.constants[name] = spec_constant
|
|
1116
1116
|
continue
|
|
@@ -1455,4 +1455,4 @@ class SpecBuilder:
|
|
|
1455
1455
|
)
|
|
1456
1456
|
|
|
1457
1457
|
def resolve_proper_name(self, stype: SpecTypeDefn) -> str:
|
|
1458
|
-
return f"{
|
|
1458
|
+
return f"{'.'.join(stype.namespace.path)}.{stype.name}"
|
pkgs/type_spec/config.py
CHANGED
|
@@ -108,9 +108,9 @@ def parse_yaml_config(config_file: str) -> Config:
|
|
|
108
108
|
raw_config: dict[str, ConfigValueType] = yaml.safe_load(input)
|
|
109
109
|
|
|
110
110
|
raw_type_spec_types = raw_config["type_spec_types"]
|
|
111
|
-
assert isinstance(
|
|
112
|
-
|
|
113
|
-
)
|
|
111
|
+
assert isinstance(raw_type_spec_types, list), (
|
|
112
|
+
"type_spec_types, must be a list of folders"
|
|
113
|
+
)
|
|
114
114
|
type_spec_types = [os.path.abspath(folder) for folder in raw_type_spec_types]
|
|
115
115
|
|
|
116
116
|
api_endpoint = _parse_string_lookup(
|
pkgs/type_spec/emit_io_ts.py
CHANGED
|
@@ -100,14 +100,14 @@ def _emit_type_io_ts_impl(ctx: EmitTypescriptContext, stype: builder.SpecType) -
|
|
|
100
100
|
else:
|
|
101
101
|
assert len(missable_lines) > 0 and len(required_lines) > 0
|
|
102
102
|
ctx.out.write("IO.intersection([\n")
|
|
103
|
-
ctx.out.write(f"{INDENT}IO.partial({
|
|
103
|
+
ctx.out.write(f"{INDENT}IO.partial({'{'}\n")
|
|
104
104
|
for line in missable_lines:
|
|
105
105
|
ctx.out.write(f"{INDENT}{line}")
|
|
106
|
-
ctx.out.write(f"{INDENT}{
|
|
107
|
-
ctx.out.write(f"{INDENT}IO.type({
|
|
106
|
+
ctx.out.write(f"{INDENT}{'}'}),\n")
|
|
107
|
+
ctx.out.write(f"{INDENT}IO.type({'{'}\n")
|
|
108
108
|
for line in required_lines:
|
|
109
109
|
ctx.out.write(f"{INDENT}{line}")
|
|
110
|
-
ctx.out.write(f"{INDENT}{
|
|
110
|
+
ctx.out.write(f"{INDENT}{'}'}),\n")
|
|
111
111
|
ctx.out.write("])\n")
|
|
112
112
|
|
|
113
113
|
ctx.out.write("\n")
|
|
@@ -125,11 +125,11 @@ def refer_to_io_ts(
|
|
|
125
125
|
spec = refer_to_io_ts(ctx, stype.parameters[0])
|
|
126
126
|
return f"IO.array({spec})"
|
|
127
127
|
if stype.defn_type.name == builder.BaseTypeName.s_union:
|
|
128
|
-
return f
|
|
128
|
+
return f"IO.union([{', '.join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])"
|
|
129
129
|
if stype.defn_type.name == builder.BaseTypeName.s_optional:
|
|
130
130
|
return f"IO.optional({refer_to_io_ts(ctx, stype.parameters[0])})"
|
|
131
131
|
if stype.defn_type.name == builder.BaseTypeName.s_tuple:
|
|
132
|
-
return f"IO.tuple([{
|
|
132
|
+
return f"IO.tuple([{', '.join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])"
|
|
133
133
|
return refer_to_io_ts(ctx, stype.defn_type)
|
|
134
134
|
|
|
135
135
|
assert isinstance(stype, builder.SpecTypeDefn)
|
pkgs/type_spec/emit_open_api.py
CHANGED
|
@@ -416,7 +416,7 @@ def _emit_namespace(
|
|
|
416
416
|
{name: value.asdict() for name, value in types.items()},
|
|
417
417
|
)
|
|
418
418
|
|
|
419
|
-
path = f"{config.types_output}/common/{
|
|
419
|
+
path = f"{config.types_output}/common/{'/'.join(namespace.path)}.yaml"
|
|
420
420
|
oa_namespace = {"components": oa_components}
|
|
421
421
|
_rewrite_with_notice(path, yaml.dumps(oa_namespace, sort_keys=False))
|
|
422
422
|
|
|
@@ -559,7 +559,7 @@ def _emit_endpoint(
|
|
|
559
559
|
gctx.tags.add(EmitOpenAPITag(name=tag_name, description=""))
|
|
560
560
|
gctx.tag_groups[tag_group].add(tag_name)
|
|
561
561
|
|
|
562
|
-
ref_path = f"common/{
|
|
562
|
+
ref_path = f"common/{'/'.join(namespace.path)}.yaml#/components/endpoint"
|
|
563
563
|
ep = namespace.endpoint
|
|
564
564
|
gctx.paths.append(
|
|
565
565
|
EmitOpenAPIPath(
|
|
@@ -577,7 +577,7 @@ def _emit_endpoint(
|
|
|
577
577
|
ctx.endpoint = EmitOpenAPIEndpoint(
|
|
578
578
|
method=namespace.endpoint.method.lower(),
|
|
579
579
|
tags=[tag_name],
|
|
580
|
-
summary=f"{
|
|
580
|
+
summary=f"{'/'.join(namespace.path[path_cutoff:])}",
|
|
581
581
|
description=description,
|
|
582
582
|
is_beta=namespace.endpoint.is_beta,
|
|
583
583
|
stability_level=namespace.endpoint.stability_level,
|
|
@@ -694,5 +694,5 @@ def open_api_type(
|
|
|
694
694
|
ctx.namespaces.add(stype.namespace)
|
|
695
695
|
# external namespace resolution
|
|
696
696
|
return OpenAPIRefType(
|
|
697
|
-
source=f"{resolve_namespace_ref(source_path=ctx.namespace.path, ref_path=stype.namespace.path, ref=
|
|
697
|
+
source=f"{resolve_namespace_ref(source_path=ctx.namespace.path, ref_path=stype.namespace.path, ref='/components/schema')}/{stype.name}"
|
|
698
698
|
)
|
pkgs/type_spec/emit_python.py
CHANGED
|
@@ -296,7 +296,7 @@ def _emit_types(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
|
|
|
296
296
|
full.write(f"# === END section from {namespace.name}.part.py ===\n")
|
|
297
297
|
|
|
298
298
|
basename = "/".join(namespace.path)
|
|
299
|
-
filename = f"{config.types_output}/{basename}{
|
|
299
|
+
filename = f"{config.types_output}/{basename}{'' if len(namespace.path) > 1 else '_t'}.py"
|
|
300
300
|
util.rewrite_file(filename, full.getvalue())
|
|
301
301
|
|
|
302
302
|
# Deprecated SDK support
|
|
@@ -390,13 +390,13 @@ from .base_t import ObjectId as ObjectId
|
|
|
390
390
|
def _validate_supports_handler_generation(
|
|
391
391
|
stype: builder.SpecTypeDefn, name: str, supports_inheritance: bool = False
|
|
392
392
|
) -> builder.SpecTypeDefnObject:
|
|
393
|
-
assert isinstance(
|
|
394
|
-
|
|
395
|
-
)
|
|
393
|
+
assert isinstance(stype, builder.SpecTypeDefnObject), (
|
|
394
|
+
f"External api {name} must be an object"
|
|
395
|
+
)
|
|
396
396
|
if not supports_inheritance:
|
|
397
|
-
assert (
|
|
398
|
-
|
|
399
|
-
)
|
|
397
|
+
assert stype.base is None or stype.base.is_base, (
|
|
398
|
+
f"Inheritance not supported in external api {name}"
|
|
399
|
+
)
|
|
400
400
|
return stype
|
|
401
401
|
|
|
402
402
|
|
|
@@ -756,7 +756,7 @@ def _emit_properties(
|
|
|
756
756
|
def _named_type_path(ctx: Context, stype: builder.SpecTypeDefn) -> str:
|
|
757
757
|
parts = [] if stype.is_base else stype.namespace.path.copy()
|
|
758
758
|
parts.append(stype.name)
|
|
759
|
-
return f"{ctx.builder.top_namespace}.{
|
|
759
|
+
return f"{ctx.builder.top_namespace}.{'.'.join(parts)}"
|
|
760
760
|
|
|
761
761
|
|
|
762
762
|
def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
@@ -818,7 +818,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
818
818
|
if not stype.base.is_base:
|
|
819
819
|
base_class = f"({refer_to(ctx, stype.base)})"
|
|
820
820
|
elif len(generics) > 0:
|
|
821
|
-
base_class = f"(typing.Generic[{
|
|
821
|
+
base_class = f"(typing.Generic[{', '.join(generics)}])"
|
|
822
822
|
class_out.write(f"class {stype.name}{base_class}:\n")
|
|
823
823
|
|
|
824
824
|
emitted_properties_metadata = _emit_type_properties(
|
|
@@ -858,7 +858,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
858
858
|
if stype.is_hashable:
|
|
859
859
|
dc_args.extend(["frozen=True", "eq=True"])
|
|
860
860
|
if len(dc_args) > 0:
|
|
861
|
-
dataclass += f
|
|
861
|
+
dataclass += f"({', '.join(dc_args)})"
|
|
862
862
|
|
|
863
863
|
ctx.out.write(f"{dataclass}\n")
|
|
864
864
|
ctx.out.write(class_out.getvalue())
|
|
@@ -966,9 +966,9 @@ from main.site.framework.types import StaticRouteType
|
|
|
966
966
|
)
|
|
967
967
|
sorted_endpoints = sorted(endpoints, key=_route_identifier)
|
|
968
968
|
|
|
969
|
-
assert len(endpoints) == len(
|
|
970
|
-
|
|
971
|
-
)
|
|
969
|
+
assert len(endpoints) == len(set(map(_route_identifier, endpoints))), (
|
|
970
|
+
"Endpoints are not unique"
|
|
971
|
+
)
|
|
972
972
|
|
|
973
973
|
path_set = set()
|
|
974
974
|
for endpoint in sorted_endpoints:
|
|
@@ -1037,7 +1037,7 @@ def _emit_namespace_imports(
|
|
|
1037
1037
|
if ns.endpoint is not None:
|
|
1038
1038
|
import_alias = "_".join(ns.path[2:]) + "_t"
|
|
1039
1039
|
out.write(
|
|
1040
|
-
f"import {config.types_package}.{
|
|
1040
|
+
f"import {config.types_package}.{'.'.join(ns.path)} as {import_alias}\n"
|
|
1041
1041
|
)
|
|
1042
1042
|
continue
|
|
1043
1043
|
elif from_namespace is not None:
|
|
@@ -1195,7 +1195,7 @@ def _emit_api_argument_lookup(
|
|
|
1195
1195
|
continue
|
|
1196
1196
|
|
|
1197
1197
|
import_alias = "_".join(namespace.path[1:])
|
|
1198
|
-
api_import = f"{config.types_package}.{
|
|
1198
|
+
api_import = f"{config.types_package}.{'.'.join(namespace.path)}"
|
|
1199
1199
|
imports.append(f"import {api_import} as {import_alias}")
|
|
1200
1200
|
|
|
1201
1201
|
route_group = (
|
|
@@ -48,7 +48,7 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
|
48
48
|
# Try to capture some common incompleteness errors
|
|
49
49
|
if namespace.endpoint is None or namespace.endpoint.function is None:
|
|
50
50
|
raise Exception(
|
|
51
|
-
f"Namespace {
|
|
51
|
+
f"Namespace {'/'.join(namespace.path)} is incomplete. It should have an endpoint with function, types, and/or constants"
|
|
52
52
|
)
|
|
53
53
|
continue
|
|
54
54
|
|
|
@@ -157,7 +157,7 @@ def _emit_endpoint(
|
|
|
157
157
|
wrap_call = (
|
|
158
158
|
f"{wrap_name}<Arguments>" if is_binary else f"{wrap_name}<Arguments, Response>"
|
|
159
159
|
)
|
|
160
|
-
type_path = f"unc_mat/types/{
|
|
160
|
+
type_path = f"unc_mat/types/{'/'.join(namespace.path)}"
|
|
161
161
|
|
|
162
162
|
if is_binary:
|
|
163
163
|
tsx_response_part = f"""import {{ {wrap_name} }} from "unc_base/api"
|
|
@@ -196,12 +196,12 @@ export const apiCall = {wrap_call}(
|
|
|
196
196
|
)
|
|
197
197
|
{data_loader_body}"""
|
|
198
198
|
|
|
199
|
-
output = f"{config.routes_output}/{
|
|
199
|
+
output = f"{config.routes_output}/{'/'.join(namespace.path)}.tsx"
|
|
200
200
|
util.rewrite_file(output, tsx_api)
|
|
201
201
|
|
|
202
202
|
# Hacky index support, until enough is migrated to regen entirely
|
|
203
203
|
# Emits the import into the UI API index file
|
|
204
|
-
index_path = f"{config.routes_output}/{
|
|
204
|
+
index_path = f"{config.routes_output}/{'/'.join(namespace.path[0:-1])}/index.tsx"
|
|
205
205
|
api_name = f"Api{ts_type_name(namespace.path[0 - 1])}"
|
|
206
206
|
if os.path.exists(index_path):
|
|
207
207
|
with open(index_path) as index:
|
|
@@ -153,7 +153,7 @@ def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
|
|
|
153
153
|
ctx.out.write(f"export type {stype.name} = {base_type}{{}}\n")
|
|
154
154
|
else:
|
|
155
155
|
if isinstance(stype, builder.SpecTypeDefnObject) and len(stype.parameters) > 0:
|
|
156
|
-
full_type_name = f
|
|
156
|
+
full_type_name = f"{stype.name}<{', '.join(stype.parameters)}>"
|
|
157
157
|
else:
|
|
158
158
|
full_type_name = stype.name
|
|
159
159
|
ctx.out.write(f"export type {full_type_name} = {base_type}{{")
|
|
@@ -201,7 +201,7 @@ def refer_to_impl(
|
|
|
201
201
|
return f"readonly ({spec})[]" if multi else f"readonly {spec}[]", False
|
|
202
202
|
if stype.defn_type.name == builder.BaseTypeName.s_union:
|
|
203
203
|
return (
|
|
204
|
-
f
|
|
204
|
+
f"({' | '.join([refer_to(ctx, p) for p in stype.parameters])})",
|
|
205
205
|
False,
|
|
206
206
|
)
|
|
207
207
|
if stype.defn_type.name == builder.BaseTypeName.s_literal:
|
|
@@ -209,11 +209,11 @@ def refer_to_impl(
|
|
|
209
209
|
for parameter in stype.parameters:
|
|
210
210
|
assert isinstance(parameter, builder.SpecTypeLiteralWrapper)
|
|
211
211
|
parts.append(refer_to(ctx, parameter))
|
|
212
|
-
return f
|
|
212
|
+
return f"({' | '.join(parts)})", False
|
|
213
213
|
if stype.defn_type.name == builder.BaseTypeName.s_optional:
|
|
214
214
|
return f"{refer_to(ctx, stype.parameters[0])} | null", True
|
|
215
215
|
if stype.defn_type.name == builder.BaseTypeName.s_tuple:
|
|
216
|
-
return f"[{
|
|
216
|
+
return f"[{', '.join([refer_to(ctx, p) for p in stype.parameters])}]", False
|
|
217
217
|
params = ", ".join([refer_to(ctx, p) for p in stype.parameters])
|
|
218
218
|
return f"{refer_to(ctx, stype.defn_type)}<{params}>", False
|
|
219
219
|
|
|
@@ -234,9 +234,9 @@ def _extract_and_validate_layout(
|
|
|
234
234
|
|
|
235
235
|
local_ref_name = None
|
|
236
236
|
if group.ref_name is not None:
|
|
237
|
-
assert (
|
|
238
|
-
|
|
239
|
-
)
|
|
237
|
+
assert base_layout is None or base_layout.get(group.ref_name) is None, (
|
|
238
|
+
f"group-name-duplicate-in-base:{group.ref_name}"
|
|
239
|
+
)
|
|
240
240
|
local_ref_name = group.ref_name
|
|
241
241
|
|
|
242
242
|
if group.extends:
|
|
@@ -255,9 +255,9 @@ def _extract_and_validate_layout(
|
|
|
255
255
|
assert group_ref_name in layout, f"missing-base-group:{group_ref_name}"
|
|
256
256
|
|
|
257
257
|
for prop_ref_name in stype.properties:
|
|
258
|
-
assert (
|
|
259
|
-
prop_ref_name
|
|
260
|
-
)
|
|
258
|
+
assert prop_ref_name in all_fields_group, (
|
|
259
|
+
f"layout-missing-field:{prop_ref_name}"
|
|
260
|
+
)
|
|
261
261
|
|
|
262
262
|
return layout
|
|
263
263
|
|
uncountable/core/file_upload.py
CHANGED
|
@@ -99,9 +99,7 @@ class FileUploader:
|
|
|
99
99
|
file_bytes.bytes_data,
|
|
100
100
|
{"filename": file_bytes.name.encode()},
|
|
101
101
|
client_session=session,
|
|
102
|
-
config=aiotus.RetryConfiguration(
|
|
103
|
-
ssl=False if self._allow_insecure_tls else None
|
|
104
|
-
),
|
|
102
|
+
config=aiotus.RetryConfiguration(ssl=not self._allow_insecure_tls),
|
|
105
103
|
chunksize=_CHUNK_SIZE,
|
|
106
104
|
)
|
|
107
105
|
if location is None:
|
|
@@ -103,7 +103,7 @@ def _pull_remote_directory_data(
|
|
|
103
103
|
files_to_pull = _filter_by_max_files(remote_directory, files_to_pull)
|
|
104
104
|
|
|
105
105
|
logger.log_info(
|
|
106
|
-
f"Accessing SFTP directory: {remote_directory.src_path} and pulling files: {
|
|
106
|
+
f"Accessing SFTP directory: {remote_directory.src_path} and pulling files: {', '.join([f.filename for f in files_to_pull if f.filename is not None])}",
|
|
107
107
|
)
|
|
108
108
|
return filesystem_session.download_files(files_to_pull)
|
|
109
109
|
|
|
@@ -205,16 +205,16 @@ class GenericUploadJob(Job[None]):
|
|
|
205
205
|
secret_access_key = None
|
|
206
206
|
|
|
207
207
|
if self.data_source.endpoint_url is None:
|
|
208
|
-
assert (
|
|
209
|
-
|
|
210
|
-
)
|
|
208
|
+
assert self.data_source.cloud_provider is not None, (
|
|
209
|
+
"either cloud_provider or endpoint_url must be specified"
|
|
210
|
+
)
|
|
211
211
|
match self.data_source.cloud_provider:
|
|
212
212
|
case S3CloudProvider.AWS:
|
|
213
213
|
endpoint_url = "https://s3.amazonaws.com"
|
|
214
214
|
case S3CloudProvider.OVH:
|
|
215
|
-
assert (
|
|
216
|
-
|
|
217
|
-
)
|
|
215
|
+
assert self.data_source.region_name is not None, (
|
|
216
|
+
"region_name must be specified for cloud_provider OVH"
|
|
217
|
+
)
|
|
218
218
|
endpoint_url = f"https://s3.{self.data_source.region_name}.cloud.ovh.net"
|
|
219
219
|
else:
|
|
220
220
|
endpoint_url = self.data_source.endpoint_url
|
|
@@ -19,7 +19,7 @@ def resolve_script_executor(
|
|
|
19
19
|
for _, job_class in inspect.getmembers(job_module, inspect.isclass):
|
|
20
20
|
if getattr(job_class, "_unc_job_registered", False):
|
|
21
21
|
found_jobs.append(job_class())
|
|
22
|
-
assert (
|
|
23
|
-
len(found_jobs)
|
|
24
|
-
)
|
|
22
|
+
assert len(found_jobs) == 1, (
|
|
23
|
+
f"expected exactly one job class in {executor.import_path}, found {len(found_jobs)}"
|
|
24
|
+
)
|
|
25
25
|
return found_jobs[0]
|
|
@@ -126,9 +126,7 @@ def main() -> None:
|
|
|
126
126
|
add_process(ProcessInfo(name="cron server", process=cron_process))
|
|
127
127
|
|
|
128
128
|
uwsgi_process = subprocess.Popen([
|
|
129
|
-
"
|
|
130
|
-
"-H",
|
|
131
|
-
"/app/env",
|
|
129
|
+
"uwsgi",
|
|
132
130
|
"--die-on-term",
|
|
133
131
|
])
|
|
134
132
|
add_process(ProcessInfo(name="uwsgi", process=uwsgi_process))
|
uncountable/types/__init__.py
CHANGED
|
@@ -9,6 +9,7 @@ from .api.equipment import associate_equipment_input as associate_equipment_inpu
|
|
|
9
9
|
from .api.recipes import associate_recipe_as_input as associate_recipe_as_input_t
|
|
10
10
|
from .api.recipes import associate_recipe_as_lot as associate_recipe_as_lot_t
|
|
11
11
|
from . import async_batch_t as async_batch_t
|
|
12
|
+
from . import async_jobs_t as async_jobs_t
|
|
12
13
|
from . import auth_retrieval_t as auth_retrieval_t
|
|
13
14
|
from . import base_t as base_t
|
|
14
15
|
from . import calculations_t as calculations_t
|
|
@@ -114,6 +115,7 @@ __all__: list[str] = [
|
|
|
114
115
|
"associate_recipe_as_input_t",
|
|
115
116
|
"associate_recipe_as_lot_t",
|
|
116
117
|
"async_batch_t",
|
|
118
|
+
"async_jobs_t",
|
|
117
119
|
"auth_retrieval_t",
|
|
118
120
|
"base_t",
|
|
119
121
|
"calculations_t",
|
|
@@ -0,0 +1,9 @@
|
|
|
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 .async_jobs_t import AsyncJobType as AsyncJobType
|
|
8
|
+
from .async_jobs_t import AsyncJobStatus as AsyncJobStatus
|
|
9
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
from pkgs.strenum_compat import StrEnum
|
|
11
|
+
from pkgs.serialization import serial_string_enum
|
|
12
|
+
|
|
13
|
+
__all__: list[str] = [
|
|
14
|
+
"ASYNC_JOB_STATUS_FIELD_REF_NAME",
|
|
15
|
+
"ASYNC_JOB_TYPE_FIELD_REF_NAME",
|
|
16
|
+
"AsyncJobStatus",
|
|
17
|
+
"AsyncJobType",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
22
|
+
@serial_string_enum(
|
|
23
|
+
labels={
|
|
24
|
+
"async_batch_load": "Async Batch Load",
|
|
25
|
+
"integration_server_run": "Integration Server Run",
|
|
26
|
+
},
|
|
27
|
+
)
|
|
28
|
+
class AsyncJobType(StrEnum):
|
|
29
|
+
ASYNC_BATCH_LOAD = "async_batch_load"
|
|
30
|
+
INTEGRATION_SERVER_RUN = "integration_server_run"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
+
@serial_string_enum(
|
|
35
|
+
labels={
|
|
36
|
+
"in_progress": "In Progress",
|
|
37
|
+
"completed": "Completed",
|
|
38
|
+
"error": "Error",
|
|
39
|
+
},
|
|
40
|
+
)
|
|
41
|
+
class AsyncJobStatus(StrEnum):
|
|
42
|
+
IN_PROGRESS = "in_progress"
|
|
43
|
+
COMPLETED = "completed"
|
|
44
|
+
ERROR = "error"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
48
|
+
ASYNC_JOB_TYPE_FIELD_REF_NAME = "core_async_job_jobType"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
52
|
+
ASYNC_JOB_STATUS_FIELD_REF_NAME = "core_async_job_status"
|
|
53
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/entity_t.py
CHANGED
|
@@ -335,7 +335,7 @@ class EntityType(StrEnum):
|
|
|
335
335
|
|
|
336
336
|
|
|
337
337
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
338
|
-
LimitedEntityType = typing.Union[typing.Literal[EntityType.LAB_REQUEST], typing.Literal[EntityType.APPROVAL], typing.Literal[EntityType.CUSTOM_ENTITY], 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.OUTPUT]]
|
|
338
|
+
LimitedEntityType = typing.Union[typing.Literal[EntityType.LAB_REQUEST], typing.Literal[EntityType.APPROVAL], typing.Literal[EntityType.CUSTOM_ENTITY], 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.OUTPUT], typing.Literal[EntityType.ASYNC_JOB]]
|
|
339
339
|
|
|
340
340
|
|
|
341
341
|
# DO NOT MODIFY -- This file is generated by type_spec
|
{UncountablePythonSDK-0.0.76.dist-info → UncountablePythonSDK-0.0.78.dist-info}/top_level.txt
RENAMED
|
File without changes
|