omlish 0.0.0.dev427__py3-none-any.whl → 0.0.0.dev428__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 CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev427'
2
- __revision__ = '13723ced41ac43696831e7a640c46f91663c9a46'
1
+ __version__ = '0.0.0.dev428'
2
+ __revision__ = '302f3506177c6fb44a3b8786e8125ee75d322b0e'
3
3
 
4
4
 
5
5
  #
@@ -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[logging.Logger] = None,
31
+ log: ta.Optional[LoggerLike] = None,
32
32
  ) -> None:
33
33
  super().__init__()
34
34
 
@@ -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[logging.Logger] = None,
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[logging.Logger] = None,
186
+ log: ta.Optional[LoggerLike] = None,
186
187
  ) -> None:
187
188
  super().__init__()
188
189
 
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[logging.Logger] = None,
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[logging.Logger] = None,
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[logging.Logger] = None,
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[logging.Logger] = None,
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[logging.Logger] = None,
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[logging.Logger] = None,
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/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: logging.Logger
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: logging.Logger
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/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) -> 'LoggingContext':
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
- """Must be cooperatively called only from the exact configured _stack_offset."""
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
- try:
209
- self._caller # noqa
210
- except AttributeError:
211
- pass
233
+ self._thread = LoggingThreadInfo.build()
234
+ self._process = LoggingProcessInfo.build()
235
+ self._multiprocessing = LoggingMultiprocessingInfo.build()
236
+ self._asyncio_task = LoggingAsyncioTaskInfo.build()
212
237
 
213
- self._caller = LoggingCaller.find(
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
- return None
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
- pass
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
- return self._thread
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
- return self._process
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
- return self._multiprocessing
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
- return self._asyncio_task
273
+ try:
274
+ return self._asyncio_task
275
+ except AttributeError:
276
+ raise CaptureLoggingContext.NotCapturedError from None
omlish/logs/infos.py CHANGED
@@ -111,6 +111,9 @@ class LoggingAsyncioTaskInfo(LoggingContextInfo, ta.NamedTuple): # type: ignore
111
111
  except Exception: # noqa
112
112
  return None
113
113
 
114
+ if task is None:
115
+ return None
116
+
114
117
  return cls(
115
118
  task.get_name(), # Always non-None
116
119
  )
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]) -> logging.Logger:
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
@@ -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
- self.records: ta.List[logging.LogRecord] = []
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/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 = logging.getLogger(__name__)
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: logging.Logger | None = None, # noqa
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: logging.Logger
145
+ log: LoggerLike
146
146
 
147
147
  ignored: ta.Optional[ta.Container[ta.Type[Exception]]] = None
148
148
 
@@ -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
@@ -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[logging.Logger] = _DEFAULT_LOGGER,
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:
@@ -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[logging.Logger] = None
20
+ log: ta.Optional[LoggerLike] = None
21
21
 
22
22
  #
23
23
 
@@ -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[logging.Logger]] = None
59
+ DEFAULT_LOGGER: ta.ClassVar[ta.Optional[LoggerLike]] = None
59
60
 
60
61
  def __init__(
61
62
  self,
62
63
  *,
63
- log: ta.Optional[logging.Logger] = None,
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[logging.Logger]) -> None:
72
+ def set_logger(self, log: ta.Optional[LoggerLike]) -> None:
72
73
  self._log = log
73
74
 
74
75
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev427
3
+ Version: 0.0.0.dev428
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=QkXaBAuv7ZX9gYuayTSwd9nc5AxEetkjHMvq5rsSLtM,3575
2
+ omlish/__about__.py,sha256=Hpb2Yne7crg_ww7XqcFbR5Q0NE38iJPTfXPQEaCwgic,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=8o-uWNsJhSoM7Egbofc23CeJFRmb4isb9zVVh1Fxjfk,6285
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=qJCid2ObvWW64VRAGNoFK3Cpl1HAsu7ZgDxy6TyebRE,15478
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
@@ -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=91_uoLKCntDqcqyyRMOCKvVkx9aC2nkLMuAH4rit8NI,19350
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
@@ -320,7 +320,7 @@ 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=ewpYM0Kmea26s0ySbsaKsZdOlSaUy9iZt6DZAKxkDqw,3940
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
@@ -500,10 +500,10 @@ omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
500
500
  omlish/logs/all.py,sha256=9VOobL0p3E_6QWsnBmlCPhxz5zqs-AiH4jvZR3--ZZA,1085
