omlish 0.0.0.dev129__py3-none-any.whl → 0.0.0.dev131__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.
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,,