omlish 0.0.0.dev246__py3-none-any.whl → 0.0.0.dev248__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.
Files changed (51) hide show
  1. omlish/.manifests.json +2 -2
  2. omlish/__about__.py +2 -2
  3. omlish/collections/cache/descriptor.py +0 -2
  4. omlish/collections/identity.py +6 -0
  5. omlish/concurrent/executors.py +0 -1
  6. omlish/concurrent/futures.py +0 -1
  7. omlish/dataclasses/impl/descriptors.py +0 -2
  8. omlish/diag/replserver/server.py +0 -1
  9. omlish/dispatch/_dispatch2.py +7 -3
  10. omlish/dispatch/_dispatch3.py +7 -3
  11. omlish/dispatch/dispatch.py +29 -63
  12. omlish/dispatch/functions.py +1 -1
  13. omlish/dispatch/impls.py +69 -0
  14. omlish/dispatch/methods.py +1 -1
  15. omlish/dynamic.py +0 -3
  16. omlish/formats/json/stream/build.py +2 -0
  17. omlish/formats/yaml.py +0 -3
  18. omlish/graphs/dags.py +0 -2
  19. omlish/graphs/domination.py +0 -5
  20. omlish/graphs/dot/items.py +0 -1
  21. omlish/graphs/dot/rendering.py +0 -1
  22. omlish/graphs/trees.py +0 -1
  23. omlish/inject/binder.py +0 -10
  24. omlish/iterators/iterators.py +0 -4
  25. omlish/lang/__init__.py +1 -0
  26. omlish/lang/collections.py +36 -0
  27. omlish/lang/descriptors.py +0 -1
  28. omlish/lifecycles/base.py +0 -1
  29. omlish/lifecycles/contextmanagers.py +0 -1
  30. omlish/lifecycles/controller.py +0 -2
  31. omlish/lifecycles/manager.py +0 -1
  32. omlish/marshal/trivial/any.py +0 -1
  33. omlish/math/bits.py +0 -1
  34. omlish/math/stats.py +0 -1
  35. omlish/specs/jmespath/cli.py +1 -1
  36. omlish/sql/queries/rendering.py +108 -87
  37. omlish/term/codes.py +0 -1
  38. omlish/testing/pytest/plugins/logging.py +0 -1
  39. omlish/testing/pytest/plugins/pydevd.py +0 -1
  40. omlish/testing/pytest/plugins/repeat.py +0 -1
  41. omlish/testing/pytest/plugins/skips.py +0 -1
  42. omlish/testing/pytest/plugins/spacing.py +0 -1
  43. omlish/testing/pytest/plugins/switches.py +0 -1
  44. omlish/text/delimit.py +0 -1
  45. {omlish-0.0.0.dev246.dist-info → omlish-0.0.0.dev248.dist-info}/METADATA +1 -1
  46. {omlish-0.0.0.dev246.dist-info → omlish-0.0.0.dev248.dist-info}/RECORD +50 -50
  47. omlish/sql/queries/rendering2.py +0 -248
  48. {omlish-0.0.0.dev246.dist-info → omlish-0.0.0.dev248.dist-info}/LICENSE +0 -0
  49. {omlish-0.0.0.dev246.dist-info → omlish-0.0.0.dev248.dist-info}/WHEEL +0 -0
  50. {omlish-0.0.0.dev246.dist-info → omlish-0.0.0.dev248.dist-info}/entry_points.txt +0 -0
  51. {omlish-0.0.0.dev246.dist-info → omlish-0.0.0.dev248.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,12 @@
1
- omlish/.manifests.json,sha256=vQTAIvR8OblSq-uP2GUfnbei0RnmAnM5j0T1-OToh9E,8253
2
- omlish/__about__.py,sha256=FBmEuLfID7wGs4KGaP2kpxM0kLF3oWiG6kw4s45Nwk8,3380
1
+ omlish/.manifests.json,sha256=x26AIwDzScUvnX-p4xlq6Zc5QYrAo0Vmgf1qHc1KL_M,8253
2
+ omlish/__about__.py,sha256=vdUCdVH6QPJp23FjKOh9VC2Pxz8yofiz_tArVxvhOyU,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
6
6
  omlish/check.py,sha256=THqm6jD1a0skAO5EC8SOVg58yq96Vk5wcuruBkCYxyU,2016
7
7
  omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
8
8
  omlish/defs.py,sha256=9uUjJuVIbCBL3g14fyzAp-9gH935MFofvlfOGwcBIaM,4913
9
- omlish/dynamic.py,sha256=kIZokHHid8a0pIAPXMNiXrVJvJJyBnY49WP1a2m-HUQ,6525
9
+ omlish/dynamic.py,sha256=xQ8LlOt_fUPApg-yz7-gNq8JdVgTqJ0_R6vhJq2WbpI,6522
10
10
  omlish/libc.py,sha256=8K4c66YV1ziJerl5poAAYCmsV-VSsHkT3EHhPW04ufg,15639
11
11
  omlish/metadata.py,sha256=q8UG-fpcXhEF7BZnhVikIE_IHyud9-8YT8iv646zU2s,3589
12
12
  omlish/outcome.py,sha256=ABIE0zjjTyTNtn-ZqQ_9_mUzLiBQ3sDAyqc9JVD8N2k,7852
@@ -142,14 +142,14 @@ omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,
142
142
  omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
143
143
  omlish/collections/frozen.py,sha256=jQppK1pyQ3e_aAvw8OEKfnr7b0OB4RI5Qr1g9xXTZaQ,4137
144
144
  omlish/collections/hasheq.py,sha256=SQdVICLZWKkYu4vUXrfmWBXO3i-jx01iM9IInDWkKfU,3664
145
- omlish/collections/identity.py,sha256=BTXn3r3ZprHluIl1DIXC9BYCmjak0BWhN7L6SxXo9ws,2687
145
+ omlish/collections/identity.py,sha256=1kdiByfzKHGQZgUg1vkwILt8oPPQgerGh0_HbLDdqKw,2835
146
146
  omlish/collections/mappings.py,sha256=fCHQatlAstiZkWZiyIlOw637Yep7ce79EPPbJcWHHUA,2784
147
147
  omlish/collections/ordered.py,sha256=tUAl99XHbSbzn7Hdh99jUBl27NcC2J7ZTI67slTMe5M,2333
148
148
  omlish/collections/ranked.py,sha256=rg6DL36oOUiG5JQEAkGnT8b6f9mSndQlIovtt8GQj_w,2229
149
149
  omlish/collections/unmodifiable.py,sha256=-zys__n6L7liWzhmHAIvfxprq7cUE5HoR3foGvXc_7I,4748
150
150
  omlish/collections/utils.py,sha256=Q0lHhNDokVxdOvApmu1QX5fABYwbn1ATiIwp194Ur_E,2889
151
151
  omlish/collections/cache/__init__.py,sha256=D1gO71VcwxFTZP9gAc9isHfg_TEdalwhsJcgGLvS9hg,233
152
- omlish/collections/cache/descriptor.py,sha256=t-1Gh4DTABDuNmeDJlpoW4LV3gi_uSlBd9ZfBINfYCM,5023
152
+ omlish/collections/cache/descriptor.py,sha256=aa-OOChFAJLMPHjuc8YPCvVsE0INntPxxXoq-kl4jtg,5021
153
153
  omlish/collections/cache/impl.py,sha256=ySRU9UJG7jH9VPvuXdwZQ_rSqrleY-1mtie5Ml738wY,14755
154
154
  omlish/collections/cache/types.py,sha256=yNjwd6CGyTJQdxN2CQxFqqBAlcs1Z7vvNV-aU1K7p8E,685
155
155
  omlish/collections/persistent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -160,8 +160,8 @@ omlish/collections/sorted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
160
160
  omlish/collections/sorted/skiplist.py,sha256=eU_cYQVnT-EZxv_dN9PYQZdOP0km5usEcOQRiJKL7Rw,5986
161
161
  omlish/collections/sorted/sorted.py,sha256=euHJan3FqTYSCJGsVcYYRV-yhAAQ5_htnjymnNoVHRE,3319
162
162
  omlish/concurrent/__init__.py,sha256=9p-s8MvBEYDqHIoYU3OYoe-Nni22QdkW7nhZGEukJTM,197
163
- omlish/concurrent/executors.py,sha256=FYKCDYYuj-OgMa8quLsA47SfFNX3KDJvRENVk8NDsrA,1292
164
- omlish/concurrent/futures.py,sha256=J2s9wYURUskqRJiBbAR0PNEAp1pXbIMYldOVBTQduQY,4239
163
+ omlish/concurrent/executors.py,sha256=mF-rjJWzNFxwB1-_H7rHuwoImpl4FtNM6W3wcqM3NEE,1291
164
+ omlish/concurrent/futures.py,sha256=870tx8ELI8THvMnTrQoYIlEFKO9hM4KUrlehckJqKBU,4238
165
165
  omlish/concurrent/threadlets.py,sha256=JfirbTDJgy9Ouokz_VmHeAAPS7cih8qMUJrN-owwXD4,2423
166
166
  omlish/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  omlish/configs/all.py,sha256=kziwjzUBkf8AT0w7Pq7JX2jtkQVOQ5R1wJyn6hfTN5k,1055
@@ -195,7 +195,7 @@ omlish/dataclasses/impl/__init__.py,sha256=zqGBC5gSbjJxaqG_zS1LL1PX-zAfhIua8UqOE
195
195
  omlish/dataclasses/impl/api.py,sha256=RhU4f50GVdn-dxilia8NA3F7VIm2R5z78pFfpIVXPRQ,6635
196
196
  omlish/dataclasses/impl/as_.py,sha256=CD-t7hkC1EP2F_jvZKIA_cVoDuwZ-Ln_xC4fJumPYX0,2598
197
197
  omlish/dataclasses/impl/copy.py,sha256=Tn8_n6Vohs-w4otbGdubBEvhd3TsSTaM3EfNGdS2LYo,591
198
- omlish/dataclasses/impl/descriptors.py,sha256=rEYE1Len99agTQCC25hSPMnM19BgPr0ZChABGi58Fdk,2476
198
+ omlish/dataclasses/impl/descriptors.py,sha256=jSYNkKdy2rKddGpQqRwNuhw-ggpcvp_SWHpLwIWPOzc,2474
199
199
  omlish/dataclasses/impl/exceptions.py,sha256=-vqxZmfXVflymVuiM553XTlJProse5HEMktTpfdPCIY,1275
200
200
  omlish/dataclasses/impl/fields.py,sha256=8p7Uzvr0C4yBR0NqHzkq--OY2HXFQlGsb1HC3K17-7k,6985
201
201
  omlish/dataclasses/impl/frozen.py,sha256=x87DSM8FIMZ3c_BIUE8NooCkExFjPsabeqIueEP5qKs,2988
@@ -231,13 +231,14 @@ omlish/diag/_pycharm/runhack.py,sha256=JFz4GVN4AXndJo38iwnK5X_vH2MS6wyO8YmVZss5Y
231
231
  omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
232
232
  omlish/diag/replserver/__main__.py,sha256=LmU41lQ58bm1h4Mx7S8zhE_uEBSC6kPcp9mn5JRpulA,32
233
233
  omlish/diag/replserver/console.py,sha256=XzBDVhYlr8FY6ym4OwoaIHuFOHnGK3dTYlMDIOMUUlA,7410
234
- omlish/diag/replserver/server.py,sha256=Hnfp-aFgUtkWGyVXjWJ33HhhBrrtZnJu5FZRV6MTKoI,5375
234
+ omlish/diag/replserver/server.py,sha256=pqJZXKnD-Cc03hnL_FNqGYaW9kH-IM3e11vCyDAcBD8,5374
235
235
  omlish/dispatch/__init__.py,sha256=GsiGJ91NKiQptSROtnCSkrZExBkvfDwYvdoTu5dBqF0,117
236
- omlish/dispatch/_dispatch2.py,sha256=v3tCNyxGpOwY8qTwdp54TlM8mG6OVwtQoUZfYJ_griU,1756
237
- omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc,2608
238
- omlish/dispatch/dispatch.py,sha256=p3-RqBf9RKZaNub1FMGHZkETewF43mU_rv4fYD_ERqU,4090
239
- omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
240
- omlish/dispatch/methods.py,sha256=Sg134xzG41-__czfnWdzDlXdsxVt7ELOq90N2E6NSzI,5501
236
+ omlish/dispatch/_dispatch2.py,sha256=70k1tKKvuhxtAu6v4skECfHKIKVWrmlt7G_JKLUsKEs,1966
237
+ omlish/dispatch/_dispatch3.py,sha256=9Zjd7bINAC3keiaBdssc4v5dY0-8OI6XooV2DR9U7Z0,2818
238
+ omlish/dispatch/dispatch.py,sha256=KA5l49AiGLRjp4J7RDJW9RiDp9WUD1ewR1AOPEF8g38,3062
239
+ omlish/dispatch/functions.py,sha256=8Qvj62XKn9SKfiqoVQdBD3wVRE4JUWpZDqs0oouuDIw,1519
240
+ omlish/dispatch/impls.py,sha256=f7uLDjtDcykx_iFYRSmIrQYbVmXlaqXZ3qFIuOTUiD8,1967
241
+ omlish/dispatch/methods.py,sha256=dr8xQo-zVRckIo_V2Wp8Reqor3NE6APuzomUfsSBGdk,5498
241
242
  omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
242
243
  omlish/docker/all.py,sha256=xXRgJgLGPwAtr7bDMJ_Dp9jTfOwfGvohNhc6LsoELJc,514
243
244
  omlish/docker/cli.py,sha256=gtb9kitVfGnd4cr587NsVVk8D5Ok5y5SAsqD_SwGrSA,2565
@@ -258,7 +259,7 @@ omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
258
259
  omlish/formats/props.py,sha256=auCv-Jx79KGlWfyG1-Qo0ou-Ex0W_mF3r_lDFdsVkWI,18920
259
260
  omlish/formats/repr.py,sha256=kYrNs4o-ji8nOdp6u_L3aMgBMWN1ZAZJSAWgQQfStSQ,414
260
261
  omlish/formats/xml.py,sha256=VJfqHR60dhAtjeG8WXFMozFqesTBSGvv264d67eDFXc,3514
261
- omlish/formats/yaml.py,sha256=ffOwGnLA6chdiFyaS7X0TBMGmHG9AoGudzKVWfQ1UOs,7389
262
+ omlish/formats/yaml.py,sha256=jGPQlTE0vSV-p0O7TJRNlf6o1uq4gx8PrHZe1ApJ_o8,7386
262
263
  omlish/formats/ini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
263
264
  omlish/formats/ini/codec.py,sha256=omuFg0kiDksv8rRlWd_v32ebzEcKlgmiPgGID3bRi2M,631
264
265
  omlish/formats/ini/sections.py,sha256=7wYyZdVTQbMPFpjQEACKJfAEPzUBrogINsrvFgxJoZ0,1015
@@ -278,7 +279,7 @@ omlish/formats/json/backends/orjson.py,sha256=wR8pMGFtkhZGHcNVk7vNYUnv8lUapdK89p
278
279
  omlish/formats/json/backends/std.py,sha256=PM00Kh9ZR2XzollHMEvdo35Eml1N-zFfRW-LOCV5ftM,3085
279
280
  omlish/formats/json/backends/ujson.py,sha256=BNJCU4kluGHdqTUKLJEuHhE2m2TmqR7HEN289S0Eokg,2278
280
281
  omlish/formats/json/stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
281
- omlish/formats/json/stream/build.py,sha256=MSxgreWSfI5CzNAdgQrArZ0yWqDsaHl-shI_jmjLDms,2505
282
+ omlish/formats/json/stream/build.py,sha256=EveVyYjc3lbVQRs8Y5uMGEKp0E_gJAUR5bd2ToSVnSU,2533
282
283
  omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
283
284
  omlish/formats/json/stream/lex.py,sha256=ItsWvtl5SZH-HwQtPy8Cpf4nszqDzvUTdIOEmSRiZ-E,6807
284
285
  omlish/formats/json/stream/parse.py,sha256=JuYmXwtTHmQJTFKoJNoEHUpCPxXdl_gvKPykVXgED34,6208
@@ -304,13 +305,13 @@ omlish/funcs/match.py,sha256=gMLZn1enNiFvQaWrQubY300M1BrmdKWzeePihBS7Ywc,6153
304
305
  omlish/funcs/pairs.py,sha256=VCkZjDmJGtR76BsejsHNfb4TcpHCtkkmak-zWDFchAo,3904
305
306
  omlish/funcs/pipes.py,sha256=E7Sz8Aj8ke_vCs5AMNwg1I36kRdHVGTnzxVQaDyn43U,2490
306
307
  omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
307
- omlish/graphs/dags.py,sha256=zp55lYgUdRCxmADwiGDHeehMJczZFA_tzdWqy77icOk,3047
308
- omlish/graphs/domination.py,sha256=oCGoWzWTxLwow0LDyGjjEf2AjFiOiDz4WaBtczwSbsQ,7576
309
- omlish/graphs/trees.py,sha256=OgGDnCJKfpOeWgDJPSkuVEoeYp72o06jpm0jwUB96Xc,8189
308
+ omlish/graphs/dags.py,sha256=7ee4GfzHcAVUA5-LMJyT7odwxoooh4cTwz4H8qi8Anc,3045
309
+ omlish/graphs/domination.py,sha256=N-rCzB3uAug964Tx4YGew1Nuh7GvzGjA598GcOj-Who,7571
310
+ omlish/graphs/trees.py,sha256=IA2lMbPec-4UrkYFUjUqqxAKeww6YMV35xj8uQhILYk,8188
310
311
  omlish/graphs/dot/__init__.py,sha256=Y1MZRQBZkcYyG1Tn7K2FhL8aYbm4v4tk6f5g9AqEkUw,359
311
- omlish/graphs/dot/items.py,sha256=OWPf0-hjBgS1uyy2QgAEn4IgFHJcEg7sHVWeTx1ghZc,4083
312
+ omlish/graphs/dot/items.py,sha256=7c-lvB2pp6LKWDI2di-S6Zh4vlUZt97eJeNQzuGilGc,4082
312
313
  omlish/graphs/dot/make.py,sha256=RN30gHfJPiXx5Q51kbDdhVJYf59Fr84Lz9J-mXRt9sI,360
313
- omlish/graphs/dot/rendering.py,sha256=2UgXvMRN4Z9cfIqLlC7Iu_8bWbwUDEL4opHHkFfSqTw,3630
314
+ omlish/graphs/dot/rendering.py,sha256=eN1NufiUaKFeRxRTOfIT-oLTg1YQCuPybBx3AmrhdBw,3629
314
315
  omlish/graphs/dot/utils.py,sha256=_FMwn77WfiiAfLsRTOKWm4IYbNv5kQN22YJ5psw6CWg,801
315
316
  omlish/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
316
317
  omlish/http/all.py,sha256=OqCovZi_jv1Mnk975idaXA8FCGy4laoQIvNZ3hdKpRQ,722
@@ -336,7 +337,7 @@ omlish/http/coro/server.py,sha256=30FTcJG8kuFeThf0HJYpTzMZN-giLTBP7wr5Wl3b9X0,18
336
337
  omlish/http/coro/simple.py,sha256=inWA_ss6Nz5Rqmy4dL9_SGah4anYoDecDTRQqVIGYeY,3200
337
338
  omlish/http/coro/sockets.py,sha256=rtpZZ-XCOfC5tXr4Fmo1HSn-8f5nxfIOlJaPUkQeDyU,1654
338
339
  omlish/inject/__init__.py,sha256=n0RC9UDGsBQQ39cST39-XJqJPq2M0tnnh9yJubW9azo,1891
339
- omlish/inject/binder.py,sha256=DAbc8TZi5w8Mna0TUtq0mT4jeDVA7i7SlBtOFrh2swc,4185
340
+ omlish/inject/binder.py,sha256=3-6KMOcSgFE5bvthy3YUrRzCX5w7YSGmdJ3Tv2yXZGw,4022
340
341
  omlish/inject/bindings.py,sha256=pLXn2U3kvmAS-68IOG-tr77DbiI-wp9hGyy4lhG6_H8,525
341
342
  omlish/inject/eagers.py,sha256=5AkGYuwijG0ihsH9NSaZotggalJ5_xWXhHE9mkn6IBA,329
342
343
  omlish/inject/elements.py,sha256=npppGgYBQja0oPHkdBDmRhpm3md1mZT1FVcIQ--W2qI,1398
@@ -395,18 +396,18 @@ omlish/io/fdio/kqueue.py,sha256=YgGBQibkAUYODYDiGl7Enjtx1oQsJXuDsBLBXgqlLQw,3832
395
396
  omlish/io/fdio/manager.py,sha256=q4wWf7nKrNtjx6yPEvrVnFt4UtK_BTvVlquEGw7poEo,1250
396
397
  omlish/io/fdio/pollers.py,sha256=yNadAt3W5wd90PFmd3vD77bq5QwoVb2A6SM2JjZpKRs,5507
397
398
  omlish/iterators/__init__.py,sha256=yMavf5FofiS1EU4UFuWPXiFZ03W0H-y7MuMxW8FUaEE,358
398
- omlish/iterators/iterators.py,sha256=ghI4dO6WPyyFOLTIIMaHQ_IOy2xXaFpGPqveZ5YGIBU,3158
399
+ omlish/iterators/iterators.py,sha256=iTQQwBE6Wzoy36dnbPIws17zbjE3zNN4KwVw4Fzh-gY,3154
399
400
  omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
400
401
  omlish/iterators/tools.py,sha256=Pi4ybXytUXVZ3xwK89xpPImQfYYId9p1vIFQvVqVLqA,2551
401
402
  omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
402
- omlish/lang/__init__.py,sha256=7QEQKrw1ojkB3kwFQrh-p7EH-UQI7sMemtxNX2OTTJI,4685
403
+ omlish/lang/__init__.py,sha256=7UEkGV5eWdCQRSqWvr3QNOfLKjkzLkF_ngm6fK0SUTk,4700
403
404
  omlish/lang/attrs.py,sha256=fofCKN0X8TMu1yGqHpLpNLih9r9HWl3D3Vn3b6O791w,3891
404
405
  omlish/lang/clsdct.py,sha256=sJYadm-fwzti-gsi98knR5qQUxriBmOqQE_qz3RopNk,1743
405
406
  omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
406
- omlish/lang/collections.py,sha256=I0x5BI_cjTbL-uunoKFWA_RfNEz3gyuPkYIajdTH1CA,1236
407
+ omlish/lang/collections.py,sha256=aGi0j6VzVe2nz4l357Y4RD5_XNl8OJbmM5qM6BclrrY,1895
407
408
  omlish/lang/contextmanagers.py,sha256=UPH6daYwSP9cH5AfSVsJyEHk1UURMGhVPM5ZRhp_Hvw,7576
408
409
  omlish/lang/datetimes.py,sha256=ehI_DhQRM-bDxAavnp470XcekbbXc4Gdw9y1KpHDJT0,223
409
- omlish/lang/descriptors.py,sha256=mZ2h9zJ__MMpw8hByjRbAiONcwfVb6GD0btNnVi8C5w,6573
410
+ omlish/lang/descriptors.py,sha256=zBtgO9LjdSTGHNUgiIqswh78WOVoGH6KzS0NbgB1Wls,6572
410
411
  omlish/lang/exceptions.py,sha256=qJBo3NU1mOWWm-NhQUHCY5feYXR3arZVyEHinLsmRH4,47
411
412
  omlish/lang/functions.py,sha256=0ql9EXA_gEEhvUVzMJCjVhEnVtHecsLKmfmAXuQqeGY,4388
412
413
  omlish/lang/generators.py,sha256=5LX17j-Ej3QXhwBgZvRTm_dq3n9veC4IOUcVmvSu2vU,5243
@@ -429,10 +430,10 @@ omlish/lang/classes/simple.py,sha256=XQ8b86WvQA0qtSYqlbMOJS7tHgE8sv9onda33uQmbkM
429
430
  omlish/lang/classes/virtual.py,sha256=z0MYQD9Q5MkX8DzF325wDB4J9XoYbsB09jZ1omC62To,3366
430
431
  omlish/lifecycles/__init__.py,sha256=1FjYceXs-4fc-S-C9zFYmc2axHs4znnQHcJVHdY7a6E,578
431
432
  omlish/lifecycles/abstract.py,sha256=70CQyZy-c9a2o0ZJxPeUT7eYjWZTBrp2HpUBnrHdAOM,1109
432
- omlish/lifecycles/base.py,sha256=ceXrNSzuv7iiTlX96UI1fvsQ70OgOmZl-UisDPyA3NA,1394
433
- omlish/lifecycles/contextmanagers.py,sha256=W0trOo6atbPSCoswmtUVOayAYnJ722qHBgda1oYxUEc,2073
434
- omlish/lifecycles/controller.py,sha256=ToYNJKH1Mxr7HyyF1cJrrec8NV_m84jrcvTMX0V5emM,3464
435
- omlish/lifecycles/manager.py,sha256=Au66KaO-fI-SEJALaPUJsCHYW2GE20xextk1wKn2BEU,5445
433
+ omlish/lifecycles/base.py,sha256=JSW5rFVCWLLVx_ASe4G49MeuKI1yN8kXcdh9U94kLYo,1393
434
+ omlish/lifecycles/contextmanagers.py,sha256=gojUTE1hjoP9hjXRPIgWFVwQcSIuOcmkXGLA5JEuYBA,2072
435
+ omlish/lifecycles/controller.py,sha256=p5S4_OZQ-h5elI803D5_bxbIn9MKIGRe6ECG4XhBXXA,3462
436
+ omlish/lifecycles/manager.py,sha256=x4wsVUtrjgnLKuBn0Wd4QmULCmzMu6LiMUuHjXH7MBQ,5444
436
437
  omlish/lifecycles/states.py,sha256=zqMOU2ZU-MDNnWuwauM3_anIAiXM8LoBDElDEraptFg,1292
437
438
  omlish/lifecycles/transitions.py,sha256=qQtFby-h4VzbvgaUqT2NnbNumlcOx9FVVADP9t83xj4,1939
438
439
  omlish/lite/__init__.py,sha256=ISLhM4q0LR1XXTCaHdZOZxBRyIsoZqYm4u0bf1BPcVk,148
@@ -515,13 +516,13 @@ omlish/marshal/singular/numbers.py,sha256=12a8HxjDHMTgtJTxO7VY_h5llaPyYB-QEPY09d
515
516
  omlish/marshal/singular/primitives.py,sha256=EZi2AIi_Onw1pekAiL4ujz4w-ASuOGWCu4MUIE_dCnk,1299
516
517
  omlish/marshal/singular/uuids.py,sha256=rZoE6NE5z6x_ZRmVMjjR2iK7CR8ijfDOvhMKgmm8Mgk,918
517
518
  omlish/marshal/trivial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
518
- omlish/marshal/trivial/any.py,sha256=42XmUbX_AaiHGFwS2QmA-huPCcZ1_jzVyrnBUYVm21U,787
519
+ omlish/marshal/trivial/any.py,sha256=m2eywIbOU3YpR9a33vE2djSnbcpYGDQVwekXXokF4zc,786
519
520
  omlish/marshal/trivial/forbidden.py,sha256=7buKYamev2T3Q4RAhCBRzHO700vs8biH0--V5iBDqx4,874
520
521
  omlish/marshal/trivial/nop.py,sha256=41bpwsLGeDGqIwzZ7j88lbc4wIYh0EcPROhCU98mQxo,466
521
522
  omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
522
- omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
523
+ omlish/math/bits.py,sha256=LC3dTgrvodNbfxy9dvlya61eQuDEy0azzQLCvEbFHj4,3476
523
524
  omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
524
- omlish/math/stats.py,sha256=MegzKVsmv2kra4jDWLOUgV0X7Ee2Tbl5u6ql1v4-dEY,10053
525
+ omlish/math/stats.py,sha256=C700sib97E-IywlNKoByHFEtgA51n7Lffg7d3WSO4js,10052
525
526
  omlish/multiprocessing/__init__.py,sha256=jwlWGOaSGcX8DkzyZwJ49nfkHocWWeKgKb7kMpgcj_Y,485
526
527
  omlish/multiprocessing/proxies.py,sha256=bInhGds2rv6xT9q3qRMlZuSXFAjwfspkiohXZ36aUpY,484
527
528
  omlish/multiprocessing/spawn.py,sha256=sTvPLIJGYnjjI6ASqhFzHF-97tCnaOXX7u7s-33SUMw,1875
@@ -602,7 +603,7 @@ omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU
602
603
  omlish/specs/jmespath/__init__.py,sha256=9tsrquw1kXe1KAhTP3WeL0GlGBiTguQVxsC-lUYTWP4,2087
603
604
  omlish/specs/jmespath/__main__.py,sha256=wIXm6bs08etNG_GZlN2rBkADPb0rKfL2HSkm8spnpxw,200
604
605
  omlish/specs/jmespath/ast.py,sha256=XhcUGodHIdsY3-hVZEfpeW6LBehRjLbxVFXkMfZhRdk,5386
605
- omlish/specs/jmespath/cli.py,sha256=3KZwgbPXjJF_yd8H40f0vCNTNkcYLGbV7OQjp1etOdg,2182
606
+ omlish/specs/jmespath/cli.py,sha256=6lCzF3wtFvcPGFjZuq9erypFTpX2Xzu4XtKSbV1meG4,2162
606
607
  omlish/specs/jmespath/exceptions.py,sha256=Co1HiUBPFNwFgZY3FV_ayuZoSgZIAmDcImImxauYNxc,4435
607
608
  omlish/specs/jmespath/functions.py,sha256=lE_MlW5rDQirDCE9HtcAG-17kuHhH36RaPaQfk97xDY,22595
608
609
  omlish/specs/jmespath/lexer.py,sha256=hlPGCXPzGhd9ySj-z2cGTbyC9z3e0Io78IMYJZSEwNk,12647
@@ -670,8 +671,7 @@ omlish/sql/queries/names.py,sha256=4sDvgRobMEt_6mDeuYVbCqHzLCOwpXUdEyyB4-QjxKo,1
670
671
  omlish/sql/queries/ops.py,sha256=B7IDfjr2DW5LJhWoNaY1WW90BJhe5ZtmxIELhWXbW-0,129
671
672
  omlish/sql/queries/params.py,sha256=iR8tnetkZFWY378iUbPe08d86g-Wf1J3YqfZr_KhIwQ,1175
672
673
  omlish/sql/queries/relations.py,sha256=7YrEC9IjoVpRGLAFKRSRsHHnTmx-g7hBNXsOgP2HOuI,2998
673
- omlish/sql/queries/rendering.py,sha256=8naCMwxVEFAJaMP5m2bf6kCyhvwFZhXiWYEma51fQ4k,6813
674
- omlish/sql/queries/rendering2.py,sha256=S7BD7i2tMEWdxOtvw-udWfk5nei-vV3hUghR7qEIL-I,6469
674
+ omlish/sql/queries/rendering.py,sha256=3oSwzx713J81V0JM4FnVgNpeHjaenoWrds41M9j__Dg,7328
675
675
  omlish/sql/queries/selects.py,sha256=RFySZ9sb-nE29QrLLbQ7JYZW_V_ifaFTcl-RQTgQncY,1369
676
676
  omlish/sql/queries/std.py,sha256=J2ZDfDyLzRm8q5-TLAN6I_qjhs-7RpfW23yuCYYLf5k,643
677
677
  omlish/sql/queries/stmts.py,sha256=pBqwD7dRlqMu6uh6vR3xaWOEgbZCcFWbOQ9ryYd17T4,441
@@ -691,7 +691,7 @@ omlish/subprocesses/sync.py,sha256=HKmKM99_Y7tkJRg_n5onXrw41IZt5M5fqU0281LY-mo,3
691
691
  omlish/subprocesses/utils.py,sha256=MJb6hvKhZceTmBeFVqlc5oM7rDxWkUzSzK9nKvbIvM8,396
692
692
  omlish/subprocesses/wrap.py,sha256=v7vrbDhl_FVWESnXIOJ3oGtE3Y-OHQa5sH3MTtFTBUE,504
693
693
  omlish/term/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
694
- omlish/term/codes.py,sha256=gqouA7KDyGzyCmmu8ejGhT_8XJGsejdTQh2pSCMbWAQ,6150
694
+ omlish/term/codes.py,sha256=d8oii_9UJDm_TAowXYH3XDckX0XNBf2kiEPJKkVMMow,6149
695
695
  omlish/term/progressbar.py,sha256=TiwdmPSMa5jQj35i1NQURTWQGy4eWUNx_XiPM38JtvQ,3184
696
696
  omlish/term/vt100/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
697
697
  omlish/term/vt100/c.py,sha256=cAhDKXI81PZRtFmTotfad3HZGREP1QnOlWYoAw6v-Fw,3532
@@ -707,13 +707,13 @@ omlish/testing/pytest/inject/harness.py,sha256=_Qf7lLcYc_dpauYOE68u_a65jPCFWmQUY
707
707
  omlish/testing/pytest/plugins/__init__.py,sha256=ys1zXrYrNm7Uo6YOIVJ6Bd3dQo6kv387k7MbTYlqZSI,467
708
708
  omlish/testing/pytest/plugins/_registry.py,sha256=IK04KlBgiOJxKAyCCgjpX2R-9tE-btalYJkgjLc8Te8,77
709
709
  omlish/testing/pytest/plugins/depskip.py,sha256=xithY-OMtjwhv8mcRNkv-WI_PSQtHldQ8H1s60MIXkk,2673
710
- omlish/testing/pytest/plugins/logging.py,sha256=Y1I_3DiiuDSynObkm8bNPZxdvljUWXbqD6YUM5uI34o,391
710
+ omlish/testing/pytest/plugins/logging.py,sha256=ZUy4sQOMYroZubUnjYe4_KC1kqukgBbA84VjO0NwfsA,390
711
711
  omlish/testing/pytest/plugins/managermarks.py,sha256=IzkspjT8-ToPIlHZs9cHt6RYbm51poJLjYVvkFPbJhE,1300
712
- omlish/testing/pytest/plugins/pydevd.py,sha256=AXtN83M39ZKJ4VH3MJEhvPnAmYzD5u1r8ehz-0om50Q,842
713
- omlish/testing/pytest/plugins/repeat.py,sha256=flSQzE9GFOWksVKz-mUGnpxJpv3yRqn1G4K8pW7JHs0,498
714
- omlish/testing/pytest/plugins/skips.py,sha256=EoZDg1uWccgbAegmzqI85c7RliycD1e2J4Y7vfDRhwM,1041
715
- omlish/testing/pytest/plugins/spacing.py,sha256=JQQhi9q3c523Ro1a_K_9RGAb7HotiO74N8bYX2VESFE,707
716
- omlish/testing/pytest/plugins/switches.py,sha256=CflHe6gLhkLt_9OcAmzskuZsrhZhwOuL_bIdogibARc,3815
712
+ omlish/testing/pytest/plugins/pydevd.py,sha256=5moE64LrNRV6gKRaeCuONDiwuh-4UFxJPWD9K9PR8GM,841
713
+ omlish/testing/pytest/plugins/repeat.py,sha256=jiZCI-17042jBvUEbZCxNwqWtr7s3EhTBSeSHh_Uz4E,497
714
+ omlish/testing/pytest/plugins/skips.py,sha256=eMir_n777Kk2BvOwjQzRROKL4iAMYKSHFwWCHJ-bdPI,1040
715
+ omlish/testing/pytest/plugins/spacing.py,sha256=tzq-L-exegHe2BImumkYIsVcUwpUUhLJJOuSrsKDuCU,706
716
+ omlish/testing/pytest/plugins/switches.py,sha256=U8tDP-WSI2yjxwp4hocgZNJEmEv8UO8_CFEv8mXWH3A,3814
717
717
  omlish/testing/pytest/plugins/utils.py,sha256=L5C622UXcA_AUKDcvyh5IMiRfqSGGz0McdhwZWvfMlU,261
718
718
  omlish/testing/pytest/plugins/asyncs/__init__.py,sha256=TTNhFmP_krug1973sq_bpWBTIvg68-1nbuVLSs92Z6k,41
719
719
  omlish/testing/pytest/plugins/asyncs/consts.py,sha256=0NOCkzV43dOu3u97BqYMQ4mPG8JuFncpWibkOZpCqX4,55
@@ -727,16 +727,16 @@ omlish/testing/pytest/plugins/asyncs/backends/trio.py,sha256=xty9TR7-Kk6n0cdOqEr
727
727
  omlish/testing/pytest/plugins/asyncs/backends/trio_asyncio.py,sha256=VcGVwf4V-1ZFK_70FrFS9b11EU1dOy1ozhhIDXGNSEo,3169
728
728
  omlish/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
729
729
  omlish/text/asdl.py,sha256=AS3irh-sag5pqyH3beJif78PjCbOaFso1NeKq-HXuTs,16867
730
- omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
730
+ omlish/text/delimit.py,sha256=Y0ID9Y9nfgQu3tYCiMS3hLa-ugA2cc-29PV4fF1343g,4927
731
731
  omlish/text/glyphsplit.py,sha256=kqqjglRdxGo0czYZxOz9Vi8aBmVsCOq8h6lPwRA5xe0,3803
732
732
  omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
733
733
  omlish/text/mangle.py,sha256=kfzFLfvepH-chl1P89_mdc5vC4FSqyPA2aVtgzuB8IY,1133
734
734
  omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
735
735
  omlish/text/parts.py,sha256=JkNZpyR2tv2CNcTaWJJhpQ9E4F0yPR8P_YfDbZfMtwQ,6182
736
736
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
737
- omlish-0.0.0.dev246.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
738
- omlish-0.0.0.dev246.dist-info/METADATA,sha256=da_rz6vvTRxwUkKvXh0ZlBAklAosQv_ZvmsnuiTE_E8,4176
739
- omlish-0.0.0.dev246.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
740
- omlish-0.0.0.dev246.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
741
- omlish-0.0.0.dev246.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
742
- omlish-0.0.0.dev246.dist-info/RECORD,,
737
+ omlish-0.0.0.dev248.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
738
+ omlish-0.0.0.dev248.dist-info/METADATA,sha256=2MDwQ1CC7YMd2LkHobPoRqjE_TqGmuPaic_MlQcnojI,4176
739
+ omlish-0.0.0.dev248.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
740
+ omlish-0.0.0.dev248.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
741
+ omlish-0.0.0.dev248.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
742
+ omlish-0.0.0.dev248.dist-info/RECORD,,
@@ -1,248 +0,0 @@
1
- """
2
- TODO:
3
- - minimal parens
4
- - text.parts
5
- - QuoteStyle
6
- - ParamStyle
7
-
8
- ==
9
-
10
- def needs_parens(self, e: Expr) -> bool:
11
- if isinstance(e, (Literal, Ident, Name)):
12
- return True
13
- elif isinstance(e, Expr):
14
- return False
15
- else:
16
- raise TypeError(e)
17
- """
18
- import dataclasses as dc
19
- import typing as ta
20
-
21
- from ... import dispatch
22
- from ... import lang
23
- from ...text import parts as tp
24
- from ..params import ParamStyle
25
- from ..params import make_params_preparer
26
- from .base import Node
27
- from .binary import Binary
28
- from .binary import BinaryOp
29
- from .binary import BinaryOps
30
- from .exprs import Literal
31
- from .exprs import NameExpr
32
- from .idents import Ident
33
- from .inserts import Insert
34
- from .inserts import Values
35
- from .multi import Multi
36
- from .multi import MultiKind
37
- from .names import Name
38
- from .params import Param
39
- from .relations import Join
40
- from .relations import JoinKind
41
- from .relations import Table
42
- from .selects import Select
43
- from .selects import SelectItem
44
- from .unary import Unary
45
- from .unary import UnaryOp
46
- from .unary import UnaryOps
47
-
48
-
49
- @dc.dataclass(frozen=True)
50
- class RenderedQuery(lang.Final):
51
- t: tp.Part
52
- args: lang.Args
53
-
54
-
55
- class Renderer(lang.Abstract):
56
- def __init__(
57
- self,
58
- *,
59
- param_style: ParamStyle | None = None,
60
- ) -> None:
61
- super().__init__()
62
-
63
- self._param_style = param_style if param_style is not None else self.default_param_style
64
-
65
- self._params_preparer = make_params_preparer(self._param_style)
66
-
67
- default_param_style: ta.ClassVar[ParamStyle] = ParamStyle.PYFORMAT
68
-
69
- def args(self) -> lang.Args:
70
- return self._params_preparer.prepare()
71
-
72
- @dispatch.method
73
- def render(self, o: ta.Any) -> tp.Part:
74
- raise TypeError(o)
75
-
76
-
77
- class StdRenderer(Renderer):
78
- # parens
79
-
80
- NEEDS_PAREN_TYPES: ta.AbstractSet[type[Node]] = {
81
- Binary,
82
- # IsNull,
83
- # SelectExpr,
84
- }
85
-
86
- def needs_paren(self, node: Node) -> bool:
87
- return type(node) in self.NEEDS_PAREN_TYPES
88
-
89
- def paren(self, node: Node) -> tp.Part:
90
- return tp.Wrap(self.render(node)) if self.needs_paren(node) else self.render(node)
91
-
92
- # binary
93
-
94
- BINARY_OP_TO_STR: ta.ClassVar[ta.Mapping[BinaryOp, str]] = {
95
- BinaryOps.EQ: '=',
96
- BinaryOps.NE: '!=',
97
- BinaryOps.LT: '<',
98
- BinaryOps.LE: '<=',
99
- BinaryOps.GT: '>',
100
- BinaryOps.GE: '>=',
101
-
102
- BinaryOps.ADD: '+',
103
- BinaryOps.SUB: '-',
104
- BinaryOps.MUL: '*',
105
- BinaryOps.DIV: '/',
106
- BinaryOps.MOD: '%',
107
-
108
- BinaryOps.CONCAT: '||',
109
- }
110
-
111
- @Renderer.render.register
112
- def render_binary(self, o: Binary) -> tp.Part:
113
- return [
114
- self.paren(o.l),
115
- self.BINARY_OP_TO_STR[o.op],
116
- self.paren(o.r),
117
- ]
118
-
119
- # exprs
120
-
121
- @Renderer.render.register
122
- def render_literal(self, o: Literal) -> tp.Part:
123
- return repr(o.v)
124
-
125
- @Renderer.render.register
126
- def render_name_expr(self, o: NameExpr) -> tp.Part:
127
- return self.render(o.n)
128
-
129
- @Renderer.render.register
130
- def render_param(self, o: Param) -> tp.Part:
131
- return self._params_preparer.add(o.n if o.n is not None else id(o))
132
-
133
- # idents
134
-
135
- @Renderer.render.register
136
- def render_ident(self, o: Ident) -> tp.Part:
137
- return f'"{o.s}"'
138
-
139
- # inserts
140
-
141
- @Renderer.render.register
142
- def render_values(self, o: Values) -> tp.Part:
143
- return [
144
- 'values',
145
- tp.Wrap(tp.List([self.render(v) for v in o.vs])),
146
- ]
147
-
148
- @Renderer.render.register
149
- def render_insert(self, o: Insert) -> tp.Part:
150
- return [
151
- 'insert into',
152
- self.render(o.into),
153
- tp.Wrap(tp.List([self.render(c) for c in o.columns])),
154
- ]
155
-
156
- # multis
157
-
158
- MULTI_KIND_TO_STR: ta.ClassVar[ta.Mapping[MultiKind, str]] = {
159
- MultiKind.AND: 'and',
160
- MultiKind.OR: 'or',
161
- }
162
-
163
- @Renderer.render.register
164
- def render_multi(self, o: Multi) -> tp.Part:
165
- return tp.Wrap(tp.List(
166
- [self.render(e) for e in o.es],
167
- delimiter=' ' + self.MULTI_KIND_TO_STR[o.k], # FIXME: Part
168
- ))
169
-
170
- # names
171
-
172
- @Renderer.render.register
173
- def render_name(self, o: Name) -> tp.Part:
174
- out: list[tp.Part] = []
175
- for n, i in enumerate(o.ps):
176
- if n:
177
- out.append('.')
178
- out.append(self.render(i))
179
- return tp.Concat(out)
180
-
181
- # relations
182
-
183
- @Renderer.render.register
184
- def render_table(self, o: Table) -> tp.Part:
185
- return [
186
- self.render(o.n),
187
- *(['as', self.render(o.a)] if o.a is not None else []),
188
- ]
189
-
190
- JOIN_KIND_TO_STR: ta.ClassVar[ta.Mapping[JoinKind, str]] = {
191
- JoinKind.DEFAULT: 'join',
192
- JoinKind.INNER: 'inner join',
193
- JoinKind.LEFT: 'left join',
194
- JoinKind.LEFT_OUTER: 'left outer join',
195
- JoinKind.RIGHT: 'right join',
196
- JoinKind.RIGHT_OUTER: 'right outer join',
197
- JoinKind.FULL: 'full join',
198
- JoinKind.FULL_OUTER: 'full outer join',
199
- JoinKind.CROSS: 'cross join',
200
- JoinKind.NATURAL: 'natural join',
201
- }
202
-
203
- @Renderer.render.register
204
- def render_join(self, o: Join) -> tp.Part:
205
- return [
206
- self.render(o.l),
207
- self.JOIN_KIND_TO_STR[o.k],
208
- self.render(o.r),
209
- *(['on', self.render(o.c)] if o.c is not None else []),
210
- ]
211
-
212
- # selects
213
-
214
- @Renderer.render.register
215
- def render_select_item(self, o: SelectItem) -> tp.Part:
216
- return [
217
- self.render(o.v),
218
- *(['as', self.render(o.a)] if o.a is not None else []),
219
- ]
220
-
221
- @Renderer.render.register
222
- def render_select(self, o: Select) -> tp.Part:
223
- return [
224
- 'select',
225
- tp.List([self.render(i) for i in o.items]),
226
- *(['from', self.render(o.from_)] if o.from_ is not None else []),
227
- *(['where', self.render(o.where)] if o.where is not None else []),
228
- ]
229
-
230
- # unary
231
-
232
- UNARY_OP_TO_STR: ta.ClassVar[ta.Mapping[UnaryOp, tuple[str, str]]] = {
233
- UnaryOps.NOT: ('not ', ''),
234
- UnaryOps.IS_NULL: ('', ' is null'),
235
- UnaryOps.IS_NOT_NULL: ('', ' is not null'),
236
-
237
- UnaryOps.POS: ('+', ''),
238
- UnaryOps.NEG: ('-', ''),
239
- }
240
-
241
- @Renderer.render.register
242
- def render_unary(self, o: Unary) -> tp.Part:
243
- pfx, sfx = self.UNARY_OP_TO_STR[o.op]
244
- return tp.Concat([
245
- pfx,
246
- self.render(o.v),
247
- sfx,
248
- ])