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.

Files changed (42) hide show
  1. {UncountablePythonSDK-0.0.54.dist-info → UncountablePythonSDK-0.0.56.dist-info}/METADATA +1 -1
  2. {UncountablePythonSDK-0.0.54.dist-info → UncountablePythonSDK-0.0.56.dist-info}/RECORD +42 -41
  3. {UncountablePythonSDK-0.0.54.dist-info → UncountablePythonSDK-0.0.56.dist-info}/WHEEL +1 -1
  4. examples/create_entity.py +3 -1
  5. examples/edit_recipe_inputs.py +4 -2
  6. examples/invoke_uploader.py +4 -1
  7. pkgs/argument_parser/argument_parser.py +4 -2
  8. pkgs/filesystem_utils/_gdrive_session.py +5 -2
  9. pkgs/filesystem_utils/_s3_session.py +2 -1
  10. pkgs/filesystem_utils/_sftp_session.py +5 -4
  11. pkgs/serialization/serial_class.py +6 -2
  12. pkgs/serialization/yaml.py +4 -1
  13. pkgs/type_spec/actions_registry/emit_typescript.py +3 -1
  14. pkgs/type_spec/builder.py +16 -6
  15. pkgs/type_spec/config.py +3 -1
  16. pkgs/type_spec/emit_io_ts.py +5 -5
  17. pkgs/type_spec/emit_open_api.py +10 -6
  18. pkgs/type_spec/emit_open_api_util.py +3 -4
  19. pkgs/type_spec/emit_python.py +9 -5
  20. pkgs/type_spec/emit_typescript.py +17 -8
  21. pkgs/type_spec/type_info/emit_type_info.py +5 -3
  22. pkgs/type_spec/value_spec/convert_type.py +3 -1
  23. pkgs/type_spec/value_spec/emit_python.py +12 -4
  24. uncountable/core/client.py +3 -1
  25. uncountable/core/file_upload.py +3 -1
  26. uncountable/integration/construct_client.py +2 -1
  27. uncountable/integration/executors/generic_upload_executor.py +11 -9
  28. uncountable/integration/secret_retrieval/retrieve_secret.py +1 -3
  29. uncountable/integration/telemetry.py +12 -4
  30. uncountable/types/__init__.py +2 -0
  31. uncountable/types/api/entity/create_entities.py +1 -1
  32. uncountable/types/api/entity/create_entity.py +1 -1
  33. uncountable/types/api/recipes/clear_recipe_outputs.py +35 -0
  34. uncountable/types/api/uploader/invoke_uploader.py +2 -2
  35. uncountable/types/async_batch.py +1 -0
  36. uncountable/types/async_batch_processor.py +75 -4
  37. uncountable/types/async_batch_t.py +9 -0
  38. uncountable/types/client_base.py +25 -6
  39. uncountable/types/entity_t.py +2 -0
  40. uncountable/types/generic_upload.py +6 -0
  41. uncountable/types/generic_upload_t.py +67 -1
  42. {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.54
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=noZdtJ5f9Wfiob3zUH-8bDVbrCPJnFtXFk_W9pSjvUA,664
19
- examples/edit_recipe_inputs.py,sha256=SFHhccktlpWlz4ujh30KZ-hZTFneRWuEp9b3nJSbNn8,1647
20
- examples/invoke_uploader.py,sha256=Rn5sSZowW6_0yX6843q2HOSIECfK4cOCB1Hmco3iWVo,625
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=S5x4yDpaBqTRkmcOyX2UuBWw9iCE4j2Po5LZPg9jhe4,17308
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=OZudNoP2HikolnpurVJhJdh5fgzqbaZQvn53ReGGXx4,11015
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=UbVTUM5olc2Kq_1TX7e5rI3UD5w49ko7CWjsMnSJVmg,3946
32
- pkgs/filesystem_utils/_sftp_session.py,sha256=gNoUD_b4MuVqWj31nU-FpfpXZlyWkwdEHtX1S8W6gpQ,4727
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=r0hrQdIbJA_X0W0_jKEVrxi_JzVRT9qHCjsUgGu3cCI,5290
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=t-31FS0pL1YbhfspK88iQEGa1WDn60Fw16CpoLSClJM,1453
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=xQcY2HcQTI2FSOMycgx3yD23_Oz3_LfWdyW65pDaHoc,46667
50
- pkgs/type_spec/config.py,sha256=IQyo2Vj11uNt7_d6jQxvominAOU-oPB8ldEmuGzJLpU,4644
51
- pkgs/type_spec/emit_io_ts.py,sha256=Ghd8XYqyNYldHQDepwa9GLfHXcoi48ztBw84K28ETic,5707
52
- pkgs/type_spec/emit_open_api.py,sha256=92POd3j4nrrROrw9M-bgEmK4ukYbI0TW6E9IigJzoTE,24512
53
- pkgs/type_spec/emit_open_api_util.py,sha256=y2slouAflUJmyTPH_d4CbXql9zpOoD1uTOELqL3NX-M,2448
54
- pkgs/type_spec/emit_python.py,sha256=bQUqVmfVgAXw8rGcqlg93YbUsUvawgR2o_NrV_c9Zio,46873
55
- pkgs/type_spec/emit_typescript.py,sha256=cdr5h8N70PuwORcvhURUujzwH9r1LVwJB8V2EoipGkw,17917
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=ben0W7qwaVCzLO-t3NEJPPNGEE_6sKLdJMuAh8aMBnw,6044
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=7FtMm_WOhxoT8Hy2DDorexIccwCNVZ9mJTBURD8l9Rk,13282
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=SAYyEV6orQJJbkXSE4hhtOQJ2vKUXJCKPeYPrB8G9oA,2272
71
- pkgs/type_spec/value_spec/emit_python.py,sha256=rjg6LIGYdaagrZ19XpDfW_Z7LPNwCMDceBje5dsMFbw,6959
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=C0hJ0_SGL5WEhPuAWDSj4ShjjIiQasxpfpnisTi-Uag,10554
78
- uncountable/core/file_upload.py,sha256=TkQ0fKbbYrPgns1Jh51JU35DUqZHB3ljOaVgjSlBx9Y,3149
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=e1uAMVp4FTbValCJ3gfaZFuObKxHbTXq496-T-KMOG4,1899
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=wgQnaWZFmUM_4lwyghOmL4Pd8DU0qUJvxXcrgBekAKQ,5261
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=wafNY_gpbUiQhvkFPDw-GGiJLmDVtTRgH_5jwMLy2Z4,10283
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=BS1dXVaChgpgBDKWkcLrl9hBDQIASRQMr3l41ytfbEc,3036
96
- uncountable/types/__init__.py,sha256=UuLBpo8Uxv9k-UZS8DINg3y-LPrs2dC7Qg83BB8p2_k,8222
97
- uncountable/types/async_batch.py,sha256=ihCv5XWSTTPmuO-GMPn1EACGI2CBUIJTATZ3aPgsNBA,523
98
- uncountable/types/async_batch_processor.py,sha256=R--exgi4Gw0HWCnh8M-3_2PqG2ByTBtdyuSQ2eYtYn8,8671
99
- uncountable/types/async_batch_t.py,sha256=9jp9rOyetRdD5aQVyijzQggTyYU4021PBVGXk0ooBCQ,1911
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=db6V-Jea8iWT4kz2hXc5c_doLJKLZTd5T-F4ehobWMs,65431
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=HhKmcH5Op8rEkDhpw7SXQ7QakbFdvG5FpB6O4e7cMY0,14439
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=hbtuOVMJhCRfPQM_BwtLMV509--iv8NXjtlTfCeRqdU,395
120
- uncountable/types/generic_upload_t.py,sha256=euOF_oFwT62a---oBjZeGVvU67TpXh8da9njrhlg46w,1202
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=qvra6BustbxWmt7_c83mCMkfxaBJ4B8xayJUvk6Ab9E,1780
175
- uncountable/types/api/entity/create_entity.py,sha256=vfbJiHOMEEzJFZNNiHbIBqisytYdKa7rTOraWdZrXpw,1950
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=4zOcB_38uT73Jm3-XqkG40fBM1R5vpvPpGAg-U4lzxY,1059
245
- UncountablePythonSDK-0.0.54.dist-info/METADATA,sha256=PzDsbl724f6w2EAH-tAuiai1I0Mn-SDqVt1ux1xSur0,1934
246
- UncountablePythonSDK-0.0.54.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
247
- UncountablePythonSDK-0.0.54.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
248
- UncountablePythonSDK-0.0.54.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (73.0.1)
2
+ Generator: setuptools (74.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
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(field_ref_name="name", value="SDK Lab Request"),
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
  )
@@ -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(instructions="Mix for 3 minutes")
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),
@@ -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
- material_family_key=IdentifierKeyId(id=1),
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: {', '.join(self.extra_fields)}"
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((k_parser(k), v_parser(v)) for k, v in value.items())
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] not in valid_file_extensions
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(self.connection, src_file.file_id, dest_file.file_id)
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) for valid_extension in valid_extensions
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 or os.path.splitext(path)[1] in valid_extensions
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(dir_path, FileSystemFileReference) or not self.connection.isdir(
110
- dir_path.filepath
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 |= curr_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 |= curr_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
 
@@ -45,7 +45,10 @@ def safe_load(src: str | bytes | SupportsRead) -> Any:
45
45
 
46
46
 
47
47
  def safe_dump(
48
- obj: Any, sort_keys: bool = False, indent: int | None = None, width: int | None = None
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(f"{sub_indent}icon: {encode_common_string(action_definition.icon)},\n")
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("duplicate value in typespec enum", self.name, value)
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(isinstance(value, bool), "invalid value for boolean constant")
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(len(key_type.values) == len(self.value), "incomplete-enum-map")
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(parsed_type, namespace, top=True, scope=scope)
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("".join(path_meta), self.api_endpoints)
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"{'.'.join(stype.namespace.path)}.{stype.name}"
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) if raw_open_api is not None else None
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(
@@ -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({'{'}\n")
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}{'}'}),\n")
107
- ctx.out.write(f"{INDENT}IO.type({'{'}\n")
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}{'}'}),\n")
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([{', '.join([refer_to_io_ts(ctx, p) for p in stype.parameters])}])"
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)
@@ -286,7 +286,9 @@ def _emit_endpoint_request_body(
286
286
  "type": "object",
287
287
  "title": "Body",
288
288
  "required": ["data"],
289
- "properties": {"data": {"$ref": "#/components/schema/Arguments"}},
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(endpoint, argument_type, ctx.endpoint.examples)
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/{'/'.join(namespace.path)}.yaml"
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/{'/'.join(namespace.path)}.yaml#/components/endpoint"
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"{'/'.join(namespace.path[path_cutoff:])}",
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='/components/schema')}/{stype.name}"
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: TypeAlias = dict[str, str | dict[str, str]]
19
- TagGroupToNamedTags: TypeAlias = dict[str, str | list[str]]
20
- TagPathsToRef: TypeAlias = dict[str, dict[str, str]]
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
@@ -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}{'' if len(namespace.path) > 1 else '_t'}.py"
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(f'{INDENT}{INDENT}"{entry.value}": "{entry.label}",\n')
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(builder.BaseTypeName.s_list)
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}.{'.'.join(ns.path)} as {import_alias}\n"
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}.{'.'.join(namespace.path)}"
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 = (