omlish 0.0.0.dev363__py3-none-any.whl → 0.0.0.dev364__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.dev363'
2
- __revision__ = '4f8e697da60d11b78b7994ff7f5ed3d6f69a6b69'
1
+ __version__ = '0.0.0.dev364'
2
+ __revision__ = 'efbc21858b1c3354b55f4666e435a1bd79b1a23a'
3
3
 
4
4
 
5
5
  #
omlish/argparse/cli.py CHANGED
@@ -259,7 +259,7 @@ class ArgparseCli:
259
259
 
260
260
  if self._unknown_args and not (cmd is not None and cmd.accepts_unknown):
261
261
  msg = f'unrecognized arguments: {" ".join(self._unknown_args)}'
262
- if (parser := self.get_parser()).exit_on_error: # type: ignore
262
+ if (parser := self.get_parser()).exit_on_error:
263
263
  parser.error(msg)
264
264
  else:
265
265
  raise argparse.ArgumentError(None, msg)
omlish/asyncs/utils.py CHANGED
@@ -9,7 +9,7 @@ T = ta.TypeVar('T')
9
9
  ##
10
10
 
11
11
 
12
- async def call_with_async_exit_stack( # type: ignore[return] # ???
12
+ async def call_with_async_exit_stack(
13
13
  fn: ta.Callable[ta.Concatenate[contextlib.AsyncExitStack, P], ta.Awaitable[T]],
14
14
  *args: ta.Any,
15
15
  **kwargs: ta.Any,
omlish/codecs/base.py CHANGED
@@ -72,7 +72,7 @@ class Codec:
72
72
  name: str = dc.xfield(coerce=check_codec_name)
73
73
  aliases: ta.Collection[str] | None = dc.xfield(
74
74
  default=None,
75
- coerce=lang.opt_fn(lambda s: [check_codec_name(a) for a in s]), # type: ignore
75
+ coerce=lang.opt_fn(lambda s: [check_codec_name(a) for a in s]),
76
76
  )
77
77
 
78
78
  input: rfl.Type = dc.xfield(coerce=rfl.type_)
@@ -108,7 +108,7 @@ class ServiceDaemon(lang.Final, ta.Generic[ServiceT, ServiceConfigT]):
108
108
  def service_(self) -> ServiceT:
109
109
  with self._lock:
110
110
  if isinstance(self.service, Service):
111
- return self.service # type: ignore[return-value]
111
+ return self.service
112
112
  elif isinstance(self.service, Service.Config):
113
113
  return Service.from_config(self.service) # type: ignore[return-value]
114
114
  else:
omlish/datetimes.py CHANGED
@@ -68,7 +68,8 @@ def parse_timedelta(s: str) -> datetime.timedelta:
68
68
  timedelta_kwargs = {
69
69
  k: float(v)
70
70
  for k, v in match.groupdict().items()
71
- if k != 'negative' and v is not None}
71
+ if k != 'negative' and v is not None
72
+ }
72
73
  if not timedelta_kwargs:
73
74
  raise ValueError
74
75
  sign = -1 if match.groupdict().get('negative') else 1
omlish/funcs/match.py CHANGED
@@ -143,6 +143,7 @@ class CachedMatchFn(MatchFn[P, T]):
143
143
  lock: lang.DefaultLockable = None,
144
144
  ) -> None:
145
145
  super().__init__()
146
+
146
147
  self._f = f
147
148
  self._key = key
148
149
  self._lock = lock
@@ -206,8 +207,10 @@ class MatchFnClass(MatchFn[P, T]):
206
207
 
207
208
  def __init_subclass__(cls, strict: bool = False, **kwargs: ta.Any) -> None:
208
209
  super().__init_subclass__()
210
+
209
211
  if '_cls_match_fn' in cls.__dict__:
210
212
  raise AttributeError('_cls_match_fn')
213
+
211
214
  d = {}
212
215
  for c in cls.__mro__:
213
216
  for a, o in c.__dict__.items():
omlish/graphs/trees.py CHANGED
@@ -62,7 +62,7 @@ class BasicTreeAnalysis(ta.Generic[NodeT]):
62
62
 
63
63
  self._set_fac: ta.Callable[..., ta.MutableSet[NodeT]] = col.IdentitySet if identity else set
64
64
  self._dict_fac: ta.Callable[..., ta.MutableMapping[NodeT, ta.Any]] = col.IdentityKeyDict if identity else dict
65
- self._rank_seq_fac: ta.Callable[..., col.RankedSeq[NodeT]] = functools.partial(col.RankedSeq, identity=identity) # type: ignore # noqa
65
+ self._rank_seq_fac: ta.Callable[..., col.RankedSeq[NodeT]] = functools.partial(col.RankedSeq, identity=identity)
66
66
 
67
67
  def walk(cur: NodeT, parent: NodeT | None) -> None:
68
68
  check.not_none(cur)
@@ -116,12 +116,12 @@ def close_response(resp: BaseHttpResponse) -> None:
116
116
  @contextlib.contextmanager
117
117
  def closing_response(resp: BaseHttpResponseT) -> ta.Iterator[BaseHttpResponseT]:
118
118
  if isinstance(resp, HttpResponse):
119
- yield resp # type: ignore
119
+ yield resp
120
120
  return
121
121
 
122
122
  elif isinstance(resp, StreamHttpResponse):
123
123
  with contextlib.closing(resp):
124
- yield resp # type: ignore
124
+ yield resp
125
125
 
126
126
  else:
127
127
  raise TypeError(resp)
omlish/inject/multis.py CHANGED
@@ -87,7 +87,7 @@ class SetBinder(ElementGenerator, ta.Generic[T]):
87
87
  if not isinstance(self, SetBinder):
88
88
  raise TypeError
89
89
  self._sbs.extend(SetBinding(self._multi_key, as_key(k)) for k in keys)
90
- return self # type: ignore
90
+ return self
91
91
 
92
92
  def __iter__(self) -> ta.Iterator[Element]:
93
93
  yield self._set_provider_binding
@@ -115,7 +115,7 @@ class MapBinder(ElementGenerator, ta.Generic[K, V]):
115
115
  if not isinstance(self, MapBinder):
116
116
  raise TypeError
117
117
  self._mbs.append(MapBinding(self._multi_key, map_key, as_key(map_value_key)))
118
- return self # type: ignore
118
+ return self
119
119
 
120
120
  def __iter__(self) -> ta.Iterator[Element]:
121
121
  yield self._map_provider_binding
omlish/io/coro/readers.py CHANGED
@@ -100,7 +100,7 @@ class PrependableCoroReader(CoroReader[AnyT]):
100
100
  if rem:
101
101
  d = check.not_none((yield rem))
102
102
  if d:
103
- lst.append(d) # type: ignore[unreachable]
103
+ lst.append(d)
104
104
 
105
105
  if len(lst) == 1:
106
106
  return lst[0]
@@ -19,7 +19,7 @@ _INTERNAL_ABSTRACT_ATTRS = frozenset([_FORCE_ABSTRACT_ATTR])
19
19
 
20
20
  def make_abstract(obj: T) -> T:
21
21
  if callable(obj):
22
- return ta.cast(T, abc.abstractmethod(obj))
22
+ return abc.abstractmethod(obj)
23
23
  elif isinstance(obj, property):
24
24
  return ta.cast(T, property(
25
25
  abc.abstractmethod(obj.fget) if obj.fget is not None else None,
@@ -123,7 +123,7 @@ class AsyncContextManager(abc.ABC, ta.Generic[T]):
123
123
  def maybe_managing(obj: T) -> ta.Iterator[T]:
124
124
  if isinstance(obj, ta.ContextManager):
125
125
  with obj:
126
- yield ta.cast(T, obj)
126
+ yield obj
127
127
  else:
128
128
  yield obj
129
129
 
omlish/lite/check.py CHANGED
@@ -437,7 +437,7 @@ class Checks:
437
437
  render_fmt='%s',
438
438
  )
439
439
 
440
- return v # type: ignore
440
+ return v
441
441
 
442
442
  def non_empty_str(self, v: ta.Optional[str], msg: CheckMessage = None) -> str:
443
443
  if not isinstance(v, str) or not v:
@@ -74,25 +74,25 @@ class KeywordParser:
74
74
 
75
75
  def parse_keyword(self, cls: type[KeywordT], v: ta.Any) -> KeywordT:
76
76
  if issubclass(cls, AnyKeyword):
77
- return cls(v) # type: ignore
77
+ return cls(v)
78
78
 
79
79
  elif issubclass(cls, AnyArrayKeyword):
80
- return cls(tuple(check.isinstance(v, ta.Sequence))) # type: ignore
80
+ return cls(tuple(check.isinstance(v, ta.Sequence)))
81
81
 
82
82
  elif issubclass(cls, BooleanKeyword):
83
- return cls(check.isinstance(v, bool)) # type: ignore
83
+ return cls(check.isinstance(v, bool))
84
84
 
85
85
  elif issubclass(cls, BooleanOrKeywordsKeyword):
86
86
  if isinstance(v, bool):
87
- return cls(v) # type: ignore
87
+ return cls(v)
88
88
  else:
89
- return cls(self.parse_keywords(v)) # type: ignore
89
+ return cls(self.parse_keywords(v))
90
90
 
91
91
  elif issubclass(cls, NumberKeyword):
92
- return cls(check.isinstance(v, (int, float))) # type: ignore
92
+ return cls(check.isinstance(v, (int, float)))
93
93
 
94
94
  elif issubclass(cls, StrKeyword):
95
- return cls(check.isinstance(v, str)) # type: ignore
95
+ return cls(check.isinstance(v, str))
96
96
 
97
97
  elif issubclass(cls, StrOrStrArrayKeyword):
98
98
  ss: str | ta.Sequence[str]
@@ -102,16 +102,16 @@ class KeywordParser:
102
102
  ss = col.seq_of(check.of_isinstance(str))(v)
103
103
  else:
104
104
  raise TypeError(v)
105
- return cls(ss) # type: ignore
105
+ return cls(ss)
106
106
 
107
107
  elif issubclass(cls, KeywordsKeyword):
108
- return cls(self.parse_keywords(v)) # type: ignore
108
+ return cls(self.parse_keywords(v))
109
109
 
110
110
  elif issubclass(cls, KeywordsArrayKeyword):
111
- return cls(tuple(self.parse_keywords(e) for e in v)) # type: ignore
111
+ return cls(tuple(self.parse_keywords(e) for e in v))
112
112
 
113
113
  elif issubclass(cls, StrToKeywordsKeyword):
114
- return cls({k: self.parse_keywords(mv) for k, mv in v.items()}) # type: ignore
114
+ return cls({k: self.parse_keywords(mv) for k, mv in v.items()})
115
115
 
116
116
  else:
117
117
  raise TypeError(cls)
@@ -92,7 +92,7 @@ class SubprocessRun:
92
92
  ) -> SubprocessRunOutput:
