omlish 0.0.0.dev60__py3-none-any.whl → 0.0.0.dev62__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/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev60'
2
- __revision__ = 'eb96b2408cdf5b153541f194ea5ab7bba1c2524b'
1
+ __version__ = '0.0.0.dev62'
2
+ __revision__ = 'a5ef2d1548d1cdfb856b4a7ff99fe61080ab791e'
3
3
 
4
4
 
5
5
  #
omlish/bootstrap/diag.py CHANGED
@@ -17,6 +17,7 @@ if ta.TYPE_CHECKING:
17
17
  import cProfile # noqa
18
18
  import pstats
19
19
 
20
+ from ..diag import debug as ddbg
20
21
  from ..diag import pycharm as diagpc
21
22
  from ..diag import replserver as diagrs
22
23
  from ..diag import threads as diagt
@@ -25,6 +26,7 @@ else:
25
26
  cProfile = lang.proxy_import('cProfile') # noqa
26
27
  pstats = lang.proxy_import('pstats')
27
28
 
29
+ ddbg = lang.proxy_import('..diag.debug', __package__)
28
30
  diagpc = lang.proxy_import('..diag.pycharm', __package__)
29
31
  diagrs = lang.proxy_import('..diag.replserver', __package__)
30
32
  diagt = lang.proxy_import('..diag.threads', __package__)
@@ -200,3 +202,20 @@ class ReplServerBootstrap(ContextBootstrap['ReplServerBootstrap.Config']):
200
202
  thread.start()
201
203
 
202
204
  yield
205
+
206
+
207
+ ##
208
+
209
+
210
+ class DebugBootstrap(ContextBootstrap['DebugBootstrap.Config']):
211
+ @dc.dataclass(frozen=True)
212
+ class Config(Bootstrap.Config):
213
+ enable: bool = False
214
+
215
+ @contextlib.contextmanager
216
+ def enter(self) -> ta.Iterator[None]:
217
+ if not self._config.enable:
218
+ return
219
+
220
+ with ddbg.debugging_on_exception():
221
+ yield
@@ -16,8 +16,6 @@ TODO diag:
16
16
 
17
17
 
18
18
  TODO new items:
19
- - debugging / pdb
20
- - https://github.com/inducer/pudb
21
19
  - packaging fixups
