omlish 0.0.0.dev493__py3-none-any.whl → 0.0.0.dev506__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 (55) hide show
  1. omlish/CODESTYLE.md +345 -0
  2. omlish/README.md +2 -2
  3. omlish/__about__.py +6 -4
  4. omlish/_check.cc +209 -0
  5. omlish/check.py +11 -0
  6. omlish/dataclasses/__init__.py +4 -0
  7. omlish/dataclasses/impl/concerns/frozen.py +4 -1
  8. omlish/dataclasses/tools/replace.py +27 -0
  9. omlish/dispatch/functions.py +1 -1
  10. omlish/formats/json/stream/lexing.py +13 -5
  11. omlish/formats/json/stream/parsing.py +1 -1
  12. omlish/inject/README.md +430 -0
  13. omlish/inject/__init__.py +1 -0
  14. omlish/inject/_dataclasses.py +64 -64
  15. omlish/inject/eagers.py +0 -4
  16. omlish/inject/elements.py +4 -0
  17. omlish/inject/helpers/late.py +1 -1
  18. omlish/inject/helpers/managed.py +27 -24
  19. omlish/inject/impl/injector.py +7 -22
  20. omlish/inject/impl/inspect.py +0 -8
  21. omlish/inject/impl/origins.py +1 -0
  22. omlish/inject/impl/privates.py +2 -6
  23. omlish/inject/impl/providers.py +0 -4
  24. omlish/inject/impl/scopes.py +14 -18
  25. omlish/inject/inspect.py +9 -0
  26. omlish/inject/multis.py +0 -3
  27. omlish/inject/scopes.py +7 -5
  28. omlish/io/buffers.py +35 -8
  29. omlish/lang/__init__.py +8 -0
  30. omlish/lang/classes/simple.py +2 -1
  31. omlish/lang/iterables.py +6 -0
  32. omlish/lang/objects.py +13 -0
  33. omlish/lang/outcomes.py +1 -1
  34. omlish/lang/recursion.py +1 -1
  35. omlish/lang/sequences.py +33 -0
  36. omlish/lifecycles/_dataclasses.py +18 -18
  37. omlish/lifecycles/injection.py +4 -4
  38. omlish/lite/maybes.py +7 -0
  39. omlish/lite/typing.py +15 -0
  40. omlish/logs/all.py +11 -0
  41. omlish/logs/base.py +3 -3
  42. omlish/logs/bisync.py +99 -0
  43. omlish/marshal/_dataclasses.py +32 -32
  44. omlish/specs/jmespath/_dataclasses.py +38 -38
  45. omlish/specs/jsonschema/keywords/_dataclasses.py +24 -24
  46. omlish/typedvalues/_collection.cc +500 -0
  47. omlish/typedvalues/collection.py +159 -62
  48. omlish/typedvalues/generic.py +5 -4
  49. omlish/typedvalues/values.py +6 -0
  50. {omlish-0.0.0.dev493.dist-info → omlish-0.0.0.dev506.dist-info}/METADATA +9 -7
  51. {omlish-0.0.0.dev493.dist-info → omlish-0.0.0.dev506.dist-info}/RECORD +55 -50
  52. {omlish-0.0.0.dev493.dist-info → omlish-0.0.0.dev506.dist-info}/WHEEL +0 -0
  53. {omlish-0.0.0.dev493.dist-info → omlish-0.0.0.dev506.dist-info}/entry_points.txt +0 -0
  54. {omlish-0.0.0.dev493.dist-info → omlish-0.0.0.dev506.dist-info}/licenses/LICENSE +0 -0
  55. {omlish-0.0.0.dev493.dist-info → omlish-0.0.0.dev506.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,8 @@
1
+ # ruff: noqa: UP007
2
+ """
3
+ TODO:
4
+ - cext _init_typed_values_collection
5
+ """
1
6
  import typing as ta
2
7
 
3
8
  from .. import check
@@ -19,12 +24,128 @@ UniqueTypedValueT = ta.TypeVar('UniqueTypedValueT', bound='UniqueTypedValue')
19
24
 
20
25
 
21
26
  @dc.dataclass()
22
- class DuplicateUniqueTypedValueError(Exception, ta.Generic[UniqueTypedValueT]):
23
- cls: type[UniqueTypedValueT]
24
- new: UniqueTypedValueT
25
- old: UniqueTypedValueT
27
+ class DuplicateUniqueTypedValueError(Exception):
28
+ cls: type
29
+ new: TypedValue
30
+ old: TypedValue
26
31
 
27
32
 
33
+ ##
34
+
35
+
36
+ def _init_typed_values_collection(
37
+ *tvs: TypedValueT,
38
+ override: bool = False,
39
+ check_type: type | tuple[type, ...] | None = None,
40
+ ) -> tuple[
41
+ tuple[TypedValueT, ...],
42
+ dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]],
43
+ dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]],
44
+ ]:
45
+ if not tvs:
46
+ return ((), {}, {})
47
+
48
+ # Either a non-unique TypedValue or a tuple of the form (unique_tv_cls, tv, unique_lst, idx_in_unique_lst). Notably,
49
+ # this intermediate list has the 'opposite' form of the returned collections: where the output dicts have a scalar
50
+ # tv for unique types and a sequence of tv's for non-unique types, this has scalar values for non-unique types and a
51
+ # tuple (heterogeneous, however) for unique types.
52
+ tmp_lst: list[ta.Union[
53
+ TypedValueT,
54
+ tuple[
55
+ type,
56
+ TypedValueT,
57
+ list[TypedValueT],
58
+ int,
59
+ ],
60
+ ]] = []
61
+
62
+ # When override is False duplicate unique values raises early. When override is True, however, last-in-wins. This
63
+ # could probably rely on dict insertion order preservation and just overwrite in-place, but it's intentionally done
64
+ # explicitly: preservation of tv ordering in all aspects is crucial, and retention of some intermediates eases
65
+ # debugging and error reporting.
66
+ unique_dct: dict[type, list[TypedValueT]] = {}
67
+
68
+ for tv in tvs:
69
+ if check_type is not None:
70
+ if not isinstance(tv, check_type):
71
+ raise TypeError(tv)
72
+
73
+ if isinstance(tv, UniqueTypedValue):
74
+ unique_tv_cls = tv._unique_typed_value_cls # noqa
75
+
76
+ if not override:
77
+ try:
78
+ exu = unique_dct[unique_tv_cls]
79
+ except KeyError:
80
+ pass
81
+ else:
82
+ raise DuplicateUniqueTypedValueError(unique_tv_cls, tv, exu[0])
83
+
84
+ unique_lst = unique_dct.setdefault(unique_tv_cls, [])
85
+ unique_lst.append(tv)
86
+
87
+ tmp_lst.append((unique_tv_cls, tv, unique_lst, len(unique_lst)))
88
+
89
+ elif isinstance(tv, TypedValue):
90
+ tmp_lst.append(tv)
91
+
92
+ else:
93
+ raise TypeError(tv)
94
+
95
+ # The output list with input order preserved and absent of overridden uniques.
96
+ lst: list[TypedValueT] = []
97
+
98
+ # This dict has the expected form: scalar tv's for unique types, and an accumulating list for non-unique types.
99
+ tmp_dct: dict[type, TypedValueT | list[TypedValueT]] = {}
100
+
101
+ for obj in tmp_lst:
102
+ # Unique type
103
+ if isinstance(obj, tuple):
104
+ unique_tv_cls, tv, unique_lst, idx = obj
105
+
106
+ # Last-in-wins
107
+ if idx == len(unique_lst):
108
+ lst.append(tv)
109
+ tmp_dct[unique_tv_cls] = tv
110
+
111
+ else:
112
+ tv = obj
113
+ lst.append(tv)
114
+ tmp_dct.setdefault(type(tv), []).append(tv) # type: ignore[union-attr]
115
+
116
+ # This is the 'canonical' output dict: scalar tv's for unique types keyed by their unique type, and homogenous
117
+ # tuples of tv's keyed by their instance type for non-unique types.
118
+ dct: dict[type, TypedValueT | tuple[TypedValueT, ...]] = {
119
+ k: tuple(v) if isinstance(v, list) else v
120
+ for k, v in tmp_dct.items()
121
+ }
122
+
123
+ # This is the secondary output dict: the contents of previous dict in addition to entries of unique tv's keyed by
124
+ # their instance type. Notably, for unique tv's in which their unique type *is* their instance type (which is
125
+ # perfectly fine) this will squash together duplicate (k, v) pairs, which is also perfectly fine.
126
+ dct2: dict[type, TypedValueT | tuple[TypedValueT, ...]] = {
127
+ **dct,
128
+ **{type(v): v for v in dct.values() if isinstance(v, UniqueTypedValue)},
129
+ }
130
+
131
+ return (tuple(lst), dct, dct2)
132
+
133
+
134
+ ##
135
+
136
+
137
+ try:
138
+ from . import _collection # type: ignore
139
+ except ImportError:
140
+ pass
141
+ else:
142
+ _init_typed_values_collection = _collection.init_typed_values_collection # noqa
143
+
144
+
145
+ ##
146
+
147
+
148
+ @ta.final
28
149
  class TypedValues(
29
150
  TypedValuesAccessor[TypedValueT],
30
151
  lang.Final,
@@ -36,79 +157,55 @@ class TypedValues(
36
157
  override: bool = False,
37
158
  check_type: type | tuple[type, ...] | None = None,
38
159
  ) -> None:
39
- super().__init__()
40
-
41
- if tvs:
42
- tmp: list = []
43
- udct: dict = {}
44
- for tv in tvs:
45
- if check_type is not None:
46
- check.isinstance(tv, check_type)
47
- if isinstance(tv, UniqueTypedValue):
48
- utvc = tv._unique_typed_value_cls # noqa
49
- if not override:
50
- try:
51
- exu = udct[utvc]
52
- except KeyError:
53
- pass
54
- else:
55
- raise DuplicateUniqueTypedValueError(utvc, tv, check.single(exu))
56
- ulst = udct.setdefault(utvc, [])
57
- ulst.append(tv)
58
- tmp.append((utvc, tv, ulst, len(ulst)))
59
- elif isinstance(tv, TypedValue):
60
- tmp.append(tv)
61
- else:
62
- raise TypeError(tv)
63
-
64
- lst: list = []
65
- dct: dict = {}
66
- for obj in tmp:
67
- if isinstance(obj, tuple):
68
- utvc, tv, ulst, idx = obj
69
- if idx == len(ulst):
70
- lst.append(tv)
71
- dct[utvc] = tv
72
- else:
73
- tv = obj
74
- lst.append(tv)
75
- dct.setdefault(type(tv), []).append(tv)
76
-
77
- tup = tuple(lst)
78
- dct = {
79
- k: tuple(v) if isinstance(v, list) else v
80
- for k, v in dct.items()
81
- }
82
- dct2 = {
83
- **dct,
84
- **{type(v): v for v in dct.values() if isinstance(v, UniqueTypedValue)},
85
- }
160
+ self._tup, self._dct, self._dct2 = _init_typed_values_collection(*tvs, override=override, check_type=check_type) # noqa
86
161
 
87
- else:
88
- tup = ()
89
- dct = {}
90
- dct2 = {}
162
+ _tup: tuple[TypedValueT, ...]
91
163
 
92
- self._tup: tuple[TypedValueT, ...] = tup
93
- self._dct: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = dct
94
- self._dct2: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]] = dct2
164
+ # For non unique types, a map from tv instance type to a tuple of instances of that type. For unique tv types, a map
165
+ # from tv unique type to the tv for that unique tv type.
166
+ _dct: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]]
167
+
168
+ # The contents of the previous dict in addition to entries from unique tv's keyed by their instance type.
169
+ _dct2: dict[type[TypedValueT], TypedValueT | tuple[TypedValueT, ...]]
95
170
 
