omlish 0.0.0.dev136__py3-none-any.whl → 0.0.0.dev138__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. omlish/__about__.py +2 -2
  2. omlish/cached.py +2 -2
  3. omlish/collections/mappings.py +1 -1
  4. omlish/configs/flattening.py +1 -1
  5. omlish/diag/_pycharm/runhack.py +3 -0
  6. omlish/formats/json/stream/errors.py +2 -0
  7. omlish/formats/json/stream/lex.py +11 -5
  8. omlish/formats/json/stream/parse.py +37 -21
  9. omlish/funcs/genmachine.py +5 -4
  10. omlish/io/compress/__init__.py +0 -0
  11. omlish/io/compress/abc.py +104 -0
  12. omlish/io/compress/adapters.py +147 -0
  13. omlish/io/compress/bz2.py +42 -0
  14. omlish/io/compress/gzip.py +306 -0
  15. omlish/io/compress/lzma.py +32 -0
  16. omlish/io/compress/types.py +29 -0
  17. omlish/io/generators/__init__.py +0 -0
  18. omlish/io/generators/readers.py +183 -0
  19. omlish/io/generators/stepped.py +104 -0
  20. omlish/lang/__init__.py +11 -1
  21. omlish/lang/functions.py +0 -2
  22. omlish/lang/generators.py +243 -0
  23. omlish/lang/iterables.py +28 -51
  24. omlish/lang/maybes.py +4 -4
  25. {omlish-0.0.0.dev136.dist-info → omlish-0.0.0.dev138.dist-info}/METADATA +1 -1
  26. {omlish-0.0.0.dev136.dist-info → omlish-0.0.0.dev138.dist-info}/RECORD +34 -22
  27. /omlish/collections/{_abc.py → abc.py} +0 -0
  28. /omlish/io/{_abc.py → abc.py} +0 -0
  29. /omlish/logs/{_abc.py → abc.py} +0 -0
  30. /omlish/sql/{_abc.py → abc.py} +0 -0
  31. {omlish-0.0.0.dev136.dist-info → omlish-0.0.0.dev138.dist-info}/LICENSE +0 -0
  32. {omlish-0.0.0.dev136.dist-info → omlish-0.0.0.dev138.dist-info}/WHEEL +0 -0
  33. {omlish-0.0.0.dev136.dist-info → omlish-0.0.0.dev138.dist-info}/entry_points.txt +0 -0
  34. {omlish-0.0.0.dev136.dist-info → omlish-0.0.0.dev138.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,243 @@
1
+ import abc
2
+ import functools
3
+ import typing as ta
4
+
5
+ from .maybes import Maybe
6
+ from .maybes import empty
7
+ from .maybes import just
8
+
9
+
10
+ T = ta.TypeVar('T')
11
+ I = ta.TypeVar('I')
12
+ O = ta.TypeVar('O')
13
+ R = ta.TypeVar('R')
14
+ I_contra = ta.TypeVar('I_contra', contravariant=True)
15
+ O_co = ta.TypeVar('O_co', covariant=True)
16
+ R_co = ta.TypeVar('R_co', covariant=True)
17
+
18
+
19
+ ##
20
+
21
+
22
+ def nextgen(g: T) -> T:
23
+ next(g) # type: ignore
24
+ return g
25
+
26
+
27
+ def autostart(fn):
28
+ @functools.wraps(fn)
29
+ def inner(*args, **kwargs):
30
+ g = fn(*args, **kwargs)
31
+ if (o := next(g)) is not None:
32
+ raise TypeError(o)
33
+ return g
34
+ return inner
35
+
36
+
37
+ ##
38
+
39
+
40
+ @ta.runtime_checkable
41
+ class GeneratorLike(ta.Protocol[O_co, I_contra, R_co]):
42
+ def send(self, i: I_contra) -> O_co: # Raises[StopIteration[R_co]]
43
+ ...
44
+
45
+ def close(self) -> None:
46
+ ...
47
+
48
+
49
+ class GeneratorLike_(abc.ABC, ta.Generic[O, I, R]): # noqa
50
+ @abc.abstractmethod
51
+ def send(self, i: I) -> O: # Raises[StopIteration[R]]
52
+ raise NotImplementedError
53
+
54
+ def close(self) -> None:
55
+ pass
56
+
57
+
58
+ @ta.overload
59
+ def adapt_generator_like(gl: GeneratorLike_[O, I, R]) -> ta.Generator[O, I, R]:
60
+ ...
61
+
62
+
63
+ @ta.overload
64
+ def adapt_generator_like(gl: GeneratorLike[O, I, R]) -> ta.Generator[O, I, R]:
65
+ ...
66
+
67
+
68
+ def adapt_generator_like(gl):
69
+ try:
70
+ i = yield
71
+ while True:
72
+ i = yield gl.send(i)
73
+ except StopIteration as e:
74
+ return e.value
75
+ finally:
76
+ gl.close()
77
+
78
+
79
+ ##
80
+
81
+
82
+ class Generator(ta.Generator[O, I, R]):
83
+ def __init__(self, g: ta.Generator[O, I, R]) -> None:
84
+ super().__init__()
85
+ self._g = g
86
+
87
+ @property
88
+ def g(self) -> ta.Generator[O, I, R]:
89
+ return self._g
90
+
91
+ value: R
92
+
93
+ def __iter__(self):
94
+ return self
95
+
96
+ def __next__(self):
97
+ try:
98
+ return next(self._g)
99
+ except StopIteration as e:
100
+ self.value = e.value
101
+ raise
102
+
103
+ def send(self, v):
104
+ try:
105
+ return self._g.send(v)
106
+ except StopIteration as e:
107
+ self.value = e.value
108
+ raise
109
+
110
+ def throw(self, *args):
111
+ try:
112
+ return self._g.throw(*args)
113
+ except StopIteration as e:
114
+ self.value = e.value
115
+ raise
116
+
117
+ def close(self):
118
+ self._g.close()
119
+
120
+
121
+ ##
122
+
123
+
124
+ class CoroutineGenerator(ta.Generic[O, I, R]):
125
+ def __init__(self, g: ta.Generator[O, I, R]) -> None:
126
+ super().__init__()
127
+ self._g = g
128
+
129
+ @property
130
+ def g(self) -> ta.Generator[O, I, R]:
131
+ return self._g
132
+
133
+ #
134
+
135
+ def close(self) -> None:
136
+ self._g.close()
137
+
138
+ def __enter__(self) -> ta.Self:
139
+ return self
140
+
141
+ def __exit__(self, exc_type, exc_val, exc_tb):
142
+ self._g.close()
143
+
144
+ #
145
+
146
+ class Output(ta.NamedTuple, ta.Generic[T]):
147
+ v: T
148
+
149
+ @property
150
+ def is_return(self) -> bool:
151
+ raise NotImplementedError
152
+
153
+ class Yield(Output[T]):
154
+ @property
155
+ def is_return(self) -> bool:
156
+ return False
157
+
158
+ class Return(Output[T]):
159
+ @property
160
+ def is_return(self) -> bool:
161
+ return True
162
+
163
+ class Nothing:
164
+ def __new__(cls):
165
+ raise TypeError
166
+
167
+ #
168
+
169
+ def send(self, /, v: I | type[Nothing] = Nothing) -> Yield[O] | Return[R]:
170
+ try:
171
+ if v is self.Nothing:
172
+ o = next(self._g)
173
+ else:
174
+ o = self._g.send(v) # type: ignore[arg-type]
175
+ except StopIteration as e:
176
+ return self.Return(e.value)
177
+ else:
178
+ return self.Yield(o)
179
+
180
+ def send_opt(self, v: I | None) -> Yield[O] | Return[R]:
181
+ return self.send(v if v is not None else self.Nothing)
182
+
183
+ def send_maybe(self, v: Maybe[I]) -> Yield[O] | Return[R]:
184
+ return self.send(v.or_else(self.Nothing))
185
+
186
+ def throw(self, v: BaseException) -> Yield[O] | Return[R]:
187
+ try:
188
+ o = self._g.throw(v)
189
+ except StopIteration as e:
190
+ return self.Return(e.value)
191
+ else:
192
+ return self.Yield(o)
193
+
194
+
195
+ corogen = CoroutineGenerator
196
+
197
+
198
+ ##
199
+
200
+
201
+ class GeneratorMappedIterator(ta.Generic[O, I, R]):
202
+ """
203
+ Like a `map` iterator but takes a generator instead of a function. Provided generator *must* yield outputs 1:1 with
204
+ inputs.
205
+
206
+ Generator return value will be captured on `value` property - if present generator stopped, it absent iterator
207
+ stopped.
208
+ """
209
+
210
+ def __init__(self, g: ta.Generator[O, I, R], it: ta.Iterator[I]) -> None:
211
+ super().__init__()
212
+
213
+ self._g = g
214
+ self._it = it
215
+ self._value: Maybe[R] = empty()
216
+
217
+ @property
218
+ def g(self) -> ta.Generator[O, I, R]:
219
+ return self._g
220
+
221
+ @property
222
+ def it(self) -> ta.Iterator[I]:
223
+ return self._it
224
+
225
+ @property
226
+ def value(self) -> Maybe[R]:
227
+ return self._value
228
+
229
+ def __iter__(self) -> ta.Iterator[O]:
230
+ return self
231
+
232
+ def __next__(self) -> O:
233
+ i = next(self._it)
234
+ try:
235
+ o = self._g.send(i)
236
+ except StopIteration as e:
237
+ self._value = just(e.value)
238
+ raise StopIteration from e
239
+ return o
240
+
241
+
242
+ def genmap(g: ta.Generator[O, I, R], it: ta.Iterable[I]) -> GeneratorMappedIterator[O, I, R]:
243
+ return GeneratorMappedIterator(g, iter(it))
omlish/lang/iterables.py CHANGED
@@ -4,7 +4,6 @@ import typing as ta
4
4
 
5
5
 
6
6
  T = ta.TypeVar('T')
7
- S = ta.TypeVar('S')
8
7
  R = ta.TypeVar('R')
9
8
 
10
9
 
@@ -15,6 +14,9 @@ BUILTIN_SCALAR_ITERABLE_TYPES: tuple[type, ...] = (
15
14
  )
16
15
 
17
16
 
17
+ ##
18
+
19
+
18
20
  def ilen(it: ta.Iterable) -> int:
19
21
  c = 0
20
22
  for _ in it:
@@ -44,6 +46,31 @@ def interleave(vs: ta.Iterable[T], d: T) -> ta.Iterable[T]:
44
46
  yield v
45
47
 
46
48
 
49
+ @dc.dataclass(frozen=True)
50
+ class IterGen(ta.Generic[T]):
51
+ fn: ta.Callable[[], ta.Iterable[T]]
52
+
53
+ def __iter__(self):
54
+ return iter(self.fn())
55
+
56
+
57
+ itergen = IterGen
58
+
59
+
60
+ def renumerate(it: ta.Iterable[T]) -> ta.Iterable[tuple[T, int]]:
61
+ return ((e, i) for i, e in enumerate(it))
62
+
63
+
64
+ flatten = itertools.chain.from_iterable
65
+
66
+
67
+ def flatmap(fn: ta.Callable[[T], ta.Iterable[R]], it: ta.Iterable[T]) -> ta.Iterable[R]:
68
+ return flatten(map(fn, it))
69
+
70
+
71
+ ##
72
+
73
+
47
74
  Rangeable: ta.TypeAlias = ta.Union[ # noqa
48
75
  int,
49
76
  tuple[int],
@@ -68,53 +95,3 @@ def prodrange(*dims: Rangeable) -> ta.Iterable[ta.Sequence[int]]:
68
95
  if not dims:
69
96
  return []
70
97
  return itertools.product(*map(asrange, dims))
71
-
72
-
73
- @dc.dataclass(frozen=True)
74
- class itergen(ta.Generic[T]): # noqa
75
- fn: ta.Callable[[], ta.Iterable[T]]
76
-
77
- def __iter__(self):
78
- return iter(self.fn())
79
-
80
-
81
- def renumerate(it: ta.Iterable[T]) -> ta.Iterable[tuple[T, int]]:
82
- return ((e, i) for i, e in enumerate(it))
83
-
84
-
85
- flatten = itertools.chain.from_iterable
86
-
87
-
88
- def flatmap(fn: ta.Callable[[T], ta.Iterable[R]], it: ta.Iterable[T]) -> ta.Iterable[R]:
89
- return flatten(map(fn, it))
90
-
91
-
92
- class Generator(ta.Generator[T, S, R]):
93
- def __init__(self, gen: ta.Generator[T, S, R]) -> None:
94
- super().__init__()
95
- self.gen = gen
96
-
97
- value: R
98
-
99
- def __iter__(self):
100
- return self
101
-
102
- def __next__(self):
103
- return self.send(None)
104
-
105
- def send(self, v):
106
- try:
107
- return self.gen.send(v)
108
- except StopIteration as e:
109
- self.value = e.value
110
- raise
111
-
112
- def throw(self, *args):
113
- try:
114
- return self.gen.throw(*args)
115
- except StopIteration as e:
116
- self.value = e.value
117
- raise
118
-
119
- def close(self):
120
- self.gen.close()
omlish/lang/maybes.py CHANGED
@@ -50,11 +50,11 @@ class Maybe(abc.ABC, ta.Generic[T]):
50
50
  raise NotImplementedError
51
51
 
52
52
  @abc.abstractmethod
53
- def or_else(self, other: T) -> T:
53
+ def or_else(self, other: T | U) -> T | U:
54
54
  raise NotImplementedError
55
55
 
56
56
  @abc.abstractmethod
57
- def or_else_get(self, supplier: ta.Callable[[], T]) -> T:
57
+ def or_else_get(self, supplier: ta.Callable[[], U]) -> T | U:
58
58
  raise NotImplementedError
59
59
 
60
60
  @abc.abstractmethod
@@ -109,10 +109,10 @@ class _Maybe(Maybe[T], tuple):
109
109
  return value
110
110
  return _empty # noqa
111
111
 
112
- def or_else(self, other: T) -> T:
112
+ def or_else(self, other: T | U) -> T | U:
113
113
  return self.must() if self else other
114
114
 
115
- def or_else_get(self, supplier: ta.Callable[[], T]) -> T:
115
+ def or_else_get(self, supplier: ta.Callable[[], T | U]) -> T | U:
116
116
  return self.must() if self else supplier()
117
117
 
118
118
  def or_else_raise(self, exception_supplier: ta.Callable[[], Exception]) -> T:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev136
3
+ Version: 0.0.0.dev138
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,9 +1,9 @@
1
1
  omlish/.manifests.json,sha256=RX24SRc6DCEg77PUVnaXOKCWa5TF_c9RQJdGIf7gl9c,1135
2
- omlish/__about__.py,sha256=CWnfySakfsMZZD27TmuHHIWSs20C8yL_8HidsVhkFwM,3379
2
+ omlish/__about__.py,sha256=46U2GBugODPMhUv3HImiUCjwQXnuT9j_dpRhQPYc4Ss,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
6
- omlish/cached.py,sha256=vn3ZiKy0d3NW_kzoXCi_Fg_s5vUcH0LQ1idfKBcQhzk,489
6
+ omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
7
7
  omlish/check.py,sha256=Li5xmecEyWKMzlwWyd6xDHpq3F4lE6IFOPBWdylCnpU,10540
8
8
  omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
9
9
  omlish/defs.py,sha256=T3bq_7h_tO3nDB5RAFBn7DkdeQgqheXzkFColbOHZko,4890
@@ -92,14 +92,14 @@ omlish/bootstrap/main.py,sha256=yZhOHDDlj4xB5a89dRdT8z58FsqqnpoBg1-tvY2CJe4,5903
92
92
  omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
93
93
  omlish/bootstrap/sys.py,sha256=iLHUNIuIPv-k-Mc6aHj5sSET78olCVt7t0HquFDO4iQ,8762
94
94
  omlish/collections/__init__.py,sha256=zeUvcAz073ekko37QKya6sElTMfKTuF1bKrdbMtaRpI,2142
95
- omlish/collections/_abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
95
+ omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
96
96
  omlish/collections/coerce.py,sha256=o11AMrUiyoadd8WkdqeKPIpXf2xd0LyylzNCyJivCLU,7036
97
97
  omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
98
98
  omlish/collections/frozen.py,sha256=DGxemj_pVID85tSBm-Wns_x4ov0wOEIT6X5bVgJtmkA,4152
99
99
  omlish/collections/hasheq.py,sha256=XcOCE6f2lXizDCOXxSX6vJv-rLcpDo2OWCYIKGSWuic,3697
100
100
  omlish/collections/identity.py,sha256=jhEpC8tnfh3Sg-MJff1Fp9eMydt150wits_UeVdctUk,2723
101
101
  omlish/collections/indexed.py,sha256=tFQsIWH4k9QqsF5VB7DsIVNsRThiQNx-ooRF36X_PnU,2203
102
- omlish/collections/mappings.py,sha256=eEifLZez-BWunTuj6974bGxBFfNRODZpu6Oa7_2ME94,3190
102
+ omlish/collections/mappings.py,sha256=laXV4WU1VZPGwaJQsJCQsmL3BVeUfELljTZ6a5sfg0s,3206
103
103
  omlish/collections/ordered.py,sha256=RzEC3fHvrDeJQSWThVDNYQKke263Vje1II5YwtDwT1Q,2335
104
104
  omlish/collections/persistent.py,sha256=KG471s0bhhReQrjlmX0xaN9HeAIcrtT264ddZCxsExo,875
105
105
  omlish/collections/skiplist.py,sha256=xjuKZtSScp1VnOi9lpf7I090vGp1DnjA5ELjFhMeGps,5987
@@ -118,7 +118,7 @@ omlish/concurrent/futures.py,sha256=J2s9wYURUskqRJiBbAR0PNEAp1pXbIMYldOVBTQduQY,
118
118
  omlish/concurrent/threadlets.py,sha256=JfirbTDJgy9Ouokz_VmHeAAPS7cih8qMUJrN-owwXD4,2423
119
119
  omlish/configs/__init__.py,sha256=3uh09ezodTwkMI0nRmAMP0eEuJ_0VdF-LYyNmPjHiCE,77
120
120
  omlish/configs/classes.py,sha256=GLbB8xKjHjjoUQRCUQm3nEjM8z1qNTx9gPV7ODSt5dg,1317
121
- omlish/configs/flattening.py,sha256=AOlRpBHm449MxwMp3CiIRGunStOC1DUNs1f3CLou0wc,4731
121
+ omlish/configs/flattening.py,sha256=rVxoTqgM9te86hUwQsHJ5u94jo2PARNfhk_HkrrDT9Y,4745
122
122
  omlish/configs/strings.py,sha256=0brx1duL85r1GpfbNvbHcSvH4jWzutwuvMFXda9NeI0,2651
123
123
  omlish/dataclasses/__init__.py,sha256=AHo-tN5V_b_VYFUF7VFRmuHrjZBXS1WytRAj061MUTA,1423
124
124
  omlish/dataclasses/utils.py,sha256=lcikCPiiX5Giu0Kb1hP18loZjmm_Z9D-XtJ-ZlHq9iM,3793
@@ -156,7 +156,7 @@ omlish/diag/pycharm.py,sha256=7-r_F-whXt8v-0dehxAX-MeMFPM3iZXX9IfeL0GfUtk,4643
156
156
  omlish/diag/pydevd.py,sha256=UN55ZjkWLCVyHxE2CNRRYamuvSKfzWsn0D5oczRTXO4,7536
157
157
  omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
158
158
  omlish/diag/_pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
- omlish/diag/_pycharm/runhack.py,sha256=kuRgiMYYsM0wkHwJfbN2ao79OFxmfjV1vkGaEspLKRA,35080
159
+ omlish/diag/_pycharm/runhack.py,sha256=JFz4GVN4AXndJo38iwnK5X_vH2MS6wyO8YmVZss5YRE,35157
160
160
  omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
161
161
  omlish/diag/replserver/__main__.py,sha256=LmU41lQ58bm1h4Mx7S8zhE_uEBSC6kPcp9mn5JRpulA,32
162
162
  omlish/diag/replserver/console.py,sha256=XzBDVhYlr8FY6ym4OwoaIHuFOHnGK3dTYlMDIOMUUlA,7410
@@ -194,11 +194,12 @@ omlish/formats/json/backends/std.py,sha256=PM00Kh9ZR2XzollHMEvdo35Eml1N-zFfRW-LO
194
194
  omlish/formats/json/backends/ujson.py,sha256=BNJCU4kluGHdqTUKLJEuHhE2m2TmqR7HEN289S0Eokg,2278
195
195
  omlish/formats/json/stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
196
  omlish/formats/json/stream/build.py,sha256=MSxgreWSfI5CzNAdgQrArZ0yWqDsaHl-shI_jmjLDms,2505
197
- omlish/formats/json/stream/lex.py,sha256=_JYBFnAyHsw_3hu8I0rvZqSSkRCU1BvQzgO81KfqRBg,6489
198
- omlish/formats/json/stream/parse.py,sha256=s21PgiuNTcqc_i9QS1ggmEp8Qwp_hOqtosr5d0zpg_o,5204
197
+ omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
198
+ omlish/formats/json/stream/lex.py,sha256=bfy0fb3_Z6G18UGueX2DR6oPSVUsMoFhlbsvXC3ztzI,6793
199
+ omlish/formats/json/stream/parse.py,sha256=JuYmXwtTHmQJTFKoJNoEHUpCPxXdl_gvKPykVXgED34,6208
199
200
  omlish/formats/json/stream/render.py,sha256=NtmDsN92xZi5dkgSSuMeMXMAiJblmjz1arB4Ft7vBhc,3715
200
201
  omlish/funcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
- omlish/funcs/genmachine.py,sha256=RlU-y_dt2nRdvoo7Z3HsUELlBn3KuyI4qUnqLVbChRI,2450
202
+ omlish/funcs/genmachine.py,sha256=EY2k-IFNKMEmHo9CmGRptFvhEMZVOWzZhn0wdQGeaFM,2476
202
203
  omlish/funcs/match.py,sha256=gMLZn1enNiFvQaWrQubY300M1BrmdKWzeePihBS7Ywc,6153
203
204
  omlish/funcs/pairs.py,sha256=OzAwnALkRJXVpD47UvBZHKzQfHtFNry_EgjTcC7vgLU,10606
204
205
  omlish/funcs/pipes.py,sha256=E7Sz8Aj8ke_vCs5AMNwg1I36kRdHVGTnzxVQaDyn43U,2490
@@ -256,10 +257,20 @@ omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNx
256
257
  omlish/inject/impl/proxy.py,sha256=1ko0VaKqzu9UG8bIldp9xtUrAVUOFTKWKTjOCqIGr4s,1636
257
258
  omlish/inject/impl/scopes.py,sha256=hKnzNieB-fJSFEXDP_QG1mCfIKoVFIfFlf9LiIt5tk4,5920
258
259
  omlish/io/__init__.py,sha256=aaIEsXTSfytW-oEkUWczdUJ_ifFY7ihIpyidIbfjkwY,56
259
- omlish/io/_abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
260
+ omlish/io/abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
260
261
  omlish/io/pyio.py,sha256=YB3g6yg64MzcFwbzKBo4adnbsbZ3FZMlOZfjNtWmYoc,95316
261
262
  omlish/io/trampoline.py,sha256=oUKTQg1F5xQS1431Kt7MbK-NZpX509ubcXU-s86xJr8,7171
262
- omlish/lang/__init__.py,sha256=f7FZLBp3n_edtP5EBK2NoEOi01MIgVs51Z-MbmLsLR8,3760
263
+ omlish/io/compress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
+ omlish/io/compress/abc.py,sha256=R9ebpSjJK4VAimV3OevPJB-jSDTGB_xi2FKNZKbTdYE,3054
265
+ omlish/io/compress/adapters.py,sha256=wS7cA_quham3C23j3_H6sf2EQ4gI0vURTQdPhapiiFE,6088
266
+ omlish/io/compress/bz2.py,sha256=BX-xWrpYe5K9vJ28iB2wCNPtd6PW2RgCh3h6XfE4FtA,1026
267
+ omlish/io/compress/gzip.py,sha256=Vs8O3l1Sf50iAvBSQueMLEDLDbmh6FqPdvdzwwaDy3o,11189
268
+ omlish/io/compress/lzma.py,sha256=_fFNWY1R6z71zRnrejhpKs7DVCHn_Ei9ny_fxHvUwJo,823
269
+ omlish/io/compress/types.py,sha256=IuCyxFX8v12fGqCq2ofCCRM5ZM-4zngHeeBW_PWqYbM,557
270
+ omlish/io/generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
+ omlish/io/generators/readers.py,sha256=nv6inmyJmYCJ2YFE2cv6jkVmoxGsbXzyuIki-MCjZDg,4195
272
+ omlish/io/generators/stepped.py,sha256=AYZmtZF1p95JW17XKe3ZIXWwWRuYmmbDLVuhB5x8Dog,2571
273
+ omlish/lang/__init__.py,sha256=lQ-w1MgrMtuyVNWtqODI0qNZ71SZPfvf-Lkn2LUMTec,3922
263
274
  omlish/lang/cached.py,sha256=92TvRZQ6sWlm7dNn4hgl7aWKbX0J1XUEo3DRjBpgVQk,7834
264
275
  omlish/lang/clsdct.py,sha256=AjtIWLlx2E6D5rC97zQ3Lwq2SOMkbg08pdO_AxpzEHI,1744
265
276
  omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
@@ -267,10 +278,11 @@ omlish/lang/contextmanagers.py,sha256=NEwaTLQMfhKawD5x_0HgI2RpeLXbMa5r9NqWqfDnUX
267
278
  omlish/lang/datetimes.py,sha256=ehI_DhQRM-bDxAavnp470XcekbbXc4Gdw9y1KpHDJT0,223
268
279
  omlish/lang/descriptors.py,sha256=RRBbkMgTzg82fFFE4D0muqobpM-ZZaOta6yB1lpX3s8,6617
269
280
  omlish/lang/exceptions.py,sha256=qJBo3NU1mOWWm-NhQUHCY5feYXR3arZVyEHinLsmRH4,47
270
- omlish/lang/functions.py,sha256=kkPfcdocg-OmyN7skIqrFxNvqAv89Zc_kXKYAN8vw8g,3895
281
+ omlish/lang/functions.py,sha256=tUqeqBNHtJtrwimbG6Kc1SjZQDDhqqC1o-8ANpXWn9E,3893
282
+ omlish/lang/generators.py,sha256=5LX17j-Ej3QXhwBgZvRTm_dq3n9veC4IOUcVmvSu2vU,5243
271
283
  omlish/lang/imports.py,sha256=TXLbj2F53LsmozlM05bQhvow9kEgWJOi9qYKsnm2D18,9258
272
- omlish/lang/iterables.py,sha256=xRwktm6i2RHSb_ELfAXdjITIfE69qDyMEzgeZqvQXiU,2386
273
- omlish/lang/maybes.py,sha256=es84ECP0D9exVT9WF7MNlKKuCev-T56oUx92oTABkfU,3389
284
+ omlish/lang/iterables.py,sha256=1bc-Vn-b34T6Gy3li2tMNYpUvuwCC7fjg7dpjXkTfWY,1746
285
+ omlish/lang/maybes.py,sha256=1RN7chX_x2XvgUwryZRz0W7hAX-be3eEFcFub5vvf6M,3417
274
286
  omlish/lang/objects.py,sha256=LOC3JvX1g5hPxJ7Sv2TK9kNkAo9c8J-Jw2NmClR_rkA,4576
275
287
  omlish/lang/resolving.py,sha256=OuN2mDTPNyBUbcrswtvFKtj4xgH4H4WglgqSKv3MTy0,1606
276
288
  omlish/lang/resources.py,sha256=yywDWhh0tsgw24l7mHYv49ll4oZS8Kc8MSCa8f4UbbI,2280
@@ -324,7 +336,7 @@ omlish/lite/http/handlers.py,sha256=Yu0P3nqz-frklwCM2PbiWvoJNE-NqeTFLBvpNpqcdtA,
324
336
  omlish/lite/http/parsing.py,sha256=jLdbBTQQhKU701j3_Ixl77nQE3rZld2qbJNAFhuW_cc,13977
325
337
  omlish/lite/http/versions.py,sha256=M6WhZeeyun-3jL_NCViNONOfLCiApuFOfe5XNJwzSvw,394
326
338
  omlish/logs/__init__.py,sha256=FbOyAW-lGH8gyBlSVArwljdYAU6RnwZLI5LwAfuNnrk,438
327
- omlish/logs/_abc.py,sha256=rWySJcr1vatu-AR1EYtODRhi-TjFaixqUzXeWg1c0GA,8006
339
+ omlish/logs/abc.py,sha256=rWySJcr1vatu-AR1EYtODRhi-TjFaixqUzXeWg1c0GA,8006
328
340
  omlish/logs/configs.py,sha256=EE0jlNaXJbGnM7V-y4xS5VwyTBSTzFzc0BYaVjg0JmA,1283
329
341
  omlish/logs/formatters.py,sha256=q79nMnR2mRIStPyGrydQHpYTXgC5HHptt8lH3W2Wwbs,671
330
342
  omlish/logs/handlers.py,sha256=UpzUf3kWBBzWOnrtljoZsLjISw3Ix-ePz3Nsmp6lRgE,255
@@ -419,7 +431,7 @@ omlish/specs/openapi/__init__.py,sha256=zilQhafjvteRDF_TUIRgF293dBC6g-TJChmUb6T9
419
431
  omlish/specs/openapi/marshal.py,sha256=Z-E2Knm04C81N8AA8cibCVSl2ImhSpHZVc7yAhmPx88,2135
420
432
  omlish/specs/openapi/openapi.py,sha256=y4h04jeB7ORJSVrcy7apaBdpwLjIyscv1Ub5SderH2c,12682
421
433
  omlish/sql/__init__.py,sha256=TpZLsEJKJzvJ0eMzuV8hwOJJbkxBCV1RZPUMLAVB6io,173
422
- omlish/sql/_abc.py,sha256=kiOitW_ZhTXrJanJ582wD7o9K69v6HXqDPkxuHEAxrc,1606
434
+ omlish/sql/abc.py,sha256=kiOitW_ZhTXrJanJ582wD7o9K69v6HXqDPkxuHEAxrc,1606
423
435
  omlish/sql/dbapi.py,sha256=5ghJH-HexsmDlYdWlhf00nCGQX2IC98_gxIxMkucOas,3195
424
436
  omlish/sql/dbs.py,sha256=lpdFmm2vTwLoBiVYGj9yPsVcTEYYNCxlYZZpjfChzkY,1870
425
437
  omlish/sql/params.py,sha256=Z4VPet6GhNqD1T_MXSWSHkdy3cpUEhST-OplC4B_fYI,4433
@@ -480,9 +492,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
480
492
  omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
481
493
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
482
494
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
483
- omlish-0.0.0.dev136.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
484
- omlish-0.0.0.dev136.dist-info/METADATA,sha256=heiHEjvH_MYIlgwIfTWaObhQg178414yEPPo1_ZbNjU,4173
485
- omlish-0.0.0.dev136.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
486
- omlish-0.0.0.dev136.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
487
- omlish-0.0.0.dev136.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
488
- omlish-0.0.0.dev136.dist-info/RECORD,,
495
+ omlish-0.0.0.dev138.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
496
+ omlish-0.0.0.dev138.dist-info/METADATA,sha256=J41ow55cnZbTzEAJBExrJvbwa-bt1NqEZbwrh1r4l_A,4173
497
+ omlish-0.0.0.dev138.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
498
+ omlish-0.0.0.dev138.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
499
+ omlish-0.0.0.dev138.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
500
+ omlish-0.0.0.dev138.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes