omlish 0.0.0.dev355__py3-none-any.whl → 0.0.0.dev357__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.

Files changed (37) hide show
  1. omlish/__about__.py +2 -2
  2. omlish/asyncs/asyncio/subprocesses.py +1 -1
  3. omlish/asyncs/bluelet/core.py +1 -1
  4. omlish/asyncs/bluelet/events.py +1 -1
  5. omlish/codecs/base.py +2 -2
  6. omlish/codecs/text.py +2 -2
  7. omlish/concurrent/executors.py +1 -1
  8. omlish/formats/json/literals.py +0 -20
  9. omlish/formats/json/stream/parsing.py +1 -1
  10. omlish/formats/json/stream/rendering.py +3 -3
  11. omlish/formats/json5/rendering.py +4 -8
  12. omlish/graphs/trees.py +1 -1
  13. omlish/http/coro/server.py +1 -1
  14. omlish/inject/elements.py +1 -1
  15. omlish/inject/impl/injector.py +1 -1
  16. omlish/inject/impl/scopes.py +1 -1
  17. omlish/inject/managed.py +2 -2
  18. omlish/inject/scopes.py +1 -1
  19. omlish/io/buffers.py +1 -1
  20. omlish/io/compress/codecs.py +2 -2
  21. omlish/io/compress/gzip.py +2 -2
  22. omlish/io/coro/stepped.py +1 -1
  23. omlish/lite/contextmanagers.py +1 -1
  24. omlish/lite/inject.py +1 -1
  25. omlish/marshal/__init__.py +5 -0
  26. omlish/marshal/base.py +17 -0
  27. omlish/marshal/global_.py +10 -4
  28. omlish/marshal/standard.py +22 -12
  29. omlish/specs/jmespath/lexer.py +1 -1
  30. omlish/term/progressbar.py +1 -1
  31. omlish/testing/pytest/inject/harness.py +2 -2
  32. {omlish-0.0.0.dev355.dist-info → omlish-0.0.0.dev357.dist-info}/METADATA +1 -1
  33. {omlish-0.0.0.dev355.dist-info → omlish-0.0.0.dev357.dist-info}/RECORD +37 -37
  34. {omlish-0.0.0.dev355.dist-info → omlish-0.0.0.dev357.dist-info}/WHEEL +0 -0
  35. {omlish-0.0.0.dev355.dist-info → omlish-0.0.0.dev357.dist-info}/entry_points.txt +0 -0
  36. {omlish-0.0.0.dev355.dist-info → omlish-0.0.0.dev357.dist-info}/licenses/LICENSE +0 -0
  37. {omlish-0.0.0.dev355.dist-info → omlish-0.0.0.dev357.dist-info}/top_level.txt +0 -0
omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev355'
2
- __revision__ = 'd1e14d2e7ff6236c8b506824030a3e92dd99b929'
1
+ __version__ = '0.0.0.dev357'
2
+ __revision__ = '054a97a942279987561a25a0f485105760c9401d'
3
3
 
4
4
 
5
5
  #
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
3
  import asyncio.base_subprocess
4
4
  import asyncio.subprocess
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
3
  # Based on bluelet ( https://github.com/sampsyo/bluelet ) by Adrian Sampson, original license:
4
4
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
@@ -12,7 +12,7 @@ import typing as ta
12
12
 
13
13
  R = ta.TypeVar('R')
14
14
 
15
- BlueletEventT = ta.TypeVar('BlueletEventT', bound='BlueletEvent') # ta.TypeAlias
15
+ BlueletEventT = ta.TypeVar('BlueletEventT', bound='BlueletEvent')
16
16
 
17
17
  BlueletWaitable = ta.Union[int, 'BlueletHasFileno'] # ta.TypeAlias
18
18
 
omlish/codecs/base.py CHANGED
@@ -37,11 +37,11 @@ class EagerCodec(lang.Abstract, ta.Generic[I, O]):
37
37
 
38
38
  class IncrementalCodec(lang.Abstract, ta.Generic[I, O]):
39
39
  @abc.abstractmethod
40
- def encode_incremental(self) -> ta.Generator[O | None, I, None]:
40
+ def encode_incremental(self) -> ta.Generator[O | None, I]:
41
41
  raise NotImplementedError
42
42
 
43
43
  @abc.abstractmethod
44
- def decode_incremental(self) -> ta.Generator[I | None, O, None]:
44
+ def decode_incremental(self) -> ta.Generator[I | None, O]:
45
45
  raise NotImplementedError
46
46
 
47
47
 
omlish/codecs/text.py CHANGED
@@ -88,7 +88,7 @@ class TextEncodingComboCodec(ComboCodec[str, bytes]):
88
88
  i, _ = self._info.decode(o, self._opts.errors)
89
89
  return i
90
90
 
91
- def encode_incremental(self) -> ta.Generator[bytes | None, str, None]:
91
+ def encode_incremental(self) -> ta.Generator[bytes | None, str]:
92
92
  x = self._info.incrementalencoder(self._opts.errors)
93
93
  i = yield None
94
94
  while True:
@@ -99,7 +99,7 @@ class TextEncodingComboCodec(ComboCodec[str, bytes]):
99
99
  o = x.encode(i, final=True)
100
100
  yield o
101
101
 
102
- def decode_incremental(self) -> ta.Generator[str | None, bytes, None]:
102
+ def decode_incremental(self) -> ta.Generator[str | None, bytes]:
103
103
  x = self._info.incrementaldecoder(self._opts.errors)
104
104
  i = yield None
105
105
  while True:
@@ -37,7 +37,7 @@ def new_executor(
37
37
  *,
38
38
  immediate_exceptions: bool = False,
39
39
  **kwargs: ta.Any,
40
- ) -> ta.Generator[cf.Executor, None, None]:
40
+ ) -> ta.Generator[cf.Executor]:
41
41
  if max_workers == 0:
42
42
  yield ImmediateExecutor(
43
43
  immediate_exceptions=immediate_exceptions,
@@ -121,26 +121,6 @@ def encode_string(
121
121
  ])
122
122
 
123
123
 
124
- def encode_string_ascii(
125
- s: str | bytes,
126
- q: str | None = None,
127
- *,
128
- lq: str | None = None,
129
- rq: str | None = None,
130
- escape_map: ta.Mapping[str, str] | None = None,
131
- ) -> str:
132
- """Return an ASCII-only JSON representation of a Python string."""
133
-
134
- return encode_string(
135
- s,
136
- q,
137
- lq=lq,
138
- rq=rq,
139
- escape_map=escape_map,
140
- ensure_ascii=True,
141
- )
142
-
143
-
144
124
  ##
145
125
 
146
126
 
@@ -58,7 +58,7 @@ class JsonStreamParserEvents(lang.Namespace):
58
58
  ##
59
59
 
60
60
 
61
- def yield_parser_events(obj: ta.Any) -> ta.Generator[JsonStreamParserEvent, None, None]:
61
+ def yield_parser_events(obj: ta.Any) -> ta.Generator[JsonStreamParserEvent]:
62
62
  if isinstance(obj, SCALAR_VALUE_TYPES):
