omlish 0.0.0.dev438__py3-none-any.whl → 0.0.0.dev439__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev438'
2
- __revision__ = '5451232ca0015e84e38bd53d3c368a9d659ea8ec'
1
+ __version__ = '0.0.0.dev439'
2
+ __revision__ = '3f7c136d6cdb4f4c2e749cf404632d93585559e3'
3
3
 
4
4
 
5
5
  #
@@ -142,7 +142,7 @@ def make_dataclass( # noqa
142
142
 
143
143
  if module is None:
144
144
  try:
145
- module = sys._getframemodulename(_frame_offset) or '__main__' # type: ignore # noqa
145
+ module = sys._getframemodulename(_frame_offset) or '__main__' # noqa
146
146
  except AttributeError:
147
147
  with contextlib.suppress(AttributeError, ValueError):
148
148
  module = sys._getframe(_frame_offset).f_globals.get('__name__', '__main__') # noqa
@@ -142,7 +142,7 @@ class Static(lang.Abstract):
142
142
  n_md[_ExtraFieldParamsMetadata] = {
143
143
  fs_f.name: getattr(x_fs, fs_f.name)
144
144
  for fs_f in dc.fields(FieldSpec) # noqa
145
- if fs_f not in dc.Field.__slots__ # type: ignore[attr-defined]
145
+ if fs_f not in dc.Field.__slots__
146
146
  and fs_f.name not in ('default', 'default_factory')
147
147
  }
148
148
  new_fld.metadata = n_md # type: ignore[assignment]
@@ -36,8 +36,8 @@ from .parsing import ( # noqa
36
36
  BeginArray,
37
37
  EndArray,
38
38
 
39
- JsonStreamParserEvent,
40
- JsonStreamParserEvents,
39
+ Event,
40
+ Events,
41
41
 
42
42
  yield_parser_events,
43
43
 
@@ -5,8 +5,8 @@ from .parsing import BeginArray
5
5
  from .parsing import BeginObject
6
6
  from .parsing import EndArray
7
7
  from .parsing import EndObject
8
+ from .parsing import Event
8
9
  from .parsing import JsonStreamObject
9
- from .parsing import JsonStreamParserEvent
10
10
  from .parsing import Key
11
11
 
12
12
 
@@ -62,7 +62,7 @@ class JsonValueBuilder:
62
62
  else:
63
63
  raise self.StateError
64
64
 
65
- def __call__(self, e: JsonStreamParserEvent) -> ta.Iterable[ta.Any]:
65
+ def __call__(self, e: Event) -> ta.Iterable[ta.Any]:
66
66
  stk = self._stack
67
67
 
68
68
  #
@@ -35,7 +35,7 @@ class EndArray(lang.Marker):
35
35
  pass
36
36
 
37
37
 
38
- JsonStreamParserEvent: ta.TypeAlias = ta.Union[ # noqa
38
+ Event: ta.TypeAlias = ta.Union[ # noqa
39
39
  type[BeginObject],
40
40
  Key,
41
41
  type[EndObject],
@@ -47,7 +47,7 @@ JsonStreamParserEvent: ta.TypeAlias = ta.Union[ # noqa
47
47
  ]
48
48
 
49
49
 
50
- class JsonStreamParserEvents(lang.Namespace):
50
+ class Events(lang.Namespace):
51
51
  BeginObject = BeginObject
52
52
  Key = Key
53
53
  EndObject = EndObject
@@ -59,7 +59,7 @@ class JsonStreamParserEvents(lang.Namespace):
59
59
  ##
60
60
 
61
61
 
62
- def yield_parser_events(obj: ta.Any) -> ta.Generator[JsonStreamParserEvent]:
62
+ def yield_parser_events(obj: ta.Any) -> ta.Iterator[Event]:
63
63
  if isinstance(obj, SCALAR_VALUE_TYPES):
64
64
  yield obj # type: ignore
65
65
 
@@ -95,7 +95,7 @@ class JsonStreamObject(list):
95
95
  return f'{self.__class__.__name__}({super().__repr__()})'
96
96
 
97
97
 
98
- class JsonStreamParser(GenMachine[Token, JsonStreamParserEvent]):
98
+ class JsonStreamParser(GenMachine[Token, Event]):
99
99
  def __init__(
100
100
  self,
101
101
  *,
@@ -7,14 +7,14 @@ from .parsing import BeginArray
7
7
  from .parsing import BeginObject
8
8
  from .parsing import EndArray
9
9
  from .parsing import EndObject
10
- from .parsing import JsonStreamParserEvent
10
+ from .parsing import Event
11
11
  from .parsing import Key
12
12
 
13
13
 
14
14
  ##
15
15
 
16
16
 
17
- class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]]):
17
+ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[Event]]):
18
18
  def __init__(
19
19
  self,
20
20
  *,
@@ -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]:
39
+ ) -> ta.Iterator[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]:
55
+ def _render(self, e: Event) -> ta.Iterator[str]:
56
56
  if self._need_delimit:
