omlish 0.0.0.dev392__py3-none-any.whl → 0.0.0.dev394__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.dev392'
2
- __revision__ = 'b709bee1bc3c60ff875c432a230426a0eb51269f'
1
+ __version__ = '0.0.0.dev394'
2
+ __revision__ = 'b3c8aa9fb0aa4cb4683cea8843b22615547cbf03'
3
3
 
4
4
 
5
5
  #
omlish/codecs/base.py CHANGED
@@ -70,7 +70,7 @@ def check_codec_name(s: str) -> str:
70
70
  @dc.dataclass(frozen=True, kw_only=True)
71
71
  class Codec:
72
72
  name: str = dc.xfield(coerce=check_codec_name)
73
- aliases: ta.Collection[str] | None = dc.xfield(
73
+ aliases: ta.Sequence[str] | None = dc.xfield(
74
74
  default=None,
75
75
  coerce=lang.opt_fn(lambda s: [check_codec_name(a) for a in s]),
76
76
  )
@@ -90,7 +90,7 @@ class Codec:
90
90
  @dc.dataclass(frozen=True, kw_only=True)
91
91
  class LazyLoadedCodec(ModAttrManifest):
92
92
  name: str
93
- aliases: ta.Collection[str] | None = None
93
+ aliases: ta.Sequence[str] | None = None
94
94
 
95
95
  @classmethod
96
96
  def new(
omlish/codecs/bytes.py CHANGED
@@ -21,7 +21,7 @@ class BytesCodec(Codec):
21
21
 
22
22
  def make_bytes_encoding_codec(
23
23
  name: str,
24
- aliases: ta.Collection[str] | None,
24
+ aliases: ta.Sequence[str] | None,
25
25
  encode: ta.Callable[[bytes], bytes],
26
26
  decode: ta.Callable[[bytes], bytes],
27
27
  *,
omlish/codecs/registry.py CHANGED
@@ -11,9 +11,9 @@ from .standard import STANDARD_CODECS
11
11
 
12
12
 
13
13
  if ta.TYPE_CHECKING:
14
- from ..manifests import load as manifest_load
14
+ from ..manifests import globals as manifest_globals
15
15
  else:
16
- manifest_load = lang.proxy_import('..manifests.load', __package__)
16
+ manifest_globals = lang.proxy_import('..manifests.globals', __package__)
17
17
 
18
18
 
19
19
  ##
@@ -102,7 +102,7 @@ def _install_standard_codecs(registry: CodecRegistry) -> None:
102
102
 
103
103
  @cached.function
104
104
  def _build_manifest_lazy_loaded_codecs() -> ta.Sequence[LazyLoadedCodec]:
105
- ldr = manifest_load.MANIFEST_LOADER
105
+ ldr = manifest_globals.MANIFEST_LOADER
106
106
  pkgs = {__package__.split('.')[0], *ldr.discover_pkgs()}
107
107
  mns = ldr.load(*pkgs, only=[LazyLoadedCodec])
108
108
  return [m.value for m in mns]
omlish/codecs/text.py CHANGED
@@ -126,7 +126,7 @@ def normalize_text_encoding_name(s: str) -> str:
126
126
 
127
127
  def make_text_encoding_codec(
128
128
  name: str,
129
- aliases: ta.Collection[str] | None = None,
129
+ aliases: ta.Sequence[str] | None = None,
130
130
  *,
131
131
  append_to: ta.MutableSequence[Codec] | None = None,
132
132
  ) -> TextEncodingCodec:
@@ -2,6 +2,13 @@ import dataclasses as dc
2
2
  import typing as ta
3
3
 
4
4
  from ... import check
5
+ from ... import lang
6
+
7
+
8
+ if ta.TYPE_CHECKING:
9
+ from ..metaclass import meta
10
+ else:
11
+ meta = lang.proxy_import('..metaclass.meta', __package__)
5
12
 
6
13
 
7
14
  T = ta.TypeVar('T')
@@ -30,6 +37,9 @@ def update_fields(
30
37
  fields: ta.Iterable[str] | None = None,
31
38
  ) -> ta.Callable[[type[T]], type[T]]:
32
39
  def inner(cls):
40
+ if issubclass(cls, meta.DataMeta):
41
+ raise TypeError('update_fields() cannot be used on DataMeta subclasses')
42
+
33
43
  if fields is None:
34
44
  for a, v in list(cls.__dict__.items()):
35
45
  if isinstance(v, dc.Field):
omlish/formats/codecs.py CHANGED
@@ -22,7 +22,7 @@ def make_object_codec(
22
22
  *,
23
23
  input: rfl.Type, # noqa
24
24
  output: rfl.Type = rfl.type_(ta.Any),
25
- aliases: ta.Collection[str] | None = None,
25
+ aliases: ta.Sequence[str] | None = None,
26
26
  ) -> ObjectCodecT:
27
27
  return cls(
28
28
  name=name,
@@ -46,7 +46,7 @@ def make_compression_codec(
46
46
  name: str,
47
47
  cls: type[Compression],
48
48
  *,
49
- aliases: ta.Collection[str] | None = None,
49
+ aliases: ta.Sequence[str] | None = None,
50
50
  ) -> CompressionCodec:
51
51
  return CompressionCodec(
52
52
  name=name,
omlish/lang/__init__.py CHANGED
@@ -254,6 +254,8 @@ from .maysyncs import ( # noqa
254
254
  MaysyncP,
255
255
 
256
256
  make_maysync,
257
+ make_maysync_from_sync,
258
+
257
259
  maysync,
258
260
  )
259
261
 
omlish/lang/maysyncs.py CHANGED
@@ -16,6 +16,16 @@ MaysyncP: ta.TypeAlias = ta.Callable[P, Maywaitable[T]]
16
16
 
17
17
 
18
18
  def make_maysync(
19
+ s: ta.Callable[P, T],
20
+ a: ta.Callable[P, ta.Awaitable[T]],
21
+ ) -> MaysyncP[P, T]:
22
+ return ta.cast('MaysyncP[P, T]', _make_maysync(
23
+ s,
24
+ a,
25
+ ))
26
+
27
+
28
+ def make_maysync_from_sync(
19
29
  s: ta.Callable[P, T],
20
30
  a: ta.Callable[P, ta.Awaitable[T]] | None = None,
21
31
  ) -> MaysyncP[P, T]:
@@ -25,6 +35,9 @@ def make_maysync(
25
35
  ))
26
36
 
27
37
 
38
+ ##
39
+
40
+
28
41
  def maysync(m: ta.Callable[P, ta.Awaitable[T]]) -> MaysyncP[P, T]:
29
42
  return ta.cast('MaysyncP[P, T]', _maysync(
30
43
  m,
omlish/lite/maysyncs.py CHANGED
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP045
1
+ # ruff: noqa: UP006 UP045
2
2
  # @omlish-lite
3
3
  """
4
4
  TODO:
@@ -34,8 +34,22 @@ class Maywaitable(ta.Protocol[T_co]):
34
34
  Maysync = ta.Callable[..., Maywaitable[T]] # ta.TypeAlias # omlish-amalg-typing-no-move
35
35
 
36
36
 
37
- class Maysync_(abc.ABC): # noqa
38
- pass
37
+ class Maysync_(abc.ABC, ta.Generic[T]): # noqa
38
+ @ta.final
39
+ def cast(self) -> Maysync[T]:
40
+ return ta.cast('Maysync[T]', self)
41
+
42
+ class FnPair(ta.NamedTuple):
43
+ s: ta.Callable[..., ta.Any]
44
+ a: ta.Callable[..., ta.Awaitable[ta.Any]]
45
+
46
+ @abc.abstractmethod
47
+ def fn_pair(self) -> ta.Optional[FnPair]:
48
+ raise NotImplementedError
49
+
50
+ @abc.abstractmethod
51
+ def __call__(self, *args, **kwargs): # -> Maywaitable[T]
52
+ raise NotImplementedError
39
53
 
40
54
 
41
55
  ##
@@ -49,16 +63,19 @@ class _Maywaitable(abc.ABC, ta.Generic[_MaysyncX, T]):
49
63
  *args: ta.Any,
50
64
  **kwargs: ta.Any,
51
65
  ) -> None:
52
- self.x = x
53
- self.args = args
54
- self.kwargs = kwargs
66
+ self._x = x
67
+ self._args = args
68
+ self._kwargs = kwargs
69
+
70
+ def __repr__(self) -> str:
71
+ return f'{self.__class__.__name__}@{id(self):x}({self._x!r})'
55
72
 
56
73
  @ta.final
57
74
  def m(self) -> ta.Awaitable[T]:
58
75
  return _MaysyncFuture(_MaysyncOp(
59
- ta.cast(ta.Any, self.x),
60
- *self.args,
61
- **self.kwargs,
76
+ ta.cast(ta.Any, self._x),
77
+ self._args,
78
+ self._kwargs,
62
79
  ))
63
80
 
64
81
 
@@ -76,13 +93,22 @@ class _FnMaysync(Maysync_, ta.Generic[T]):
76
93
  raise TypeError(s)
77
94
  if a is None:
78
95
  raise TypeError(a)
79
- self.s = s
80
- self.a = a
96
+ self._s = s
97
+ self._a = a
98
+
99
+ def __repr__(self) -> str:
100
+ return f'{self.__class__.__name__}@{id(self):x}({self._s!r}, {self._a!r})'
101
+
102
+ def fn_pair(self) -> ta.Optional[Maysync_.FnPair]:
103
+ return Maysync_.FnPair(
104
+ self._s,
105
+ self._a,
106
+ )
81
107
 
82
108
  def __get__(self, instance, owner=None):
83
109
  return _FnMaysync(
84
- self.s.__get__(instance, owner), # noqa
85
- self.a.__get__(instance, owner), # noqa
110
+ self._s.__get__(instance, owner), # noqa
111
+ self._a.__get__(instance, owner), # noqa
86
112
  )
87
113
 
88
114
  def __call__(self, *args, **kwargs):
@@ -92,10 +118,10 @@ class _FnMaysync(Maysync_, ta.Generic[T]):
92
118
  @ta.final
93
119
  class _FnMaywaitable(_Maywaitable[_FnMaysync[T], T]):
94
120
  def s(self) -> T:
95
- return self.x.s(*self.args, **self.kwargs)
121
+ return self._x._s(*self._args, **self._kwargs) # noqa
96
122
 
97
123
  async def a(self) -> T:
98
- return await self.x.a(*self.args, **self.kwargs)
124
+ return await self._x._a(*self._args, **self._kwargs) # noqa
99
125
 
100
126
 
101
127
  def make_maysync(
@@ -114,13 +140,19 @@ class _MgMaysync(Maysync_, ta.Generic[T]):
114
140
  self,
115
141
  mg: ta.Callable[..., _MaysyncGen[T]],
116
142
  ) -> None:
117
- self.mg = mg
143
+ self._mg = mg
118
144
 
119
145
  functools.update_wrapper(self, mg, updated=())
120
146
 
147
+ def __repr__(self) -> str:
148
+ return f'{self.__class__.__name__}@{id(self):x}({self._mg!r})'
149
+
150
+ def fn_pair(self) -> ta.Optional[Maysync_.FnPair]:
151
+ return None
152
+
121
153
  def __get__(self, instance, owner=None):
122
154
  return _MgMaysync(
123
- self.mg.__get__(instance, owner), # noqa
155
+ self._mg.__get__(instance, owner), # noqa
124
156
  )
125
157
 
126
158
  def __call__(self, *args, **kwargs):
@@ -130,7 +162,7 @@ class _MgMaysync(Maysync_, ta.Generic[T]):
130
162
  @ta.final
131
163
  class _MgMaywaitable(_Maywaitable[_MgMaysync[T], T]):
132
164
  def s(self) -> T:
133
- g = self.x.mg(*self.args, **self.kwargs)
165
+ g = self._x._mg(*self._args, **self._kwargs) # noqa
134
166
 
135
167
  i: ta.Any = None
136
168
  e: ta.Any = None
@@ -158,7 +190,7 @@ class _MgMaywaitable(_Maywaitable[_MgMaysync[T], T]):
158
190
  del o
159
191
 
160
192
  async def a(self) -> T:
161
- g = self.x.mg(*self.args, **self.kwargs)
193
+ g = self._x._mg(*self._args, **self._kwargs) # noqa
162
194
 
163
195
  i: ta.Any = None
164
196
  e: ta.Any = None
@@ -189,17 +221,20 @@ class _MgMaywaitable(_Maywaitable[_MgMaysync[T], T]):
189
221
  @ta.final
190
222
  class _MgMaysyncFn:
191
223
  def __init__(self, m):
192
- self.m = m
224
+ self._m = m
193
225
 
194
226
  functools.update_wrapper(self, m, updated=())
195
227
 
228
+ def __repr__(self) -> str:
229
+ return f'{self.__class__.__name__}@{id(self):x}({self._m!r})'
230
+
196
231
  def __get__(self, instance, owner=None):
197
232
  return _MgMaysyncFn(
198
- self.m.__get__(instance, owner),
233
+ self._m.__get__(instance, owner),
199
234
  )
200
235
 
201
236
  def __call__(self, *args, **kwargs):
202
- a = self.m(*args, **kwargs).__await__()
237
+ a = self._m(*args, **kwargs).__await__()
203
238
  try:
204
239
  g = iter(a)
205
240
  try:
@@ -240,13 +275,16 @@ class _MaysyncOp:
240
275
  def __init__(
241
276
  self,
242
277
  x: Maysync[T],
243
- *args: ta.Any,
244
- **kwargs: ta.Any,
278
+ args: ta.Tuple[ta.Any, ...],
279
+ kwargs: ta.Mapping[str, ta.Any],
245
280
  ) -> None:
246
281
  self.x = x
247
282
  self.args = args
248
283
  self.kwargs = kwargs
249
284
 
285
+ def __repr__(self) -> str:
286
+ return f'{self.__class__.__name__}@{id(self):x}({self.x!r})'
287
+
250
288
 
251
289
  class _MaysyncFutureNotAwaitedError(RuntimeError):
252
290
  pass
@@ -260,6 +298,9 @@ class _MaysyncFuture(ta.Generic[T]):
260
298
  ) -> None:
261
299
  self.op = op
262
300
 
301
+ def __repr__(self) -> str:
302
+ return f'{self.__class__.__name__}@{id(self):x}({self.op!r}, done={self.done!r})'
303
+
263
304
  done: bool = False
264
305
  result: T
265
306
  error: ta.Optional[BaseException] = None
omlish/manifests/base.py CHANGED
@@ -27,7 +27,7 @@ class ModAttrManifest:
27
27
  @dc.dataclass(frozen=True)
28
28
  class NameAliasesManifest:
29
29
  name: str
30
- aliases: ta.Optional[ta.Collection[str]] = None
30
+ aliases: ta.Optional[ta.Sequence[str]] = None
31
31
 
32
32
  @classmethod
33
33
  def build_name_dict(cls, objs: ta.Iterable[NameAliasesManifestT]) -> ta.Dict[str, NameAliasesManifestT]:
@@ -0,0 +1,11 @@
1
+ # @omlish-lite
2
+ from ..lite.marshal import unmarshal_obj
3
+ from .loading import ManifestLoader
4
+
5
+
6
+ ##
7
+
8
+
9
+ MANIFEST_LOADER = ManifestLoader(
10
+ cls_instantiator=lambda cls, **kwargs: unmarshal_obj(kwargs, cls),
11
+ )
@@ -26,9 +26,12 @@ class ManifestLoader:
26
26
  self,
27
27
  *,
28
28
  module_remap: ta.Optional[ta.Mapping[str, str]] = None,
29
+ cls_instantiator: ta.Optional[ta.Callable[..., ta.Any]] = None,
29
30
  ) -> None:
30
31
  super().__init__()
31
32
 
33
+ self._cls_instantiator = cls_instantiator
34
+
32
35
  self._lock = threading.RLock()
33
36
 
34
37
  self._module_remap = module_remap or {}
@@ -172,6 +175,14 @@ class ManifestLoader:
172
175
 
173
176
  #
174
177
 
178
+ def instantiate_cls(self, cls: type, **kwargs: ta.Any) -> ta.Any:
179
+ if self._cls_instantiator is not None:
180
+ return self._cls_instantiator(cls, **kwargs)
181
+ else:
182
+ return cls(**kwargs)
183
+
184
+ #
185
+
175
186
  def _load(
176
187
  self,
177
188
  *pkg_names: str,
@@ -197,7 +208,7 @@ class ManifestLoader:
197
208
  continue
198
209
 
199
210
  cls = self._load_cls(key)
200
- value = cls(**value_dct)
211
+ value = self.instantiate_cls(cls, **value_dct)
201
212
 
202
213
  manifest = dc.replace(manifest, value=value)
203
214
  lst.append(manifest)
@@ -256,9 +267,3 @@ class ManifestLoader:
256
267
  pkgs.extend(self.scan_pkg_root(fallback_root))
257
268
 
258
269
  return pkgs
259
-
260
-
261
- ##
262
-
263
-
264
- MANIFEST_LOADER = ManifestLoader()
@@ -56,7 +56,7 @@ from .errors import ( # noqa
56
56
  UnhandledTypeError,
57
57
  )
58
58
 
59
- from .global_ import ( # noqa
59
+ from .globals import ( # noqa
60
60
  GLOBAL_REGISTRY,
61
61
 
62
62
  global_marshaler_factory,
@@ -1,6 +1,5 @@
1
1
  """
2
2
  TODO:
3
- - join
4
3
  - subquery
5
4
  """
6
5
  import enum
@@ -8,6 +7,7 @@ import typing as ta
8
7
 
9
8
  from ... import dataclasses as dc
10
9
  from ... import lang
10
+ from ... import marshal as msh
11
11
  from .base import Node
12
12
  from .exprs import CanExpr
13
13
  from .exprs import Expr
@@ -29,7 +29,7 @@ class Relation(Node, lang.Abstract):
29
29
 
30
30
  class Table(Relation, lang.Final):
31
31
  n: Name
32
- a: Ident | None = dc.xfield(None, repr_fn=dc.opt_repr)
32
+ a: Ident | None = dc.xfield(None, repr_fn=dc.opt_repr) | msh.with_field_metadata(omit_if=lang.is_none)
33
33
 
34
34
 
35
35
  #
@@ -50,7 +50,7 @@ class Join(Relation, lang.Final):
50
50
  l: Relation
51
51
  r: Relation
52
52
 
53
- c: Expr | None = None
53
+ c: Expr | None = dc.xfield(None, repr_fn=dc.opt_repr) | msh.with_field_metadata(omit_if=lang.is_none)
54
54
 
55
55
 
56
56
  ##
@@ -2,6 +2,7 @@ import typing as ta
2
2
 
3
3
  from ... import dataclasses as dc
4
4
  from ... import lang
5
+ from ... import marshal as msh
5
6
  from .base import Node
6
7
  from .exprs import CanExpr
7
8
  from .exprs import Expr
@@ -26,7 +27,7 @@ class AllSelectItem(SelectItem, lang.Final):
26
27
 
27
28
  class ExprSelectItem(SelectItem, lang.Final):
28
29
  v: Expr
29
- a: Ident | None = dc.xfield(None, repr_fn=dc.opt_repr)
30
+ a: Ident | None = dc.xfield(None, repr_fn=dc.opt_repr) | msh.with_field_metadata(omit_if=lang.is_none)
30
31
 
31
32
 
32
33
  ##
@@ -34,8 +35,8 @@ class ExprSelectItem(SelectItem, lang.Final):
34
35
 
35
36
  class Select(Stmt, lang.Final):
36
37
  items: ta.Sequence[SelectItem] = dc.xfield(coerce=tuple)
37
- from_: Relation | None = dc.xfield(None, repr_fn=dc.opt_repr)
38
- where: Expr | None = dc.xfield(None, repr_fn=dc.opt_repr)
38
+ from_: Relation | None = dc.xfield(None, repr_fn=dc.opt_repr) | msh.with_field_metadata(name='from', omit_if=lang.is_none) # noqa
39
+ where: Expr | None = dc.xfield(None, repr_fn=dc.opt_repr) | msh.with_field_metadata(omit_if=lang.is_none)
39
40
 
40
41
 
41
42
  CanSelectItem: ta.TypeAlias = SelectItem | CanExpr
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev392
3
+ Version: 0.0.0.dev394
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
2
- omlish/__about__.py,sha256=XdAI-aCVCwAxt0sgNLHpPlE2oWfpMedlrB4gF020R7g,3543
2
+ omlish/__about__.py,sha256=ko042tDygoOn3kM1lHN4zPIzbXv_lgAASIV2V4gSqDk,3543
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
@@ -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=9wNVEnbb6KmI06A-HpUdT4BAYXOtDoJVyctNcn5vRnY,2218
73
- omlish/codecs/bytes.py,sha256=jlZ87OmZ52HhQDNyL87R3OIviK2qV5iU2jZYOTOLWjk,2157
72
+ omlish/codecs/base.py,sha256=IVnJlduvhiH1imul4DPhl2gHBWS76774AV5h86dX0ls,2214
73
+ omlish/codecs/bytes.py,sha256=3DxyQQCvFcP3mQ5G93f_mygXEb-7I8buM8EyzUcx2Is,2155
74
74
  omlish/codecs/chain.py,sha256=nbkL2nz0ZqT2lxYwSXktHh1YFTQ4Iii1Hp-fWjis6rc,532
75
75
  omlish/codecs/funcs.py,sha256=or0Jogczuzk7csDTRl-HURMEjl8LXXqxxXYK45xcM5w,855
76
- omlish/codecs/registry.py,sha256=2FnO5YP7ui1LzkguwESY0MP3WIdwgPTIJTM_4RyTOEg,3896
76
+ omlish/codecs/registry.py,sha256=PIf7XdwVX7Q85-MnyURtX9SKAYolK_r7wls9Z-qAsnA,3911
77
77
  omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
78
- omlish/codecs/text.py,sha256=MgAzXapiHie-hhLBmcho67WXfWbmhlHz4tNPcHXnWUk,5711
78
+ omlish/codecs/text.py,sha256=uHhV8jBgH0iZgcrV0nl4-0a_9ofln4iFH4OXoVm2CW4,5709
79
79
  omlish/collections/__init__.py,sha256=-CcIq7e8OkQakexxpJOXf2q6LdVqzo7B-quPtwur_BQ,2634
80
80
  omlish/collections/abc.py,sha256=p9zhL5oNV5WPyWmMn34fWfkuxPQAjOtL7WQA-Xsyhwk,2628
81
81
  omlish/collections/bimap.py,sha256=3szDCscPJlFRtkpyVQNWneg4s50mr6Rd0jdTzVEIcnE,1661
@@ -198,7 +198,7 @@ omlish/dataclasses/processing/registry.py,sha256=iNDHwW1gsq8gTMi4XvNBBzab0OYdSKv
198
198
  omlish/dataclasses/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
199
  omlish/dataclasses/tools/as_.py,sha256=3mTFXf563Z4ZZnbCzJHv83WizOYBs2mpigJCamxTlpQ,2893
200
200
  omlish/dataclasses/tools/iter.py,sha256=JQUFG4Gn-xthhJ3OEqXLOWkq2KhRMuIqvEow0HcFPZg,540
201
- omlish/dataclasses/tools/modifiers.py,sha256=xo6D4yl58HhJrFwV1JeoNrLrgC4MUA6SAXCGoyV-gnM,1212
201
+ omlish/dataclasses/tools/modifiers.py,sha256=VpE16fYDIQo7dpT0oUbCuqr9WohMohmFdKHhVVjkQqE,1486
202
202
  omlish/dataclasses/tools/only_.py,sha256=hPpqzr9YW09YmlX_QJNU2aePHYJEIrbGCPwmnvVS_to,849
203
203
  omlish/dataclasses/tools/replace.py,sha256=izM9lPT6AhEtjqn22auqaofa0j69KO7iootF-2Uj4cY,396
204
204
  omlish/dataclasses/tools/repr.py,sha256=KFvF6uv2YYIKq8O3ZNbEAS1tqRQALsJ-SUlBNPd5_GI,190
@@ -245,7 +245,7 @@ omlish/dom/rendering.py,sha256=5cQK3A_uifh3Th5v3c0nx-tW8d1KyGL6C9tASPaNVNI,4336
245
245
  omlish/formats/__init__.py,sha256=T0AG1gFnqQ5JiHN0UPQjQ-7g5tnxMIG-mgOvMYExYAM,21
246
246
  omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
247
247
  omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
248
- omlish/formats/codecs.py,sha256=ip4TLOyWAaUyEJmrIOzuLMtjRdgaMEsC6JeAlcCVi28,1657
248
+ omlish/formats/codecs.py,sha256=HBQzco_BT73xshv2l8FrDTaAKTH-A8Y4vXiabXPELGY,1655
249
249
  omlish/formats/dotenv.py,sha256=60RHhpNmLhqT7ISeA79MmSc7Sq8AxF5nKj7VPjdroZU,19320
250
250
  omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
251
251
  omlish/formats/props.py,sha256=rPycJ-_b76NSNc2b_dZ0F0zyKzuXK8v6K6fqcV8uCRQ,18933
@@ -398,7 +398,7 @@ omlish/io/compress/adapters.py,sha256=LJHhjwMHXstoLyX_q0QhGoBAcqyYGWfzhzQbGBXHzH
398
398
  omlish/io/compress/base.py,sha256=X-B9zC_JAJ84ozO4Vl_7mG3o6zkF6jZfcXO5JmDftGk,620
399
399
  omlish/io/compress/brotli.py,sha256=sNDX5HmEVqg9_xID5NTFPAWuvlNPw5ixfOnnIWwZf_o,1189
400
400
  omlish/io/compress/bz2.py,sha256=HtwBuBYHJ3MyWO9xJ0XhWpyIYTA3OszLrpu_J4kRRPA,1534
401
- omlish/io/compress/codecs.py,sha256=kpSJrCSnfFxAwReZTwdcXsaHe0iqoFbdZtZxjzuzxu0,1792
401
+ omlish/io/compress/codecs.py,sha256=dpJKoELXy_xF5nLnQYGNu19tmHEaUPyyk7fVsOlXsWk,1790
402
402
  omlish/io/compress/gzip.py,sha256=6nCWycCYo0_4cTMu4QMhu23MT1xbrwyf7E8sGGBkR_w,12199
403
403
  omlish/io/compress/lz4.py,sha256=qaze1yVXexjJyN18Adh8fbTm_5pEeyytx66KoMUNpCU,2759
404
404
  omlish/io/compress/lzma.py,sha256=qDyshBgBUSPcZpAyXiRXnqI7zx7x60UpPxn8K3nN8aM,2469
@@ -420,7 +420,7 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
420
420
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
421
421
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
422
422
  omlish/iterators/unique.py,sha256=Nw0pSaNEcHAkve0ugfLPvJcirDOn9ECyC5wIL8JlJKI,1395
423
- omlish/lang/__init__.py,sha256=ZkDWvp1jUTbw2-sDzUij4hYH4RtjnTBLHMPjrw-4ORk,6785
423
+ omlish/lang/__init__.py,sha256=JAtUfF-W0qW4BdJz2hgXRBdjUGl43ZLUghbM_bffoIM,6814
424
424
  omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
425
425
  omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
426
426
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
@@ -435,7 +435,7 @@ omlish/lang/functions.py,sha256=aLdxhmqG0Pj9tBgsKdoCu_q15r82WIkNqDDSPQU19L8,5689
435
435
  omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,5197
436
436
  omlish/lang/imports.py,sha256=y9W9Y-d_cQ35QCLuSIPoa6vnEqSErFCz8b-34IH128U,10552
437
437
  omlish/lang/iterables.py,sha256=y1SX2Co3VsOeX2wlfFF7K3rwLvF7Dtre7VY6EpfwAwA,3338
438
- omlish/lang/maysyncs.py,sha256=rUeOFpoqVSbQ_YcPvky4IDBDnpm67K26ADYCNfjMSQY,683
438
+ omlish/lang/maysyncs.py,sha256=kULOW2M9PFhLd1TdtmGGQstPgrJpl--JUv9FOHWl4f8,894
439
439
  omlish/lang/objects.py,sha256=ZsibJwNp1EXorbaObm9TlCNtuuM65snCmVb7H4_llqI,6116
440
440
  omlish/lang/outcomes.py,sha256=0PqxoKaGbBXU9UYZ6AE2QSq94Z-gFDt6wYdp0KomNQw,8712
441
441
  omlish/lang/overrides.py,sha256=IBzK6ljfLX6TLgIyKTSjhqTLcuKRkQNVtEOnBLS4nuA,2095
@@ -478,7 +478,7 @@ omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
478
478
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
479
479
  omlish/lite/marshal.py,sha256=JD_8ox5-yeIo7MZ6iipCdiVxx33So52M02AtvFlRGC8,20392
480
480
  omlish/lite/maybes.py,sha256=0p_fzb6yiOjEpvMKaQ53Q6CH1VPW1or7v7Lt1JIKcgM,4359
481
- omlish/lite/maysyncs.py,sha256=ltB3CQ_zYl2PiTmHjtpeErZDFpNwj27JhO6_3xBmnfk,5852
481
+ omlish/lite/maysyncs.py,sha256=MT3zF5kQ5rNlWU7db9Q_uXSM8K2C8LK85PIgdBsJyGE,7251
482
482
  omlish/lite/pycharm.py,sha256=FRHGcCDo42UzZXqNwW_DkhI-6kb_CmJKPiQ8F6mYkLA,1174
483
483
  omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
484
484
  omlish/lite/reprs.py,sha256=Tiqf_ciD8FfS0ury7FcJ5G21yY342fW0vPacYlb8EO4,2014
@@ -506,15 +506,16 @@ omlish/logs/standard.py,sha256=w0jS824YDvlzrGgAxKiPk9RoZ5V1b0ADiFsBEpKLuLY,3152
506
506
  omlish/logs/timing.py,sha256=qsQ3DB6swts1pxrFlmLWQzhH-3nzDrq1MUu7PxjjUyU,1519
507
507
  omlish/logs/utils.py,sha256=OkFWf1exmWImmT7BaSiIC7c0Fk9tAis-PRqo8H4ny3c,398
508
508
  omlish/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
509
- omlish/manifests/base.py,sha256=5CmayiuzdXXv9hB5tDnWqfAosAoEQ26YG0B-emkiTXU,941
510
- omlish/manifests/load.py,sha256=baPBZJRSmFVH9lWlWXAredmJFFYc3X0W2C6Z8a4M05E,7734
509
+ omlish/manifests/base.py,sha256=YBK6jxMgY5G3hK0ZBlbU-tghzifkGhwRTyWa5XqOmno,939
510
+ omlish/manifests/globals.py,sha256=LZm4ueBjlC023uxL8zvivSyzMgx5O8kSbo9oNfhF_DE,206
511
+ omlish/manifests/loading.py,sha256=S-yEGsnBEu670ya6Bc09QqbRtA5rBp5rA4D3zuJUl9M,8070
511
512
  omlish/manifests/static.py,sha256=7YwOVh_Ek9_aTrWsWNO8kWS10_j4K7yv3TpXZSHsvDY,501
512
513
  omlish/manifests/types.py,sha256=5hQuY-WZ9VMqHZXr-9Dayg380JsnX2vJzXyw6vC6UDs,317
513
- omlish/marshal/__init__.py,sha256=QeWqXKb6_Jk8vpX9Z-apWlM3nUbJY3uCPOm0k8Lw8b8,3584
514
+ omlish/marshal/__init__.py,sha256=MtQkMih6iJO0S7tbzVWBUjDr9wQhiCm3poTyLslaPFo,3584
514
515
  omlish/marshal/base.py,sha256=3GMrhJBcnVrVtlQRQLOMgvV66MciAYpHKEQi5Ns3dIk,11853
515
516
  omlish/marshal/errors.py,sha256=g5XJyTHd__8lfwQ4KwgK-E5WR6MoNTMrqKP2U_QRQQQ,307
516
517
  omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
517
- omlish/marshal/global_.py,sha256=vNLpwQVt7Nn9sA5bBh7c_JYcUu9-1CLyENq1zBH-rcM,1510
518
+ omlish/marshal/globals.py,sha256=vNLpwQVt7Nn9sA5bBh7c_JYcUu9-1CLyENq1zBH-rcM,1510
518
519
  omlish/marshal/naming.py,sha256=ELs-NtWhw6RCSEF_y98cMyzr37pj0DV_bG9yQmto_NA,857
519
520
  omlish/marshal/proxy.py,sha256=i7xZQN6BSGz4nBM4CTj0S6RcSlDEgrZmX9fbtFpAPco,548
520
521
  omlish/marshal/registries.py,sha256=5YtvjYDw8Wu7uigCzlrVzC1pHajoNFZtN2dFNmKrbTI,2358
@@ -733,9 +734,9 @@ omlish/sql/queries/multi.py,sha256=7x6x-4jnPzxA6ZasBjnjFuhHFpWt5rGCua3UvuTMIJ0,8
733
734
  omlish/sql/queries/names.py,sha256=ko5ADruhhma9xfm4T7-UEd2uXRgGchfUeiz-xgiZlFE,2207
734
735
  omlish/sql/queries/ops.py,sha256=pDZ_2Jo_Fa8DDbtYkc6-9eehkWsZPI-jh-KFlubcY6Y,134
735
736
  omlish/sql/queries/params.py,sha256=_4Cg2MWfcU0EGcVkyOfbyJ5MA4PDUexNlaGEiqmt8Ls,1268
736
- omlish/sql/queries/relations.py,sha256=_uOFcv_bfS0jfAexagxNMqMftmDWuWWWeRMzEQ3g_Oc,2479
737
+ omlish/sql/queries/relations.py,sha256=P0qBqNICyeig9sEZAYLZcTXcI1YFiBe6REm6jNhpHUI,2630
737
738
  omlish/sql/queries/rendering.py,sha256=3Ocw52DDDsUavEmb8xH-2Mhp-3pZCXsJVXFuVTOUBqk,7779
738
- omlish/sql/queries/selects.py,sha256=5CD4qmlv5hysQKmoZuF1bbikA-VcC9opN94Ea1QE3mU,1577
739
+ omlish/sql/queries/selects.py,sha256=XNisb2draHURYhbZsTFw7DJQaN1Zfo2Znm-Ty0lHNTo,1773
739
740
  omlish/sql/queries/std.py,sha256=FdJkXD7oiuj8mtVzvbsL1ZocEEAfaSdOsfTVB1YhtrE,699
740
741
  omlish/sql/queries/stmts.py,sha256=pBqwD7dRlqMu6uh6vR3xaWOEgbZCcFWbOQ9ryYd17T4,441
741
742
  omlish/sql/queries/unary.py,sha256=MEYBDZn_H0bexmUrJeONOv5-gIpYowUaXOsEHeQM4ks,1144
@@ -895,9 +896,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
895
896
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
896
897
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
897
898
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
898
- omlish-0.0.0.dev392.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
899
- omlish-0.0.0.dev392.dist-info/METADATA,sha256=TK9eckhnzTzWGHYKBnCjqN88cxzp2WejWEtJat98x_s,18825
900
- omlish-0.0.0.dev392.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
901
- omlish-0.0.0.dev392.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
902
- omlish-0.0.0.dev392.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
903
- omlish-0.0.0.dev392.dist-info/RECORD,,
899
+ omlish-0.0.0.dev394.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
900
+ omlish-0.0.0.dev394.dist-info/METADATA,sha256=-8kg1tH7Gm7abGeeTIeCo69covgUeUmIKxmo7RTaUsk,18825
901
+ omlish-0.0.0.dev394.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
902
+ omlish-0.0.0.dev394.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
903
+ omlish-0.0.0.dev394.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
904
+ omlish-0.0.0.dev394.dist-info/RECORD,,
File without changes