501
501
  omlish/logs/base.py,sha256=LxDnvCDzZr9AfjO_5NmoE9z1Mqw_7meQ7WGgGYissXk,6649
502
502
  omlish/logs/callers.py,sha256=tRj24LxlEimDGCplDVVJDvRSt_u72cgjnnvb0mdZgvU,2065
503
- omlish/logs/contexts.py,sha256=apXaLOk7LlXNdz_gpF5zHhTLpFFBmB2_SHX8UVxopks,6537
504
- omlish/logs/infos.py,sha256=VPx9VrcN1fCPnXjc8QCsMlww0fgEG3qdkzo2KhSxMwY,2716
503
+ omlish/logs/contexts.py,sha256=dC84Wa__j0leSJw5SzP-ygsflfzIiqvmRnv9meD-Q_U,7523
504
+ omlish/logs/infos.py,sha256=Drf9BnDOs3vMPb5G-9pAFUoubjXvzlzPMDiKSjgF1XQ,2766
505
505
  omlish/logs/levels.py,sha256=b3i-70OcvNMcOQBzg1IUHBPESfHz0uu5mi5t_jbwv1Y,1966
506
- omlish/logs/modules.py,sha256=EFOqubbU5P0GW576OL6j9fmizNN2oyfpsp5YnKCoUgk,194
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
509
  omlish/logs/times.py,sha256=ro2TSD_Xwq_cNN8f_FrEGfdhD4PTbh0PLSG13PGx39E,2571
@@ -513,7 +513,7 @@ 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=nYPKV6Kzz8Oeyw4-3ZdJKKEUfgubfmwzqr3RaCNcmS4,338
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=YsOdiOZ4sYY4KT5ycoP7Au-xVKk-Odu9dG-BcdsCTH4,8030
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=T--CSns9810f25--0Blv5bspAXhMjULtKEcXSGUpxOo,3912
650
- omlish/sockets/server/server.py,sha256=Il1y0LHRa_eB6FLLcuVXbfu9tLOpOttLBCffh3wWSBA,6289
651
- omlish/sockets/server/ssl.py,sha256=QLiPcng1f1RFDhw4aS-Fy57fm0R7CXm76STpHmT55z0,1067
649
+ omlish/sockets/server/handlers.py,sha256=GEG3zWb3-DyjZaVWtggq1aKFtvAoyqOJEw2Aq-7S1xs,3934
650
+ omlish/sockets/server/server.py,sha256=tYWDRwlXdX5m_sd2mgdOMs7DrZFjHH3zHKa2KzpZb5k,6326
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=TEufkIaA-eyRLmdmxHSbu8ffPtIansu6YVoxi0wZf2c,6158
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.dev427.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
896
- omlish-0.0.0.dev427.dist-info/METADATA,sha256=XcyPFrnqymcaHcY3ycLj3wJn1_l-E-qdd3MilxfuI8o,19243
897
- omlish-0.0.0.dev427.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
898
- omlish-0.0.0.dev427.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
899
- omlish-0.0.0.dev427.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
900
- omlish-0.0.0.dev427.dist-info/RECORD,,
895
+ omlish-0.0.0.dev428.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
896
+ omlish-0.0.0.dev428.dist-info/METADATA,sha256=DR__EMO_09RXhsC47ctuSZNq5nRcStmhoJnLkPhs8DQ,19243
897
+ omlish-0.0.0.dev428.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
898
+ omlish-0.0.0.dev428.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
899
+ omlish-0.0.0.dev428.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
900
+ omlish-0.0.0.dev428.dist-info/RECORD,,