omlish 0.0.0.dev393__py3-none-any.whl → 0.0.0.dev395__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 +2 -2
- omlish/codecs/base.py +2 -2
- omlish/codecs/bytes.py +1 -1
- omlish/codecs/registry.py +3 -3
- omlish/codecs/text.py +1 -1
- omlish/diag/pydevd.py +2 -2
- omlish/diag/timers.py +184 -0
- omlish/formats/codecs.py +1 -1
- omlish/inject/impl/injector.py +1 -1
- omlish/inject/listeners.py +1 -1
- omlish/io/compress/codecs.py +1 -1
- omlish/lang/__init__.py +1 -0
- omlish/lang/cached/function.py +10 -0
- omlish/lang/contextmanagers.py +27 -0
- omlish/manifests/base.py +1 -1
- omlish/manifests/globals.py +11 -0
- omlish/manifests/{load.py → loading.py} +12 -7
- omlish/marshal/__init__.py +1 -1
- omlish/reflect/subst.py +43 -2
- {omlish-0.0.0.dev393.dist-info → omlish-0.0.0.dev395.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev393.dist-info → omlish-0.0.0.dev395.dist-info}/RECORD +26 -24
- /omlish/marshal/{global_.py → globals.py} +0 -0
- {omlish-0.0.0.dev393.dist-info → omlish-0.0.0.dev395.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev393.dist-info → omlish-0.0.0.dev395.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev393.dist-info → omlish-0.0.0.dev395.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev393.dist-info → omlish-0.0.0.dev395.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
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.
|
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.
|
93
|
+
aliases: ta.Sequence[str] | None = None
|
94
94
|
|
95
95
|
@classmethod
|
96
96
|
def new(
|
omlish/codecs/bytes.py
CHANGED
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
|
14
|
+
from ..manifests import globals as manifest_globals
|
15
15
|
else:
|
16
|
-
|
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 =
|
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.
|
129
|
+
aliases: ta.Sequence[str] | None = None,
|
130
130
|
*,
|
131
131
|
append_to: ta.MutableSequence[Codec] | None = None,
|
132
132
|
) -> TextEncodingCodec:
|
omlish/diag/pydevd.py
CHANGED
@@ -124,7 +124,7 @@ def is_present() -> bool:
|
|
124
124
|
|
125
125
|
def get_setup() -> dict | None:
|
126
126
|
if is_present():
|
127
|
-
return _pydevd().SetupHolder.setup
|
127
|
+
return check.not_none(_pydevd()).SetupHolder.setup
|
128
128
|
else:
|
129
129
|
return None
|
130
130
|
|
@@ -160,7 +160,7 @@ ARGS_ENV_VAR = 'PYDEVD_ARGS'
|
|
160
160
|
def get_args() -> list[str]:
|
161
161
|
check.state(is_present())
|
162
162
|
setup: ta.Mapping[ta.Any, ta.Any] = check.isinstance(get_setup(), dict)
|
163
|
-
args = [_pydevd().__file__]
|
163
|
+
args = [check.not_none(check.not_none(_pydevd()).__file__)]
|
164
164
|
|
165
165
|
for k in [
|
166
166
|
'port',
|
omlish/diag/timers.py
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
import atexit
|
2
|
+
import contextlib
|
3
|
+
import functools
|
4
|
+
import sys
|
5
|
+
import threading
|
6
|
+
import time
|
7
|
+
import typing as ta
|
8
|
+
|
9
|
+
from .. import check
|
10
|
+
from .. import lang
|
11
|
+
|
12
|
+
|
13
|
+
T = ta.TypeVar('T')
|
14
|
+
|
15
|
+
|
16
|
+
##
|
17
|
+
|
18
|
+
|
19
|
+
class _GlobalTimer:
|
20
|
+
def __init__(
|
21
|
+
self,
|
22
|
+
registry: '_GlobalTimerRegistry',
|
23
|
+
name: str,
|
24
|
+
*,
|
25
|
+
clock: ta.Callable[[], float] | None = None,
|
26
|
+
report_at_exit: bool = False,
|
27
|
+
report_out: ta.Any | None = None,
|
28
|
+
) -> None:
|
29
|
+
super().__init__()
|
30
|
+
|
31
|
+
self._registry = registry
|
32
|
+
self._name = name
|
33
|
+
|
34
|
+
if clock is None:
|
35
|
+
clock = time.monotonic
|
36
|
+
self._clock = clock
|
37
|
+
self._report_out = report_out
|
38
|
+
|
39
|
+
self._lock = threading.Lock()
|
40
|
+
|
41
|
+
self._c = 0
|
42
|
+
self._t = 0.
|
43
|
+
|
44
|
+
if report_at_exit:
|
45
|
+
atexit.register(self.report)
|
46
|
+
|
47
|
+
def report(self) -> None:
|
48
|
+
msg = (
|
49
|
+
f'{self._registry.module_name}::{self._name}: '
|
50
|
+
f'{self._c} calls, '
|
51
|
+
f'{self._t:.3f}s total'
|
52
|
+
)
|
53
|
+
|
54
|
+
print(
|
55
|
+
msg,
|
56
|
+
file=self._report_out if self._report_out is not None else sys.stderr,
|
57
|
+
)
|
58
|
+
|
59
|
+
@contextlib.contextmanager
|
60
|
+
def __call__(self) -> ta.Iterator[None]:
|
61
|
+
start = self._clock()
|
62
|
+
|
63
|
+
try:
|
64
|
+
yield
|
65
|
+
|
66
|
+
finally:
|
67
|
+
end = self._clock()
|
68
|
+
took = end - start
|
69
|
+
|
70
|
+
with self._lock:
|
71
|
+
self._c += 1
|
72
|
+
self._t += took
|
73
|
+
|
74
|
+
|
75
|
+
#
|
76
|
+
|
77
|
+
|
78
|
+
class _GlobalTimerRegistry:
|
79
|
+
def __init__(
|
80
|
+
self,
|
81
|
+
module_name: str,
|
82
|
+
) -> None:
|
83
|
+
super().__init__()
|
84
|
+
|
85
|
+
self._module_name = module_name
|
86
|
+
|
87
|
+
self._lock = threading.Lock()
|
88
|
+
|
89
|
+
self._timers: dict[str, _GlobalTimer] = {}
|
90
|
+
|
91
|
+
@property
|
92
|
+
def module_name(self) -> str:
|
93
|
+
return self._module_name
|
94
|
+
|
95
|
+
def get_timer(
|
96
|
+
self,
|
97
|
+
name: str,
|
98
|
+
**kwargs: ta.Any,
|
99
|
+
) -> _GlobalTimer:
|
100
|
+
return lang.double_check_setdefault(
|
101
|
+
self._lock,
|
102
|
+
self._timers,
|
103
|
+
name,
|
104
|
+
lambda: _GlobalTimer(
|
105
|
+
self,
|
106
|
+
name,
|
107
|
+
**kwargs,
|
108
|
+
),
|
109
|
+
)
|
110
|
+
|
111
|
+
|
112
|
+
_GLOBAL_LOCK = threading.Lock()
|
113
|
+
_GLOBAL_ATTR = '__global_timers_registry__'
|
114
|
+
|
115
|
+
|
116
|
+
def _get_global_registry(
|
117
|
+
globals: ta.MutableMapping[str, ta.Any], # noqa
|
118
|
+
) -> _GlobalTimerRegistry:
|
119
|
+
reg = lang.double_check_setdefault(
|
120
|
+
_GLOBAL_LOCK,
|
121
|
+
globals,
|
122
|
+
_GLOBAL_ATTR,
|
123
|
+
lambda: _GlobalTimerRegistry(
|
124
|
+
globals['__name__'],
|
125
|
+
),
|
126
|
+
)
|
127
|
+
|
128
|
+
return check.isinstance(reg, _GlobalTimerRegistry)
|
129
|
+
|
130
|
+
|
131
|
+
#
|
132
|
+
|
133
|
+
|
134
|
+
@contextlib.contextmanager
|
135
|
+
def global_timer_context(
|
136
|
+
globals: ta.MutableMapping[str, ta.Any], # noqa
|
137
|
+
name: str,
|
138
|
+
**kwargs: ta.Any,
|
139
|
+
) -> ta.Iterator[None]:
|
140
|
+
reg = _get_global_registry(globals)
|
141
|
+
timer = reg.get_timer(name, **kwargs)
|
142
|
+
with timer():
|
143
|
+
yield
|
144
|
+
|
145
|
+
|
146
|
+
#
|
147
|
+
|
148
|
+
|
149
|
+
class _GlobalTimerContextWrapped:
|
150
|
+
def __init__(
|
151
|
+
self,
|
152
|
+
fn: ta.Any,
|
153
|
+
timer: _GlobalTimer,
|
154
|
+
) -> None:
|
155
|
+
super().__init__()
|
156
|
+
|
157
|
+
self._fn = fn
|
158
|
+
self._timer = timer
|
159
|
+
|
160
|
+
functools.update_wrapper(self, fn)
|
161
|
+
|
162
|
+
def __get__(self, instance, owner=None):
|
163
|
+
return self.__class__(
|
164
|
+
self._fn.__get__(instance, owner),
|
165
|
+
self._timer,
|
166
|
+
)
|
167
|
+
|
168
|
+
def __call__(self, *args, **kwargs):
|
169
|
+
with self._timer():
|
170
|
+
return self._fn(*args, **kwargs)
|
171
|
+
|
172
|
+
|
173
|
+
def global_timer_wrap(
|
174
|
+
globals: ta.MutableMapping[str, ta.Any], # noqa
|
175
|
+
name: str,
|
176
|
+
**kwargs: ta.Any,
|
177
|
+
) -> ta.Callable[[T], T]:
|
178
|
+
reg = _get_global_registry(globals)
|
179
|
+
timer = reg.get_timer(name, **kwargs)
|
180
|
+
|
181
|
+
def inner(fn):
|
182
|
+
return _GlobalTimerContextWrapped(fn, timer)
|
183
|
+
|
184
|
+
return inner
|
omlish/formats/codecs.py
CHANGED
omlish/inject/impl/injector.py
CHANGED
@@ -69,7 +69,7 @@ class InjectorImpl(Injector, lang.Final):
|
|
69
69
|
self._bim = ec.binding_impl_map()
|
70
70
|
self._ekbs = ec.eager_keys_by_scope()
|
71
71
|
self._pls: tuple[ProvisionListener, ...] = tuple(
|
72
|
-
b.listener
|
72
|
+
b.listener # type: ignore[attr-defined]
|
73
73
|
for b in itertools.chain(
|
74
74
|
ec.elements_of_type(ProvisionListenerBinding),
|
75
75
|
(p._pls if p is not None else ()), # noqa
|
omlish/inject/listeners.py
CHANGED
omlish/io/compress/codecs.py
CHANGED
omlish/lang/__init__.py
CHANGED
omlish/lang/cached/function.py
CHANGED
@@ -415,6 +415,16 @@ class _DescriptorCachedFunction(_CachedFunction[T]):
|
|
415
415
|
#
|
416
416
|
|
417
417
|
|
418
|
+
@ta.overload
|
419
|
+
def cached_function(fn: None = None, **kwargs: ta.Any) -> ta.Callable[[CallableT], CallableT]:
|
420
|
+
...
|
421
|
+
|
422
|
+
|
423
|
+
@ta.overload
|
424
|
+
def cached_function(fn: CallableT, **kwargs: ta.Any) -> CallableT:
|
425
|
+
...
|
426
|
+
|
427
|
+
|
418
428
|
def cached_function(fn=None, **kwargs): # noqa
|
419
429
|
if fn is None:
|
420
430
|
return functools.partial(cached_function, **kwargs)
|
omlish/lang/contextmanagers.py
CHANGED
@@ -13,6 +13,8 @@ import typing as ta
|
|
13
13
|
|
14
14
|
|
15
15
|
T = ta.TypeVar('T')
|
16
|
+
K = ta.TypeVar('K')
|
17
|
+
V = ta.TypeVar('V')
|
16
18
|
|
17
19
|
|
18
20
|
##
|
@@ -286,3 +288,28 @@ class Timer:
|
|
286
288
|
|
287
289
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
288
290
|
self._end = self._clock()
|
291
|
+
|
292
|
+
|
293
|
+
##
|
294
|
+
|
295
|
+
|
296
|
+
def double_check_setdefault(
|
297
|
+
cm: ta.ContextManager,
|
298
|
+
dct: ta.MutableMapping[K, V],
|
299
|
+
k: K,
|
300
|
+
fn: ta.Callable[[], V],
|
301
|
+
) -> V:
|
302
|
+
try:
|
303
|
+
return dct[k]
|
304
|
+
except KeyError:
|
305
|
+
pass
|
306
|
+
|
307
|
+
with cm:
|
308
|
+
try:
|
309
|
+
return dct[k]
|
310
|
+
except KeyError:
|
311
|
+
pass
|
312
|
+
|
313
|
+
v = fn()
|
314
|
+
dct[k] = v
|
315
|
+
return v
|
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.
|
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]:
|
@@ -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
|
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()
|
omlish/marshal/__init__.py
CHANGED
omlish/reflect/subst.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import abc
|
1
2
|
import dataclasses as dc
|
2
3
|
import types
|
3
4
|
import typing as ta
|
@@ -22,6 +23,9 @@ else:
|
|
22
23
|
cache = lang.proxy_import('.collections.cache', __package__)
|
23
24
|
|
24
25
|
|
26
|
+
GenericBasesMap: ta.TypeAlias = ta.Mapping[Type, tuple[Type, ...]]
|
27
|
+
|
28
|
+
|
25
29
|
##
|
26
30
|
|
27
31
|
|
@@ -69,22 +73,35 @@ def replace_type_vars(
|
|
69
73
|
return rec(ty)
|
70
74
|
|
71
75
|
|
76
|
+
##
|
77
|
+
|
78
|
+
|
79
|
+
_DEFAULT_SIMPLE_GENERIC_BASES: dict[Type, tuple[Type, ...]] = {}
|
80
|
+
DEFAULT_SIMPLE_GENERIC_BASES: GenericBasesMap = _DEFAULT_SIMPLE_GENERIC_BASES
|
81
|
+
|
82
|
+
|
72
83
|
class GenericSubstitution:
|
73
84
|
def __init__(
|
74
85
|
self,
|
75
86
|
*,
|
76
87
|
update_aliases: bool = False,
|
77
88
|
cache_size: int = 0, # FIXME: ta.Generic isn't weakrefable..
|
89
|
+
simple_generic_bases: GenericBasesMap | None = None,
|
78
90
|
) -> None:
|
79
91
|
super().__init__()
|
80
92
|
|
81
93
|
self._update_aliases = update_aliases
|
94
|
+
self._simple_generic_bases = simple_generic_bases
|
82
95
|
|
83
96
|
if cache_size > 0:
|
84
97
|
self.get_generic_bases = cache.cache(weak_keys=True, max_size=cache_size)(self.get_generic_bases) # type: ignore # noqa
|
85
98
|
self.generic_mro = cache.cache(weak_keys=True, max_size=cache_size)(self.generic_mro) # type: ignore
|
86
99
|
|
87
100
|
def get_generic_bases(self, ty: Type) -> tuple[Type, ...]:
|
101
|
+
if (sgm := self._simple_generic_bases) is not None:
|
102
|
+
if (sgb := sgm.get(ty)) is not None:
|
103
|
+
return sgb
|
104
|
+
|
88
105
|
if (cty := get_concrete_type(ty)) is not None:
|
89
106
|
rpl = get_type_var_replacements(ty)
|
90
107
|
ret: list[Type] = []
|
@@ -97,6 +114,7 @@ class GenericSubstitution:
|
|
97
114
|
rty = replace_type_vars(bty, rpl, update_aliases=self._update_aliases)
|
98
115
|
ret.append(rty)
|
99
116
|
return tuple(ret)
|
117
|
+
|
100
118
|
return ()
|
101
119
|
|
102
120
|
def generic_mro(self, obj: ta.Any) -> list[Type]:
|
@@ -108,9 +126,32 @@ class GenericSubstitution:
|
|
108
126
|
return [ty for ty in mro if get_concrete_type(ty) is not ta.Generic]
|
109
127
|
|
110
128
|
|
111
|
-
DEFAULT_GENERIC_SUBSTITUTION = GenericSubstitution(
|
129
|
+
DEFAULT_GENERIC_SUBSTITUTION = GenericSubstitution(
|
130
|
+
simple_generic_bases=DEFAULT_SIMPLE_GENERIC_BASES,
|
131
|
+
)
|
112
132
|
|
113
133
|
get_generic_bases = DEFAULT_GENERIC_SUBSTITUTION.get_generic_bases
|
114
134
|
generic_mro = DEFAULT_GENERIC_SUBSTITUTION.generic_mro
|
115
135
|
|
116
|
-
ALIAS_UPDATING_GENERIC_SUBSTITUTION = GenericSubstitution(
|
136
|
+
ALIAS_UPDATING_GENERIC_SUBSTITUTION = GenericSubstitution(
|
137
|
+
update_aliases=True,
|
138
|
+
simple_generic_bases=DEFAULT_SIMPLE_GENERIC_BASES,
|
139
|
+
)
|
140
|
+
|
141
|
+
|
142
|
+
##
|
143
|
+
|
144
|
+
|
145
|
+
_DEFAULT_SIMPLE_GENERIC_BASE_LIST: ta.Sequence[Type] = [
|
146
|
+
object,
|
147
|
+
abc.ABC,
|
148
|
+
lang.Abstract,
|
149
|
+
lang.Sealed,
|
150
|
+
lang.PackageSealed,
|
151
|
+
lang.Final,
|
152
|
+
]
|
153
|
+
|
154
|
+
_DEFAULT_SIMPLE_GENERIC_BASES.update({
|
155
|
+
b: get_generic_bases(b)
|
156
|
+
for b in _DEFAULT_SIMPLE_GENERIC_BASE_LIST
|
157
|
+
})
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=FuuxNeWOcrs5N-mVO5nyHgXH5qq9LTs3IR3eBUDgIFc,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=
|
73
|
-
omlish/codecs/bytes.py,sha256=
|
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=
|
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=
|
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
|
@@ -212,8 +212,9 @@ omlish/diag/procfs.py,sha256=KaGTAA2Gj8eEEp7MjClRe4aimwzd-HDABThFzvq2cBQ,9684
|
|
212
212
|
omlish/diag/procstats.py,sha256=EJEe2Zc58ykBoTfqMXro7H52aQa_pd6uC2hsIPFceso,825
|
213
213
|
omlish/diag/ps.py,sha256=MEpMU6fbkh0bSWrOHh_okOa0JDTUSUQUVSYBdh1TGvE,1672
|
214
214
|
omlish/diag/pycharm.py,sha256=9Mgn5T2ZdlEUL3VV-GzVmCBs_ZtIpLwaUzP6pgHEUEo,4712
|
215
|
-
omlish/diag/pydevd.py,sha256=
|
215
|
+
omlish/diag/pydevd.py,sha256=WPfDgsLe-zCOpnPMlAYEVliTQxk4jmcOKvI19nd-SAI,7589
|
216
216
|
omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
|
217
|
+
omlish/diag/timers.py,sha256=44zoMx5tulfoWcHfx65ga7_zM8P9fVzBYMka8Elup6w,3785
|
217
218
|
omlish/diag/_pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
218
219
|
omlish/diag/_pycharm/runhack.py,sha256=f4R9SOH0nDfO2WqPh0xQ9-45qOLrtTVysS-hSwtbdOA,37864
|
219
220
|
omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
|
@@ -245,7 +246,7 @@ omlish/dom/rendering.py,sha256=5cQK3A_uifh3Th5v3c0nx-tW8d1KyGL6C9tASPaNVNI,4336
|
|
245
246
|
omlish/formats/__init__.py,sha256=T0AG1gFnqQ5JiHN0UPQjQ-7g5tnxMIG-mgOvMYExYAM,21
|
246
247
|
omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
|
247
248
|
omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
|
248
|
-
omlish/formats/codecs.py,sha256=
|
249
|
+
omlish/formats/codecs.py,sha256=HBQzco_BT73xshv2l8FrDTaAKTH-A8Y4vXiabXPELGY,1655
|
249
250
|
omlish/formats/dotenv.py,sha256=60RHhpNmLhqT7ISeA79MmSc7Sq8AxF5nKj7VPjdroZU,19320
|
250
251
|
omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
|
251
252
|
omlish/formats/props.py,sha256=rPycJ-_b76NSNc2b_dZ0F0zyKzuXK8v6K6fqcV8uCRQ,18933
|
@@ -364,7 +365,7 @@ omlish/inject/errors.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
|
|
364
365
|
omlish/inject/injector.py,sha256=fyvaRoJXo_oibx1_IiGkncP9oXnZSKtDm7-ULNKRXHE,1071
|
365
366
|
omlish/inject/inspect.py,sha256=Uq4KMloGWF_YS2mgZbrx-JXhZQnYHHKJSr68i9yoBVc,597
|
366
367
|
omlish/inject/keys.py,sha256=7jnI2cw7cvLlzZAfe5SC50O3oPOpOB6iGZGTigyfQvs,682
|
367
|
-
omlish/inject/listeners.py,sha256=
|
368
|
+
omlish/inject/listeners.py,sha256=Ffaun2fVWAgAwKgLdgziJynG_jhAWaaPEsy-2I2Cmpw,599
|
368
369
|
omlish/inject/managed.py,sha256=-9aBm1vRPOjNz4kgOmpt8S2T55s727t9RiggFBH8maU,2096
|
369
370
|
omlish/inject/multis.py,sha256=Dn63jE8P5ahSKc1IDBdzzx6ByBCgVOth5t4frG9m4UA,3336
|
370
371
|
omlish/inject/origins.py,sha256=-qXa18rIIkNwBdTrvASRDjgPYnoY6n6OPC222jJDrXg,551
|
@@ -378,7 +379,7 @@ omlish/inject/utils.py,sha256=Gc2qq45KgkyqDt03WSvOEZBCiuqQ6ESwplx5ZRBcY5M,413
|
|
378
379
|
omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
379
380
|
omlish/inject/impl/bindings.py,sha256=xSvUcoDz8NH-aNHPwBPEZsFg73K2WcF_A63npVbGt_k,420
|
380
381
|
omlish/inject/impl/elements.py,sha256=PM_055moROskSTQqmohEa6I0tt1OQ-VRNArXCMG6vyk,5947
|
381
|
-
omlish/inject/impl/injector.py,sha256=
|
382
|
+
omlish/inject/impl/injector.py,sha256=QRhNM5m6Ua7VhFa6u5rgxR7Iu6PViJ6_h7d8CFSvPO4,7575
|
382
383
|
omlish/inject/impl/inspect.py,sha256=reXkNsjyvJXva5379tHTWklVK0vzqGLP0BgI_4VVPgQ,3116
|
383
384
|
omlish/inject/impl/multis.py,sha256=j2QHSpJp0jPv10yZEZJwi0w62kXFQ25gkHa026xv4-Q,2053
|
384
385
|
omlish/inject/impl/origins.py,sha256=dgGdkoMN6I4DZrWjlpZYijeFsrF6Up1WPq_QSAgTtuQ,1676
|
@@ -398,7 +399,7 @@ omlish/io/compress/adapters.py,sha256=LJHhjwMHXstoLyX_q0QhGoBAcqyYGWfzhzQbGBXHzH
|
|
398
399
|
omlish/io/compress/base.py,sha256=X-B9zC_JAJ84ozO4Vl_7mG3o6zkF6jZfcXO5JmDftGk,620
|
399
400
|
omlish/io/compress/brotli.py,sha256=sNDX5HmEVqg9_xID5NTFPAWuvlNPw5ixfOnnIWwZf_o,1189
|
400
401
|
omlish/io/compress/bz2.py,sha256=HtwBuBYHJ3MyWO9xJ0XhWpyIYTA3OszLrpu_J4kRRPA,1534
|
401
|
-
omlish/io/compress/codecs.py,sha256=
|
402
|
+
omlish/io/compress/codecs.py,sha256=dpJKoELXy_xF5nLnQYGNu19tmHEaUPyyk7fVsOlXsWk,1790
|
402
403
|
omlish/io/compress/gzip.py,sha256=6nCWycCYo0_4cTMu4QMhu23MT1xbrwyf7E8sGGBkR_w,12199
|
403
404
|
omlish/io/compress/lz4.py,sha256=qaze1yVXexjJyN18Adh8fbTm_5pEeyytx66KoMUNpCU,2759
|
404
405
|
omlish/io/compress/lzma.py,sha256=qDyshBgBUSPcZpAyXiRXnqI7zx7x60UpPxn8K3nN8aM,2469
|
@@ -420,13 +421,13 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
|
|
420
421
|
omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
|
421
422
|
omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
|
422
423
|
omlish/iterators/unique.py,sha256=Nw0pSaNEcHAkve0ugfLPvJcirDOn9ECyC5wIL8JlJKI,1395
|
423
|
-
omlish/lang/__init__.py,sha256=
|
424
|
+
omlish/lang/__init__.py,sha256=6BdwvNwV1p8O_bcnfa6Upjdb7Ah15VfxtliDo76fm4U,6843
|
424
425
|
omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
|
425
426
|
omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
|
426
427
|
omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
|
427
428
|
omlish/lang/collections.py,sha256=XI76WcSi4SclWmEGirErg7EzQUfjtmiK2xSK7jJISzY,2528
|
428
429
|
omlish/lang/comparison.py,sha256=MOwEG0Yny-jBPHO9kQto9FSRyeNpQW24UABsghkrHxY,1356
|
429
|
-
omlish/lang/contextmanagers.py,sha256=
|
430
|
+
omlish/lang/contextmanagers.py,sha256=7atRNgR13cgynKIgrDZNLq5qAV52xWy8ISeOVaL6HrQ,7627
|
430
431
|
omlish/lang/datetimes.py,sha256=01tg21QOx-PWDlm-CSFTalym3vpqF0EKzeinmtcVNoU,379
|
431
432
|
omlish/lang/descriptors.py,sha256=zBtgO9LjdSTGHNUgiIqswh78WOVoGH6KzS0NbgB1Wls,6572
|
432
433
|
omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
|
@@ -447,7 +448,7 @@ omlish/lang/strings.py,sha256=TY-v0iGu6BxEKb99YS-VmIJqc-sTAqMv7mCDJQALMnI,4550
|
|
447
448
|
omlish/lang/sys.py,sha256=KPe1UOXk1VxlOYt_aLmhN0KqsA4wnP-4nm4WEwO49pw,411
|
448
449
|
omlish/lang/typing.py,sha256=eWI3RKhVi-_SV2rN4SGq8IbFo5XbGapbiWeduF97uG8,3846
|
449
450
|
omlish/lang/cached/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
450
|
-
omlish/lang/cached/function.py,sha256=
|
451
|
+
omlish/lang/cached/function.py,sha256=epDPy9WyGc_VaKTrEQJ3dZun-NLsvdvbbNd7jbaUM2c,11730
|
451
452
|
omlish/lang/cached/property.py,sha256=WHYyg4-6EA86TcNMfbXTjVhjEZPc0kngt9hfY3WN5w8,2768
|
452
453
|
omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
453
454
|
omlish/lang/classes/abstract.py,sha256=5G3TXelpy5PRWa2x8G_Im4SPymGKrOBK6sELRyOG9eg,3796
|
@@ -506,15 +507,16 @@ omlish/logs/standard.py,sha256=w0jS824YDvlzrGgAxKiPk9RoZ5V1b0ADiFsBEpKLuLY,3152
|
|
506
507
|
omlish/logs/timing.py,sha256=qsQ3DB6swts1pxrFlmLWQzhH-3nzDrq1MUu7PxjjUyU,1519
|
507
508
|
omlish/logs/utils.py,sha256=OkFWf1exmWImmT7BaSiIC7c0Fk9tAis-PRqo8H4ny3c,398
|
508
509
|
omlish/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
509
|
-
omlish/manifests/base.py,sha256=
|
510
|
-
omlish/manifests/
|
510
|
+
omlish/manifests/base.py,sha256=YBK6jxMgY5G3hK0ZBlbU-tghzifkGhwRTyWa5XqOmno,939
|
511
|
+
omlish/manifests/globals.py,sha256=LZm4ueBjlC023uxL8zvivSyzMgx5O8kSbo9oNfhF_DE,206
|
512
|
+
omlish/manifests/loading.py,sha256=S-yEGsnBEu670ya6Bc09QqbRtA5rBp5rA4D3zuJUl9M,8070
|
511
513
|
omlish/manifests/static.py,sha256=7YwOVh_Ek9_aTrWsWNO8kWS10_j4K7yv3TpXZSHsvDY,501
|
512
514
|
omlish/manifests/types.py,sha256=5hQuY-WZ9VMqHZXr-9Dayg380JsnX2vJzXyw6vC6UDs,317
|
513
|
-
omlish/marshal/__init__.py,sha256=
|
515
|
+
omlish/marshal/__init__.py,sha256=MtQkMih6iJO0S7tbzVWBUjDr9wQhiCm3poTyLslaPFo,3584
|
514
516
|
omlish/marshal/base.py,sha256=3GMrhJBcnVrVtlQRQLOMgvV66MciAYpHKEQi5Ns3dIk,11853
|
515
517
|
omlish/marshal/errors.py,sha256=g5XJyTHd__8lfwQ4KwgK-E5WR6MoNTMrqKP2U_QRQQQ,307
|
516
518
|
omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
|
517
|
-
omlish/marshal/
|
519
|
+
omlish/marshal/globals.py,sha256=vNLpwQVt7Nn9sA5bBh7c_JYcUu9-1CLyENq1zBH-rcM,1510
|
518
520
|
omlish/marshal/naming.py,sha256=ELs-NtWhw6RCSEF_y98cMyzr37pj0DV_bG9yQmto_NA,857
|
519
521
|
omlish/marshal/proxy.py,sha256=i7xZQN6BSGz4nBM4CTj0S6RcSlDEgrZmX9fbtFpAPco,548
|
520
522
|
omlish/marshal/registries.py,sha256=5YtvjYDw8Wu7uigCzlrVzC1pHajoNFZtN2dFNmKrbTI,2358
|
@@ -591,7 +593,7 @@ omlish/os/pidfiles/pinning.py,sha256=L1MZp7UiBg3uzeDgvt8ScWJHwuIHXZGhgl47hTiiMjY
|
|
591
593
|
omlish/reflect/__init__.py,sha256=9pzXLXXNMHkLhhI79iUr-o0SMOtR6HMUmAEUplZkIdE,853
|
592
594
|
omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
|
593
595
|
omlish/reflect/ops.py,sha256=F77OTaw0Uw020cJCWX_Q4kL3wvxlJ8jV8wz7BctGL_k,2619
|
594
|
-
omlish/reflect/subst.py,sha256=
|
596
|
+
omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
|
595
597
|
omlish/reflect/types.py,sha256=uMcxUHVJWYYcmF9ODeJ9WfcQ0DejsqsEVIX5K0HjJSM,12018
|
596
598
|
omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
597
599
|
omlish/secrets/all.py,sha256=gv_d9SfyMxso30HsrSz9XmIrSZOdl3rLA5MSH0ZXfgM,486
|
@@ -895,9 +897,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
895
897
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
896
898
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
897
899
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
898
|
-
omlish-0.0.0.
|
899
|
-
omlish-0.0.0.
|
900
|
-
omlish-0.0.0.
|
901
|
-
omlish-0.0.0.
|
902
|
-
omlish-0.0.0.
|
903
|
-
omlish-0.0.0.
|
900
|
+
omlish-0.0.0.dev395.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
901
|
+
omlish-0.0.0.dev395.dist-info/METADATA,sha256=ZqPTvTt208Mup_mKu_mh3_u3MV3tBDxdKuohtwmfK_o,18825
|
902
|
+
omlish-0.0.0.dev395.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
903
|
+
omlish-0.0.0.dev395.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
904
|
+
omlish-0.0.0.dev395.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
905
|
+
omlish-0.0.0.dev395.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|