omlish 0.0.0.dev402__py3-none-any.whl → 0.0.0.dev404__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 (36) hide show
  1. omlish/.manifests.json +1 -1
  2. omlish/__about__.py +3 -3
  3. omlish/argparse/cli.py +1 -0
  4. omlish/codecs/registry.py +6 -2
  5. omlish/dataclasses/_internals.py +12 -5
  6. omlish/dataclasses/impl/api/classes/make.py +67 -3
  7. omlish/dataclasses/impl/api/fields/constructor.py +7 -0
  8. omlish/dataclasses/impl/api/fields/conversion.py +14 -0
  9. omlish/dataclasses/impl/concerns/doc.py +19 -1
  10. omlish/dataclasses/impl/concerns/slots.py +37 -11
  11. omlish/dataclasses/metaclass/meta.py +22 -1
  12. omlish/dataclasses/specs.py +1 -1
  13. omlish/dataclasses/tools/static.py +1 -0
  14. omlish/dispatch/impls.py +1 -2
  15. omlish/dispatch/methods.py +0 -6
  16. omlish/inject/impl/proxy.py +2 -0
  17. omlish/inject/impl/scopes.py +4 -0
  18. omlish/io/compress/zstd.py +16 -8
  19. omlish/lang/__init__.py +2 -0
  20. omlish/lang/objects.py +1 -0
  21. omlish/lang/typing.py +32 -2
  22. omlish/lite/marshal.py +24 -24
  23. omlish/lite/reflect.py +22 -5
  24. omlish/lite/typing.py +11 -0
  25. omlish/manifests/loading.py +10 -7
  26. omlish/reflect/__init__.py +1 -0
  27. omlish/reflect/inspect.py +10 -0
  28. omlish/testing/__init__.py +1 -0
  29. omlish/testing/pytest/skip.py +20 -5
  30. omlish/testing/testing.py +30 -0
  31. {omlish-0.0.0.dev402.dist-info → omlish-0.0.0.dev404.dist-info}/METADATA +3 -3
  32. {omlish-0.0.0.dev402.dist-info → omlish-0.0.0.dev404.dist-info}/RECORD +36 -36
  33. {omlish-0.0.0.dev402.dist-info → omlish-0.0.0.dev404.dist-info}/WHEEL +0 -0
  34. {omlish-0.0.0.dev402.dist-info → omlish-0.0.0.dev404.dist-info}/entry_points.txt +0 -0
  35. {omlish-0.0.0.dev402.dist-info → omlish-0.0.0.dev404.dist-info}/licenses/LICENSE +0 -0
  36. {omlish-0.0.0.dev402.dist-info → omlish-0.0.0.dev404.dist-info}/top_level.txt +0 -0
omlish/lang/typing.py CHANGED
@@ -59,43 +59,68 @@ def protocol_check(proto: type) -> ta.Callable[[Ty], Ty]:
59
59
  ##
60
60
 
61
61
 
62
- _MISSING = object()
62
+ _ANN_ATTRS: frozenset[str] = frozenset([
63
+ '__annotations__',
64
+
65
+ '__annotate__',
66
+ '__annotate_func__',
67
+
68
+ '__annotations_cache__',
69
+ ])
70
+
71
+ _UPDATE_WRAPPER_ASSIGNED_NO_ANNS = list(frozenset(functools.WRAPPER_ASSIGNMENTS) - _ANN_ATTRS)
63
72
 
64
73
 
65
74
  def _update_wrapper_no_anns(wrapper, wrapped):
66
- functools.update_wrapper(wrapper, wrapped, assigned=list(set(functools.WRAPPER_ASSIGNMENTS) - {'__annotations__'}))
75
+ functools.update_wrapper(wrapper, wrapped, assigned=_UPDATE_WRAPPER_ASSIGNED_NO_ANNS)
67
76
  return wrapper
68
77
 
69
78
 
79
+ ##
80
+
81
+
82
+ _MISSING = object()
83
+
84
+
70
85
  def typed_lambda(ret=_MISSING, **kw): # noqa
71
86
  def inner(fn):
72
87
  ns = {}
73
88
  ns['__fn'] = fn
89
+
74
90
  proto = ['def __lam(']
75
91
  call = ['return __fn(']
92
+
76
93
  pkw = dict(kw)
77
94
  for i, (n, t) in enumerate(pkw.items()):
78
95
  if i:
79
96
  call.append(', ')
80
97
  else:
81
98
  proto.append('*')
99
+
82
100
  ns['__ann_' + n] = t
83
101
  proto.append(f', {n}: __ann_{n}')
84
102
  call.append(f'{n}={n}')
103
+
85
104
  proto.append(')')
105
+
86
106
  if ret is not _MISSING:
87
107
  ns['__ann_return'] = ret
88
108
  proto.append(f' -> __ann_return')
109
+
89
110
  proto.append(':')
90
111
  call.append(')')
112
+
91
113
  src = f'{"".join(proto)} {"".join(call)}'
92
114
  exec(src, ns)
115
+
93
116
  lam = _update_wrapper_no_anns(ns['__lam'], fn)
94
117
  lam.__signature__ = inspect.signature(lam, follow_wrapped=False)
95
118
  return lam
119
+
96
120
  for k in kw:
97
121
  if k.startswith('__'):
98
122
  raise NameError(k)
123
+
99
124
  return inner
100
125
 
101
126
 
@@ -103,13 +128,17 @@ def typed_partial(obj, **kw): # noqa
103
128
  for k in kw:
104
129
  if k.startswith('__'):
105
130
  raise NameError(k)
131
+
106
132
  sig = inspect.signature(obj)
133
+
107
134
  inner = _update_wrapper_no_anns(lambda **lkw: obj(**lkw, **kw), obj)
135
+
108
136
  ret = (
109
137
  obj if isinstance(obj, type) else
110
138
  sig.return_annotation if sig.return_annotation is not inspect.Signature.empty else
111
139
  _MISSING
112
140
  )
141
+
113
142
  lam = typed_lambda(
114
143
  ret,
115
144
  **{
@@ -119,6 +148,7 @@ def typed_partial(obj, **kw): # noqa
119
148
  and p.annotation is not inspect.Signature.empty
120
149
  },
121
150
  )(inner)
151
+
122
152
  return _update_wrapper_no_anns(lam, obj)
123
153
 
124
154
 