96
171
  #
97
172
 
98
173
  def without(self, *tys: type) -> ta.Iterator[TypedValueT]:
99
174
  for o in self._tup:
100
- if isinstance(o, tys):
175
+ if tys and isinstance(o, tys):
101
176
  continue
102
177
  yield o
103
178
 
104
179
  #
105
180
 
106
- def update(self, *tvs, override: bool = False) -> 'TypedValues':
107
- return TypedValues(*self._tup, *tvs, override=override)
108
-
109
181
  def discard(self, *tys: type) -> 'TypedValues':
182
+ nl = list(self.without(*tys))
183
+
184
+ if len(nl) == len(self._tup):
185
+ return self
186
+
110
187
  return TypedValues(*self.without(*tys))
111
188
 
189
+ def update(
190
+ self,
191
+ *tvs,
192
+ discard: ta.Iterable[type] | None = None,
193
+ override: bool = False,
194
+ ) -> 'TypedValues':
195
+ if not tvs:
196
+ return self
197
+
198
+ n = TypedValues(
199
+ *(self.discard(*discard) if discard else self._tup),
200
+ *tvs,
201
+ override=override,
202
+ )
203
+
204
+ if lang.seqs_identical(self._tup, n._tup):
205
+ return self
206
+
207
+ return n
208
+
112
209
  #
113
210
 
114
211
  def __repr__(self) -> str:
@@ -18,10 +18,11 @@ class TypedValueGeneric(lang.Abstract, ta.Generic[TypedValueT]):
18
18
  def __init_subclass__(cls, **kwargs: ta.Any) -> None:
19
19
  super().__init_subclass__(**kwargs)
20
20
 
21
- if '_typed_value_type' in cls.__dict__:
22
- return
23
-
24
21
  g_mro = rfl.ALIAS_UPDATING_GENERIC_SUBSTITUTION.generic_mro(cls)
25
22
  g_tvg = check.single(gb for gb in g_mro if isinstance(gb, rfl.Generic) and gb.cls is TypedValueGeneric)
26
23
  tvt = check.single(g_tvg.args)
27
- cls._typed_value_type = tvt
24
+
25
+ if '_typed_value_type' not in cls.__dict__:
26
+ cls._typed_value_type = tvt
27
+ else:
28
+ check.equal(tvt, cls._typed_value_type)
@@ -22,6 +22,12 @@ _UNIQUE_BASES: set[type[TypedValue]] = set()
22
22
 
23
23
 
24
24
  class UniqueTypedValue(TypedValue, lang.Abstract):
25
+ """
26
+ Inheritance of this abstract class forms the root / key of a family of mutually exclusive TypedValues.
27
+
28
+ The immediately inheriting class may or not be Abstract or Final.
29
+ """
30
+
25
31
  _unique_typed_value_cls: ta.ClassVar[type[TypedValue]]
26
32
 
27
33
  def __init_subclass__(cls, **kwargs: ta.Any) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev493
3
+ Version: 0.0.0.dev506
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -26,11 +26,11 @@ Requires-Dist: zstandard~=0.25; python_version < "3.14" and extra == "all"
26
26
  Requires-Dist: brotli~=1.2; extra == "all"
27
27
  Requires-Dist: asttokens~=3.0; extra == "all"
28
28
  Requires-Dist: executing~=2.2; extra == "all"
29
- Requires-Dist: psutil~=7.1; extra == "all"
29
+ Requires-Dist: psutil~=7.2; extra == "all"
30
30
  Requires-Dist: orjson~=3.11; extra == "all"
