omlish 0.0.0.dev427__py3-none-any.whl → 0.0.0.dev429__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/asyncs/asyncio/subprocesses.py +2 -2
- omlish/asyncs/bluelet/runner.py +3 -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/formats/dotenv.py +7 -7
- omlish/http/asgi.py +2 -2
- omlish/http/handlers.py +3 -2
- omlish/inject/impl/injector.py +2 -2
- omlish/logs/base.py +2 -1
- omlish/logs/callers.py +4 -2
- omlish/logs/contexts.py +62 -36
- omlish/logs/infos.py +15 -11
- omlish/logs/modules.py +5 -2
- omlish/logs/std/handlers.py +4 -2
- omlish/logs/times.py +4 -2
- omlish/secrets/secrets.py +3 -3
- omlish/sockets/server/handlers.py +2 -2
- omlish/sockets/server/server.py +3 -2
- omlish/sockets/server/ssl.py +2 -2
- omlish/subprocesses/base.py +4 -3
- {omlish-0.0.0.dev427.dist-info → omlish-0.0.0.dev429.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev427.dist-info → omlish-0.0.0.dev429.dist-info}/RECORD +31 -31
- {omlish-0.0.0.dev427.dist-info → omlish-0.0.0.dev429.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev427.dist-info → omlish-0.0.0.dev429.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev427.dist-info → omlish-0.0.0.dev429.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev427.dist-info → omlish-0.0.0.dev429.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -4,12 +4,12 @@ import asyncio.base_subprocess
|
|
4
4
|
import asyncio.subprocess
|
5
5
|
import contextlib
|
6
6
|
import functools
|
7
|
-
import logging
|
8
7
|
import subprocess
|
9
8
|
import typing as ta
|
10
9
|
|
11
10
|
from ...lite.check import check
|
12
11
|
from ...lite.timeouts import TimeoutLike
|
12
|
+
from ...logs.protocols import LoggerLike
|
13
13
|
from ...subprocesses.asyncs import AbstractAsyncSubprocesses
|
14
14
|
from ...subprocesses.run import SubprocessRun
|
15
15
|
from ...subprocesses.run import SubprocessRunOutput
|
@@ -28,7 +28,7 @@ class AsyncioProcessCommunicator:
|
|
28
28
|
proc: asyncio.subprocess.Process,
|
29
29
|
loop: ta.Optional[ta.Any] = None,
|
30
30
|
*,
|
31
|
-
log: ta.Optional[
|
31
|
+
log: ta.Optional[LoggerLike] = None,
|
32
32
|
) -> None:
|
33
33
|
super().__init__()
|
34
34
|
|
omlish/asyncs/bluelet/runner.py
CHANGED
@@ -39,6 +39,7 @@ import types
|
|
39
39
|
import typing as ta
|
40
40
|
import weakref
|
41
41
|
|
42
|
+
from ...logs.protocols import LoggerLike
|
42
43
|
from .core import BlueletCoro
|
43
44
|
from .core import BlueletExcInfo
|
44
45
|
from .core import CoreBlueletEvent
|
@@ -84,7 +85,7 @@ class BlueletCoroException(Exception): # noqa
|
|
84
85
|
def _bluelet_event_select(
|
85
86
|
events: ta.Iterable[BlueletEvent],
|
86
87
|
*,
|
87
|
-
log: ta.Optional[
|
88
|
+
log: ta.Optional[LoggerLike] = None,
|
88
89
|
) -> ta.Set[WaitableBlueletEvent]:
|
89
90
|
"""
|
90
91
|
Perform a select() over all the Events provided, returning the ones ready to be fired. Only WaitableEvents
|
@@ -182,7 +183,7 @@ class _BlueletRunner:
|
|
182
183
|
self,
|
183
184
|
root_coro: BlueletCoro,
|
184
185
|
*,
|
185
|
-
log: ta.Optional[
|
186
|
+
log: ta.Optional[LoggerLike] = None,
|
186
187
|
) -> None:
|
187
188
|
super().__init__()
|
188
189
|
|
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/formats/dotenv.py
CHANGED
@@ -27,7 +27,6 @@ import abc
|
|
27
27
|
import codecs
|
28
28
|
import contextlib
|
29
29
|
import io
|
30
|
-
import logging
|
31
30
|
import os
|
32
31
|
import pathlib
|
33
32
|
import re
|
@@ -36,6 +35,7 @@ import tempfile
|
|
36
35
|
import typing as ta
|
37
36
|
|
38
37
|
from ..lite.abstract import Abstract
|
38
|
+
from ..logs.protocols import LoggerLike
|
39
39
|
|
40
40
|
|
41
41
|
##
|
@@ -312,7 +312,7 @@ def parse_dotenv_stream(stream: ta.IO[str]) -> ta.Iterator[DotenvBinding]:
|
|
312
312
|
|
313
313
|
def _dotenv_with_warn_for_invalid_lines(
|
314
314
|
mappings: ta.Iterator[DotenvBinding],
|
315
|
-
log: ta.Optional[
|
315
|
+
log: ta.Optional[LoggerLike] = None,
|
316
316
|
) -> ta.Iterator[DotenvBinding]:
|
317
317
|
for mapping in mappings:
|
318
318
|
if mapping.error:
|
@@ -337,7 +337,7 @@ class Dotenv:
|
|
337
337
|
interpolate: bool = True,
|
338
338
|
override: bool = True,
|
339
339
|
env: ta.Optional[ta.Mapping[str, str]] = None,
|
340
|
-
log: ta.Optional[
|
340
|
+
log: ta.Optional[LoggerLike] = None,
|
341
341
|
) -> None:
|
342
342
|
super().__init__()
|
343
343
|
|
@@ -415,7 +415,7 @@ def dotenv_get_key(
|
|
415
415
|
key_to_get: str,
|
416
416
|
*,
|
417
417
|
encoding: ta.Optional[str] = 'utf-8',
|
418
|
-
log: ta.Optional[
|
418
|
+
log: ta.Optional[LoggerLike] = None,
|
419
419
|
) -> ta.Optional[str]:
|
420
420
|
"""
|
421
421
|
Get the value of a given key from the given .env.
|
@@ -461,7 +461,7 @@ def dotenv_set_key(
|
|
461
461
|
quote_mode: str = 'always',
|
462
462
|
export: bool = False,
|
463
463
|
encoding: ta.Optional[str] = 'utf-8',
|
464
|
-
log: ta.Optional[
|
464
|
+
log: ta.Optional[LoggerLike] = None,
|
465
465
|
) -> ta.Tuple[ta.Optional[bool], str, str]:
|
466
466
|
"""
|
467
467
|
Adds or Updates a key/value to the given .env
|
@@ -511,7 +511,7 @@ def dotenv_unset_key(
|
|
511
511
|
*,
|
512
512
|
quote_mode: str = 'always',
|
513
513
|
encoding: ta.Optional[str] = 'utf-8',
|
514
|
-
log: ta.Optional[
|
514
|
+
log: ta.Optional[LoggerLike] = None,
|
515
515
|
) -> ta.Tuple[ta.Optional[bool], str]:
|
516
516
|
"""
|
517
517
|
Removes a given key from the given `.env` file.
|
@@ -575,7 +575,7 @@ def dotenv_values(
|
|
575
575
|
interpolate: bool = True,
|
576
576
|
encoding: ta.Optional[str] = 'utf-8',
|
577
577
|
env: ta.Optional[ta.Mapping[str, str]] = None,
|
578
|
-
log: ta.Optional[
|
578
|
+
log: ta.Optional[LoggerLike] = None,
|
579
579
|
) -> ta.Dict[str, ta.Optional[str]]:
|
580
580
|
"""
|
581
581
|
Parse a .env file and return its content as a dict.
|
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/http/handlers.py
CHANGED
@@ -7,6 +7,7 @@ import logging
|
|
7
7
|
import typing as ta
|
8
8
|
|
9
9
|
from ..lite.abstract import Abstract
|
10
|
+
from ..logs.protocols import LoggerLike
|
10
11
|
from ..sockets.addresses import SocketAddress
|
11
12
|
from .parsing import HttpHeaders
|
12
13
|
|
@@ -70,7 +71,7 @@ class HttpHandler_(Abstract): # noqa
|
|
70
71
|
@dc.dataclass(frozen=True)
|
71
72
|
class LoggingHttpHandler(HttpHandler_):
|
72
73
|
handler: HttpHandler
|
73
|
-
log:
|
74
|
+
log: LoggerLike
|
74
75
|
level: int = logging.DEBUG
|
75
76
|
|
76
77
|
def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
|
@@ -83,7 +84,7 @@ class LoggingHttpHandler(HttpHandler_):
|
|
83
84
|
@dc.dataclass(frozen=True)
|
84
85
|
class ExceptionLoggingHttpHandler(HttpHandler_):
|
85
86
|
handler: HttpHandler
|
86
|
-
log:
|
87
|
+
log: LoggerLike
|
87
88
|
message: ta.Union[str, ta.Callable[[HttpHandlerRequest, BaseException], str]] = 'Error in http handler'
|
88
89
|
|
89
90
|
def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
|
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/logs/base.py
CHANGED
@@ -21,8 +21,9 @@ LoggingMsgFn = ta.Callable[[], ta.Union[str, tuple]] # ta.TypeAlias
|
|
21
21
|
|
22
22
|
|
23
23
|
class AnyLogger(Abstract, ta.Generic[T]):
|
24
|
+
@ta.final
|
24
25
|
def is_enabled_for(self, level: LogLevel) -> bool:
|
25
|
-
return self.get_effective_level()
|
26
|
+
return level >= self.get_effective_level()
|
26
27
|
|
27
28
|
@abc.abstractmethod
|
28
29
|
def get_effective_level(self) -> LogLevel:
|
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
|
omlish/logs/contexts.py
CHANGED
@@ -89,6 +89,12 @@ class LoggingContext(Abstract):
|
|
89
89
|
|
90
90
|
|
91
91
|
class CaptureLoggingContext(LoggingContext, Abstract):
|
92
|
+
class AlreadyCapturedError(Exception):
|
93
|
+
pass
|
94
|
+
|
95
|
+
class NotCapturedError(Exception):
|
96
|
+
pass
|
97
|
+
|
92
98
|
@abc.abstractmethod
|
93
99
|
def capture(self) -> None:
|
94
100
|
"""Must be cooperatively called only from the expected locations."""
|
@@ -142,9 +148,6 @@ class CaptureLoggingContextImpl(CaptureLoggingContext):
|
|
142
148
|
self._exc_info_tuple: ta.Optional[LoggingExcInfoTuple] = (type(exc_info), exc_info, exc_info.__traceback__) # noqa
|
143
149
|
else:
|
144
150
|
self._exc_info_tuple = exc_info
|
145
|
-
else:
|
146
|
-
self._exc_info = None
|
147
|
-
self._exc_info_tuple = None
|
148
151
|
|
149
152
|
#
|
150
153
|
|
@@ -154,14 +157,7 @@ class CaptureLoggingContextImpl(CaptureLoggingContext):
|
|
154
157
|
self._stack_offset = stack_offset
|
155
158
|
self._stack_info = stack_info
|
156
159
|
|
157
|
-
|
158
|
-
|
159
|
-
self._thread = LoggingThreadInfo.build()
|
160
|
-
self._process = LoggingProcessInfo.build()
|
161
|
-
self._multiprocessing = LoggingMultiprocessingInfo.build()
|
162
|
-
self._asyncio_task = LoggingAsyncioTaskInfo.build()
|
163
|
-
|
164
|
-
#
|
160
|
+
##
|
165
161
|
|
166
162
|
@property
|
167
163
|
def level(self) -> NamedLogLevel:
|
@@ -185,6 +181,11 @@ class CaptureLoggingContextImpl(CaptureLoggingContext):
|
|
185
181
|
times = self._times = LoggingTimeFields.build(self.time_ns)
|
186
182
|
return times
|
187
183
|
|
184
|
+
#
|
185
|
+
|
186
|
+
_exc_info: ta.Optional[LoggingExcInfo] = None
|
187
|
+
_exc_info_tuple: ta.Optional[LoggingExcInfoTuple] = None
|
188
|
+
|
188
189
|
@property
|
189
190
|
def exc_info(self) -> ta.Optional[LoggingExcInfo]:
|
190
191
|
return self._exc_info
|
@@ -193,58 +194,83 @@ class CaptureLoggingContextImpl(CaptureLoggingContext):
|
|
193
194
|
def exc_info_tuple(self) -> ta.Optional[LoggingExcInfoTuple]:
|
194
195
|
return self._exc_info_tuple
|
195
196
|
|
196
|
-
|
197
|
+
##
|
198
|
+
|
199
|
+
_stack_offset: int
|
200
|
+
_stack_info: bool
|
197
201
|
|
198
|
-
def inc_stack_offset(self, ofs: int = 1) -> '
|
202
|
+
def inc_stack_offset(self, ofs: int = 1) -> 'CaptureLoggingContext':
|
199
203
|
if hasattr(self, '_stack_offset'):
|
200
204
|
self._stack_offset += ofs
|
201
205
|
return self
|
202
206
|
|
207
|
+
_has_captured: bool = False
|
208
|
+
|
203
209
|
_caller: ta.Optional[LoggingCaller]
|
210
|
+
_source_file: ta.Optional[LoggingSourceFileInfo]
|
211
|
+
|
212
|
+
_thread: ta.Optional[LoggingThreadInfo]
|
213
|
+
_process: ta.Optional[LoggingProcessInfo]
|
214
|
+
_multiprocessing: ta.Optional[LoggingMultiprocessingInfo]
|
215
|
+
_asyncio_task: ta.Optional[LoggingAsyncioTaskInfo]
|
204
216
|
|
205
217
|
def capture(self) -> None:
|
206
|
-
|
218
|
+
if self._has_captured:
|
219
|
+
raise CaptureLoggingContextImpl.AlreadyCapturedError
|
220
|
+
self._has_captured = True
|
221
|
+
|
222
|
+
if not hasattr(self, '_caller'):
|
223
|
+
self._caller = LoggingCaller.find(
|
224
|
+
self._stack_offset + 1,
|
225
|
+
stack_info=self._stack_info,
|
226
|
+
)
|
227
|
+
|
228
|
+
if (caller := self._caller) is not None:
|
229
|
+
self._source_file = LoggingSourceFileInfo.build(caller.file_path)
|
230
|
+
else:
|
231
|
+
self._source_file = None
|
207
232
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
233
|
+
self._thread = LoggingThreadInfo.build()
|
234
|
+
self._process = LoggingProcessInfo.build()
|
235
|
+
self._multiprocessing = LoggingMultiprocessingInfo.build()
|
236
|
+
self._asyncio_task = LoggingAsyncioTaskInfo.build()
|
212
237
|
|
213
|
-
|
214
|
-
self._stack_offset + 1,
|
215
|
-
stack_info=self._stack_info,
|
216
|
-
)
|
238
|
+
#
|
217
239
|
|
218
240
|
def caller(self) -> ta.Optional[LoggingCaller]:
|
219
241
|
try:
|
220
242
|
return self._caller
|
221
243
|
except AttributeError:
|
222
|
-
|
223
|
-
|
224
|
-
_source_file: ta.Optional[LoggingSourceFileInfo]
|
244
|
+
raise CaptureLoggingContext.NotCapturedError from None
|
225
245
|
|
226
246
|
def source_file(self) -> ta.Optional[LoggingSourceFileInfo]:
|
227
247
|
try:
|
228
248
|
return self._source_file
|
229
249
|
except AttributeError:
|
230
|
-
|
231
|
-
|
232
|
-
if (caller := self.caller()) is None:
|
233
|
-
return None
|
234
|
-
|
235
|
-
src_file = self._source_file = LoggingSourceFileInfo.build(caller.file_path)
|
236
|
-
return src_file
|
250
|
+
raise CaptureLoggingContext.NotCapturedError from None
|
237
251
|
|
238
252
|
#
|
239
253
|
|
240
254
|
def thread(self) -> ta.Optional[LoggingThreadInfo]:
|
241
|
-
|
255
|
+
try:
|
256
|
+
return self._thread
|
257
|
+
except AttributeError:
|
258
|
+
raise CaptureLoggingContext.NotCapturedError from None
|
242
259
|
|
243
260
|
def process(self) -> ta.Optional[LoggingProcessInfo]:
|
244
|
-
|
261
|
+
try:
|
262
|
+
return self._process
|
263
|
+
except AttributeError:
|
264
|
+
raise CaptureLoggingContext.NotCapturedError from None
|
245
265
|
|
246
266
|
def multiprocessing(self) -> ta.Optional[LoggingMultiprocessingInfo]:
|
247
|
-
|
267
|
+
try:
|
268
|
+
return self._multiprocessing
|
269
|
+
except AttributeError:
|
270
|
+
raise CaptureLoggingContext.NotCapturedError from None
|
248
271
|
|
249
272
|
def asyncio_task(self) -> ta.Optional[LoggingAsyncioTaskInfo]:
|
250
|
-
|
273
|
+
try:
|
274
|
+
return self._asyncio_task
|
275
|
+
except AttributeError:
|
276
|
+
raise CaptureLoggingContext.NotCapturedError from None
|
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
|
|
@@ -46,8 +43,9 @@ class LoggingSourceFileInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[
|
|
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
|
@@ -64,8 +62,9 @@ class LoggingThreadInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[misc
|
|
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
|
@@ -78,8 +77,9 @@ class LoggingProcessInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore[mis
|
|
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
|
@@ -96,8 +96,9 @@ class LoggingMultiprocessingInfo(LoggingContextInfo, ta.NamedTuple): # type: ig
|
|
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
|
@@ -111,6 +112,9 @@ class LoggingAsyncioTaskInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore
|
|
111
112
|
except Exception: # noqa
|
112
113
|
return None
|
113
114
|
|
115
|
+
if task is None:
|
116
|
+
return None
|
117
|
+
|
114
118
|
return cls(
|
115
119
|
task.get_name(), # Always non-None
|
116
120
|
)
|
omlish/logs/modules.py
CHANGED
@@ -2,9 +2,12 @@
|
|
2
2
|
import logging
|
3
3
|
import typing as ta
|
4
4
|
|
5
|
+
from .base import Logger
|
6
|
+
from .std.adapters import StdLogger
|
7
|
+
|
5
8
|
|
6
9
|
##
|
7
10
|
|
8
11
|
|
9
|
-
def get_module_logger(mod_globals: ta.Mapping[str, ta.Any]) ->
|
10
|
-
return logging.getLogger(mod_globals.get('__name__'))
|
12
|
+
def get_module_logger(mod_globals: ta.Mapping[str, ta.Any]) -> Logger:
|
13
|
+
return StdLogger(logging.getLogger(mod_globals.get('__name__'))) # noqa
|
omlish/logs/std/handlers.py
CHANGED
@@ -8,10 +8,12 @@ import typing as ta
|
|
8
8
|
|
9
9
|
|
10
10
|
class ListLoggingHandler(logging.Handler):
|
11
|
-
def __init__(self) -> None:
|
11
|
+
def __init__(self, record_list: ta.Optional[ta.List[logging.LogRecord]] = None) -> None:
|
12
12
|
super().__init__()
|
13
13
|
|
14
|
-
|
14
|
+
if record_list is None:
|
15
|
+
record_list = []
|
16
|
+
self.records: ta.List[logging.LogRecord] = record_list
|
15
17
|
|
16
18
|
def emit(self, record: logging.LogRecord) -> None:
|
17
19
|
self.records.append(record)
|
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
|
omlish/secrets/secrets.py
CHANGED
@@ -11,7 +11,6 @@ TODO:
|
|
11
11
|
"""
|
12
12
|
import abc
|
13
13
|
import collections
|
14
|
-
import logging
|
15
14
|
import os
|
16
15
|
import sys
|
17
16
|
import time
|
@@ -21,12 +20,13 @@ import typing as ta
|
|
21
20
|
from .. import dataclasses as dc
|
22
21
|
from .. import lang
|
23
22
|
from .. import marshal as msh
|
23
|
+
from ..logs import all as logs
|
24
24
|
|
25
25
|
|
26
26
|
msh.register_global_module_import('.marshal', __package__)
|
27
27
|
|
28
28
|
|
29
|
-
log =
|
29
|
+
log = logs.get_module_logger(globals())
|
30
30
|
|
31
31
|
|
32
32
|
##
|
@@ -269,7 +269,7 @@ class LoggingSecrets(Secrets):
|
|
269
269
|
self,
|
270
270
|
child: Secrets,
|
271
271
|
*,
|
272
|
-
log:
|
272
|
+
log: logs.LoggerLike | None = None, # noqa
|
273
273
|
) -> None:
|
274
274
|
super().__init__()
|
275
275
|
|
@@ -3,11 +3,11 @@
|
|
3
3
|
import abc
|
4
4
|
import concurrent.futures as cf
|
5
5
|
import dataclasses as dc
|
6
|
-
import logging
|
7
6
|
import socket
|
8
7
|
import typing as ta
|
9
8
|
|
10
9
|
from ...lite.abstract import Abstract
|
10
|
+
from ...logs.protocols import LoggerLike
|
11
11
|
from ..addresses import SocketAndAddress
|
12
12
|
from ..handlers import SocketHandler
|
13
13
|
from ..io import SocketIoPair
|
@@ -142,7 +142,7 @@ class ExecutorSocketServerHandler(SocketServerHandler_):
|
|
142
142
|
@dc.dataclass(frozen=True)
|
143
143
|
class ExceptionLoggingSocketServerHandler(SocketServerHandler_):
|
144
144
|
handler: SocketServerHandler
|
145
|
-
log:
|
145
|
+
log: LoggerLike
|
146
146
|
|
147
147
|
ignored: ta.Optional[ta.Container[ta.Type[Exception]]] = None
|
148
148
|
|
omlish/sockets/server/server.py
CHANGED
@@ -11,6 +11,7 @@ import typing as ta
|
|
11
11
|
from ...lite.abstract import Abstract
|
12
12
|
from ...lite.contextmanagers import ExitStacked
|
13
13
|
from ...lite.contextmanagers import defer
|
14
|
+
from ...logs.protocols import LoggerLike
|
14
15
|
from ..addresses import SocketAndAddress
|
15
16
|
from ..bind import SocketBinder
|
16
17
|
from ..io import close_socket_immediately
|
@@ -21,7 +22,7 @@ from .handlers import SocketServerHandler
|
|
21
22
|
|
22
23
|
|
23
24
|
class SocketServer:
|
24
|
-
_DEFAULT_LOGGER = logging.getLogger('.'.join([__name__, 'SocketServer']))
|
25
|
+
_DEFAULT_LOGGER: LoggerLike = logging.getLogger('.'.join([__name__, 'SocketServer'])) # FIXME
|
25
26
|
|
26
27
|
def __init__(
|
27
28
|
self,
|
@@ -29,7 +30,7 @@ class SocketServer:
|
|
29
30
|
handler: SocketServerHandler,
|
30
31
|
*,
|
31
32
|
on_error: ta.Optional[ta.Callable[[BaseException, ta.Optional[SocketAndAddress]], None]] = None,
|
32
|
-
error_logger: ta.Optional[
|
33
|
+
error_logger: ta.Optional[LoggerLike] = _DEFAULT_LOGGER,
|
33
34
|
poll_interval: float = .5,
|
34
35
|
shutdown_timeout: ta.Optional[float] = None,
|
35
36
|
) -> None:
|
omlish/sockets/server/ssl.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# ruff: noqa: UP006 UP007 UP045
|
2
2
|
# @omlish-lite
|
3
3
|
import dataclasses as dc
|
4
|
-
import logging
|
5
4
|
import typing as ta
|
6
5
|
|
6
|
+
from ...logs.protocols import LoggerLike
|
7
7
|
from ..addresses import SocketAndAddress
|
8
8
|
from ..io import close_socket_immediately
|
9
9
|
from .handlers import SocketServerHandler
|
@@ -17,7 +17,7 @@ from .handlers import SocketServerHandler_
|
|
17
17
|
class SslErrorHandlingSocketServerHandler(SocketServerHandler_):
|
18
18
|
handler: SocketServerHandler
|
19
19
|
|
20
|
-
log: ta.Optional[
|
20
|
+
log: ta.Optional[LoggerLike] = None
|
21
21
|
|
22
22
|
#
|
23
23
|
|
omlish/subprocesses/base.py
CHANGED
@@ -9,6 +9,7 @@ import typing as ta
|
|
9
9
|
|
10
10
|
from ..lite.abstract import Abstract
|
11
11
|
from ..lite.timeouts import Timeout
|
12
|
+
from ..logs.protocols import LoggerLike
|
12
13
|
from .wrap import subprocess_maybe_shell_wrap_exec
|
13
14
|
|
14
15
|
|
@@ -55,12 +56,12 @@ class VerboseCalledProcessError(subprocess.CalledProcessError):
|
|
55
56
|
|
56
57
|
|
57
58
|
class BaseSubprocesses(Abstract):
|
58
|
-
DEFAULT_LOGGER: ta.ClassVar[ta.Optional[
|
59
|
+
DEFAULT_LOGGER: ta.ClassVar[ta.Optional[LoggerLike]] = None
|
59
60
|
|
60
61
|
def __init__(
|
61
62
|
self,
|
62
63
|
*,
|
63
|
-
log: ta.Optional[
|
64
|
+
log: ta.Optional[LoggerLike] = None,
|
64
65
|
try_exceptions: ta.Optional[ta.Tuple[ta.Type[Exception], ...]] = None,
|
65
66
|
) -> None:
|
66
67
|
super().__init__()
|
@@ -68,7 +69,7 @@ class BaseSubprocesses(Abstract):
|
|
68
69
|
self._log = log if log is not None else self.DEFAULT_LOGGER
|
69
70
|
self._try_exceptions = try_exceptions if try_exceptions is not None else self.DEFAULT_TRY_EXCEPTIONS
|
70
71
|
|
71
|
-
def set_logger(self, log: ta.Optional[
|
72
|
+
def set_logger(self, log: ta.Optional[LoggerLike]) -> None:
|
72
73
|
self._log = log
|
73
74
|
|
74
75
|
#
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=J-C7WHTn5DQ8yi1VGtWDPKJ49OgPRH0xEYXXfxVvAPM,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
|
@@ -39,7 +39,7 @@ omlish/asyncs/asyncio/all.py,sha256=u2JpMEs-0AJ0Vd8yU10HvWD8rfKxdFfMiwBu2oDeuuQ,
|
|
39
39
|
omlish/asyncs/asyncio/channels.py,sha256=oniTpmw_eeKK70APyEZLhRUChwLwebE4N0_uZiwSKgQ,1085
|
40
40
|
omlish/asyncs/asyncio/sockets.py,sha256=i1a2DZ52IuvRQQQW8FJxEUFboqpKn_K08a_MsMaecqU,1264
|
41
41
|
omlish/asyncs/asyncio/streams.py,sha256=Laa9BNwajZ7Wt_rJoYMbQtfSX4Q4i-dVHhtYSekCHXM,1015
|
42
|
-
omlish/asyncs/asyncio/subprocesses.py,sha256=
|
42
|
+
omlish/asyncs/asyncio/subprocesses.py,sha256=FlnI23o2Rm-T-gXHWuHCaVeMoLKzgStk3CPO0OPIth4,6307
|
43
43
|
omlish/asyncs/asyncio/timeouts.py,sha256=lJ4qmDqyxUeAQCXJGiLL8pxYwoR1F1lntZ18HVf40Wo,452
|
44
44
|
omlish/asyncs/asyncio/utils.py,sha256=dCC4hXqCTKBpU5urAXsKUIIua2M9JXAtumwh7IUEu7E,2443
|
45
45
|
omlish/asyncs/bluelet/LICENSE,sha256=q5Kpj4s30qpi8H66tXFlh5v8_fkaKMFIzqdGfnN0Hz0,555
|
@@ -49,7 +49,7 @@ omlish/asyncs/bluelet/api.py,sha256=RFOd95cVSQ7NQNlOVfcIiVtf9cHYx0sLq2ugbR_LIQk,
|
|
49
49
|
omlish/asyncs/bluelet/core.py,sha256=ZxwdxfxhlYVLyh0Iwz6yvVKy3xgo_BwLm-gwqSlqPt4,5458
|
50
50
|
omlish/asyncs/bluelet/events.py,sha256=YC-mAhIVQkfMtJ-MpMkYM8LF04UhDfWNs0abgFCCwk4,2440
|
51
51
|
omlish/asyncs/bluelet/files.py,sha256=gY_hlPCGbDZR7twvuslDsv5yKSh9ciO6X7Lxu3ni_vs,2419
|
52
|
-
omlish/asyncs/bluelet/runner.py,sha256=
|
52
|
+
omlish/asyncs/bluelet/runner.py,sha256=vFh4Tt0J5fM0RYXrLieKcQ0oyLEVoEwkYC9Ml5wII9k,15511
|
53
53
|
omlish/asyncs/bluelet/sockets.py,sha256=YJvbkX-oE7H-fNHzMJmTzCsLeBwEt46p4Fz9jF2FjLU,6776
|
54
54
|
omlish/asyncs/ioproxy/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
55
55
|
omlish/asyncs/ioproxy/all.py,sha256=_0mg0OjNKbnpGPSQZ-ftXYhKSpt-Po4Rlu2kam7v3XQ,1003
|
@@ -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
|
@@ -245,7 +245,7 @@ omlish/formats/__init__.py,sha256=T0AG1gFnqQ5JiHN0UPQjQ-7g5tnxMIG-mgOvMYExYAM,21
|
|
245
245
|
omlish/formats/cbor.py,sha256=o_Hbe4kthO9CeXK-FySrw0dHVlrdyTo2Y8PpGRDfZ3c,514
|
246
246
|
omlish/formats/cloudpickle.py,sha256=16si4yUp_pAdDWGECAWf6HLA2PwSANGGgDoMLGZUem8,579
|
247
247
|
omlish/formats/codecs.py,sha256=n_02fv1Qk2ixG9vDkTZKdRHGWPKnvDBDdOMVKfnElOI,1641
|
248
|
-
omlish/formats/dotenv.py,sha256=
|
248
|
+
omlish/formats/dotenv.py,sha256=2BjwqsgLgXCmvyNeWq6_xigfH4OIcIoaJbYIuVmul5E,19351
|
249
249
|
omlish/formats/logfmt.py,sha256=i_pKnzFFyNAcPiqC4FiTYPC6tJujlaGuw94V2YNVkf8,2639
|
250
250
|
omlish/formats/pickle.py,sha256=jdp4E9WH9qVPBE3sSqbqDtUo18RbTSIiSpSzJ-IEVZw,529
|
251
251
|
omlish/formats/props.py,sha256=orlqpFG88hL39apzaAOHmNooQv-kbnXX2WggZjdI-U8,18934
|
@@ -315,12 +315,12 @@ 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
|
322
322
|
omlish/http/encodings.py,sha256=w2WoKajpaZnQH8j-IBvk5ZFL2O2pAU_iBvZnkocaTlw,164
|
323
|
-
omlish/http/handlers.py,sha256=
|
323
|
+
omlish/http/handlers.py,sha256=MOBXGg3F_G0rtCXtEBiGLY-Yb31f4ScjGtozII0bIDE,3972
|
324
324
|
omlish/http/headers.py,sha256=Ft7jsjDegcpzkXk2rk3uw8bEFIB7vifIfLMMwATDo1A,5716
|
325
325
|
omlish/http/json.py,sha256=9XwAsl4966Mxrv-1ytyCqhcE6lbBJw-0_tFZzGszgHE,7440
|
326
326
|
omlish/http/jwt.py,sha256=F9-1syqS7qR6C_z06tmz9zM4CXbKrw6s7w3NIPGdyuU,4354
|
@@ -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
|
@@ -498,22 +498,22 @@ 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
500
|
omlish/logs/all.py,sha256=9VOobL0p3E_6QWsnBmlCPhxz5zqs-AiH4jvZR3--ZZA,1085
|
501
|
-
omlish/logs/base.py,sha256=
|
502
|
-
omlish/logs/callers.py,sha256=
|
503
|
-
omlish/logs/contexts.py,sha256=
|
504
|
-
omlish/logs/infos.py,sha256=
|
501
|
+
omlish/logs/base.py,sha256=NyydcPUYPODiTCslCr--hlXSZSTvRgF_QNjdszpqfTc,6663
|
502
|
+
omlish/logs/callers.py,sha256=wpLHCfykqG5yAE4Wi1LAVcZiEMRULVsObFqn7-49o8g,2057
|
503
|
+
omlish/logs/contexts.py,sha256=dC84Wa__j0leSJw5SzP-ygsflfzIiqvmRnv9meD-Q_U,7523
|
504
|
+
omlish/logs/infos.py,sha256=OutGmqvKBmE1oHuiQk1afItnbBcBgAuPONMekwR0sco,2561
|
505
505
|
omlish/logs/levels.py,sha256=b3i-70OcvNMcOQBzg1IUHBPESfHz0uu5mi5t_jbwv1Y,1966
|
506
|
-
omlish/logs/modules.py,sha256=
|
506
|
+
omlish/logs/modules.py,sha256=ImciecEfeLwh65vO3gWVpADRhOz9cBoAkBDJ9VyliXY,267
|
507
507
|
omlish/logs/protocols.py,sha256=8l5TgNUNgfrqYPA6dVijPFGLxzWhvgS4Cca64XHT0jo,939
|
508
508
|
omlish/logs/standard.py,sha256=ppho-wDecGxUiRXOdCIlblmrQhqXZ0oQOGayy8N53XY,3237
|
509
|
-
omlish/logs/times.py,sha256=
|
509
|
+
omlish/logs/times.py,sha256=MTgZDF89qXeXqhsXpELPSk8fv5_0MJKb3jMgYVl-J94,2563
|
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
513
|
omlish/logs/std/adapters.py,sha256=qRXusW8iGYF29C3cy1srb4pgJ0Fv5li8bUvnegxo9o8,1005
|
514
514
|
omlish/logs/std/configs.py,sha256=aDQahqBJXJpmQBaxXVK5S2xi_I_nrLLcCLTq6Q2K6EQ,1037
|
515
515
|
omlish/logs/std/filters.py,sha256=Z8tHOvBRiP-OYm2z5cwY-lYXRimNgferEARMwvwx5Pw,380
|
516
|
-
omlish/logs/std/handlers.py,sha256=
|
516
|
+
omlish/logs/std/handlers.py,sha256=uTWOT6oayBUEftKmJ8yo89ZP4plv5eQ8Lbcmt-IGl8c,469
|
517
517
|
omlish/logs/std/json.py,sha256=QJ5lywLsRsPyVno2nk2kOw-Z1z3bfrDiZzqcRUdWUMY,1382
|
518
518
|
omlish/logs/std/noisy.py,sha256=hWpbseerZqlHdEPEajDTSmcRhx8LmmNAxz_7GBZAO9s,353
|
519
519
|
omlish/logs/std/proxy.py,sha256=9MVV5kbj9nwl3KZGtrYCIb5XTpv33f33zZ7P_B58fX0,2394
|
@@ -634,7 +634,7 @@ omlish/secrets/marshal.py,sha256=u90n1OfRfdpH1T2F0xK_pAPH1ENYL6acFt6XdVd3KvI,198
|
|
634
634
|
omlish/secrets/openssl.py,sha256=4zp1KZ1EVRNaBS0VIokTqnamy3ZeeC1XN2wSXx4lEcM,6215
|
635
635
|
omlish/secrets/pwgen.py,sha256=Z5i1qMKK4idOZvWai5dXkI59gX7pYzFFlFYAj7qEmqA,1706
|
636
636
|
omlish/secrets/pwhash.py,sha256=Jctv3QzcMvVPXJsWA3w3LDUlzmyUDGEWG9sLiJz1xaw,4107
|
637
|
-
omlish/secrets/secrets.py,sha256=
|
637
|
+
omlish/secrets/secrets.py,sha256=wf_X7IA7HXSEcSPCSt97KuHgYCjDzVhKfDS17rrZUVk,8053
|
638
638
|
omlish/secrets/ssl.py,sha256=HnH5MS31X9Uid7Iw1CWqviaVwMLF1Ha8RxZiiE-_iF8,158
|
639
639
|
omlish/secrets/subprocesses.py,sha256=ZdShw4jrGDdyQW8mRMgl106-9qpCEq2J6w_x7ruz1wk,1217
|
640
640
|
omlish/secrets/tempssl.py,sha256=KbNKGwiKw95Ly2b1OtNL2jhPa25aO0t_tvyNB5trUcU,1885
|
@@ -646,9 +646,9 @@ omlish/sockets/io.py,sha256=YdrtrpqXAUJgQRqeAdTxH3m06DE5xRt08tqdRaRn5bY,1414
|
|
646
646
|
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
|
-
omlish/sockets/server/handlers.py,sha256=
|
650
|
-
omlish/sockets/server/server.py,sha256=
|
651
|
-
omlish/sockets/server/ssl.py,sha256=
|
649
|
+
omlish/sockets/server/handlers.py,sha256=GEG3zWb3-DyjZaVWtggq1aKFtvAoyqOJEw2Aq-7S1xs,3934
|
650
|
+
omlish/sockets/server/server.py,sha256=sKDz_AE44opgE4mb_Km5stGRR4mRFjhXcjFrXfJ5-bk,6347
|
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
|
654
654
|
omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU,1113
|
@@ -746,7 +746,7 @@ omlish/sql/tabledefs/lower.py,sha256=i4_QkVlVH5U99O6pqokrB661AudNVJ9Q-OwtkKOBleU
|
|
746
746
|
omlish/sql/tabledefs/tabledefs.py,sha256=lIhvlt0pk6G7RZAtDFsFXm5j0l9BvRfnP7vNGeydHtE,816
|
747
747
|
omlish/subprocesses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
748
748
|
omlish/subprocesses/asyncs.py,sha256=G0KeH53yRsLJrLjYCrtQgDS3RKA0QRaSgdGDMiNGXI8,2710
|
749
|
-
omlish/subprocesses/base.py,sha256=
|
749
|
+
omlish/subprocesses/base.py,sha256=wFewm8m5D6Qln6N9WjsIHxF5nqmQ8xGaBYfG1BSNdFk,6186
|
750
750
|
omlish/subprocesses/editor.py,sha256=xBrd7gY0akhRfDIBK5YIBrYMHECtl_8r499iKViyfpQ,2634
|
751
751
|
omlish/subprocesses/maysync.py,sha256=UqpidDPw-w2GDLRJn03mQm-s98wtN348olwSh2ceTig,1424
|
752
752
|
omlish/subprocesses/run.py,sha256=mV38F_hmyVCXbpDxl5xNmzz5al_LqZ3FOrfcPcjSqy8,4416
|
@@ -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.dev429.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
896
|
+
omlish-0.0.0.dev429.dist-info/METADATA,sha256=J2Jsv1U4suYQj3spIX7Tqi6R0iatqB_2mTMxagh8fOM,19243
|
897
|
+
omlish-0.0.0.dev429.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
898
|
+
omlish-0.0.0.dev429.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
899
|
+
omlish-0.0.0.dev429.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
900
|
+
omlish-0.0.0.dev429.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|