omlish 0.0.0.dev5__py3-none-any.whl → 0.0.0.dev7__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 omlish might be problematic. Click here for more details.

Files changed (163) hide show
  1. omlish/__about__.py +109 -5
  2. omlish/__init__.py +0 -8
  3. omlish/asyncs/__init__.py +9 -9
  4. omlish/asyncs/anyio.py +123 -19
  5. omlish/asyncs/asyncio.py +23 -0
  6. omlish/asyncs/asyncs.py +9 -6
  7. omlish/asyncs/bridge.py +316 -0
  8. omlish/asyncs/trio_asyncio.py +7 -3
  9. omlish/bootstrap.py +737 -0
  10. omlish/check.py +1 -1
  11. omlish/collections/__init__.py +5 -0
  12. omlish/collections/exceptions.py +2 -0
  13. omlish/collections/identity.py +7 -0
  14. omlish/collections/utils.py +38 -9
  15. omlish/configs/strings.py +96 -0
  16. omlish/dataclasses/__init__.py +16 -0
  17. omlish/dataclasses/impl/copy.py +30 -0
  18. omlish/dataclasses/impl/descriptors.py +95 -0
  19. omlish/dataclasses/impl/exceptions.py +6 -0
  20. omlish/dataclasses/impl/fields.py +24 -25
  21. omlish/dataclasses/impl/init.py +4 -2
  22. omlish/dataclasses/impl/main.py +2 -0
  23. omlish/dataclasses/impl/reflect.py +1 -1
  24. omlish/dataclasses/utils.py +67 -0
  25. omlish/{lang/datetimes.py → datetimes.py} +8 -4
  26. omlish/diag/__init__.py +4 -0
  27. omlish/diag/procfs.py +2 -2
  28. omlish/{testing → diag}/pydevd.py +35 -0
  29. omlish/diag/threads.py +131 -48
  30. omlish/dispatch/_dispatch2.py +65 -0
  31. omlish/dispatch/_dispatch3.py +104 -0
  32. omlish/docker.py +16 -1
  33. omlish/fnpairs.py +11 -4
  34. omlish/formats/__init__.py +0 -0
  35. omlish/{configs → formats}/dotenv.py +15 -24
  36. omlish/{json.py → formats/json.py} +2 -1
  37. omlish/formats/yaml.py +223 -0
  38. omlish/graphs/trees.py +1 -1
  39. omlish/http/asgi.py +2 -1
  40. omlish/http/collections.py +15 -0
  41. omlish/http/consts.py +22 -1
  42. omlish/http/sessions.py +10 -3
  43. omlish/inject/__init__.py +49 -17
  44. omlish/inject/binder.py +185 -5
  45. omlish/inject/bindings.py +3 -36
  46. omlish/inject/eagers.py +2 -8
  47. omlish/inject/elements.py +31 -10
  48. omlish/inject/exceptions.py +1 -1
  49. omlish/inject/impl/elements.py +37 -12
  50. omlish/inject/impl/injector.py +72 -25
  51. omlish/inject/impl/inspect.py +33 -5
  52. omlish/inject/impl/origins.py +77 -0
  53. omlish/inject/impl/{private.py → privates.py} +2 -2
  54. omlish/inject/impl/scopes.py +6 -2
  55. omlish/inject/injector.py +8 -4
  56. omlish/inject/inspect.py +18 -0
  57. omlish/inject/keys.py +8 -14
  58. omlish/inject/listeners.py +26 -0
  59. omlish/inject/managed.py +76 -10
  60. omlish/inject/multis.py +68 -18
  61. omlish/inject/origins.py +30 -0
  62. omlish/inject/overrides.py +5 -4
  63. omlish/inject/{private.py → privates.py} +6 -10
  64. omlish/inject/providers.py +12 -85
  65. omlish/inject/scopes.py +13 -6
  66. omlish/inject/types.py +3 -1
  67. omlish/inject/utils.py +18 -0
  68. omlish/iterators.py +69 -2
  69. omlish/lang/__init__.py +24 -9
  70. omlish/lang/cached.py +2 -2
  71. omlish/lang/classes/restrict.py +12 -1
  72. omlish/lang/classes/simple.py +18 -8
  73. omlish/lang/contextmanagers.py +13 -4
  74. omlish/lang/descriptors.py +132 -1
  75. omlish/lang/functions.py +8 -28
  76. omlish/lang/imports.py +67 -0
  77. omlish/lang/iterables.py +60 -1
  78. omlish/lang/maybes.py +3 -0
  79. omlish/lang/objects.py +38 -0
  80. omlish/lang/strings.py +25 -0
  81. omlish/lang/sys.py +9 -0
  82. omlish/lang/typing.py +42 -0
  83. omlish/lifecycles/__init__.py +34 -0
  84. omlish/lifecycles/abstract.py +43 -0
  85. omlish/lifecycles/base.py +51 -0
  86. omlish/lifecycles/contextmanagers.py +74 -0
  87. omlish/lifecycles/controller.py +116 -0
  88. omlish/lifecycles/manager.py +161 -0
  89. omlish/lifecycles/states.py +43 -0
  90. omlish/lifecycles/transitions.py +64 -0
  91. omlish/lite/__init__.py +1 -0
  92. omlish/lite/cached.py +18 -0
  93. omlish/lite/check.py +29 -0
  94. omlish/lite/contextmanagers.py +18 -0
  95. omlish/lite/json.py +30 -0
  96. omlish/lite/logs.py +52 -0
  97. omlish/lite/marshal.py +316 -0
  98. omlish/lite/reflect.py +49 -0
  99. omlish/lite/runtime.py +18 -0
  100. omlish/lite/secrets.py +19 -0
  101. omlish/lite/strings.py +25 -0
  102. omlish/lite/subprocesses.py +112 -0
  103. omlish/logs/configs.py +15 -2
  104. omlish/logs/formatters.py +7 -2
  105. omlish/marshal/__init__.py +32 -0
  106. omlish/marshal/any.py +5 -5
  107. omlish/marshal/base.py +27 -11
  108. omlish/marshal/base64.py +24 -9
  109. omlish/marshal/dataclasses.py +34 -28
  110. omlish/marshal/datetimes.py +74 -18
  111. omlish/marshal/enums.py +14 -8
  112. omlish/marshal/exceptions.py +11 -1
  113. omlish/marshal/factories.py +59 -74
  114. omlish/marshal/forbidden.py +35 -0
  115. omlish/marshal/global_.py +11 -4
  116. omlish/marshal/iterables.py +21 -24
  117. omlish/marshal/mappings.py +23 -26
  118. omlish/marshal/naming.py +4 -0
  119. omlish/marshal/numbers.py +51 -0
  120. omlish/marshal/objects.py +1 -0
  121. omlish/marshal/optionals.py +11 -12
  122. omlish/marshal/polymorphism.py +86 -21
  123. omlish/marshal/primitives.py +4 -5
  124. omlish/marshal/standard.py +13 -8
  125. omlish/marshal/uuids.py +4 -5
  126. omlish/matchfns.py +218 -0
  127. omlish/os.py +64 -0
  128. omlish/reflect/__init__.py +39 -0
  129. omlish/reflect/isinstance.py +38 -0
  130. omlish/reflect/ops.py +84 -0
  131. omlish/reflect/subst.py +110 -0
  132. omlish/reflect/types.py +275 -0
  133. omlish/secrets/__init__.py +23 -0
  134. omlish/secrets/crypto.py +132 -0
  135. omlish/secrets/marshal.py +70 -0
  136. omlish/secrets/openssl.py +207 -0
  137. omlish/secrets/passwords.py +120 -0
  138. omlish/secrets/secrets.py +299 -0
  139. omlish/secrets/subprocesses.py +42 -0
  140. omlish/sql/dbs.py +7 -6
  141. omlish/sql/duckdb.py +136 -0
  142. omlish/sql/exprs.py +12 -0
  143. omlish/sql/secrets.py +10 -0
  144. omlish/sql/sqlean.py +17 -0
  145. omlish/term.py +2 -2
  146. omlish/testing/pytest/__init__.py +3 -2
  147. omlish/testing/pytest/inject/harness.py +3 -3
  148. omlish/testing/pytest/marks.py +4 -7
  149. omlish/testing/pytest/plugins/__init__.py +1 -0
  150. omlish/testing/pytest/plugins/asyncs.py +136 -0
  151. omlish/testing/pytest/plugins/pydevd.py +1 -1
  152. omlish/testing/pytest/plugins/switches.py +54 -19
  153. omlish/text/glyphsplit.py +97 -0
  154. omlish-0.0.0.dev7.dist-info/METADATA +50 -0
  155. omlish-0.0.0.dev7.dist-info/RECORD +268 -0
  156. {omlish-0.0.0.dev5.dist-info → omlish-0.0.0.dev7.dist-info}/WHEEL +1 -1
  157. omlish/reflect.py +0 -355
  158. omlish-0.0.0.dev5.dist-info/METADATA +0 -34
  159. omlish-0.0.0.dev5.dist-info/RECORD +0 -212
  160. /omlish/{asyncs/futures.py → concurrent.py} +0 -0
  161. /omlish/{configs → formats}/props.py +0 -0
  162. {omlish-0.0.0.dev5.dist-info → omlish-0.0.0.dev7.dist-info}/LICENSE +0 -0
  163. {omlish-0.0.0.dev5.dist-info → omlish-0.0.0.dev7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,268 @@
1
+ omlish/__about__.py,sha256=TwqdcftpXPLJwEH5TJ-OVm9QOL9L13Atq8Ew7Kie3rk,2266
2
+ omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ omlish/argparse.py,sha256=QRQmX9G0-L_nATkFtGHvpd4qrpYzKATdjuFLbBqzJPM,6224
4
+ omlish/bootstrap.py,sha256=3pGNiHlUcQl81q76_Wesd4pblmy82EOKkcdgectF15Q,18820
5
+ omlish/c3.py,sha256=W5EwYx9Por3rWYLkKUitJ6OoRMLLgVTfLTyroOz41Y0,8047
6
+ omlish/cached.py,sha256=UAizxlH4eMWHPzQtmItmyE6FEpFEUFzIkxaO2BHWZ5s,196
7
+ omlish/check.py,sha256=aeFjTwZfcZHMY2tJ4RozonuOg_LVvPMgyP94CfuR0Sk,5529
8
+ omlish/concurrent.py,sha256=3KkTj5TOPmvNOcuK9LtOQwmkuLzoEYQfcuaHTXSQ0Ts,5424
9
+ omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
10
+ omlish/defs.py,sha256=N8O1murtr4mdSE_vjAcWGfnN7GyBXbW8rJM4qPF8na0,4737
11
+ omlish/docker.py,sha256=5WyXJyFwqIJJ11QWwPIjHjDHnsaOVZszZAjyTvg3xew,4693
12
+ omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
13
+ omlish/fnpairs.py,sha256=FgP8lzygrbRo5E1f8wbWy_-opoR6Dy8BKRi776kOrIY,9445
14
+ omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
15
+ omlish/libc.py,sha256=u0481imCiTFqP_e-v9g0pD-0WD249j5vYzhtn-fnNkY,15308
16
+ omlish/matchfns.py,sha256=rW-kEHZvMkRno0Imn8rskAoVjpR5rKtOtUUzQ6wLqdU,5878
17
+ omlish/math.py,sha256=AVqp5Y8yxKA-wO0BgrzaxA0Ga3PZiCXnYcwivMneC-0,3804
18
+ omlish/os.py,sha256=cz4nL2ujaxH_-XRq3JUD8af8mSe1JXGPIoXP9XAEd0M,2607
19
+ omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
20
+ omlish/stats.py,sha256=uqjN-focDVssFZMagj22HqmyJ1TBO4Wt-XnHp8-EtVw,9927
21
+ omlish/sync.py,sha256=AqwIfIuCMVHLwlJUa7dmaSjfA4sM5AYPCD5-nsz3XVQ,1516
22
+ omlish/term.py,sha256=NEmxqAhicyInGtmFamZAizI2xdu819MzFYPEp0Fx97M,6111
23
+ omlish/asyncs/__init__.py,sha256=uUz9ziKh4_QrgmdhKFMgq6j7mFbiZd3LiogguDCQsGI,587
24
+ omlish/asyncs/anyio.py,sha256=6hqKLM7H-AOOiQtTM9dI4bn0d4mNhN3RLCUYrgJswv4,7540
25
+ omlish/asyncs/asyncio.py,sha256=JfM59QgB3asgEbrps0zoVbNjWD4kL2XdsEkRMEIoFos,971
26
+ omlish/asyncs/asyncs.py,sha256=Tf7ZodTGepkM7HAuFcDNh9lLzzrMw6rELWvopGmFkh4,2035
27
+ omlish/asyncs/bridge.py,sha256=AabrRVz5k75dTB59M70DWkl6JrLusjhpvsaj5jld9io,8151
28
+ omlish/asyncs/flavors.py,sha256=kp1RdcsNrvDQZMB4Q_hlHyjrREJqEWjY9BI1lbE1AQ8,4820
29
+ omlish/asyncs/trio.py,sha256=GKG3wgelFr7gIKKHZhcflvMyCvxXHNZe862KB0Xw2uA,370
30
+ omlish/asyncs/trio_asyncio.py,sha256=oqdOHy0slj9PjVxaDf3gJkq9AAgg7wYZbB469jOftVw,1327
31
+ omlish/collections/__init__.py,sha256=7b0pjRiTXxh5p49SX9U5HQ4njsQehKik-Qe9A6Gf8qM,1658
32
+ omlish/collections/_abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
33
+ omlish/collections/_io_abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
34
+ omlish/collections/coerce.py,sha256=o11AMrUiyoadd8WkdqeKPIpXf2xd0LyylzNCyJivCLU,7036
35
+ omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
36
+ omlish/collections/frozen.py,sha256=DGxemj_pVID85tSBm-Wns_x4ov0wOEIT6X5bVgJtmkA,4152
37
+ omlish/collections/identity.py,sha256=jhEpC8tnfh3Sg-MJff1Fp9eMydt150wits_UeVdctUk,2723
38
+ omlish/collections/indexed.py,sha256=YHs_q0GALisXPKKMgeDQxZ6hMzYndqDL3m3ag8cnzH0,2143
39
+ omlish/collections/mappings.py,sha256=5D7xZabUY6n1nB-BrZlcrPy_AdzLZ6IyihuLeDL48pA,3188
40
+ omlish/collections/ordered.py,sha256=RzEC3fHvrDeJQSWThVDNYQKke263Vje1II5YwtDwT1Q,2335
41
+ omlish/collections/persistent.py,sha256=KG471s0bhhReQrjlmX0xaN9HeAIcrtT264ddZCxsExo,875
42
+ omlish/collections/skiplist.py,sha256=xjuKZtSScp1VnOi9lpf7I090vGp1DnjA5ELjFhMeGps,5987
43
+ omlish/collections/sorted.py,sha256=E5ZOdNn7Jju1EcQ7CX2Ltk9StIXsBOzqvh7EsT3ZA2U,3354
44
+ omlish/collections/treap.py,sha256=wq9L5hvxq4QgPvIpHmueZMF8t7UrvX5vmlNN4BOqY4g,7720
45
+ omlish/collections/treapmap.py,sha256=TxOM-ZRF5PK2xe5wRIhESNt7DGh9b_MeZfE7HLkCOs4,5804
46
+ omlish/collections/unmodifiable.py,sha256=QmUEi9IBXqiM_KGgH2rqg15VmkHJo1MZ6kwq2twEMho,4750
47
+ omlish/collections/utils.py,sha256=3qe4ncHx1vkI34-AGKsCT-9syLbZweW1SI7EgaNifnI,4245
48
+ omlish/collections/cache/__init__.py,sha256=Cv8RX-Ehit3um0QLDq7uRDqJUCcdqTKoAB9T0pM_5hg,392
49
+ omlish/collections/cache/descriptor.py,sha256=t-1Gh4DTABDuNmeDJlpoW4LV3gi_uSlBd9ZfBINfYCM,5023
50
+ omlish/collections/cache/impl.py,sha256=nQox5kChhns9h2a5gnX-ayQGBQJ5-B1aZkLQ2Aej19g,15137
51
+ omlish/collections/cache/types.py,sha256=yNjwd6CGyTJQdxN2CQxFqqBAlcs1Z7vvNV-aU1K7p8E,685
52
+ omlish/configs/__init__.py,sha256=3uh09ezodTwkMI0nRmAMP0eEuJ_0VdF-LYyNmPjHiCE,77
53
+ omlish/configs/classes.py,sha256=GLbB8xKjHjjoUQRCUQm3nEjM8z1qNTx9gPV7ODSt5dg,1317
54
+ omlish/configs/flattening.py,sha256=AOlRpBHm449MxwMp3CiIRGunStOC1DUNs1f3CLou0wc,4731
55
+ omlish/configs/strings.py,sha256=0brx1duL85r1GpfbNvbHcSvH4jWzutwuvMFXda9NeI0,2651
56
+ omlish/dataclasses/__init__.py,sha256=FMR2hCAsOxRTjT2asnuyEGkA4OXI7J3N8Wy7cyPiogs,1247
57
+ omlish/dataclasses/utils.py,sha256=G1nSlvdwsb9SV1AsJRfXrCO0sAnqMcj7LjGdVSWi2AA,1852
58
+ omlish/dataclasses/impl/__init__.py,sha256=rQJRcE9fVsGEvRUOZ18r4DE0xiLbSRjspyJRXgbLS3I,348
59
+ omlish/dataclasses/impl/api.py,sha256=NOuw5dlwztG5AA_gwdF2PJAqvouMdbUf1Si80G26qAY,6244
60
+ omlish/dataclasses/impl/as_.py,sha256=CD-t7hkC1EP2F_jvZKIA_cVoDuwZ-Ln_xC4fJumPYX0,2598
61
+ omlish/dataclasses/impl/copy.py,sha256=Tn8_n6Vohs-w4otbGdubBEvhd3TsSTaM3EfNGdS2LYo,591
62
+ omlish/dataclasses/impl/descriptors.py,sha256=rEYE1Len99agTQCC25hSPMnM19BgPr0ZChABGi58Fdk,2476
63
+ omlish/dataclasses/impl/exceptions.py,sha256=WD0Tr1TnjUN4OR3f3rs8CgqtP2KBA1tKjPIbZO8Tzm0,178
64
+ omlish/dataclasses/impl/fields.py,sha256=zBa-XjJJQ7dOP_se-A8Q4Vv3ol2xjpTQXTUBCnr1UVs,4377
65
+ omlish/dataclasses/impl/frozen.py,sha256=5wKtt8WvPYCkHPrwR024mpvbFzqcbPQfgiFvy3orRJo,1692
66
+ omlish/dataclasses/impl/hashing.py,sha256=FKnHuXCg9ylrzK2TLGqO5yfRN4HX3F415CSLlVYXtYE,3190
67
+ omlish/dataclasses/impl/init.py,sha256=yw9iInFHaR_TFWRzsryr8vgStHMQwqubL-s7pY5k1sA,5652
68
+ omlish/dataclasses/impl/internals.py,sha256=LTCqGT8AhyGTWwioGrBpTJzDzPvAtizQKb0NBNKcNs0,2989
69
+ omlish/dataclasses/impl/main.py,sha256=vAVdqb4cgvyssA7rCFl9i2D0MAffX45YtQbGQ2te5_c,5189
70
+ omlish/dataclasses/impl/metaclass.py,sha256=dlQEIN9MHBirll7Nx3StpzxYxXjrqxJ-QsorMcCNt7w,2828
71
+ omlish/dataclasses/impl/metadata.py,sha256=HGqAtMcP422X4kPx93btcxE-n4guBFm6-N-S4nobgk4,1407
72
+ omlish/dataclasses/impl/order.py,sha256=zWvWDkSTym8cc7vO1cLHqcBhhjOlucHOCUVJcdh4jt0,1369
73
+ omlish/dataclasses/impl/params.py,sha256=M-xg9IeFftVy795oqlp7Yw8jE-7wG2K4vaFhXHKmL1k,2538
74
+ omlish/dataclasses/impl/processing.py,sha256=iUvaNwRAt8rQsLIIkvRye5rfk6xhgR35EbcdwZCZec8,366
75
+ omlish/dataclasses/impl/reflect.py,sha256=13af257_sjjM-4wfH84nl7CoHHMV_eFZpkIgUawZ3TE,5307
76
+ omlish/dataclasses/impl/replace.py,sha256=wS9GHX4fIwaPv1JBJzIewdBfXyK3X3V7_t55Da87dYo,1217
77
+ omlish/dataclasses/impl/repr.py,sha256=oLXBTxqp88NKmz82HrJeGiTEiwK4l5LlXQT9Q0-tX3c,1605
78
+ omlish/dataclasses/impl/simple.py,sha256=EovA-GpmQYtB_svItO2byTAWqbKGF4njz0MdQts3QBU,3157
79
+ omlish/dataclasses/impl/slots.py,sha256=_sm-x9v1tPnXEHBHNUMTHZocgVyhZaPdvamIPPBUVyk,2635
80
+ omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jIymw,6138
81
+ omlish/diag/__init__.py,sha256=BYQoq12W2qU0O7m2Z-RLCX6YLIYEW9MmfN7_i9--Yk0,132
82
+ omlish/diag/procfs.py,sha256=ggIeFoaNZ4j6HvKTiXD6Q3b9apgto7j55pwswCrIHXE,9581
83
+ omlish/diag/procstats.py,sha256=9uQMvVL7Yzf_1F8dW55pcZeCFtP5yUbK1KuGn9bt2Qg,502
84
+ omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
85
+ omlish/diag/pydevd.py,sha256=Fsx9rfCOnwLD6RLBqH0uAdtq75rbNeBAQfiDvIBd3e0,7295
86
+ omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
87
+ omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
88
+ omlish/diag/replserver/__main__.py,sha256=LmU41lQ58bm1h4Mx7S8zhE_uEBSC6kPcp9mn5JRpulA,32
89
+ omlish/diag/replserver/console.py,sha256=XzBDVhYlr8FY6ym4OwoaIHuFOHnGK3dTYlMDIOMUUlA,7410
90
+ omlish/diag/replserver/server.py,sha256=MBLMouRuJ7eMXBHVsMQS8KGHwZuDThPoNkiJb32UVI0,4896
91
+ omlish/dispatch/__init__.py,sha256=GsiGJ91NKiQptSROtnCSkrZExBkvfDwYvdoTu5dBqF0,117
92
+ omlish/dispatch/_dispatch2.py,sha256=v3tCNyxGpOwY8qTwdp54TlM8mG6OVwtQoUZfYJ_griU,1756
93
+ omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc,2608
94
+ omlish/dispatch/dispatch.py,sha256=8B66wOat30HckcIsCq4pnutBy20iSPwPQOqJ4msHaGU,3739
95
+ omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
96
+ omlish/dispatch/methods.py,sha256=utLvLioBgEqa0gR0fpfNEtMDZFGPM4G5p3XHnPt-oIw,5865
97
+ omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ omlish/formats/dotenv.py,sha256=UjZl3gac-0U24sDjCCGMcCqO1UCWG2Zs8PZ4JdAg2YE,17348
99
+ omlish/formats/json.py,sha256=KRfH-MLOrMXUFVy_eX6RagC37Z-KyfOIXlVdxM6nuxc,6787
100
+ omlish/formats/props.py,sha256=diYjZDsG1s50ImJhkpeinMwjr8952nIVI-0gYhBIvCY,18897
101
+ omlish/formats/yaml.py,sha256=5gvH-e9fVn6C-xpcagnrtM0bSLOsuk3sAQT-aaE4PD4,6653
102
+ omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
+ omlish/graphs/dags.py,sha256=JpTGxt5rsK7hy5EUy9rNUlIeDStT9ri86m8xEKiHQLE,3063
104
+ omlish/graphs/domination.py,sha256=45iTyn7mZWPJ1ANrqD96aPXqzEeyFpybMvvcVxo9XvQ,7592
105
+ omlish/graphs/trees.py,sha256=cfWV4FnXqghhmu301bo1XlukTv3jZnBRkee5b4Q2h28,8158
106
+ omlish/graphs/dot/__init__.py,sha256=6-LAx7ytHFQvfLrnxVQG1s8xmApgblERJJCTB2knOHk,642
107
+ omlish/graphs/dot/items.py,sha256=OWPf0-hjBgS1uyy2QgAEn4IgFHJcEg7sHVWeTx1ghZc,4083
108
+ omlish/graphs/dot/rendering.py,sha256=hUSJ5HvSvxnTIC9ynSxxP8IJnVH6quEeDbLzNlUnmuk,3626
109
+ omlish/graphs/dot/utils.py,sha256=_FMwn77WfiiAfLsRTOKWm4IYbNv5kQN22YJ5psw6CWg,801
110
+ omlish/http/__init__.py,sha256=v2f9Hh6bTgcz0MkG9T2JQarzeIgHlDxDT2cbINbpyw8,367
111
+ omlish/http/asgi.py,sha256=wXhBZ21bEl32Kv9yBrRwUR_7pHEgVtHP8ZZwbasQ6-4,3307
112
+ omlish/http/collections.py,sha256=s8w5s4Gewgxxhe2Ai0R45PgJYYifrLgTbU3VXVflHj4,260
113
+ omlish/http/consts.py,sha256=-O0F6qiVWGGT18j8TMP7UNfHCECg1MmByx05oc7Ae9Q,1985
114
+ omlish/http/cookies.py,sha256=x56AvYtwNyQKFzVD1zSGIsfg9oiArd6ICTMEdugP008,6356
115
+ omlish/http/dates.py,sha256=Otgp8wRxPgNGyzx8LFowu1vC4EKJYARCiAwLFncpfHM,2875
116
+ omlish/http/encodings.py,sha256=w2WoKajpaZnQH8j-IBvk5ZFL2O2pAU_iBvZnkocaTlw,164
117
+ omlish/http/json.py,sha256=9XwAsl4966Mxrv-1ytyCqhcE6lbBJw-0_tFZzGszgHE,7440
118
+ omlish/http/sessions.py,sha256=gj_FgDoETAnLh_pISlwrqS78LFc1c3RNAKHSLYBEr5s,4793
119
+ omlish/http/wsgi.py,sha256=czZsVUX-l2YTlMrUjKN49wRoP4rVpS0qpeBn4O5BoMY,948
120
+ omlish/inject/__init__.py,sha256=JQ7x8l9MjU-kJ5ap7cPVq7SY7zbbCIrjyJAF0UeE5-s,1886
121
+ omlish/inject/binder.py,sha256=H8AQ4ecmBOtDL8fMgrU1yUJl1gBADLNcdysRbvO8Wso,4167
122
+ omlish/inject/bindings.py,sha256=pLXn2U3kvmAS-68IOG-tr77DbiI-wp9hGyy4lhG6_H8,525
123
+ omlish/inject/eagers.py,sha256=5AkGYuwijG0ihsH9NSaZotggalJ5_xWXhHE9mkn6IBA,329
124
+ omlish/inject/elements.py,sha256=BzTnkNS-3iAMI47LMC2543u6A8Tfk3aJXn3CO191ez4,1547
125
+ omlish/inject/exceptions.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
126
+ omlish/inject/injector.py,sha256=CoCUeMm1Oot4sG4Ti1sKCWrhlvtJ5QAeAI22AFWu2RQ,1066
127
+ omlish/inject/inspect.py,sha256=tw49r1RJVHrEHmT8WWA3_Bl9Z0L3lEGRqlLhbM5OmAM,592
128
+ omlish/inject/keys.py,sha256=05KePew5_Cn_zWgBpIcXsa5orxm6xn4YL_IWXEvrSr8,651
129
+ omlish/inject/listeners.py,sha256=AIWUs4OTUPeURU1tS2CXeEbJwC1bZiuya9K6I2ElMns,581
130
+ omlish/inject/managed.py,sha256=Ls54Ah5KDrLHYWmso64xipvCLWPcgl1sUOn2n1tuWag,2107
131
+ omlish/inject/multis.py,sha256=PQcIZbKpTJEOca_4pCp__3jLWLb9n90jZLbDe-xx8dQ,3351
132
+ omlish/inject/origins.py,sha256=OVQkiuRxx6ZtE8ZliufdndtFexcfpj-wZSDkUeGUCYM,534
133
+ omlish/inject/overrides.py,sha256=hrm243slCw_DDRbn3dK5QK1jfHezVokG-WYO2JaQOV8,535
134
+ omlish/inject/privates.py,sha256=hZOa_keY3KlXAzyiZ-sfN697UKXpkfXXNUIEmGT5TAA,641
135
+ omlish/inject/providers.py,sha256=MAla7uDQR63zj9oB9XqN8rK3DGGLSzUKZ4rUU_5dM40,751
136
+ omlish/inject/scopes.py,sha256=0b8Y0VidkpEk7tyxKSbv_1fE-2LomKTYlhFeoEemkwg,1979
137
+ omlish/inject/types.py,sha256=11WVEPkZ-_8cv1BeTDRU-soIYxB_6x7dyWtsa2Iej9U,251
138
+ omlish/inject/utils.py,sha256=_UOZqA8IcLWPqf4Mcg9iIusQ5yxP_6Txg6PWtUYl23o,408
139
+ omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
+ omlish/inject/impl/bindings.py,sha256=8H586RCgmvwq53XBL9WMbb-1-Tdw_hh9zxIDCwcHA1c,414
141
+ omlish/inject/impl/elements.py,sha256=bJBbHce_eZyIua2wbcejMwd9Uv-QeYcQ-c5N1qOXSmU,5950
142
+ omlish/inject/impl/injector.py,sha256=WxIVOF6zvipb44302_j-xQZt8vnNCY0gdLX6UWzslXI,7550
143
+ omlish/inject/impl/inspect.py,sha256=erLL1w6GzoPVGwORm56ra9vR-IH5BoMQrr7POwaFDjU,3050
144
+ omlish/inject/impl/multis.py,sha256=rRIWNCiTGaSWQUz_jxEy8LUmzdJDAlG94sLHYDS-ncg,2048
145
+ omlish/inject/impl/origins.py,sha256=-cdcwz3BWb5LuC9Yn5ynYOwyPsKH06-kCc-3U0PxZ5w,1640
146
+ omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCFQ,2613
147
+ omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
148
+ omlish/inject/impl/proxy.py,sha256=1ko0VaKqzu9UG8bIldp9xtUrAVUOFTKWKTjOCqIGr4s,1636
149
+ omlish/inject/impl/scopes.py,sha256=M_RO_pGUr5mX84YyYmkr6CsMhkkV189_gOUsaYmYes4,5768
150
+ omlish/lang/__init__.py,sha256=DSFUT2mChw4kZjr3lUgVfzUf5BwtXMVzwtFFmmvno-Y,3145
151
+ omlish/lang/cached.py,sha256=0gjdxVELu69oRQ3kqSV3cGIHg6Nf4pcCIIRTEU52tCc,7607
152
+ omlish/lang/clsdct.py,sha256=LXwLCULeI_8Np-7-pZkyNAHpUZLcQiBEQiHwKYQ0WRo,1742
153
+ omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
154
+ omlish/lang/contextmanagers.py,sha256=C6FU_1ftMvp_Zbz9ixf_HsCSYQot_TZ7mpZBJEBc3Xc,8333
155
+ omlish/lang/descriptors.py,sha256=taJzRU-lKszfaIH847UEE9Kb_krhCqPGYdu7CTBXr5Q,5900
156
+ omlish/lang/exceptions.py,sha256=qJBo3NU1mOWWm-NhQUHCY5feYXR3arZVyEHinLsmRH4,47
157
+ omlish/lang/functions.py,sha256=T4nPl46EHHGjMkz3FTRjsVhS9Y8HKcwM0jROU6_-Rv0,3619
158
+ omlish/lang/imports.py,sha256=04ugFC8NI5sbL7NH4V0r0q_nFsP_AMkHLz697CVkMtQ,6274
159
+ omlish/lang/iterables.py,sha256=_q6rHbdFfW3VBqez0IV3rUABoNxsA_oBv_sykm5zsbQ,2243
160
+ omlish/lang/maybes.py,sha256=NYHZDjqDtwPMheDrj2VtUVujxRPf8Qpgk4ZlZCTvBZc,3492
161
+ omlish/lang/objects.py,sha256=GTfVRpbPIuJeZggK-Ek7nsrZog8LGjt10YfDJ07pttQ,3536
162
+ omlish/lang/resolving.py,sha256=UgrX-vxXtCGGEmnAMUYP4bUZ6-Ok0EcHVEKAZYbAS-o,1597
163
+ omlish/lang/strings.py,sha256=ykeoou4JK7CEZXzrUJfqVOalEDvE--j0uhHt_SrsrUs,2834
164
+ omlish/lang/sys.py,sha256=UoZz_PJYVKLQAKqYxxn-LHz1okK_38I__maZgnXMcxU,406
165
+ omlish/lang/timeouts.py,sha256=vECdWYhc_IZgcal1Ng1Y42wf2FV3KAx-i8As-MgGHIQ,1186
166
+ omlish/lang/typing.py,sha256=pKDBHTYzoQtFCUxtlDDTpnKixZBxeE5Pblvv1nJbRYE,3236
167
+ omlish/lang/classes/__init__.py,sha256=j1p0_uuMznKrY2EhMoj20uv6vx4LXljMzp7AaKe0mmU,530
168
+ omlish/lang/classes/abstract.py,sha256=goIV14oY24EOs88eVe6E6NyrSPOOLMOcWTXTMuYKiqc,2304
169
+ omlish/lang/classes/restrict.py,sha256=n_B-XqafVyO1caZzfbsv7tPxDJOBLl1BzQkoDSse0A4,3353
170
+ omlish/lang/classes/simple.py,sha256=U9WB3S9svudIWF7bitptXzVjLHnlG_Xh72K-jIAekaU,3068
171
+ omlish/lang/classes/virtual.py,sha256=54D4qOpDWHpP28Oc6bbBjdxquLvdvqMqLXj2XOnAeaQ,3323
172
+ omlish/lifecycles/__init__.py,sha256=1FjYceXs-4fc-S-C9zFYmc2axHs4znnQHcJVHdY7a6E,578
173
+ omlish/lifecycles/abstract.py,sha256=70CQyZy-c9a2o0ZJxPeUT7eYjWZTBrp2HpUBnrHdAOM,1109
174
+ omlish/lifecycles/base.py,sha256=ceXrNSzuv7iiTlX96UI1fvsQ70OgOmZl-UisDPyA3NA,1394
175
+ omlish/lifecycles/contextmanagers.py,sha256=W0trOo6atbPSCoswmtUVOayAYnJ722qHBgda1oYxUEc,2073
176
+ omlish/lifecycles/controller.py,sha256=L9U2KQohrOfxJnsu-LYNVBvLyUJnRCZyo1ehH1DjG14,3480
177
+ omlish/lifecycles/manager.py,sha256=Au66KaO-fI-SEJALaPUJsCHYW2GE20xextk1wKn2BEU,5445
178
+ omlish/lifecycles/states.py,sha256=zqMOU2ZU-MDNnWuwauM3_anIAiXM8LoBDElDEraptFg,1292
179
+ omlish/lifecycles/transitions.py,sha256=qQtFby-h4VzbvgaUqT2NnbNumlcOx9FVVADP9t83xj4,1939
180
+ omlish/lite/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
181
+ omlish/lite/cached.py,sha256=dUm647FbIsoxWT23XUFM51F7i-C2Buxr5b5zzgbCtQI,546
182
+ omlish/lite/check.py,sha256=DR3Zj-7o4Y7pNheln68nN_BdX9zaotGQ2y8v97GDiWQ,535
183
+ omlish/lite/contextmanagers.py,sha256=HnQJiyrOmSvTL22XRJrFl5CLpCyHD9fsntEUAr9G-60,427
184
+ omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
185
+ omlish/lite/logs.py,sha256=UJURLPKZvPnnF-6B7ySM36KO3auzz9DsSYKug0dF454,1197
186
+ omlish/lite/marshal.py,sha256=MUn5DeuLheMZBiwnWwYXqRWPeSuXYpC7mm32oZ0mQN4,8526
187
+ omlish/lite/reflect.py,sha256=9QYJwdINraq1JNMEgvoqeSlVvRRgOXpxAkpgX8EgRXc,1307
188
+ omlish/lite/runtime.py,sha256=VUhmNQvwf8QzkWSKj4Q0ReieJA_PzHaJNRBivfTseow,452
189
+ omlish/lite/secrets.py,sha256=ToaS10AcH7UOFi7XHKp2mikLErp1Rrne5mtFJ388hF8,462
190
+ omlish/lite/strings.py,sha256=9dO_A6EkhcTZ2xmOUGSOMT-mx9BnoOzYu1-ocSrDJaA,670
191
+ omlish/lite/subprocesses.py,sha256=KuGV3ImehMjCUK0JoV3pUtG_7o5wei1lRDn9HxzByAg,3063
192
+ omlish/logs/__init__.py,sha256=V8jEdb5rj9Dli0b9qtR0ZYstRoIlxWqbU38UmEOXbfY,419
193
+ omlish/logs/_abc.py,sha256=UgrCUQVUi_PvT3p1CEkb3P74CFrFcZq2AFby3GEUv9M,5974
194
+ omlish/logs/configs.py,sha256=yHumOuo5rWsOf2hnF2eyHHz-NKSLd-VBw8IRq-r94EM,1981
195
+ omlish/logs/filters.py,sha256=dk-_sRQhp_rCGF48qpPj5viHOBEOu78quXe9pHHs78c,187
196
+ omlish/logs/formatters.py,sha256=lI2KB8w_PDVX4YkWkImtki0MRKN2dlT6F2KTNEhYRJA,1970
197
+ omlish/logs/utils.py,sha256=MgGovbP0zUrZ3FGD3qYNQWn-l0jy0Y0bStcQvv5BOmQ,391
198
+ omlish/marshal/__init__.py,sha256=52Jl7SgSA0Ei7TBrNmcbXCcICiU6oBS9NhjGg8zvgKI,1383
199
+ omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
200
+ omlish/marshal/base.py,sha256=Oa9FIF4SVDao7QYvPIHPMp_kp4sA6JfLSV4aEcprYTk,5931
201
+ omlish/marshal/base64.py,sha256=Q3ibujdhgFgDaeHahSe7WdcqvOyalWigwUlV-U-2ckQ,1018
202
+ omlish/marshal/dataclasses.py,sha256=PMAwBblcmCNVifDul0Vl09saBZ3BYEOIOJABZ2zc4Bg,3667
203
+ omlish/marshal/datetimes.py,sha256=0ffg8cEvx9SMKIXZGD9b7MqpLfmgw0uKKdn6YTfoqok,3714
204
+ omlish/marshal/enums.py,sha256=-0fKutBbyz8ygEaA0_P_8IOJrI9jMGigmnPbutV9Bg4,1464
205
+ omlish/marshal/exceptions.py,sha256=jwQWn4LcPnadT2KRI_1JJCOSkwWh0yHnYK9BmSkNN4U,302
206
+ omlish/marshal/factories.py,sha256=UV2Svjok-lTWsRqKGh-CeuAhvlohw9uJe7ZLyoKMvTM,2968
207
+ omlish/marshal/forbidden.py,sha256=BNshzm4lN5O8sUZ1YvxrSYq3WPklq9NMQCRZ7RC3DLM,865
208
+ omlish/marshal/global_.py,sha256=8XCjPcIjA65StESshzNfQiSyuckVaEiiWROmC3qk0mo,1117
209
+ omlish/marshal/iterables.py,sha256=y4EZirLrbv_RGG29cq6TsrEbEPjt1GEyuH3BNYkGQFU,2245
210
+ omlish/marshal/mappings.py,sha256=-7n_4j52fGieV_ANF7qlMzk0nkeXWMrBEQI5OTvW2bo,2516
211
+ omlish/marshal/naming.py,sha256=UCviMAXTTUpW1lyAGymybGP2rFUAW44P1X0zrIVbvi4,464
212
+ omlish/marshal/numbers.py,sha256=oY_yMNJEnJhjfLh89gpPXvKqeUyhQcaTcQB6ecyHiG8,1704
213
+ omlish/marshal/objects.py,sha256=JD7GBY1hYUyRpCufpxDAwgII98ewzGDct2IF0HxgFN0,2767
214
+ omlish/marshal/optionals.py,sha256=r0XB5rqfasvgZJNrKYd6Unq2U4nHt3JURi26j0dYHlw,1499
215
+ omlish/marshal/polymorphism.py,sha256=KBH4VnMl0SdSfjGNtZumBT7q3jB8wkDT5DKF7SD64C4,5582
216
+ omlish/marshal/primitives.py,sha256=-gLR_RTPTM8YP6t6PL5sNM1lAtwcZDHc9lxkimoQ9jw,1097
217
+ omlish/marshal/registries.py,sha256=GI2KogcxawMkk02Ky7-TsnijChoe1I7YTOPIbUNwSAI,1665
218
+ omlish/marshal/standard.py,sha256=747rai9Rq0zTWQMIL2gLmU7p7c2tyHYosfQJipMS1-c,2657
219
+ omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
220
+ omlish/marshal/uuids.py,sha256=H4B7UX_EPNmP2tC8bubcKrPLTS4aQu98huvbXQ3Zv2g,910
221
+ omlish/marshal/values.py,sha256=ssHiWdg_L6M17kAn8GiGdPW7UeQOm3RDikWkvwblf5I,263
222
+ omlish/reflect/__init__.py,sha256=iWDCNJNP4afPcv-MxZRJSIRQ4NRw6XYPyRHhBXb5YIA,667
223
+ omlish/reflect/isinstance.py,sha256=x5T9S2634leinBT4hl3CZZkRttvdvvlxChkC_x9Qu2s,1176
224
+ omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
225
+ omlish/reflect/subst.py,sha256=JM2RGv2-Rcex8wCqhmgvRG59zD242P9jM3O2QLjKWWo,3586
226
+ omlish/reflect/types.py,sha256=_AZeSkqraWkDBrBEq5mT4DiTS98ZHyiWR7TFSVJqJSk,6815
227
+ omlish/secrets/__init__.py,sha256=VKB2IF9vz4h4RXcZxgXj36KXOLcGBzfqVnxPgPDWpmg,408
228
+ omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
229
+ omlish/secrets/marshal.py,sha256=nVzsvQH5w3T2oMP7DCc1SLKxyR5e66psM57VOQoL0QA,2086
230
+ omlish/secrets/openssl.py,sha256=nAA_wxk86G92B7027AoAlAiFliMjxLVs7xlaOAFGayE,6225
231
+ omlish/secrets/passwords.py,sha256=3r-vEK6Gp6aq4L5Csnd06QnrjO9xfzHJP-g_7I9W_ao,4101
232
+ omlish/secrets/secrets.py,sha256=hFN82uYiBVx8YSE86leWNxb4IRp3qdwZPOi4w04h8u0,6855
233
+ omlish/secrets/subprocesses.py,sha256=EcnKlHHtnUMHGrBWXDfu8tv28wlgZx4P4GOiuPW9Vo8,1105
234
+ omlish/sql/__init__.py,sha256=pLv2EQmAwcGXN0Y3AE8K5JjyN_4GaHRMHyExaDFm5yU,181
235
+ omlish/sql/_abc.py,sha256=HLhnnLZ7l0r_N99I-RCqJe6VHth-9iluU7cR-7-5jfs,1519
236
+ omlish/sql/asyncs.py,sha256=Wye3dwh7oZEGYz2Y4DZQSHtW4xjI2AH5qjW-BSS2IfU,3688
237
+ omlish/sql/dbs.py,sha256=lpdFmm2vTwLoBiVYGj9yPsVcTEYYNCxlYZZpjfChzkY,1870
238
+ omlish/sql/duckdb.py,sha256=Z3wiZEn_21Lu1ElFRX0ATzoBMCw0KJxINjTRuTexYGM,3748
239
+ omlish/sql/exprs.py,sha256=gO4Fj4xEY-PuDgV-N8hBMy55glZz7O-4H7v1LWabfZY,323
240
+ omlish/sql/secrets.py,sha256=mDUunIACxHBsPD_ONbHQJVndeMMzJR4vMC2WWX7tGfY,177
241
+ omlish/sql/sqlean.py,sha256=RbkuOuFIfM4fowwKk8-sQ6Dxk-tTUwxS94nY5Kxt52s,403
242
+ omlish/testing/__init__.py,sha256=l13axR7dyVE9T1e6w1pMYtAkW3vS2J97nBcYQ1FUv18,136
243
+ omlish/testing/testing.py,sha256=p1bP9fnxmYzOvPJ_7S1wq7PrKMzclK8PgYH5DwaQiHk,2918
244
+ omlish/testing/pytest/__init__.py,sha256=b6ObMEHTZnvGEI_de6nN1x5FyitV6B2mNYkurA4Q7fo,336
245
+ omlish/testing/pytest/helpers.py,sha256=TJpD60mBtLi9FtxX4TThfuXvg5FIRPSiZk1aeRwe-D4,197
246
+ omlish/testing/pytest/marks.py,sha256=LbI5lO29cbh_FA5-vktwtcZwWjxn9URI0pprzmPRyJo,1260
247
+ omlish/testing/pytest/inject/__init__.py,sha256=pdRKv1HcDmJ_yArKJbYITPXXZthRSGgBJWqITr0Er38,117
248
+ omlish/testing/pytest/inject/harness.py,sha256=IfcqR1rcIYkl_66Mmhy1KEeCWFJ95wr68Vs5687bPlY,5053
249
+ omlish/testing/pytest/plugins/__init__.py,sha256=Kx4OgGY_whB2I-5c7iI41j-dAaerEIlMEnWN2orGHQI,405
250
+ omlish/testing/pytest/plugins/_registry.py,sha256=IK04KlBgiOJxKAyCCgjpX2R-9tE-btalYJkgjLc8Te8,77
251
+ omlish/testing/pytest/plugins/asyncs.py,sha256=Gpj2c6TM33iJUE_bGfdGWTHKMt-nTWw30CHsre2V6pc,4274
252
+ omlish/testing/pytest/plugins/logging.py,sha256=1zs6Xe54wiaSjabCviaFXwKkoN97CKm3mA5mEoUeJGs,380
253
+ omlish/testing/pytest/plugins/managermarks.py,sha256=pDEcCNdDAcTS4jjZHSnAfmzqMJDBcJcSsM3QNhbJ6Gs,1485
254
+ omlish/testing/pytest/plugins/pydevd.py,sha256=u1fxfCgFw4wGKBkMV_H_l9WI8JoUwlRff4iHEr_WYeE,319
255
+ omlish/testing/pytest/plugins/repeat.py,sha256=flSQzE9GFOWksVKz-mUGnpxJpv3yRqn1G4K8pW7JHs0,498
256
+ omlish/testing/pytest/plugins/skips.py,sha256=EoZDg1uWccgbAegmzqI85c7RliycD1e2J4Y7vfDRhwM,1041
257
+ omlish/testing/pytest/plugins/spacing.py,sha256=JQQhi9q3c523Ro1a_K_9RGAb7HotiO74N8bYX2VESFE,707
258
+ omlish/testing/pytest/plugins/switches.py,sha256=9FtN5qtPBoS-teEp54OHPF6jlZJakRJdq4pnLJpPj_A,3001
259
+ omlish/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
260
+ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
261
+ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
262
+ omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
263
+ omlish/text/parts.py,sha256=KGgo0wHOIMVMZtDso-rhSWKAcAkYAH2IGpg9tULabu8,6505
264
+ omlish-0.0.0.dev7.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
265
+ omlish-0.0.0.dev7.dist-info/METADATA,sha256=JWyAEL1oLxlMaL4EHFxm8F1fcMe7EU2QLi-jlYSgGlQ,2121
266
+ omlish-0.0.0.dev7.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
267
+ omlish-0.0.0.dev7.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
268
+ omlish-0.0.0.dev7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.1.0)
2
+ Generator: setuptools (73.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
omlish/reflect.py DELETED
@@ -1,355 +0,0 @@
1
- """
2
- TODO:
3
- - callables..
4
- - uniform collection isinstance - items() for mappings, iter() for other
5
- - also check instance type in isinstance not just items lol
6
- - ta.Generic in mro causing trouble - omit? no longer 1:1
7
- - cache this shit, esp generic_mro shit
8
- - cache __hash__ in Generic/Union
9
- """
10
- import collections.abc
11
- import types
12
- import typing as ta
13
-
14
- from . import c3
15
- from . import lang
16
-
17
-
18
- if ta.TYPE_CHECKING:
19
- from .collections import cache
20
- else:
21
- cache = lang.proxy_import('.collections.cache', __package__)
22
-
23
-
24
- _NoneType = types.NoneType # type: ignore
25
-
26
- _NONE_TYPE_FROZENSET: frozenset['Type'] = frozenset([_NoneType])
27
-
28
-
29
- _GenericAlias = ta._GenericAlias # type: ignore # noqa
30
- # _CallableGenericAlias = ta._CallableGenericAlias # type: ignore # noqa
31
- _SpecialGenericAlias = ta._SpecialGenericAlias # type: ignore # noqa
32
- _UnionGenericAlias = ta._UnionGenericAlias # type: ignore # noqa
33
-
34
-
35
- ##
36
-
37
-
38
- class _Special(ta.NamedTuple):
39
- name: str
40
- alias: _SpecialGenericAlias # type: ignore
41
- origin: type
42
- nparams: int
43
-
44
-
45
- _KNOWN_SPECIALS = [
46
- _Special(
47
- v._name, # noqa
48
- v,
49
- v.__origin__,
50
- v._nparams, # noqa
51
- )
52
- for v in ta.__dict__.values()
53
- if isinstance(v, _SpecialGenericAlias)
54
- ]
55
-
56
- _KNOWN_SPECIALS_BY_NAME = {s.name: s for s in _KNOWN_SPECIALS}
57
- _KNOWN_SPECIALS_BY_ALIAS = {s.alias: s for s in _KNOWN_SPECIALS}
58
- _KNOWN_SPECIALS_BY_ORIGIN = {s.origin: s for s in _KNOWN_SPECIALS}
59
-
60
- _KNOWN_SPECIAL_TYPE_VARS = tuple(
61
- ta.TypeVar(f'_{i}') # noqa
62
- for i in range(max(s.nparams for s in _KNOWN_SPECIALS) + 1)
63
- )
64
-
65
-
66
- ##
67
-
68
-
69
- def get_params(obj: ta.Any) -> tuple[ta.TypeVar, ...]:
70
- if isinstance(obj, type):
71
- if issubclass(obj, ta.Generic): # type: ignore
72
- return obj.__dict__.get('__parameters__', ()) # noqa
73
-
74
- if (ks := _KNOWN_SPECIALS_BY_ORIGIN.get(obj)) is not None:
75
- return _KNOWN_SPECIAL_TYPE_VARS[:ks.nparams]
76
-
77
- oty = type(obj)
78
-
79
- if oty is _GenericAlias or oty is ta.GenericAlias: # type: ignore # noqa
80
- return obj.__dict__.get('__parameters__', ()) # noqa
81
-
82
- raise TypeError(obj)
83
-
84
-
85
- def is_union_type(cls: ta.Any) -> bool:
86
- if hasattr(ta, 'UnionType'):
87
- return ta.get_origin(cls) in {ta.Union, getattr(ta, 'UnionType')}
88
- else:
89
- return ta.get_origin(cls) in {ta.Union}
90
-
91
-
92
- ##
93
-
94
-
95
- Type = ta.Union[
96
- type,
97
- ta.TypeVar,
98
- 'NewType',
99
- 'Union',
100
- 'Generic',
101
- ]
102
-
103
-
104
- class Union(ta.NamedTuple):
105
- args: frozenset[Type]
106
-
107
- @property
108
- def is_optional(self) -> bool:
109
- return _NoneType in self.args
110
-
111
- def without_none(self) -> Type:
112
- if _NoneType not in self.args:
113
- return self
114
- rem = self.args - _NONE_TYPE_FROZENSET
115
- if len(rem) == 1:
116
- return next(iter(rem))
117
- return Union(rem)
118
-
119
-
120
- class Generic(ta.NamedTuple):
121
- cls: type
122
- args: tuple[Type, ...] # map[int, V] = (int, V) | map[T, T] = (T, T)
123
- params: tuple[ta.TypeVar, ...] # map[int, V] = (_0, _1) | map[T, T] = (_0, _1)
124
- # params2: tuple[ta.TypeVar, ...] # map[int, V] = (V,) | map[T, T] = (T,)
125
- obj: ta.Any
126
-
127
- def __repr__(self) -> str:
128
- return (
129
- f'{self.__class__.__name__}('
130
- f'cls={self.cls.__name__}, '
131
- f'args={self.args!r}, '
132
- f'params={self.params!r})'
133
- )
134
-
135
-
136
- class NewType(ta.NamedTuple):
137
- obj: ta.Any
138
-
139
-
140
- TYPES: tuple[type, ...] = (
141
- type,
142
- ta.TypeVar,
143
- Union,
144
- Generic,
145
- NewType,
146
- )
147
-
148
-
149
- def type_(obj: ta.Any) -> Type:
150
- if isinstance(obj, (Union, Generic, ta.TypeVar, NewType)): # noqa
151
- return obj
152
-
153
- oty = type(obj)
154
-
155
- if oty is _UnionGenericAlias or oty is types.UnionType:
156
- return Union(frozenset(type_(a) for a in ta.get_args(obj)))
157
-
158
- if isinstance(obj, ta.NewType): # noqa
159
- return NewType(oty)
160
-
161
- if (
162
- oty is _GenericAlias or
163
- oty is ta.GenericAlias # type: ignore # noqa
164
- ):
165
- origin = ta.get_origin(obj)
166
- args = ta.get_args(obj)
167
- if origin is ta.Generic:
168
- params = args
169
- else:
170
- params = get_params(origin)
171
- if len(args) != len(params):
172
- raise TypeError(f'Mismatched {args=} and {params=} for {obj=}')
173
- return Generic(
174
- origin,
175
- tuple(type_(a) for a in args),
176
- params,
177
- obj,
178
- )
179
-
180
- if isinstance(obj, type):
181
- if issubclass(obj, ta.Generic): # type: ignore
182
- params = get_params(obj)
183
- return Generic(
184
- obj,
185
- params,
186
- params,
187
- obj,
188
- )
189
- return obj
190
-
191
- if isinstance(obj, _SpecialGenericAlias):
192
- if (ks := _KNOWN_SPECIALS_BY_ALIAS.get(obj)) is not None:
193
- params = _KNOWN_SPECIAL_TYPE_VARS[:ks.nparams]
194
- return Generic(
195
- ks.origin,
196
- params,
197
- params,
198
- obj,
199
- )
200
-
201
- raise TypeError(obj)
202
-
203
-
204
- ##
205
-
206
-
207
- def types_equivalent(l: Type, r: Type) -> bool:
208
- if isinstance(l, Generic) and isinstance(r, Generic):
209
- return l.cls == r.cls and l.args == r.args
210
- return l == r
211
-
212
-
213
- def get_underlying(nt: NewType) -> Type:
214
- return type_(nt.obj.__supertype__) # noqa
215
-
216
-
217
- def get_concrete_type(ty: Type) -> type | None:
218
- if isinstance(ty, type):
219
- return ty
220
- if isinstance(ty, Generic):
221
- return ty.cls
222
- if isinstance(ty, NewType):
223
- return get_concrete_type(get_underlying(ty))
224
- if isinstance(ty, (Union, ta.TypeVar)):
225
- return None
226
- raise TypeError(ty)
227
-
228
-
229
- def get_type_var_replacements(ty: Type) -> ta.Mapping[ta.TypeVar, Type]:
230
- if isinstance(ty, Generic):
231
- return dict(zip(ty.params, ty.args))
232
- return {}
233
-
234
-
235
- def to_annotation(ty: Type) -> ta.Any:
236
- if isinstance(ty, Generic):
237
- return ty.obj if ty.obj is not None else ty.cls
238
- if isinstance(ty, Union):
239
- return ta.Union[*tuple(to_annotation(e) for e in ty.args)]
240
- if isinstance(ty, (type, ta.TypeVar, NewType)):
241
- return ty
242
- raise TypeError(ty)
243
-
244
-
245
- def replace_type_vars(
246
- ty: Type,
247
- rpl: ta.Mapping[ta.TypeVar, Type],
248
- *,
249
- update_aliases: bool = False,
250
- ) -> Type:
251
- def rec(cur):
252
- if isinstance(cur, type):
253
- return cur
254
- if isinstance(cur, NewType):
255
- return cur
256
- if isinstance(cur, Generic):
257
- args = tuple(rec(a) for a in cur.args)
258
- if update_aliases:
259
- obj = cur.obj
260
- if (ops := get_params(obj)):
261
- nargs = [to_annotation(rpl[p]) for p in ops]
262
- if ta.get_origin(obj) is ta.Generic:
263
- # FIXME: None? filter_typing_generic in get_generic_bases?
264
- pass
265
- else:
266
- obj = cur.obj[*nargs]
267
- else:
268
- obj = None
269
- return cur._replace(args=args, obj=obj)
270
- if isinstance(cur, Union):
271
- return Union(frozenset(rec(e) for e in cur.args))
272
- if isinstance(cur, ta.TypeVar):
273
- return rpl[cur]
274
- raise TypeError(cur)
275
-
276
- return rec(ty)
277
-
278
-
279
- class GenericSubstitution:
280
- def __init__(
281
- self,
282
- *,
283
- update_aliases: bool = False,
284
- cache_size: int = 0, # FIXME: ta.Generic isn't weakrefable..
285
- ) -> None:
286
- super().__init__()
287
-
288
- self._update_aliases = update_aliases
289
-
290
- if cache_size > 0:
291
- self.get_generic_bases = cache.cache(weak_keys=True, max_size=cache_size)(self.get_generic_bases) # type: ignore # noqa
292
- self.generic_mro = cache.cache(weak_keys=True, max_size=cache_size)(self.generic_mro) # type: ignore
293
-
294
- def get_generic_bases(self, ty: Type) -> tuple[Type, ...]:
295
- if (cty := get_concrete_type(ty)) is not None:
296
- rpl = get_type_var_replacements(ty)
297
- ret: list[Type] = []
298
- for b in types.get_original_bases(cty):
299
- bty = type_(b)
300
- if isinstance(bty, Generic) and isinstance(b, type):
301
- # FIXME: throws away relative types, but can't use original vars as they're class-contextual
302
- bty = type_(b[*((ta.Any,) * len(bty.params))]) # type: ignore
303
- rty = replace_type_vars(bty, rpl, update_aliases=self._update_aliases)
304
- ret.append(rty)
305
- return tuple(ret)
306
- return ()
307
-
308
- def generic_mro(self, obj: ta.Any) -> list[Type]:
309
- mro = c3.mro(
310
- type_(obj),
311
- get_bases=lambda t: self.get_generic_bases(t),
312
- is_subclass=lambda l, r: issubclass(get_concrete_type(l), get_concrete_type(r)), # type: ignore
313
- )
314
- return [ty for ty in mro if get_concrete_type(ty) is not ta.Generic]
315
-
316
-
317
- DEFAULT_GENERIC_SUBSTITUTION = GenericSubstitution()
318
-
319
- get_generic_bases = DEFAULT_GENERIC_SUBSTITUTION.get_generic_bases
320
- generic_mro = DEFAULT_GENERIC_SUBSTITUTION.generic_mro
321
-
322
- ALIAS_UPDATING_GENERIC_SUBSTITUTION = GenericSubstitution(update_aliases=True)
323
-
324
-
325
- ##
326
-
327
-
328
- KNOWN_GENERICS: ta.AbstractSet[type] = frozenset([
329
- collections.abc.Mapping,
330
- collections.abc.Sequence,
331
- collections.abc.Set,
332
- ])
333
-
334
-
335
- def isinstance_of(rfl: Type) -> ta.Callable[[ta.Any], bool]:
336
- if isinstance(rfl, type):
337
- return lambda o: isinstance(o, rfl)
338
-
339
- if isinstance(rfl, NewType):
340
- return isinstance_of(get_underlying(rfl))
341
-
342
- if isinstance(rfl, Union):
343
- fns = [isinstance_of(a) for a in rfl.args]
344
- return lambda o: any(fn(o) for fn in fns)
345
-
346
- if isinstance(rfl, Generic):
347
- if rfl.cls in (collections.abc.Sequence, collections.abc.Set):
348
- [efn] = map(isinstance_of, rfl.args)
349
- return lambda o: isinstance(o, rfl.cls) and all(efn(e) for e in o) # type: ignore
350
-
351
- if rfl.cls == collections.abc.Mapping:
352
- kfn, vfn = map(isinstance_of, rfl.args)
353
- return lambda o: isinstance(o, rfl.cls) and all(kfn(k) and vfn(v) for k, v in o.items()) # type: ignore
354
-
355
- raise TypeError(rfl)
@@ -1,34 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: omlish
3
- Version: 0.0.0.dev5
4
- Summary: omlish
5
- Author: wrmsr
6
- License: BSD-3-Clause
7
- Project-URL: source, https://github.com/wrmsr/omlish
8
- Classifier: License :: OSI Approved :: BSD License
9
- Classifier: Development Status :: 2 - Pre-Alpha
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Operating System :: OS Independent
12
- Requires-Python: >=3.12
13
- License-File: LICENSE
14
- Provides-Extra: async
15
- Requires-Dist: anyio ; extra == 'async'
16
- Provides-Extra: http
17
- Requires-Dist: httpx ; extra == 'http'
18
- Provides-Extra: server
19
- Requires-Dist: h11 ; extra == 'server'
20
- Requires-Dist: h2 ; extra == 'server'
21
- Requires-Dist: priority ; extra == 'server'
22
- Requires-Dist: wsproto ; extra == 'server'
23
- Provides-Extra: sql
24
- Requires-Dist: sqlalchemy ; extra == 'sql'
25
- Provides-Extra: test
26
- Requires-Dist: pytest ; extra == 'test'
27
- Provides-Extra: trio
28
- Requires-Dist: trio ; extra == 'trio'
29
- Requires-Dist: trio-asyncio ; extra == 'trio'
30
- Provides-Extra: wrapt
31
- Requires-Dist: wrapt ; extra == 'wrapt'
32
- Provides-Extra: yaml
33
- Requires-Dist: pyyaml ; extra == 'yaml'
34
-