omlish 0.0.0.dev428__py3-none-any.whl → 0.0.0.dev430__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/collections/cache/impl.py +2 -2
- omlish/daemons/daemon.py +2 -2
- omlish/daemons/launching.py +2 -2
- omlish/diag/procfs.py +2 -2
- omlish/diag/replserver/console.py +2 -2
- omlish/diag/replserver/server.py +2 -2
- omlish/http/asgi.py +2 -2
- omlish/inject/impl/injector.py +2 -2
- omlish/lang/asyncs.py +2 -6
- omlish/lite/attrops.py +14 -9
- omlish/logs/all.py +37 -0
- omlish/logs/base.py +2 -2
- omlish/logs/callers.py +8 -6
- omlish/logs/infos.py +20 -19
- omlish/logs/levels.py +46 -13
- omlish/logs/modules.py +1 -1
- omlish/logs/protocols.py +1 -0
- omlish/logs/std/{adapters.py → loggers.py} +3 -0
- omlish/logs/times.py +7 -5
- omlish/logs/typed/types.py +1 -0
- omlish/sockets/server/server.py +1 -1
- {omlish-0.0.0.dev428.dist-info → omlish-0.0.0.dev430.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev428.dist-info → omlish-0.0.0.dev430.dist-info}/RECORD +28 -28
- {omlish-0.0.0.dev428.dist-info → omlish-0.0.0.dev430.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev428.dist-info → omlish-0.0.0.dev430.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev428.dist-info → omlish-0.0.0.dev430.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev428.dist-info → omlish-0.0.0.dev430.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/collections/cache/impl.py
CHANGED
@@ -10,12 +10,12 @@ TODO:
|
|
10
10
|
import collections
|
11
11
|
import contextlib
|
12
12
|
import functools
|
13
|
-
import logging
|
14
13
|
import time
|
15
14
|
import typing as ta
|
16
15
|
import weakref
|
17
16
|
|
18
17
|
from ... import lang
|
18
|
+
from ...logs import all as logs
|
19
19
|
from .types import Cache
|
20
20
|
from .types import Eviction
|
21
21
|
from .types import OverweightError
|
@@ -27,7 +27,7 @@ V = ta.TypeVar('V')
|
|
27
27
|
V2 = ta.TypeVar('V2')
|
28
28
|
|
29
29
|
|
30
|
-
log =
|
30
|
+
log = logs.get_module_logger(globals())
|
31
31
|
|
32
32
|
|
33
33
|
##
|
omlish/daemons/daemon.py
CHANGED
@@ -16,13 +16,13 @@ TODO:
|
|
16
16
|
- pickle protocol, revision / venv check, multiprocessing manager support
|
17
17
|
"""
|
18
18
|
import itertools
|
19
|
-
import logging
|
20
19
|
import os.path
|
21
20
|
import time
|
22
21
|
|
23
22
|
from .. import check
|
24
23
|
from .. import dataclasses as dc
|
25
24
|
from .. import lang
|
25
|
+
from ..logs import all as logs
|
26
26
|
from ..os.pidfiles.pidfile import Pidfile
|
27
27
|
from .launching import Launcher
|
28
28
|
from .spawning import Spawning
|
@@ -31,7 +31,7 @@ from .waiting import Wait
|
|
31
31
|
from .waiting import waiter_for
|
32
32
|
|
33
33
|
|
34
|
-
log =
|
34
|
+
log = logs.get_module_logger(globals())
|
35
35
|
|
36
36
|
|
37
37
|
##
|
omlish/daemons/launching.py
CHANGED
@@ -5,12 +5,12 @@ TODO:
|
|
5
5
|
"""
|
6
6
|
import contextlib
|
7
7
|
import functools
|
8
|
-
import logging
|
9
8
|
import threading
|
10
9
|
import typing as ta
|
11
10
|
|
12
11
|
from .. import check
|
13
12
|
from .. import lang
|
13
|
+
from ..logs import all as logs
|
14
14
|
from ..os.pidfiles.manager import open_inheritable_pidfile
|
15
15
|
from ..os.pidfiles.pidfile import Pidfile
|
16
16
|
from .reparent import reparent_process
|
@@ -23,7 +23,7 @@ from .targets import Target
|
|
23
23
|
from .targets import target_runner_for
|
24
24
|
|
25
25
|
|
26
|
-
log =
|
26
|
+
log = logs.get_module_logger(globals())
|
27
27
|
|
28
28
|
|
29
29
|
##
|
omlish/diag/procfs.py
CHANGED
@@ -3,7 +3,6 @@ TODO:
|
|
3
3
|
- dataclasses
|
4
4
|
"""
|
5
5
|
import argparse
|
6
|
-
import logging
|
7
6
|
import os
|
8
7
|
import re
|
9
8
|
import resource
|
@@ -14,11 +13,12 @@ import typing as ta
|
|
14
13
|
from .. import iterators as it
|
15
14
|
from .. import lang
|
16
15
|
from ..formats import json
|
16
|
+
from ..logs import all as logs
|
17
17
|
from ..os.sizes import PAGE_SIZE
|
18
18
|
from .procstats import ProcStats
|
19
19
|
|
20
20
|
|
21
|
-
log =
|
21
|
+
log = logs.get_module_logger(globals())
|
22
22
|
|
23
23
|
|
24
24
|
PidLike = int | str
|
@@ -17,7 +17,6 @@ def _attach(repl):
|
|
17
17
|
import ast
|
18
18
|
import codeop
|
19
19
|
import errno
|
20
|
-
import logging
|
21
20
|
import socket as sock
|
22
21
|
import sys
|
23
22
|
import threading
|
@@ -26,9 +25,10 @@ import types
|
|
26
25
|
import typing as ta
|
27
26
|
|
28
27
|
from ... import check
|
28
|
+
from ...logs import all as logs
|
29
29
|
|
30
30
|
|
31
|
-
log =
|
31
|
+
log = logs.get_module_logger(globals())
|
32
32
|
|
33
33
|
|
34
34
|
##
|
omlish/diag/replserver/server.py
CHANGED
@@ -22,7 +22,6 @@ socat - UNIX-CONNECT:repl.sock
|
|
22
22
|
"""
|
23
23
|
import contextlib
|
24
24
|
import functools
|
25
|
-
import logging
|
26
25
|
import os
|
27
26
|
import socket as sock
|
28
27
|
import threading
|
@@ -31,10 +30,11 @@ import weakref
|
|
31
30
|
|
32
31
|
from ... import check
|
33
32
|
from ... import dataclasses as dc
|
33
|
+
from ...logs import all as logs
|
34
34
|
from .console import InteractiveSocketConsole
|
35
35
|
|
36
36
|
|
37
|
-
log =
|
37
|
+
log = logs.get_module_logger(globals())
|
38
38
|
|
39
39
|
|
40
40
|
##
|
omlish/http/asgi.py
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
import abc
|
2
|
-
import logging
|
3
2
|
import typing as ta
|
4
3
|
import urllib.parse
|
5
4
|
|
6
5
|
from .. import check
|
7
6
|
from .. import lang
|
7
|
+
from ..logs import all as logs
|
8
8
|
from . import consts
|
9
9
|
|
10
10
|
|
11
|
-
log =
|
11
|
+
log = logs.get_module_logger(globals())
|
12
12
|
|
13
13
|
|
14
14
|
##
|
omlish/inject/impl/injector.py
CHANGED
@@ -16,12 +16,12 @@ TODO:
|
|
16
16
|
import contextlib
|
17
17
|
import functools
|
18
18
|
import itertools
|
19
|
-
import logging
|
20
19
|
import typing as ta
|
21
20
|
import weakref
|
22
21
|
|
23
22
|
from ... import check
|
24
23
|
from ... import lang
|
24
|
+
from ...logs import all as logs
|
25
25
|
from ..elements import Elements
|
26
26
|
from ..errors import CyclicDependencyError
|
27
27
|
from ..errors import UnboundKeyError
|
@@ -42,7 +42,7 @@ from .scopes import ScopeImpl
|
|
42
42
|
from .scopes import make_scope_impl
|
43
43
|
|
44
44
|
|
45
|
-
log =
|
45
|
+
log = logs.get_module_logger(globals())
|
46
46
|
|
47
47
|
|
48
48
|
##
|
omlish/lang/asyncs.py
CHANGED
@@ -19,9 +19,7 @@ def as_async(fn: ta.Callable[P, T], *, wrap: bool = False) -> ta.Callable[P, ta.
|
|
19
19
|
##
|
20
20
|
|
21
21
|
|
22
|
-
async def async_list(
|
23
|
-
ai: ta.AsyncIterable[T],
|
24
|
-
) -> list[T]:
|
22
|
+
async def async_list(ai: ta.AsyncIterable[T]) -> list[T]:
|
25
23
|
"""Simply eagerly reads the full contents of a function call returning an async iterator."""
|
26
24
|
|
27
25
|
return [v async for v in ai]
|
@@ -30,9 +28,7 @@ async def async_list(
|
|
30
28
|
##
|
31
29
|
|
32
30
|
|
33
|
-
def sync_await(
|
34
|
-
aw: ta.Awaitable[T],
|
35
|
-
) -> T:
|
31
|
+
def sync_await(aw: ta.Awaitable[T]) -> T:
|
36
32
|
"""
|
37
33
|
Allows for the synchronous execution of async functions which will never actually *externally* await anything. These
|
38
34
|
functions are allowed to await any number of other functions - including contextmanagers and generators - so long as
|
omlish/lite/attrops.py
CHANGED
@@ -285,8 +285,6 @@ class AttrOps(ta.Generic[T]):
|
|
285
285
|
self._eq = _eq
|
286
286
|
return _eq
|
287
287
|
|
288
|
-
#
|
289
|
-
|
290
288
|
@property
|
291
289
|
def hash_eq(self) -> ta.Tuple[
|
292
290
|
ta.Callable[[T], int],
|
@@ -294,6 +292,8 @@ class AttrOps(ta.Generic[T]):
|
|
294
292
|
]:
|
295
293
|
return (self.hash, self.eq)
|
296
294
|
|
295
|
+
#
|
296
|
+
|
297
297
|
@property
|
298
298
|
def repr_hash_eq(self) -> ta.Tuple[
|
299
299
|
ta.Callable[[T], str],
|
@@ -304,20 +304,25 @@ class AttrOps(ta.Generic[T]):
|
|
304
304
|
|
305
305
|
#
|
306
306
|
|
307
|
+
class NOT_SET: # noqa
|
308
|
+
def __new__(cls, *args, **kwargs): # noqa
|
309
|
+
raise TypeError
|
310
|
+
|
307
311
|
def install(
|
308
312
|
self,
|
309
313
|
locals_dct: ta.MutableMapping[str, ta.Any],
|
310
314
|
*,
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
eq: bool = False,
|
315
|
+
repr: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET, # noqa
|
316
|
+
hash: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET, # noqa
|
317
|
+
eq: ta.Union[bool, ta.Type[NOT_SET]] = NOT_SET,
|
315
318
|
) -> 'AttrOps[T]':
|
316
|
-
if repr
|
319
|
+
if all(a is self.NOT_SET for a in (repr, hash, eq)):
|
320
|
+
repr = hash = eq = True # noqa
|
321
|
+
if repr:
|
317
322
|
locals_dct.update(__repr__=self.repr)
|
318
|
-
if hash
|
323
|
+
if hash:
|
319
324
|
locals_dct.update(__hash__=self.hash)
|
320
|
-
if eq
|
325
|
+
if eq:
|
321
326
|
locals_dct.update(__eq__=self.eq)
|
322
327
|
return self
|
323
328
|
|
omlish/logs/all.py
CHANGED
@@ -17,6 +17,10 @@ with _lang.auto_proxy_init(globals()):
|
|
17
17
|
JsonLoggingFormatter,
|
18
18
|
)
|
19
19
|
|
20
|
+
from .std.loggers import ( # noqa
|
21
|
+
StdLogger,
|
22
|
+
)
|
23
|
+
|
20
24
|
from .std.noisy import ( # noqa
|
21
25
|
silence_noisy_loggers,
|
22
26
|
)
|
@@ -26,10 +30,39 @@ with _lang.auto_proxy_init(globals()):
|
|
26
30
|
ProxyLoggingHandler,
|
27
31
|
)
|
28
32
|
|
33
|
+
from .std.records import ( # noqa
|
34
|
+
LoggingContextLogRecord,
|
35
|
+
)
|
36
|
+
|
37
|
+
from .base import ( # noqa
|
38
|
+
AnyLogger,
|
39
|
+
Logger,
|
40
|
+
AsyncLogger,
|
41
|
+
|
42
|
+
AnyNopLogger,
|
43
|
+
NopLogger,
|
44
|
+
AsyncNopLogger,
|
45
|
+
)
|
46
|
+
|
29
47
|
from .callers import ( # noqa
|
30
48
|
LoggingCaller,
|
31
49
|
)
|
32
50
|
|
51
|
+
from .contexts import ( # noqa
|
52
|
+
LoggingExcInfoTuple,
|
53
|
+
LoggingExcInfo,
|
54
|
+
|
55
|
+
LoggingContext,
|
56
|
+
)
|
57
|
+
|
58
|
+
from .infos import ( # noqa
|
59
|
+
LoggingSourceFileInfo,
|
60
|
+
LoggingThreadInfo,
|
61
|
+
LoggingProcessInfo,
|
62
|
+
LoggingMultiprocessingInfo,
|
63
|
+
LoggingAsyncioTaskInfo,
|
64
|
+
)
|
65
|
+
|
33
66
|
from .levels import ( # noqa
|
34
67
|
LogLevel,
|
35
68
|
|
@@ -59,3 +92,7 @@ with _lang.auto_proxy_init(globals()):
|
|
59
92
|
|
60
93
|
error_logging,
|
61
94
|
)
|
95
|
+
|
96
|
+
from .warnings import ( # noqa
|
97
|
+
LoggingSetupWarning,
|
98
|
+
)
|
omlish/logs/base.py
CHANGED
@@ -22,7 +22,7 @@ LoggingMsgFn = ta.Callable[[], ta.Union[str, tuple]] # ta.TypeAlias
|
|
22
22
|
|
23
23
|
class AnyLogger(Abstract, ta.Generic[T]):
|
24
24
|
def is_enabled_for(self, level: LogLevel) -> bool:
|
25
|
-
return self.get_effective_level()
|
25
|
+
return level >= self.get_effective_level()
|
26
26
|
|
27
27
|
@abc.abstractmethod
|
28
28
|
def get_effective_level(self) -> LogLevel:
|
@@ -219,7 +219,7 @@ class AsyncLogger(AnyLogger[ta.Awaitable[None]], Abstract):
|
|
219
219
|
class AnyNopLogger(AnyLogger[T], Abstract):
|
220
220
|
@ta.final
|
221
221
|
def get_effective_level(self) -> LogLevel:
|
222
|
-
return 999
|
222
|
+
return -999
|
223
223
|
|
224
224
|
|
225
225
|
@ta.final
|
omlish/logs/callers.py
CHANGED
@@ -7,13 +7,15 @@ import traceback
|
|
7
7
|
import types
|
8
8
|
import typing as ta
|
9
9
|
|
10
|
-
from .infos import
|
10
|
+
from .infos import logging_context_info
|
11
11
|
|
12
12
|
|
13
13
|
##
|
14
14
|
|
15
15
|
|
16
|
-
|
16
|
+
@logging_context_info
|
17
|
+
@ta.final
|
18
|
+
class LoggingCaller(ta.NamedTuple):
|
17
19
|
file_path: str
|
18
20
|
line_no: int
|
19
21
|
name: str
|
@@ -66,8 +68,8 @@ class LoggingCaller(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc]
|
|
66
68
|
sinfo = sinfo[:-1]
|
67
69
|
|
68
70
|
return cls(
|
69
|
-
f.f_code.co_filename,
|
70
|
-
f.f_lineno or 0,
|
71
|
-
f.f_code.co_name,
|
72
|
-
sinfo,
|
71
|
+
file_path=f.f_code.co_filename,
|
72
|
+
line_no=f.f_lineno or 0,
|
73
|
+
name=f.f_code.co_name,
|
74
|
+
stack_info=sinfo,
|
73
75
|
)
|
omlish/logs/infos.py
CHANGED
@@ -9,19 +9,16 @@ import typing as ta
|
|
9
9
|
##
|
10
10
|
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
return ()
|
15
|
-
|
16
|
-
|
17
|
-
LoggingContextInfo: type = ta.cast(ta.Any, _LoggingContextInfo())
|
12
|
+
def logging_context_info(cls):
|
13
|
+
return cls
|
18
14
|
|
19
15
|
|
20
16
|
##
|
21
17
|
|
22
18
|
|
19
|
+
@logging_context_info
|
23
20
|
@ta.final
|
24
|
-
class LoggingSourceFileInfo(
|
21
|
+
class LoggingSourceFileInfo(ta.NamedTuple):
|
25
22
|
file_name: str
|
26
23
|
module: str
|
27
24
|
|
@@ -38,16 +35,17 @@ class LoggingSourceFileInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[
|
|
38
35
|
return None
|
39
36
|
|
40
37
|
return cls(
|
41
|
-
file_name,
|
42
|
-
module,
|
38
|
+
file_name=file_name,
|
39
|
+
module=module,
|
43
40
|
)
|
44
41
|
|
45
42
|
|
46
43
|
##
|
47
44
|
|
48
45
|
|
46
|
+
@logging_context_info
|
49
47
|
@ta.final
|
50
|
-
class LoggingThreadInfo(
|
48
|
+
class LoggingThreadInfo(ta.NamedTuple):
|
51
49
|
ident: int
|
52
50
|
native_id: ta.Optional[int]
|
53
51
|
name: str
|
@@ -55,31 +53,33 @@ class LoggingThreadInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
55
53
|
@classmethod
|
56
54
|
def build(cls) -> 'LoggingThreadInfo':
|
57
55
|
return cls(
|
58
|
-
threading.get_ident(),
|
59
|
-
threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
|
60
|
-
threading.current_thread().name,
|
56
|
+
ident=threading.get_ident(),
|
57
|
+
native_id=threading.get_native_id() if hasattr(threading, 'get_native_id') else None,
|
58
|
+
name=threading.current_thread().name,
|
61
59
|
)
|
62
60
|
|
63
61
|
|
64
62
|
##
|
65
63
|
|
66
64
|
|
65
|
+
@logging_context_info
|
67
66
|
@ta.final
|
68
|
-
class LoggingProcessInfo(
|
67
|
+
class LoggingProcessInfo(ta.NamedTuple):
|
69
68
|
pid: int
|
70
69
|
|
71
70
|
@classmethod
|
72
71
|
def build(cls) -> 'LoggingProcessInfo':
|
73
72
|
return cls(
|
74
|
-
os.getpid(),
|
73
|
+
pid=os.getpid(),
|
75
74
|
)
|
76
75
|
|
77
76
|
|
78
77
|
##
|
79
78
|
|
80
79
|
|
80
|
+
@logging_context_info
|
81
81
|
@ta.final
|
82
|
-
class LoggingMultiprocessingInfo(
|
82
|
+
class LoggingMultiprocessingInfo(ta.NamedTuple):
|
83
83
|
process_name: str
|
84
84
|
|
85
85
|
@classmethod
|
@@ -89,15 +89,16 @@ class LoggingMultiprocessingInfo(LoggingContextInfo, ta.NamedTuple): # type: ig
|
|
89
89
|
return None
|
90
90
|
|
91
91
|
return cls(
|
92
|
-
mp.current_process().name,
|
92
|
+
process_name=mp.current_process().name,
|
93
93
|
)
|
94
94
|
|
95
95
|
|
96
96
|
##
|
97
97
|
|
98
98
|
|
99
|
+
@logging_context_info
|
99
100
|
@ta.final
|
100
|
-
class LoggingAsyncioTaskInfo(
|
101
|
+
class LoggingAsyncioTaskInfo(ta.NamedTuple):
|
101
102
|
name: str
|
102
103
|
|
103
104
|
@classmethod
|
@@ -115,5 +116,5 @@ class LoggingAsyncioTaskInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore
|
|
115
116
|
return None
|
116
117
|
|
117
118
|
return cls(
|
118
|
-
task.get_name(), # Always non-None
|
119
|
+
name=task.get_name(), # Always non-None
|
119
120
|
)
|
omlish/logs/levels.py
CHANGED
@@ -22,36 +22,66 @@ class NamedLogLevel(int):
|
|
22
22
|
|
23
23
|
#
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
_CACHE: ta.ClassVar[ta.MutableMapping[int, 'NamedLogLevel']] = {}
|
26
|
+
|
27
|
+
@ta.overload
|
28
|
+
def __new__(cls, name: str, offset: int = 0, /) -> 'NamedLogLevel':
|
29
|
+
...
|
28
30
|
|
29
|
-
|
31
|
+
@ta.overload
|
32
|
+
def __new__(cls, i: int, /) -> 'NamedLogLevel':
|
33
|
+
...
|
34
|
+
|
35
|
+
def __new__(cls, x, offset=0, /):
|
36
|
+
if isinstance(x, str):
|
37
|
+
return cls(cls._INTS_BY_NAME[x.upper()] + offset)
|
38
|
+
elif not offset and (c := cls._CACHE.get(x)) is not None:
|
39
|
+
return c
|
40
|
+
else:
|
41
|
+
return super().__new__(cls, x + offset)
|
42
|
+
|
43
|
+
#
|
44
|
+
|
45
|
+
_name_and_offset: ta.Tuple[str, int]
|
30
46
|
|
31
47
|
@property
|
32
|
-
def
|
48
|
+
def name_and_offset(self) -> ta.Tuple[str, int]:
|
33
49
|
try:
|
34
|
-
return self.
|
50
|
+
return self._name_and_offset
|
35
51
|
except AttributeError:
|
36
52
|
pass
|
37
53
|
|
38
|
-
if (n := self.
|
54
|
+
if (n := self._NAMES_BY_INT.get(self)) is not None:
|
55
|
+
t = (n, 0)
|
56
|
+
else:
|
39
57
|
for n, i in self._NAME_INT_PAIRS: # noqa
|
40
58
|
if self >= i:
|
59
|
+
t = (n, (self - i))
|
41
60
|
break
|
42
61
|
else:
|
43
|
-
|
62
|
+
t = ('NOTSET', int(self))
|
63
|
+
|
64
|
+
self._name_and_offset = t
|
65
|
+
return t
|
66
|
+
|
67
|
+
@property
|
68
|
+
def exact_name(self) -> ta.Optional[str]:
|
69
|
+
n, o = self.name_and_offset
|
70
|
+
return n if not o else None
|
44
71
|
|
45
|
-
|
72
|
+
@property
|
73
|
+
def effective_name(self) -> str:
|
74
|
+
n, _ = self.name_and_offset
|
46
75
|
return n
|
47
76
|
|
48
77
|
#
|
49
78
|
|
50
|
-
def __repr__(self) -> str:
|
51
|
-
return f'{self.__class__.__name__}({int(self)})'
|
52
|
-
|
53
79
|
def __str__(self) -> str:
|
54
|
-
return self.exact_name or f'{self.effective_name
|
80
|
+
return self.exact_name or f'{self.effective_name}{int(self):+}'
|
81
|
+
|
82
|
+
def __repr__(self) -> str:
|
83
|
+
n, o = self.name_and_offset
|
84
|
+
return f'{self.__class__.__name__}({n!r}{f", {int(o)}" if o else ""})'
|
55
85
|
|
56
86
|
#
|
57
87
|
|
@@ -69,3 +99,6 @@ NamedLogLevel.WARNING = NamedLogLevel(logging.WARNING)
|
|
69
99
|
NamedLogLevel.INFO = NamedLogLevel(logging.INFO)
|
70
100
|
NamedLogLevel.DEBUG = NamedLogLevel(logging.DEBUG)
|
71
101
|
NamedLogLevel.NOTSET = NamedLogLevel(logging.NOTSET)
|
102
|
+
|
103
|
+
|
104
|
+
NamedLogLevel._CACHE.update({i: NamedLogLevel(i) for i in NamedLogLevel._NAMES_BY_INT}) # noqa
|
omlish/logs/modules.py
CHANGED
omlish/logs/protocols.py
CHANGED
@@ -23,6 +23,9 @@ class StdLogger(Logger):
|
|
23
23
|
def std(self) -> logging.Logger:
|
24
24
|
return self._std
|
25
25
|
|
26
|
+
def is_enabled_for(self, level: LogLevel) -> bool:
|
27
|
+
return self._std.isEnabledFor(level)
|
28
|
+
|
26
29
|
def get_effective_level(self) -> LogLevel:
|
27
30
|
return self._std.getEffectiveLevel()
|
28
31
|
|
omlish/logs/times.py
CHANGED
@@ -4,14 +4,16 @@ import logging
|
|
4
4
|
import time
|
5
5
|
import typing as ta
|
6
6
|
|
7
|
-
from .infos import
|
7
|
+
from .infos import logging_context_info
|
8
8
|
from .warnings import LoggingSetupWarning
|
9
9
|
|
10
10
|
|
11
11
|
##
|
12
12
|
|
13
13
|
|
14
|
-
|
14
|
+
@logging_context_info
|
15
|
+
@ta.final
|
16
|
+
class LoggingTimeFields(ta.NamedTuple):
|
15
17
|
"""Maps directly to stdlib `logging.LogRecord` fields, and must be kept in sync with it."""
|
16
18
|
|
17
19
|
created: float
|
@@ -59,9 +61,9 @@ class LoggingTimeFields(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
59
61
|
relative_created = (time_ns - start_time_ns) / 1e6
|
60
62
|
|
61
63
|
return cls(
|
62
|
-
created,
|
63
|
-
msecs,
|
64
|
-
relative_created,
|
64
|
+
created=created,
|
65
|
+
msecs=msecs,
|
66
|
+
relative_created=relative_created,
|
65
67
|
)
|
66
68
|
|
67
69
|
|
omlish/logs/typed/types.py
CHANGED
@@ -86,6 +86,7 @@ class TypedLoggerValue(Abstract, ta.Generic[T]):
|
|
86
86
|
def of(cls: ta.Type[TypedLoggerValueT], v: ta.Any) -> ta.Union[TypedLoggerValueT, AbsentTypedLoggerValue]:
|
87
87
|
return cls(v) if v is not ABSENT_TYPED_LOGGER_VALUE else ABSENT_TYPED_LOGGER_VALUE
|
88
88
|
|
89
|
+
@ta.final
|
89
90
|
@property
|
90
91
|
def v(self) -> T:
|
91
92
|
return self._v
|
omlish/sockets/server/server.py
CHANGED
@@ -22,7 +22,7 @@ from .handlers import SocketServerHandler
|
|
22
22
|
|
23
23
|
|
24
24
|
class SocketServer:
|
25
|
-
_DEFAULT_LOGGER = logging.getLogger('.'.join([__name__, 'SocketServer']))
|
25
|
+
_DEFAULT_LOGGER: LoggerLike = logging.getLogger('.'.join([__name__, 'SocketServer'])) # FIXME
|
26
26
|
|
27
27
|
def __init__(
|
28
28
|
self,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=hWUhAjMnMNft0GDUanNG2JIkoAwrhNLC_ZTd5BzHw0A,3575
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=ZNIMl1kwg3qdei4DiUrJPQe5M81S1e76N-GuNSwLBAE,8683
|
5
5
|
omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
|
@@ -89,7 +89,7 @@ omlish/collections/unmodifiable.py,sha256=0ZkA_0paWlkgaU6OupFdSV0yFP--7XoI3lqhs3
|
|
89
89
|
omlish/collections/utils.py,sha256=JYBYoConWxApqJLOjXR6GuQI76G0KQDjg6kkXrTofUw,4063
|
90
90
|
omlish/collections/cache/__init__.py,sha256=D1gO71VcwxFTZP9gAc9isHfg_TEdalwhsJcgGLvS9hg,233
|
91
91
|
omlish/collections/cache/descriptor.py,sha256=5SOsKNxnhisJY22l7tujMOI6MGGr6TERzgsfjvGXOyA,5013
|
92
|
-
omlish/collections/cache/impl.py,sha256=
|
92
|
+
omlish/collections/cache/impl.py,sha256=6rOg7zgEn8I5GPjz1RdImB1TdbHZv6EKdv2QAUcUGug,14783
|
93
93
|
omlish/collections/cache/types.py,sha256=uND_qOk8bVVmdhrOhjx9QHYqs2jq53NThEqQAl3Nepw,690
|
94
94
|
omlish/collections/kv/__init__.py,sha256=qPuE8bmbyOkT_qVGH5owSp0SbC9xI_p_LS0tP7S7QSw,751
|
95
95
|
omlish/collections/kv/base.py,sha256=lbE5kj2rNgee8dQOlD7v5oTAn5BcgE3IYRpA11N31Dw,1077
|
@@ -126,8 +126,8 @@ omlish/configs/processing/names.py,sha256=9nRVBhZ0uY-J4591QcgUHla4MZAEux0-TWxGO1
|
|
126
126
|
omlish/configs/processing/rewriting.py,sha256=ofPYub5ftZ6A_bkAW71w2wDmSbZ5ULI3Ip190fzBl4Q,4252
|
127
127
|
omlish/configs/processing/strings.py,sha256=Iw85H_AE2TG8vdpbgwhye-aqz5Hkn4J9mM32FdXEiGo,832
|
128
128
|
omlish/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
129
|
-
omlish/daemons/daemon.py,sha256=
|
130
|
-
omlish/daemons/launching.py,sha256=
|
129
|
+
omlish/daemons/daemon.py,sha256=rgSozDUOEE56KyT2rCRxZJEt9zJ-wkKk6R_fwjm2D-4,3501
|
130
|
+
omlish/daemons/launching.py,sha256=uLRfuWpW19H_lP_QcqfHOZBaJDa1WvDNfJgVx4i4c9g,3771
|
131
131
|
omlish/daemons/reparent.py,sha256=uEs7pjzQkL8zhM8xADJhedmXXA7eDsu28639F5HkmpU,590
|
132
132
|
omlish/daemons/services.py,sha256=laoUeJU7eVHuWl1062FBjPSD7jchOjhpYDc5FT2B3dM,3462
|
133
133
|
omlish/daemons/spawning.py,sha256=CsNhWDebyin_CYwWvLWNpY0djF010HjQTHATvw6dk-M,5349
|
@@ -208,7 +208,7 @@ omlish/diag/asts.py,sha256=MWh9XAG3m9L10FIJCyoNT2aU4Eft6tun_x9K0riq6Dk,3332
|
|
208
208
|
omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
|
209
209
|
omlish/diag/lslocks.py,sha256=VuA4MNNqXTcnHWsJvulGM6pNJRKmlXFXUZTfXpY0V6g,1750
|
210
210
|
omlish/diag/lsof.py,sha256=5N5aZQ7UqEBgV-hj3_a8QcvALOeLlVb8otqF2hvucxY,9107
|
211
|
-
omlish/diag/procfs.py,sha256=
|
211
|
+
omlish/diag/procfs.py,sha256=eeB3L9UpNBpAfsax3U6OczayYboPlFzOGplqlQ4gBNY,9700
|
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
|
@@ -219,8 +219,8 @@ omlish/diag/_pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
219
219
|
omlish/diag/_pycharm/runhack.py,sha256=IxawPyqrPfY1fpV1D_9dZXxny89fVSR3RlmqlbaRctw,37869
|
220
220
|
omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
|
221
221
|
omlish/diag/replserver/__main__.py,sha256=LmU41lQ58bm1h4Mx7S8zhE_uEBSC6kPcp9mn5JRpulA,32
|
222
|
-
omlish/diag/replserver/console.py,sha256=
|
223
|
-
omlish/diag/replserver/server.py,sha256=
|
222
|
+
omlish/diag/replserver/console.py,sha256=MxDLslAaYfC-l0rfGO-SnYAJ__8RWBJQ5FxGi29czYU,7438
|
223
|
+
omlish/diag/replserver/server.py,sha256=zTeyaARK22KwaqCOzG8H8Rk009en7gBxOBaJcRB1jbM,5402
|
224
224
|
omlish/dispatch/__init__.py,sha256=UwVT6SSk5HKk9xF9vc_UJD8BDSIQWSw98Ldx-G-6PC0,166
|
225
225
|
omlish/dispatch/dispatch.py,sha256=TzWihCt9Zr8wfIwVpKHVOOrYFVKpDXRevxYomtEfqYc,3176
|
226
226
|
omlish/dispatch/functions.py,sha256=cwNzGIg2ZIalEgn9I03cnJVbMTHjWloyDTaowlO3UPs,1524
|
@@ -315,7 +315,7 @@ omlish/graphs/dot/rendering.py,sha256=IOCEEOqlsRctoIgnz1I9v0ycHHDAr5zYubTXT7v_Yw
|
|
315
315
|
omlish/graphs/dot/utils.py,sha256=8cGKIdcM-w1q4ITUYyC0lnYwLqNWuH2OddmmbLxVgEo,806
|
316
316
|
omlish/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
317
317
|
omlish/http/all.py,sha256=4dSBbitsrQIadivSo2rBLg8dgdmC0efpboylGUZgKKo,829
|
318
|
-
omlish/http/asgi.py,sha256=
|
318
|
+
omlish/http/asgi.py,sha256=4r2Gw1ojwp2OVpwonof1p4GFRcseIJqPhpkQpLhM9Jw,3243
|
319
319
|
omlish/http/consts.py,sha256=7BJ4D1MdIvqBcepkgCfBFHolgTwbOlqsOEiee_IjxOA,2289
|
320
320
|
omlish/http/cookies.py,sha256=uuOYlHR6e2SC3GM41V0aozK10nef9tYg83Scqpn5-HM,6351
|
321
321
|
omlish/http/dates.py,sha256=wnVjmRm5KEBGaL9JnAbaAmb1XkAQ3LCCQAcxzMdwwCo,2880
|
@@ -374,7 +374,7 @@ omlish/inject/utils.py,sha256=Gc2qq45KgkyqDt03WSvOEZBCiuqQ6ESwplx5ZRBcY5M,413
|
|
374
374
|
omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
375
375
|
omlish/inject/impl/bindings.py,sha256=xSvUcoDz8NH-aNHPwBPEZsFg73K2WcF_A63npVbGt_k,420
|
376
376
|
omlish/inject/impl/elements.py,sha256=PM_055moROskSTQqmohEa6I0tt1OQ-VRNArXCMG6vyk,5947
|
377
|
-
omlish/inject/impl/injector.py,sha256=
|
377
|
+
omlish/inject/impl/injector.py,sha256=agM5NKugC9du_vBgawL9H_02A76GPQFjG-3cQVjz25s,7600
|
378
378
|
omlish/inject/impl/inspect.py,sha256=reXkNsjyvJXva5379tHTWklVK0vzqGLP0BgI_4VVPgQ,3116
|
379
379
|
omlish/inject/impl/multis.py,sha256=Y287xntr1wBNYpwQBc0f_Ca7UkXjkscKhgGHZK_zdbg,2053
|
380
380
|
omlish/inject/impl/origins.py,sha256=dgGdkoMN6I4DZrWjlpZYijeFsrF6Up1WPq_QSAgTtuQ,1676
|
@@ -416,7 +416,7 @@ omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,4
|
|
416
416
|
omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
|
417
417
|
omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
|
418
418
|
omlish/lang/__init__.py,sha256=Ty5DkVFyGztlpYVEcEP1yTvLbflRFTo6IThN8dPMnbI,10096
|
419
|
-
omlish/lang/asyncs.py,sha256=
|
419
|
+
omlish/lang/asyncs.py,sha256=rfpLE2ZacVKGYB9DSFuMBurQzkPRjB1qljcS3sIuSsw,1767
|
420
420
|
omlish/lang/attrstorage.py,sha256=UUnoENCMQF3twBfxBcIKa5mpXsAxWnNYDayhU8xgmpU,5224
|
421
421
|
omlish/lang/casing.py,sha256=3_c7cxQOc4z_YezaU2B4NCTAsPh_kDL4wUTK5kZU6kg,4675
|
422
422
|
omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
|
@@ -472,7 +472,7 @@ omlish/lite/__init__.py,sha256=cyZEpGob7XjU8DohyNxVe5CQRk4CQ5vrHL42OdhQb8w,148
|
|
472
472
|
omlish/lite/abstract.py,sha256=Z3kLviPNGLkmA8m8BZILzWxez_sP18OyzgMP3-c2-RI,4068
|
473
473
|
omlish/lite/args.py,sha256=ILJXAiN3KjIoJwY42aKpYPngUdxHIy9ssVIExFVz3fE,978
|
474
474
|
omlish/lite/asyncs.py,sha256=MMRbC38mbsgBPovGLjq4iBdn74DjMVzGc4nVZxN_DUY,441
|
475
|
-
omlish/lite/attrops.py,sha256=
|
475
|
+
omlish/lite/attrops.py,sha256=bUa2ILC4Z89-B1IWSac9XV_VvjKDnQXKDR0mZ6e9SMk,8764
|
476
476
|
omlish/lite/cached.py,sha256=ocQcppTwGdSnKPYMz75VoH526UUT8YtDJeRczBX0-wI,1306
|
477
477
|
omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
|
478
478
|
omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
|
@@ -497,31 +497,31 @@ omlish/lite/types.py,sha256=QM9whf55r7TmmQBRApIWSlyVKsl1p_jcut_YheyZMFY,146
|
|
497
497
|
omlish/lite/typing.py,sha256=m2CyJTz2OVOCPRvp-0UuEx7oleZgXqs3rYXijE0bTsA,1280
|
498
498
|
omlish/lite/wrappers.py,sha256=d00Ls2kFHuogKd5wEBaU65VNCN10YXIZtiwu1mbMpmA,530
|
499
499
|
omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
500
|
-
omlish/logs/all.py,sha256=
|
501
|
-
omlish/logs/base.py,sha256=
|
502
|
-
omlish/logs/callers.py,sha256=
|
500
|
+
omlish/logs/all.py,sha256=_sU_2waB8FR9GuVrdxGLI145nGepd8c2LAHf2J4dbz4,1777
|
501
|
+
omlish/logs/base.py,sha256=VHPjSJjQzIRCe5nqgkmNORYclDJZayGucMy_WhITO1c,6650
|
502
|
+
omlish/logs/callers.py,sha256=F3VbeQJniw6RyfbeGBcxMGL3aeO5mgPizmJ8pa2RW88,2091
|
503
503
|
omlish/logs/contexts.py,sha256=dC84Wa__j0leSJw5SzP-ygsflfzIiqvmRnv9meD-Q_U,7523
|
504
|
-
omlish/logs/infos.py,sha256=
|
505
|
-
omlish/logs/levels.py,sha256=
|
506
|
-
omlish/logs/modules.py,sha256=
|
507
|
-
omlish/logs/protocols.py,sha256=
|
504
|
+
omlish/logs/infos.py,sha256=38bPi7v7vHawNlLp7Q7X6JS-q5s-JrwlDi08FY4xoy4,2621
|
505
|
+
omlish/logs/levels.py,sha256=Eze-k_LPgFzbNMnG10F2bRKfL3veQpIxiegvN5rGeWM,2909
|
506
|
+
omlish/logs/modules.py,sha256=wZ_PNCYhAaEdnGE5k0JvChcqn9nhtEpmwuH74Bwn5gg,266
|
507
|
+
omlish/logs/protocols.py,sha256=e_zizD3pQdYlU6bg3xGB3_ARUTcoHUfar_uLjCo-SPw,961
|
508
508
|
omlish/logs/standard.py,sha256=ppho-wDecGxUiRXOdCIlblmrQhqXZ0oQOGayy8N53XY,3237
|
509
|
-
omlish/logs/times.py,sha256=
|
509
|
+
omlish/logs/times.py,sha256=WUy92cUxMtttnj0PZryIxbLqEdWiiAVDUboRxqe2pYw,2594
|
510
510
|
omlish/logs/utils.py,sha256=fKvP342qBmE8wwTgUQ8Tf0-ATVhCm90UYBQt2pk0044,1883
|
511
511
|
omlish/logs/warnings.py,sha256=xyhDgiPy1p8Kp5D9sb_NZiBnQ26SUppaHqC27dtQzok,67
|
512
512
|
omlish/logs/std/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
513
|
-
omlish/logs/std/adapters.py,sha256=qRXusW8iGYF29C3cy1srb4pgJ0Fv5li8bUvnegxo9o8,1005
|
514
513
|
omlish/logs/std/configs.py,sha256=aDQahqBJXJpmQBaxXVK5S2xi_I_nrLLcCLTq6Q2K6EQ,1037
|
515
514
|
omlish/logs/std/filters.py,sha256=Z8tHOvBRiP-OYm2z5cwY-lYXRimNgferEARMwvwx5Pw,380
|
516
515
|
omlish/logs/std/handlers.py,sha256=uTWOT6oayBUEftKmJ8yo89ZP4plv5eQ8Lbcmt-IGl8c,469
|
517
516
|
omlish/logs/std/json.py,sha256=QJ5lywLsRsPyVno2nk2kOw-Z1z3bfrDiZzqcRUdWUMY,1382
|
517
|
+
omlish/logs/std/loggers.py,sha256=nJieUZ2iPO8iVYc72QDUBKLPhGw7yPd_RzR18zKUSck,1106
|
518
518
|
omlish/logs/std/noisy.py,sha256=hWpbseerZqlHdEPEajDTSmcRhx8LmmNAxz_7GBZAO9s,353
|
519
519
|
omlish/logs/std/proxy.py,sha256=9MVV5kbj9nwl3KZGtrYCIb5XTpv33f33zZ7P_B58fX0,2394
|
520
520
|
omlish/logs/std/records.py,sha256=muJA3KKjGm5mgsHXtOyrpaEZu553M-UviNgNvXdISXY,10718
|
521
521
|
omlish/logs/typed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
522
522
|
omlish/logs/typed/bindings.py,sha256=H_B-3LTGFlBIWYDJ8rei1VMfInE8KrBwRo3bJ_BgFj8,18184
|
523
523
|
omlish/logs/typed/contexts.py,sha256=MU1RqHtmYbnxoLfLhMZbTbRd-WfYEyeVo7_3VnG3rY0,4027
|
524
|
-
omlish/logs/typed/types.py,sha256=
|
524
|
+
omlish/logs/typed/types.py,sha256=DQKDT2v4bG1Cgv_LrhvTIHWBAIODs9b8E5jNI4jTRpU,14442
|
525
525
|
omlish/logs/typed/values.py,sha256=w8ukpJZ3lx_st7Mj7riP2squzGmMaz7OuUxw_NZCZsY,3261
|
526
526
|
omlish/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
527
527
|
omlish/manifests/base.py,sha256=wW-De-pU3cef-0vGsgo-ypftDwc3tCBxhRAzPtrdark,918
|
@@ -647,7 +647,7 @@ omlish/sockets/ports.py,sha256=WofuoMTQNUhbEreL0lrMQyVEZm6awuLLpFvn6jnFKrw,1778
|
|
647
647
|
omlish/sockets/wait.py,sha256=GQIRABh_NWHePuNVz5bBeg7iVln-YHc3945ZA0qr-mA,1565
|
648
648
|
omlish/sockets/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
649
649
|
omlish/sockets/server/handlers.py,sha256=GEG3zWb3-DyjZaVWtggq1aKFtvAoyqOJEw2Aq-7S1xs,3934
|
650
|
-
omlish/sockets/server/server.py,sha256=
|
650
|
+
omlish/sockets/server/server.py,sha256=sKDz_AE44opgE4mb_Km5stGRR4mRFjhXcjFrXfJ5-bk,6347
|
651
651
|
omlish/sockets/server/ssl.py,sha256=sTtM8eYmou37aViJG-a32bEoEg1DA-psAu8v8NP2ECs,1089
|
652
652
|
omlish/sockets/server/threading.py,sha256=CPr_290vpN3o4p2ehQBIwk-d8Ciasylp9v2zUQSB5xk,2862
|
653
653
|
omlish/specs/__init__.py,sha256=fxpcfXEWESH2kiPStKhl2dAdfLkZVTt_cssZKyqBLiQ,87
|
@@ -892,9 +892,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
892
892
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
893
893
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
894
894
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
895
|
-
omlish-0.0.0.
|
896
|
-
omlish-0.0.0.
|
897
|
-
omlish-0.0.0.
|
898
|
-
omlish-0.0.0.
|
899
|
-
omlish-0.0.0.
|
900
|
-
omlish-0.0.0.
|
895
|
+
omlish-0.0.0.dev430.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
896
|
+
omlish-0.0.0.dev430.dist-info/METADATA,sha256=iD6ksXPqkEoUuKrQg-U2gFrrtB3eCj9jzyhlaHtfGgs,19243
|
897
|
+
omlish-0.0.0.dev430.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
898
|
+
omlish-0.0.0.dev430.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
899
|
+
omlish-0.0.0.dev430.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
900
|
+
omlish-0.0.0.dev430.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|