UncountablePythonSDK 0.0.74__py3-none-any.whl → 0.0.76__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.74.dist-info → UncountablePythonSDK-0.0.76.dist-info}/METADATA +2 -2
- {UncountablePythonSDK-0.0.74.dist-info → UncountablePythonSDK-0.0.76.dist-info}/RECORD +35 -29
- {UncountablePythonSDK-0.0.74.dist-info → UncountablePythonSDK-0.0.76.dist-info}/WHEEL +1 -1
- docs/requirements.txt +1 -1
- examples/async_batch.py +3 -3
- pkgs/serialization/serial_class.py +3 -0
- pkgs/type_spec/builder.py +7 -8
- pkgs/type_spec/emit_python.py +6 -6
- pkgs/type_spec/emit_typescript.py +7 -237
- pkgs/type_spec/emit_typescript_util.py +235 -0
- uncountable/core/environment.py +15 -2
- uncountable/integration/construct_client.py +3 -4
- uncountable/integration/queue_runner/job_scheduler.py +1 -1
- uncountable/integration/queue_runner/worker.py +17 -22
- uncountable/integration/scan_profiles.py +39 -15
- uncountable/integration/server.py +4 -12
- uncountable/integration/telemetry.py +2 -2
- uncountable/integration/webhook_server/entrypoint.py +4 -10
- uncountable/types/__init__.py +8 -0
- uncountable/types/api/entity/create_entities.py +4 -2
- uncountable/types/api/entity/create_entity.py +4 -2
- uncountable/types/api/entity/grant_entity_permissions.py +48 -0
- uncountable/types/api/recipes/get_column_calculation_values.py +58 -0
- uncountable/types/async_batch_processor.py +43 -0
- uncountable/types/async_batch_t.py +1 -0
- uncountable/types/auth_retrieval.py +12 -0
- uncountable/types/auth_retrieval_t.py +75 -0
- uncountable/types/client_base.py +62 -4
- uncountable/types/entity.py +3 -0
- uncountable/types/entity_t.py +20 -0
- uncountable/types/integration_server.py +9 -0
- uncountable/types/integration_server_t.py +37 -0
- uncountable/types/job_definition.py +1 -5
- uncountable/types/job_definition_t.py +20 -60
- {UncountablePythonSDK-0.0.74.dist-info → UncountablePythonSDK-0.0.76.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.76
|
|
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
|
|
@@ -16,7 +16,7 @@ Classifier: Topic :: Utilities
|
|
|
16
16
|
Classifier: Typing :: Typed
|
|
17
17
|
Requires-Python: >=3.11
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
|
-
Requires-Dist: aiotus ==
|
|
19
|
+
Requires-Dist: aiotus ==1.*
|
|
20
20
|
Requires-Dist: aiohttp ==3.*
|
|
21
21
|
Requires-Dist: requests ==2.*
|
|
22
22
|
Requires-Dist: SQLAlchemy >=1.4.0
|
|
@@ -3,7 +3,7 @@ docs/conf.py,sha256=YF5J-9g_Wg8wXmyHsGaE8xYlDEzqocNl3UWUmP0CwBg,1702
|
|
|
3
3
|
docs/index.md,sha256=eEdirX_Ds6ICTRtIS5iT4irCquHcQyKN7E4M5QP9T8A,257
|
|
4
4
|
docs/justfile,sha256=cvNcpb-ByPOF2aCrFlg3DDZBoYMx5W8xGdr13m9HcnI,215
|
|
5
5
|
docs/quickstart.md,sha256=3GuJ0MB1O5kjlsrgAmdSkDq0rYqATrYy-tzEHDy8H-c,422
|
|
6
|
-
docs/requirements.txt,sha256=
|
|
6
|
+
docs/requirements.txt,sha256=XNw3eJfJPf6Z2DpwtcNgEJpoEKS0g5v3vY6UBFtiEKM,138
|
|
7
7
|
docs/static/logo_blue.png,sha256=SyYpMTVhhBbhF5Wl8lWaVwz-_p1MIR6dW6bVhufQRME,46708
|
|
8
8
|
docs/static/favicons/android-chrome-192x192.png,sha256=XoF-AhD55JlSBDGsEPJKfT_VeXT-awhwKyZnxLhrwvk,1369
|
|
9
9
|
docs/static/favicons/android-chrome-512x512.png,sha256=1S4xwY9YtJQ5ifFsZ-DOzssoyBYs0t9uwdOUmYx0Xso,3888
|
|
@@ -14,7 +14,7 @@ docs/static/favicons/favicon-32x32.png,sha256=U4UU652zGnSeU3P9kUqxPeEnVf6zhtdNdN
|
|
|
14
14
|
docs/static/favicons/manifest.json,sha256=6q_3nZkcg_x0xut4eE-xpdeMY1TydwiZIcbXlLAq9X8,437
|
|
15
15
|
docs/static/favicons/mstile-150x150.png,sha256=eAK4QdEofhdLtfmjuPTpnX3MJqYnvGXsHYUjlcQekyY,1035
|
|
16
16
|
docs/static/favicons/safari-pinned-tab.svg,sha256=S84fRnz0ZxLnQrKtmmFZytiRyu1xLtMR_RVy5jmwU7k,1926
|
|
17
|
-
examples/async_batch.py,sha256=
|
|
17
|
+
examples/async_batch.py,sha256=tEyvgxk2uf681mKlN4TDuPMkb1OHyM9oO8pYW4A7HvM,1142
|
|
18
18
|
examples/create_entity.py,sha256=t6WBZsWRDbWZgFCWXKGgKL5LAB6-38oaiNYGxMAa2No,686
|
|
19
19
|
examples/edit_recipe_inputs.py,sha256=mtk_oSkN-OT2hKkb1XKXrRiUaGYTJstXuOKyTR51Fjo,1663
|
|
20
20
|
examples/invoke_uploader.py,sha256=rEvmVY5TjigN_-4PTQdkjY-bC5DrYMcJgquyZ4Tt5FM,748
|
|
@@ -41,7 +41,7 @@ pkgs/filesystem_utils/filesystem_session.py,sha256=BQ2Go8Mu9-GcnaWh2Pm4x7ugLVsre
|
|
|
41
41
|
pkgs/serialization/__init__.py,sha256=LifasRW0a50A3qRFmo2bf3FQ6TXhZWOTz2-CVTgPjcQ,753
|
|
42
42
|
pkgs/serialization/missing_sentry.py,sha256=aM_9KxbCk9dVvXvcOKgkIQBqFWvLhv8QlIUCiuFEXMo,806
|
|
43
43
|
pkgs/serialization/opaque_key.py,sha256=FIfXEE0DA1U8R_taFbQ1RCoTSgehrPjP06-qvo-GeNQ,177
|
|
44
|
-
pkgs/serialization/serial_class.py,sha256=
|
|
44
|
+
pkgs/serialization/serial_class.py,sha256=xURwC05-ImnHU1pKM8BBYpzbrhTtiZr30UlzaA0T7zY,6110
|
|
45
45
|
pkgs/serialization/serial_union.py,sha256=xpdeqCrRd0sNCaUwBQRzje6V40ndCbJpZrLX2K0d5xo,2741
|
|
46
46
|
pkgs/serialization/yaml.py,sha256=yoJtu7_ixnJV6uTxA_U1PpK5F_ixT08AKVh5ocyYwXM,1466
|
|
47
47
|
pkgs/serialization_util/__init__.py,sha256=MVKqHTUl2YnWZAFG9xCxu1SgmkQ5xPofrAGlYg6h7rI,330
|
|
@@ -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=
|
|
55
|
+
pkgs/type_spec/builder.py,sha256=mG796Y15_xr_i0Ffl0XYI-CsqRlssO0mjKYt7lXTSqU,48790
|
|
56
56
|
pkgs/type_spec/config.py,sha256=ZUmPWCzTwjesAqlqeL1_E_yoIUZE_8g0kI2yXtbU0Zc,4811
|
|
57
57
|
pkgs/type_spec/emit_io_ts.py,sha256=U03sQBpgRqYOaMKrPCRnYb70YboiCgaZfseCXSzW5NY,5707
|
|
58
58
|
pkgs/type_spec/emit_open_api.py,sha256=5a0iAHBbgFD4wfKuyjPvxCYYHNTjKxEHA0aYjMGSqe4,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=JQgOF4afkf-VjTa2-yAHMZpEkEKzi6H1T-5d085wjvM,47371
|
|
61
|
+
pkgs/type_spec/emit_typescript.py,sha256=PL1h2UvTp1PRMkTXH893ZYS3cPUrrupjnLg_9ndZGDQ,8838
|
|
62
|
+
pkgs/type_spec/emit_typescript_util.py,sha256=e2rGSs9OTD-iXwcHfU4V9E35jwMc5qVshhOKMknGrJ8,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
|
|
@@ -81,19 +81,19 @@ uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
81
81
|
uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,341
|
|
82
82
|
uncountable/core/async_batch.py,sha256=Gur0VOS0AH2ugwvk65hwoX-iqwQAAyJaejY_LyAZZPo,1210
|
|
83
83
|
uncountable/core/client.py,sha256=qTM61IJV4DTE2LsTZyv4kePBZAv55vncWt2rtBf-SLQ,10632
|
|
84
|
-
uncountable/core/environment.py,sha256=
|
|
84
|
+
uncountable/core/environment.py,sha256=K2TtE52JbW5UOBkBSc2Ee2l9rDIoRNoFDXDqRha1fJI,1036
|
|
85
85
|
uncountable/core/file_upload.py,sha256=qR7BBBWVxFNrb1_WICreo3dkZygE9lcE1fmZCQrDZU0,3469
|
|
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
|
|
89
|
-
uncountable/integration/construct_client.py,sha256=
|
|
89
|
+
uncountable/integration/construct_client.py,sha256=u_vKLG3uMjk-8mM8SbHMn1-Sh-jMeYEGHrOaU_X2b3c,1949
|
|
90
90
|
uncountable/integration/cron.py,sha256=6eH-kIs3sdYPCyb62_L2M7U_uQTdMTdwY5hreEJb0hw,887
|
|
91
91
|
uncountable/integration/entrypoint.py,sha256=BHOYPQgKvZE6HG8Rv15MkdYl8lRkvfDgv1OdLo0oQ9Q,433
|
|
92
92
|
uncountable/integration/job.py,sha256=af197JUceIKzpIN5C2z8zeZOPhIQ16ipyC6qVt1WXv0,2386
|
|
93
|
-
uncountable/integration/scan_profiles.py,sha256=
|
|
93
|
+
uncountable/integration/scan_profiles.py,sha256=760zbv7O7wXxHUHqUkFBpd1Afe8hqxMPU3ugwZGdhEo,2925
|
|
94
94
|
uncountable/integration/scheduler.py,sha256=sVe7V5zlUbSzSMyC30rAlWR30w0jurhrYYCgK8-lVRo,4546
|
|
95
|
-
uncountable/integration/server.py,sha256=
|
|
96
|
-
uncountable/integration/telemetry.py,sha256=
|
|
95
|
+
uncountable/integration/server.py,sha256=Hwi3fpdhcSK2HynI6Zwi7A3mWTTCaK_ic53M5-4IEp4,4716
|
|
96
|
+
uncountable/integration/telemetry.py,sha256=bX68_a2PyG23n1QtIFxcH30JynUoovMz6HgA_jgUb1A,7132
|
|
97
97
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
98
|
uncountable/integration/db/connect.py,sha256=mE3bdV0huclH2iT_dXCQdRL4LkjIuf_myAR64RTWXEs,498
|
|
99
99
|
uncountable/integration/db/session.py,sha256=96cGQXpe6IugBTdSsjdP0S5yhJ6toSmbVB6qhc3FJzE,693
|
|
@@ -102,10 +102,10 @@ uncountable/integration/executors/executors.py,sha256=CbwatKkHrLhnqYr_nsBjr0KYeO
|
|
|
102
102
|
uncountable/integration/executors/generic_upload_executor.py,sha256=NlW5WcYePPA7_fwp5uW_2afAiQLKK7rCkKF06wQ948E,10375
|
|
103
103
|
uncountable/integration/executors/script_executor.py,sha256=OmSBOtU48G3mqza9c2lCm84pGGyaDk-ZBJCx3RsdJXc,846
|
|
104
104
|
uncountable/integration/queue_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
-
uncountable/integration/queue_runner/job_scheduler.py,sha256=
|
|
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
|
|
107
107
|
uncountable/integration/queue_runner/types.py,sha256=8qTq29BTSa5rmW6CBlBntP0pNIiDcwu1wHa78pjroS0,219
|
|
108
|
-
uncountable/integration/queue_runner/worker.py,sha256=
|
|
108
|
+
uncountable/integration/queue_runner/worker.py,sha256=pYLd6D3-ZSM3zcd7UKwyYUADVYEAUK9Hfi0PprwkNqo,4170
|
|
109
109
|
uncountable/integration/queue_runner/command_server/__init__.py,sha256=gQPVILGpWzCr2i5GJyoqna7AOSFvtn4tav69gB78mTQ,571
|
|
110
110
|
uncountable/integration/queue_runner/command_server/command_client.py,sha256=DJb0TUVFkiiLBEQzHSN94sTRnuEbutNEgdN39XmnOXI,2046
|
|
111
111
|
uncountable/integration/queue_runner/command_server/command_server.py,sha256=yyXryhiEC2eGS0yFElLGsVzSKwOuYvj-zp22jQorkv0,2138
|
|
@@ -121,24 +121,26 @@ uncountable/integration/queue_runner/datastore/interface.py,sha256=j4D-zVvLq-48V
|
|
|
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
123
|
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=eoPWbkUtCn_63A4TFlK_nvEDvfm4u2fiOoglmAkBG3U,3004
|
|
124
|
-
uncountable/integration/webhook_server/entrypoint.py,sha256=
|
|
125
|
-
uncountable/types/__init__.py,sha256=
|
|
124
|
+
uncountable/integration/webhook_server/entrypoint.py,sha256=aaulH6GS7uvBw1jPrZwPDS3mRE9NY-lKxuX7vtoJcGg,5407
|
|
125
|
+
uncountable/types/__init__.py,sha256=mjJX5fo0Oq8_CRx6eo3NbY6ycKaB3rTb8EXH4vXY5ok,8965
|
|
126
126
|
uncountable/types/async_batch.py,sha256=_OhT25_dEVts_z_n1kqfJH3xlZg3btLqR6TNkfFLlXE,609
|
|
127
|
-
uncountable/types/async_batch_processor.py,sha256=
|
|
128
|
-
uncountable/types/async_batch_t.py,sha256=
|
|
127
|
+
uncountable/types/async_batch_processor.py,sha256=DJn9KdgUv_l7ojCVJ_d9wCS3GUNc21b5cOrpunty2KU,13129
|
|
128
|
+
uncountable/types/async_batch_t.py,sha256=niXgIM7FQXb_1RLX8CBXiGaYSa8nqd-jqX68p7gMgJo,2558
|
|
129
|
+
uncountable/types/auth_retrieval.py,sha256=FY8Vr_BWD4O8PsauPNt_7_08YZSHFaUlTT72L5XJ-4o,570
|
|
130
|
+
uncountable/types/auth_retrieval_t.py,sha256=D2ptCIsuCecJa_P8K2qrNk2-zz1WuBpOrsZ65BRP-Dw,2221
|
|
129
131
|
uncountable/types/base.py,sha256=xVSjWvA_fUUnkCg83EjoYEFvAfmskinKFMeYFOxNc9E,359
|
|
130
132
|
uncountable/types/base_t.py,sha256=XXjZXexx0xWFUxMMhW8i9nIL6n8dsZVsHwdgnhZ0zJ4,2714
|
|
131
133
|
uncountable/types/calculations.py,sha256=FFO_D3BbKoGDZnqWvTKpW4KF359i2vrKjpdFCLYzJC0,284
|
|
132
134
|
uncountable/types/calculations_t.py,sha256=157qD0VqijD5kNDF5BRsfGli3WaPGnNjoo2o2CPX-Ik,669
|
|
133
135
|
uncountable/types/chemical_structure.py,sha256=E-LnikTFDoVQ1b2zKaVUIO_PAKm-7aZZYJi8I8SDSic,302
|
|
134
136
|
uncountable/types/chemical_structure_t.py,sha256=zDJ6WkeT3YwWZRZT21znQn2ZYelv3L7yv7kJiGoNZCw,824
|
|
135
|
-
uncountable/types/client_base.py,sha256=
|
|
137
|
+
uncountable/types/client_base.py,sha256=fpVHWPifRToIiaBPKcM_YT8WQFrK-SW58muGnCTX3d0,68780
|
|
136
138
|
uncountable/types/client_config.py,sha256=4h5Liko9uKCo9_0gdbPhoK6Jr2Kv7tioLiQ8iKeq-_4,301
|
|
137
139
|
uncountable/types/client_config_t.py,sha256=6dStfR0IEHiPW8f9_aF3DD_tHmXXw2rEVrgpebzq8Fg,747
|
|
138
140
|
uncountable/types/curves.py,sha256=W6uMpG5SyW1MS82szNpxkFEn1MnxNpBFyFbQb2Ysfng,366
|
|
139
141
|
uncountable/types/curves_t.py,sha256=lKhRM-2cZ_sFaW7pa_I_Ipz_pJhm3_yTFehRXI79pKk,1416
|
|
140
|
-
uncountable/types/entity.py,sha256=
|
|
141
|
-
uncountable/types/entity_t.py,sha256=
|
|
142
|
+
uncountable/types/entity.py,sha256=ECvhswTj9xp4gUEKTZoZYyxHvx1oyvE5FNiGNfSyUgk,528
|
|
143
|
+
uncountable/types/entity_t.py,sha256=8Ju0wEpg-R3QhykoL6nlfogQwL214E_pqE4k1fIWn1I,16208
|
|
142
144
|
uncountable/types/experiment_groups.py,sha256=_0OXcPzSAbkE-rfKt5tPx178YJ4pcEKZvrCxUHgDnvw,309
|
|
143
145
|
uncountable/types/experiment_groups_t.py,sha256=qEs8YW0eJOJ_sCOObT5v9QRx9wsjLYpJqJhCJXa-vNA,721
|
|
144
146
|
uncountable/types/field_values.py,sha256=uuIWX-xmfvcinYPdfkWJeb56zzQY01mc9rmotMPMh24,503
|
|
@@ -155,8 +157,10 @@ uncountable/types/input_attributes.py,sha256=IrIKQnHqHdS1Utdfzr9GnOe17a8riaqYcO1
|
|
|
155
157
|
uncountable/types/input_attributes_t.py,sha256=mD9JIagE8TQ0KVwGkl-hinKz_gcunV3y30w_dW5sfeU,884
|
|
156
158
|
uncountable/types/inputs.py,sha256=jFZHyo0ZOGJ3bb4TOPXovhE3Fo1-kf7B7T3usk4Sqg8,467
|
|
157
159
|
uncountable/types/inputs_t.py,sha256=CpuuKRduZGET_wvkGUpUFN6rbZCHsdOIp1veEM-hspI,2143
|
|
158
|
-
uncountable/types/
|
|
159
|
-
uncountable/types/
|
|
160
|
+
uncountable/types/integration_server.py,sha256=61NuGs1pbgovU5Vuje7oN9HpLwOGCCw9Q_CcUvt_0qI,385
|
|
161
|
+
uncountable/types/integration_server_t.py,sha256=wa45RWChRsj2oAvWcOfZXA2xZxyEEkzltuJqZwKTna8,1048
|
|
162
|
+
uncountable/types/job_definition.py,sha256=DEma_s-0oBo2tPI5u9IU_UDw-9MWbn4mTZsd_RHiYGE,1667
|
|
163
|
+
uncountable/types/job_definition_t.py,sha256=N9080NAzwfYQKTusY2vs3z1UrM5s_QGtzWyoFxr2_iM,7931
|
|
160
164
|
uncountable/types/outputs.py,sha256=sUZx_X-TKCZtLm1YCEH8OISX9DdPlv9ZuUfM3-askCc,281
|
|
161
165
|
uncountable/types/outputs_t.py,sha256=AdJZvIzqikHV9CnlC24WEo0OUe-5vrD4cjMqc2txEs0,765
|
|
162
166
|
uncountable/types/overrides.py,sha256=Mv-smwK1B3pvbt48fNOiqkeQn9wMgYlBFJKUBOJqceE,431
|
|
@@ -204,9 +208,10 @@ uncountable/types/api/batch/execute_batch_load_async.py,sha256=j5a5dk0_lTJ-YslrB
|
|
|
204
208
|
uncountable/types/api/chemical/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
205
209
|
uncountable/types/api/chemical/convert_chemical_formats.py,sha256=xLpma1W1O9MzgxM4CCl5GPnpj3dpqRHhKcXr3b_ToAo,1589
|
|
206
210
|
uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
207
|
-
uncountable/types/api/entity/create_entities.py,sha256=
|
|
208
|
-
uncountable/types/api/entity/create_entity.py,sha256=
|
|
211
|
+
uncountable/types/api/entity/create_entities.py,sha256=XJXLcKgpiYpNLVNtkDAAe6Q09rNJSW_h2wu3i7OmFxw,1630
|
|
212
|
+
uncountable/types/api/entity/create_entity.py,sha256=N69a-4dymv2tg_Dhj6OBdnWPodFrJtn05JvLRQwoHp8,1742
|
|
209
213
|
uncountable/types/api/entity/get_entities_data.py,sha256=gTEZ7Z7T-DWP8BZPNDF4c__EHtf9kAb1sGtHmiGOgnM,1454
|
|
214
|
+
uncountable/types/api/entity/grant_entity_permissions.py,sha256=YAXyJ3I_nqDQYFYGEO3MmD20vYyhoFZzID9tpVpgryM,1442
|
|
210
215
|
uncountable/types/api/entity/list_entities.py,sha256=ykbdq4DD31uiRz4i8LH-8LLeA2Lpp_5fWfb5fdyx248,2000
|
|
211
216
|
uncountable/types/api/entity/lock_entity.py,sha256=mMZx2tWOtuYg0sIftdPsFWgZO5LCav2ubqTw97dCtDU,1197
|
|
212
217
|
uncountable/types/api/entity/resolve_entity_ids.py,sha256=GnQjeoTdzL0PIubrLay-PpaRsYFFWVGrTxhzSmP4hhw,1387
|
|
@@ -257,6 +262,7 @@ uncountable/types/api/recipes/create_recipe.py,sha256=Gh6Z_7wBfYBMGUgUSixw57ucRj
|
|
|
257
262
|
uncountable/types/api/recipes/create_recipes.py,sha256=kmTDi0nF5OK5wYIErg_4CY3YsF3pDbrj4LLFqgDNRoU,1940
|
|
258
263
|
uncountable/types/api/recipes/disassociate_recipe_as_input.py,sha256=YcLCle-yQ8A7hPmFg8wPfW4dyJwpMQXNKzJxCEr8xlw,1127
|
|
259
264
|
uncountable/types/api/recipes/edit_recipe_inputs.py,sha256=7TBjzA8-yXYIko_jx0AvKMs8SnIkiQukhQFWyf2fkxk,7815
|
|
265
|
+
uncountable/types/api/recipes/get_column_calculation_values.py,sha256=u_KBiGpXnVLwRruEG-FmopiR8UDkuX6i47B4OY-IYWU,1702
|
|
260
266
|
uncountable/types/api/recipes/get_curve.py,sha256=SPD9kx4m95KPXAD0MawX52IFl8W7gVKj-WmA4Wx2YtU,1126
|
|
261
267
|
uncountable/types/api/recipes/get_recipe_calculations.py,sha256=_sBE5M2xzwagh1beTW32D_HTxqu9OrZTPZBGMba6Myk,1730
|
|
262
268
|
uncountable/types/api/recipes/get_recipe_links.py,sha256=IIA_LV-iPayZRAsVmDCpSA8jgFnzcgGpk0lAnygyi-s,1180
|
|
@@ -277,7 +283,7 @@ uncountable/types/api/triggers/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr
|
|
|
277
283
|
uncountable/types/api/triggers/run_trigger.py,sha256=-oZgPyn43xEKSCs81DVNzwaYMCdRJxbM9GY6fsqKwf4,1090
|
|
278
284
|
uncountable/types/api/uploader/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
279
285
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=6mwVG136oLp9JcbB2I-kZnrcm3aeZzYZB-SFjEImY2o,1314
|
|
280
|
-
UncountablePythonSDK-0.0.
|
|
281
|
-
UncountablePythonSDK-0.0.
|
|
282
|
-
UncountablePythonSDK-0.0.
|
|
283
|
-
UncountablePythonSDK-0.0.
|
|
286
|
+
UncountablePythonSDK-0.0.76.dist-info/METADATA,sha256=pbI1_WLh03O7-B_Ju3p0vJNqOVftjnYaZ1zWJ0O2vFI,2051
|
|
287
|
+
UncountablePythonSDK-0.0.76.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
288
|
+
UncountablePythonSDK-0.0.76.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
289
|
+
UncountablePythonSDK-0.0.76.dist-info/RECORD,,
|
docs/requirements.txt
CHANGED
examples/async_batch.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
from decimal import Decimal
|
|
2
3
|
|
|
3
4
|
from uncountable.core import AsyncBatchProcessor, AuthDetailsApiKey, Client
|
|
@@ -11,10 +12,9 @@ from uncountable.types.recipe_identifiers import (
|
|
|
11
12
|
)
|
|
12
13
|
|
|
13
14
|
client = Client(
|
|
14
|
-
base_url=
|
|
15
|
+
base_url=os.environ["UNC_BASE_URL"],
|
|
15
16
|
auth_details=AuthDetailsApiKey(
|
|
16
|
-
api_id="
|
|
17
|
-
api_secret_key="X",
|
|
17
|
+
api_id=os.environ["UNC_API_ID"], api_secret_key=os.environ["UNC_API_SECRET_KEY"]
|
|
18
18
|
),
|
|
19
19
|
)
|
|
20
20
|
batch_loader = AsyncBatchProcessor(client=client)
|
|
@@ -103,6 +103,9 @@ def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | N
|
|
|
103
103
|
if hasattr(type_class, "__unc_serial_data")
|
|
104
104
|
else None
|
|
105
105
|
)
|
|
106
|
+
if base_class_data is None:
|
|
107
|
+
return None
|
|
108
|
+
|
|
106
109
|
if type_class.__bases__ is not None:
|
|
107
110
|
for base in type_class.__bases__:
|
|
108
111
|
curr_base_class_data = _get_merged_serial_class_data(base)
|
pkgs/type_spec/builder.py
CHANGED
|
@@ -535,13 +535,8 @@ class SpecTypeDefnObject(SpecTypeDefn):
|
|
|
535
535
|
base_type: list[SpecType] = [self.base] if self.base is not None else []
|
|
536
536
|
return base_type + prop_types
|
|
537
537
|
|
|
538
|
-
def
|
|
539
|
-
|
|
540
|
-
assert (
|
|
541
|
-
len(self.parameters) == 1
|
|
542
|
-
), "Only single generic parameters current supported"
|
|
543
|
-
return self.parameters[0]
|
|
544
|
-
return None
|
|
538
|
+
def get_generics(self) -> list[str]:
|
|
539
|
+
return self.parameters
|
|
545
540
|
|
|
546
541
|
|
|
547
542
|
class SpecTypeDefnAlias(SpecTypeDefn):
|
|
@@ -1134,7 +1129,11 @@ class SpecNamespace:
|
|
|
1134
1129
|
spec_type = SpecTypeDefnStringEnum(self, name)
|
|
1135
1130
|
else:
|
|
1136
1131
|
parameters = (
|
|
1137
|
-
[
|
|
1132
|
+
[
|
|
1133
|
+
parameter.name
|
|
1134
|
+
for name_parameters in parsed_name.parameters
|
|
1135
|
+
for parameter in name_parameters
|
|
1136
|
+
]
|
|
1138
1137
|
if parsed_name.parameters is not None
|
|
1139
1138
|
else None
|
|
1140
1139
|
)
|
pkgs/type_spec/emit_python.py
CHANGED
|
@@ -814,11 +814,11 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
814
814
|
|
|
815
815
|
class_out = io.StringIO()
|
|
816
816
|
base_class = ""
|
|
817
|
-
|
|
817
|
+
generics = stype.get_generics()
|
|
818
818
|
if not stype.base.is_base:
|
|
819
819
|
base_class = f"({refer_to(ctx, stype.base)})"
|
|
820
|
-
elif
|
|
821
|
-
base_class = f"(typing.Generic[{
|
|
820
|
+
elif len(generics) > 0:
|
|
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(
|
|
@@ -829,7 +829,7 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
829
829
|
to_string_values = emitted_properties_metadata.to_string_values
|
|
830
830
|
parse_require = emitted_properties_metadata.parse_require
|
|
831
831
|
|
|
832
|
-
|
|
832
|
+
_emit_generics(ctx, generics)
|
|
833
833
|
|
|
834
834
|
# Emit serial_class decorator
|
|
835
835
|
ctx.out.write("@serial_class(\n")
|
|
@@ -864,8 +864,8 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
864
864
|
ctx.out.write(class_out.getvalue())
|
|
865
865
|
|
|
866
866
|
|
|
867
|
-
def
|
|
868
|
-
|
|
867
|
+
def _emit_generics(ctx: Context, generics: list[str]) -> None:
|
|
868
|
+
for generic in generics:
|
|
869
869
|
ctx.out.write(f'{generic} = typing.TypeVar("{generic}")\n')
|
|
870
870
|
ctx.out.write(f"{LINE_BREAK}{LINE_BREAK}")
|
|
871
871
|
|
|
@@ -1,106 +1,26 @@
|
|
|
1
1
|
import io
|
|
2
2
|
import os
|
|
3
|
-
from typing import Any
|
|
4
3
|
|
|
5
4
|
from . import builder, util
|
|
6
|
-
from .builder import SpecTypeDefnObject
|
|
7
5
|
from .config import TypeScriptConfig
|
|
8
6
|
from .emit_io_ts import emit_type_io_ts
|
|
9
7
|
from .emit_typescript_util import (
|
|
10
|
-
INDENT,
|
|
11
8
|
MODIFY_NOTICE,
|
|
12
9
|
EmitTypescriptContext,
|
|
10
|
+
emit_namespace_imports_ts,
|
|
11
|
+
emit_type_ts,
|
|
12
|
+
emit_value_ts,
|
|
13
|
+
resolve_namespace_name,
|
|
13
14
|
resolve_namespace_ref,
|
|
14
|
-
ts_name,
|
|
15
15
|
ts_type_name,
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def ts_enum_name(name: str, name_case: builder.NameCase) -> str:
|
|
20
|
-
if name_case == builder.NameCase.js_upper:
|
|
21
|
-
return name.upper()
|
|
22
|
-
return ts_name(name, name_case)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def _resolve_namespace_name(namespace: builder.SpecNamespace) -> str:
|
|
26
|
-
return namespace.name
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def _emit_value(ctx: EmitTypescriptContext, stype: builder.SpecType, value: Any) -> str:
|
|
30
|
-
"""Mimics emit_python even if not all types are used in TypeScript yet"""
|
|
31
|
-
literal = builder.unwrap_literal_type(stype)
|
|
32
|
-
if literal is not None:
|
|
33
|
-
return _emit_value(ctx, literal.value_type, literal.value)
|
|
34
|
-
|
|
35
|
-
if stype.is_base_type(builder.BaseTypeName.s_string):
|
|
36
|
-
assert isinstance(value, str)
|
|
37
|
-
return util.encode_common_string(value)
|
|
38
|
-
elif stype.is_base_type(builder.BaseTypeName.s_integer):
|
|
39
|
-
assert isinstance(value, int)
|
|
40
|
-
return str(value)
|
|
41
|
-
elif stype.is_base_type(builder.BaseTypeName.s_boolean):
|
|
42
|
-
assert isinstance(value, bool)
|
|
43
|
-
return "true" if value else "false"
|
|
44
|
-
elif stype.is_base_type(builder.BaseTypeName.s_lossy_decimal):
|
|
45
|
-
return str(value)
|
|
46
|
-
elif stype.is_base_type(builder.BaseTypeName.s_decimal):
|
|
47
|
-
return f"'{value}'"
|
|
48
|
-
elif isinstance(stype, builder.SpecTypeInstance):
|
|
49
|
-
if stype.defn_type.is_base_type(builder.BaseTypeName.s_list):
|
|
50
|
-
sub_type = stype.parameters[0]
|
|
51
|
-
return "[" + ", ".join([_emit_value(ctx, sub_type, x) for x in value]) + "]"
|
|
52
|
-
|
|
53
|
-
if stype.defn_type.is_base_type(builder.BaseTypeName.s_dict):
|
|
54
|
-
key_type = stype.parameters[0]
|
|
55
|
-
value_type = stype.parameters[1]
|
|
56
|
-
return (
|
|
57
|
-
"{\n\t"
|
|
58
|
-
+ ",\n\t".join(
|
|
59
|
-
"["
|
|
60
|
-
+ _emit_value(ctx, key_type, dkey)
|
|
61
|
-
+ "]: "
|
|
62
|
-
+ _emit_value(ctx, value_type, dvalue)
|
|
63
|
-
for dkey, dvalue in value.items()
|
|
64
|
-
)
|
|
65
|
-
+ "\n}"
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
if stype.defn_type.is_base_type(builder.BaseTypeName.s_optional):
|
|
69
|
-
sub_type = stype.parameters[0]
|
|
70
|
-
if value is None:
|
|
71
|
-
return "null"
|
|
72
|
-
return _emit_value(ctx, sub_type, value)
|
|
73
|
-
|
|
74
|
-
elif isinstance(stype, builder.SpecTypeDefnStringEnum):
|
|
75
|
-
return f"{refer_to(ctx, stype)}.{ts_enum_name(value, stype.name_case)}"
|
|
76
|
-
|
|
77
|
-
raise Exception("invalid constant type", value, stype)
|
|
78
|
-
|
|
79
|
-
|
|
80
19
|
def emit_typescript(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
81
20
|
_emit_types(builder, config)
|
|
82
21
|
_emit_id_source(builder, config)
|
|
83
22
|
|
|
84
23
|
|
|
85
|
-
def emit_namespace_imports_ts(
|
|
86
|
-
namespaces: set[builder.SpecNamespace],
|
|
87
|
-
out: io.StringIO,
|
|
88
|
-
current_namespace: builder.SpecNamespace,
|
|
89
|
-
) -> None:
|
|
90
|
-
for ns in sorted(
|
|
91
|
-
namespaces,
|
|
92
|
-
key=lambda name: _resolve_namespace_name(name),
|
|
93
|
-
):
|
|
94
|
-
import_as = resolve_namespace_ref(ns)
|
|
95
|
-
import_path = (
|
|
96
|
-
"./"
|
|
97
|
-
if len(current_namespace.path) == 1
|
|
98
|
-
else "../" * (len(current_namespace.path) - 1)
|
|
99
|
-
)
|
|
100
|
-
import_from = f"{import_path}{_resolve_namespace_name(ns)}"
|
|
101
|
-
out.write(f'import * as {import_as} from "{import_from}"\n') # noqa: E501
|
|
102
|
-
|
|
103
|
-
|
|
104
24
|
def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
105
25
|
index_out = io.StringIO()
|
|
106
26
|
index_out.write(MODIFY_NOTICE)
|
|
@@ -109,7 +29,7 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
|
109
29
|
|
|
110
30
|
for namespace in sorted(
|
|
111
31
|
builder.namespaces.values(),
|
|
112
|
-
key=lambda ns:
|
|
32
|
+
key=lambda ns: resolve_namespace_name(ns),
|
|
113
33
|
):
|
|
114
34
|
ctx = EmitTypescriptContext(out=io.StringIO(), namespace=namespace)
|
|
115
35
|
|
|
@@ -160,7 +80,7 @@ def _emit_types(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
|
160
80
|
|
|
161
81
|
if len(namespace.path) == 1:
|
|
162
82
|
index_out.write(
|
|
163
|
-
f"import * as {resolve_namespace_ref(namespace)} from './{
|
|
83
|
+
f"import * as {resolve_namespace_ref(namespace)} from './{resolve_namespace_name(namespace)}'\n"
|
|
164
84
|
) # noqa: E501
|
|
165
85
|
index_out_end.write(f"export {{{resolve_namespace_ref(namespace)}}}\n")
|
|
166
86
|
|
|
@@ -297,164 +217,14 @@ export const apiCall = {wrap_call}(
|
|
|
297
217
|
index.write(f"export {{ {api_name} }}\n")
|
|
298
218
|
|
|
299
219
|
|
|
300
|
-
def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
|
|
301
|
-
if not isinstance(stype, builder.SpecTypeDefn):
|
|
302
|
-
return
|
|
303
|
-
|
|
304
|
-
if stype.is_base or stype.is_predefined:
|
|
305
|
-
return
|
|
306
|
-
|
|
307
|
-
ctx.out.write("\n")
|
|
308
|
-
ctx.out.write(MODIFY_NOTICE)
|
|
309
|
-
|
|
310
|
-
if isinstance(stype, builder.SpecTypeDefnExternal):
|
|
311
|
-
assert not stype.is_exported, "expecting private names"
|
|
312
|
-
ctx.out.write(stype.external_map["ts"])
|
|
313
|
-
ctx.out.write("\n")
|
|
314
|
-
return
|
|
315
|
-
|
|
316
|
-
assert stype.is_exported, "expecting exported names"
|
|
317
|
-
if isinstance(stype, builder.SpecTypeDefnAlias):
|
|
318
|
-
ctx.out.write(f"export type {stype.name} = {refer_to(ctx, stype.alias)}\n")
|
|
319
|
-
return
|
|
320
|
-
|
|
321
|
-
if isinstance(stype, builder.SpecTypeDefnUnion):
|
|
322
|
-
ctx.out.write(
|
|
323
|
-
f"export type {stype.name} = {refer_to(ctx, stype.get_backing_type())}\n"
|
|
324
|
-
)
|
|
325
|
-
return
|
|
326
|
-
|
|
327
|
-
if isinstance(stype, builder.SpecTypeDefnStringEnum):
|
|
328
|
-
ctx.out.write(f"export enum {stype.name} {{\n")
|
|
329
|
-
assert stype.values
|
|
330
|
-
for name, entry in stype.values.items():
|
|
331
|
-
ctx.out.write(
|
|
332
|
-
f'{INDENT}{ts_enum_name(name, stype.name_case)} = "{entry.value}",\n'
|
|
333
|
-
)
|
|
334
|
-
ctx.out.write("}\n")
|
|
335
|
-
return
|
|
336
|
-
|
|
337
|
-
assert isinstance(stype, builder.SpecTypeDefnObject)
|
|
338
|
-
assert stype.base is not None
|
|
339
|
-
|
|
340
|
-
base_type = ""
|
|
341
|
-
if not stype.base.is_base:
|
|
342
|
-
base_type = f"{refer_to(ctx, stype.base)} & "
|
|
343
|
-
|
|
344
|
-
if stype.properties is None and base_type == "":
|
|
345
|
-
ctx.out.write(f"export type {stype.name} = TEmpty\n")
|
|
346
|
-
elif stype.properties is None:
|
|
347
|
-
ctx.out.write(f"export type {stype.name} = {base_type}{{}}\n")
|
|
348
|
-
else:
|
|
349
|
-
if isinstance(stype, SpecTypeDefnObject) and len(stype.parameters) > 0:
|
|
350
|
-
full_type_name = f'{stype.name}<{", ".join(stype.parameters)}>'
|
|
351
|
-
else:
|
|
352
|
-
full_type_name = stype.name
|
|
353
|
-
ctx.out.write(f"export type {full_type_name} = {base_type}{{")
|
|
354
|
-
ctx.out.write("\n")
|
|
355
|
-
for prop in stype.properties.values():
|
|
356
|
-
ref_type = refer_to(ctx, prop.spec_type)
|
|
357
|
-
prop_name = ts_name(prop.name, prop.name_case)
|
|
358
|
-
if prop.has_default and not prop.parse_require:
|
|
359
|
-
# For now, we'll assume the generated types with defaults are meant as
|
|
360
|
-
# arguments, thus treat like extant==missing
|
|
361
|
-
# IMPROVE: if we can decide they are meant as output instead, then
|
|
362
|
-
# they should be marked as required
|
|
363
|
-
ctx.out.write(f"{INDENT}{prop_name}?: {ref_type}")
|
|
364
|
-
elif prop.extant == builder.PropertyExtant.missing:
|
|
365
|
-
# Unlike optional below, missing does not imply null is possible. They
|
|
366
|
-
# treated distinctly.
|
|
367
|
-
ctx.out.write(f"{INDENT}{prop_name}?: {ref_type}")
|
|
368
|
-
elif prop.extant == builder.PropertyExtant.optional:
|
|
369
|
-
# Need to add in |null since Python side can produce null's right now
|
|
370
|
-
# IMPROVE: It would be better if the serializer could instead omit the None's
|
|
371
|
-
# Dropping the null should be forward compatible
|
|
372
|
-
ctx.out.write(f"{INDENT}{prop_name}?: {ref_type} | null")
|
|
373
|
-
else:
|
|
374
|
-
ctx.out.write(f"{INDENT}{prop_name}: {ref_type}")
|
|
375
|
-
ctx.out.write("\n")
|
|
376
|
-
ctx.out.write("}\n")
|
|
377
|
-
|
|
378
|
-
|
|
379
220
|
def _emit_constant(ctx: EmitTypescriptContext, sconst: builder.SpecConstant) -> None:
|
|
380
221
|
ctx.out.write("\n\n")
|
|
381
222
|
ctx.out.write(MODIFY_NOTICE)
|
|
382
|
-
value =
|
|
223
|
+
value = emit_value_ts(ctx, sconst.value_type, sconst.value)
|
|
383
224
|
const_name = sconst.name.upper()
|
|
384
225
|
ctx.out.write(f"export const {const_name} = {value}\n")
|
|
385
226
|
|
|
386
227
|
|
|
387
|
-
base_name_map = {
|
|
388
|
-
builder.BaseTypeName.s_boolean: "boolean",
|
|
389
|
-
builder.BaseTypeName.s_date: "string", # IMPROVE: Aliased DateStr
|
|
390
|
-
builder.BaseTypeName.s_date_time: "string", # IMPROVE: Aliased DateTimeStr
|
|
391
|
-
# Decimal's are marked as to_string_values thus are strings in the front-end
|
|
392
|
-
builder.BaseTypeName.s_decimal: "string",
|
|
393
|
-
builder.BaseTypeName.s_dict: "PartialRecord",
|
|
394
|
-
builder.BaseTypeName.s_integer: "number",
|
|
395
|
-
builder.BaseTypeName.s_lossy_decimal: "number",
|
|
396
|
-
builder.BaseTypeName.s_opaque_key: "string",
|
|
397
|
-
builder.BaseTypeName.s_none: "null",
|
|
398
|
-
builder.BaseTypeName.s_string: "string",
|
|
399
|
-
# UNC: global types
|
|
400
|
-
builder.BaseTypeName.s_json_value: "JsonValue",
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
def refer_to(ctx: EmitTypescriptContext, stype: builder.SpecType) -> str:
|
|
405
|
-
return refer_to_impl(ctx, stype)[0]
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
def refer_to_impl(
|
|
409
|
-
ctx: EmitTypescriptContext, stype: builder.SpecType
|
|
410
|
-
) -> tuple[str, bool]:
|
|
411
|
-
"""
|
|
412
|
-
@return (string-specific, multiple-types)
|
|
413
|
-
"""
|
|
414
|
-
if isinstance(stype, builder.SpecTypeInstance):
|
|
415
|
-
if stype.defn_type.name == builder.BaseTypeName.s_list:
|
|
416
|
-
spec, multi = refer_to_impl(ctx, stype.parameters[0])
|
|
417
|
-
return f"({spec})[]" if multi else f"{spec}[]", False
|
|
418
|
-
if stype.defn_type.name == builder.BaseTypeName.s_readonly_array:
|
|
419
|
-
spec, multi = refer_to_impl(ctx, stype.parameters[0])
|
|
420
|
-
return f"readonly ({spec})[]" if multi else f"readonly {spec}[]", False
|
|
421
|
-
if stype.defn_type.name == builder.BaseTypeName.s_union:
|
|
422
|
-
return (
|
|
423
|
-
f'({" | ".join([refer_to(ctx, p) for p in stype.parameters])})',
|
|
424
|
-
False,
|
|
425
|
-
)
|
|
426
|
-
if stype.defn_type.name == builder.BaseTypeName.s_literal:
|
|
427
|
-
parts = []
|
|
428
|
-
for parameter in stype.parameters:
|
|
429
|
-
assert isinstance(parameter, builder.SpecTypeLiteralWrapper)
|
|
430
|
-
parts.append(refer_to(ctx, parameter))
|
|
431
|
-
return f'({" | ".join(parts)})', False
|
|
432
|
-
if stype.defn_type.name == builder.BaseTypeName.s_optional:
|
|
433
|
-
return f"{refer_to(ctx, stype.parameters[0])} | null", True
|
|
434
|
-
if stype.defn_type.name == builder.BaseTypeName.s_tuple:
|
|
435
|
-
return f"[{", ".join([refer_to(ctx, p) for p in stype.parameters])}]", False
|
|
436
|
-
params = ", ".join([refer_to(ctx, p) for p in stype.parameters])
|
|
437
|
-
return f"{refer_to(ctx, stype.defn_type)}<{params}>", False
|
|
438
|
-
|
|
439
|
-
if isinstance(stype, builder.SpecTypeLiteralWrapper):
|
|
440
|
-
return _emit_value(ctx, stype.value_type, stype.value), False
|
|
441
|
-
|
|
442
|
-
if isinstance(stype, builder.SpecTypeGenericParameter):
|
|
443
|
-
return stype.name, False
|
|
444
|
-
|
|
445
|
-
assert isinstance(stype, builder.SpecTypeDefn)
|
|
446
|
-
if stype.is_base: # assume correct namespace
|
|
447
|
-
if stype.name == builder.BaseTypeName.s_list:
|
|
448
|
-
return "any[]", False # TODO: generic type
|
|
449
|
-
return base_name_map[builder.BaseTypeName(stype.name)], False
|
|
450
|
-
|
|
451
|
-
if stype.namespace == ctx.namespace:
|
|
452
|
-
return stype.name, False
|
|
453
|
-
|
|
454
|
-
ctx.namespaces.add(stype.namespace)
|
|
455
|
-
return f"{resolve_namespace_ref(stype.namespace)}.{stype.name}", False
|
|
456
|
-
|
|
457
|
-
|
|
458
228
|
def _emit_id_source(builder: builder.SpecBuilder, config: TypeScriptConfig) -> None:
|
|
459
229
|
id_source_output = config.id_source_output
|
|
460
230
|
if id_source_output is None:
|