omlish 0.0.0.dev372__py3-none-any.whl → 0.0.0.dev374__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.dev372'
2
- __revision__ = '033823538cee9fc13c4075a41150dafd56975200'
1
+ __version__ = '0.0.0.dev374'
2
+ __revision__ = '7a173b571acabc80999972c98a5fb486b6be9464'
3
3
 
4
4
 
5
5
  #
omlish/lang/__init__.py CHANGED
@@ -174,7 +174,6 @@ from .enums import ( # noqa
174
174
  )
175
175
 
176
176
  from .functions import ( # noqa
177
- Args,
178
177
  VoidError,
179
178
  as_async,
180
179
  call_with,
@@ -359,6 +358,10 @@ from .typing import ( # noqa
359
358
 
360
359
  ##
361
360
 
361
+ from ..lite.args import ( # noqa
362
+ Args,
363
+ )
364
+
362
365
  from ..lite.contextmanagers import ( # noqa
363
366
  AsyncExitStacked,
364
367
  ExitStacked,
omlish/lang/functions.py CHANGED
@@ -1,4 +1,3 @@
1
- import dataclasses as dc
2
1
  import functools
3
2
  import time
4
3
  import types
@@ -210,37 +209,6 @@ def periodically(
210
209
  ##
211
210
 
212
211
 
213
- @dc.dataclass(init=False)
214
- class Args:
215
- args: ta.Sequence[ta.Any]
216
- kwargs: ta.Mapping[str, ta.Any]
217
-
218
- def __init__(self, *args: ta.Any, **kwargs: ta.Any) -> None:
219
- super().__init__()
220
-
221
- self.args = args
222
- self.kwargs = kwargs
223
-
224
- def __bool__(self) -> bool:
225
- return bool(self.args) or bool(self.kwargs)
226
-
227
- def update(self, *args: ta.Any, **kwargs: ta.Any) -> 'Args':
228
- return Args(
229
- *self.args,
230
- *args,
231
- **{
232
- **self.kwargs,
233
- **kwargs,
234
- },
235
- )
236
-
237
- def __call__(self, fn: ta.Callable[..., T]) -> T:
238
- return fn(*self.args, **self.kwargs)
239
-
240
-
241
- ##
242
-
243
-
244
212
  def coalesce(*vs: T | None) -> T:
245
213
  for v in vs:
246
214
  if v is not None:
omlish/lite/args.py ADDED
@@ -0,0 +1,36 @@
1
+ import dataclasses as dc
2
+ import typing as ta
3
+
4
+
5
+ T = ta.TypeVar('T')
6
+
7
+
8
+ ##
9
+
10
+
11
+ @dc.dataclass(init=False)
12
+ class Args:
13
+ args: ta.Sequence[ta.Any]
14
+ kwargs: ta.Mapping[str, ta.Any]
15
+
16
+ def __init__(self, *args: ta.Any, **kwargs: ta.Any) -> None:
17
+ super().__init__()
18
+
19
+ self.args = args
20
+ self.kwargs = kwargs
21
+
22
+ def __bool__(self) -> bool:
23
+ return bool(self.args) or bool(self.kwargs)
24
+
25
+ def update(self, *args: ta.Any, **kwargs: ta.Any) -> 'Args':
26
+ return Args(
27
+ *self.args,
28
+ *args,
29
+ **{
30
+ **self.kwargs,
31
+ **kwargs,
32
+ },
33
+ )
34
+
35
+ def __call__(self, fn: ta.Callable[..., T]) -> T:
36
+ return fn(*self.args, **self.kwargs)
omlish/lite/marshal.py CHANGED
@@ -1,7 +1,6 @@
1
1
  """
2
2
  TODO:
3
3
  - pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
4
- - literals
5
4
  - Options.sequence_cls = list, mapping_cls = dict, ... - def with_mutable_containers() -> Options
6
5
  """
7
6
  # ruff: noqa: UP006 UP007 UP045
@@ -24,7 +23,6 @@ from .check import check
24
23
  from .reflect import deep_subclasses
25
24
  from .reflect import get_literal_type_args
26
25
  from .reflect import get_new_type_supertype
27
- from .reflect import get_optional_alias_arg
28
26
  from .reflect import is_generic_alias
29
27
  from .reflect import is_literal_type
30
28
  from .reflect import is_new_type
@@ -144,6 +142,28 @@ class OptionalObjMarshaler(ObjMarshaler):
144
142
  return self.item.unmarshal(o, ctx)
145
143
 
146
144
 
145
+ @dc.dataclass(frozen=True)
146
+ class PrimitiveUnionObjMarshaler(ObjMarshaler):
147
+ pt: ta.Tuple[type, ...]
148
+ x: ta.Optional[ObjMarshaler] = None
149
+
150
+ def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
151
+ if isinstance(o, self.pt):
152
+ return o
153
+ elif self.x is not None:
154
+ return self.x.marshal(o, ctx)
155
+ else:
156
+ raise TypeError(o)
157
+
158
+ def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
159
+ if isinstance(o, self.pt):
160
+ return o
161
+ elif self.x is not None:
162
+ return self.x.unmarshal(o, ctx)
163
+ else:
164
+ raise TypeError(o)
165
+
166
+
147
167
  @dc.dataclass(frozen=True)
148
168
  class LiteralObjMarshaler(ObjMarshaler):
149
169
  item: ObjMarshaler
@@ -342,6 +362,13 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
342
362
  collections.abc.MutableSequence: list,
343
363
  }
344
364
 
365
+ _OBJ_MARSHALER_PRIMITIVE_TYPES: ta.Set[type] = {
366
+ int,
367
+ float,
368
+ bool,
369
+ str,
370
+ }
371
+
345
372
 
346
373
  ##
347
374
 
@@ -490,8 +517,16 @@ class ObjMarshalerManager:
490
517
 
491
518
  if is_literal_type(ty):
492
519
  lvs = frozenset(get_literal_type_args(ty))
520
+ if None in lvs:
521
+ is_opt = True
522
+ lvs -= frozenset([None])
523
+ else:
524
+ is_opt = False
493
525
  lty = check.single(set(map(type, lvs)))
494
- return LiteralObjMarshaler(rec(lty), lvs)
526
+ lm: ObjMarshaler = LiteralObjMarshaler(rec(lty), lvs)
527
+ if is_opt:
528
+ lm = OptionalObjMarshaler(lm)
529
+ return lm
495
530
 
496
531
  if is_generic_alias(ty):
497
532
  try:
@@ -511,7 +546,31 @@ class ObjMarshalerManager:
511
546
  return IterableObjMarshaler(st, rec(e))
512
547
 
513
548
  if is_union_alias(ty):
514
- return OptionalObjMarshaler(rec(get_optional_alias_arg(ty)))
549
+ uts = frozenset(ta.get_args(ty))
550
+ if None in uts or type(None) in uts:
551
+ is_opt = True
552
+ uts = frozenset(ut for ut in uts if ut not in (None, type(None)))
553
+ else:
554
+ is_opt = False
555
+
556
+ um: ObjMarshaler
557
+ if not uts:
558
+ raise TypeError(ty)
559
+ elif len(uts) == 1:
560
+ um = rec(check.single(uts))
561
+ else:
562
+ pt = tuple({ut for ut in uts if ut in _OBJ_MARSHALER_PRIMITIVE_TYPES})
563
+ np_uts = {ut for ut in uts if ut not in _OBJ_MARSHALER_PRIMITIVE_TYPES}
564
+ if not np_uts:
565
+ um = PrimitiveUnionObjMarshaler(pt)
566
+ elif len(np_uts) == 1:
567
+ um = PrimitiveUnionObjMarshaler(pt, x=rec(check.single(np_uts)))
568
+ else:
569
+ raise TypeError(ty)
570
+
571
+ if is_opt:
572
+ um = OptionalObjMarshaler(um)
573
+ return um
515
574
 
516
575
  raise TypeError(ty)
517
576
 
@@ -2,6 +2,9 @@
2
2
  """
3
3
  https://docs.python.org/3/library/unittest.html#command-line-interface
4
4
  ~ https://github.com/python/cpython/tree/f66c75f11d3aeeb614600251fd5d3fe1a34b5ff1/Lib/unittest
5
+
6
+ TODO:
7
+ - giving it filenames doesn't work
5
8
  """
6
9
  # PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
7
10
  # --------------------------------------------
omlish/text/minja.py CHANGED
@@ -49,10 +49,15 @@ class MinjaTemplateParam:
49
49
  return cls(name, dfl)
50
50
 
51
51
 
52
+ class MinjaTemplateFn(ta.Protocol):
53
+ def __call__(self, **kwargs: ta.Any) -> str:
54
+ ...
55
+
56
+
52
57
  class MinjaTemplate:
53
58
  def __init__(
54
59
  self,
55
- fn: ta.Callable,
60
+ fn: MinjaTemplateFn,
56
61
  params: ta.Sequence[MinjaTemplateParam],
57
62
  ) -> None:
58
63
  super().__init__()
@@ -71,6 +76,16 @@ class MinjaTemplate:
71
76
  ##
72
77
 
73
78
 
79
+ class MinjaFunctionBuilder(ta.Protocol):
80
+ def __call__(
81
+ self,
82
+ name: str,
83
+ src: str,
84
+ ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
85
+ ) -> ta.Callable:
86
+ ...
87
+
88
+
74
89
  class MinjaTemplateCompiler:
75
90
  """
76
91
  Compiles a template string into a Python function. The returned function takes a dictionary 'context' and returns
@@ -96,6 +111,7 @@ class MinjaTemplateCompiler:
96
111
  fragment_processor: ta.Optional[ta.Callable[[MinjaTemplateFragmentKind, str], str]] = None,
97
112
  strict_strings: bool = False,
98
113
  stringifier: ta.Optional[ta.Callable[[ta.Any], str]] = None,
114
+ function_builder: ta.Optional[MinjaFunctionBuilder] = None,
99
115
  ) -> None:
100
116
  super().__init__()
101
117
 
@@ -120,6 +136,10 @@ class MinjaTemplateCompiler:
120
136
  stringifier = lambda o: str(o)
121
137
  self._stringifier = stringifier
122
138
 
139
+ if function_builder is None:
140
+ function_builder = self._build_function
141
+ self._function_builder = function_builder
142
+
123
143
  self._stack: ta.List[ta.Literal['for', 'if']] = []
124
144
 
125
145
  @staticmethod
@@ -128,6 +148,18 @@ class MinjaTemplateCompiler:
128
148
  raise TypeError(o)
129
149
  return o
130
150
 
151
+ @staticmethod
152
+ def _build_function(
153
+ name: str,
154
+ src: str,
155
+ ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
156
+ ) -> ta.Callable:
157
+ glo: dict = {}
158
+ if ns:
159
+ glo.update(ns)
160
+ exec(src, glo)
161
+ return glo[name]
162
+
131
163
  #
132
164
 
133
165
  _TAG_PAT = re.compile(
@@ -210,11 +242,13 @@ class MinjaTemplateCompiler:
210
242
  lines.append(f'def {self._RENDER_FN_NAME}():')
211
243
  else:
212
244
  lines.append(f'def {self._RENDER_FN_NAME}(')
245
+ lines.append(self._indent('*,'))
213
246
  for p in self._params:
214
247
  if p.default.present:
215
248
  check.not_in(p.name, ns)
216
- ns[p.name] = p.default.must()
217
- lines.append(self._indent(f'{p.name}={p.name},'))
249
+ dn = f'__minja__default__{p.name}'
250
+ ns[dn] = p.default.must()
251
+ lines.append(self._indent(f'{p.name}={dn},'))
218
252
  else:
219
253
  lines.append(self._indent(f'{p.name},'))
220
254
  lines.append('):')
@@ -269,19 +303,6 @@ class MinjaTemplateCompiler:
269
303
 
270
304
  #
271
305
 
272
- @classmethod
273
- def _make_fn(
274
- cls,
275
- name: str,
276
- src: str,
277
- ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
278
- ) -> ta.Callable:
279
- glo: dict = {}
280
- if ns:
281
- glo.update(ns)
282
- exec(src, glo)
283
- return glo[name]
284
-
285
306
  def compile(
286
307
  self,
287
308
  ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
@@ -294,14 +315,14 @@ class MinjaTemplateCompiler:
294
315
  raise KeyError(k)
295
316
  ns[k] = v
296
317
 
297
- render_fn = self._make_fn(
318
+ render_fn = self._function_builder(
298
319
  self._RENDER_FN_NAME,
299
320
  rendered.src,
300
321
  ns,
301
322
  )
302
323
 
303
324
  return MinjaTemplate(
304
- render_fn,
325
+ ta.cast(MinjaTemplateFn, check.callable(render_fn)),
305
326
  self._params,
306
327
  )
307
328
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev372
3
+ Version: 0.0.0.dev374
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
2
- omlish/__about__.py,sha256=jyzuqevR3mhnjpJ83sR8GtV3f2_ERBb1HkzWCrzvnSA,3478
2
+ omlish/__about__.py,sha256=_i_tQ9A48__MEZO6apOfvz5EyxB8GlOe28oLORkGJKk,3478
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -419,7 +419,7 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
419
419
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
420
420
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
421
421
  omlish/iterators/unique.py,sha256=Nw0pSaNEcHAkve0ugfLPvJcirDOn9ECyC5wIL8JlJKI,1395
422
- omlish/lang/__init__.py,sha256=XgAZGIq1UN2raHvvmDwsd52RePlee_8OxOFdg3U6rP4,6526
422
+ omlish/lang/__init__.py,sha256=HBfW_xYymqMI480poCq-_7TB5ZxG3HJ7OmZ8XywJlhw,6563
423
423
  omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
424
424
  omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
425
425
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
@@ -429,7 +429,7 @@ omlish/lang/contextmanagers.py,sha256=7mbTG7yIwM2whQBuhja5Tt0C4kfefBUW4Y_AIn5j8i
429
429
  omlish/lang/datetimes.py,sha256=01tg21QOx-PWDlm-CSFTalym3vpqF0EKzeinmtcVNoU,379
430
430
  omlish/lang/descriptors.py,sha256=zBtgO9LjdSTGHNUgiIqswh78WOVoGH6KzS0NbgB1Wls,6572
431
431
  omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
432
- omlish/lang/functions.py,sha256=qNqzWF6vI6PGTzKhgkhnNXP8e1gSerb8GsHG3_wVBP8,6386
432
+ omlish/lang/functions.py,sha256=aLdxhmqG0Pj9tBgsKdoCu_q15r82WIkNqDDSPQU19L8,5689
433
433
  omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,5197
434
434
  omlish/lang/imports.py,sha256=y9W9Y-d_cQ35QCLuSIPoa6vnEqSErFCz8b-34IH128U,10552
435
435
  omlish/lang/iterables.py,sha256=y1SX2Co3VsOeX2wlfFF7K3rwLvF7Dtre7VY6EpfwAwA,3338
@@ -463,6 +463,7 @@ omlish/lifecycles/manager.py,sha256=92s1IH_gDP25PM5tFuPMP2hD_6s5fPi_VzZiDS5549g,
463
463
  omlish/lifecycles/states.py,sha256=6gTdY3hn7-1sJ60lA3GeMx5RVKvXtFBBXE4KEjoO1Hs,1297
464
464
  omlish/lifecycles/transitions.py,sha256=3IFdWGtAeoy3XRlIyW7yCKV4e4Iof9ytkqklGMRFYQs,1944
465
465
  omlish/lite/__init__.py,sha256=ISLhM4q0LR1XXTCaHdZOZxBRyIsoZqYm4u0bf1BPcVk,148
466
+ omlish/lite/args.py,sha256=_py7azSCqPJwA2P1qY0B91sSiORsvYIK7IBO6hPDYK4,739
466
467
  omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
467
468
  omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
468
469
  omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
@@ -472,7 +473,7 @@ omlish/lite/imports.py,sha256=JDYRFxu-ofHEBfd5VV3b27oKOLhtTpuzte1_Nt7yLgw,1352
472
473
  omlish/lite/inject.py,sha256=xvmLmtD3_2INnkurJQv76_Rkh9usbApEQrXJ4cvuVAk,29019
473
474
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
474
475
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
475
- omlish/lite/marshal.py,sha256=43fWY7CyLw3NGKHGxFqkiqKFGzXIHqayMVgfeHT02AU,18477
476
+ omlish/lite/marshal.py,sha256=dxiDtmSXt4EBpTprMNkPsOYkRs0W9AC3Kby9UGEjuRo,20400
476
477
  omlish/lite/maybes.py,sha256=0p_fzb6yiOjEpvMKaQ53Q6CH1VPW1or7v7Lt1JIKcgM,4359
477
478
  omlish/lite/pycharm.py,sha256=FRHGcCDo42UzZXqNwW_DkhI-6kb_CmJKPiQ8F6mYkLA,1174
478
479
  omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
@@ -792,7 +793,7 @@ omlish/testing/pytest/plugins/switches/switches.py,sha256=lj8S9RMwUAW7a93ZqqTjoD
792
793
  omlish/testing/unittest/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
793
794
  omlish/testing/unittest/__main__.py,sha256=d23loR_cKfTYZwYiqpt_CmKI7dd5WcYFgIYzqMep75E,68
794
795
  omlish/testing/unittest/loading.py,sha256=DT6vIZwXBkbEXocaxhrbWj8SqsoP7pyxD5K3bZlAE34,4764
795
- omlish/testing/unittest/main.py,sha256=OrebAhWqlfNOx5LF-ZIu2KvclneJgBAi13LkvDiZ_yw,8408
796
+ omlish/testing/unittest/main.py,sha256=QYVLFzDlkzgyKt7P3V7wG9DoKekrOJHWYeFpI9nX2Vo,8451
796
797
  omlish/testing/unittest/running.py,sha256=sifL1gjhn1VR965T9fdZy8NbJpVtpEQety8ngh5Fw7A,11821
797
798
  omlish/testing/unittest/types.py,sha256=RvQwU9l2amH2mKv3W3QyPBFg0eXkQ8wWnIJeRXeDdi0,102
798
799
  omlish/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -804,7 +805,7 @@ omlish/text/glyphsplit.py,sha256=ZX9mhwTtmUE8rJpuD1jBO1CTc6xzmBCtbfiHmp5vMM8,381
804
805
  omlish/text/indent.py,sha256=BWVVaHs_B1ppwHJJIxKCDG3iCutkYy5e1qr59Z_Suzg,1524
805
806
  omlish/text/linecache.py,sha256=hRYlEhD63ZfA6_ZOTkQIcnON-3W56QMAhcG3vEJqj9M,1858
806
807
  omlish/text/mangle.py,sha256=k7mYavVgxJ2ENV2wfjw3c9u3hqH5NeVpjoxYbyaYC0Y,2796
807
- omlish/text/minja.py,sha256=wz4ZkjPTvlVkLBkWyTCoyERyiofBMvDXZZcNsGtk8gU,8999
808
+ omlish/text/minja.py,sha256=J5EqqMXovBeXrmjnYbhhbF2G-CbfRX31o2Od4-571MA,9667
808
809
  omlish/text/parts.py,sha256=MpiCUyfpcL4PLb2Etj8V7Yj4qofhy0xVwBrIL6RfNdg,6646
809
810
  omlish/text/random.py,sha256=8feS5JE_tSjYlMl-lp0j93kCfzBae9AM2cXlRLebXMA,199
810
811
  omlish/text/templating.py,sha256=Nf5BVDgrYBf0WmYwV6SnHPDvl9XVMu8v7MX78pInLTw,3325
@@ -888,9 +889,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
888
889
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
889
890
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
890
891
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
891
- omlish-0.0.0.dev372.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
892
- omlish-0.0.0.dev372.dist-info/METADATA,sha256=UoYYCvg_GPym2iiE9ijIaZnB7CxyH_k7EHwVpEQvCYY,4416
893
- omlish-0.0.0.dev372.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
894
- omlish-0.0.0.dev372.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
895
- omlish-0.0.0.dev372.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
896
- omlish-0.0.0.dev372.dist-info/RECORD,,
892
+ omlish-0.0.0.dev374.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
893
+ omlish-0.0.0.dev374.dist-info/METADATA,sha256=CeT0SThiC6g7bnfBZYK1i5VyICnv96WDnWJvzSrwBdA,4416
894
+ omlish-0.0.0.dev374.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
895
+ omlish-0.0.0.dev374.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
896
+ omlish-0.0.0.dev374.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
897
+ omlish-0.0.0.dev374.dist-info/RECORD,,