63
63
  yield obj # type: ignore
64
64
 
@@ -36,7 +36,7 @@ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]
36
36
  self,
37
37
  o: ta.Any,
38
38
  state: AbstractJsonRenderer.State = AbstractJsonRenderer.State.VALUE,
39
- ) -> ta.Generator[str, None, None]:
39
+ ) -> ta.Generator[str]:
40
40
  if self._style is not None:
41
41
  pre, post = self._style(o, state)
42
42
  yield pre
@@ -52,7 +52,7 @@ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]
52
52
  if post:
53
53
  yield post
54
54
 
55
- def _render(self, e: JsonStreamParserEvent) -> ta.Generator[str, None, None]:
55
+ def _render(self, e: JsonStreamParserEvent) -> ta.Generator[str]:
56
56
  if self._need_delimit:
57
57
  yield self._delimiter
58
58
  self._need_delimit = False
@@ -124,7 +124,7 @@ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]
124
124
  else:
125
125
  raise TypeError(e)
126
126
 
127
- def render(self, events: ta.Iterable[JsonStreamParserEvent]) -> ta.Generator[str, None, None]:
127
+ def render(self, events: ta.Iterable[JsonStreamParserEvent]) -> ta.Generator[str]:
128
128
  for e in events:
129
129
  yield from self._render(e)
130
130
 
@@ -3,7 +3,6 @@ import typing as ta
3
3
  from ..json import Scalar
4
4
  from ..json.literals import ESCAPE_MAP
5
5
  from ..json.literals import encode_string
6
- from ..json.literals import encode_string_ascii
7
6
  from ..json.rendering import JsonRenderer
8
7
  from ..json.rendering import JsonRendererOut
9
8
 
@@ -35,15 +34,12 @@ class Json5Renderer(JsonRenderer):
35
34
  isinstance(o, str) and
36
35
  '\n' in o
37
36
  ):