31
31
  Requires-Dist: ujson~=5.11; extra == "all"
32
32
  Requires-Dist: pyyaml~=6.0; extra == "all"
33
- Requires-Dist: cbor2~=5.7; extra == "all"
33
+ Requires-Dist: cbor2~=5.8; extra == "all"
34
34
  Requires-Dist: cloudpickle~=3.1; extra == "all"
35
35
  Requires-Dist: httpx[http2]~=0.28; extra == "all"
36
36
  Requires-Dist: wrapt~=2.0; extra == "all"
@@ -38,6 +38,7 @@ Requires-Dist: cryptography~=46.0; extra == "all"
38
38
  Requires-Dist: sqlalchemy[asyncio]~=2.0; extra == "all"
39
39
  Requires-Dist: pg8000~=1.31; extra == "all"
40
40
  Requires-Dist: pymysql~=1.1; extra == "all"
41
+ Requires-Dist: snowflake-connector-python~=4.2; extra == "all"
41
42
  Requires-Dist: aiomysql~=0.3; extra == "all"
42
43
  Requires-Dist: aiosqlite~=0.22; extra == "all"
43
44
  Requires-Dist: asyncpg~=0.31; extra == "all"
@@ -68,12 +69,12 @@ Requires-Dist: brotli~=1.2; extra == "compress"
68
69
  Provides-Extra: diag
69
70
  Requires-Dist: asttokens~=3.0; extra == "diag"
70
71
  Requires-Dist: executing~=2.2; extra == "diag"
71
- Requires-Dist: psutil~=7.1; extra == "diag"
72
+ Requires-Dist: psutil~=7.2; extra == "diag"
72
73
  Provides-Extra: formats
73
74
  Requires-Dist: orjson~=3.11; extra == "formats"
74
75
  Requires-Dist: ujson~=5.11; extra == "formats"
75
76
  Requires-Dist: pyyaml~=6.0; extra == "formats"
76
- Requires-Dist: cbor2~=5.7; extra == "formats"
77
+ Requires-Dist: cbor2~=5.8; extra == "formats"
77
78
  Requires-Dist: cloudpickle~=3.1; extra == "formats"
78
79
  Provides-Extra: http
79
80
  Requires-Dist: httpx[http2]~=0.28; extra == "http"
@@ -86,6 +87,7 @@ Requires-Dist: sqlalchemy[asyncio]~=2.0; extra == "sqlalchemy"
86
87
  Provides-Extra: sqldrivers
87
88
  Requires-Dist: pg8000~=1.31; extra == "sqldrivers"
88
89
  Requires-Dist: pymysql~=1.1; extra == "sqldrivers"
90
+ Requires-Dist: snowflake-connector-python~=4.2; extra == "sqldrivers"
89
91
  Requires-Dist: aiomysql~=0.3; extra == "sqldrivers"
90
92
  Requires-Dist: aiosqlite~=0.22; extra == "sqldrivers"
91
93
  Requires-Dist: asyncpg~=0.31; extra == "sqldrivers"