57
57
  yield self._delimiter
58
58
  self._need_delimit = False
@@ -124,12 +124,12 @@ 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]:
127
+ def render(self, events: ta.Iterable[Event]) -> ta.Iterator[str]:
128
128
  for e in events:
129
129
  yield from self._render(e)
130
130
 
131
131
  @classmethod
132
- def render_str(cls, i: ta.Iterable[JsonStreamParserEvent], /, **kwargs: ta.Any) -> str:
132
+ def render_str(cls, i: ta.Iterable[Event], /, **kwargs: ta.Any) -> str:
133
133
  out = io.StringIO()
134
134
  for s in cls(**kwargs).render(i):
135
135
  out.write(s)
@@ -31,8 +31,8 @@ from .building import JsonValueBuilder
31
31
  from .errors import JsonStreamError
32
32
  from .lexing import JsonStreamLexer
33
33
  from .lexing import Token
34
+ from .parsing import Event
34
35
  from .parsing import JsonStreamParser
35
- from .parsing import JsonStreamParserEvent
36
36
 
37
37
 
38
38
  ##
@@ -110,7 +110,7 @@ class DebugJsonStreamValueParser(JsonStreamValueParser):
110
110
 
111
111
  self._chars: list[str] = []
112
112
  self._tokens: list[Token] = []
113
- self._events: list[JsonStreamParserEvent] = []
113
+ self._events: list[Event] = []
114
114
  self._values: list[ta.Any] = []
115
115
 
116
116
  def feed(self, i: ta.Iterable[str]) -> ta.Iterator[ta.Any]:
omlish/inject/__init__.py CHANGED
@@ -123,6 +123,7 @@ with _lang.auto_proxy_init(globals()):
123
123
  )
124
124
 
125
125
  from .providers import ( # noqa
126
+ AsyncFnProvider,
126
127
  ConstProvider,
127
128
  CtorProvider,
128
129
  FnProvider,
@@ -22,6 +22,8 @@ with _lang.auto_proxy_init(globals()):
22
22
  unzip,
23
23
  )
24
24
 
