omlish 0.0.0.dev394__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/diag/pydevd.py +2 -2
- omlish/diag/timers.py +184 -0
- omlish/inject/impl/injector.py +1 -1
- omlish/inject/listeners.py +1 -1
- omlish/lang/__init__.py +1 -0
- omlish/lang/cached/function.py +10 -0
- omlish/lang/contextmanagers.py +27 -0
- omlish/reflect/subst.py +43 -2
- {omlish-0.0.0.dev394.dist-info → omlish-0.0.0.dev395.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev394.dist-info → omlish-0.0.0.dev395.dist-info}/RECORD +15 -14
- {omlish-0.0.0.dev394.dist-info → omlish-0.0.0.dev395.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev394.dist-info → omlish-0.0.0.dev395.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev394.dist-info → omlish-0.0.0.dev395.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev394.dist-info → omlish-0.0.0.dev395.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
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/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/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/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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -592,7 +593,7 @@ omlish/os/pidfiles/pinning.py,sha256=L1MZp7UiBg3uzeDgvt8ScWJHwuIHXZGhgl47hTiiMjY
|
|
592
593
|
omlish/reflect/__init__.py,sha256=9pzXLXXNMHkLhhI79iUr-o0SMOtR6HMUmAEUplZkIdE,853
|
593
594
|
omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
|
594
595
|
omlish/reflect/ops.py,sha256=F77OTaw0Uw020cJCWX_Q4kL3wvxlJ8jV8wz7BctGL_k,2619
|
595
|
-
omlish/reflect/subst.py,sha256=
|
596
|
+
omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
|
596
597
|
omlish/reflect/types.py,sha256=uMcxUHVJWYYcmF9ODeJ9WfcQ0DejsqsEVIX5K0HjJSM,12018
|
597
598
|
omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
598
599
|
omlish/secrets/all.py,sha256=gv_d9SfyMxso30HsrSz9XmIrSZOdl3rLA5MSH0ZXfgM,486
|
@@ -896,9 +897,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
896
897
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
897
898
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
898
899
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
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.
|
904
|
-
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
|