@@ -248,8 +250,8 @@ dependencies of any kind**.
248
250
  - **[plugins](https://github.com/wrmsr/omlish/blob/master/omlish/testing/pytest/plugins)** - Various other plugins.
249
251
 
250
252
  - **[typedvalues](https://github.com/wrmsr/omlish/blob/master/omlish/typedvalues)** - A little toolkit around 'boxed'
251
- values, whose 'box' types convey more information than the bare values themselves. A rebellion against kwargs and env
252
- vars: instead of `foo(bar=1, baz=2)`, you do `foo(Bar(1), Baz(2))`.
253
+ values, whose 'box' types convey more information than the bare values themselves. A rebellion against kwargs / env
254
+ vars / giant config objects: instead of `foo(bar=1, baz=2)`, you do `foo(Bar(1), Baz(2))`.
253
255
 
254
256
  - **[lite](https://github.com/wrmsr/omlish/blob/master/omlish/lite)** - The standard library of 'lite' code. This is the
255
257
  only package beneath `lang`, and parts of it are re-exported by it for deduplication. On top of miscellaneous
@@ -1,10 +1,12 @@
1
1
  omlish/.omlish-manifests.json,sha256=DSpBKF_HnebIrj-XaLeXQFnSLqqEG-6HlBpLsdXuNAM,8691
2
- omlish/README.md,sha256=oAuU-_Ic6AoGdrW5McPDgS6wKfbFFx3sq6Uubj-T7j0,14691
3
- omlish/__about__.py,sha256=ZU7LwiONu10_OtuesdAKPnr7LOofnAVf75gDOhNDaoc,3683
2
+ omlish/CODESTYLE.md,sha256=zAOQW65HOmm7_hgJuPx8heKYlpGQVK-gJjOSt30Twkc,26048
3
+ omlish/README.md,sha256=rwaYfDtJibH4ogzDLrt3PXFSazH4gXMF1n3crl4Ynq0,14712
4
+ omlish/__about__.py,sha256=LFrowYzggBOpy-d0kw_-jJ1Wk5avlDMGzchMQUY_K2o,3733
4
5
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
6
+ omlish/_check.cc,sha256=EbX9yB15PcWTmqMAtkCtuTxFw7w1sm9xyO56ZcpYxfM,5183
5
7
  omlish/c3.py,sha256=ZNIMl1kwg3qdei4DiUrJPQe5M81S1e76N-GuNSwLBAE,8683
6
8
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
7
- omlish/check.py,sha256=DDNZnLxNoY2Y7N0Hz7nMR1q912ZzRLoBgOJVLcsXVws,6575
9
+ omlish/check.py,sha256=rDFd96FB1jbymiSK2YCwWtP1X09lCfb8piOMz7ipz2I,6741
8
10
  omlish/datetimes.py,sha256=7dh4aiVRWXWECH3JLF8kkRbgJ1qyGlAlQVp1vCXdTBE,2168
9
11
  omlish/libc.py,sha256=mNY2FWZ2BjSucOx5TEW8IP_B5n84tVZWuVPL3Z3sUH8,15644
10
12
  omlish/metadata.py,sha256=lTh3NYVyjHtLTyAGiZxXJMjZrSPQ1E8zXvnJCgKSESA,4179
@@ -131,7 +133,7 @@ omlish/daemons/services.py,sha256=laoUeJU7eVHuWl1062FBjPSD7jchOjhpYDc5FT2B3dM,34
131
133
  omlish/daemons/spawning.py,sha256=6gdpMPU-HtsZhc1oViOBfmsr-8HKn0ZQHGyQJdO1Fzs,5364
132
134
  omlish/daemons/targets.py,sha256=9nacraBQYPTnTvPwR4B_tdalF4nwFAXZeo4FSVcHoMg,3057
133
135
  omlish/daemons/waiting.py,sha256=fuR51IHdBDRVtfdewcw_0qw8itoXqmtdR_qtkoBChuE,1702
134
- omlish/dataclasses/__init__.py,sha256=o4FsoqpLkVN55CPrANwpufRgfASxIFPACCpEOYWICpo,3677
136
+ omlish/dataclasses/__init__.py,sha256=tsiYEQGvRwi4Kiri-xdY02lI4ElYVc6UoxniOpXUOwY,3742
135
137
  omlish/dataclasses/_internals.py,sha256=_THiziiIslUyYC98Y_tZd5aZgvEF3FAGkDSwzRfcDuo,3247
136
138
  omlish/dataclasses/debug.py,sha256=giBiv6aXvX0IagwNCW64qBzNjfOFr3-VmgDy_KYlb-k,29
137
139
  omlish/dataclasses/errors.py,sha256=QeJVRmrZQer3m66jSDiuAyfAngCBtocMxfnsoSxzOVw,2520
@@ -159,7 +161,7 @@ omlish/dataclasses/impl/concerns/copy.py,sha256=0QoQkNNptD0mJdc4TJlD7lpDUm3kJNOH
159
161
  omlish/dataclasses/impl/concerns/doc.py,sha256=bnc45xWOxJbhgeGGDAVZfV7nxsu3yP2NpFlay2ux7xQ,1732
160
162
  omlish/dataclasses/impl/concerns/eq.py,sha256=PI0KKzJyIziRLgcjl8efjapf8baaRCdcuyGW83bCpEo,1720
161
163
  omlish/dataclasses/impl/concerns/fields.py,sha256=JTO13HKs-swKnM7Qtb6El7FAfdLwxVLqULXAwotjus0,3318
162
- omlish/dataclasses/impl/concerns/frozen.py,sha256=DTYB6aIZEqzYvWd3n6VF4Z40apWVOYKFbiYlTiGzaYE,4511
164
+ omlish/dataclasses/impl/concerns/frozen.py,sha256=mR7eCZrY44PMvdpHH4GPPwJZjjwLzK4VGjHKIgBDrpE,4643
163
165
  omlish/dataclasses/impl/concerns/hash.py,sha256=V5hNuvWG2GMxbhPD1E0nHW6NUR55-AjIy7LvH4gbfXA,4816
164
166
  omlish/dataclasses/impl/concerns/init.py,sha256=8H7LHZfp_6PUUrFyFXy0Gq89x2fcAQO5uo4LOnZ-iIc,14552
165
167
  omlish/dataclasses/impl/concerns/matchargs.py,sha256=AuVpQbUH2GPKEaogEU7HFDoJ7e8sDpwzmiPzBsblwfY,749
@@ -197,7 +199,7 @@ omlish/dataclasses/tools/as_.py,sha256=FLUOtvFf1H3isDQsJcskSVIJeJ3iTtrjug7kp3zbH
197
199
  omlish/dataclasses/tools/iter.py,sha256=JQUFG4Gn-xthhJ3OEqXLOWkq2KhRMuIqvEow0HcFPZg,540
198
200
  omlish/dataclasses/tools/modifiers.py,sha256=Ocai2InDqq7dgY_sMI9m2ugPLE4h4Kp5VLeSmalh8s8,1828
199
201
  omlish/dataclasses/tools/only_.py,sha256=hPpqzr9YW09YmlX_QJNU2aePHYJEIrbGCPwmnvVS_to,849
200
- omlish/dataclasses/tools/replace.py,sha256=izM9lPT6AhEtjqn22auqaofa0j69KO7iootF-2Uj4cY,396
202
+ omlish/dataclasses/tools/replace.py,sha256=eGPdBq2C8H-5W_fOELxQi74WYZVooKipTqbDOdqrhqA,964
201
203
  omlish/dataclasses/tools/repr.py,sha256=KFvF6uv2YYIKq8O3ZNbEAS1tqRQALsJ-SUlBNPd5_GI,190
202
204
  omlish/dataclasses/tools/static.py,sha256=byDnPc0W15s3YPQNC9oyCASKVNxCytrHGLvDky4RGNc,8753
203
205
  omlish/diag/__init__.py,sha256=c1q8vuapGH1YiYdU300FIJXMI1MOcnLNBZXr-zc8BXk,1181
@@ -221,7 +223,7 @@ omlish/diag/replserver/console.py,sha256=pHPcLZfypTM6xTBjsdtlOKpq2Kov3sEnELBu2-9
221
223
  omlish/diag/replserver/server.py,sha256=zTeyaARK22KwaqCOzG8H8Rk009en7gBxOBaJcRB1jbM,5402
222
224
  omlish/dispatch/__init__.py,sha256=OlebxKvMJs2nT36p3xCB4arA3Ln0pnQvfwBaUJ5SdiE,284
223
225
  omlish/dispatch/dispatch.py,sha256=TzWihCt9Zr8wfIwVpKHVOOrYFVKpDXRevxYomtEfqYc,3176
224
- omlish/dispatch/functions.py,sha256=cwNzGIg2ZIalEgn9I03cnJVbMTHjWloyDTaowlO3UPs,1524
226
+ omlish/dispatch/functions.py,sha256=2TVF0fmalmDnfx2wPl9afa1jzy2U9UBZcJAu9M_OpOA,1532
225
227
  omlish/dispatch/impls.py,sha256=3kyLw5yiYXWCN1DiqQbD1czMVrM8v1mpQ8NyD0tUrnk,1870
226
228
  omlish/dispatch/methods.py,sha256=aberuaB1ujTwhTdTyZQ2j4azNVkO54nEc28k5ZQ--J4,7337
227
229
  omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -275,8 +277,8 @@ omlish/formats/json/backends/ujson.py,sha256=U3iOlAURfiCdXbiNlXfIjDdtJDbDaLZsSuZ
275
277
  omlish/formats/json/stream/__init__.py,sha256=YIRCs5ckY_y1v08OwGGtU4nXlo-ByO4IsibTlZZIsAM,1366
276
278
  omlish/formats/json/stream/building.py,sha256=QAQaTyXuw9vkfhvzWIh_DSlypD1-HgzO855Dgz3_wFM,2517
277
279
  omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
278
- omlish/formats/json/stream/lexing.py,sha256=FeO7sjCQ6HHBj7VJIwkSxMPUneG1KqDyN-zuACdE_rw,17384
279
- omlish/formats/json/stream/parsing.py,sha256=bnTaYcCMRh0i_mByQgq4qtVf53zJnmjPvUDwJ7-zL64,7154
280
+ omlish/formats/json/stream/lexing.py,sha256=v9_mlzUzLBnAZxt9gP7f6h35U3VN1AwTvqtWyYLx2SU,17824
281
+ omlish/formats/json/stream/parsing.py,sha256=nAz6jeBEjGxYWgZTw3hjk7CwJXWdzC1FUuwv8gVY4ds,7154
280
282
  omlish/formats/json/stream/rendering.py,sha256=E5SXMGcbBtgtUYYznTPZFHD4tmV_X7K3MK50V11ESRk,3611
281
283
  omlish/formats/json/stream/utils.py,sha256=vX69i90DVCjAAAohpiLgsT3ZinFS_cYUfneTvx-3dxU,4959
282
284
  omlish/formats/json5/__init__.py,sha256=3rwU5w5N_-dYME5kwMvXgexl-Vvo4BAmOg1N-I9Wf0M,194
@@ -359,51 +361,52 @@ omlish/http/flasky/requests.py,sha256=w3eTcfbGv3TUuolncGyDJnWNxZhrztz_OTpiFxoNIk
359
361
  omlish/http/flasky/responses.py,sha256=fXRe6z9al1o4br7YIFUIfXUFUWY3mhVqXj7tLY4NXUM,591
360
362
  omlish/http/flasky/routes.py,sha256=w4YNt9n4sWqs78ktQ5vWAaYZL9vAWxtX4gXL26uFZTs,398
361
363
  omlish/http/flasky/types.py,sha256=Mag-Amc9CT9Lyri3tY0uVRc4U1g-gry6DgUetuhIUqg,159
362
- omlish/inject/__init__.py,sha256=fsAckNs_cPHR3czrwR19UGxsQfykW-OcLzV3JAgUoUg,3392
363
- omlish/inject/_dataclasses.py,sha256=6daj53n09rGVPGxGLPeXongBMKVy5lXRBGxva8AJlno,229014
364
+ omlish/inject/README.md,sha256=kP0ODVGtskDeB0Y2NrJL0Yvote6AstkIIRVzWBhSwGg,10860
365
+ omlish/inject/__init__.py,sha256=4vaQElSU8q7y7aNXldnE9NgsRA6lwNUnu3YGB6Kg6NI,3408
366
+ omlish/inject/_dataclasses.py,sha256=7D0pMPiOxn7a87y2Ll-D1eUiie1xafI1pcHUdSEBOOc,228950
364
367
  omlish/inject/binder.py,sha256=gEA6mxPu4SillKIGnvK0XIFPBUMCWsZRDUugjiFqbwA,4522
365
368
  omlish/inject/bindings.py,sha256=PlvOnUREjvc6F8nOJdzl1k9SAf80icRB4qWFqDop87M,536
366
- omlish/inject/eagers.py,sha256=nRbzKX3XIM6II7ix63iwQquK9gkN6722D3txOVfLKWw,388
367
- omlish/inject/elements.py,sha256=CYlMsRlO0nAF14f8xecPPS1SizRvBa0wt4S2Z13bGhI,2005
369
+ omlish/inject/eagers.py,sha256=DCEzYMfjm5TqXsv4hz7-fos3xpJqeeVtR5TQnfI3uhM,340
370
+ omlish/inject/elements.py,sha256=jDZZEF3eSZuMUFLPvodgZGlDi8DpAsdIEOSw-dQtmGc,2091
368
371
  omlish/inject/errors.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
369
372
  omlish/inject/injector.py,sha256=EN9MP-jGPPFADo-jkgXFKskSHUXkxaDhw7VsXt-u_wY,1832
370
- omlish/inject/inspect.py,sha256=20JPcAVLD_YYhh9eHM9m5aasiJ1ducqxJfiPuIPDFxs,1420
373
+ omlish/inject/inspect.py,sha256=xhH_sNlCfIl7b_ap7I1ho81bHjCPONyGw1TwkIxCqdI,1603
371
374
  omlish/inject/keys.py,sha256=7jnI2cw7cvLlzZAfe5SC50O3oPOpOB6iGZGTigyfQvs,682
372
375
  omlish/inject/listeners.py,sha256=bav7-uzfpajFAmH_snM0PW2oCfMavmhbE6R4-gjOmJ8,620
373
376
  omlish/inject/lite.py,sha256=AFOCj_SznDCPjkiVSKdFXL2hH1q2o4kaDnzkxRWDpsI,2615
374
377
  omlish/inject/maysync.py,sha256=VeKD2Ke-MMAP63qGNrbrEqtr5NDIWaRxkREaGZ-61L8,443
375
- omlish/inject/multis.py,sha256=NNiHConMRmKVqs-FNrSQWIQtXVgTy2cQR59R1p_55kQ,3504
378
+ omlish/inject/multis.py,sha256=j3V-dNvoeV8K4dboj2LLxXzatMSuT3BFFab3j5SoJKc,3376
376
379
  omlish/inject/origins.py,sha256=-qXa18rIIkNwBdTrvASRDjgPYnoY6n6OPC222jJDrXg,551
377
380
  omlish/inject/overrides.py,sha256=3fMHSfX4Xym2NBHP5_vTZTq2Q47SfGhoC5WnTdYOLx0,550
378
381
  omlish/inject/privates.py,sha256=46ODWz3PQh6GyH2Rqd-Y7Ye1WBGr9RjSbZ4U12zAolY,680
379
382
  omlish/inject/providers.py,sha256=OroBtCBvd0YqfdkLsQLGKmL3cbPngUWFfHqQYo4rYGo,1053
380
- omlish/inject/scopes.py,sha256=9atVF24QEn073kvoCw_4yLrkdIEzSAqqI0cSXAg4G1A,2722
383
+ omlish/inject/scopes.py,sha256=-4H0n-VOHEAApzP_EwCFfMZC6K2tuap2hZquIZucMjk,2775
381
384
  omlish/inject/sync.py,sha256=IunlObxI_iiMOex4JvPX-YQsbdxUkU2bdnBai1TkPKY,1008
382
385
  omlish/inject/types.py,sha256=Z-ZEdgtCpHBNrbxxKaMVvfeD7hYXdL4rC7A9_VGxZ6g,256
383
386
  omlish/inject/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
384
387
  omlish/inject/helpers/constfn.py,sha256=Q7yfaGtxEb3L9izvwWSHh8udvR111qOtUYItw6OiyXo,416
385
388
  omlish/inject/helpers/id.py,sha256=F1RYU03q4evteO6O3NDjwHZtPgd7MUK-qwsQAH1X-P0,435
386
- omlish/inject/helpers/late.py,sha256=RDb8MKfHIFTuxbrrdUzjG8iWGV8Tn17W1CtWoc1oY44,1964
387
- omlish/inject/helpers/managed.py,sha256=m0GV5wx9wu654bBquYnqFzllVjLLnGFjfEaVPJe1kzs,3097
389
+ omlish/inject/helpers/late.py,sha256=fOKzLm8qegejiaidLO-WhVDPWzQm2l8S0herOEuNBo0,1983
390
+ omlish/inject/helpers/managed.py,sha256=_dhtrHjoi2zgpGF-MAD_lb2LHs6n8uFtM_ofxeB9COw,3259
388
391
  omlish/inject/helpers/multis.py,sha256=4V85CdxxuYANAEn44IQbXHDYjPbBQ9jLrEP5XpzV2bI,3807
389
392
  omlish/inject/helpers/proxy.py,sha256=S1qNn-5pbsAj9hhasQZ9nnFSCX8SuAYCcBOZ6BtKxlk,1641
390
393
  omlish/inject/helpers/wrappers.py,sha256=f3mulTNuItvmXnn7E4JHk9UESjsf-ponvlDfIpAHbk4,1319
391
394
  omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
395
  omlish/inject/impl/bindings.py,sha256=xSvUcoDz8NH-aNHPwBPEZsFg73K2WcF_A63npVbGt_k,420
393
396
  omlish/inject/impl/elements.py,sha256=-db996vTX_rtTYuCwLoAsO1GcJt38ydfDKgHbs9U1fw,6844
394
- omlish/inject/impl/injector.py,sha256=xsSKayq1r2C0ciX2_M8l_Kp1x2-awPC9nO2zsBLV5Es,8388
395
- omlish/inject/impl/inspect.py,sha256=6emiBEyaVmH2m1U5Zv5VX7-f8Gor0VOQSUEqhlcT6VU,3366
397
+ omlish/inject/impl/injector.py,sha256=LSBz_4E3X7h91xC1tzWcOcX1vba52s0tkcTAk9xTUDE,7654
398
+ omlish/inject/impl/inspect.py,sha256=_vHEmZCOmhp0HxDJ97xg121DdpZISf1ykUimFjDNMYM,3193
396
399
  omlish/inject/impl/maysync.py,sha256=k0fiUF9GG5kQ2nP6nNNwCoqSHzgmiqR6EXiezANO374,1166
397
400
  omlish/inject/impl/multis.py,sha256=5aKXnmSocwqu7y6WicvYX1-QGTz9iHubxRq9j0enlgk,2174
398
- omlish/inject/impl/origins.py,sha256=dgGdkoMN6I4DZrWjlpZYijeFsrF6Up1WPq_QSAgTtuQ,1676
399
- omlish/inject/impl/privates.py,sha256=uxMAl0MOPu-MeLd-q1DySu7J5FcdRVL1B0XgC4dnB6I,2667
400
- omlish/inject/impl/providers.py,sha256=qqPUF9qZZ-CGTTc7ZPskjexM2aK8xdY0gLPMshB5VKw,2127
401
+ omlish/inject/impl/origins.py,sha256=-aRnCJCg4cnMkGZw0Nm5ZCsM5SUZIU6TFTtINz-i3hI,1725
402
+ omlish/inject/impl/privates.py,sha256=RBO9bxxJTFKmotoF-mzlIembX7OIS_d7znYff5j_TsY,2634
403
+ omlish/inject/impl/providers.py,sha256=b5pTAWKVOkDMPqMrqXVK7UgMCDtFU1KzMdLYChbmoXI,2096
401
404
  omlish/inject/impl/providersmap.py,sha256=NOIbX_sTAL8uXf-lMoOiFTFZQMe6ywLU7nIghgF_ISw,1326
402
- omlish/inject/impl/scopes.py,sha256=sqtjHe6g0pAEOHqIARXGiIE9mKmGmlqh1FDpskV4TIw,5923
405
+ omlish/inject/impl/scopes.py,sha256=PE96T1Hs-9eh604lrjwzMONOWu4VPgv0adC8S02RH9c,5852
403
406
  omlish/inject/impl/sync.py,sha256=_aLaC-uVNHOePcfE1as61Ni7fuyHZpjEafIWBc7FvC0,1049
404
407
  omlish/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
405
408
  omlish/io/abc.py,sha256=M40QB2udYpCEqmlxCcHv6FlJYJY6ymmJQBlaklYv0U8,1256
406
- omlish/io/buffers.py,sha256=eeDSG0mhwx1IAYPu3pSe-ce3LG5WpQz924OsRyLu0mI,10935
409
+ omlish/io/buffers.py,sha256=_5otZwC3Uby-JtMeG-wv_jIUzglXJZhamcmvSuT7dWU,11645
407
410
  omlish/io/fileno.py,sha256=_W3qxkIKpnabn1_7kgmKdx0IsPF3R334xWnF_TtkEj4,185
408
411
  omlish/io/pyio.py,sha256=xmHTV-sn7QZThWCVBo6lTM7dhgsQn7m2L0DqRwdF2-8,94509
409
412
  omlish/io/readers.py,sha256=w67uZQbWzed4Ton2kyA_WRrRz-IRXmFip8EJtpAxLYU,583
@@ -436,7 +439,7 @@ omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,4
436
439
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
437
440
  omlish/iterators/transforms.py,sha256=gy7f6PoPwyy1aLEA0u1bpe8E3S08c7O5KF8SkWG7pbc,3572
438
441
  omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
439
- omlish/lang/__init__.py,sha256=KMDK-m5hncjE2qNl5BrKhyDS2we6UAgUi2kufDl-3gk,10958
442
+ omlish/lang/__init__.py,sha256=oq1LZiePLa4vh1fCFLZnqlFhkCNX_jcK4rybfn_WafA,11110
440
443
  omlish/lang/_asyncs.cc,sha256=ko_d9pv6C0MfEL-HfvJz2R6uaz_OEFLpInwtY-NGTf4,4062
441
444
  omlish/lang/asyncs.py,sha256=EGVZ3pJ-4onvVfslcRBCa40J-M_lUPT55s5YSCE8GDs,2176
442
445
  omlish/lang/attrstorage.py,sha256=UUnoENCMQF3twBfxBcIKa5mpXsAxWnNYDayhU8xgmpU,5224
@@ -451,18 +454,18 @@ omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
451
454
  omlish/lang/errors.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
452
455
  omlish/lang/functions.py,sha256=B2Gc6TkgZcR6LhQJOCB2Wc025crQ9FmJoRlealx-Pl4,5927
453
456
  omlish/lang/generators.py,sha256=nJiSmDpsfPiypGzJ8qlOO7-BUnCsrAeDow9mhtGgBio,5196
454
- omlish/lang/iterables.py,sha256=o_s8ouaJrdUqEVl2_bzJk5CVdabmrywXY0gPn7xss3w,3371
457
+ omlish/lang/iterables.py,sha256=P_ahcMKKRGvrvSP62WDeSJ1bfT8KCquvv9sNUEwkuAQ,3491
455
458
  omlish/lang/lazyglobals.py,sha256=5v4S0YSUrxdZFC6znrWolfeheArMa_DEJEcz46XCQN4,2676
456
459
  omlish/lang/maybes.py,sha256=8GUpqJvyx9y5PQBQBBx6yTSE5WKsMbXMHPt4_vojKUw,209
457
460
  omlish/lang/maysync.py,sha256=S2Q_rGC4AxRa1UsGJdSzZsYpgOcX9Y8ZmYGA9v8OWn8,1635
458
- omlish/lang/objects.py,sha256=JMOZU5I6sK4rJm04898dOJkvef-lDIh5O3k6tlLbBJw,4616
459
- omlish/lang/outcomes.py,sha256=rCyjWjElNheJ-sQhauxfERT98IZ0mrUoaSI9nMpJZTg,8751
461
+ omlish/lang/objects.py,sha256=Kd8cF6Y54rdbToHuasP3Isr3cc-aq7JLFdI-4wixvQo,4906
462
+ omlish/lang/outcomes.py,sha256=vtndJbY_CgOwrVh4VyCBMWqDUAppPfSUXdy1HbW6Ibc,8752
460
463
  omlish/lang/overrides.py,sha256=IBzK6ljfLX6TLgIyKTSjhqTLcuKRkQNVtEOnBLS4nuA,2095
461
464
  omlish/lang/params.py,sha256=LKr-9ykn-SyF1Af2KSH-qKKnTU_U6dybTg4pmBzAvz0,7077
462
- omlish/lang/recursion.py,sha256=tfCCe4poGcyV56Wj7j9NBjm7akp828mBZegJpm-i9SU,1899
465
+ omlish/lang/recursion.py,sha256=Z8tXhVB584zJQlDa979iQAjIbTrLctFVIexSVWATYks,1875
463
466
  omlish/lang/resolving.py,sha256=nMosn-rcYjI8t6b35oICDyPw6t6-HvWj5jMdkfn1jfA,1612
464
467
  omlish/lang/resources.py,sha256=awfh33Uxkd9Ho-5Z3d9CPWQE3gjktV0XWM6XbdG0ejA,2845
465
- omlish/lang/sequences.py,sha256=OJ5hdgjvgzOgsb0Bg8vGrwPyef4gkRPp-Bz21sc9_iE,3185
468
+ omlish/lang/sequences.py,sha256=fM1BARYjahRMVmSITXogZkwv1LfkvX8IQCHURvb9_uA,3827
466
469
  omlish/lang/strings.py,sha256=TY-v0iGu6BxEKb99YS-VmIJqc-sTAqMv7mCDJQALMnI,4550
467
470
  omlish/lang/sys.py,sha256=KPe1UOXk1VxlOYt_aLmhN0KqsA4wnP-4nm4WEwO49pw,411
468
471
  omlish/lang/typing.py,sha256=ZN4t8oGSSknf_T1HbfqVQ7Y9OOZ1RkikYihNxdBlTFQ,3733
@@ -475,7 +478,7 @@ omlish/lang/classes/bindable.py,sha256=rlahXmbn5YJFG_xorfZF7627KGO4gaPX5ZsR38lCD
475
478
  omlish/lang/classes/namespaces.py,sha256=RVecCT38W5h6rjf5fYBLvomyDwwFqPRWjhs40gaLHPE,3933
476
479
  omlish/lang/classes/protocols.py,sha256=T98ZsHLgzw8hPvvNluxoreevoF8fD4zs8SwcnTXkLuY,701
477
480
  omlish/lang/classes/restrict.py,sha256=xHLIK20MQ_jJPQ7JVzMNhyN4Xc4eLBgrcxqDnTbeKBI,4480
478
- omlish/lang/classes/simple.py,sha256=3AJSs-plVg2flq4SC6I39LxP0nBaB241puv3D5YCP5I,2973
481
+ omlish/lang/classes/simple.py,sha256=0YilyXrtnWFb9teAqJrVqkW3i03GdDKa26YkuxeO5R4,3037
479
482
  omlish/lang/classes/virtual.py,sha256=J4y-uiv1RaP2rfFeptXqQ1a4MRek0TMlAFFraO_lzhs,3397
480
483
  omlish/lang/imports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
481
484
  omlish/lang/imports/_capture.cc,sha256=78JQ1HvGo7P4AXk9k12ZxiDRTocEf3I2cJAv5b2si90,2295
@@ -487,11 +490,11 @@ omlish/lang/imports/resolving.py,sha256=DeRarn35Fryg5JhVhy8wbiC9lvr58AnllI9B_res
487
490
  omlish/lang/imports/traversal.py,sha256=pbFQIa880NGjSfcLsno2vE_G41_CLwDHb-7gWg2J3BI,2855
488
491
  omlish/lifecycles/README.md,sha256=I-b1RM3GcVDHldDsd_7TJa6GBXbFzE4yXdayCnWVHiY,2418
489
492
  omlish/lifecycles/__init__.py,sha256=UGyPmBCGciuKamlBRrnGQ7OT6w0ftSF3oavZeqDHKY8,2299
490
- omlish/lifecycles/_dataclasses.py,sha256=7xOERs2uCy4tMAmIP4aQZDn57zD7AMv5Q8aSAqj9efo,64916
493
+ omlish/lifecycles/_dataclasses.py,sha256=Gm-2PHlC-YFPnu-pWlhELigMb-qe0lBjqdje1PpnXF8,64898
491
494
  omlish/lifecycles/base.py,sha256=su26DkMDaQDazNffpFH3aM1KCPIF2nE6Fa9jWqC-mmU,6013
492
495
  omlish/lifecycles/contextmanagers.py,sha256=8exOCkFIrq6x71hzRoLB7RDtiLz8Gimu3uDSEyEtkdQ,4999
493
496
  omlish/lifecycles/controller.py,sha256=v3xhrxLSjl9PbE7JcgvotNg5gt07wuLsv5j0tuiwOiI,6719
494
- omlish/lifecycles/injection.py,sha256=h-8Tcgk21TudKoYwJVdHgrpMozgoNsE7SjM71-hm7Ig,4166
497
+ omlish/lifecycles/injection.py,sha256=hBKJIxO771LWN0RbJoAftb9JPYB_sT-rJNpswZaSZb4,4224
495
498
  omlish/lifecycles/listeners.py,sha256=5LCwR2-NV75RuIf0IZc398vqH0rsaDaAWiFtyynGOYo,1418
496
499
  omlish/lifecycles/managed.py,sha256=cHro1PMzWzFGYcd4lxE76YxsYabfaryPUcdHktCBpvg,3690
497
500
  omlish/lifecycles/manager.py,sha256=yv3GHXbKYjlGQIxiKw4NoiyMjZVuELXKWphIuGMaylw,8787
@@ -512,7 +515,7 @@ omlish/lite/imports.py,sha256=GyEDKL-WuHtdOKIL-cc8aFd0-bHwZFDEjAB52ItabX0,1341
512
515
  omlish/lite/inject.py,sha256=BQgjBj2mzJgMimLam-loSpQzcb31-8NYPVRQgHVv3cQ,29159
513
516
  omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
514
517
  omlish/lite/marshal.py,sha256=oVqVwqTArFUj9lYhmKg_MVgnqlCAUvOnYgtU3bBu_bk,23020
515
- omlish/lite/maybes.py,sha256=NCnMZaSbIfvOMqz69aYmmvZQDd0c61QjG3ju7uJc8t8,4531
518
+ omlish/lite/maybes.py,sha256=b8G1QRUpBoDiLCbJro1uXxoeOT5NWQc1Ox_09I_OTOk,4681
516
519
  omlish/lite/maysync.py,sha256=Otd-xqWaMzY9xBF5SiLKxu4kG_GaWGk8qTGFDAHXDm4,14803
517
520
  omlish/lite/objects.py,sha256=HzN_4J6w6WDLKDrW8jSNUKgfAR5vUsB42rtSCu04oqQ,1921
518
521
  omlish/lite/pycharm.py,sha256=fdSTwtdqGRL0P9IkCrDAPqQkJsegq1NfYyVG2N6cy4w,1174
@@ -524,13 +527,14 @@ omlish/lite/strings.py,sha256=rapGrc2BrIDstAEJov3pG_30PimOIR7IFVYioyTi-MM,1831
524
527
  omlish/lite/timeouts.py,sha256=OLU9iju2pkk3niM20aPnmA6AqabFmW8zeLDu6WsuaxA,5008
525
528
  omlish/lite/timing.py,sha256=KTlEa5PyT6BXf8AwGVWUNtoVgRx9zwSUrBQnkpygK78,262
526
529
  omlish/lite/types.py,sha256=QM9whf55r7TmmQBRApIWSlyVKsl1p_jcut_YheyZMFY,146
527
- omlish/lite/typing.py,sha256=bumqLiwd4EyxKApuVOxmVthDEvV59ktt2oh0jtmR4-U,1923
530
+ omlish/lite/typing.py,sha256=Z24L5x4RiS60RcHTMPCLl2U8Bzvv1mJ2AvpIrIiGfE0,2292
528
531
  omlish/lite/wrappers.py,sha256=d00Ls2kFHuogKd5wEBaU65VNCN10YXIZtiwu1mbMpmA,530
529
532
  omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
530
533
  omlish/logs/_amalg.py,sha256=9aaOU324p9ZhjfP-wdmbjbKYbjVgxucrJPYfM1oHxuo,208
531
- omlish/logs/all.py,sha256=UHajvzVCoPjfXCNfe4ShTsDA24m4e80b4z5f6tIGV2k,2022
534
+ omlish/logs/all.py,sha256=2GnWnLUcwsOhMaGzgFyDU__--blvXaWheDfTf8hxloY,2225
532
535
  omlish/logs/asyncs.py,sha256=uwgt68z-hZQvSqMhjBsNRoFefMOG_-PatfNTJEvXJ8s,2189
533
- omlish/logs/base.py,sha256=s3BkKfvj6Ssh8qxIMhT4W5Oc7nYjWeLKW0LWTC0JNvs,7340
536
+ omlish/logs/base.py,sha256=WnSHe5zdjrcBZIUmuYhnkORRKawlCLz2VLXYZGfzvRY,7301
537
+ omlish/logs/bisync.py,sha256=JEkI6m6b6y3ZKfUjBktgAv5YrXI74NgFsmMyvXWUt9o,2291
534
538
  omlish/logs/contexts.py,sha256=dhwBjSrxcVpXng2pGI1IEs-kJTnS4bndmlviZTkGXTk,4956
535
539
  omlish/logs/formatters.py,sha256=g8oGfP_ok0nrW9opIIh5LqcQTmdufWFGO-9pRKX4m3Q,242
536
540
  omlish/logs/infos.py,sha256=Nr2SbyI978vP5BTiVZsXUBdy2k0CUiwggcW-wewJHmo,11560
@@ -563,7 +567,7 @@ omlish/manifests/loading.py,sha256=WtlWb0rwtHLPEukY28Lva3b6_BQup8cUpyplUsKSWQY,1
563
567
  omlish/manifests/static.py,sha256=9BaPBLkuzxHmg5A-5k9BjjBFINCdmFOIu06dMFgCfz4,497
564
568
  omlish/manifests/types.py,sha256=NeOGuIVrcbqjCDbQ3MnCxxHAgHnw0CkWJsBzo230PWE,453
565
569
  omlish/marshal/__init__.py,sha256=zmNQNAla57SbwjW7iz74nmEIvrnx8Dp6k5qvqwCeAHM,6548
566
- omlish/marshal/_dataclasses.py,sha256=W0tSNV00k2yiNPM-wxlSDC3eS1iRj8QdjOp6ejkKFkM,134092
570
+ omlish/marshal/_dataclasses.py,sha256=tLkOMblamOWHHK_ecFziFRxoNaz9n12pcSwb9x3aXpE,134060
567
571
  omlish/marshal/globals.py,sha256=Q6G18hcUwUDDNnpyRPnR5Tn_XZpZCSIEXo09nYSOaNU,2236
568
572
  omlish/marshal/naming.py,sha256=Mk5YrbES836_KflNNRoc5Ajd96iMYLQIMERKx1KpT4g,865
569
573
  omlish/marshal/standard.py,sha256=8Qy5L3qMHO-V_fu78tM62wMcGpF0kgrFrxn06IRbFXQ,6906
@@ -690,7 +694,7 @@ omlish/specs/__init__.py,sha256=fxpcfXEWESH2kiPStKhl2dAdfLkZVTt_cssZKyqBLiQ,87
690
694
  omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
691
695
  omlish/specs/jmespath/__init__.py,sha256=aKDqajwWrB-FJFsGkPxDkXzJPeebk4rz_g4JYQnCn4g,2268
692
696
  omlish/specs/jmespath/__main__.py,sha256=AkowPx7ASpK0E4EMq0MiwVarLDB7alConH-2mBOGYIA,194
693
- omlish/specs/jmespath/_dataclasses.py,sha256=jCeJOJiq43Ko9JqyoSXyz90LucvMByPu0RRPLTwSMzs,130085
697
+ omlish/specs/jmespath/_dataclasses.py,sha256=Lwjf6wbtU02WomuWzkJd4OH2JIPRlrESoTLrCpIRwrc,130047
694
698
  omlish/specs/jmespath/ast.py,sha256=PmUJYWlxTzOooSvzgjbFxus5SXATHPxNqvCgRzOlqv8,5657
695
699
  omlish/specs/jmespath/cli.py,sha256=oQ8u8sKM9kysB2rGChXrCl7RgsUgo6MNrWtzdLz4eIA,2147
696
700
  omlish/specs/jmespath/errors.py,sha256=mJ8z6Q5XmQgZ_rZBAF42ahqqVXvsGqw8rwG0wJorLmk,4444
@@ -708,7 +712,7 @@ omlish/specs/jsonschema/__init__.py,sha256=12JNHdvV-LN0d0Ir80Ch8msVb4JqGSjB0wLSw
708
712
  omlish/specs/jsonschema/_marshal.py,sha256=LTIMWdBkBQ_1gdVwTszfPu9wIrPYbdG2MGts1bbLFqM,872
709
713
  omlish/specs/jsonschema/types.py,sha256=_H7ma99hD3_Xu42BFGHOXRI5p79tY8WBX8QE36k7lbw,472
710
714
  omlish/specs/jsonschema/keywords/__init__.py,sha256=RRhYsfitdBmiGGCWOPIJ3K-XE7zOufVMNZrowCRAPXw,99
711
- omlish/specs/jsonschema/keywords/_dataclasses.py,sha256=M1p3GRcv4xHO4HaBd2Myva3BKF3l6l6KaJnuM9c-AwI,71113
715
+ omlish/specs/jsonschema/keywords/_dataclasses.py,sha256=RG_XWtXO-GEbe1PYaUZdWFH_sry69lnY-t8EGSPewME,71089
712
716
  omlish/specs/jsonschema/keywords/base.py,sha256=_O_VZySO5j5vnEiQWojk3zwaj7OQowT0e6bk3UYDTeM,3011
713
717
  omlish/specs/jsonschema/keywords/core.py,sha256=3Pbi8d-eocEAxEdemNa0ldp5lrLWNmH0Tye-5rglUoU,535
714
718
  omlish/specs/jsonschema/keywords/format.py,sha256=9trrxHe38FDx47I8UfvO4PD_IygRlkEyTUJ3XlxDM6Y,244
@@ -872,18 +876,19 @@ omlish/text/docwrap/wrapping.py,sha256=VyECcYTpjPz7SidT8PJi7mLTg4bGLzaME1H3G5Ub0
872
876
  omlish/text/go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
873
877
  omlish/text/go/quoting.py,sha256=zbcPEDWsdj7GAemtu0x8nwMqpIu2C_5iInSwn6mMWlE,9142
874
878
  omlish/typedvalues/__init__.py,sha256=dQpM8VaON8S7dUv1LBwhyBDjUVo7EW475a9DpnDQz1E,936
879
+ omlish/typedvalues/_collection.cc,sha256=-SIMnZ6vxe20m0A8mw913t_v5dXS2YgY_bGBN0umHTg,15680
875
880
  omlish/typedvalues/accessor.py,sha256=2PQVoFrrCTOcZACAQ28GOvF9xhKyKz27GMSfS0xq5Pc,3184
876
- omlish/typedvalues/collection.py,sha256=CK4Vk9kJqAt2V8o6I4zGyv2u9DKov12uSvsGdqEd2Ws,5793
881
+ omlish/typedvalues/collection.py,sha256=ZWnkkizqjwtYpitcmgS_YoYnasWQBAsrF_lpm70A6ME,8869
877
882
  omlish/typedvalues/consumer.py,sha256=lDOE-O_sgGbOvbcBg2g5ZRaV2WixnuEYxFsJBaj18oU,4690
878
- omlish/typedvalues/generic.py,sha256=ft-x4X3k1oFirtYnDfsvrI3ZQikWM8lGLrvrOEbcGq0,742
883
+ omlish/typedvalues/generic.py,sha256=yptcqJ01WMNeOskrFrxQPBLynA3vJUQP0c7e0FIfZY4,797
879
884
  omlish/typedvalues/holder.py,sha256=vu-umn-h1nvUqmtV5T9ZfQ_OoOYsERu8PhI2N48Ryns,1133
880
885
  omlish/typedvalues/marshal.py,sha256=2xqX6JllhtGpmeYkU7C-qzgU__0x-vd6CzYbAsocQlc,6058
881
886
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
882
887
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
883
- omlish/typedvalues/values.py,sha256=OnFGb2YvAZa0pb7X31MZiWmBCwctK47yVIq9FDD81As,1426
884
- omlish-0.0.0.dev493.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
885
- omlish-0.0.0.dev493.dist-info/METADATA,sha256=tmjjvmQ50Ks6symagV6dixT8ZqA5q8zvwxNMgr3SICs,19263
886
- omlish-0.0.0.dev493.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
887
- omlish-0.0.0.dev493.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
888
- omlish-0.0.0.dev493.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
889
- omlish-0.0.0.dev493.dist-info/RECORD,,
888
+ omlish/typedvalues/values.py,sha256=t_CmF-B48CsKT_qFmraR8GHxtiIKG1VFKvSbBRkH3LE,1621
889
+ omlish-0.0.0.dev506.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
890
+ omlish-0.0.0.dev506.dist-info/METADATA,sha256=VKyf4rk9j31zgGazqPQosJ8kFDI_flJClxz6v10RU3M,19417
891
+ omlish-0.0.0.dev506.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
892
+ omlish-0.0.0.dev506.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
893
+ omlish-0.0.0.dev506.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
894
+ omlish-0.0.0.dev506.dist-info/RECORD,,