22
20
  - daemonize ( https://github.com/thesharp/daemonize/blob/master/daemonize.py )
23
21
  """
omlish/bootstrap/main.py CHANGED
@@ -1,13 +1,15 @@
1
1
  """
2
2
  TODO:
3
3
  - -x / --exec - os.exec entrypoint
4
- - refuse to install non-exec-relevant Bootstraps when chosen
4
+ - refuse to install non-exec-relevant Bootstraps when chosen
5
5
  """
6
6
  # ruff: noqa: UP006 UP007
7
7
  import argparse
8
8
  import dataclasses as dc
9
9
  import io
10
10
  import itertools
11
+ import os
12
+ import shutil
11
13
  import sys
12
14
  import typing as ta
13
15
 
@@ -152,18 +154,36 @@ def _main() -> int:
152
154
  _add_arguments(parser)
153
155
 
154
156
  parser.add_argument('-m', '--module', action='store_true')
157
+ parser.add_argument('-c', '--code', action='store_true')
158
+ parser.add_argument('-x', '--exec', action='store_true')
155
159
  parser.add_argument('target')
156
160
  parser.add_argument('args', nargs=argparse.REMAINDER)
157
161
 
158
162
  args = parser.parse_args()
163
+
164
+ if len([a for a in ('module', 'code', 'exec') if getattr(args, a)]) > 1:
165
+ raise Exception('Multiple exec mode specified')
166
+
159
167
  cfgs = _process_arguments(args)
160
168
 
161
169
  with bootstrap(*cfgs):
162
170
  tgt = args.target
163
171
 
172
+ if args.exec:
173
+ exe = shutil.which(tgt)
174
+ if exe is None:
175
+ raise FileNotFoundError(exe)
176
+
177
+ os.execl(exe, exe, *args.args)
178
+
179
+ return 0 # type: ignore # noqa
180
+
164
181
  sys.argv = [tgt, *(args.args or ())]
165
182
 
166
- if args.module:
183
+ if args.code:
184
+ exec(tgt, {}, {})
185
+
186
+ elif args.module:
167
187
  runpy._run_module_as_main(tgt) # type: ignore # noqa
168
188
 
169
189
  else:
omlish/diag/debug.py ADDED
@@ -0,0 +1,26 @@
1
+ """
2
+ TODO:
3
+ - select best debugger: ipdb, pudb,
4
+ """
5
+ import contextlib
6
+ import sys
7
+ import traceback
8
+ import typing as ta
9
+
10
+
11
+ @contextlib.contextmanager
12
+ def debugging_on_exception(
13
+ *,
14
+ silent: bool = False,
15
+ ) -> ta.Iterator[None]:
16
+ import pdb # noqa
17
+
18
+ try:
19
+ yield
20
+ except Exception:
21
+ if not silent:
22
+ traceback.print_exc()
23
+
24
+ pdb.post_mortem(sys.exc_info()[2])
25
+
26
+ raise
omlish/marshal/base.py CHANGED
@@ -164,9 +164,12 @@ class BaseContext(lang.Abstract):
164
164
  options: col.TypeMap[Option] = col.TypeMap()
165
165
 
166
166
  def _reflect(self, o: ta.Any) -> rfl.Type:
167
- if (ovr := self.registry.get_of(o, ReflectOverride)):
168
- return ovr[-1].rty
169
- return rfl.type_(o)
167
+ def override(o):
168
+ if (ovr := self.registry.get_of(o, ReflectOverride)):
169
+ return ovr[-1].rty
170
+ return None
171
+
172
+ return rfl.Reflector(override=override).type(o)
170
173
 
171
174
 
172
175
  @dc.dataclass(frozen=True)
@@ -1,18 +1,6 @@
1
- from .types import ( # noqa
2
- ANY,
3
- Annotated,
4
- Any,
5
- Generic,
6
- NewType,
7
- TYPES,
8
- Type,
9
- Union,
10
- get_orig_bases,
11
- get_orig_class,
12
- get_params,
13
- is_type,
14
- is_union_type,
15
- type_,
1
+ from .isinstance import ( # noqa
2
+ KNOWN_ISINSTANCE_GENERICS,
3
+ isinstance_of,
16
4
  )
17
5
 
18
6
  from .ops import ( # noqa
@@ -24,11 +12,6 @@ from .ops import ( # noqa
24
12
  types_equivalent,
25
13
  )
26
14
 
27
- from .isinstance import ( # noqa
28
- KNOWN_ISINSTANCE_GENERICS,
29
- isinstance_of,
30
- )
31
-
32
15
  from .subst import ( # noqa
33
16
  ALIAS_UPDATING_GENERIC_SUBSTITUTION,
34
17
  DEFAULT_GENERIC_SUBSTITUTION,
@@ -38,3 +21,22 @@ from .subst import ( # noqa
38
21
  get_type_var_replacements,
39
22
  replace_type_vars,
40
23
  )
24
+
25
+ from .types import ( # noqa
26
+ ANY,
27
+ Annotated,
28
+ Any,
29
+ DEFAULT_REFLECTOR,
30
+ Generic,
31
+ NewType,
32
+ Reflector,
33
+ TYPES,
34
+ Type,
35
+ Union,
36
+ get_orig_bases,
37
+ get_orig_class,
38
+ get_params,
39
+ is_type,
40
+ is_union_type,
41
+ type_,
42
+ )
omlish/reflect/types.py CHANGED
@@ -195,92 +195,111 @@ TYPES: tuple[type, ...] = (
195
195
  ##
196
196
 
197
197
 
198
- def is_type(obj: ta.Any) -> bool:
199
- if isinstance(obj, (Union, Generic, ta.TypeVar, NewType, Any)): # noqa
200
- return True
198
+ class Reflector:
199
+ def __init__(
200
+ self,
201
+ *,
202
+ override: ta.Callable[[ta.Any], ta.Any] | None = None,
203
+ ) -> None:
204
+ super().__init__()
201
205
 
202
- oty = type(obj)
206
+ self._override = override
203
207
 
204
- return (
205
- oty is _UnionGenericAlias or oty is types.UnionType or # noqa
208
+ def is_type(self, obj: ta.Any) -> bool:
209
+ if isinstance(obj, (Union, Generic, ta.TypeVar, NewType, Any)): # noqa
210
+ return True
206
211
 
207
- isinstance(obj, ta.NewType) or # noqa
212
+ oty = type(obj)
208
213
 
209
- (
210
- is_simple_generic_alias_type(oty) or
211
- oty is _CallableGenericAlias
212
- ) or
214
+ return (
215
+ oty is _UnionGenericAlias or oty is types.UnionType or # noqa
213
216
 
214
- isinstance(obj, type) or
217
+ isinstance(obj, ta.NewType) or # noqa
215
218
 
216
- isinstance(obj, _SpecialGenericAlias)
217
- )
219
+ (
220
+ is_simple_generic_alias_type(oty) or
221
+ oty is _CallableGenericAlias
222
+ ) or
218
223
 
224
+ isinstance(obj, type) or
219
225
 
220
- def type_(obj: ta.Any) -> Type:
221
- if obj is ta.Any:
222
- return ANY
226
+ isinstance(obj, _SpecialGenericAlias)
227
+ )
223
228
 
224
- if isinstance(obj, (Union, Generic, ta.TypeVar, NewType, Any)): # noqa
225
- return obj
229
+ def type(self, obj: ta.Any) -> Type:
230
+ if self._override is not None:
231
+ if (ovr := self._override(obj)) is not None:
232
+ return ovr
226
233
 
227
- oty = type(obj)
234
+ if obj is ta.Any:
235
+ return ANY
228
236
 
229
- if oty is _UnionGenericAlias or oty is types.UnionType:
230
- return Union(frozenset(type_(a) for a in ta.get_args(obj)))
231
-
232
- if isinstance(obj, ta.NewType): # noqa
233
- return NewType(obj)
234
-
235
- if (
236
- is_simple_generic_alias_type(oty) or
237
- oty is _CallableGenericAlias
238
- ):
239
- origin = ta.get_origin(obj)
240
- args = ta.get_args(obj)
241
- if oty is _CallableGenericAlias:
242
- p, r = args
243
- if p is Ellipsis or isinstance(p, ta.ParamSpec):
244
- raise TypeError(f'Callable argument not yet supported for {obj=}')
245
- args = (*p, r)
246
- params = _KNOWN_SPECIAL_TYPE_VARS[:len(args)]
247
- elif origin is ta.Generic:
248
- params = args
249
- else:
250
- params = get_params(origin)
251
- if len(args) != len(params):
252
- raise TypeError(f'Mismatched {args=} and {params=} for {obj=}')
253
- return Generic(
254
- origin,
255
- tuple(type_(a) for a in args),
256
- params,
257
- obj,
258
- )
237
+ if isinstance(obj, (Union, Generic, ta.TypeVar, NewType, Any)): # noqa
238
+ return obj
259
239
 
260
- if isinstance(obj, type):
261
- if issubclass(obj, ta.Generic): # type: ignore
262
- params = get_params(obj)
263
- if params:
240
+ oty = type(obj)
241
+
242
+ if oty is _UnionGenericAlias or oty is types.UnionType:
243
+ return Union(frozenset(self.type(a) for a in ta.get_args(obj)))
244
+
245
+ if isinstance(obj, ta.NewType): # noqa
246
+ return NewType(obj)
247
+
248
+ if (
249
+ is_simple_generic_alias_type(oty) or
250
+ oty is _CallableGenericAlias
251
+ ):
252
+ origin = ta.get_origin(obj)
253
+ args = ta.get_args(obj)
254
+ if oty is _CallableGenericAlias:
255
+ p, r = args
256
+ if p is Ellipsis or isinstance(p, ta.ParamSpec):
257
+ raise TypeError(f'Callable argument not yet supported for {obj=}')
258
+ args = (*p, r)
259
+ params = _KNOWN_SPECIAL_TYPE_VARS[:len(args)]
260
+ elif origin is ta.Generic:
261
+ params = args
262
+ else:
263
+ params = get_params(origin)
264
+ if len(args) != len(params):
265
+ raise TypeError(f'Mismatched {args=} and {params=} for {obj=}')
266
+ return Generic(
267
+ origin,
268
+ tuple(self.type(a) for a in args),
269
+ params,
270
+ obj,
271
+ )
272
+
273
+ if isinstance(obj, type):
274
+ if issubclass(obj, ta.Generic): # type: ignore
275
+ params = get_params(obj)
276
+ if params:
277
+ return Generic(
278
+ obj,
279
+ params,
280
+ params,
281
+ obj,
282
+ )
283
+ return obj
284
+
285
+ if isinstance(obj, _SpecialGenericAlias):
286
+ if (ks := _KNOWN_SPECIALS_BY_ALIAS.get(obj)) is not None:
287
+ params = _KNOWN_SPECIAL_TYPE_VARS[:ks.nparams]
264
288
  return Generic(
265
- obj,
289
+ ks.origin,
266
290
  params,
267
291
  params,
268
292
  obj,
269
293
  )
270
- return obj
271
294
 
272
- if isinstance(obj, _SpecialGenericAlias):
273
- if (ks := _KNOWN_SPECIALS_BY_ALIAS.get(obj)) is not None:
274
- params = _KNOWN_SPECIAL_TYPE_VARS[:ks.nparams]
275
- return Generic(
276
- ks.origin,
277
- params,
278
- params,
279
- obj,
280
- )
295
+ if isinstance(obj, _AnnotatedAlias):
296
+ o = ta.get_args(obj)[0]
297
+ return Annotated(self.type(o), md=obj.__metadata__, obj=obj)
281
298
 
282
- if isinstance(obj, _AnnotatedAlias):
283
- o = ta.get_args(obj)[0]
284
- return Annotated(type_(o), md=obj.__metadata__, obj=obj)
299
+ raise TypeError(obj)
285
300
 
286
- raise TypeError(obj)
301
+
302
+ DEFAULT_REFLECTOR = Reflector()
303
+
304
+ is_type = DEFAULT_REFLECTOR.is_type
305
+ type_ = DEFAULT_REFLECTOR.type
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev60
3
+ Version: 0.0.0.dev62
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=jvyoQ7x8UJ9lpRgkh7eElwJ8qnzyG5aUGameT9Yk8GM,1419
2
- omlish/__about__.py,sha256=FBKxqP5dW_gNqz7t1xG_3WdV2AUAJW3mxH9f6_99dok,3420
2
+ omlish/__about__.py,sha256=u-gRUFmrAMM8C-1-u6UfjGvA_1qc3iVQiZLYnMGHQxg,3420
3
3
  omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omlish/argparse.py,sha256=Vr70_85EVLJLgEkRtwOr264tMRtqtlN7ncFfXRUk5aM,6914
5
5
  omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
@@ -89,9 +89,9 @@ omlish/asyncs/trio_asyncio.py,sha256=oqdOHy0slj9PjVxaDf3gJkq9AAgg7wYZbB469jOftVw
89
89
  omlish/bootstrap/__init__.py,sha256=-Rtsg7uPQNhh1dIT9nqrz96XlqizwoLnWf-FwOEstJI,730
90
90
  omlish/bootstrap/__main__.py,sha256=4jCwsaogp0FrJjJZ85hzF4-WqluPeheHbfeoKynKvNs,194
91
91
  omlish/bootstrap/base.py,sha256=d8hqn4hp1XMMi5PgcJBQXPKmW47epu8CxBlqDZiRZb4,1073
92
- omlish/bootstrap/diag.py,sha256=x_BKS_uhfW8QFk1NeH_VIocHif-A6FVTZ37262qCgZ0,5052
93
- omlish/bootstrap/harness.py,sha256=vDnpM0ZLSJaylxQNA4u2lwQwiU-KXZDb7MlkrhchFJY,2022
94
- omlish/bootstrap/main.py,sha256=u-TfxO4GkAK3LbRweQERogtO4kT0z3gqXRjnXvtJzC8,5328
92
+ omlish/bootstrap/diag.py,sha256=LADLhusbJ1tKxVD8-gmia1HShX1VeszRO1OApIQhSpI,5507
93
+ omlish/bootstrap/harness.py,sha256=VW8YP-yENGyXIuJ8GL_xintArF13nafwpz-iAghPt34,1967
94
+ omlish/bootstrap/main.py,sha256=ripSWAlYz3LVyv6S_Js9MWYO3QNKgBSaFQv3gqGjuRM,5885
95
95
  omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
96
96
  omlish/bootstrap/sys.py,sha256=i6veZeE83wO0HTl9b6ykj_pEN05fqu0enoAv4sw5Ayc,8742
97
97
  omlish/collections/__init__.py,sha256=tGUzvS_ZjiqALsLRy7JX3h4KZRQX2CmtdAfTRD7UwMk,1677
@@ -151,6 +151,7 @@ omlish/dataclasses/impl/slots.py,sha256=_sm-x9v1tPnXEHBHNUMTHZocgVyhZaPdvamIPPBU
151
151
  omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jIymw,6138
152
152
  omlish/diag/__init__.py,sha256=BYQoq12W2qU0O7m2Z-RLCX6YLIYEW9MmfN7_i9--Yk0,132
153
153
  omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
154
+ omlish/diag/debug.py,sha256=YPzQXiBAJMYHYpBKzx0QhlLMZokjR5kkAVLodA3yddQ,424
154
155
  omlish/diag/procfs.py,sha256=vBovaMvAUKdl7FbtFq3TNsSmdhs8DaYfhoEsKeWYta8,9704
155
156
  omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
156
157
  omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
@@ -288,7 +289,7 @@ omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
288
289
  omlish/logs/utils.py,sha256=MgGovbP0zUrZ3FGD3qYNQWn-l0jy0Y0bStcQvv5BOmQ,391
289
290
  omlish/marshal/__init__.py,sha256=G0MDeBStBjz9Njq-rt5C6WbuCik6c8st7cipwMVw668,2139
290
291
  omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
291
- omlish/marshal/base.py,sha256=I7IOzFGn_DFeBRFCH8F0ONBa-NzM4mmMDld6bmoW-rc,6501
292
+ omlish/marshal/base.py,sha256=_ZKSSuv6p9r86sja_jaxI09WYpjCBFi0KTsOiZCYyk0,6587
292
293
  omlish/marshal/base64.py,sha256=F-3ogJdcFCtWINRgJgWT0rErqgx6f4qahhcg8OrkqhE,1089
293
294
  omlish/marshal/dataclasses.py,sha256=G6Uh8t4vvNBAx2BhzH8ksj8Hq_bo6npFphQhyF298VU,6892
294
295
  omlish/marshal/datetimes.py,sha256=0ffg8cEvx9SMKIXZGD9b7MqpLfmgw0uKKdn6YTfoqok,3714
@@ -318,11 +319,11 @@ omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
318
319
  omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
319
320
  omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
320
321
  omlish/math/stats.py,sha256=MegzKVsmv2kra4jDWLOUgV0X7Ee2Tbl5u6ql1v4-dEY,10053
321
- omlish/reflect/__init__.py,sha256=8t2955chuWPzj8yiV7R_jlREAezSz6CVTJ0HKY58Vpk,687
322
+ omlish/reflect/__init__.py,sha256=eJzSLlCWcjGWn7NGzIR66vANvxiHQym73YJeMwB7mCw,725
322
323
  omlish/reflect/isinstance.py,sha256=x5T9S2634leinBT4hl3CZZkRttvdvvlxChkC_x9Qu2s,1176
323
324
  omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
324
325
  omlish/reflect/subst.py,sha256=JM2RGv2-Rcex8wCqhmgvRG59zD242P9jM3O2QLjKWWo,3586
325
- omlish/reflect/types.py,sha256=Zkcp8nx_vFNH7pBZ5pU5P0wIgQCauj5Nic3BZb5cRik,7030
326
+ omlish/reflect/types.py,sha256=8EhhLU-ko-Uepk3Xa0v22w8LBS7MbjPwJ4HNM_Dtf5g,7779
326
327
  omlish/secrets/__init__.py,sha256=SGB1KrlNrxlNpazEHYy95NTzteLi8ndoEgMhU7luBl8,420
327
328
  omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
328
329
  omlish/secrets/marshal.py,sha256=U9uSRTWzZmumfNZeh_dROwVdGrARsp155TylRbjilP8,2048
@@ -407,9 +408,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
407
408
  omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
408
409
  omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
409
410
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
410
- omlish-0.0.0.dev60.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
411
- omlish-0.0.0.dev60.dist-info/METADATA,sha256=ywbae2f6yzK7ZJn0W83KHW9L1sTuH-Y7h4sf8pAl95k,4167
412
- omlish-0.0.0.dev60.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
413
- omlish-0.0.0.dev60.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
414
- omlish-0.0.0.dev60.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
415
- omlish-0.0.0.dev60.dist-info/RECORD,,
411
+ omlish-0.0.0.dev62.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
412
+ omlish-0.0.0.dev62.dist-info/METADATA,sha256=mt0fT8Bk_wKy64eUKY_AYPNxHg-yruiGNd2EYcnYUPw,4167
413
+ omlish-0.0.0.dev62.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
414
+ omlish-0.0.0.dev62.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
415
+ omlish-0.0.0.dev62.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
416
+ omlish-0.0.0.dev62.dist-info/RECORD,,