omlish/lite/marshal.py CHANGED
@@ -545,32 +545,32 @@ class ObjMarshalerManager:
545
545
  [e] = ta.get_args(ty)
546
546
  return IterableObjMarshaler(st, rec(e))
547
547
 
548
- if is_union_alias(ty):
549
- uts = frozenset(ta.get_args(ty))
550
- if None in uts or type(None) in uts:
551
- is_opt = True
552
- uts = frozenset(ut for ut in uts if ut not in (None, type(None)))
553
- else:
554
- is_opt = False
548
+ if is_union_alias(ty):
549
+ uts = frozenset(ta.get_args(ty))
550
+ if None in uts or type(None) in uts:
551
+ is_opt = True
552
+ uts = frozenset(ut for ut in uts if ut not in (None, type(None)))
553
+ else:
554
+ is_opt = False
555
555
 
556
- um: ObjMarshaler
557
- if not uts:
558
- raise TypeError(ty)
559
- elif len(uts) == 1:
560
- um = rec(check.single(uts))
556
+ um: ObjMarshaler
557
+ if not uts:
558
+ raise TypeError(ty)
559
+ elif len(uts) == 1:
560
+ um = rec(check.single(uts))
561
+ else:
562
+ pt = tuple({ut for ut in uts if ut in _OBJ_MARSHALER_PRIMITIVE_TYPES})
563
+ np_uts = {ut for ut in uts if ut not in _OBJ_MARSHALER_PRIMITIVE_TYPES}
564
+ if not np_uts:
565
+ um = PrimitiveUnionObjMarshaler(pt)
566
+ elif len(np_uts) == 1:
567
+ um = PrimitiveUnionObjMarshaler(pt, x=rec(check.single(np_uts)))
561
568
  else:
562
- pt = tuple({ut for ut in uts if ut in _OBJ_MARSHALER_PRIMITIVE_TYPES})
563
- np_uts = {ut for ut in uts if ut not in _OBJ_MARSHALER_PRIMITIVE_TYPES}
564
- if not np_uts:
565
- um = PrimitiveUnionObjMarshaler(pt)
566
- elif len(np_uts) == 1:
567
- um = PrimitiveUnionObjMarshaler(pt, x=rec(check.single(np_uts)))
568
- else:
569
- raise TypeError(ty)
570
-
571
- if is_opt:
572
- um = OptionalObjMarshaler(um)
573
- return um
569
+ raise TypeError(ty)
570
+
571
+ if is_opt:
572
+ um = OptionalObjMarshaler(um)
573
+ return um
574
574
 
575
575
  raise TypeError(ty)
576
576
 
omlish/lite/reflect.py CHANGED
@@ -1,5 +1,6 @@
1
- # ruff: noqa: UP006
1
+ # ruff: noqa: UP006 UP036 UP045
2
2
  import functools
3
+ import sys
3
4
  import types
4
5
  import typing as ta
5
6
 
@@ -16,24 +17,40 @@ _GENERIC_ALIAS_TYPES = (
16
17
  )
17
18
 
18
19
 
19
- def is_generic_alias(obj, *, origin: ta.Any = None) -> bool:
20
+ def is_generic_alias(obj: ta.Any, *, origin: ta.Any = None) -> bool:
20
21
  return (
21
22
  isinstance(obj, _GENERIC_ALIAS_TYPES) and
22
23
  (origin is None or ta.get_origin(obj) is origin)
23
24
  )
24
25
 
25
26
 
26
- is_union_alias = functools.partial(is_generic_alias, origin=ta.Union)
27
27
  is_callable_alias = functools.partial(is_generic_alias, origin=ta.Callable)
28
28
 
29
29
 
30
30
  ##
31
31
 
32
32
 
33
+ _UNION_ALIAS_ORIGINS = frozenset([
34
+ ta.get_origin(ta.Optional[int]),
35
+ *(
36
+ [
37
+ ta.get_origin(int | None),
38
+ ta.get_origin(getattr(ta, 'TypeVar')('_T') | None),
39
+ ] if sys.version_info >= (3, 10) else ()
40
+ ),
41
+ ])
42
+
43
+
44
+ def is_union_alias(obj: ta.Any) -> bool:
45
+ return ta.get_origin(obj) in _UNION_ALIAS_ORIGINS
46
+
47
+
48
+ #
49
+
50
+
33
51
  def is_optional_alias(spec: ta.Any) -> bool:
34
52
  return (
35
- isinstance(spec, _GENERIC_ALIAS_TYPES) and # noqa
36
- ta.get_origin(spec) is ta.Union and
53
+ is_union_alias(spec) and
37
54
  len(ta.get_args(spec)) == 2 and
38
55
  any(a in (None, type(None)) for a in ta.get_args(spec))
39
56
  )
omlish/lite/typing.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import dataclasses as dc
2
+ import sys
2
3
  import typing as ta
3
4
 
4
5
 
@@ -51,3 +52,13 @@ class Func3(ta.Generic[A0, A1, A2, T]):
51
52
 
52
53
  def __call__(self, a0: A0, a1: A1, a2: A2) -> T:
53
54
  return self.fn(a0, a1, a2)
55
+
56
+
57
+ ##
58
+
59
+
60
+ _TYPING_ANNOTATIONS_ATTR = '__annotate__' if sys.version_info >= (3, 14) else '__annotations__'
61
+
62
+
63
+ def typing_annotations_attr() -> str:
64
+ return _TYPING_ANNOTATIONS_ATTR
@@ -324,29 +324,32 @@ class ManifestLoader:
324
324
  only=only,
325
325
  )
326
326
 
327
- #
327
+ ##
328
328
 
329
329
  ENTRY_POINT_GROUP: ta.ClassVar[str] = 'omlish.manifests'
330
330
 
331
331
  _discovered_packages: ta.ClassVar[ta.Optional[ta.Sequence[str]]] = None
332
332
 
333
333
  @classmethod
334
- def discover_packages(cls) -> ta.Sequence[str]:
335
- if (x := cls._discovered_packages) is not None:
336
- return x
337
-
334
+ def _discover_packages_uncached(cls) -> ta.Sequence[str]:
338
335
  # This is a fat dep so do it late.
339
336
  from importlib import metadata as importlib_metadata # noqa
340
337
 