25
+ from . import transforms as tf # noqa
26
+
25
27
  from .unique import ( # noqa
26
28
  UniqueItem,
27
29
  UniqueIterator,
@@ -0,0 +1,204 @@
1
+ import abc
2
+ import dataclasses as dc
3
+ import itertools
4
+ import typing as ta
5
+
6
+ from .. import lang
7
+
8
+
9
+ T = ta.TypeVar('T')
10
+ U = ta.TypeVar('U')
11
+
12
+ Transform: ta.TypeAlias = ta.Callable[[ta.Iterable[T]], ta.Iterable[U]]
13
+
14
+ X0 = ta.TypeVar('X0')
15
+ X1 = ta.TypeVar('X1')
16
+ X2 = ta.TypeVar('X2')
17
+ X3 = ta.TypeVar('X3')
18
+ X4 = ta.TypeVar('X4')
19
+ X5 = ta.TypeVar('X5')
20
+
21
+
22
+ ##
23
+
24
+
25
+ _filter = filter
26
+ _map = map
27
+ _zip = zip
28
+
29
+
30
+ ##
31
+
32
+
33
+ class Transform_(lang.Abstract, ta.Generic[T, U]): # noqa
34
+ @abc.abstractmethod
35
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
36
+ raise NotImplementedError
37
+
38
+
39
+ ##
40
+
41
+
42
+ @dc.dataclass(frozen=True)
43
+ class Filter(Transform_[T, T]):
44
+ fn: ta.Callable[[T], bool] | None
45
+
46
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[T]:
47
+ return _filter(self.fn, it)
48
+
49
+
50
+ filter = Filter # noqa
51
+
52
+
53
+ ##
54
+
55
+
56
+ @dc.dataclass(frozen=True)
57
+ class Map(Transform_[T, U]):
58
+ fn: ta.Callable[[T], U]
59
+
60
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
61
+ return _map(self.fn, it)
62
+
63
+
64
+ map = Map # noqa
65
+
66
+
67
+ ##
68
+
69
+
70
+ @dc.dataclass(frozen=True)
71
+ class Apply(Transform_[T, T]):
72
+ fn: ta.Callable[[T], ta.Any]
73
+
74
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[T]:
75
+ return _map(lambda e: (self.fn(e), e)[1], it)
76
+
77
+
78
+ apply = Apply
79
+
80
+
81
+ ##
82
+
83
+
84
+ @dc.dataclass(frozen=True)
85
+ class Flatten(Transform_[ta.Iterable[T], T]):
86
+ def __call__(self, it: ta.Iterable[ta.Iterable[T]]) -> ta.Iterable[U]:
87
+ return itertools.chain.from_iterable(it) # type: ignore[arg-type]
88
+
89
+
90
+ flatten = Flatten
91
+
92
+
93
+ ##
94
+
95
+
96
+ @dc.dataclass(frozen=True)
97
+ class FlatMap(Transform_[T, U]):
98
+ fn: ta.Callable[[T], ta.Iterable[U]]
99
+
100
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
101
+ return itertools.chain.from_iterable(_map(self.fn, it))
102
+
103
+
104
+ flat_map = FlatMap
105
+
106
+ # Alternatively:
107
+ # def flat_map(fn: ta.Callable[[T], ta.Iterable[U]]) -> Transform[T, U]:
108
+ # return compose(map(fn), flatten())
109
+
110
+
111
+ ##
112
+
113
+
114
+ @dc.dataclass(frozen=True)
115
+ class Compose(Transform_[T, U]):
116
+ tfs: ta.Sequence[Transform]
117
+
118
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
119
+ for tf in self.tfs:
120
+ it = tf(it)
121
+ return it # type: ignore[return-value]
122
+
123
+
124
+ @ta.overload
125
+ def compose(
126
+ tf0: Transform[T, U],
127
+ ) -> Transform[T, U]:
128
+ ...
129
+
130
+
131
+ @ta.overload
132
+ def compose(
133
+ tf0: Transform[T, X0],
134
+ tf1: Transform[X0, U],
135
+ ) -> Transform[T, U]:
136
+ ...
137
+
138
+
139
+ @ta.overload
140
+ def compose(
141
+ tf0: Transform[T, X0],
142
+ tf1: Transform[X0, X1],
143
+ tf2: Transform[X1, U],
144
+ ) -> Transform[T, U]:
145
+ ...
146
+
147
+
148
+ @ta.overload
149
+ def compose(
150
+ tf0: Transform[T, X0],
151
+ tf1: Transform[X0, X1],
152
+ tf2: Transform[X1, X2],
153
+ tf3: Transform[X2, U],
154
+ ) -> Transform[T, U]:
155
+ ...
156
+
157
+
158
+ @ta.overload
159
+ def compose(
160
+ tf0: Transform[T, X0],
161
+ tf1: Transform[X0, X1],
162
+ tf2: Transform[X1, X2],
163
+ tf3: Transform[X2, X3],
164
+ tf4: Transform[X3, U],
165
+ ) -> Transform[T, U]:
166
+ ...
167
+
168
+
169
+ @ta.overload
170
+ def compose(
171
+ tf0: Transform[T, X0],
172
+ tf1: Transform[X0, X1],
173
+ tf2: Transform[X1, X2],
174
+ tf3: Transform[X2, X3],
175
+ tf4: Transform[X3, X4],
176
+ tf5: Transform[X4, U],
177
+ ) -> Transform[T, U]:
178
+ ...
179
+
180
+
181
+ @ta.overload
182
+ def compose(
183
+ tf0: Transform[T, X0],
184
+ tf1: Transform[X0, X1],
185
+ tf2: Transform[X1, X2],
186
+ tf3: Transform[X2, X3],
187
+ tf4: Transform[X3, X4],
188
+ tf5: Transform[X4, X5],
189
+ tf6: Transform[X5, U],
190
+ ) -> Transform[T, U]:
191
+ ...
192
+
193
+
194
+ @ta.overload
195
+ def compose(
196
+ *tf: Transform,
197
+ ) -> Transform:
198
+ ...
199
+
200
+
201
+ def compose(tf0, *tfn):
202
+ if not tfn:
203
+ return tf0
204
+ return Compose([tf0, *tfn])
@@ -19,7 +19,7 @@ class _ClassOrInstanceMethod:
19
19
 
20
20
  class BindableClass(ta.Generic[T]):
21
21
  # FIXME: apparently can't have TypeVars in ClassVars, but could stick in a @classmethod (which gets transformed)...
22
- _bound: ta.ClassVar[type[T] | None] = None # type: ignore[misc]
22
+ _bound: ta.ClassVar[type[T] | None] = None
23
23
 
24
24
  def __init__(self, *, _bound):
25
25
  super().__init__()
@@ -32,6 +32,14 @@ class Final(Abstract):
32
32
  elif Final in base.__mro__:
33
33
  raise FinalTypeError(base)
34
34
 
35
+ # Per `ta.final`:
36
+ try:
37
+ cls.__final__ = True # type: ignore[attr-defined]
38
+ except (AttributeError, TypeError):
39
+ # Skip the attribute silently if it is not writable. AttributeError happens if the object has __slots__ or
40
+ # a read-only property, TypeError if it's a builtin class.
41
+ pass
42
+
35
43
 
36
44
  ##
37
45
 
omlish/lite/inject.py CHANGED
@@ -1,4 +1,5 @@
1
1
  # ruff: noqa: UP006 UP007 UP043 UP045
2
+ # @omlish-amalg ../../omdev/scripts/inject.py
2
3
  import abc
3
4
  import contextlib
4
5
  import contextvars
omlish/lite/marshal.py CHANGED
@@ -1,4 +1,5 @@
1
1
  # ruff: noqa: UP006 UP007 UP045
2
+ # @omlish-amalg ../../omdev/scripts/marshal.py
2
3
  """
3
4
  TODO:
4
5
  - pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
omlish/reflect/types.py CHANGED
@@ -225,7 +225,7 @@ def is_simple_generic_alias_type(oty: type) -> bool:
225
225
 
226
226
  def get_params(obj: ta.Any) -> tuple[ta.TypeVar, ...]:
227
227
  if isinstance(obj, type):
228
- if issubclass(obj, ta.Generic): # type: ignore
228
+ if issubclass(obj, ta.Generic):
229
229
  return obj.__dict__.get('__parameters__', ()) # noqa
230
230
 
231
231
  if (ks := _KNOWN_SPECIALS.get_by_origin(obj)) is not None:
@@ -591,7 +591,7 @@ class Reflector:
591
591
  obj,
592
592
  )
593
593
 
594
- if issubclass(obj, ta.Generic): # type: ignore
594
+ if issubclass(obj, ta.Generic):
595
595
  params = get_params(obj)
596
596
  if params:
597
597
  return Generic(
@@ -40,7 +40,7 @@ class OpMarshalerUnmarshaler(msh.Marshaler, msh.Unmarshaler):
40
40
  return col.make_map(((o.name, o) for _, o in self.ns), strict=True)
41
41
 
42
42
  def marshal(self, ctx: msh.MarshalContext, o: ta.Any) -> msh.Value:
43
- return check.isinstance(o, self.ty).name # type: ignore # noqa
43
+ return check.isinstance(o, self.ty).name
44
44
 
45
45
  def unmarshal(self, ctx: msh.UnmarshalContext, v: msh.Value) -> ta.Any:
46
46
  return self.by_name[check.isinstance(v, str)]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev438
3
+ Version: 0.0.0.dev439
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -150,7 +150,7 @@ dependencies of any kind**.
150
150
  - **[identity](https://github.com/wrmsr/omlish/blob/master/omlish/collections/identity.py)** - Identity-keyed
151
151
  collections.
152
152
  - **[sorted](https://github.com/wrmsr/omlish/blob/master/omlish/collections/sorted)** - Interfaces for value-sorted
153
- collections and key-sorted mappings, and a simple but - correct skiplist-backed implementation.
153
+ collections and key-sorted mappings, and a simple but correct skiplist-backed implementation.
154
154
  - **[persistent](https://github.com/wrmsr/omlish/blob/master/omlish/collections/persistent)** - Interfaces for
155
155
  [persistent](https://en.wikipedia.org/wiki/Persistent_data_structure) maps, and a simple but correct treap-backed
156
156
  implementation.
@@ -1,5 +1,5 @@
1
1
  omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=Thv5RpImyU6wQpYBs18IBVwbQYR6G0FiOOwPTbD8y40,3575
2
+ omlish/__about__.py,sha256=dvgJrWD5N6Mjo6BacUkFRrr7AXjC5cDHEIJlldjLl-I,3575
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ZNIMl1kwg3qdei4DiUrJPQe5M81S1e76N-GuNSwLBAE,8683
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -146,7 +146,7 @@ omlish/dataclasses/impl/api/__init__.py,sha256=k5iS9QOwf_f4iOfGffYhnqDOcmEIwEUUT
146
146
  omlish/dataclasses/impl/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
147
  omlish/dataclasses/impl/api/classes/conversion.py,sha256=T1I-aZKui2tv8rknuw9yCvGQLTrFnzTuHDFoezhE0ko,908
148
148
  omlish/dataclasses/impl/api/classes/decorator.py,sha256=LqkAjNFpUeLThnnkzt1tIYKtIf8maDCkjrZzSbABZbg,4067
149
- omlish/dataclasses/impl/api/classes/make.py,sha256=cRGPRfUQpW2YOHSDFE59-9qOzvWWrZ-4liq1T1U_1fg,5230
149
+ omlish/dataclasses/impl/api/classes/make.py,sha256=xcah0foeKtHa8r3H3Osr2xXBNpkIa_kImW0zfoECBVI,5214
150
150
  omlish/dataclasses/impl/api/classes/metadata.py,sha256=sMZgtoZaybfCoBKOVj7hKc-xqfU2Lca9WFrqg8UAAsE,2773
151
151
  omlish/dataclasses/impl/api/classes/params.py,sha256=cJAMxLHgW6xyKURlCnDQpA-TYfOgWpVBCavie-IZTOM,2000
152
152
  omlish/dataclasses/impl/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -201,7 +201,7 @@ omlish/dataclasses/tools/modifiers.py,sha256=zSw7wmYtkKXY2UTDdbVJppIEAGqkrFHBGTv
201
201
  omlish/dataclasses/tools/only_.py,sha256=hPpqzr9YW09YmlX_QJNU2aePHYJEIrbGCPwmnvVS_to,849
202
202
  omlish/dataclasses/tools/replace.py,sha256=izM9lPT6AhEtjqn22auqaofa0j69KO7iootF-2Uj4cY,396
203
203
  omlish/dataclasses/tools/repr.py,sha256=KFvF6uv2YYIKq8O3ZNbEAS1tqRQALsJ-SUlBNPd5_GI,190
204
- omlish/dataclasses/tools/static.py,sha256=qbGcio3YgVkC02iZ6aRrOGj9Jwu5NIumX4VBWQbxgAE,8783
204
+ omlish/dataclasses/tools/static.py,sha256=byDnPc0W15s3YPQNC9oyCASKVNxCytrHGLvDky4RGNc,8753
205
205
  omlish/diag/__init__.py,sha256=c1q8vuapGH1YiYdU300FIJXMI1MOcnLNBZXr-zc8BXk,1181
206
206
  omlish/diag/asts.py,sha256=MWh9XAG3m9L10FIJCyoNT2aU4Eft6tun_x9K0riq6Dk,3332
207
207
  omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
@@ -273,13 +273,13 @@ omlish/formats/json/backends/jiter.py,sha256=8qv_XWGpcupPtVm6Z_egHio_iY1Kk8eqkvX
273
273
  omlish/formats/json/backends/orjson.py,sha256=X2jhKgUYYwaVuAppPQmfyncbOs2PJ7drqH5BioP-AYI,3831
274
274
  omlish/formats/json/backends/std.py,sha256=Hhiug5CkC1TXLFrE9rnMR2on7xP-RliSvfYA9ill_U0,3159
275
275
  omlish/formats/json/backends/ujson.py,sha256=U3iOlAURfiCdXbiNlXfIjDdtJDbDaLZsSuZriTUvbxs,2307
276
- omlish/formats/json/stream/__init__.py,sha256=8Fjz-kQrGcWT50CAvrUvQi1CnAuUYqacahWWiOc5JAA,891
277
- omlish/formats/json/stream/building.py,sha256=dyrOms7Yskayi0-MG4e5-5ilN08HIekNEogJh5C4hhs,2549
276
+ omlish/formats/json/stream/__init__.py,sha256=LoYSkdUX3lkQ4g9JB_F6YOeexlOEporKW8bW8tv3YXg,859
277
+ omlish/formats/json/stream/building.py,sha256=QAQaTyXuw9vkfhvzWIh_DSlypD1-HgzO855Dgz3_wFM,2517
278
278
  omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
279
279
  omlish/formats/json/stream/lexing.py,sha256=GkEhuDqAgZTOJRkroP4F_U396XtMQVNMjEqXKiCCtnU,13605
280
- omlish/formats/json/stream/parsing.py,sha256=i99H7Z3AyTtTfayRy-0UdorM3rv4hNlqYWWLwU4qrbs,7219
281
- omlish/formats/json/stream/rendering.py,sha256=U0MyVoYRDv7JLI8e7ItwmxyKnqYhKvfJY4-ZBQ5lHzA,3694
282
- omlish/formats/json/stream/utils.py,sha256=ldjlnfD6SNHGgLkuF7iHX5RN_gSutthTiptvO8mzk6Q,4991
280
+ omlish/formats/json/stream/parsing.py,sha256=bnTaYcCMRh0i_mByQgq4qtVf53zJnmjPvUDwJ7-zL64,7154
281
+ omlish/formats/json/stream/rendering.py,sha256=E5SXMGcbBtgtUYYznTPZFHD4tmV_X7K3MK50V11ESRk,3611
282
+ omlish/formats/json/stream/utils.py,sha256=vX69i90DVCjAAAohpiLgsT3ZinFS_cYUfneTvx-3dxU,4959
283
283
  omlish/formats/json5/__init__.py,sha256=3rwU5w5N_-dYME5kwMvXgexl-Vvo4BAmOg1N-I9Wf0M,194
284
284
  omlish/formats/json5/codec.py,sha256=mywk74R7F77z7xprQd19qoJZ8sNPUEkiBD9jNCKTh0c,1603
285
285
  omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
@@ -343,7 +343,7 @@ omlish/http/coro/server/fdio.py,sha256=qZE4g5y4XESsTObSKyVggI-yzig57gSGJb4Z0rcHv
343
343
  omlish/http/coro/server/server.py,sha256=1B98Jj8TeZpnLVA8W-VJDHIRfxeFx2EvVbEFyEq1n7o,18697
344
344
  omlish/http/coro/server/simple.py,sha256=j1RZ3niKrgGM2qFnjdYWn_eniZzay5j49Ca4L3u8vO4,3296
345
345
  omlish/http/coro/server/sockets.py,sha256=24gU6wpIZuzYWKQD8UsHyYfTZlbcUFvkqXq5KVgWpQo,2261
346
- omlish/inject/__init__.py,sha256=1s_2338tLi2VWKy8HijBSkAlkanVY1uZ8iZec8SOEws,2929
346
+ omlish/inject/__init__.py,sha256=8ik0yhn0LCdDr2UMACBeatENs76yprB8pDXUNllXRWg,2954
347
347
  omlish/inject/binder.py,sha256=_TNPGcqtaVqCLoxMx2LBVSvZWmAUs4JcxAqnCpy7PG0,5253
348
348
  omlish/inject/bindings.py,sha256=PlvOnUREjvc6F8nOJdzl1k9SAf80icRB4qWFqDop87M,536
349
349
  omlish/inject/eagers.py,sha256=JBY7PcjXt-Rg9scQ1ol9xpcoTLXkXC_Ie9uwTWdzUkA,340
@@ -408,10 +408,11 @@ omlish/io/fdio/handlers.py,sha256=fJDNZz_MBBMU5C1HClFOHi-G9bCzL1v8KiSswb0BvE4,14
408
408
  omlish/io/fdio/kqueue.py,sha256=xRxDPKcOw5_bMDS0buF5xi12WHok4reNnnaYTX4kkCk,3843
409
409
  omlish/io/fdio/manager.py,sha256=I4KDZGo8fkBe0LAhpN0rmP9KJHyXRynypcCYsTzEjS4,1261
410
410
  omlish/io/fdio/pollers.py,sha256=5buOA47raq2PRwDuQ9pNwsahX0rP7nBm30CMcleiL08,5553
411
- omlish/iterators/__init__.py,sha256=Q35IkvmooW1WX2SlCm5nVGydHUCBXvT-l4fXpMu_o3k,513
411
+ omlish/iterators/__init__.py,sha256=Gy1KT06UjxL53EpqaSBzxfMrmgt1soR8mnIGZootP_c,557
412
412
  omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8,3159
413
413
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
414
414
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
415
+ omlish/iterators/transforms.py,sha256=YHVdD9nBkS1k4kogi4Ba0UOTU_pKkuX9jGw1Tqj3UMw,3598
415
416
  omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
416
417
  omlish/lang/__init__.py,sha256=HqVWUkrUArOsjGoWrL-Ck6Zz2U6kKpj2DzbpHed-k1o,10431
417
418
  omlish/lang/asyncs.py,sha256=LV_4I3-WbLY8-SUXYJvKlzfL-Hd5ASFOlyPi3uMJYJk,2266
@@ -446,10 +447,10 @@ omlish/lang/cached/function.py,sha256=epDPy9WyGc_VaKTrEQJ3dZun-NLsvdvbbNd7jbaUM2
446
447
  omlish/lang/cached/property.py,sha256=a4E8knrNk5LDcaW2M39RQH2Y8oqjvOm-Rps6jIJ_oeY,2780
447
448
  omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
448
449
  omlish/lang/classes/abstract.py,sha256=ALHIEL1ZFeXPkrxUlAm9pFH6KmWPSPXG5UIjn-k_kLs,1715
449
- omlish/lang/classes/bindable.py,sha256=gviEabI5gEx0Rpu4G0LDWaD4N_VO1WUeFs1_XEisoAE,1233
450
+ omlish/lang/classes/bindable.py,sha256=dyTqU1udGb9W5GNdztnRdgo7AU1VvVgghKIvkFoSKEQ,1211
450
451
  omlish/lang/classes/namespaces.py,sha256=RVecCT38W5h6rjf5fYBLvomyDwwFqPRWjhs40gaLHPE,3933
451
452
  omlish/lang/classes/protocols.py,sha256=T98ZsHLgzw8hPvvNluxoreevoF8fD4zs8SwcnTXkLuY,701
452
- omlish/lang/classes/restrict.py,sha256=CUyvLpMYiQwTjpzo5sdG_lQxdeEIq2z2xSVNrsI9KfA,4126
453
+ omlish/lang/classes/restrict.py,sha256=xHLIK20MQ_jJPQ7JVzMNhyN4Xc4eLBgrcxqDnTbeKBI,4480
453
454
  omlish/lang/classes/simple.py,sha256=3AJSs-plVg2flq4SC6I39LxP0nBaB241puv3D5YCP5I,2973
454
455
  omlish/lang/classes/virtual.py,sha256=J4y-uiv1RaP2rfFeptXqQ1a4MRek0TMlAFFraO_lzhs,3397
455
456
  omlish/lang/imports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -479,9 +480,9 @@ omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
479
480
  omlish/lite/contextmanagers.py,sha256=usDzBoNqJi98AccVlwgZoMvoBXOe9wyx2MreZtWhJy4,5863
480
481
  omlish/lite/dataclasses.py,sha256=aRSCZz1jN_UI-CWJhN0SJeKxa-79vXNUZ6YOMgG31SE,3610
481
482
  omlish/lite/imports.py,sha256=GyEDKL-WuHtdOKIL-cc8aFd0-bHwZFDEjAB52ItabX0,1341
482
- omlish/lite/inject.py,sha256=3DB2IcAo1G8dau2tw_XkffQmKqQucY0XXWHebhD2TZs,29109
483
+ omlish/lite/inject.py,sha256=tF0aI6uSNdhwQXXnnev6wKBG3ENbuajT_kBQpaGmNNQ,29155
483
484
  omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
484
- omlish/lite/marshal.py,sha256=J0VNr9_LjGLjxKW0wlZtIFnh_US7zwstCmtpe9Pk_D0,22969
485
+ omlish/lite/marshal.py,sha256=JE5siS7WG_kdEpxTsHVcjIHjJN89cU2y4WtJhS5vgFs,23016
485
486
  omlish/lite/maybes.py,sha256=NusCpK0FVqkIutw6_Wldn69G5VyKYhat7SegBIQmGpk,4412
486
487
  omlish/lite/maysync.py,sha256=NiltEfX_mc7jWgWZ9XAqkDzMlLVprTAZvXRObXJT_IE,14926
487
488
  omlish/lite/objects.py,sha256=HzN_4J6w6WDLKDrW8jSNUKgfAR5vUsB42rtSCu04oqQ,1921
@@ -626,7 +627,7 @@ omlish/reflect/__init__.py,sha256=omD3VLFQtYTwPxrTH6gLATQIax9sTGGKc-7ps96-q0g,12
626
627
  omlish/reflect/inspect.py,sha256=dUrVz8VfAdLVFtFpW416DxzVC17D80cvFb_g2Odzgq8,1823
627
628
  omlish/reflect/ops.py,sha256=4mGvFMw5D6XGbhDhdCqZ1dZsiqezUTenDv63FIDohpY,3029
628
629
  omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
629
- omlish/reflect/types.py,sha256=CalJ1gvu4eTsgL6Z4xM06pVamjRmJL8IgjPpZlI8l8U,16098
630
+ omlish/reflect/types.py,sha256=4Plo_1cHIk8-68lu8_c_SUEohy19exTNDsgvuVbOJ5A,16066
630
631
  omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
631
632
  omlish/secrets/all.py,sha256=qBxUFIqxCExADL71taNH_W6FYT9QvOrdcaMeUUPO3aw,298
632
633
  omlish/secrets/crypto.py,sha256=q0Hca5oMwvh39r0hrupN_ewxhlllbdDgAgVoloYFmDg,3714
@@ -720,7 +721,7 @@ omlish/sql/api/queries.py,sha256=OVsVqNyXXJQVDPfV3GFE2gwnHyGEenS65rTQRTNGx1Y,735
720
721
  omlish/sql/api/resources.py,sha256=RcjnsNoyFWG0VR8YDijwuyZtnxlGQe8jiPQVl_inzIc,2266
721
722
  omlish/sql/api/rows.py,sha256=Jo3AA_6Wt7tlwLO6-rp0arzYFqZXSxPudGPkW2xCYgQ,1346
722
723
  omlish/sql/queries/__init__.py,sha256=qoikGQZuwDkOBwGKdUVov_Ur3I-mezSDLLdzqwRw6l8,1567
723
- omlish/sql/queries/_marshal.py,sha256=yVfN5VgYMYDaYTE6FZ8Sea7GrRobn40Hc8kogrfKmjE,3016
724
+ omlish/sql/queries/_marshal.py,sha256=PwfcCmf-qeKsiL61c_GjUID6flLCiDiltFndPBhQIAM,2992
724
725
  omlish/sql/queries/base.py,sha256=nsavenCsZgzpITSI1zGEAi95K3cRDfAxRgNJKJmYul0,3502
725
726
  omlish/sql/queries/binary.py,sha256=dcEzeEn104AMPuQ7QrJU2O-YCN3SUdxB5S4jaWKOUqY,2253
726
727
  omlish/sql/queries/exprs.py,sha256=dG9L218QtJM1HtDYIMWqHimK03N6AL1WONk3FvVRcXY,1480
@@ -825,9 +826,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
825
826
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
826
827
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
827
828
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
828
- omlish-0.0.0.dev438.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
829
- omlish-0.0.0.dev438.dist-info/METADATA,sha256=rgXQ3eQ5a22kyq7eLSZCDuw4VCYG6emWkYn9OhW5dOI,19005
830
- omlish-0.0.0.dev438.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
831
- omlish-0.0.0.dev438.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
832
- omlish-0.0.0.dev438.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
833
- omlish-0.0.0.dev438.dist-info/RECORD,,
829
+ omlish-0.0.0.dev439.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
830
+ omlish-0.0.0.dev439.dist-info/METADATA,sha256=Sb_tGPltUyRpCzhFFI9-HrwblPX4hTyeVJ2SPrKxwD8,19003
831
+ omlish-0.0.0.dev439.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
832
+ omlish-0.0.0.dev439.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
833
+ omlish-0.0.0.dev439.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
834
+ omlish-0.0.0.dev439.dist-info/RECORD,,