38
- kw: dict = dict(
39
- escape_map=MULTILINE_STRINGS_ESCAPE_MAP,
37
+ return encode_string(
38
+ o,
40
39
  lq='"\\\n',
40
+ escape_map=MULTILINE_STRINGS_ESCAPE_MAP,
41
+ ensure_ascii=self._ensure_ascii,
41
42
  )
42
43
 
43
- if self._ensure_ascii:
44
- return encode_string_ascii(o, **kw)
45
- else:
46
- return encode_string(o, **kw)
47
-
48
44
  else:
49
45
  return super()._format_scalar(o)
omlish/graphs/trees.py CHANGED
@@ -17,7 +17,7 @@ T = ta.TypeVar('T')
17
17
  NodeT = ta.TypeVar('NodeT')
18
18
 
19
19
  NodeWalker: ta.TypeAlias = ta.Callable[[NodeT], ta.Iterable[NodeT]]
20
- NodeGenerator: ta.TypeAlias = ta.Generator[NodeT, None, None]
20
+ NodeGenerator: ta.TypeAlias = ta.Generator[NodeT]
21
21
 
22
22
 
23
23
  ##
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
3
  # PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
4
4
  # --------------------------------------------
omlish/inject/elements.py CHANGED
@@ -24,7 +24,7 @@ class Elements(lang.Final):
24
24
  es: ta.Collection[Element] | None = None
25
25
  cs: ta.Collection['Elements'] | None = None
26
26
 
27
- def __iter__(self) -> ta.Generator[Element, None, None]:
27
+ def __iter__(self) -> ta.Generator[Element]:
28
28
  if self.es:
29
29
  yield from self.es
30
30
  if self.cs:
@@ -149,7 +149,7 @@ class InjectorImpl(Injector, lang.Final):
149
149
  pass
150
150
 
151
151
  @contextlib.contextmanager
152
- def _current_request(self) -> ta.Generator[_Request, None, None]:
152
+ def _current_request(self) -> ta.Generator[_Request]:
153
153
  if (cr := self.__cur_req) is not None:
154
154
  yield cr
155
155
  return
@@ -155,7 +155,7 @@ class SeededScopeImpl(ScopeImpl):
155
155
  self._ssi = check.isinstance(self._ii.get_scope_impl(self._ss), SeededScopeImpl)
156
156
 
157
157
  @contextlib.contextmanager
158
- def __call__(self, seeds: ta.Mapping[Key, ta.Any]) -> ta.Generator[None, None, None]:
158
+ def __call__(self, seeds: ta.Mapping[Key, ta.Any]) -> ta.Generator[None]:
159
159
  try:
160
160
  if self._ssi._st is not None: # noqa
161
161
  raise ScopeAlreadyOpenError(self._ss)
omlish/inject/managed.py CHANGED
@@ -26,7 +26,7 @@ T = ta.TypeVar('T')
26
26
 
27
27
 
28
28
  @contextlib.contextmanager
29
- def create_managed_injector(*args: Elemental) -> ta.Generator[Injector, None, None]:
29
+ def create_managed_injector(*args: Elemental) -> ta.Generator[Injector]:
30
30
  i = create_injector(
31
31
  bind(contextlib.ExitStack, singleton=True, eager=True),
32
32
  *args,
@@ -60,7 +60,7 @@ def make_managed_provider(
60
60
 
61
61
 
62
62
  @contextlib.asynccontextmanager
63
- async def create_async_managed_injector(*args: Elemental) -> ta.AsyncGenerator[Injector, None]:
63
+ async def create_async_managed_injector(*args: Elemental) -> ta.AsyncGenerator[Injector]:
64
64
  i = await _asyncs.s_to_a(create_injector)(
65
65
  bind(contextlib.AsyncExitStack, singleton=True, eager=True),
66
66
  *args,
omlish/inject/scopes.py CHANGED
@@ -90,6 +90,6 @@ def enter_seeded_scope(
90
90
  i: injector_.Injector,
91
91
  ss: SeededScope,
92
92
  keys: ta.Mapping[Key, ta.Any],
93
- ) -> ta.Generator[None, None, None]:
93
+ ) -> ta.Generator[None]:
94
94
  with i.provide(Key(SeededScope.Manager, tag=ss))(keys):
95
95
  yield
omlish/io/buffers.py CHANGED
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
3
  import io
4
4
  import typing as ta
@@ -28,10 +28,10 @@ class CompressionEagerCodec(codecs.EagerCodec[bytes, bytes]):
28
28
  class CompressionIncrementalCodec(codecs.IncrementalCodec[bytes, bytes]):
29
29
  compression: IncrementalCompression
30
30
 
31
- def encode_incremental(self) -> ta.Generator[bytes | None, bytes, None]:
31
+ def encode_incremental(self) -> ta.Generator[bytes | None, bytes]:
32
32
  return self.compression.compress_incremental()
33
33
 
34
- def decode_incremental(self) -> ta.Generator[bytes | None, bytes, None]:
34
+ def decode_incremental(self) -> ta.Generator[bytes | None, bytes]:
35
35
  return buffer_bytes_stepped_reader_coro(self.compression.decompress_incremental())
36
36
 
37
37
 
@@ -121,7 +121,7 @@ class IncrementalGzipCompressor:
121
121
  self._level = level
122
122
  self._mtime = mtime
123
123
 
124
- def _write_gzip_header(self) -> ta.Generator[bytes, None, None]:
124
+ def _write_gzip_header(self) -> ta.Generator[bytes]:
125
125
  check.none((yield b'\037\213')) # magic header
126
126
  check.none((yield b'\010')) # compression method
127
127
 
@@ -267,7 +267,7 @@ class IncrementalGzipDecompressor:
267
267
  rdr: PrependableBytesCoroReader,
268
268
  crc: int,
269
269
  stream_size: int,
270
- ) -> ta.Generator[int | None, bytes, None]:
270
+ ) -> ta.Generator[int | None, bytes]:
271
271
  # We've read to the end of the file.
272
272
  # We check that the computed CRC and size of the uncompressed data matches the stored values. Note that the size
273
273
  # stored is the true file size mod 2**32.
omlish/io/coro/stepped.py CHANGED
@@ -196,7 +196,7 @@ def buffer_bytes_stepped_reader_coro(g: BytesSteppedReaderCoro) -> BytesSteppedC
196
196
 
197
197
 
198
198
  @lang.autostart
199
- def iterable_bytes_stepped_coro(g: BytesSteppedCoro) -> ta.Generator[ta.Iterator[bytes], bytes, None]:
199
+ def iterable_bytes_stepped_coro(g: BytesSteppedCoro) -> ta.Generator[ta.Iterator[bytes], bytes]:
200
200
  i: bytes | None = check.isinstance((yield None), bytes) # type: ignore[misc]
201
201
  eof = False
202
202
 
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP007 UP045
1
+ # ruff: noqa: UP007 UP043 UP045
2
2
  import contextlib
3
3
  import functools
4
4
  import sys
omlish/lite/inject.py CHANGED
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  import abc
3
3
  import contextlib
4
4
  import contextvars
@@ -143,6 +143,11 @@ from .polymorphism.unmarshal import ( # noqa
143
143
  make_polymorphism_unmarshaler,
144
144
  )
145
145
 
146
+ from .singular.base64 import ( # noqa
147
+ BASE64_MARSHALER_FACTORY,
148
+ BASE64_UNMARSHALER_FACTORY,
149
+ )
150
+
146
151
  from .singular.primitives import ( # noqa
147
152
  PRIMITIVE_TYPES,
148
153
  )
omlish/marshal/base.py CHANGED
@@ -102,6 +102,9 @@ from .registries import RegistryItem
102
102
  from .values import Value
103
103
 
104
104
 
105
+ T = ta.TypeVar('T')
106
+
107
+
105
108
  ##
106
109
 
107
110
 
@@ -382,6 +385,9 @@ class MarshalContext(BaseContext, lang.Final):
382
385
  except mfs.MatchGuardError:
383
386
  raise UnhandledTypeError(rty) # noqa
384
387
 
388
+ def marshal(self, obj: ta.Any, ty: ta.Any | None = None) -> Value:
389
+ return self.make(ty if ty is not None else type(obj)).marshal(self, obj)
390
+
385
391
 
386
392
  @dc.dataclass(frozen=True)
387
393
  class UnmarshalContext(BaseContext, lang.Final):
@@ -394,6 +400,17 @@ class UnmarshalContext(BaseContext, lang.Final):
394
400
  except mfs.MatchGuardError:
395
401
  raise UnhandledTypeError(rty) # noqa
396
402
 
403
+ @ta.overload
404
+ def unmarshal(self, v: Value, ty: type[T]) -> T:
405
+ ...
406
+
407
+ @ta.overload
408
+ def unmarshal(self, v: Value, ty: ta.Any) -> ta.Any:
409
+ ...
410
+
411
+ def unmarshal(self, v, ty):
412
+ return self.make(ty).unmarshal(self, v)
413
+
397
414
 
398
415
  ##
399
416
 
omlish/marshal/global_.py CHANGED
@@ -30,8 +30,11 @@ def global_marshaler_factory() -> MarshalerFactory:
30
30
 
31
31
 
32
32
  def marshal(obj: ta.Any, ty: ta.Any | None = None, **kwargs: ta.Any) -> Value:
33
- mc = MarshalContext(GLOBAL_REGISTRY, factory=global_marshaler_factory(), **kwargs)
34
- return mc.make(ty if ty is not None else type(obj)).marshal(mc, obj)
33
+ return MarshalContext(
34
+ GLOBAL_REGISTRY,
35
+ factory=global_marshaler_factory(),
36
+ **kwargs,
37
+ ).marshal(obj, ty)
35
38
 
36
39
 
37
40
  ##
@@ -53,8 +56,11 @@ def unmarshal(v: Value, ty: ta.Any, **kwargs: ta.Any) -> ta.Any:
53
56
 
54
57
 
55
58
  def unmarshal(v, ty, **kwargs):
56
- uc = UnmarshalContext(GLOBAL_REGISTRY, factory=global_unmarshaler_factory(), **kwargs)
57
- return uc.make(ty).unmarshal(uc, v)
59
+ return UnmarshalContext(
60
+ GLOBAL_REGISTRY,
61
+ factory=global_unmarshaler_factory(),
62
+ **kwargs,
63
+ ).unmarshal(v, ty)
58
64
 
59
65
 
60
66
  ##
@@ -1,3 +1,5 @@
1
+ import typing as ta
2
+
1
3
  from .base import MarshalerFactory
2
4
  from .base import MultiMarshalerFactory
3
5
  from .base import MultiUnmarshalerFactory
@@ -26,8 +28,6 @@ from .objects.namedtuples import NamedtupleMarshalerFactory
26
28
  from .objects.namedtuples import NamedtupleUnmarshalerFactory
27
29
  from .polymorphism.unions import PrimitiveUnionMarshalerFactory
28
30
  from .polymorphism.unions import PrimitiveUnionUnmarshalerFactory
29
- from .singular.base64 import BASE64_MARSHALER_FACTORY
30
- from .singular.base64 import BASE64_UNMARSHALER_FACTORY
31
31
  from .singular.datetimes import DATETIME_MARSHALER_FACTORY
32
32
  from .singular.datetimes import DATETIME_UNMARSHALER_FACTORY
33
33
  from .singular.enums import EnumMarshalerFactory
@@ -56,7 +56,6 @@ STANDARD_MARSHALER_FACTORIES: list[MarshalerFactory] = [
56
56
  LiteralMarshalerFactory(),
57
57
  NUMBERS_MARSHALER_FACTORY,
58
58
  UUID_MARSHALER_FACTORY,
59
- BASE64_MARSHALER_FACTORY,
60
59
  DATETIME_MARSHALER_FACTORY,
61
60
  MaybeMarshalerFactory(),
62
61
  MappingMarshalerFactory(),
@@ -66,12 +65,18 @@ STANDARD_MARSHALER_FACTORIES: list[MarshalerFactory] = [
66
65
  ]
67
66
 
68
67
 
69
- def new_standard_marshaler_factory() -> MarshalerFactory:
68
+ def new_standard_marshaler_factory(
69
+ *,
70
+ first: ta.Iterable[MarshalerFactory] | None = None,
71
+ last: ta.Iterable[MarshalerFactory] | None = None,
72
+ ) -> MarshalerFactory:
70
73
  return TypeCacheMarshalerFactory(
71
74
  RecursiveMarshalerFactory(
72
- MultiMarshalerFactory(
73
- list(STANDARD_MARSHALER_FACTORIES),
74
- ),
75
+ MultiMarshalerFactory([
76
+ *(first if first is not None else []),
77
+ *STANDARD_MARSHALER_FACTORIES,
78
+ *(last if last is not None else []),
79
+ ]),
75
80
  ),
76
81
  )
77
82
 
@@ -90,7 +95,6 @@ STANDARD_UNMARSHALER_FACTORIES: list[UnmarshalerFactory] = [
90
95
  LiteralUnmarshalerFactory(),
91
96
  NUMBERS_UNMARSHALER_FACTORY,
92
97
  UUID_UNMARSHALER_FACTORY,
93
- BASE64_UNMARSHALER_FACTORY,
94
98
  DATETIME_UNMARSHALER_FACTORY,
95
99
  MaybeUnmarshalerFactory(),
96
100
  MappingUnmarshalerFactory(),
@@ -100,12 +104,18 @@ STANDARD_UNMARSHALER_FACTORIES: list[UnmarshalerFactory] = [
100
104
  ]
101
105
 
102
106
 
103
- def new_standard_unmarshaler_factory() -> UnmarshalerFactory:
107
+ def new_standard_unmarshaler_factory(
108
+ *,
109
+ first: ta.Iterable[UnmarshalerFactory] | None = None,
110
+ last: ta.Iterable[UnmarshalerFactory] | None = None,
111
+ ) -> UnmarshalerFactory:
104
112
  return TypeCacheUnmarshalerFactory(
105
113
  RecursiveUnmarshalerFactory(
106
- MultiUnmarshalerFactory(
107
- list(STANDARD_UNMARSHALER_FACTORIES),
108
- ),
114
+ MultiUnmarshalerFactory([
115
+ *(first if first is not None else []),
116
+ *STANDARD_UNMARSHALER_FACTORIES,
117
+ *(last if last is not None else []),
118
+ ]),
109
119
  ),
110
120
  )
111
121
 
@@ -48,7 +48,7 @@ class Lexer:
48
48
  self._enable_legacy_literals = False
49
49
  self._current: str | None = None
50
50
 
51
- def tokenize(self, expression: str, options: Options | None = None) -> ta.Generator[Token, None, None]:
51
+ def tokenize(self, expression: str, options: Options | None = None) -> ta.Generator[Token]:
52
52
  if options is not None:
53
53
  self._enable_legacy_literals = options.enable_legacy_literals
54
54
 
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
3
  import sys
4
4
  import time
@@ -65,7 +65,7 @@ class Harness:
65
65
  ##
66
66
 
67
67
  @contextlib.contextmanager
68
- def activate(self) -> ta.Generator[ta.Self, None, None]:
68
+ def activate(self) -> ta.Generator[ta.Self]:
69
69
  check.none(self._inj)
70
70
  check.not_in(self, _ACTIVE_HARNESSES)
71
71
  _ACTIVE_HARNESSES.add(self)
@@ -107,7 +107,7 @@ class Harness:
107
107
  self,
108
108
  pytest_scope: PytestScope,
109
109
  request: pytest.FixtureRequest,
110
- ) -> ta.Generator[None, None, None]:
110
+ ) -> ta.Generator[None]:
111
111
  ss = _SCOPES_BY_PYTEST_SCOPE[pytest_scope]
112
112
  with inj.enter_seeded_scope(check.not_none(self._inj), ss, {
113
113
  inj.Key(pytest.FixtureRequest, tag=pytest_scope): request,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev355
3
+ Version: 0.0.0.dev357
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=Egsh9irGGefBuu0l9ppa8a-6lo-r9iD7DnUYVmHaTMY,8587
2
- omlish/__about__.py,sha256=Wp63P0-hMDR3qsC_BDyopkMjm0tPCygx9zkLk3H58Es,3478
2
+ omlish/__about__.py,sha256=gzG591w6LnYNM0Muv6HZpP3PDR46re5wb7YgwUmtfrU,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
@@ -42,15 +42,15 @@ omlish/asyncs/asyncio/all.py,sha256=u2JpMEs-0AJ0Vd8yU10HvWD8rfKxdFfMiwBu2oDeuuQ,
42
42
  omlish/asyncs/asyncio/channels.py,sha256=oniTpmw_eeKK70APyEZLhRUChwLwebE4N0_uZiwSKgQ,1085
43
43
  omlish/asyncs/asyncio/sockets.py,sha256=i1a2DZ52IuvRQQQW8FJxEUFboqpKn_K08a_MsMaecqU,1264
44
44
  omlish/asyncs/asyncio/streams.py,sha256=Laa9BNwajZ7Wt_rJoYMbQtfSX4Q4i-dVHhtYSekCHXM,1015
45
- omlish/asyncs/asyncio/subprocesses.py,sha256=PycZSGD22UJbggRtYuQXZAzFnzVZF2ED9i12jmdKHKw,6902
45
+ omlish/asyncs/asyncio/subprocesses.py,sha256=jVtvitvWgCLzAhgSLabHTzIOcPmNQqnsJpDr6hy6zgU,6908
46
46
  omlish/asyncs/asyncio/timeouts.py,sha256=lJ4qmDqyxUeAQCXJGiLL8pxYwoR1F1lntZ18HVf40Wo,452
47
47
  omlish/asyncs/asyncio/utils.py,sha256=dCC4hXqCTKBpU5urAXsKUIIua2M9JXAtumwh7IUEu7E,2443
48
48
  omlish/asyncs/bluelet/LICENSE,sha256=q5Kpj4s30qpi8H66tXFlh5v8_fkaKMFIzqdGfnN0Hz0,555
49
49
  omlish/asyncs/bluelet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  omlish/asyncs/bluelet/all.py,sha256=aUV6PwnR8DqnEBS9wsZuPW_UtP6G9M8_KY-mmxZeVG0,1516
51
51
  omlish/asyncs/bluelet/api.py,sha256=RFOd95cVSQ7NQNlOVfcIiVtf9cHYx0sLq2ugbR_LIQk,906
52
- omlish/asyncs/bluelet/core.py,sha256=y4WsxMshlwGysal9qzsO6_IsqgzddUcfGKZIK75CP7E,5432
53
- omlish/asyncs/bluelet/events.py,sha256=5kVRV1F6eY_nWUxrInwsTigTDoerVvQ47cAJlgUmzPs,2442
52
+ omlish/asyncs/bluelet/core.py,sha256=HmCLIXRZ3BO22dNybLZdCfL5yuQqTSUIhx8_glJGa40,5438
53
+ omlish/asyncs/bluelet/events.py,sha256=hLPm-MuqMg3p1baSJKQkYgntoEE6RmREjwFc2_s5vwI,2426
54
54
  omlish/asyncs/bluelet/files.py,sha256=AYTldx_87MHUFr9TQZ7iBIUj7lqzM9pT2lXxsMG55Ys,2391
55
55
  omlish/asyncs/bluelet/runner.py,sha256=dG4ymYjZgvS0iEv3CZtSm68ikljgW7qZ1Ci68UVRLr0,15477
56
56
  omlish/asyncs/bluelet/sockets.py,sha256=62OH3dh5Ua5ykXjtCFF5jZFTpiDekPgcf2CDLaBFRDs,6754
@@ -69,13 +69,13 @@ 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=FLWf5jgxuyZk-7jH0oC5RzJ5Ls5FLxP0hAowrBVEvqo,2246
72
+ omlish/codecs/base.py,sha256=UTbImMPnbLqxtM6lbyuOIh2EwbSS1JGvi4Xn5lSMufo,2234
73
73
  omlish/codecs/bytes.py,sha256=jlZ87OmZ52HhQDNyL87R3OIviK2qV5iU2jZYOTOLWjk,2157
74
74
  omlish/codecs/chain.py,sha256=DrBi5vbaFfObfoppo6alwOmyW2XbrH2051cjExwr2Gs,527
75
75
  omlish/codecs/funcs.py,sha256=p4imNt7TobyZVXWC-WhntHVu9KfJrO4QwdtPRh-cVOk,850
76
76
  omlish/codecs/registry.py,sha256=2FnO5YP7ui1LzkguwESY0MP3WIdwgPTIJTM_4RyTOEg,3896
77
77
  omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
78
- omlish/codecs/text.py,sha256=JzrdwMpQPo2NBBg3K1EZszzQy5vEWmd82SIerJd4yeQ,5723
78
+ omlish/codecs/text.py,sha256=MgAzXapiHie-hhLBmcho67WXfWbmhlHz4tNPcHXnWUk,5711
79
79
  omlish/collections/__init__.py,sha256=AKf3dEpZar2KTrSaRF0VQ3CRjqUBZObY3zNwYL7lbmY,2690
80
80
  omlish/collections/abc.py,sha256=p9zhL5oNV5WPyWmMn34fWfkuxPQAjOtL7WQA-Xsyhwk,2628
81
81
  omlish/collections/bimap.py,sha256=3szDCscPJlFRtkpyVQNWneg4s50mr6Rd0jdTzVEIcnE,1661
@@ -109,7 +109,7 @@ omlish/collections/sorted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
109
109
  omlish/collections/sorted/skiplist.py,sha256=bcTO1hZvV5EnYxBZ3YBhdewXP_2aCTZra7tJ0pA7jjo,6194
110
110
  omlish/collections/sorted/sorted.py,sha256=Y_-7bA8hXG1KXEx5sS_EoLiH-Ru6ERJEsjHIcJ-8-IA,3968
111
111
  omlish/concurrent/__init__.py,sha256=9p-s8MvBEYDqHIoYU3OYoe-Nni22QdkW7nhZGEukJTM,197
112
- omlish/concurrent/executors.py,sha256=mF-rjJWzNFxwB1-_H7rHuwoImpl4FtNM6W3wcqM3NEE,1291
112
+ omlish/concurrent/executors.py,sha256=d5XSLetkcG41459TB3uUiTI6pHuH3MukR77lzelEh8M,1279
113
113
  omlish/concurrent/futures.py,sha256=870tx8ELI8THvMnTrQoYIlEFKO9hM4KUrlehckJqKBU,4238
114
114
  omlish/concurrent/threadlets.py,sha256=JfirbTDJgy9Ouokz_VmHeAAPS7cih8qMUJrN-owwXD4,2423
115
115
  omlish/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -265,7 +265,7 @@ omlish/formats/json/__init__.py,sha256=i41uhoyXjuLjj5JmdRj4Ud2sfKD0j6KAyk_XyyCIB
265
265
  omlish/formats/json/codecs.py,sha256=wvPHZw8cDHaOV6u7e9rfpCH3JVF_IjA6ND_fQUhcCXU,844
266
266
  omlish/formats/json/consts.py,sha256=A0cTAGGLyjo-gcYIQrL4JIaardI0yPMhQoNmh42BaRg,387
267
267
  omlish/formats/json/encoding.py,sha256=iwoYyJePibgvRDZ6e9b2OlXmOBJEczquRNoiffVf3hE,502
268
- omlish/formats/json/literals.py,sha256=EG-nZpi7Eaalo8PJWceeYq_yKj55PxmaSme6csFBO_M,8185
268
+ omlish/formats/json/literals.py,sha256=lXwS7rUOZRl7nZ8VofCCqO4VcI3udLiA5xclPSCzX6s,7751
269
269
  omlish/formats/json/rendering.py,sha256=5p8kG1t3aGm2GXsb82h1S90Mmz4lzbX8sX9_qh7fH1U,4915
270
270
  omlish/formats/json/types.py,sha256=ueO9-uOU2eVWowJf0LH1fHFLjZ6fTIZyq9qybcLQaiQ,147
271
271
  omlish/formats/json/backends/__init__.py,sha256=K5nAP-fCgUvaSylHqgRvmJp6j6PTWdMjrNhvMouKrFc,161
@@ -279,8 +279,8 @@ omlish/formats/json/stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
279
279
  omlish/formats/json/stream/building.py,sha256=SGbExmaerqOEiNSom2AERlpyXTj4dpM0QbMW-2WWM2o,2550
280
280
  omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
281
281
  omlish/formats/json/stream/lexing.py,sha256=0XbkpKm4rmn5DLRyqnVpyvBXMi_MjVEI1k6-TIgQWRM,7208
282
- omlish/formats/json/stream/parsing.py,sha256=AXsg0N5s0jEvdfEQrzprplZDNkB62l6Q3Pv8rIx3984,6454
283
- omlish/formats/json/stream/rendering.py,sha256=uuJc__MR0G5kypYMAAudBNjBfiIzA_GGli-DWT90428,3730
282
+ omlish/formats/json/stream/parsing.py,sha256=UClKJn-BkZzcvJFgzGdYbH7RszY5pKstyKuk4-NVVXs,6442
283
+ omlish/formats/json/stream/rendering.py,sha256=U0MyVoYRDv7JLI8e7ItwmxyKnqYhKvfJY4-ZBQ5lHzA,3694
284
284
  omlish/formats/json/stream/utils.py,sha256=UhBRuWbb25wrdQWl8Ttq7xGRLoa329TvNdecGCZxgzg,1197
285
285
  omlish/formats/json5/Json5.g4,sha256=ZUmgJPvj8lSMUD_v3wijp10ZQExYB5mu5Q089dYEJSU,2389
286
286
  omlish/formats/json5/__init__.py,sha256=5D7pUwtS8HMgs8rGJG3xUBLhOq5uFUULcwE-jIlpwmY,139
@@ -288,7 +288,7 @@ omlish/formats/json5/codec.py,sha256=IVllnRk5Nc0CnrsPiC36P1Mh8MZeasU-yq8OBZRtIk0
288
288
  omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
289
289
  omlish/formats/json5/literals.py,sha256=rj4-9KFXfgdq5oK_eUkp57cgoMQ8T0gRaG9ga430he4,2429
290
290
  omlish/formats/json5/parsing.py,sha256=CWJHfe_FXCQuyDk00a7PI5wOdROq7Tc3fbWrNuwaKCw,2346
291
- omlish/formats/json5/rendering.py,sha256=tHo-Zrb5obxNFgz4PAg-L1IU4El_4Pu8F-eoPj5XARY,1212
291
+ omlish/formats/json5/rendering.py,sha256=amSbWSxmy-3TG9xLFRXXGkKxTHM9Evlc90g3lxtCJas,1085
292
292
  omlish/formats/json5/_antlr/Json5Lexer.py,sha256=LnURBD0tL35VHNpxqM4DOPrTkE_9oONHtbftRM26tak,23239
293
293
  omlish/formats/json5/_antlr/Json5Listener.py,sha256=37Jhzu7tQEw6gLIxtcZtV5Yjn08kS-GkxF7d0KjXyo8,2097
294
294
  omlish/formats/json5/_antlr/Json5Parser.py,sha256=YU9bP89nq97A8ZCrjIcbgoBg4z76-N-6IMFGQe_ws54,19679
@@ -306,7 +306,7 @@ omlish/funcs/pipes.py,sha256=E7Sz8Aj8ke_vCs5AMNwg1I36kRdHVGTnzxVQaDyn43U,2490
306
306
  omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
307
307
  omlish/graphs/dags.py,sha256=GsTVDehSGxIpjuZ3qe29dldhVydqWexZD9mpqZErhnI,4400
308
308
  omlish/graphs/domination.py,sha256=iwQa4QUXitLU2X4cdPxJ1ltRRUTuXnz0lI8j4GtuBsw,7591
309
- omlish/graphs/trees.py,sha256=Y-ifC3_z2ND1N4czMkD3nVVWYTdJfNlCPrghvWFZCH0,8233
309
+ omlish/graphs/trees.py,sha256=mcfkzcfKhhG8W2KtOgMaUJTe15-_H5kBCjTqCBsFK5w,8221
310
310
  omlish/graphs/dot/__init__.py,sha256=Y1MZRQBZkcYyG1Tn7K2FhL8aYbm4v4tk6f5g9AqEkUw,359
311
311
  omlish/graphs/dot/items.py,sha256=GIzUqLHJPR4AVtF141uA8JnyybkRZx6mFYsNJHu_JVg,4087
312
312
  omlish/graphs/dot/make.py,sha256=e-M1IEdh4kHEjJmBxpaEUPxvFLrm5uIXdGxjQZr2HRo,365
@@ -337,42 +337,42 @@ omlish/http/clients/httpx.py,sha256=Grl9_sG7QNIZj8HqaU7XduAsBDyfXl36RjbYQzQqal0,
337
337
  omlish/http/clients/urllib.py,sha256=DVKFPLQzANiZmwnlbFw5pWs5ZPLLvvgCb3UInvCSqPE,2701
338
338
  omlish/http/coro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
339
  omlish/http/coro/fdio.py,sha256=mFhOzUocGOwrxLbSssULHora3hINfTcOwLOggXemYag,4146
340
- omlish/http/coro/server.py,sha256=L8EO-Iok4ExlM-2LTDQOCZilLRdDNO2wvn1DN8dghR0,18641
340
+ omlish/http/coro/server.py,sha256=94KsfrORaPHlbM0JXxwd6C63LP22L_Xp1QGvVm84Rlo,18647
341
341
  omlish/http/coro/simple.py,sha256=wpIDGa4AYndmAq2mCCj2IWpkLx67uM3JpKXKgrHLiD8,3275
342
342
  omlish/http/coro/sockets.py,sha256=ziTzdDCsw3mrwskoGBa4stqkm21ReNq6BtrM-ZkxB3k,2257
343
343
  omlish/inject/__init__.py,sha256=pY-A8Q4v08-Xa4a-XdZ3lSFC3OwCO2T9HhesB67Q4tQ,1895
344
344
  omlish/inject/binder.py,sha256=3-6KMOcSgFE5bvthy3YUrRzCX5w7YSGmdJ3Tv2yXZGw,4022
345
345
  omlish/inject/bindings.py,sha256=PlvOnUREjvc6F8nOJdzl1k9SAf80icRB4qWFqDop87M,536
346
346
  omlish/inject/eagers.py,sha256=JBY7PcjXt-Rg9scQ1ol9xpcoTLXkXC_Ie9uwTWdzUkA,340
347
- omlish/inject/elements.py,sha256=Jq2SwWFRw2WFK9sFzyrlcE8iB6kfykNoxtyWv2yChk8,1417
347
+ omlish/inject/elements.py,sha256=y4luEO_-eOlVnLcUDiNGSyMXee4pusl46ZGr0JFhbcY,1405
348
348
  omlish/inject/errors.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
349
349
  omlish/inject/injector.py,sha256=fyvaRoJXo_oibx1_IiGkncP9oXnZSKtDm7-ULNKRXHE,1071
350
350
  omlish/inject/inspect.py,sha256=Uq4KMloGWF_YS2mgZbrx-JXhZQnYHHKJSr68i9yoBVc,597
351
351
  omlish/inject/keys.py,sha256=bkpaE_hXFZ1pX8xPU_Km4jPJh8rkk07fs5aA_8bpC5M,665
352
352
  omlish/inject/listeners.py,sha256=wyPsAJsl45fZHmrFwsVBxaCiT7r_Riw1I8Eowwg5NHE,592
353
- omlish/inject/managed.py,sha256=ASHaY57v9POUOpwgCiinTbE14U28ysl3D6RcFkLfcOQ,2114
353
+ omlish/inject/managed.py,sha256=-9aBm1vRPOjNz4kgOmpt8S2T55s727t9RiggFBH8maU,2096
354
354
  omlish/inject/multis.py,sha256=4K0iO5o1OLUnPScrTWmEQOoI34T1EXWm6-I4CIjIl6o,3389
355
355
  omlish/inject/origins.py,sha256=-qXa18rIIkNwBdTrvASRDjgPYnoY6n6OPC222jJDrXg,551
356
356
  omlish/inject/overrides.py,sha256=ybEcq9cDf6kvqu5mqnwi6Evj0MFjKNeE3r0oUlGw5E4,546
357
357
  omlish/inject/privates.py,sha256=CyE-hvQ-F_uyCzcwfdiYVtfm9IF1WZvMDOYilFyZmWk,658
358
358
  omlish/inject/providers.py,sha256=GDjSEN6iLsc-Tdu_OCPvFHWu4yP0Vn0pAyH_xjw1DPg,783
359
- omlish/inject/scopes.py,sha256=oRBffhWC0I6jahJF3hKVL2cPP3oo7xDF_AK2SkVAHv0,2007
359
+ omlish/inject/scopes.py,sha256=MqGus6vCogQVRJlZUnoXFwEeHuGMSYv2NF23_OFxWHE,1995
360
360
  omlish/inject/types.py,sha256=Z-ZEdgtCpHBNrbxxKaMVvfeD7hYXdL4rC7A9_VGxZ6g,256
361
361
  omlish/inject/utils.py,sha256=5Xm6LEelY7QujhMK7oD5vqEtY7Ymg_oG1Y-ZdEGD3bc,592
362
362
  omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
363
363
  omlish/inject/impl/bindings.py,sha256=xSvUcoDz8NH-aNHPwBPEZsFg73K2WcF_A63npVbGt_k,420
364
364
  omlish/inject/impl/elements.py,sha256=PM_055moROskSTQqmohEa6I0tt1OQ-VRNArXCMG6vyk,5947
365
- omlish/inject/impl/injector.py,sha256=LJGmK1g6fiLSE1AFc6lTzgmvA-IQ11dlsKkGcMR7uKQ,7557
365
+ omlish/inject/impl/injector.py,sha256=Ch47a_RyABZX6_DwbY9N8u4eALqpKLO_7dfVRpVATvQ,7545
366
366
  omlish/inject/impl/inspect.py,sha256=reXkNsjyvJXva5379tHTWklVK0vzqGLP0BgI_4VVPgQ,3116
367
367
  omlish/inject/impl/multis.py,sha256=j2QHSpJp0jPv10yZEZJwi0w62kXFQ25gkHa026xv4-Q,2053
368
368
  omlish/inject/impl/origins.py,sha256=dgGdkoMN6I4DZrWjlpZYijeFsrF6Up1WPq_QSAgTtuQ,1676
369
369
  omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCFQ,2613
370
370
  omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
371
371
  omlish/inject/impl/proxy.py,sha256=gyCME_W48Zrl7QJMKiIPwGpSctf5fhvh4ZldgtA9MEE,1641
372
- omlish/inject/impl/scopes.py,sha256=XSLK93qBg-v2iN4uLtO3npKH_J7i3yjMpV6r3NOYcRA,5917
372
+ omlish/inject/impl/scopes.py,sha256=21ngZvtp38qUqwtXnQdn78EmDDzvK-hMw8rrg-ygK48,5905
373
373
  omlish/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
374
374
  omlish/io/abc.py,sha256=M40QB2udYpCEqmlxCcHv6FlJYJY6ymmJQBlaklYv0U8,1256
375
- omlish/io/buffers.py,sha256=CGejVEIwgHirloVjKb96xcKrqIIBNG8MyxC-s4TJLOA,7285
375
+ omlish/io/buffers.py,sha256=2ZAAZn-fTAtPCgtwcH_UJrSr5ZS9VNRp7yynufv0Rmk,7291
376
376
  omlish/io/fileno.py,sha256=dvzjLvGHoAcqziVvI6KYDQs2aLrxWdinRmR19GJFRdE,180
377
377
  omlish/io/pyio.py,sha256=q4RBFVpBE5PYjnGPGT-_4pcZb7dFJmLJ4LtI8OoDRQY,95433
378
378
  omlish/io/trampoline.py,sha256=yM7Evz7cgWpFj97IUiHgq9jfqpsx-deTSZwGl1qOnoM,7199
@@ -382,8 +382,8 @@ omlish/io/compress/adapters.py,sha256=LJHhjwMHXstoLyX_q0QhGoBAcqyYGWfzhzQbGBXHzH
382
382
  omlish/io/compress/base.py,sha256=zwPnicyrEY-zersxdhxGHXxn02ycl8ew2uZXEecJea4,615
383
383
  omlish/io/compress/brotli.py,sha256=sNDX5HmEVqg9_xID5NTFPAWuvlNPw5ixfOnnIWwZf_o,1189
384
384
  omlish/io/compress/bz2.py,sha256=HtwBuBYHJ3MyWO9xJ0XhWpyIYTA3OszLrpu_J4kRRPA,1534
385
- omlish/io/compress/codecs.py,sha256=VBc_MAz0W8lVKTKavot3aVKOuPmEUquzarMtpyuteiU,1804
386
- omlish/io/compress/gzip.py,sha256=f5G-uqzL3HYF58dIolb8TghHeSGVSVodwW5vys1ouvk,12217
385
+ omlish/io/compress/codecs.py,sha256=kpSJrCSnfFxAwReZTwdcXsaHe0iqoFbdZtZxjzuzxu0,1792
386
+ omlish/io/compress/gzip.py,sha256=6nCWycCYo0_4cTMu4QMhu23MT1xbrwyf7E8sGGBkR_w,12199
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
@@ -393,7 +393,7 @@ omlish/io/coro/__init__.py,sha256=Mr8-GoDzOlA2sKmaDxuov2vPmjX_IeB_49I8dTSvjvA,10
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=xk7ODs_kSz_6IAmgW9682pMKGCuSVpzcGNvOsjoFzwI,5643
396
+ omlish/io/coro/stepped.py,sha256=92HXRwR_YQBJoLQlGANPXPa8I8EPeE_HybbzEpUs3N4,5637
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
@@ -451,10 +451,10 @@ omlish/lite/__init__.py,sha256=ISLhM4q0LR1XXTCaHdZOZxBRyIsoZqYm4u0bf1BPcVk,148
451
451
  omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
452
452
  omlish/lite/check.py,sha256=CVUp_lVjTvnFdlKCh-S7GMJtp6UoQOU7lhZYdTUaSB8,13860
453
453
  omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
454
- omlish/lite/contextmanagers.py,sha256=Bf8E2RMBJIr9uWPYQtiETo6YPvTlkPcGBlD3ftzVel4,5697
454
+ omlish/lite/contextmanagers.py,sha256=jpMxp5xwooRQJxsQ6J2ll4AJP9O7a5_YrLCGgwUFfD0,5703
455
455
  omlish/lite/dataclasses.py,sha256=vAxWRkEZfeFwU6Hy9UTCynD-pz2fkCcLY27odDqs1n8,1918
456
456
  omlish/lite/imports.py,sha256=JDYRFxu-ofHEBfd5VV3b27oKOLhtTpuzte1_Nt7yLgw,1352
457
- omlish/lite/inject.py,sha256=nEsB40QSNBZ-g-QFu6fQEUjOQrBdXWAIylziguqA3fA,29013
457
+ omlish/lite/inject.py,sha256=xvmLmtD3_2INnkurJQv76_Rkh9usbApEQrXJ4cvuVAk,29019
458
458
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
459
459
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
460
460
  omlish/lite/marshal.py,sha256=43fWY7CyLw3NGKHGxFqkiqKFGzXIHqayMVgfeHT02AU,18477
@@ -490,15 +490,15 @@ 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=SKPETuXI-XbjimU7nlJWo-ioANNzqn6IFBXkbqoPgIw,3480
494
- omlish/marshal/base.py,sha256=Q0ZRsz5z0NTI6PeWPc9mdMstJryDDbeIAdpKH9-SDps,11427
493
+ omlish/marshal/__init__.py,sha256=QeWqXKb6_Jk8vpX9Z-apWlM3nUbJY3uCPOm0k8Lw8b8,3584
494
+ omlish/marshal/base.py,sha256=3GMrhJBcnVrVtlQRQLOMgvV66MciAYpHKEQi5Ns3dIk,11853
495
495
  omlish/marshal/errors.py,sha256=g5XJyTHd__8lfwQ4KwgK-E5WR6MoNTMrqKP2U_QRQQQ,307
496
496
  omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
497
- omlish/marshal/global_.py,sha256=nTJmC17O8SJNURScIdYqEY72h-dRy6D-SaDSUQCp-cY,1523
497
+ omlish/marshal/global_.py,sha256=vNLpwQVt7Nn9sA5bBh7c_JYcUu9-1CLyENq1zBH-rcM,1510
498
498
  omlish/marshal/naming.py,sha256=7jQ204u_Kpc3-OGr-ctUHSv997DdWYRLh643qLHJhks,852
499
499
  omlish/marshal/proxy.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
500
500
  omlish/marshal/registries.py,sha256=FvC6qXHCizNB2QmU_N3orxW7iqfGYkiUXYYdTRWS6HA,2353
501
- omlish/marshal/standard.py,sha256=C1AawI1IrSb_mH6xBhZWHnqdjviVpk5-Cm9g-9aY02A,4487
501
+ omlish/marshal/standard.py,sha256=-Xfovb_T89BCNhgxRbRHVgOzqlQjYRrIDT6lUw67GGA,4812
502
502
  omlish/marshal/values.py,sha256=ssHiWdg_L6M17kAn8GiGdPW7UeQOm3RDikWkvwblf5I,263
503
503
  omlish/marshal/composite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
504
504
  omlish/marshal/composite/iterables.py,sha256=YdkdWNUe_AzdUqiAsr7z3kaDcPeg7Znj3AuQepY_qaA,2647
@@ -623,7 +623,7 @@ omlish/specs/jmespath/ast.py,sha256=XhcUGodHIdsY3-hVZEfpeW6LBehRjLbxVFXkMfZhRdk,
623
623
  omlish/specs/jmespath/cli.py,sha256=ThesJo0mWt5NXy0DK0-21QDLO894N0voXN0fG6QCHCw,2142
624
624
  omlish/specs/jmespath/errors.py,sha256=Co1HiUBPFNwFgZY3FV_ayuZoSgZIAmDcImImxauYNxc,4435
625
625
  omlish/specs/jmespath/functions.py,sha256=YnuwlgkcbUJWlqOvSpN3LGXZpF0fpImKa--FLkA7-qc,22571
626
- omlish/specs/jmespath/lexer.py,sha256=WGxkwQe_dcHWcJcGg9q6K-8_Q0oRdWkw09dYGFNTHbk,12639
626
+ omlish/specs/jmespath/lexer.py,sha256=HBLuGK8kYXY2utmPE75Cg0TvMFF_A9Mqs5GOZypIq24,12627
627
627
  omlish/specs/jmespath/parser.py,sha256=yfkydotVR4LBhrUTsptL_kLYDoGZrRN9zSEs_76kvZM,24441
628
628
  omlish/specs/jmespath/scope.py,sha256=UyDsl9rv_c8DCjJBuVIA2ESu1jrgYvuwEKiaJDQKnT0,1590
629
629
  omlish/specs/jmespath/visitor.py,sha256=J1vI5WMt8v0TxCXz1EfeU_Po-t-RxaqeoSoOeL99TxE,16615
@@ -737,7 +737,7 @@ omlish/term/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
737
737
  omlish/term/codes.py,sha256=fDRhUYzCzllcvCfMMgEroJaQoxqFsfTivpYdVmnwcCE,6390
738
738
  omlish/term/coloring.py,sha256=MCFYV_JTvEObTCJE12wfalW8OFFQB_KIFBKDtfES6Nk,2559
739
739
  omlish/term/confirm.py,sha256=5aqZnfy60K9CBSfXDsD-zA84HJm5fBWb_Y1T1x8gRnw,918
740
- omlish/term/progressbar.py,sha256=FtQqeIJCwSDWzraeG5uI9jKifQG1lOOyTpukJEpH22A,3672
740
+ omlish/term/progressbar.py,sha256=em2o2emwbfmJIB-EHljQBCkwHd-Zw8Zydl3n73IYvX0,3678
741
741
  omlish/term/vt100/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
742
742
  omlish/term/vt100/c.py,sha256=cAhDKXI81PZRtFmTotfad3HZGREP1QnOlWYoAw6v-Fw,3532
743
743
  omlish/term/vt100/states.py,sha256=OxPUxfFTcfz56MhtDgIigEApChOtN6XO1g6R2H08mu4,8303
@@ -749,7 +749,7 @@ omlish/testing/pytest/helpers.py,sha256=HxiKvpJQ4b6WCiQXOqQTqKbmr7CMAgCF6hViT6pf
749
749
  omlish/testing/pytest/marks.py,sha256=qhVnq-3LlQ5uRLS1LXYkh8Xk-8aQGOgs2Nr49T8YqOA,280
750
750
  omlish/testing/pytest/skip.py,sha256=tra8FM5CZTh4M7ZWVf9YPmKUX4yhesf61XRoIkO4s9c,954
751
751
  omlish/testing/pytest/inject/__init__.py,sha256=pdRKv1HcDmJ_yArKJbYITPXXZthRSGgBJWqITr0Er38,117
752
- omlish/testing/pytest/inject/harness.py,sha256=_Qf7lLcYc_dpauYOE68u_a65jPCFWmQUYv9m_OOdNqs,5724
752
+ omlish/testing/pytest/inject/harness.py,sha256=uaFDli1ovhue-kfXV5WXyLn6cVOWNQf_2vFD13r-JyQ,5700
753
753
  omlish/testing/pytest/plugins/__init__.py,sha256=ys1zXrYrNm7Uo6YOIVJ6Bd3dQo6kv387k7MbTYlqZSI,467
754
754
  omlish/testing/pytest/plugins/_registry.py,sha256=IK04KlBgiOJxKAyCCgjpX2R-9tE-btalYJkgjLc8Te8,77
755
755
  omlish/testing/pytest/plugins/depskip.py,sha256=9xsvf4Py31Cc3RMUBA-BcTkOstLmYsU1GA4iwNr3fPo,3209
@@ -866,9 +866,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
866
866
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
867
867
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
868
868
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
869
- omlish-0.0.0.dev355.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
870
- omlish-0.0.0.dev355.dist-info/METADATA,sha256=jO-TsGocOmOLGOu-Z8JkEviZlElPMSzWteaQp1YQmCs,4416
871
- omlish-0.0.0.dev355.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
872
- omlish-0.0.0.dev355.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
873
- omlish-0.0.0.dev355.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
874
- omlish-0.0.0.dev355.dist-info/RECORD,,
869
+ omlish-0.0.0.dev357.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
870
+ omlish-0.0.0.dev357.dist-info/METADATA,sha256=sgrFs4ZUKxV6X6TGdT3SPzAzXb2KCmMWWFYzUR5zHyk,4416
871
+ omlish-0.0.0.dev357.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
872
+ omlish-0.0.0.dev357.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
873
+ omlish-0.0.0.dev357.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
874
+ omlish-0.0.0.dev357.dist-info/RECORD,,