UncountablePythonSDK 0.0.54__py3-none-any.whl → 0.0.56__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.54.dist-info → UncountablePythonSDK-0.0.56.dist-info}/METADATA +1 -1
- {UncountablePythonSDK-0.0.54.dist-info → UncountablePythonSDK-0.0.56.dist-info}/RECORD +42 -41
- {UncountablePythonSDK-0.0.54.dist-info → UncountablePythonSDK-0.0.56.dist-info}/WHEEL +1 -1
- examples/create_entity.py +3 -1
- examples/edit_recipe_inputs.py +4 -2
- examples/invoke_uploader.py +4 -1
- pkgs/argument_parser/argument_parser.py +4 -2
- pkgs/filesystem_utils/_gdrive_session.py +5 -2
- pkgs/filesystem_utils/_s3_session.py +2 -1
- pkgs/filesystem_utils/_sftp_session.py +5 -4
- pkgs/serialization/serial_class.py +6 -2
- pkgs/serialization/yaml.py +4 -1
- pkgs/type_spec/actions_registry/emit_typescript.py +3 -1
- pkgs/type_spec/builder.py +16 -6
- pkgs/type_spec/config.py +3 -1
- pkgs/type_spec/emit_io_ts.py +5 -5
- pkgs/type_spec/emit_open_api.py +10 -6
- pkgs/type_spec/emit_open_api_util.py +3 -4
- pkgs/type_spec/emit_python.py +9 -5
- pkgs/type_spec/emit_typescript.py +17 -8
- pkgs/type_spec/type_info/emit_type_info.py +5 -3
- pkgs/type_spec/value_spec/convert_type.py +3 -1
- pkgs/type_spec/value_spec/emit_python.py +12 -4
- uncountable/core/client.py +3 -1
- uncountable/core/file_upload.py +3 -1
- uncountable/integration/construct_client.py +2 -1
- uncountable/integration/executors/generic_upload_executor.py +11 -9
- uncountable/integration/secret_retrieval/retrieve_secret.py +1 -3
- uncountable/integration/telemetry.py +12 -4
- uncountable/types/__init__.py +2 -0
- uncountable/types/api/entity/create_entities.py +1 -1
- uncountable/types/api/entity/create_entity.py +1 -1
- uncountable/types/api/recipes/clear_recipe_outputs.py +35 -0
- uncountable/types/api/uploader/invoke_uploader.py +2 -2
- uncountable/types/async_batch.py +1 -0
- uncountable/types/async_batch_processor.py +75 -4
- uncountable/types/async_batch_t.py +9 -0
- uncountable/types/client_base.py +25 -6
- uncountable/types/entity_t.py +2 -0
- uncountable/types/generic_upload.py +6 -0
- uncountable/types/generic_upload_t.py +67 -1
- {UncountablePythonSDK-0.0.54.dist-info → UncountablePythonSDK-0.0.56.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.56
|
|
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
|
|
@@ -15,29 +15,29 @@ docs/static/favicons/manifest.json,sha256=6q_3nZkcg_x0xut4eE-xpdeMY1TydwiZIcbXlL
|
|
|
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
17
|
examples/async_batch.py,sha256=CffQ8O9drJ-Mdd6S5DnMIOBsHv5aVkTZrD3l3xBnB4s,1094
|
|
18
|
-
examples/create_entity.py,sha256=
|
|
19
|
-
examples/edit_recipe_inputs.py,sha256=
|
|
20
|
-
examples/invoke_uploader.py,sha256=
|
|
18
|
+
examples/create_entity.py,sha256=t6WBZsWRDbWZgFCWXKGgKL5LAB6-38oaiNYGxMAa2No,686
|
|
19
|
+
examples/edit_recipe_inputs.py,sha256=mtk_oSkN-OT2hKkb1XKXrRiUaGYTJstXuOKyTR51Fjo,1663
|
|
20
|
+
examples/invoke_uploader.py,sha256=rEvmVY5TjigN_-4PTQdkjY-bC5DrYMcJgquyZ4Tt5FM,748
|
|
21
21
|
examples/upload_files.py,sha256=tUfKFqiqwnw08OL5Y8_e4j5pSRhp94cFex8XTuVa_ig,487
|
|
22
22
|
pkgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
pkgs/argument_parser/__init__.py,sha256=CsQ6QoPKSLLRVl-z6URAmPkiUL9ZPZoV4rJHgy_-RjA,385
|
|
24
24
|
pkgs/argument_parser/_is_enum.py,sha256=Gw6jJa8nBwYGqXwwCZbSnWL8Rvr5alkg5lSVAqXtOZM,257
|
|
25
25
|
pkgs/argument_parser/_is_namedtuple.py,sha256=Rjc1bKanIPPogl3qG5JPBxglG1TqWYOo1nxxhBASQWY,265
|
|
26
|
-
pkgs/argument_parser/argument_parser.py,sha256=
|
|
26
|
+
pkgs/argument_parser/argument_parser.py,sha256=uI_fSs7XmiQf9kt4ztWqqF9v8w4dZmQRy3tssPYVRDE,17330
|
|
27
27
|
pkgs/argument_parser/case_convert.py,sha256=NuJLJUJRbyVb6_Slen4uqaStEHbcOS1d-hBBfDrrw-c,605
|
|
28
28
|
pkgs/filesystem_utils/__init__.py,sha256=NSsQrUCoGISBCqCCyq6_583sYHTVEQeDjDO8hvZn3ag,1261
|
|
29
|
-
pkgs/filesystem_utils/_gdrive_session.py,sha256=
|
|
29
|
+
pkgs/filesystem_utils/_gdrive_session.py,sha256=GJuZYJq1W4QQ_7OLvZIMK99FgRq8FxJHg6cMUx9prtA,11077
|
|
30
30
|
pkgs/filesystem_utils/_local_session.py,sha256=xFEYhAvNqrOYqwt4jrEYOuYkjJn0zclZhTelW_Q1-rw,2325
|
|
31
|
-
pkgs/filesystem_utils/_s3_session.py,sha256=
|
|
32
|
-
pkgs/filesystem_utils/_sftp_session.py,sha256=
|
|
31
|
+
pkgs/filesystem_utils/_s3_session.py,sha256=FSdCZBmargKgOWDfyvlsgVNJxwYHBrmHscD9pjN6Bgk,3962
|
|
32
|
+
pkgs/filesystem_utils/_sftp_session.py,sha256=6zoF7YsEUp0GpyFb-BeIhUAWvbTK7IUjvPNJ1B0vEyI,4743
|
|
33
33
|
pkgs/filesystem_utils/file_type_utils.py,sha256=Xd-mg35mAENUgNJVz5uK8nEfrUp-NQld_gnXFEq3K-8,1487
|
|
34
34
|
pkgs/filesystem_utils/filesystem_session.py,sha256=BQ2Go8Mu9-GcnaWh2Pm4x7ugLVsres6XrOQ8RoiEpcE,1045
|
|
35
35
|
pkgs/serialization/__init__.py,sha256=LifasRW0a50A3qRFmo2bf3FQ6TXhZWOTz2-CVTgPjcQ,753
|
|
36
36
|
pkgs/serialization/missing_sentry.py,sha256=aM_9KxbCk9dVvXvcOKgkIQBqFWvLhv8QlIUCiuFEXMo,806
|
|
37
37
|
pkgs/serialization/opaque_key.py,sha256=FIfXEE0DA1U8R_taFbQ1RCoTSgehrPjP06-qvo-GeNQ,177
|
|
38
|
-
pkgs/serialization/serial_class.py,sha256=
|
|
38
|
+
pkgs/serialization/serial_class.py,sha256=2oH5XZ04R14knr7eTB3afPQwpuaW0qUvt3woS5Q0y5Y,5370
|
|
39
39
|
pkgs/serialization/serial_union.py,sha256=z8Ptj4bVHyb1ROfg0UPTwZ6Ef6iXLr0YJfAH5o_PU9A,2601
|
|
40
|
-
pkgs/serialization/yaml.py,sha256=
|
|
40
|
+
pkgs/serialization/yaml.py,sha256=yoJtu7_ixnJV6uTxA_U1PpK5F_ixT08AKVh5ocyYwXM,1466
|
|
41
41
|
pkgs/serialization_util/__init__.py,sha256=MVKqHTUl2YnWZAFG9xCxu1SgmkQ5xPofrAGlYg6h7rI,330
|
|
42
42
|
pkgs/serialization_util/_get_type_for_serialization.py,sha256=dW5_W9MFd6wgWfW5qlWork-GBb-QFLtiOZkjk2Zqn2M,1177
|
|
43
43
|
pkgs/serialization_util/convert_to_snakecase.py,sha256=H2BAo5ZdcCDN77RpLb-uP0s7-FQ5Ukwnsd3VYc1vD0M,583
|
|
@@ -46,13 +46,13 @@ pkgs/strenum_compat/__init__.py,sha256=wXRFeNvBm8RU6dy1PFJ5sRLgUIEeH_DVR95Sv5qpG
|
|
|
46
46
|
pkgs/strenum_compat/strenum_compat.py,sha256=uOUAgpYTjHs1MX8dG81jRlyTkt3KNbkV_25zp7xTX2s,36
|
|
47
47
|
pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
|
|
48
48
|
pkgs/type_spec/__main__.py,sha256=5bJaX9Y_-FavP0qwzhk-z-V97UY7uaezJTa1zhO_HHQ,1048
|
|
49
|
-
pkgs/type_spec/builder.py,sha256=
|
|
50
|
-
pkgs/type_spec/config.py,sha256=
|
|
51
|
-
pkgs/type_spec/emit_io_ts.py,sha256=
|
|
52
|
-
pkgs/type_spec/emit_open_api.py,sha256=
|
|
53
|
-
pkgs/type_spec/emit_open_api_util.py,sha256=
|
|
54
|
-
pkgs/type_spec/emit_python.py,sha256=
|
|
55
|
-
pkgs/type_spec/emit_typescript.py,sha256=
|
|
49
|
+
pkgs/type_spec/builder.py,sha256=dC-TLQ6_nJfDUKYPNHkqwP_9e1RanZMeK8PX-jvXpe4,46825
|
|
50
|
+
pkgs/type_spec/config.py,sha256=yq4pxv6huIXd-GAGEicSK07rPTJQtgutC7oECxliHZU,4660
|
|
51
|
+
pkgs/type_spec/emit_io_ts.py,sha256=U03sQBpgRqYOaMKrPCRnYb70YboiCgaZfseCXSzW5NY,5707
|
|
52
|
+
pkgs/type_spec/emit_open_api.py,sha256=5a0iAHBbgFD4wfKuyjPvxCYYHNTjKxEHA0aYjMGSqe4,24596
|
|
53
|
+
pkgs/type_spec/emit_open_api_util.py,sha256=x4GCiZSGdypJ9Qtm6I5W_3UvwdJyMs8_OGhJ8_THznA,2401
|
|
54
|
+
pkgs/type_spec/emit_python.py,sha256=SB0-KOuqo-PxZPFKvMfzZoSp71CGEBX3ZNE8f3HlkYA,46973
|
|
55
|
+
pkgs/type_spec/emit_typescript.py,sha256=Tv8EbXBQewZN9q3zRKfTy9lWwElBmIV6fprIjA4RmJQ,18010
|
|
56
56
|
pkgs/type_spec/emit_typescript_util.py,sha256=sR7ys3Ilnh6SQiXJbfYk4pxfOu0bDjbUFTEYEW-ud6c,863
|
|
57
57
|
pkgs/type_spec/load_types.py,sha256=BOLyndtxPqqhUqZAh-lIbN5IZBaW_m-bdYpKGsbPyXM,3654
|
|
58
58
|
pkgs/type_spec/open_api_util.py,sha256=IGh-_snGPST_P_8FdYtO8MTEa9PUxRW6Rzg9X9EgQik,7114
|
|
@@ -60,64 +60,64 @@ pkgs/type_spec/test.py,sha256=4ueujBq-pEgnX3Z69HyPmD-bullFXmpixcpVzfOkhP4,489
|
|
|
60
60
|
pkgs/type_spec/util.py,sha256=6m6MPfY-SwjyZf2FWQKclswWB5o7gcdd-3tdpViPYOQ,4844
|
|
61
61
|
pkgs/type_spec/actions_registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
pkgs/type_spec/actions_registry/__main__.py,sha256=JGwKxcAmrQdbpVR2vwknoimN1Q-r5h4SADw1cYLYzgk,4331
|
|
63
|
-
pkgs/type_spec/actions_registry/emit_typescript.py,sha256=
|
|
63
|
+
pkgs/type_spec/actions_registry/emit_typescript.py,sha256=Z1ZM4zOw26tvLspvW6Emg79-jxjhNBse-8yaionbmeo,6066
|
|
64
64
|
pkgs/type_spec/parts/base.py.prepart,sha256=wGNoDyQnLolHRZGRwHQX5TrPfKnu558NXCocYvqyroc,2174
|
|
65
65
|
pkgs/type_spec/parts/base.ts.prepart,sha256=2FJJvpg2olCcavxj0nbYWdwKl6KeScour2JjSvN42l8,1001
|
|
66
66
|
pkgs/type_spec/type_info/__main__.py,sha256=pmVjVqXyVh8vKTNCTFgz80Sg74C5BKToP3E6GS-X_So,857
|
|
67
|
-
pkgs/type_spec/type_info/emit_type_info.py,sha256=
|
|
67
|
+
pkgs/type_spec/type_info/emit_type_info.py,sha256=1R1ygKbGBIrKDCh3NDiBB6w9ofRCoCjujhHZx9A4_Wc,13289
|
|
68
68
|
pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
|
|
69
69
|
pkgs/type_spec/value_spec/__main__.py,sha256=6bzP85p_Cm4bPp5tXz8D_4p64wMn5SKsXC7SqSZquYc,8318
|
|
70
|
-
pkgs/type_spec/value_spec/convert_type.py,sha256=
|
|
71
|
-
pkgs/type_spec/value_spec/emit_python.py,sha256=
|
|
70
|
+
pkgs/type_spec/value_spec/convert_type.py,sha256=Tg5YsYOwvmf_EqbCAtCmqy3-dud8OwdbEOzAaRN7cCs,2286
|
|
71
|
+
pkgs/type_spec/value_spec/emit_python.py,sha256=KXZqEw7ZNoDk2i77UV7jljiKuE_kgmp7oRyKRIxYUhY,7007
|
|
72
72
|
pkgs/type_spec/value_spec/types.py,sha256=a2zxbbCRWepY1l8OtjeCDKgBKFPFHVgV99oP6pTtaro,441
|
|
73
73
|
uncountable/__init__.py,sha256=8l8XWNCKsu7TG94c-xa2KHpDegvxDC2FyQISdWC763Y,89
|
|
74
74
|
uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
75
|
uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,341
|
|
76
76
|
uncountable/core/async_batch.py,sha256=Gur0VOS0AH2ugwvk65hwoX-iqwQAAyJaejY_LyAZZPo,1210
|
|
77
|
-
uncountable/core/client.py,sha256=
|
|
78
|
-
uncountable/core/file_upload.py,sha256=
|
|
77
|
+
uncountable/core/client.py,sha256=TePXZdRnfyE74m4ntwO8VgmK4MztaI0dVsABeB6VQlw,10570
|
|
78
|
+
uncountable/core/file_upload.py,sha256=T1Ct758Ov-52STy2Uo3gqHMGO41Jdoz3ecMwBZ0CTHw,3163
|
|
79
79
|
uncountable/core/types.py,sha256=s2CjqYJpsmbC7xMwxxT7kJ_V9bwokrjjWVVjpMcQpKI,333
|
|
80
80
|
uncountable/core/version.py,sha256=SqQIHLhiVZXQBeOwygS2FRZ4WEO27JmWhse0lKm7fgU,274
|
|
81
81
|
uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
-
uncountable/integration/construct_client.py,sha256=
|
|
82
|
+
uncountable/integration/construct_client.py,sha256=I2XTamht13vs-JYkV4PpNS_Pc4FJm-KVYqNNvxI4qNk,1916
|
|
83
83
|
uncountable/integration/cron.py,sha256=e5456IYJF2ipiSsd1R2T334lfe7mtp-gwP7JpS645L0,1858
|
|
84
84
|
uncountable/integration/entrypoint.py,sha256=9rk06gBTsCqytIs8Shsnlf6ir_4Uq5d5rfP1veiSLzc,1437
|
|
85
85
|
uncountable/integration/job.py,sha256=UTzcMes2KrBBRLOM3u94imMKLLnv50glqOkNf8-JOZw,1022
|
|
86
86
|
uncountable/integration/server.py,sha256=bmX-ukLiNDq0ThVB2lUyXl-vtID5HI4gqJHxhsVNG3w,4440
|
|
87
|
-
uncountable/integration/telemetry.py,sha256=
|
|
87
|
+
uncountable/integration/telemetry.py,sha256=LAXKVqq96h2pbEwUODIXKhfSt8GVqTDpDiGvAiBQhMk,5341
|
|
88
88
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
89
|
uncountable/integration/db/connect.py,sha256=YtQHJ1DBGPhxKFRCfiXqohOYUceKSxMVOJ88aPI48Ug,181
|
|
90
90
|
uncountable/integration/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
91
|
uncountable/integration/executors/executors.py,sha256=v5ClGVUlvrZcMdmGQa8Ll668G_HGTnKpGOnTM7UMZCQ,956
|
|
92
|
-
uncountable/integration/executors/generic_upload_executor.py,sha256=
|
|
92
|
+
uncountable/integration/executors/generic_upload_executor.py,sha256=nB-kgLWXePbl8u6UwCKFXRrXnFpguMR-91ylnfeWPSA,10280
|
|
93
93
|
uncountable/integration/executors/script_executor.py,sha256=OmSBOtU48G3mqza9c2lCm84pGGyaDk-ZBJCx3RsdJXc,846
|
|
94
94
|
uncountable/integration/secret_retrieval/__init__.py,sha256=3QXVj35w8rRMxVvmmsViFYDi3lcb3g70incfalOEm6o,87
|
|
95
|
-
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=
|
|
96
|
-
uncountable/types/__init__.py,sha256=
|
|
97
|
-
uncountable/types/async_batch.py,sha256=
|
|
98
|
-
uncountable/types/async_batch_processor.py,sha256=
|
|
99
|
-
uncountable/types/async_batch_t.py,sha256=
|
|
95
|
+
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=eoPWbkUtCn_63A4TFlK_nvEDvfm4u2fiOoglmAkBG3U,3004
|
|
96
|
+
uncountable/types/__init__.py,sha256=0KN0QKnwQgEHP90-BfnW67OF77L4Ino-hN4ea-Tx1M0,8324
|
|
97
|
+
uncountable/types/async_batch.py,sha256=_OhT25_dEVts_z_n1kqfJH3xlZg3btLqR6TNkfFLlXE,609
|
|
98
|
+
uncountable/types/async_batch_processor.py,sha256=obVzN-PcYLV2pHScszfCGjSq6-Xc34WM1ysx6Fv6tZk,11293
|
|
99
|
+
uncountable/types/async_batch_t.py,sha256=ipSGz93O1KB-WE2dvlvflTKS51rJrf3bJkUojyxos7I,2193
|
|
100
100
|
uncountable/types/base.py,sha256=xVSjWvA_fUUnkCg83EjoYEFvAfmskinKFMeYFOxNc9E,359
|
|
101
101
|
uncountable/types/base_t.py,sha256=XXjZXexx0xWFUxMMhW8i9nIL6n8dsZVsHwdgnhZ0zJ4,2714
|
|
102
102
|
uncountable/types/calculations.py,sha256=FFO_D3BbKoGDZnqWvTKpW4KF359i2vrKjpdFCLYzJC0,284
|
|
103
103
|
uncountable/types/calculations_t.py,sha256=7GTSi2L8NYjzjUJJx3cmtVkK9uD-uhfYvIFK-ffQj-8,556
|
|
104
104
|
uncountable/types/chemical_structure.py,sha256=E-LnikTFDoVQ1b2zKaVUIO_PAKm-7aZZYJi8I8SDSic,302
|
|
105
105
|
uncountable/types/chemical_structure_t.py,sha256=aFsTkkbzy6Gvyde3qrrEYD95gcYhxkgKMiDRaRE0o-Y,760
|
|
106
|
-
uncountable/types/client_base.py,sha256=
|
|
106
|
+
uncountable/types/client_base.py,sha256=my-n1qrfXM6TwIYw0hzp-2W-rH8FVFg1657DeYLreGU,66315
|
|
107
107
|
uncountable/types/client_config.py,sha256=4h5Liko9uKCo9_0gdbPhoK6Jr2Kv7tioLiQ8iKeq-_4,301
|
|
108
108
|
uncountable/types/client_config_t.py,sha256=_HdS37gMSTIiD4qLnW9dIgt8_Rt5A6xhwMGGga7vnLg,625
|
|
109
109
|
uncountable/types/curves.py,sha256=W6uMpG5SyW1MS82szNpxkFEn1MnxNpBFyFbQb2Ysfng,366
|
|
110
110
|
uncountable/types/curves_t.py,sha256=TDpsThz4lKmiBmS9b4ItUSCp64TGv8-qDkxb4B2RoTo,1314
|
|
111
111
|
uncountable/types/entity.py,sha256=3XhLteFDRDZvHejDuYh-KvB65hpwrBygljFfiUcOAM8,315
|
|
112
|
-
uncountable/types/entity_t.py,sha256=
|
|
112
|
+
uncountable/types/entity_t.py,sha256=kH3RyuAXEs6moMKwDGSQokzHaRBDcfuO-tHkFbre2zk,14537
|
|
113
113
|
uncountable/types/experiment_groups.py,sha256=_0OXcPzSAbkE-rfKt5tPx178YJ4pcEKZvrCxUHgDnvw,309
|
|
114
114
|
uncountable/types/experiment_groups_t.py,sha256=0IGAXwkYiwdjj6aFjLMihxwauACQTyuRU_1usJTeUg4,593
|
|
115
115
|
uncountable/types/field_values.py,sha256=uuIWX-xmfvcinYPdfkWJeb56zzQY01mc9rmotMPMh24,503
|
|
116
116
|
uncountable/types/field_values_t.py,sha256=_JYzmHlPczEnROz_tUbY0r3mZWffCB8m2_a9ktZLgP0,1700
|
|
117
117
|
uncountable/types/fields.py,sha256=GUY5ne8Zp2_Lalikr0zcbdJrin8dG81eyS8fKWJ9yf8,266
|
|
118
118
|
uncountable/types/fields_t.py,sha256=9pDroeNvj4hQQ4QB4-2ioTAFR30YTuW_364Q-Ka9SoQ,564
|
|
119
|
-
uncountable/types/generic_upload.py,sha256=
|
|
120
|
-
uncountable/types/generic_upload_t.py,sha256=
|
|
119
|
+
uncountable/types/generic_upload.py,sha256=n6hue9BX_rLSXeEt_DcGwL2ckxfNXg1wEPR9JNEGQxQ,879
|
|
120
|
+
uncountable/types/generic_upload_t.py,sha256=Hv4cVyllV1BMW2HDOlA6XuF3lQOA8DTAMblgAsu0AIU,3314
|
|
121
121
|
uncountable/types/id_source.py,sha256=wGLA0fMl-5IqBG_fg2UDC7fY-8CWRBNFJOokejOoN_w,567
|
|
122
122
|
uncountable/types/id_source_t.py,sha256=ReOuIHIuFbkE2mQ58x6UP4jCV4_JUxMCvAU9bxUxG84,1369
|
|
123
123
|
uncountable/types/identifier.py,sha256=6ziONd__L07ijhVwpIehUUDvxgKTtHbunk-6CivJqxQ,503
|
|
@@ -171,8 +171,8 @@ uncountable/types/api/batch/execute_batch_load_async.py,sha256=3ptjtokj7eZ_A7OUX
|
|
|
171
171
|
uncountable/types/api/chemical/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
172
172
|
uncountable/types/api/chemical/convert_chemical_formats.py,sha256=-FKBOcg1jteFu920NM-0lBk90pfucpcg2WAsaddfDc8,1323
|
|
173
173
|
uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
174
|
-
uncountable/types/api/entity/create_entities.py,sha256=
|
|
175
|
-
uncountable/types/api/entity/create_entity.py,sha256=
|
|
174
|
+
uncountable/types/api/entity/create_entities.py,sha256=1WK3HTKR5D5Y3yFkaa5jJNourGC-IE45yRkfulty75U,1888
|
|
175
|
+
uncountable/types/api/entity/create_entity.py,sha256=HhR8GBSvqMdMXhm8aUtvkUPrW9bCPIfejD0QOUX4aYE,2058
|
|
176
176
|
uncountable/types/api/entity/get_entities_data.py,sha256=_dyDJ8Aukeijj2U3ZEQYNECoI3TC4phn8RhgJQP1e1s,1162
|
|
177
177
|
uncountable/types/api/entity/list_entities.py,sha256=93J8jbHOdBL7Ee2_z_M57JpIVsmI2RddDMpprTakYks,1717
|
|
178
178
|
uncountable/types/api/entity/lock_entity.py,sha256=twQ-f61AKS_NrKP-TzqHkMmzTJGMc4yxZFl-2JctOg4,1004
|
|
@@ -219,6 +219,7 @@ uncountable/types/api/recipes/add_recipe_to_project.py,sha256=JPYk25a5JSqM2X_93W
|
|
|
219
219
|
uncountable/types/api/recipes/archive_recipes.py,sha256=w8r7-NpWhW5oE-K6PGf0Th0T1-HkdHjjVmk5AcxUrio,852
|
|
220
220
|
uncountable/types/api/recipes/associate_recipe_as_input.py,sha256=NGZ3RH2-sDcqzoVKuqnAWFmkDszvCXKLTLhs-YZe0x0,1012
|
|
221
221
|
uncountable/types/api/recipes/associate_recipe_as_lot.py,sha256=iwRDSje33GaDpOVhQrFXcJjBax9k80gwbs8IUkFNKpU,940
|
|
222
|
+
uncountable/types/api/recipes/clear_recipe_outputs.py,sha256=htm2MsFRWvlPsIyogSiVHzQ02_ZtAOCyV5M6AMh_FHQ,890
|
|
222
223
|
uncountable/types/api/recipes/create_recipe.py,sha256=-ybqIZ3LH5018g0fQ07XWq9L6OL3qkiYkXnH02kxnL0,1371
|
|
223
224
|
uncountable/types/api/recipes/create_recipes.py,sha256=Cr7hXRAMnFeBNxOBv7_j-K5nkaC67cu3vFLqMBH3yVc,1555
|
|
224
225
|
uncountable/types/api/recipes/disassociate_recipe_as_input.py,sha256=EreRtLP4o29RazwbM5qb1PJZqLf4Ii8xJ9NT7ciKfKo,898
|
|
@@ -241,8 +242,8 @@ uncountable/types/api/recipes/unlock_recipes.py,sha256=AvzQeZCLs9i7CuhMs3Xltdi4n
|
|
|
241
242
|
uncountable/types/api/triggers/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
242
243
|
uncountable/types/api/triggers/run_trigger.py,sha256=_Rpha9nxXI3Xr17CrGDtofg4HZ81x2lt0rMZ6As0qfE,893
|
|
243
244
|
uncountable/types/api/uploader/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
244
|
-
uncountable/types/api/uploader/invoke_uploader.py,sha256=
|
|
245
|
-
UncountablePythonSDK-0.0.
|
|
246
|
-
UncountablePythonSDK-0.0.
|
|
247
|
-
UncountablePythonSDK-0.0.
|
|
248
|
-
UncountablePythonSDK-0.0.
|
|
245
|
+
uncountable/types/api/uploader/invoke_uploader.py,sha256=Rc77y5q-3R9-SNQgm8P35zKaW2D1Hbtm7PDixnOn1G0,1025
|
|
246
|
+
UncountablePythonSDK-0.0.56.dist-info/METADATA,sha256=lmSsa2EhpaY0yPMGOF-RqlBwvkaNGXfiFb5Ebz5woYk,1934
|
|
247
|
+
UncountablePythonSDK-0.0.56.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
|
|
248
|
+
UncountablePythonSDK-0.0.56.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
249
|
+
UncountablePythonSDK-0.0.56.dist-info/RECORD,,
|
examples/create_entity.py
CHANGED
|
@@ -14,7 +14,9 @@ entities = client.create_entity(
|
|
|
14
14
|
definition_id=24,
|
|
15
15
|
entity_type=entity_t.EntityType.LAB_REQUEST,
|
|
16
16
|
field_values=[
|
|
17
|
-
field_values_t.FieldRefNameValue(
|
|
17
|
+
field_values_t.FieldRefNameValue(
|
|
18
|
+
field_ref_name="name", value="SDK Lab Request"
|
|
19
|
+
),
|
|
18
20
|
field_values_t.FieldRefNameValue(field_ref_name="materialFamilyId", value=1),
|
|
19
21
|
],
|
|
20
22
|
)
|
examples/edit_recipe_inputs.py
CHANGED
|
@@ -29,7 +29,7 @@ edits.append(
|
|
|
29
29
|
edit_recipe_inputs_t.RecipeInputEditAddInput(
|
|
30
30
|
quantity_basis=QuantityBasis.MASS,
|
|
31
31
|
ingredient_key=IdentifierKeyId(id=1),
|
|
32
|
-
value_numeric=Decimal(56.7),
|
|
32
|
+
value_numeric=Decimal("56.7"),
|
|
33
33
|
)
|
|
34
34
|
)
|
|
35
35
|
edits.append(
|
|
@@ -38,7 +38,9 @@ edits.append(
|
|
|
38
38
|
)
|
|
39
39
|
)
|
|
40
40
|
edits.append(
|
|
41
|
-
edit_recipe_inputs_t.RecipeInputEditAddInstructions(
|
|
41
|
+
edit_recipe_inputs_t.RecipeInputEditAddInstructions(
|
|
42
|
+
instructions="Mix for 3 minutes"
|
|
43
|
+
)
|
|
42
44
|
)
|
|
43
45
|
batch_loader.edit_recipe_inputs(
|
|
44
46
|
recipe_key=IdentifierKeyBatchReference(reference=created_recipe_reference),
|
examples/invoke_uploader.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
3
|
from uncountable.core import AuthDetailsApiKey, Client, MediaFileUpload
|
|
4
|
+
from uncountable.types import generic_upload_t
|
|
4
5
|
from uncountable.types.identifier_t import IdentifierKeyId
|
|
5
6
|
|
|
6
7
|
client = Client(
|
|
@@ -19,5 +20,7 @@ uploaded_file = client.upload_files(
|
|
|
19
20
|
client.invoke_uploader(
|
|
20
21
|
file_id=uploaded_file.file_id,
|
|
21
22
|
uploader_key=IdentifierKeyId(id=48),
|
|
22
|
-
|
|
23
|
+
destination=generic_upload_t.UploadDestinationMaterialFamily(
|
|
24
|
+
material_family_key=IdentifierKeyId(id=7)
|
|
25
|
+
),
|
|
23
26
|
)
|
|
@@ -48,7 +48,7 @@ class ParserExtraFieldsError(ParserError):
|
|
|
48
48
|
self.extra_fields = extra_fields
|
|
49
49
|
|
|
50
50
|
def __str__(self) -> str:
|
|
51
|
-
return f"extra fields were provided: {
|
|
51
|
+
return f"extra fields were provided: {", ".join(self.extra_fields)}"
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
def is_optional(field_type: typing.Any) -> bool:
|
|
@@ -250,7 +250,9 @@ def _build_parser_inner(
|
|
|
250
250
|
convert_string_to_snake_case=context.options.convert_to_snake_case,
|
|
251
251
|
)
|
|
252
252
|
v_parser = _build_parser_inner(args[1], context)
|
|
253
|
-
return lambda value: origin(
|
|
253
|
+
return lambda value: origin(
|
|
254
|
+
(k_parser(k), v_parser(v)) for k, v in value.items()
|
|
255
|
+
)
|
|
254
256
|
|
|
255
257
|
if origin == typing.Literal:
|
|
256
258
|
valid_values: set[T] = set(typing.get_args(parsed_type))
|
|
@@ -212,7 +212,8 @@ class GDriveSession(FileSystemSession):
|
|
|
212
212
|
for file_context in files:
|
|
213
213
|
if (
|
|
214
214
|
valid_file_extensions is not None
|
|
215
|
-
and os.path.splitext(file_context["name"])[1]
|
|
215
|
+
and os.path.splitext(file_context["name"])[1]
|
|
216
|
+
not in valid_file_extensions
|
|
216
217
|
):
|
|
217
218
|
continue
|
|
218
219
|
gdrive_files.append(
|
|
@@ -256,7 +257,9 @@ class GDriveSession(FileSystemSession):
|
|
|
256
257
|
dest_filename=new_filename,
|
|
257
258
|
)
|
|
258
259
|
else:
|
|
259
|
-
move_gdrive_file(
|
|
260
|
+
move_gdrive_file(
|
|
261
|
+
self.connection, src_file.file_id, dest_file.file_id
|
|
262
|
+
)
|
|
260
263
|
elif isinstance(src_file, FileObjectData):
|
|
261
264
|
if src_file.mime_type is None:
|
|
262
265
|
raise IncompatibleFileReference(
|
|
@@ -64,7 +64,8 @@ class S3Session(FileSystemSession):
|
|
|
64
64
|
if not recursive and (obj.key == prefix or "/" in obj.key[len(prefix) :]):
|
|
65
65
|
continue
|
|
66
66
|
if valid_extensions is None or any(
|
|
67
|
-
obj.key.endswith(valid_extension)
|
|
67
|
+
obj.key.endswith(valid_extension)
|
|
68
|
+
for valid_extension in valid_extensions
|
|
68
69
|
):
|
|
69
70
|
filesystem_references.append(FileSystemFileReference(obj.key))
|
|
70
71
|
|
|
@@ -42,7 +42,8 @@ def list_sftp_files(
|
|
|
42
42
|
|
|
43
43
|
def _add_file(path: str) -> None:
|
|
44
44
|
if (
|
|
45
|
-
valid_extensions is None
|
|
45
|
+
valid_extensions is None
|
|
46
|
+
or os.path.splitext(path)[1] in valid_extensions
|
|
46
47
|
) and (parent_dir_path is None or os.path.dirname(path) == parent_dir_path):
|
|
47
48
|
file_paths.append(path)
|
|
48
49
|
|
|
@@ -106,9 +107,9 @@ class SFTPSession(FileSystemSession):
|
|
|
106
107
|
recursive: bool = True,
|
|
107
108
|
valid_extensions: list[str] | None = None,
|
|
108
109
|
) -> list[FileSystemObject]:
|
|
109
|
-
if not isinstance(
|
|
110
|
-
dir_path
|
|
111
|
-
):
|
|
110
|
+
if not isinstance(
|
|
111
|
+
dir_path, FileSystemFileReference
|
|
112
|
+
) or not self.connection.isdir(dir_path.filepath):
|
|
112
113
|
raise IncompatibleFileReference()
|
|
113
114
|
|
|
114
115
|
return [
|
|
@@ -91,11 +91,15 @@ def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | N
|
|
|
91
91
|
if curr_base_class_data is not None:
|
|
92
92
|
if base_class_data is None:
|
|
93
93
|
base_class_data = _SerialClassData()
|
|
94
|
-
base_class_data.unconverted_keys |=
|
|
94
|
+
base_class_data.unconverted_keys |= (
|
|
95
|
+
curr_base_class_data.unconverted_keys
|
|
96
|
+
)
|
|
95
97
|
base_class_data.unconverted_values |= (
|
|
96
98
|
curr_base_class_data.unconverted_values
|
|
97
99
|
)
|
|
98
|
-
base_class_data.to_string_values |=
|
|
100
|
+
base_class_data.to_string_values |= (
|
|
101
|
+
curr_base_class_data.to_string_values
|
|
102
|
+
)
|
|
99
103
|
base_class_data.parse_require |= curr_base_class_data.parse_require
|
|
100
104
|
return base_class_data
|
|
101
105
|
|
pkgs/serialization/yaml.py
CHANGED
|
@@ -45,7 +45,10 @@ def safe_load(src: str | bytes | SupportsRead) -> Any:
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def safe_dump(
|
|
48
|
-
obj: Any,
|
|
48
|
+
obj: Any,
|
|
49
|
+
sort_keys: bool = False,
|
|
50
|
+
indent: int | None = None,
|
|
51
|
+
width: int | None = None,
|
|
49
52
|
) -> str:
|
|
50
53
|
return yaml.safe_dump(obj, sort_keys=sort_keys, indent=indent, width=width)
|
|
51
54
|
|
|
@@ -129,7 +129,9 @@ def _emit_action_definition(
|
|
|
129
129
|
out.write(f"{indent}{_action_symbol_name(action_definition)}: {{\n")
|
|
130
130
|
out.write(f"{sub_indent}name: {encode_common_string(action_definition.name)},\n")
|
|
131
131
|
if action_definition.icon is not None:
|
|
132
|
-
out.write(
|
|
132
|
+
out.write(
|
|
133
|
+
f"{sub_indent}icon: {encode_common_string(action_definition.icon)},\n"
|
|
134
|
+
)
|
|
133
135
|
out.write(
|
|
134
136
|
f"{sub_indent}shortDescription: {encode_common_string(action_definition.short_description)},\n"
|
|
135
137
|
)
|
pkgs/type_spec/builder.py
CHANGED
|
@@ -712,7 +712,9 @@ class SpecTypeDefnStringEnum(SpecTypeDefn):
|
|
|
712
712
|
elif isinstance(data_values, list):
|
|
713
713
|
for value in data_values:
|
|
714
714
|
if value in self.values:
|
|
715
|
-
raise Exception(
|
|
715
|
+
raise Exception(
|
|
716
|
+
"duplicate value in typespec enum", self.name, value
|
|
717
|
+
)
|
|
716
718
|
self.values[value] = StringEnumEntry(name=value, value=value)
|
|
717
719
|
else:
|
|
718
720
|
raise Exception("unsupported values type")
|
|
@@ -972,7 +974,9 @@ def _parse_const(
|
|
|
972
974
|
return value
|
|
973
975
|
|
|
974
976
|
if const_type.name == BaseTypeName.s_boolean:
|
|
975
|
-
builder.ensure(
|
|
977
|
+
builder.ensure(
|
|
978
|
+
isinstance(value, bool), "invalid value for boolean constant"
|
|
979
|
+
)
|
|
976
980
|
return value
|
|
977
981
|
|
|
978
982
|
raise Exception("unsupported-const-scalar-type", const_type)
|
|
@@ -1004,7 +1008,9 @@ class SpecConstant:
|
|
|
1004
1008
|
assert isinstance(self.value, dict)
|
|
1005
1009
|
# the parsing checks that the values are correct, so a simple length check
|
|
1006
1010
|
# should be enough to check completeness
|
|
1007
|
-
builder.ensure(
|
|
1011
|
+
builder.ensure(
|
|
1012
|
+
len(key_type.values) == len(self.value), "incomplete-enum-map"
|
|
1013
|
+
)
|
|
1008
1014
|
|
|
1009
1015
|
|
|
1010
1016
|
class SpecNamespace:
|
|
@@ -1335,7 +1341,9 @@ class SpecBuilder:
|
|
|
1335
1341
|
) -> SpecType:
|
|
1336
1342
|
self.push_where(spec)
|
|
1337
1343
|
parsed_type = util.parse_type_str(spec)
|
|
1338
|
-
result = self._convert_parsed_type(
|
|
1344
|
+
result = self._convert_parsed_type(
|
|
1345
|
+
parsed_type, namespace, top=True, scope=scope
|
|
1346
|
+
)
|
|
1339
1347
|
self.pop_where()
|
|
1340
1348
|
return result
|
|
1341
1349
|
|
|
@@ -1385,7 +1393,9 @@ class SpecBuilder:
|
|
|
1385
1393
|
path_meta: list[str] | None = meta.get("path")
|
|
1386
1394
|
guide_key: SpecGuideKey = RootGuideKey()
|
|
1387
1395
|
if path_meta is not None:
|
|
1388
|
-
path_details = _resolve_endpoint_path(
|
|
1396
|
+
path_details = _resolve_endpoint_path(
|
|
1397
|
+
"".join(path_meta), self.api_endpoints
|
|
1398
|
+
)
|
|
1389
1399
|
guide_key = EndpointGuideKey(path=path_details.resolved_path)
|
|
1390
1400
|
|
|
1391
1401
|
self.guides[guide_key].append(
|
|
@@ -1398,4 +1408,4 @@ class SpecBuilder:
|
|
|
1398
1408
|
)
|
|
1399
1409
|
|
|
1400
1410
|
def resolve_proper_name(self, stype: SpecTypeDefn) -> str:
|
|
1401
|
-
return f"{
|
|
1411
|
+
return f"{".".join(stype.namespace.path)}.{stype.name}"
|
pkgs/type_spec/config.py
CHANGED
|
@@ -125,7 +125,9 @@ def parse_yaml_config(config_file: str) -> Config:
|
|
|
125
125
|
python = _parse_language(PythonConfig, raw_config["python"])
|
|
126
126
|
raw_open_api = raw_config.get("open_api")
|
|
127
127
|
open_api = (
|
|
128
|
-
_parse_language(OpenAPIConfig, raw_open_api)
|
|
128
|
+
_parse_language(OpenAPIConfig, raw_open_api)
|
|
129
|
+
if raw_open_api is not None
|
|
130
|
+
else None
|
|
129
131
|
)
|
|
130
132
|
|
|
131
133
|
return Config(
|
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")
|
|
@@ -129,7 +129,7 @@ def refer_to_io_ts(
|
|
|
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
|
@@ -286,7 +286,9 @@ def _emit_endpoint_request_body(
|
|
|
286
286
|
"type": "object",
|
|
287
287
|
"title": "Body",
|
|
288
288
|
"required": ["data"],
|
|
289
|
-
"properties": {
|
|
289
|
+
"properties": {
|
|
290
|
+
"data": {"$ref": "#/components/schema/Arguments"}
|
|
291
|
+
},
|
|
290
292
|
}
|
|
291
293
|
}
|
|
292
294
|
| _emit_endpoint_argument_examples(examples)
|
|
@@ -361,7 +363,9 @@ def _emit_namespace(
|
|
|
361
363
|
| _emit_is_beta(endpoint.is_beta)
|
|
362
364
|
| _emit_stability_level(endpoint.stability_level)
|
|
363
365
|
| _emit_endpoint_parameters(endpoint, argument_type, ctx.endpoint.examples)
|
|
364
|
-
| _emit_endpoint_request_body(
|
|
366
|
+
| _emit_endpoint_request_body(
|
|
367
|
+
endpoint, argument_type, ctx.endpoint.examples
|
|
368
|
+
)
|
|
365
369
|
| {
|
|
366
370
|
"responses": {
|
|
367
371
|
"200": {
|
|
@@ -412,7 +416,7 @@ def _emit_namespace(
|
|
|
412
416
|
{name: value.asdict() for name, value in types.items()},
|
|
413
417
|
)
|
|
414
418
|
|
|
415
|
-
path = f"{config.types_output}/common/{
|
|
419
|
+
path = f"{config.types_output}/common/{"/".join(namespace.path)}.yaml"
|
|
416
420
|
oa_namespace = {"components": oa_components}
|
|
417
421
|
_rewrite_with_notice(path, yaml.dumps(oa_namespace, sort_keys=False))
|
|
418
422
|
|
|
@@ -555,7 +559,7 @@ def _emit_endpoint(
|
|
|
555
559
|
gctx.tags.add(EmitOpenAPITag(name=tag_name, description=""))
|
|
556
560
|
gctx.tag_groups[tag_group].add(tag_name)
|
|
557
561
|
|
|
558
|
-
ref_path = f"common/{
|
|
562
|
+
ref_path = f"common/{"/".join(namespace.path)}.yaml#/components/endpoint"
|
|
559
563
|
ep = namespace.endpoint
|
|
560
564
|
gctx.paths.append(
|
|
561
565
|
EmitOpenAPIPath(
|
|
@@ -573,7 +577,7 @@ def _emit_endpoint(
|
|
|
573
577
|
ctx.endpoint = EmitOpenAPIEndpoint(
|
|
574
578
|
method=namespace.endpoint.method.lower(),
|
|
575
579
|
tags=[tag_name],
|
|
576
|
-
summary=f"{
|
|
580
|
+
summary=f"{"/".join(namespace.path[path_cutoff:])}",
|
|
577
581
|
description=description,
|
|
578
582
|
is_beta=namespace.endpoint.is_beta,
|
|
579
583
|
stability_level=namespace.endpoint.stability_level,
|
|
@@ -690,5 +694,5 @@ def open_api_type(
|
|
|
690
694
|
ctx.namespaces.add(stype.namespace)
|
|
691
695
|
# external namespace resolution
|
|
692
696
|
return OpenAPIRefType(
|
|
693
|
-
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}"
|
|
694
698
|
)
|
|
@@ -6,7 +6,6 @@ WORK-IN-PROGRESS, DON'T USE!
|
|
|
6
6
|
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
from dataclasses import dataclass, field
|
|
9
|
-
from typing import TypeAlias
|
|
10
9
|
|
|
11
10
|
from pkgs.serialization_util.serialization_helpers import JsonValue
|
|
12
11
|
|
|
@@ -15,9 +14,9 @@ from .open_api_util import OpenAPIType
|
|
|
15
14
|
|
|
16
15
|
MODIFY_NOTICE = "# DO NOT MODIFY -- This file is generated by type_spec"
|
|
17
16
|
|
|
18
|
-
GlobalContextInfo
|
|
19
|
-
TagGroupToNamedTags
|
|
20
|
-
TagPathsToRef
|
|
17
|
+
type GlobalContextInfo = dict[str, str | dict[str, str]]
|
|
18
|
+
type TagGroupToNamedTags = dict[str, str | list[str]]
|
|
19
|
+
type TagPathsToRef = dict[str, dict[str, str]]
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
@dataclass
|
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
|
|
@@ -621,7 +621,9 @@ def _emit_string_enum(ctx: Context, stype: builder.SpecTypeDefnStringEnum) -> No
|
|
|
621
621
|
ctx.out.write(f"{INDENT}labels={{\n")
|
|
622
622
|
for entry in stype.values.values():
|
|
623
623
|
if entry.label is not None:
|
|
624
|
-
ctx.out.write(
|
|
624
|
+
ctx.out.write(
|
|
625
|
+
f'{INDENT}{INDENT}"{entry.value}": "{entry.label}",\n'
|
|
626
|
+
)
|
|
625
627
|
|
|
626
628
|
ctx.out.write(f"{INDENT}}},\n")
|
|
627
629
|
if need_deprecated:
|
|
@@ -722,7 +724,9 @@ def _emit_properties(
|
|
|
722
724
|
if (
|
|
723
725
|
isinstance(prop.spec_type, builder.SpecTypeInstance)
|
|
724
726
|
and (
|
|
725
|
-
prop.spec_type.defn_type.is_base_type(
|
|
727
|
+
prop.spec_type.defn_type.is_base_type(
|
|
728
|
+
builder.BaseTypeName.s_list
|
|
729
|
+
)
|
|
726
730
|
)
|
|
727
731
|
and default == "[]"
|
|
728
732
|
):
|
|
@@ -1026,7 +1030,7 @@ def _emit_namespace_imports(
|
|
|
1026
1030
|
if ns.endpoint is not None:
|
|
1027
1031
|
import_alias = "_".join(ns.path[2:]) + "_t"
|
|
1028
1032
|
out.write(
|
|
1029
|
-
f"import {config.types_package}.{
|
|
1033
|
+
f"import {config.types_package}.{".".join(ns.path)} as {import_alias}\n"
|
|
1030
1034
|
)
|
|
1031
1035
|
continue
|
|
1032
1036
|
elif from_namespace is not None:
|
|
@@ -1184,7 +1188,7 @@ def _emit_api_argument_lookup(
|
|
|
1184
1188
|
continue
|
|
1185
1189
|
|
|
1186
1190
|
import_alias = "_".join(namespace.path[1:])
|
|
1187
|
-
api_import = f"{config.types_package}.{
|
|
1191
|
+
api_import = f"{config.types_package}.{".".join(namespace.path)}"
|
|
1188
1192
|
imports.append(f"import {api_import} as {import_alias}")
|
|
1189
1193
|
|
|
1190
1194
|
route_group = (
|