93
93
  if subprocesses is None:
94
94
  subprocesses = self._DEFAULT_SUBPROCESSES
95
- return check.not_none(subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
95
+ return check.not_none(subprocesses).run_(self.replace(**kwargs))
96
96
 
97
97
  _DEFAULT_ASYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractAsyncSubprocesses
98
98
 
@@ -103,7 +103,7 @@ class SubprocessRun:
103
103
  ) -> SubprocessRunOutput:
104
104
  if async_subprocesses is None:
105
105
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
106
- return await check.not_none(async_subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
106
+ return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
107
107
 
108
108
 
109
109
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
omlish/text/parts.py CHANGED
@@ -133,7 +133,7 @@ remove_metas = RemoveMetas()
133
133
 
134
134
  def _drop_empties(it: ta.Iterable[T]) -> list[T]:
135
135
  return [
136
- e # type: ignore
136
+ e
137
137
  for e in it
138
138
  if not (
139
139
  isinstance(e, collections.abc.Sequence) and
omlish/text/templating.py CHANGED
@@ -32,6 +32,24 @@ class Templater(lang.Abstract):
32
32
  raise NotImplementedError
33
33
 
34
34
 
35
+ def templater_context(
36
+ *envs: ta.Mapping[str, ta.Any] | None,
37
+ strict: bool = False,
38
+ ) -> Templater.Context:
39
+ env: dict[str, ta.Any] = {}
40
+ for e in envs:
41
+ if e is None:
42
+ continue
43
+ for k, v in e.items():
44
+ if strict and k in env:
45
+ raise KeyError(k)
46
+ env[k] = v
47
+
48
+ return Templater.Context(
49
+ env=env or None,
50
+ )
51
+
52
+
35
53
  ##
36
54
 
37
55
 
@@ -45,6 +63,9 @@ class FormatTemplater(Templater):
45
63
  return self.fmt.format(**(ctx.env or {}))
46
64
 
47
65
 
66
+ format_templater = FormatTemplater
67
+
68
+
48
69
  ##
49
70
 
50
71
 
@@ -61,6 +82,10 @@ class Pep292Templater(Templater):
61
82
  def from_string(cls, src: str) -> 'Pep292Templater':
62
83
  return cls(string.Template(src))
63
84
 
85
+
86
+ pep292_templater = Pep292Templater.from_string
87
+
88
+
64
89
  ##
65
90
 
66
91
 
@@ -93,6 +118,9 @@ class MinjaTemplater(Templater):
93
118
  return cls(tmpl)
94
119
 
95
120
 
121
+ minja_templater = MinjaTemplater.from_string
122
+
123
+
96
124
  ##
97
125
 
98
126
 
@@ -118,3 +146,6 @@ class JinjaTemplater(Templater):
118
146
  tmpl,
119
147
  **kwargs,
120
148
  )
149
+
150
+
151
+ jinja_templater = JinjaTemplater.from_string
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev363
3
+ Version: 0.0.0.dev364
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,10 +1,10 @@
1
1
  omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
2
- omlish/__about__.py,sha256=Iy5ihvh_IiPgZHhw_Nf2jBM7pUr-cJJXuY6lfgNU_d0,3478
2
+ omlish/__about__.py,sha256=jPad_LyUf2h4QZmz7cjzDxV8N2Q7ba3FdRz1o5SXyK0,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
6
6
  omlish/check.py,sha256=DDNZnLxNoY2Y7N0Hz7nMR1q912ZzRLoBgOJVLcsXVws,6575
7
- omlish/datetimes.py,sha256=eG3k6Ah04Ie6n0wdFUI8uHV_zrcC1VrUlVqwLFIzAUg,2163
7
+ omlish/datetimes.py,sha256=7dh4aiVRWXWECH3JLF8kkRbgJ1qyGlAlQVp1vCXdTBE,2168
8
8
  omlish/defs.py,sha256=-4UuZoJUUNO_bZ6eSSdhR4CK4NKN2Wwr1FfUvfTF--8,4918
9
9
  omlish/dynamic.py,sha256=zy0oO70_Vlh5dW8Nwav_O9bhIzQ6L16UgSuKR6y43VU,6526
10
10
  omlish/libc.py,sha256=mNY2FWZ2BjSucOx5TEW8IP_B5n84tVZWuVPL3Z3sUH8,15644
@@ -19,7 +19,7 @@ omlish/algorithm/toposort.py,sha256=5wog_7XTYtg5vq4tcKtn9DcXRsEMaVobzQ6ndMK4HhQ,
19
19
  omlish/algorithm/unify.py,sha256=jADtgVQkcGKRV4WokG0ePYe9X6BT_8RAS-WSfbBbjUk,838
20
20
  omlish/argparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  omlish/argparse/all.py,sha256=NeeMM5MIebY7XDAHaCxUzeesEoUYwsf5i9PrBUcO1cI,1057
22
- omlish/argparse/cli.py,sha256=5YaczSNN9ext5AdnxJ_zqoxlyI-iXewTaAQyDAwzAiQ,8752
22
+ omlish/argparse/cli.py,sha256=dRPR0VlHgssntrZV0klIMLWa9B1JzMsUDhHWUh_8qu4,8736
23
23
  omlish/asyncs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  omlish/asyncs/all.py,sha256=MjW0P9K8XBrw6AaH2X_qD5Y7hEZOF0cktqFv5BDGH-k,649
25
25
  omlish/asyncs/bridge.py,sha256=QonuN2KgT7sRsmJEgRvLqtubXma9RI2xOs27X5JSQcA,10153
@@ -28,7 +28,7 @@ omlish/asyncs/flavors.py,sha256=1mNxGNRVmjUHzA13K5ht8vdJv4CLEmzYTQ6BZXr1520,4866
28
28
  omlish/asyncs/sync.py,sha256=qfK8zRMQ0B_huC-6CsMG8vhKB0ktw7Ttq0NnySdWPwQ,2039
29
29
  omlish/asyncs/trio.py,sha256=fmZ5b_lKdVV8NQ3euCUutWgnkqTFzSnOjvJSA_jvmrE,367
30
30
  omlish/asyncs/trio_asyncio.py,sha256=b6H5H32pB79Uz5xvWEmuhXTJgTAeKFHBHzocv_Rpt5A,1332
31
- omlish/asyncs/utils.py,sha256=1QQMQ1WJBG86QLu4hQZRBFeUg-AypCVhlB8-niHHE4s,400
31
+ omlish/asyncs/utils.py,sha256=-oaa6nheDxMOxVDTfRylWZGlyOja3UVJEV2IibJXQv4,369
32
32
  omlish/asyncs/anyio/__init__.py,sha256=AkwRD3XFWmEzBeHV-eAzwpA4F04bl7xyyapigrxMR8g,1747
33
33
  omlish/asyncs/anyio/backends.py,sha256=jJIymWoiedaEJJm82gvKiJ41EWLQZ-bcyNHpbDpKKi4,1584
34
34
  omlish/asyncs/anyio/futures.py,sha256=Nm1gLerZEnHk-rlsmr0UfK168IWIK6zA8EebZFtoY_E,2052
@@ -69,7 +69,7 @@ omlish/bootstrap/main.py,sha256=RQAQVb_Cbk_Lnu-hSGMAo-aVQVIJ-E_TW7ZLsPO-ECk,5909
69
69
  omlish/bootstrap/marshal.py,sha256=aKLeiOyPW6DelVK78dmw0axQzOMHX-ALrSqOOzYh05w,486
70
70
  omlish/bootstrap/sys.py,sha256=r06ZroT2Rv0CBHiEweqDV6oWaMGNhFc4u0XBMBv3nnY,8793
71
71
  omlish/codecs/__init__.py,sha256=-FDwRJFGagg-fZyQ8wup4GPuR6gHpmaChzthlykn-kY,876
72
- omlish/codecs/base.py,sha256=UTbImMPnbLqxtM6lbyuOIh2EwbSS1JGvi4Xn5lSMufo,2234
72
+ omlish/codecs/base.py,sha256=9wNVEnbb6KmI06A-HpUdT4BAYXOtDoJVyctNcn5vRnY,2218
73
73
  omlish/codecs/bytes.py,sha256=jlZ87OmZ52HhQDNyL87R3OIviK2qV5iU2jZYOTOLWjk,2157
74
74
  omlish/codecs/chain.py,sha256=nbkL2nz0ZqT2lxYwSXktHh1YFTQ4Iii1Hp-fWjis6rc,532
75
75
  omlish/codecs/funcs.py,sha256=or0Jogczuzk7csDTRl-HURMEjl8LXXqxxXYK45xcM5w,855
@@ -132,7 +132,7 @@ omlish/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
132
  omlish/daemons/daemon.py,sha256=pUwomapIrUwXLnov9jlA5EU1vp4qEYcIiUxKD3SQyVo,3479
133
133
  omlish/daemons/launching.py,sha256=sNOYW939IGI4ZlLQ0bKxzXj6EyeOiwV7Upqhd5XfoHc,3747
134
134
  omlish/daemons/reparent.py,sha256=uEs7pjzQkL8zhM8xADJhedmXXA7eDsu28639F5HkmpU,590
135
- omlish/daemons/services.py,sha256=YYp2SMkJ71WgzOcYSXjWHeAyKKxu3j1dfuJvWkl0Dgw,3492
135
+ omlish/daemons/services.py,sha256=laoUeJU7eVHuWl1062FBjPSD7jchOjhpYDc5FT2B3dM,3462
136
136
  omlish/daemons/spawning.py,sha256=psR73zOYjMKTqNpx1bMib8uU9wAZz62tw5TaWHrTdyY,5337
137
137
  omlish/daemons/targets.py,sha256=00KmtlknMhQ5PyyVAhWl3rpeTMPym0GxvHHq6mYPZ7c,3051
138
138
  omlish/daemons/waiting.py,sha256=RfgD1L33QQVbD2431dkKZGE4w6DUcGvYeRXXi8puAP4,1676
@@ -306,13 +306,13 @@ omlish/formats/toml/parser.py,sha256=O2M0penQV3t8NAsq_conJjvTsXI8iivUFuBg2a5J3dU
306
306
  omlish/formats/toml/writer.py,sha256=kLLQNEA_Kzd3ue7UXPQ_torOKoaLT82W16Bt99sID-w,3231
307
307
  omlish/funcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
308
308
  omlish/funcs/genmachine.py,sha256=D9dChaliNBIjYE6lJP5ctcVQUCffNBhceyaaLvBJ7ns,2578
309
- omlish/funcs/match.py,sha256=MAzpWkdIvhdoQTm-R2ivRDkfG8--RmdusiRF137cKEM,6085
309
+ omlish/funcs/match.py,sha256=CTk4aljIAB9DnDpK-v0yfFLjprWjo3hxVr7nThajOZM,6088
310
310
  omlish/funcs/pairs.py,sha256=VCkZjDmJGtR76BsejsHNfb4TcpHCtkkmak-zWDFchAo,3904
311
311
  omlish/funcs/pipes.py,sha256=E7Sz8Aj8ke_vCs5AMNwg1I36kRdHVGTnzxVQaDyn43U,2490
312
312
  omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
313
313
  omlish/graphs/dags.py,sha256=GsTVDehSGxIpjuZ3qe29dldhVydqWexZD9mpqZErhnI,4400
314
314
  omlish/graphs/domination.py,sha256=iwQa4QUXitLU2X4cdPxJ1ltRRUTuXnz0lI8j4GtuBsw,7591
315
- omlish/graphs/trees.py,sha256=mcfkzcfKhhG8W2KtOgMaUJTe15-_H5kBCjTqCBsFK5w,8221
315
+ omlish/graphs/trees.py,sha256=phO2YNboo1uUJcY2qrD7CJ0bx4Ir8tbFkPK8RtHNm5k,8197
316
316
  omlish/graphs/dot/__init__.py,sha256=Y1MZRQBZkcYyG1Tn7K2FhL8aYbm4v4tk6f5g9AqEkUw,359
317
317
  omlish/graphs/dot/items.py,sha256=GIzUqLHJPR4AVtF141uA8JnyybkRZx6mFYsNJHu_JVg,4087
318
318
  omlish/graphs/dot/make.py,sha256=e-M1IEdh4kHEjJmBxpaEUPxvFLrm5uIXdGxjQZr2HRo,365
@@ -337,7 +337,7 @@ omlish/http/urllib.py,sha256=LwtMXDkjb9tYnOi6iApizHXpCiyjB1r72ePo_Nzv1vQ,466
337
337
  omlish/http/versions.py,sha256=Lwk6FztKH7c5zuc7NFWxPVULuLeeQp5-NFJInY6r-Zo,420
338
338
  omlish/http/wsgi.py,sha256=1JpfrY2JrQ0wrEVE0oLdQMWZw8Zcx0b4_9f3VmH4JKA,1070
339
339
  omlish/http/clients/__init__.py,sha256=SeH3ofjQvk7VuV9OE1uJir9QMZwvEuDl7fptkKgGQUU,449
340
- omlish/http/clients/base.py,sha256=8dQGHJyRxH9GFefdoG6HR-VAMsr1rCOti_M27NLAdJU,4658
340
+ omlish/http/clients/base.py,sha256=j_rzuPL6BJMhPTbOqDASvvYNJ5nifD2w_rNj3ILnzT4,4626
341
341
  omlish/http/clients/default.py,sha256=fO8So3pI2z8ateLqt9Sv50UoOJFkUZbgMdoDyWsjBNw,1070
342
342
  omlish/http/clients/httpx.py,sha256=Grl9_sG7QNIZj8HqaU7XduAsBDyfXl36RjbYQzQqal0,1787
343
343
  omlish/http/clients/urllib.py,sha256=DVKFPLQzANiZmwnlbFw5pWs5ZPLLvvgCb3UInvCSqPE,2701
@@ -357,7 +357,7 @@ omlish/inject/inspect.py,sha256=Uq4KMloGWF_YS2mgZbrx-JXhZQnYHHKJSr68i9yoBVc,597
357
357
  omlish/inject/keys.py,sha256=bkpaE_hXFZ1pX8xPU_Km4jPJh8rkk07fs5aA_8bpC5M,665
358
358
  omlish/inject/listeners.py,sha256=wyPsAJsl45fZHmrFwsVBxaCiT7r_Riw1I8Eowwg5NHE,592
359
359
  omlish/inject/managed.py,sha256=-9aBm1vRPOjNz4kgOmpt8S2T55s727t9RiggFBH8maU,2096
360
- omlish/inject/multis.py,sha256=4K0iO5o1OLUnPScrTWmEQOoI34T1EXWm6-I4CIjIl6o,3389
360
+ omlish/inject/multis.py,sha256=JzHTBr9LTy7hRTSax9GOo0Lxw7fk401uRgeHm8Mv4d8,3357
361
361
  omlish/inject/origins.py,sha256=-qXa18rIIkNwBdTrvASRDjgPYnoY6n6OPC222jJDrXg,551
362
362
  omlish/inject/overrides.py,sha256=ybEcq9cDf6kvqu5mqnwi6Evj0MFjKNeE3r0oUlGw5E4,546
363
363
  omlish/inject/privates.py,sha256=CyE-hvQ-F_uyCzcwfdiYVtfm9IF1WZvMDOYilFyZmWk,658
@@ -398,7 +398,7 @@ omlish/io/compress/zstd.py,sha256=wik_HWLq_8fGAJgGyMGq9fhFQovot1aCH4lwMpihQmg,94
398
398
  omlish/io/coro/__init__.py,sha256=Mr8-GoDzOlA2sKmaDxuov2vPmjX_IeB_49I8dTSvjvA,1080
399
399
  omlish/io/coro/consts.py,sha256=4r6IMLBMic6MJHVn9UiORIkkPAuxsqtzFT3KV0fatC0,33
400
400
  omlish/io/coro/direct.py,sha256=Y--rP3wvBAYMeYctokb5IGd8UyQGmEFChyKISmRg5k0,294
401
- omlish/io/coro/readers.py,sha256=9VcXuBQ7BSoFen8UVuYFwnl2jJVjyilWV7QeqLNQtKU,4131
401
+ omlish/io/coro/readers.py,sha256=mAT_L1tucv8QC-sz0phzq_eEQDj3gOmcPcwdINgv7kQ,4102
402
402
  omlish/io/coro/stepped.py,sha256=92HXRwR_YQBJoLQlGANPXPa8I8EPeE_HybbzEpUs3N4,5637
403
403
  omlish/io/fdio/__init__.py,sha256=XJMieft-Z-JEkpeARn0M1Jj7HYCjRHwfs2QfE8gdzQs,137
404
404
  omlish/io/fdio/handlers.py,sha256=Bw2jhrNili7XRlsf63mlSkrFPHmWM2jelb3BmWqy3Ok,1361
@@ -416,7 +416,7 @@ omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
416
416
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
417
417
  omlish/lang/collections.py,sha256=LVm0Sory60IXyFzYhhO8BZAWy_z_pjiA-meXNlSJP7o,2465
418
418
  omlish/lang/comparison.py,sha256=MOwEG0Yny-jBPHO9kQto9FSRyeNpQW24UABsghkrHxY,1356
419
- omlish/lang/contextmanagers.py,sha256=Cv6lLCKFSBpJO9TGph4wyLlVs_kxKK98KI8pC_rS0FI,7226
419
+ omlish/lang/contextmanagers.py,sha256=7mbTG7yIwM2whQBuhja5Tt0C4kfefBUW4Y_AIn5j8iI,7214
420
420
  omlish/lang/datetimes.py,sha256=01tg21QOx-PWDlm-CSFTalym3vpqF0EKzeinmtcVNoU,379
421
421
  omlish/lang/descriptors.py,sha256=zBtgO9LjdSTGHNUgiIqswh78WOVoGH6KzS0NbgB1Wls,6572
422
422
  omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
@@ -438,7 +438,7 @@ omlish/lang/cached/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
438
438
  omlish/lang/cached/function.py,sha256=su9QxYECK9NK-UfMFKbgx4lqH2WoGBiYshnEfaGvfhw,11522
439
439
  omlish/lang/cached/property.py,sha256=WHYyg4-6EA86TcNMfbXTjVhjEZPc0kngt9hfY3WN5w8,2768
440
440
  omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
441
- omlish/lang/classes/abstract.py,sha256=A-Jg5X8o_WvFryN0Cm2TpVkrZoTT1SYKQnv_pXjZk7o,3808
441
+ omlish/lang/classes/abstract.py,sha256=5G3TXelpy5PRWa2x8G_Im4SPymGKrOBK6sELRyOG9eg,3796
442
442
  omlish/lang/classes/bindable.py,sha256=gviEabI5gEx0Rpu4G0LDWaD4N_VO1WUeFs1_XEisoAE,1233
443
443
  omlish/lang/classes/namespaces.py,sha256=RVecCT38W5h6rjf5fYBLvomyDwwFqPRWjhs40gaLHPE,3933
444
444
  omlish/lang/classes/protocols.py,sha256=T98ZsHLgzw8hPvvNluxoreevoF8fD4zs8SwcnTXkLuY,701
@@ -455,7 +455,7 @@ omlish/lifecycles/states.py,sha256=6gTdY3hn7-1sJ60lA3GeMx5RVKvXtFBBXE4KEjoO1Hs,1
455
455
  omlish/lifecycles/transitions.py,sha256=3IFdWGtAeoy3XRlIyW7yCKV4e4Iof9ytkqklGMRFYQs,1944
456
456
  omlish/lite/__init__.py,sha256=ISLhM4q0LR1XXTCaHdZOZxBRyIsoZqYm4u0bf1BPcVk,148
457
457
  omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
458
- omlish/lite/check.py,sha256=CVUp_lVjTvnFdlKCh-S7GMJtp6UoQOU7lhZYdTUaSB8,13860
458
+ omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
459
459
  omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
460
460
  omlish/lite/contextmanagers.py,sha256=jpMxp5xwooRQJxsQ6J2ll4AJP9O7a5_YrLCGgwUFfD0,5703
461
461
  omlish/lite/dataclasses.py,sha256=vAxWRkEZfeFwU6Hy9UTCynD-pz2fkCcLY27odDqs1n8,1918
@@ -646,7 +646,7 @@ omlish/specs/jsonschema/keywords/base.py,sha256=QjkMrKw58j99r-Ug2I4Y-SGbyKSTVho5
646
646
  omlish/specs/jsonschema/keywords/core.py,sha256=3Pbi8d-eocEAxEdemNa0ldp5lrLWNmH0Tye-5rglUoU,535
647
647
  omlish/specs/jsonschema/keywords/format.py,sha256=9trrxHe38FDx47I8UfvO4PD_IygRlkEyTUJ3XlxDM6Y,244
648
648
  omlish/specs/jsonschema/keywords/metadata.py,sha256=IVWQKWT9xi0R07pXc79ErT7RBu5b6Kzg4pWYIITIRbs,336
649
- omlish/specs/jsonschema/keywords/parse.py,sha256=HdG-0bivCTe3YFRsrgW15o2S--Re73JOTMMaxYKFIn0,4411
649
+ omlish/specs/jsonschema/keywords/parse.py,sha256=XR4yQ7eHSo0DNU9tS0ko_vTCDH1EF7TGvHF4twwWhH0,4235
650
650
  omlish/specs/jsonschema/keywords/render.py,sha256=Viy3cbDcA2pCtR4z0pi4Q2oMsQDCf01vXsbMO70PlCc,1944
651
651
  omlish/specs/jsonschema/keywords/validation.py,sha256=bKu1bDOms5zxg5Xme1ki_jb7TYDFEOv_JKOzeYbxuYQ,1970
652
652
  omlish/specs/jsonschema/schemas/LICENSE,sha256=CU2AUO-rKNc9s9vngzyGxUMgaZ0Aevr8lgN2DFFFxKw,1491
@@ -735,7 +735,7 @@ omlish/subprocesses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
735
735
  omlish/subprocesses/async_.py,sha256=KtTZzrjj_IgpUDLTQ7YGB-uWnYn2gigwGa6ha36HnVk,2366
736
736
  omlish/subprocesses/base.py,sha256=r60N3ad4ooSvdgFmT94L_xZEy7FMbMX6JcG2VgpHo6w,6139
737
737
  omlish/subprocesses/editor.py,sha256=xBrd7gY0akhRfDIBK5YIBrYMHECtl_8r499iKViyfpQ,2634
738
- omlish/subprocesses/run.py,sha256=kxk3Ex0pZYPnWRe9aV4Ffvcd6yLPAd-a1vxwbEFelWA,3648
738
+ omlish/subprocesses/run.py,sha256=ooM6qWNCdudK2CuTjh9z2vC7g_gYWfxHJ9iVW1yzTpo,3588
739
739
  omlish/subprocesses/sync.py,sha256=YdGxa9_GhqqsvTucmnmUXWYcKKys0S5PQk271K1Jg68,3664
740
740
  omlish/subprocesses/utils.py,sha256=v5uEzxmbmRvXwOl_0DtBa5Il6yITKYRgmVSGHcLsT4o,402
741
741
  omlish/subprocesses/wrap.py,sha256=AhGV8rsnaVUMQCFYKkrjj35fs3O-VJLZC1hZ14dz3C8,769
@@ -789,9 +789,9 @@ omlish/text/indent.py,sha256=BWVVaHs_B1ppwHJJIxKCDG3iCutkYy5e1qr59Z_Suzg,1524
789
789
  omlish/text/linecache.py,sha256=hRYlEhD63ZfA6_ZOTkQIcnON-3W56QMAhcG3vEJqj9M,1858
790
790
  omlish/text/mangle.py,sha256=k7mYavVgxJ2ENV2wfjw3c9u3hqH5NeVpjoxYbyaYC0Y,2796
791
791
  omlish/text/minja.py,sha256=eyOA_zUCzyqaBfiPX-hV2xdK9_cqlDEhbVTkZUTZgQo,7521
792
- omlish/text/parts.py,sha256=Q9NvoyEGQKIWgiPD4D_Qc66cWAuyEKE033dT9m7c3Wk,6662
792
+ omlish/text/parts.py,sha256=MpiCUyfpcL4PLb2Etj8V7Yj4qofhy0xVwBrIL6RfNdg,6646
793
793
  omlish/text/random.py,sha256=8feS5JE_tSjYlMl-lp0j93kCfzBae9AM2cXlRLebXMA,199
794
- omlish/text/templating.py,sha256=azhKpvkDR2uby8k3AJ8Y6GpdKVQUb7Xt_cGbDz6dkTM,2454
794
+ omlish/text/templating.py,sha256=4dw0EGEPze6AtI6767PVvwnU3Vn9nyl6NI-ieqY7wQ0,3041
795
795
  omlish/text/antlr/__init__.py,sha256=88bMl_28cfSKslgOkMGYXqALgsHz3KC4LFvAVtzj7k8,89
796
796
  omlish/text/antlr/delimit.py,sha256=wvpZ-FlVoGwRjBALKT1in9cIriIwvyFqmHxgliNJEi8,3472
797
797
  omlish/text/antlr/dot.py,sha256=-WHO-xDSv-Ir00TZ4sVIwunKYtZkRveaQ4m5FKj_bRs,962
@@ -872,9 +872,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
872
872
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
873
873
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
874
874
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
875
- omlish-0.0.0.dev363.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
876
- omlish-0.0.0.dev363.dist-info/METADATA,sha256=aOSiEzZiSuTRVrZCxVA6Cx3E3fgot7Nf5I0d9_95944,4416
877
- omlish-0.0.0.dev363.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
878
- omlish-0.0.0.dev363.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
879
- omlish-0.0.0.dev363.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
880
- omlish-0.0.0.dev363.dist-info/RECORD,,
875
+ omlish-0.0.0.dev364.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
876
+ omlish-0.0.0.dev364.dist-info/METADATA,sha256=ZOYVCoR87JVc1QxFTVZMhgI4L5a_nQN_HgZiDLraDY4,4416
877
+ omlish-0.0.0.dev364.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
878
+ omlish-0.0.0.dev364.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
879
+ omlish-0.0.0.dev364.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
880
+ omlish-0.0.0.dev364.dist-info/RECORD,,