omlish 0.0.0.dev129__py3-none-any.whl → 0.0.0.dev131__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
omlish/lite/inject.py CHANGED
@@ -1,9 +1,4 @@
1
1
  # ruff: noqa: UP006 UP007
2
- """
3
- TODO:
4
- - recursion detection
5
- - bind empty array
6
- """
7
2
  import abc
8
3
  import contextlib
9
4
  import dataclasses as dc
@@ -325,7 +320,11 @@ def build_injector_provider_map(bs: InjectorBindings) -> ta.Mapping[InjectorKey,
325
320
 
326
321
  for b in bs.bindings():
327
322
  if b.key.array:
328
- am.setdefault(b.key, []).append(b.provider)
323
+ al = am.setdefault(b.key, [])
324
+ if isinstance(b.provider, ArrayInjectorProvider):
325
+ al.extend(b.provider.ps)
326
+ else:
327
+ al.append(b.provider)
329
328
  else:
330
329
  if b.key in pm:
331
330
  raise KeyError(b.key)
@@ -473,6 +472,14 @@ def build_injection_kwargs_target(
473
472
  _INJECTOR_INJECTOR_KEY: InjectorKey[Injector] = InjectorKey(Injector)
474
473
 
475
474
 
475
+ @dc.dataclass(frozen=True)
476
+ class _InjectorEager:
477
+ key: InjectorKey
478
+
479
+
480
+ _INJECTOR_EAGER_ARRAY_KEY: InjectorKey[_InjectorEager] = InjectorKey(_InjectorEager, array=True)
481
+
482
+
476
483
  class _Injector(Injector):
477
484
  def __init__(self, bs: InjectorBindings, p: ta.Optional[Injector] = None) -> None:
478
485
  super().__init__()
@@ -487,6 +494,10 @@ class _Injector(Injector):
487
494
 
488
495
  self.__cur_req: ta.Optional[_Injector._Request] = None
489
496
 
497
+ if _INJECTOR_EAGER_ARRAY_KEY in self._pfm:
498
+ for e in self.provide(_INJECTOR_EAGER_ARRAY_KEY):
499
+ self.provide(e.key)
500
+
490
501
  class _Request:
491
502
  def __init__(self, injector: '_Injector') -> None:
492
503
  super().__init__()
@@ -644,6 +655,8 @@ class InjectorBinder:
644
655
  to_key: ta.Any = None,
645
656
 
646
657
  singleton: bool = False,
658
+
659
+ eager: bool = False,
647
660
  ) -> InjectorBindingOrBindings:
648
661
  if obj is None or obj is inspect.Parameter.empty:
649
662
  raise TypeError(obj)
@@ -717,13 +730,21 @@ class InjectorBinder:
717
730
  if singleton:
718
731
  provider = SingletonInjectorProvider(provider)
719
732
 
733
+ binding = InjectorBinding(key, provider)
734
+
720
735
  ##
721
736
 
722
- binding = InjectorBinding(key, provider)
737
+ extras: ta.List[InjectorBinding] = []
738
+
739
+ if eager:
740
+ extras.append(bind_injector_eager_key(key))
723
741
 
724
742
  ##
725
743
 
726
- return binding
744
+ if extras:
745
+ return as_injector_bindings(binding, *extras)
746
+ else:
747
+ return binding
727
748
 
728
749
 
729
750
  ###
@@ -746,6 +767,26 @@ def make_injector_factory(
746
767
  return outer
747
768
 
748
769
 
770
+ def bind_injector_array(
771
+ obj: ta.Any = None,
772
+ *,
773
+ tag: ta.Any = None,
774
+ ) -> InjectorBindingOrBindings:
775
+ key = as_injector_key(obj)
776
+ if tag is not None:
777
+ if key.tag is not None:
778
+ raise ValueError('Must not specify multiple tags')
779
+ key = dc.replace(key, tag=tag)
780
+
781
+ if key.array:
782
+ raise ValueError('Key must not be array')
783
+
784
+ return InjectorBinding(
785
+ dc.replace(key, array=True),
786
+ ArrayInjectorProvider([]),
787
+ )
788
+
789
+
749
790
  def make_injector_array_type(
750
791
  ele: ta.Union[InjectorKey, InjectorKeyCls],
751
792
  cls: U,
@@ -767,6 +808,10 @@ def make_injector_array_type(
767
808
  return inner
768
809
 
769
810
 
811
+ def bind_injector_eager_key(key: ta.Any) -> InjectorBinding:
812
+ return InjectorBinding(_INJECTOR_EAGER_ARRAY_KEY, ConstInjectorProvider(_InjectorEager(as_injector_key(key))))
813
+
814
+
770
815
  ##
771
816
 
772
817
 
@@ -821,6 +866,8 @@ class Injection:
821
866
  to_key: ta.Any = None,
822
867
 
823
868
  singleton: bool = False,
869
+
870
+ eager: bool = False,
824
871
  ) -> InjectorBindingOrBindings:
825
872
  return InjectorBinder.bind(
826
873
  obj,
@@ -835,6 +882,8 @@ class Injection:
835
882
  to_key=to_key,
836
883
 
837
884
  singleton=singleton,
885
+
886
+ eager=eager,
838
887
  )
839
888
 
840
889
  # helpers
@@ -848,6 +897,15 @@ class Injection:
848
897
  ) -> InjectorBindingOrBindings:
849
898
  return cls.bind(make_injector_factory(fn, cls_, ann))
850
899
 
900
+ @classmethod
901
+ def bind_array(
902
+ cls,
903
+ obj: ta.Any = None,
904
+ *,
905
+ tag: ta.Any = None,
906
+ ) -> InjectorBindingOrBindings:
907
+ return bind_injector_array(obj, tag=tag)
908
+
851
909
  @classmethod
852
910
  def bind_array_type(
853
911
  cls,
omlish/lite/io.py CHANGED
@@ -3,6 +3,7 @@ import io
3
3
  import typing as ta
4
4
 
5
5
  from .check import check_isinstance
6
+ from .check import check_non_empty
6
7
  from .check import check_not_none
7
8
  from .strings import attr_repr
8
9
 
@@ -126,3 +127,100 @@ class DelimitingBuffer:
126
127
  p = i + remaining_buf_capacity
127
128
  yield self.Incomplete(self._append_and_reset(data[i:p]))
128
129
  i = p
130
+
131
+
132
+ class ReadableListBuffer:
133
+ def __init__(self) -> None:
134
+ super().__init__()
135
+ self._lst: list[bytes] = []
136
+
137
+ def feed(self, d: bytes) -> None:
138
+ if d:
139
+ self._lst.append(d)
140
+
141
+ def _chop(self, i: int, e: int) -> bytes:
142
+ lst = self._lst
143
+ d = lst[i]
144
+
145
+ o = b''.join([
146
+ *lst[:i],
147
+ d[:e],
148
+ ])
149
+
150
+ self._lst = [
151
+ *([d[e:]] if e < len(d) else []),
152
+ *lst[i + 1:],
153
+ ]
154
+
155
+ return o
156
+
157
+ def read(self, n: ta.Optional[int] = None) -> ta.Optional[bytes]:
158
+ if n is None:
159
+ o = b''.join(self._lst)
160
+ self._lst = []
161
+ return o
162
+
163
+ if not (lst := self._lst):
164
+ return None
165
+
166
+ c = 0
167
+ for i, d in enumerate(lst):
168
+ r = n - c
169
+ if (l := len(d)) >= r:
170
+ return self._chop(i, r)
171
+ c += l
172
+
173
+ return None
174
+
175
+ def read_until(self, delim: bytes = b'\n') -> ta.Optional[bytes]:
176
+ if not (lst := self._lst):
177
+ return None
178
+
179
+ for i, d in enumerate(lst):
180
+ if (p := d.find(delim)) >= 0:
181
+ return self._chop(i, p + len(delim))
182
+
183
+ return None
184
+
185
+
186
+ class IncrementalWriteBuffer:
187
+ def __init__(
188
+ self,
189
+ data: bytes,
190
+ *,
191
+ write_size: int = 0x10000,
192
+ ) -> None:
193
+ super().__init__()
194
+
195
+ check_non_empty(data)
196
+ self._len = len(data)
197
+ self._write_size = write_size
198
+
199
+ self._lst = [
200
+ data[i:i + write_size]
201
+ for i in range(0, len(data), write_size)
202
+ ]
203
+ self._pos = 0
204
+
205
+ @property
206
+ def rem(self) -> int:
207
+ return self._len - self._pos
208
+
209
+ def write(self, fn: ta.Callable[[bytes], int]) -> int:
210
+ lst = check_non_empty(self._lst)
211
+
212
+ t = 0
213
+ for i, d in enumerate(lst): # noqa
214
+ n = fn(check_non_empty(d))
215
+ if not n:
216
+ break
217
+ t += n
218
+
219
+ if t:
220
+ self._lst = [
221
+ *([d[n:]] if n < len(d) else []),
222
+ *lst[i + 1:],
223
+ ]
224
+ self._pos += t
225
+
226
+ return t
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev129
3
+ Version: 0.0.0.dev131
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -39,7 +39,7 @@ Requires-Dist: pymysql~=1.1; extra == "all"
39
39
  Requires-Dist: aiomysql~=0.2; extra == "all"
40
40
  Requires-Dist: aiosqlite~=0.20; extra == "all"
41
41
  Requires-Dist: asyncpg~=0.30; extra == "all"
42
- Requires-Dist: apsw~=3.46; extra == "all"
42
+ Requires-Dist: apsw~=3.47; extra == "all"
43
43
  Requires-Dist: sqlean.py~=3.45; extra == "all"
44
44
  Requires-Dist: duckdb~=1.1; extra == "all"
45
45
  Requires-Dist: pytest~=8.0; extra == "all"
@@ -85,7 +85,7 @@ Requires-Dist: pymysql~=1.1; extra == "sqldrivers"
85
85
  Requires-Dist: aiomysql~=0.2; extra == "sqldrivers"
86
86
  Requires-Dist: aiosqlite~=0.20; extra == "sqldrivers"
87
87
  Requires-Dist: asyncpg~=0.30; extra == "sqldrivers"
88
- Requires-Dist: apsw~=3.46; extra == "sqldrivers"
88
+ Requires-Dist: apsw~=3.47; extra == "sqldrivers"
89
89
  Requires-Dist: sqlean.py~=3.45; extra == "sqldrivers"
90
90
  Requires-Dist: duckdb~=1.1; extra == "sqldrivers"
91
91
  Provides-Extra: testing
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=CxGnj-UiRPlZgmgWoovDWrOnqpSEmBy_kqA7cdfSA3w,1431
2
- omlish/__about__.py,sha256=I7cXPq7JaH6uExuC7ADYlMyuYjPdRhADj2biay0wUN8,3379
2
+ omlish/__about__.py,sha256=d7BMVkW2N3aBZ6Tdsm0Fd2b0CcKLA6TPpoZPJHMAGDM,3379
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/argparse.py,sha256=cqKGAqcxuxv_s62z0gq29L9KAvg_3-_rFvXKjVpRJjo,8126
5
5
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
@@ -178,7 +178,7 @@ omlish/docker/helpers.py,sha256=9uyHpPVbsB2jqTzvU7jiLzTkDN1omqofse1w4B4GH5E,612
178
178
  omlish/docker/hub.py,sha256=7LIuJGdA-N1Y1dmo50ynKM1KUTcnQM_5XbtPbdT_QLU,3940
179
179
  omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
180
180
  omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
- omlish/formats/dotenv.py,sha256=orf37G11RM6Z6MxjBWbFAntwT8fi-ptkjN4EWoTeAsA,17689
181
+ omlish/formats/dotenv.py,sha256=qoDG4Ayu7B-8LjBBhcmNiLZW0_9LgCi3Ri2aPo9DEQ8,19314
182
182
  omlish/formats/props.py,sha256=cek3JLFLIrpE76gvs8rs_B8yF4SpY8ooDH8apWsquwE,18953
183
183
  omlish/formats/xml.py,sha256=ggiOwSERt4d9XmZwLZiDIh5qnFJS4jdmow9m9_9USps,1491
184
184
  omlish/formats/yaml.py,sha256=wTW8ECG9jyA7qIFUqKZUro4KAKpN4IvcW_qhlrKveXM,6836
@@ -232,7 +232,7 @@ omlish/http/multipart.py,sha256=R9ycpHsXRcmh0uoc43aYb7BdWL-8kSQHe7J-M81aQZM,2240
232
232
  omlish/http/sessions.py,sha256=VZ_WS5uiQG5y7i3u8oKuQMqf8dPKUOjFm_qk_0OvI8c,4793
233
233
  omlish/http/sse.py,sha256=MDs9RvxQXoQliImcc6qK1ERajEYM7Q1l8xmr-9ceNBc,2315
234
234
  omlish/http/wsgi.py,sha256=czZsVUX-l2YTlMrUjKN49wRoP4rVpS0qpeBn4O5BoMY,948
235
- omlish/inject/__init__.py,sha256=JQ7x8l9MjU-kJ5ap7cPVq7SY7zbbCIrjyJAF0UeE5-s,1886
235
+ omlish/inject/__init__.py,sha256=n0RC9UDGsBQQ39cST39-XJqJPq2M0tnnh9yJubW9azo,1891
236
236
  omlish/inject/binder.py,sha256=DAbc8TZi5w8Mna0TUtq0mT4jeDVA7i7SlBtOFrh2swc,4185
237
237
  omlish/inject/bindings.py,sha256=pLXn2U3kvmAS-68IOG-tr77DbiI-wp9hGyy4lhG6_H8,525
238
238
  omlish/inject/eagers.py,sha256=5AkGYuwijG0ihsH9NSaZotggalJ5_xWXhHE9mkn6IBA,329
@@ -248,20 +248,20 @@ omlish/inject/origins.py,sha256=OVQkiuRxx6ZtE8ZliufdndtFexcfpj-wZSDkUeGUCYM,534
248
248
  omlish/inject/overrides.py,sha256=hrm243slCw_DDRbn3dK5QK1jfHezVokG-WYO2JaQOV8,535
249
249
  omlish/inject/privates.py,sha256=hZOa_keY3KlXAzyiZ-sfN697UKXpkfXXNUIEmGT5TAA,641
250
250
  omlish/inject/providers.py,sha256=Z6UzNCwRhKHHR0L5CyBMo4F-1M_xElLkPA6EKQWcqlw,754
251
- omlish/inject/scopes.py,sha256=0b8Y0VidkpEk7tyxKSbv_1fE-2LomKTYlhFeoEemkwg,1979
251
+ omlish/inject/scopes.py,sha256=bxbpEPqRs9N61GDKD-4ZWXkB6xiLDrILLjcE2IvZEtM,1989
252
252
  omlish/inject/types.py,sha256=11WVEPkZ-_8cv1BeTDRU-soIYxB_6x7dyWtsa2Iej9U,251
253
253
  omlish/inject/utils.py,sha256=_UOZqA8IcLWPqf4Mcg9iIusQ5yxP_6Txg6PWtUYl23o,408
254
254
  omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
255
  omlish/inject/impl/bindings.py,sha256=8H586RCgmvwq53XBL9WMbb-1-Tdw_hh9zxIDCwcHA1c,414
256
256
  omlish/inject/impl/elements.py,sha256=bJBbHce_eZyIua2wbcejMwd9Uv-QeYcQ-c5N1qOXSmU,5950
257
- omlish/inject/impl/injector.py,sha256=WxIVOF6zvipb44302_j-xQZt8vnNCY0gdLX6UWzslXI,7550
257
+ omlish/inject/impl/injector.py,sha256=8Pm2TbI-ySfibpHG2kFeF1nBHkh5v-NEynykljkQ8ew,7560
258
258
  omlish/inject/impl/inspect.py,sha256=J0d2HJ-Z2-cHD4mJ0Kf5oJCOa2bMVG68Oh0Mhe3Cay4,3120
259
259
  omlish/inject/impl/multis.py,sha256=rRIWNCiTGaSWQUz_jxEy8LUmzdJDAlG94sLHYDS-ncg,2048
260
260
  omlish/inject/impl/origins.py,sha256=-cdcwz3BWb5LuC9Yn5ynYOwyPsKH06-kCc-3U0PxZ5w,1640
261
261
  omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCFQ,2613
262
262
  omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
263
263
  omlish/inject/impl/proxy.py,sha256=1ko0VaKqzu9UG8bIldp9xtUrAVUOFTKWKTjOCqIGr4s,1636
264
- omlish/inject/impl/scopes.py,sha256=ASfULXgP_ETlsAqFJfrZmyEaZt64Zr8tNn5ScA-EoXk,5900
264
+ omlish/inject/impl/scopes.py,sha256=hKnzNieB-fJSFEXDP_QG1mCfIKoVFIfFlf9LiIt5tk4,5920
265
265
  omlish/io/__init__.py,sha256=aaIEsXTSfytW-oEkUWczdUJ_ifFY7ihIpyidIbfjkwY,56
266
266
  omlish/io/_abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
267
267
  omlish/io/pyio.py,sha256=YB3g6yg64MzcFwbzKBo4adnbsbZ3FZMlOZfjNtWmYoc,95316
@@ -300,11 +300,11 @@ omlish/lifecycles/states.py,sha256=zqMOU2ZU-MDNnWuwauM3_anIAiXM8LoBDElDEraptFg,1
300
300
  omlish/lifecycles/transitions.py,sha256=qQtFby-h4VzbvgaUqT2NnbNumlcOx9FVVADP9t83xj4,1939
301
301
  omlish/lite/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
302
302
  omlish/lite/cached.py,sha256=Fs-ljXVJmHBjAaHc-JuJXMEV4MNSX5c_KHZIM3AEaIw,694
303
- omlish/lite/check.py,sha256=VDCx-7OqtN7EBcAAHhlYoNyRdo8UMyUDu9K44shMkIo,1519
303
+ omlish/lite/check.py,sha256=pQC412ffe_Zh7eHa4C1UYn6fA71Ls1vpVM0ZIOroPAY,1765
304
304
  omlish/lite/contextmanagers.py,sha256=_jfNdpYvxkbKwyjQLbK-o69W89GoEuUfl_NrCosE9lU,1308
305
305
  omlish/lite/docker.py,sha256=3IVZZtIm7-UdB2SwArmN_MosTva1_KifyYp3YWjODbE,337
306
- omlish/lite/inject.py,sha256=QXIEL920axG66kbt-fsLQDVy8kHcBT-2AHgc7qiCkKc,22108
307
- omlish/lite/io.py,sha256=lcpI1cS_Kn90tvYMg8ZWkSlYloS4RFqXCk-rKyclhdg,3148
306
+ omlish/lite/inject.py,sha256=aRRmFb6azTKF208ogYwVCEopNZx7496Ta1GZmL_IKBA,23716
307
+ omlish/lite/io.py,sha256=3ECgUXdRnXyS6pGTSoVr6oB4moI38EpWxTq08zaTM-U,5339
308
308
  omlish/lite/journald.py,sha256=f5Y2Q6-6O3iK_7MoGiwZwoQEOcP7LfkxxQNUR9tMjJM,3882
309
309
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
310
310
  omlish/lite/logs.py,sha256=1pcGu0ekhVCcLUckLSP16VccnAoprjtl5Vkdfm7y1Wg,6184
@@ -319,6 +319,12 @@ omlish/lite/socketserver.py,sha256=Esy9dAo9dPnNavNx5hW52YZi5hv504a8XQUudMrPs2A,1
319
319
  omlish/lite/strings.py,sha256=QURcE4-1pKVW8eT_5VCJpXaHDWR2dW2pYOChTJnZDiQ,1504
320
320
  omlish/lite/subprocesses.py,sha256=_YwUpvfaC2pV5TMC9-Ivuw1Ao-YxteD3a1NQwGERft4,3380
321
321
  omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
322
+ omlish/lite/fdio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
323
+ omlish/lite/fdio/corohttp.py,sha256=5kzuM1cssA2D7rfknHFxylpjBNfA5tQSPkIRY2Ilapo,3825
324
+ omlish/lite/fdio/handlers.py,sha256=ukUiwF8-UCr4mzTTfOaTipC0k3k7THiHnohVdYfH69o,1341
325
+ omlish/lite/fdio/kqueue.py,sha256=4SvSMwNdkXpQbkMhyLqiZIjFGPUGSgD22yr9mpxT2fk,3153
326
+ omlish/lite/fdio/manager.py,sha256=-gMVzk4B1YTZS-d2TdM12woUme37pcNVUxNTiLe91lA,1250
327
+ omlish/lite/fdio/pollers.py,sha256=zSFi19SGQ2WKtMO_ONiqaJ_mbQmhrK59zgH5CqMYcu8,5434
322
328
  omlish/lite/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
323
329
  omlish/lite/http/coroserver.py,sha256=aBaYjP80yQHQxPxwi7PTYHub-fdRDKsMnB-tM8lBc2o,18095
324
330
  omlish/lite/http/handlers.py,sha256=Yu0P3nqz-frklwCM2PbiWvoJNE-NqeTFLBvpNpqcdtA,753
@@ -482,9 +488,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
482
488
  omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
483
489
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
484
490
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
485
- omlish-0.0.0.dev129.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
486
- omlish-0.0.0.dev129.dist-info/METADATA,sha256=lebYC_UeiQKZPCZWcsShqqR6HJUpAcDQ7U4Bk941WF8,4173
487
- omlish-0.0.0.dev129.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
488
- omlish-0.0.0.dev129.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
489
- omlish-0.0.0.dev129.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
490
- omlish-0.0.0.dev129.dist-info/RECORD,,
491
+ omlish-0.0.0.dev131.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
492
+ omlish-0.0.0.dev131.dist-info/METADATA,sha256=V7J6J12IhBiLRFrCaAkvQgvB1VPvsZSzu32VsYQGSdE,4173
493
+ omlish-0.0.0.dev131.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
494
+ omlish-0.0.0.dev131.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
495
+ omlish-0.0.0.dev131.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
496
+ omlish-0.0.0.dev131.dist-info/RECORD,,