341
- x = [
338
+ return [
342
339
  ep.value
343
340
  for ep in importlib_metadata.entry_points(group=cls.ENTRY_POINT_GROUP)
344
341
  ]
345
342
 
343
+ @classmethod
344
+ def discover_packages(cls) -> ta.Sequence[str]:
345
+ if (x := cls._discovered_packages) is not None:
346
+ return x
347
+
348
+ x = cls._discover_packages_uncached()
346
349
  cls._discovered_packages = x
347
350
  return x
348
351
 
349
- #
352
+ ##
350
353
 
351
354
  def _scan_package_root_dir_uncached(
352
355
  self,
@@ -1,6 +1,7 @@
1
1
  from .inspect import ( # noqa
2
2
  get_annotations,
3
3
  get_filtered_type_hints,
4
+ has_annotations,
4
5
  )
5
6
 
6
7
  from .ops import ( # noqa
omlish/reflect/inspect.py CHANGED
@@ -1,11 +1,14 @@
1
1
  """
2
2
  TODO:
3
3
  - vs ta.get_type_hints?
4
+ - eval (ta.get_type_hints) vs forwardref (inspect.get_annotations)?
5
+ - remove, or at least address, get_filtered_type_hints wrt 3.14
4
6
  """
5
7
  import typing as ta
6
8
 
7
9
  from .. import check
8
10
  from .. import lang
11
+ from ..lite.typing import typing_annotations_attr
9
12
 
10
13
 
11
14
  if ta.TYPE_CHECKING:
@@ -20,6 +23,13 @@ annotationlib = lang.lazy_import('annotationlib', optional=True, cache_failure=T
20
23
  ##
21
24
 
22
25
 
26
+ def has_annotations(obj: ta.Any) -> bool:
27
+ return hasattr(obj, typing_annotations_attr())
28
+
29
+
30
+ ##
31
+
32
+
23
33
  def get_annotations(obj: ta.Any) -> ta.Mapping[str, ta.Any]:
24
34
  if (al := annotationlib()) is not None:
25
35
  return al.get_annotations(obj, format=al.Format.FORWARDREF) # noqa
@@ -1,6 +1,7 @@
1
1
  from .testing import ( # noqa
2
2
  assert_dicts_equal_ordered,
3
3
  call_many_with_timeout,
4
+ run_all_tests,
4
5
  run_with_timeout,
5
6
  waitpid_with_timeout,
6
7
  xfail,
@@ -17,20 +17,35 @@ from ... import lang
17
17
 
18
18
  def if_cant_import(*modules: str, **kwargs):
19
19
  missing = [m for m in modules if not lang.can_import(m, **kwargs)]
20
- return pytest.mark.skipif(bool(missing), reason=f'requires import {", ".join(missing)}')
20
+ return pytest.mark.skipif(
21
+ bool(missing),
22
+ reason=f'requires import {", ".join(missing)}',
23
+ )
21
24
 
22
25
 
23
26
  def if_not_on_path(exe: str):
24
- return pytest.mark.skipif(shutil.which(exe) is None, reason=f'requires exe on path {exe}')
27
+ return pytest.mark.skipif(
28
+ shutil.which(exe) is None,
29
+ reason=f'requires exe on path {exe}',
30
+ )
25
31
 
26
32
 
27
33
  def if_python_version_less_than(num: ta.Sequence[int]):
28
- return pytest.mark.skipif(sys.version_info < tuple(num), reason=f'python version {tuple(sys.version_info)} < {tuple(num)}') # noqa
34
+ return pytest.mark.skipif(
35
+ sys.version_info < tuple(num),
36
+ reason=f'python version {tuple(sys.version_info)} < {tuple(num)}',
37
+ )
29
38
 
30
39
 
31
40
  def if_not_platform(*platforms: str):
32
- return pytest.mark.skipif(sys.platform not in platforms, reason=f'requires platform in {platforms}')
41
+ return pytest.mark.skipif(
42
+ sys.platform not in platforms,
43
+ reason=f'requires platform in {platforms}',
44
+ )
33
45
 
34
46
 
35
47
  def if_nogil():
36
- return pytest.mark.skipif(sysconfig.get_config_var('Py_GIL_DISABLED'), reason='requires gil build')
48
+ return pytest.mark.skipif(
49
+ sysconfig.get_config_var('Py_GIL_DISABLED'),
50
+ reason='requires gil build',
51
+ )
omlish/testing/testing.py CHANGED
@@ -117,3 +117,33 @@ def raise_in_thread(thr: threading.Thread, exc: ta.Union[BaseException, ta.Type[
117
117
  # https://github.com/python/cpython/blob/37ba7531a59a0a2b240a86f7e2adfb1b1cd8ac0c/Lib/test/test_threading.py#L182
118
118
  import ctypes as ct
119
119
  ct.pythonapi.PyThreadState_SetAsyncExc(ct.c_ulong(thr.ident), ct.py_object(exc)) # type: ignore
120
+
121
+
122
+ ##
123
+
124
+
125
+ def run_all_tests(
126
+ obj: ta.Any,
127
+ *,
128
+ filter: ta.Optional[ta.Callable[[str, ta.Any], bool]] = None, # noqa
129
+ out: ta.Optional[ta.Any] = None,
130
+ ) -> None:
131
+ if out is None:
132
+ out = sys.stderr
133
+
134
+ if isinstance(obj, ta.Mapping):
135
+ items: ta.Any = obj.items()
136
+ else:
137
+ items = ((a, getattr(obj, a)) for a in dir(obj))
138
+
139
+ for k, v in items:
140
+ if not callable(v):
141
+ continue
142
+
143
+ if filter is not None:
144
+ if not filter(k, v):
145
+ continue
146
+ elif not k.startswith('test_'):
147
+ continue
148
+
149
+ print(f'Running {k}', file=out)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev402
3
+ Version: 0.0.0.dev404
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -22,7 +22,7 @@ Requires-Dist: trio~=0.30; extra == "all"
22
22
  Requires-Dist: trio-asyncio~=0.15; extra == "all"
23
23
  Requires-Dist: lz4~=4.4; extra == "all"
24
24
  Requires-Dist: python-snappy~=0.7; extra == "all"
25
- Requires-Dist: zstandard~=0.24; extra == "all"
25
+ Requires-Dist: zstandard~=0.24; python_version < "3.14" and extra == "all"
26
26
  Requires-Dist: brotli~=1.1; extra == "all"
27
27
  Requires-Dist: asttokens~=3.0; extra == "all"
28
28
  Requires-Dist: executing~=2.2; extra == "all"
@@ -63,7 +63,7 @@ Requires-Dist: trio-asyncio~=0.15; extra == "async"
63
63
  Provides-Extra: compress
64
64
  Requires-Dist: lz4~=4.4; extra == "compress"
65
65
  Requires-Dist: python-snappy~=0.7; extra == "compress"
66
- Requires-Dist: zstandard~=0.24; extra == "compress"
66
+ Requires-Dist: zstandard~=0.24; python_version < "3.14" and extra == "compress"
67
67
  Requires-Dist: brotli~=1.1; extra == "compress"
68
68
  Provides-Extra: diag
69
69
  Requires-Dist: asttokens~=3.0; extra == "diag"
@@ -1,5 +1,5 @@
1
- omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
2
- omlish/__about__.py,sha256=iDAg-fMcGCRDczeTg78gCXGIynAhZMN-oYTNadqljJ0,3576
1
+ omlish/.manifests.json,sha256=ftpXGlXqsqDmBh0eWXtndZBLj8Y6QVhS5g5lKgEAf3U,8587
2
+ omlish/__about__.py,sha256=OB2DoZkdbC_vknS_3Bckg3xD9-Cehj4NWNxrqX2WQjY,3601
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
@@ -19,7 +19,7 @@ omlish/algorithm/toposort.py,sha256=5wog_7XTYtg5vq4tcKtn9DcXRsEMaVobzQ6ndMK4HhQ,
19
19
  omlish/algorithm/unify.py,sha256=jADtgVQkcGKRV4WokG0ePYe9X6BT_8RAS-WSfbBbjUk,838
20
20
  omlish/argparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  omlish/argparse/all.py,sha256=NeeMM5MIebY7XDAHaCxUzeesEoUYwsf5i9PrBUcO1cI,1057
22
- omlish/argparse/cli.py,sha256=dRPR0VlHgssntrZV0klIMLWa9B1JzMsUDhHWUh_8qu4,8736
22
+ omlish/argparse/cli.py,sha256=60cfq_WFLwL3YsIQxGAQ7XDi-LzNjH33RavcKdRnhUU,8737
23
23
  omlish/asyncs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  omlish/asyncs/all.py,sha256=MjW0P9K8XBrw6AaH2X_qD5Y7hEZOF0cktqFv5BDGH-k,649
25
25
  omlish/asyncs/bridge.py,sha256=QonuN2KgT7sRsmJEgRvLqtubXma9RI2xOs27X5JSQcA,10153
@@ -73,7 +73,7 @@ omlish/codecs/base.py,sha256=IVnJlduvhiH1imul4DPhl2gHBWS76774AV5h86dX0ls,2214
73
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=_s-RKf06dlZhmXNH7Z2qbO8LPEtWeP-wgDAaHp9DFlg,3933
76
+ omlish/codecs/registry.py,sha256=v51TQlwRAa4b79qOj8VdJsNsTlaJj5Q02L95lskZoL4,4141
77
77
  omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
78
78
  omlish/codecs/text.py,sha256=uHhV8jBgH0iZgcrV0nl4-0a_9ofln4iFH4OXoVm2CW4,5709
79
79
  omlish/collections/__init__.py,sha256=BIc806ri5Eq-kR03Ya2YfYTRI0g1rn_0haQPUqxXqys,2816
@@ -137,12 +137,12 @@ omlish/daemons/spawning.py,sha256=psR73zOYjMKTqNpx1bMib8uU9wAZz62tw5TaWHrTdyY,53
137
137
  omlish/daemons/targets.py,sha256=00KmtlknMhQ5PyyVAhWl3rpeTMPym0GxvHHq6mYPZ7c,3051
138
138
  omlish/daemons/waiting.py,sha256=RfgD1L33QQVbD2431dkKZGE4w6DUcGvYeRXXi8puAP4,1676
139
139
  omlish/dataclasses/__init__.py,sha256=Xkf8vRYt4C0_4H9DP2rjfzkByXNVUxL4EgoSB1p0eho,2162
140
- omlish/dataclasses/_internals.py,sha256=vIGCZnStgD3ef4drYRtVOrxhxmAPa0vJpo4pXcDcQvM,3073
140
+ omlish/dataclasses/_internals.py,sha256=_THiziiIslUyYC98Y_tZd5aZgvEF3FAGkDSwzRfcDuo,3247
141
141
  omlish/dataclasses/debug.py,sha256=giBiv6aXvX0IagwNCW64qBzNjfOFr3-VmgDy_KYlb-k,29
142
142
  omlish/dataclasses/errors.py,sha256=tyv3WR6az66uGGiq9FIuCHvy1Ef-G7zeMY7mMG6hy2Y,2527
143
143
  omlish/dataclasses/inspect.py,sha256=EpVb50CsEUWpn70gkjBa-hI1mr5_VubHTERsofgE-Lw,4600
144
144
  omlish/dataclasses/reflection.py,sha256=6BD2FUiOEtpi_2JREWyVzemjbBJdBMUm8XxQ9SVIKGs,2799
145
- omlish/dataclasses/specs.py,sha256=JFpMILJhxiWYmfTD4TDl03O13o1i0Rwgf14WpI7U9go,6193
145
+ omlish/dataclasses/specs.py,sha256=VOY2uCjxLhemBuLd1VXz5KJXmZ48NL3sMJxzOhXmau8,6191
146
146
  omlish/dataclasses/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
147
  omlish/dataclasses/impl/configs.py,sha256=n1MOPGTulIVLMR2e4hbtU1FbHJTAVrOFXOCPU-fujVw,1442
148
148
  omlish/dataclasses/impl/utils.py,sha256=jAD6IIILo70aD_s60CaqRU2YvpZxBKy4K5EG-MTiqVo,1871
@@ -150,18 +150,18 @@ omlish/dataclasses/impl/api/__init__.py,sha256=k5iS9QOwf_f4iOfGffYhnqDOcmEIwEUUT
150
150
  omlish/dataclasses/impl/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
151
  omlish/dataclasses/impl/api/classes/conversion.py,sha256=T1I-aZKui2tv8rknuw9yCvGQLTrFnzTuHDFoezhE0ko,908
152
152
  omlish/dataclasses/impl/api/classes/decorator.py,sha256=LqkAjNFpUeLThnnkzt1tIYKtIf8maDCkjrZzSbABZbg,4067
153
- omlish/dataclasses/impl/api/classes/make.py,sha256=qcsELy9tpwMLr0RJmvlSgR0deh40nvxgy7RaG3SJ_nw,2939
153
+ omlish/dataclasses/impl/api/classes/make.py,sha256=gfYOSWBno3W_5w6YMN2El3EiXuKwN0bu0t5a5GV8Qlo,5165
154
154
  omlish/dataclasses/impl/api/classes/metadata.py,sha256=sMZgtoZaybfCoBKOVj7hKc-xqfU2Lca9WFrqg8UAAsE,2773
155
155
  omlish/dataclasses/impl/api/classes/params.py,sha256=cJAMxLHgW6xyKURlCnDQpA-TYfOgWpVBCavie-IZTOM,2000
156
156
  omlish/dataclasses/impl/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  omlish/dataclasses/impl/api/fields/building.py,sha256=8ruCNRY6ZHjWSmfUCH6jabh_LfiXkIOrR3fZ3WlHinY,3326
158
- omlish/dataclasses/impl/api/fields/constructor.py,sha256=BNHIpZNMhnmxn7TlAa7CM4FunzupoSFWquvIsUa05JQ,1537
159
- omlish/dataclasses/impl/api/fields/conversion.py,sha256=jh2k4klc-SkmpygPI1GJFNJd7ylj5dCKt2rwyAUSrfI,5144
158
+ omlish/dataclasses/impl/api/fields/constructor.py,sha256=5PkSFFO09hWzLmDWUaZnQFGEBl5-yNLsigZ4cMhvAz0,1681
159
+ omlish/dataclasses/impl/api/fields/conversion.py,sha256=f-dswgrBMXIy6fQL6O9u8jkVGTOWA72AE78X2TqO5jk,5544
160
160
  omlish/dataclasses/impl/api/fields/metadata.py,sha256=klwez7mFsIiIQ3hxvXx5zhC53FPXqlHVzcyrHikIsCE,1938
161
161
  omlish/dataclasses/impl/concerns/__init__.py,sha256=4Goga5wAOAbK6KcoHWC8jDC8M9ywgH7PfmXXxgCYCC8,208
162
162
  omlish/dataclasses/impl/concerns/abc.py,sha256=ok2qE9ltgZXdf34YtLElTr7A-IYErJvVfP1-G2t2Sbc,391
163
163
  omlish/dataclasses/impl/concerns/copy.py,sha256=0QoQkNNptD0mJdc4TJlD7lpDUm3kJNOH_EsqMLx_HB4,1762
164
- omlish/dataclasses/impl/concerns/doc.py,sha256=SL0hj4EzXrVOhaDzHVDGnzylkOU7mcXtr9Tm3wuZnQQ,1344
164
+ omlish/dataclasses/impl/concerns/doc.py,sha256=VVVEEvO-YpKOqUnhIXVTLOifmJedaB1AOKmhxvD8L0c,1727
165
165
  omlish/dataclasses/impl/concerns/eq.py,sha256=PI0KKzJyIziRLgcjl8efjapf8baaRCdcuyGW83bCpEo,1720
166
166
  omlish/dataclasses/impl/concerns/fields.py,sha256=JTO13HKs-swKnM7Qtb6El7FAfdLwxVLqULXAwotjus0,3318
167
167
  omlish/dataclasses/impl/concerns/frozen.py,sha256=DTYB6aIZEqzYvWd3n6VF4Z40apWVOYKFbiYlTiGzaYE,4511
@@ -174,7 +174,7 @@ omlish/dataclasses/impl/concerns/override.py,sha256=eegJ4KRs-p3Oj5ipY1eySwXJ3vFy
174
174
  omlish/dataclasses/impl/concerns/params.py,sha256=O_1f83gH8l_PzvOndxC4vlw2-bp8PNhNQUqB-0mJrWw,407
175
175
  omlish/dataclasses/impl/concerns/replace.py,sha256=2lZCmTpz4uxMsNw8a29OzSykDqWHaINzvk13qyMpVUA,1509
176
176
  omlish/dataclasses/impl/concerns/repr.py,sha256=j26G7vC147z-GJc86DbY__b1C4QPdiWlxeNNIujbqzM,3461
177
- omlish/dataclasses/impl/concerns/slots.py,sha256=xg6346UT_oUlb0kYaWFbeJUKzZcpQx4nJkT86CXfI5c,5922
177
+ omlish/dataclasses/impl/concerns/slots.py,sha256=onEWZRPVhiCJOoyk3lNA_PTh0w49TDyqmTmcCY_oiHs,6604
178
178
  omlish/dataclasses/impl/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
179
  omlish/dataclasses/impl/generation/base.py,sha256=adi68lJogtjx1SoxGJ5hqC-f-CMX2gWi8iALmucIwKo,686
180
180
  omlish/dataclasses/impl/generation/compilation.py,sha256=SQ3wuVQRDhrDRcWMZXsD4TibmkgMUlrTY295DbIPCy4,6996
@@ -196,7 +196,7 @@ omlish/dataclasses/impl/processing/registry.py,sha256=qTCVUOTYjDKGTxMXYUjvck3SsY
196
196
  omlish/dataclasses/metaclass/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
197
197
  omlish/dataclasses/metaclass/bases.py,sha256=dX8ctd6iZPZBedEI_Ty62qHzGtixUhda9eYF5lGsTtA,1404
198
198
  omlish/dataclasses/metaclass/confer.py,sha256=y2qx9FiPmu2uNUi9Z8MLDL_pSGeiuDutVVAit145RuQ,1400
199
- omlish/dataclasses/metaclass/meta.py,sha256=WZUQ_nhaQrar5XAkD22vdik2YiulEvKLwcCqBR7huRM,2644
199
+ omlish/dataclasses/metaclass/meta.py,sha256=eAlM0I3KOylnwDwz39wymAYE5qZlxMXnwJKdG5qqzTg,3330
200
200
  omlish/dataclasses/metaclass/specs.py,sha256=ZFt7A5S2UQi5ecFGhd9ubnRD0maswQGERMCT0jrnuDM,794
201
201
  omlish/dataclasses/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
202
  omlish/dataclasses/tools/as_.py,sha256=KP9ZQ6yh24QmLULGrQO2TucmEdVLtBj5YUZuUXa5HEY,2895
@@ -205,7 +205,7 @@ omlish/dataclasses/tools/modifiers.py,sha256=VpE16fYDIQo7dpT0oUbCuqr9WohMohmFdKH
205
205
  omlish/dataclasses/tools/only_.py,sha256=hPpqzr9YW09YmlX_QJNU2aePHYJEIrbGCPwmnvVS_to,849
206
206
  omlish/dataclasses/tools/replace.py,sha256=izM9lPT6AhEtjqn22auqaofa0j69KO7iootF-2Uj4cY,396
207
207
  omlish/dataclasses/tools/repr.py,sha256=KFvF6uv2YYIKq8O3ZNbEAS1tqRQALsJ-SUlBNPd5_GI,190
208
- omlish/dataclasses/tools/static.py,sha256=YFTgCtUeomTmbkF_wBCgoH3sn-jGcbG15VvB2KXXOG0,8675
208
+ omlish/dataclasses/tools/static.py,sha256=xLOnTLVEpOvkgKqWDtHGCpER1UaBoiS43LjH_WBh0-M,8701
209
209
  omlish/diag/__init__.py,sha256=c1q8vuapGH1YiYdU300FIJXMI1MOcnLNBZXr-zc8BXk,1181
210
210
  omlish/diag/asts.py,sha256=MWh9XAG3m9L10FIJCyoNT2aU4Eft6tun_x9K0riq6Dk,3332
211
211
  omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
@@ -229,8 +229,8 @@ omlish/dispatch/_dispatch2.py,sha256=70k1tKKvuhxtAu6v4skECfHKIKVWrmlt7G_JKLUsKEs
229
229
  omlish/dispatch/_dispatch3.py,sha256=9Zjd7bINAC3keiaBdssc4v5dY0-8OI6XooV2DR9U7Z0,2818
230
230
  omlish/dispatch/dispatch.py,sha256=TzWihCt9Zr8wfIwVpKHVOOrYFVKpDXRevxYomtEfqYc,3176
231
231
  omlish/dispatch/functions.py,sha256=cwNzGIg2ZIalEgn9I03cnJVbMTHjWloyDTaowlO3UPs,1524
232
- omlish/dispatch/impls.py,sha256=K_okKvpZml4NkTHJmTVyMQSrIaIJcqTEgkreGwukaOw,1895
233
- omlish/dispatch/methods.py,sha256=nqLvpuktVO9sE3np79QuKqmPyTX8tluFzPr4MNBkljc,10296
232
+ omlish/dispatch/impls.py,sha256=3kyLw5yiYXWCN1DiqQbD1czMVrM8v1mpQ8NyD0tUrnk,1870
233
+ omlish/dispatch/methods.py,sha256=RJ-gLF2UdCQKZFhiuV4R1N3lRB_dMH3ItiHwmm-s62o,9873
234
234
  omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
235
  omlish/docker/all.py,sha256=t5jBNZAzqCoB05-nwCuSZ6C3PBEBD6T3wsIJvIXJaRg,576
236
236
  omlish/docker/cli.py,sha256=ws3ypayxdnp3nWeLww45jHG0Vwr5e4bUbLTqkpejAhc,2570
@@ -389,8 +389,8 @@ omlish/inject/impl/multis.py,sha256=j2QHSpJp0jPv10yZEZJwi0w62kXFQ25gkHa026xv4-Q,
389
389
  omlish/inject/impl/origins.py,sha256=dgGdkoMN6I4DZrWjlpZYijeFsrF6Up1WPq_QSAgTtuQ,1676
390
390
  omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCFQ,2613
391
391
  omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
392
- omlish/inject/impl/proxy.py,sha256=gyCME_W48Zrl7QJMKiIPwGpSctf5fhvh4ZldgtA9MEE,1641
393
- omlish/inject/impl/scopes.py,sha256=21ngZvtp38qUqwtXnQdn78EmDDzvK-hMw8rrg-ygK48,5905
392
+ omlish/inject/impl/proxy.py,sha256=dOAPh1DAmSWLg_oGDxivUpVgltec2mvKCvlvQJp8IRo,1643
393
+ omlish/inject/impl/scopes.py,sha256=sL250qM4-hCwwO28GdynM02OMb09FMmIvo_ifYhNhj0,5909
394
394
  omlish/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
395
395
  omlish/io/abc.py,sha256=M40QB2udYpCEqmlxCcHv6FlJYJY6ymmJQBlaklYv0U8,1256
396
396
  omlish/io/buffers.py,sha256=2ZAAZn-fTAtPCgtwcH_UJrSr5ZS9VNRp7yynufv0Rmk,7291
@@ -409,7 +409,7 @@ omlish/io/compress/lz4.py,sha256=qaze1yVXexjJyN18Adh8fbTm_5pEeyytx66KoMUNpCU,275
409
409
  omlish/io/compress/lzma.py,sha256=qDyshBgBUSPcZpAyXiRXnqI7zx7x60UpPxn8K3nN8aM,2469
410
410
  omlish/io/compress/snappy.py,sha256=JFoH_9l0Tr9AGaQ0jHRiP4TsFnG071l27mprCBcqt4c,704
411
411
  omlish/io/compress/zlib.py,sha256=dE38zBY4qNihUYtPjSpNRXweiw6mB6xsYqsBJklTDXM,2364
412
- omlish/io/compress/zstd.py,sha256=wik_HWLq_8fGAJgGyMGq9fhFQovot1aCH4lwMpihQmg,949
412
+ omlish/io/compress/zstd.py,sha256=FK3XJdMaCCCOrEcQMUyBcXwY5d8NEsO7I15Wyj_WwPI,1153
413
413
  omlish/io/coro/__init__.py,sha256=Mr8-GoDzOlA2sKmaDxuov2vPmjX_IeB_49I8dTSvjvA,1080
414
414
  omlish/io/coro/consts.py,sha256=4r6IMLBMic6MJHVn9UiORIkkPAuxsqtzFT3KV0fatC0,33
415
415
  omlish/io/coro/direct.py,sha256=Y--rP3wvBAYMeYctokb5IGd8UyQGmEFChyKISmRg5k0,294
@@ -425,7 +425,7 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
425
425
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
426
426
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
427
427
  omlish/iterators/unique.py,sha256=Nw0pSaNEcHAkve0ugfLPvJcirDOn9ECyC5wIL8JlJKI,1395
428
- omlish/lang/__init__.py,sha256=3Gd6wcpol_c0hpzxgVZd7s0DB9iEYmKj2XlZPTWn9e4,7202
428
+ omlish/lang/__init__.py,sha256=le8N_Hj6ahtWnG6-gGEo53CK270rDA9wuhh6rUDS9ws,7232
429
429
  omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
430
430
  omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
431
431
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
@@ -441,7 +441,7 @@ omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,519
441
441
  omlish/lang/iterables.py,sha256=y1SX2Co3VsOeX2wlfFF7K3rwLvF7Dtre7VY6EpfwAwA,3338
442
442
  omlish/lang/lazyglobals.py,sha256=G1hwpyIgM4PUkVJ_St3K-EdQkHQdWpFOcXao6I5LwyY,1435
443
443
  omlish/lang/maysyncs.py,sha256=kULOW2M9PFhLd1TdtmGGQstPgrJpl--JUv9FOHWl4f8,894
444
- omlish/lang/objects.py,sha256=ZsibJwNp1EXorbaObm9TlCNtuuM65snCmVb7H4_llqI,6116
444
+ omlish/lang/objects.py,sha256=E-ApDJUnLWXJX9ZwWU2qVhYF0H2fg7w08wWYWxbkdNI,6117
445
445
  omlish/lang/outcomes.py,sha256=0PqxoKaGbBXU9UYZ6AE2QSq94Z-gFDt6wYdp0KomNQw,8712
446
446
  omlish/lang/overrides.py,sha256=IBzK6ljfLX6TLgIyKTSjhqTLcuKRkQNVtEOnBLS4nuA,2095
447
447
  omlish/lang/params.py,sha256=sfbNoGrKCsAtubFufj_uh_WKshIgA8fqJ4PmLH1PH00,6639
@@ -450,7 +450,7 @@ omlish/lang/resolving.py,sha256=ei9LDyJexsMMHB9z8diUkNmynWhd_da7h7TqrMYM6lA,1611
450
450
  omlish/lang/resources.py,sha256=QtuybNgdw5e2QL3jtKi-5ENH98JemsMRi21A40tYrzA,2844
451
451
  omlish/lang/strings.py,sha256=TY-v0iGu6BxEKb99YS-VmIJqc-sTAqMv7mCDJQALMnI,4550
452
452
  omlish/lang/sys.py,sha256=KPe1UOXk1VxlOYt_aLmhN0KqsA4wnP-4nm4WEwO49pw,411
453
- omlish/lang/typing.py,sha256=eWI3RKhVi-_SV2rN4SGq8IbFo5XbGapbiWeduF97uG8,3846
453
+ omlish/lang/typing.py,sha256=A4CCZ3U6cCDfUBqgTxGj8qnl-e-r6UJWjJ0Y6XYxT3c,4077
454
454
  omlish/lang/cached/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
455
455
  omlish/lang/cached/function.py,sha256=epDPy9WyGc_VaKTrEQJ3dZun-NLsvdvbbNd7jbaUM2c,11730
456
456
  omlish/lang/cached/property.py,sha256=WHYyg4-6EA86TcNMfbXTjVhjEZPc0kngt9hfY3WN5w8,2768
@@ -487,11 +487,11 @@ omlish/lite/imports.py,sha256=GyEDKL-WuHtdOKIL-cc8aFd0-bHwZFDEjAB52ItabX0,1341
487
487
  omlish/lite/inject.py,sha256=xvmLmtD3_2INnkurJQv76_Rkh9usbApEQrXJ4cvuVAk,29019
488
488
  omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
489
489
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
490
- omlish/lite/marshal.py,sha256=JD_8ox5-yeIo7MZ6iipCdiVxx33So52M02AtvFlRGC8,20392
490
+ omlish/lite/marshal.py,sha256=K_wnZwfC8cftGILyE3RlmzQEYuZOfzkMLKey41zuwtM,20296
491
491
  omlish/lite/maybes.py,sha256=0p_fzb6yiOjEpvMKaQ53Q6CH1VPW1or7v7Lt1JIKcgM,4359
492
492
  omlish/lite/maysyncs.py,sha256=MT3zF5kQ5rNlWU7db9Q_uXSM8K2C8LK85PIgdBsJyGE,7251
493
493
  omlish/lite/pycharm.py,sha256=FRHGcCDo42UzZXqNwW_DkhI-6kb_CmJKPiQ8F6mYkLA,1174
494
- omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
494
+ omlish/lite/reflect.py,sha256=gI-Qlws9V-jND7kvCQFaIhBFrndVpDsikTQ7C6U2z3w,2434
495
495
  omlish/lite/reprs.py,sha256=2Bc7ukhKvYNTKmxPIuv9glZIph13C37y_W4fg9pBnu8,2006
496
496
  omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
497
497
  omlish/lite/runtime.py,sha256=J59skBq9kwo1H2s36jAk-k87eKPUtua6CmuXh-3dgmE,464
@@ -500,7 +500,7 @@ omlish/lite/strings.py,sha256=QGxT1Yh4oI8ycsfeobxnjEhvDob_GiAKLeIhZwo1j24,1986
500
500
  omlish/lite/timeouts.py,sha256=mCFOCkOu_nmSDrccsm-wYY7uhyLDzAMyvrAO07y2vBE,4975
501
501
  omlish/lite/timing.py,sha256=aVu3hEDB_jyTF_ryZI7iU-xg4q8CNwqpp9Apfru_iwY,196
502
502
  omlish/lite/types.py,sha256=QM9whf55r7TmmQBRApIWSlyVKsl1p_jcut_YheyZMFY,146
503
- omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
503
+ omlish/lite/typing.py,sha256=m2CyJTz2OVOCPRvp-0UuEx7oleZgXqs3rYXijE0bTsA,1280
504
504
  omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
505
505
  omlish/logs/abc.py,sha256=ho4ABKYMKX-V7g4sp1BByuOLzslYzLlQ0MESmjEpT-o,8005
506
506
  omlish/logs/all.py,sha256=Er2NIcDvlMpuAcRr9b_uMHeoERU7I6lu5oLrDGRdV0U,728
@@ -519,7 +519,7 @@ omlish/logs/utils.py,sha256=OkFWf1exmWImmT7BaSiIC7c0Fk9tAis-PRqo8H4ny3c,398
519
519
  omlish/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
520
520
  omlish/manifests/base.py,sha256=Z5afzBJgI0tyTS8mPbYY4pYvoZu_xtdhRBOtZ3IIwzA,929
521
521
  omlish/manifests/globals.py,sha256=nrA85o8zFTEYv440Y1wgr7SmtW6AE_3jF_Dls6RB_nE,1661
522
- omlish/manifests/loading.py,sha256=kzJwESneZB1mAK6PsVPXvfNjr-MOXL7bbKQ8gEmbVkU,11984
522
+ omlish/manifests/loading.py,sha256=fb_kfJnjLPVZcYWINjf9sZS1VFFWLmugHnhH-M--ORc,12114
523
523
  omlish/manifests/static.py,sha256=7YwOVh_Ek9_aTrWsWNO8kWS10_j4K7yv3TpXZSHsvDY,501
524
524
  omlish/manifests/types.py,sha256=5hQuY-WZ9VMqHZXr-9Dayg380JsnX2vJzXyw6vC6UDs,317
525
525
  omlish/marshal/.dataclasses.json,sha256=wXWUy_IR8AolAa2RQnqn_mo2QnmVcvUJmayIykdVl0I,22
@@ -601,8 +601,8 @@ omlish/os/pidfiles/cli.py,sha256=dAKukx4mrarH8t7KZM4n_XSfTk3ycShGAFqRrirK5dw,207
601
601
  omlish/os/pidfiles/manager.py,sha256=oOnL90ttOG5ba_k9XPJ18reP7M5S-_30ln4OAfYV5W8,2357
602
602
  omlish/os/pidfiles/pidfile.py,sha256=KlqrW7I-lYVDNJspFHE89i_A0HTTteT5B99b7vpTfNs,4400
603
603
  omlish/os/pidfiles/pinning.py,sha256=u81LRe3-6Xd6K_dsVbbEPVdsUvY7zy3Xv7413-5NBLQ,6627
604
- omlish/reflect/__init__.py,sha256=9pzXLXXNMHkLhhI79iUr-o0SMOtR6HMUmAEUplZkIdE,853
605
- omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
604
+ omlish/reflect/__init__.py,sha256=ZUqqboWj5jLMVP1ljE5D9CnmXuSnsaWkKT3N9BKO0Mo,874
605
+ omlish/reflect/inspect.py,sha256=dUrVz8VfAdLVFtFpW416DxzVC17D80cvFb_g2Odzgq8,1823
606
606
  omlish/reflect/ops.py,sha256=F77OTaw0Uw020cJCWX_Q4kL3wvxlJ8jV8wz7BctGL_k,2619
607
607
  omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
608
608
  omlish/reflect/types.py,sha256=uMcxUHVJWYYcmF9ODeJ9WfcQ0DejsqsEVIX5K0HjJSM,12018
@@ -778,12 +778,12 @@ omlish/term/vt100/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
778
778
  omlish/term/vt100/c.py,sha256=93HARU6Dd1rVF-n8cAyXqkEqleYLcofuLgSUNd6-GbU,3537
779
779
  omlish/term/vt100/states.py,sha256=OxPUxfFTcfz56MhtDgIigEApChOtN6XO1g6R2H08mu4,8303
780
780
  omlish/term/vt100/terminal.py,sha256=KUlg331ele7P6SHsBKdbpdQFDKsxSply1Ds27NkppTs,9359
781
- omlish/testing/__init__.py,sha256=M_BQrcCHkoL-ZvE-UpQ8XxXNYRRawhjUz4rCJnAqM2A,152
782
- omlish/testing/testing.py,sha256=XOZTPjL8pggx2v5TUHUDjSgaU6lMnuPJ58hWoFQyzPY,2979
781
+ omlish/testing/__init__.py,sha256=h8GMv0PhVyMECsQoYuqoBzHjYO6UJyXBZvnozzUg9M8,171
782
+ omlish/testing/testing.py,sha256=tlBeqVmzGhjRbWygJt3mZljq662qR4nAaGNE2VoAey4,3617
783
783
  omlish/testing/pytest/__init__.py,sha256=i4ti6Q2rVYJ-XBk9UYDfUUagCrEDTC5jOeSykBjYYZQ,234
784
784
  omlish/testing/pytest/helpers.py,sha256=HxiKvpJQ4b6WCiQXOqQTqKbmr7CMAgCF6hViT6pfIuw,202
785
785
  omlish/testing/pytest/marks.py,sha256=g0RgdvFAd3xog3kKYyb9QtiUVPrEG3JX_abhDNrHJy0,285
786
- omlish/testing/pytest/skip.py,sha256=tra8FM5CZTh4M7ZWVf9YPmKUX4yhesf61XRoIkO4s9c,954
786
+ omlish/testing/pytest/skip.py,sha256=d4ivXMnnCXVxiRfIN17RzweodExTeWY0qeFf8gmEJhM,1061
787
787
  omlish/testing/pytest/inject/__init__.py,sha256=pdRKv1HcDmJ_yArKJbYITPXXZthRSGgBJWqITr0Er38,117
788
788
  omlish/testing/pytest/inject/harness.py,sha256=uaFDli1ovhue-kfXV5WXyLn6cVOWNQf_2vFD13r-JyQ,5700
789
789
  omlish/testing/pytest/plugins/__init__.py,sha256=ys1zXrYrNm7Uo6YOIVJ6Bd3dQo6kv387k7MbTYlqZSI,467
@@ -908,9 +908,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
908
908
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
909
909
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
910
910
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
911
- omlish-0.0.0.dev402.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
912
- omlish-0.0.0.dev402.dist-info/METADATA,sha256=vvELyku0Fo56crdctExjmjMC0AjhB2p8VclLoR2sxOE,18825
913
- omlish-0.0.0.dev402.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
914
- omlish-0.0.0.dev402.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
915
- omlish-0.0.0.dev402.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
916
- omlish-0.0.0.dev402.dist-info/RECORD,,
911
+ omlish-0.0.0.dev404.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
912
+ omlish-0.0.0.dev404.dist-info/METADATA,sha256=vyoFICI3BH21W8ZUiFMpGvbyhOkOu9JQ5QWL6Z918ak,18881
913
+ omlish-0.0.0.dev404.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
914
+ omlish-0.0.0.dev404.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
915
+ omlish-0.0.0.dev404.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
916
+ omlish-0.0.0.dev404.dist-info/RECORD,,