omlish 0.0.0.dev350__py3-none-any.whl → 0.0.0.dev351__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.

omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev350'
2
- __revision__ = 'd469538d3fe7c09eb1810deb5e2e2e0d300243a6'
1
+ __version__ = '0.0.0.dev351'
2
+ __revision__ = '30f165530bca1945fc611642df976babe65816b8'
3
3
 
4
4
 
5
5
  #
omlish/http/headers.py CHANGED
@@ -2,6 +2,7 @@
2
2
  TODO:
3
3
  - handle secrets (but they're strs..)
4
4
  """
5
+ import http.client
5
6
  import typing as ta
6
7
 
7
8
  from .. import cached
@@ -11,9 +12,15 @@ from .. import collections as col
11
12
 
12
13
  StrOrBytes: ta.TypeAlias = str | bytes
13
14
 
15
+
16
+ ##
17
+
18
+
14
19
  CanHttpHeaders: ta.TypeAlias = ta.Union[
15
20
  'HttpHeaders',
16
21
 
22
+ http.client.HTTPMessage,
23
+
17
24
  ta.Mapping[str, str],
18
25
  ta.Mapping[str, ta.Sequence[str]],
19
26
  ta.Mapping[str, str | ta.Sequence[str]],
@@ -42,7 +49,10 @@ class HttpHeaders:
42
49
 
43
50
  # TODO: optimized storage, 'use-whats-given'
44
51
  lst: list[tuple[bytes, bytes]] = []
45
- if isinstance(src, ta.Mapping):
52
+ if isinstance(src, http.client.HTTPMessage):
53
+ lst = [(self._as_bytes(k), self._as_bytes(v)) for k, v in src.items()]
54
+
55
+ elif isinstance(src, ta.Mapping):
46
56
  for k, v in src.items():
47
57
  if isinstance(v, (str, bytes)):
48
58
  lst.append((self._as_bytes(k), self._as_bytes(v)))
@@ -181,6 +191,23 @@ class HttpHeaders:
181
191
  def items(self) -> ta.Iterable[tuple[bytes, bytes]]:
182
192
  return self._lst
183
193
 
194
+ #
195
+
196
+ def update(
197
+ self,
198
+ *items: tuple[bytes, bytes], # FIXME: all arg types
199
+ override: bool = False,
200
+ ) -> 'HttpHeaders':
201
+ if override:
202
+ nks = {k.lower() for k, v in items}
203
+ src = [(k, v) for k, v in self.items() if k.lower() not in nks]
204
+ else:
205
+ src = list(self.items())
206
+ return HttpHeaders([
207
+ *src,
208
+ *items,
209
+ ])
210
+
184
211
 
185
212
  def headers(src: CanHttpHeaders) -> HttpHeaders:
186
213
  return HttpHeaders(src)
@@ -313,7 +313,7 @@ class IncrementalGzipDecompressor:
313
313
  crc = _zero_crc()
314
314
  stream_size = 0 # Decompressed size of unconcatenated stream
315
315
  last_mtime = yield from self._read_gzip_header(rdr)
316
- if not last_mtime:
316
+ if last_mtime is None:
317
317
  check.none((yield b''))
318
318
  return
319
319
  new_member = False
@@ -53,4 +53,6 @@ from .stepped import ( # noqa
53
53
  read_into_str_stepped_coro,
54
54
 
55
55
  buffer_bytes_stepped_reader_coro,
56
+
57
+ iterable_bytes_stepped_coro,
56
58
  )
omlish/io/coro/stepped.py CHANGED
@@ -190,3 +190,35 @@ def buffer_bytes_stepped_reader_coro(g: BytesSteppedReaderCoro) -> BytesSteppedC
190
190
  return
191
191
  else:
192
192
  break
193
+
194
+
195
+ ##
196
+
197
+
198
+ @lang.autostart
199
+ def iterable_bytes_stepped_coro(g: BytesSteppedCoro) -> ta.Generator[ta.Iterator[bytes], bytes, None]:
200
+ i: bytes | None = check.isinstance((yield None), bytes) # type: ignore[misc]
201
+ eof = False
202
+
203
+ def f() -> ta.Iterator[bytes]:
204
+ nonlocal i
205
+ while True:
206
+ o = g.send(i)
207
+ i = None
208
+
209
+ if isinstance(o, bytes):
210
+ yield o
211
+ if not o:
212
+ nonlocal eof
213
+ eof = True
214
+ return
215
+ elif o is None:
216
+ return
217
+ else:
218
+ raise TypeError(o)
219
+
220
+ while True:
221
+ if eof:
222
+ return
223
+
224
+ i = (yield f()) # noqa
@@ -10,7 +10,6 @@ from .recipes import ( # noqa
10
10
  )
11
11
 
12
12
  from .tools import ( # noqa
13
- chunk,
14
13
  expand_indexed_pairs,
15
14
  merge_on,
16
15
  take,
omlish/iterators/tools.py CHANGED
@@ -47,20 +47,6 @@ def take(n: int, iterable: ta.Iterable[T]) -> list[T]:
47
47
  return list(itertools.islice(iterable, n))
48
48
 
49
49
 
50
- def chunk(n: int, iterable: ta.Iterable[T], strict: bool = False) -> ta.Iterator[list[T]]:
51
- # TODO: remove with 3.13 - 3.12 doesn't support strict
52
- iterator = iter(functools.partial(take, n, iter(iterable)), [])
53
- if strict:
54
- def ret():
55
- for chunk in iterator:
56
- if len(chunk) != n:
57
- raise ValueError('iterable is not divisible by n.')
58
- yield chunk
59
- return iter(ret())
60
- else:
61
- return iterator
62
-
63
-
64
50
  def merge_on(
65
51
  function: ta.Callable[[T], U],
66
52
  *its: ta.Iterable[T],
omlish/lang/__init__.py CHANGED
@@ -227,6 +227,7 @@ from .imports import ( # noqa
227
227
  from .iterables import ( # noqa
228
228
  IteratorWithReturn,
229
229
  asrange,
230
+ chunk,
230
231
  common_prefix_len,
231
232
  exhaust,
232
233
  flatmap,
omlish/lang/iterables.py CHANGED
@@ -33,6 +33,20 @@ def peek(vs: ta.Iterable[T]) -> tuple[T, ta.Iterator[T]]:
33
33
  return v, itertools.chain(iter((v,)), it)
34
34
 
35
35
 
36
+ def chunk(n: int, iterable: ta.Iterable[T], strict: bool = False) -> ta.Iterator[list[T]]:
37
+ # TODO: replace with itertools.batched in 3.13 - 3.12 doesn't support strict
38
+ iterator = iter(functools.partial(take, n, iter(iterable)), [])
39
+ if strict:
40
+ def ret():
41
+ for c in iterator:
42
+ if len(c) != n:
43
+ raise ValueError('iterable is not divisible by n.')
44
+ yield c
45
+ return iter(ret())
46
+ else:
47
+ return iterator
48
+
49
+
36
50
  def interleave(vs: ta.Iterable[T], d: T) -> ta.Iterable[T]:
37
51
  for i, v in enumerate(vs):
38
52
  if i:
@@ -123,6 +123,10 @@ from .polymorphism.metadata import ( # noqa
123
123
  polymorphism_from_subclasses,
124
124
  )
125
125
 
126
+ from .polymorphism.standard import ( # noqa
127
+ standard_polymorphism_factories,
128
+ )
129
+
126
130
  from .polymorphism.unions import ( # noqa
127
131
  PRIMITIVE_UNION_TYPES,
128
132
  PolymorphismUnionMarshalerFactory,
@@ -0,0 +1,22 @@
1
+ import typing as ta
2
+
3
+ from ..base import MarshalerFactory
4
+ from ..base import UnmarshalerFactory
5
+ from .marshal import PolymorphismMarshalerFactory
6
+ from .metadata import Polymorphism
7
+ from .metadata import TypeTagging
8
+ from .metadata import WrapperTypeTagging
9
+ from .unmarshal import PolymorphismUnmarshalerFactory
10
+
11
+
12
+ ##
13
+
14
+
15
+ def standard_polymorphism_factories(
16
+ poly: Polymorphism,
17
+ tt: TypeTagging = WrapperTypeTagging(),
18
+ ) -> ta.Sequence[MarshalerFactory | UnmarshalerFactory]:
19
+ return [
20
+ PolymorphismMarshalerFactory(poly, tt),
21
+ PolymorphismUnmarshalerFactory(poly, tt),
22
+ ]
omlish/term/confirm.py ADDED
@@ -0,0 +1,40 @@
1
+ import sys
2
+ import typing as ta
3
+
4
+
5
+ ##
6
+
7
+
8
+ def confirm_action(
9
+ message: str | None = None,
10
+ *,
11
+ stdin: ta.Any | None = None,
12
+ stdout: ta.Any | None = None,
13
+ ) -> bool:
14
+ if stdin is None:
15
+ stdin = sys.stdin
16
+ if not stdin.isatty():
17
+ raise OSError(f'stdin {stdin!r} is not a tty')
18
+
19
+ if stdout is None:
20
+ stdout = sys.stdout
21
+ if not stdout.isatty():
22
+ raise OSError(f'stdout {stdout!r} is not a tty')
23
+
24
+ while True:
25
+ if message and not message[-1].isspace():
26
+ if '\n' in message:
27
+ prefix = message + '\n\n'
28
+ else:
29
+ prefix = message + ' '
30
+ else:
31
+ prefix = ''
32
+
33
+ c = input(f'{prefix}(y/n): ').lower().strip()
34
+
35
+ if c == 'y':
36
+ return True
37
+ elif c == 'n':
38
+ return False
39
+ else:
40
+ print("Please enter 'y' for yes or 'n' for no.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev350
3
+ Version: 0.0.0.dev351
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=orgsRvtpHu8tdhaCvlP9v3P495OJopYYiHKjK68WtWg,8587
2
- omlish/__about__.py,sha256=AUKRnK6uBoxkzAoPrPIc6EXVm1J9Q64N8PRE-AyokNs,3478
2
+ omlish/__about__.py,sha256=WFLYXWRVpkQ_3AGpeJ6U4lH7VMvfiXO74DYrKYy6hCs,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
@@ -320,7 +320,7 @@ omlish/http/cookies.py,sha256=uuOYlHR6e2SC3GM41V0aozK10nef9tYg83Scqpn5-HM,6351
320
320
  omlish/http/dates.py,sha256=Otgp8wRxPgNGyzx8LFowu1vC4EKJYARCiAwLFncpfHM,2875
321
321
  omlish/http/encodings.py,sha256=w2WoKajpaZnQH8j-IBvk5ZFL2O2pAU_iBvZnkocaTlw,164
322
322
  omlish/http/handlers.py,sha256=XHv35iLAKAsnftGyJa27Ds9asfCmUtqMRVmrzOKJqck,3902
323
- omlish/http/headers.py,sha256=ZMmjrEiYjzo0YTGyK0YsvjdwUazktGqzVVYorY4fd44,5081
323
+ omlish/http/headers.py,sha256=Ft7jsjDegcpzkXk2rk3uw8bEFIB7vifIfLMMwATDo1A,5716
324
324
  omlish/http/json.py,sha256=9XwAsl4966Mxrv-1ytyCqhcE6lbBJw-0_tFZzGszgHE,7440
325
325
  omlish/http/jwt.py,sha256=6Rigk1WrJ059DY4jDIKnxjnChWb7aFdermj2AI2DSvk,4346
326
326
  omlish/http/multipart.py,sha256=R9ycpHsXRcmh0uoc43aYb7BdWL-8kSQHe7J-M81aQZM,2240
@@ -383,28 +383,28 @@ omlish/io/compress/base.py,sha256=zwPnicyrEY-zersxdhxGHXxn02ycl8ew2uZXEecJea4,61
383
383
  omlish/io/compress/brotli.py,sha256=sNDX5HmEVqg9_xID5NTFPAWuvlNPw5ixfOnnIWwZf_o,1189
384
384
  omlish/io/compress/bz2.py,sha256=HtwBuBYHJ3MyWO9xJ0XhWpyIYTA3OszLrpu_J4kRRPA,1534
385
385
  omlish/io/compress/codecs.py,sha256=VBc_MAz0W8lVKTKavot3aVKOuPmEUquzarMtpyuteiU,1804
386
- omlish/io/compress/gzip.py,sha256=tSjZmLWc7BZugYhmv07Pjr_TaVD1X-0JnZIlAk67iyQ,12213
386
+ omlish/io/compress/gzip.py,sha256=f5G-uqzL3HYF58dIolb8TghHeSGVSVodwW5vys1ouvk,12217
387
387
  omlish/io/compress/lz4.py,sha256=qaze1yVXexjJyN18Adh8fbTm_5pEeyytx66KoMUNpCU,2759
388
388
  omlish/io/compress/lzma.py,sha256=qDyshBgBUSPcZpAyXiRXnqI7zx7x60UpPxn8K3nN8aM,2469
389
389
  omlish/io/compress/snappy.py,sha256=JFoH_9l0Tr9AGaQ0jHRiP4TsFnG071l27mprCBcqt4c,704
390
390
  omlish/io/compress/zlib.py,sha256=dE38zBY4qNihUYtPjSpNRXweiw6mB6xsYqsBJklTDXM,2364
391
391
  omlish/io/compress/zstd.py,sha256=wik_HWLq_8fGAJgGyMGq9fhFQovot1aCH4lwMpihQmg,949
392
- omlish/io/coro/__init__.py,sha256=cfeng1ESiMlCU_ubI1aWcBD9IK0Im7emOTsggmlEjtI,1046
392
+ omlish/io/coro/__init__.py,sha256=Mr8-GoDzOlA2sKmaDxuov2vPmjX_IeB_49I8dTSvjvA,1080
393
393
  omlish/io/coro/consts.py,sha256=4r6IMLBMic6MJHVn9UiORIkkPAuxsqtzFT3KV0fatC0,33
394
394
  omlish/io/coro/direct.py,sha256=Y--rP3wvBAYMeYctokb5IGd8UyQGmEFChyKISmRg5k0,294
395
395
  omlish/io/coro/readers.py,sha256=9VcXuBQ7BSoFen8UVuYFwnl2jJVjyilWV7QeqLNQtKU,4131
396
- omlish/io/coro/stepped.py,sha256=eAppRniUZ00rk3goWLU4zsd52MhZB2_YrOmFqs3RfR4,4929
396
+ omlish/io/coro/stepped.py,sha256=xk7ODs_kSz_6IAmgW9682pMKGCuSVpzcGNvOsjoFzwI,5643
397
397
  omlish/io/fdio/__init__.py,sha256=XJMieft-Z-JEkpeARn0M1Jj7HYCjRHwfs2QfE8gdzQs,137
398
398
  omlish/io/fdio/handlers.py,sha256=Bw2jhrNili7XRlsf63mlSkrFPHmWM2jelb3BmWqy3Ok,1361
399
399
  omlish/io/fdio/kqueue.py,sha256=xRxDPKcOw5_bMDS0buF5xi12WHok4reNnnaYTX4kkCk,3843
400
400
  omlish/io/fdio/manager.py,sha256=I4KDZGo8fkBe0LAhpN0rmP9KJHyXRynypcCYsTzEjS4,1261
401
401
  omlish/io/fdio/pollers.py,sha256=nhSbzL8N9LBVsbGZngJySeCPqMjkax4NNiFgB7CLbfk,5513
402
- omlish/iterators/__init__.py,sha256=yMavf5FofiS1EU4UFuWPXiFZ03W0H-y7MuMxW8FUaEE,358
402
+ omlish/iterators/__init__.py,sha256=yMPzA1GMTxP96FR1ruaWpNCr4_tRczhKq-cUpi5J_58,347
403
403
  omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8,3159
404
404
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
405
- omlish/iterators/tools.py,sha256=tdtWhwkPQq3sg7Brakrcbf8e1cOBg6e0TtwnSMnvEpg,2582
405
+ omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
406
406
  omlish/iterators/unique.py,sha256=Nw0pSaNEcHAkve0ugfLPvJcirDOn9ECyC5wIL8JlJKI,1395
407
- omlish/lang/__init__.py,sha256=nFH_r4AnosVDh6gyQ-2-y5OBgWiRik_Mx5hcN0TItdg,6434
407
+ omlish/lang/__init__.py,sha256=vk7k-NT3QWB_YcBPAO6_ml2z3feVLuq69pweWX8ECOk,6445
408
408
  omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
409
409
  omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
410
410
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
@@ -417,7 +417,7 @@ omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
417
417
  omlish/lang/functions.py,sha256=qNqzWF6vI6PGTzKhgkhnNXP8e1gSerb8GsHG3_wVBP8,6386
418
418
  omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,5197
419
419
  omlish/lang/imports.py,sha256=y9W9Y-d_cQ35QCLuSIPoa6vnEqSErFCz8b-34IH128U,10552
420
- omlish/lang/iterables.py,sha256=krehpKGdOI5ZxqChS7pse5Kzj1B9M4qk4ruFnUdNtiE,2842
420
+ omlish/lang/iterables.py,sha256=y1SX2Co3VsOeX2wlfFF7K3rwLvF7Dtre7VY6EpfwAwA,3338
421
421
  omlish/lang/objects.py,sha256=ZsibJwNp1EXorbaObm9TlCNtuuM65snCmVb7H4_llqI,6116
422
422
  omlish/lang/outcomes.py,sha256=mpFy_VoM-b74L1aCFsjsZVUHx_icZ1AHMOKeVesjOp4,8628
423
423
  omlish/lang/overrides.py,sha256=IBzK6ljfLX6TLgIyKTSjhqTLcuKRkQNVtEOnBLS4nuA,2095
@@ -490,7 +490,7 @@ omlish/manifests/base.py,sha256=5CmayiuzdXXv9hB5tDnWqfAosAoEQ26YG0B-emkiTXU,941
490
490
  omlish/manifests/load.py,sha256=XYSWJve4dYSaXNO4vSTv5REB6dqJEy9u-S0hoWOx8ko,6661
491
491
  omlish/manifests/static.py,sha256=7YwOVh_Ek9_aTrWsWNO8kWS10_j4K7yv3TpXZSHsvDY,501
492
492
  omlish/manifests/types.py,sha256=4iDPXWpJnLQkxnHtKqPNz3qdPgKzLpB3E5MTf9jYW8s,312
493
- omlish/marshal/__init__.py,sha256=7jIXe9wQv-if1iRUuU6a4MdHScTLFFL8X2JwHaNTAxI,3395
493
+ omlish/marshal/__init__.py,sha256=SKPETuXI-XbjimU7nlJWo-ioANNzqn6IFBXkbqoPgIw,3480
494
494
  omlish/marshal/base.py,sha256=Q0ZRsz5z0NTI6PeWPc9mdMstJryDDbeIAdpKH9-SDps,11427
495
495
  omlish/marshal/errors.py,sha256=g5XJyTHd__8lfwQ4KwgK-E5WR6MoNTMrqKP2U_QRQQQ,307
496
496
  omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
@@ -519,6 +519,7 @@ omlish/marshal/objects/unmarshal.py,sha256=IXIl_iokvVCSWYhkRORrWP_sE1DVklnrUErGW
519
519
  omlish/marshal/polymorphism/__init__.py,sha256=e2UTrSL0qp7w_1vkdxDWd7sXlWhep2KPV49-BB64ma8,130
520
520
  omlish/marshal/polymorphism/marshal.py,sha256=wVaUxiHMJwyEWfQIE3cuEcJFSMVNJhpdJoa1yRgBPUE,2260
521
521
  omlish/marshal/polymorphism/metadata.py,sha256=Tvrjvi1kVhBbuljcQI60BXOIPEh-0_MGHXZDP-YKg1M,3335
522
+ omlish/marshal/polymorphism/standard.py,sha256=Gj_fhmkWlY99oYjceP1N9SVOnaPCHRwtO812kJYIuhA,603
522
523
  omlish/marshal/polymorphism/unions.py,sha256=NDXh2aVCLUFfi10qvIZR39prtHwjndQiVl13XcIKV3k,4386
523
524
  omlish/marshal/polymorphism/unmarshal.py,sha256=5jJnDarY85PuGTeL_9bwoeHjNIZnfVN3zr5rVhmNoQc,2451
524
525
  omlish/marshal/singular/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -735,6 +736,7 @@ omlish/subprocesses/wrap.py,sha256=AhGV8rsnaVUMQCFYKkrjj35fs3O-VJLZC1hZ14dz3C8,7
735
736
  omlish/term/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
736
737
  omlish/term/codes.py,sha256=fDRhUYzCzllcvCfMMgEroJaQoxqFsfTivpYdVmnwcCE,6390
737
738
  omlish/term/coloring.py,sha256=MCFYV_JTvEObTCJE12wfalW8OFFQB_KIFBKDtfES6Nk,2559
739
+ omlish/term/confirm.py,sha256=5aqZnfy60K9CBSfXDsD-zA84HJm5fBWb_Y1T1x8gRnw,918
738
740
  omlish/term/progressbar.py,sha256=FtQqeIJCwSDWzraeG5uI9jKifQG1lOOyTpukJEpH22A,3672
739
741
  omlish/term/vt100/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
740
742
  omlish/term/vt100/c.py,sha256=cAhDKXI81PZRtFmTotfad3HZGREP1QnOlWYoAw6v-Fw,3532
@@ -864,9 +866,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
864
866
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
865
867
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
866
868
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
867
- omlish-0.0.0.dev350.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
868
- omlish-0.0.0.dev350.dist-info/METADATA,sha256=B5RNI-pfzvV67WQMtelu7lKV6mR5c654rRJ-jwWvyUU,4416
869
- omlish-0.0.0.dev350.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
870
- omlish-0.0.0.dev350.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
871
- omlish-0.0.0.dev350.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
872
- omlish-0.0.0.dev350.dist-info/RECORD,,
869
+ omlish-0.0.0.dev351.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
870
+ omlish-0.0.0.dev351.dist-info/METADATA,sha256=TT-QW2cuCCnK5gY-uMBllZoe2jT3ihx4cgHlzTKtm4M,4416
871
+ omlish-0.0.0.dev351.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
872
+ omlish-0.0.0.dev351.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
873
+ omlish-0.0.0.dev351.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
874
+ omlish-0.0.0.dev351.dist-info/RECORD,,