omlish 0.0.0.dev133__py3-none-any.whl → 0.0.0.dev177__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/.manifests.json +265 -7
- omlish/__about__.py +5 -3
- omlish/antlr/_runtime/__init__.py +0 -22
- omlish/antlr/_runtime/_all.py +24 -0
- omlish/antlr/_runtime/atn/ParserATNSimulator.py +1 -1
- omlish/antlr/_runtime/dfa/DFASerializer.py +1 -1
- omlish/antlr/_runtime/error/DiagnosticErrorListener.py +2 -1
- omlish/antlr/_runtime/xpath/XPath.py +7 -1
- omlish/antlr/_runtime/xpath/XPathLexer.py +1 -1
- omlish/antlr/delimit.py +106 -0
- omlish/antlr/dot.py +31 -0
- omlish/antlr/errors.py +11 -0
- omlish/antlr/input.py +96 -0
- omlish/antlr/parsing.py +19 -0
- omlish/antlr/runtime.py +102 -0
- omlish/antlr/utils.py +38 -0
- omlish/argparse/all.py +45 -0
- omlish/{argparse.py → argparse/cli.py} +112 -107
- omlish/asyncs/__init__.py +0 -35
- omlish/asyncs/all.py +35 -0
- omlish/asyncs/asyncio/all.py +7 -0
- omlish/asyncs/asyncio/channels.py +40 -0
- omlish/asyncs/asyncio/streams.py +45 -0
- omlish/asyncs/asyncio/subprocesses.py +238 -0
- omlish/asyncs/asyncio/timeouts.py +16 -0
- omlish/asyncs/bluelet/LICENSE +6 -0
- omlish/asyncs/bluelet/all.py +67 -0
- omlish/asyncs/bluelet/api.py +23 -0
- omlish/asyncs/bluelet/core.py +178 -0
- omlish/asyncs/bluelet/events.py +78 -0
- omlish/asyncs/bluelet/files.py +80 -0
- omlish/asyncs/bluelet/runner.py +416 -0
- omlish/asyncs/bluelet/sockets.py +214 -0
- omlish/bootstrap/sys.py +3 -3
- omlish/cached.py +2 -2
- omlish/check.py +49 -460
- omlish/codecs/__init__.py +72 -0
- omlish/codecs/base.py +106 -0
- omlish/codecs/bytes.py +119 -0
- omlish/codecs/chain.py +23 -0
- omlish/codecs/funcs.py +39 -0
- omlish/codecs/registry.py +139 -0
- omlish/codecs/standard.py +4 -0
- omlish/codecs/text.py +217 -0
- omlish/collections/cache/impl.py +50 -57
- omlish/collections/coerce.py +1 -0
- omlish/collections/mappings.py +1 -1
- omlish/configs/flattening.py +1 -1
- omlish/defs.py +1 -1
- omlish/diag/_pycharm/runhack.py +8 -2
- omlish/diag/procfs.py +8 -8
- omlish/docker/__init__.py +0 -36
- omlish/docker/all.py +31 -0
- omlish/docker/consts.py +4 -0
- omlish/{lite/docker.py → docker/detect.py} +18 -0
- omlish/docker/{helpers.py → timebomb.py} +0 -21
- omlish/formats/cbor.py +31 -0
- omlish/formats/cloudpickle.py +31 -0
- omlish/formats/codecs.py +93 -0
- omlish/formats/json/codecs.py +29 -0
- omlish/formats/json/delimted.py +4 -0
- omlish/formats/json/stream/errors.py +2 -0
- omlish/formats/json/stream/lex.py +12 -6
- omlish/formats/json/stream/parse.py +38 -22
- omlish/formats/json5.py +31 -0
- omlish/formats/pickle.py +31 -0
- omlish/formats/repr.py +25 -0
- omlish/formats/toml.py +17 -0
- omlish/formats/yaml.py +25 -0
- omlish/funcs/__init__.py +0 -0
- omlish/{genmachine.py → funcs/genmachine.py} +5 -4
- omlish/{matchfns.py → funcs/match.py} +1 -1
- omlish/funcs/pairs.py +215 -0
- omlish/http/__init__.py +0 -48
- omlish/http/all.py +48 -0
- omlish/http/coro/__init__.py +0 -0
- omlish/{lite/fdio/corohttp.py → http/coro/fdio.py} +21 -19
- omlish/{lite/http/coroserver.py → http/coro/server.py} +20 -21
- omlish/{lite/http → http}/handlers.py +3 -2
- omlish/{lite/http → http}/parsing.py +1 -0
- omlish/http/sessions.py +1 -1
- omlish/{lite/http → http}/versions.py +1 -0
- omlish/inject/managed.py +2 -2
- omlish/io/__init__.py +0 -3
- omlish/{lite/io.py → io/buffers.py} +8 -9
- omlish/io/compress/__init__.py +9 -0
- omlish/io/compress/abc.py +104 -0
- omlish/io/compress/adapters.py +148 -0
- omlish/io/compress/base.py +24 -0
- omlish/io/compress/brotli.py +47 -0
- omlish/io/compress/bz2.py +61 -0
- omlish/io/compress/codecs.py +78 -0
- omlish/io/compress/gzip.py +350 -0
- omlish/io/compress/lz4.py +91 -0
- omlish/io/compress/lzma.py +81 -0
- omlish/io/compress/snappy.py +34 -0
- omlish/io/compress/zlib.py +74 -0
- omlish/io/compress/zstd.py +44 -0
- omlish/io/fdio/__init__.py +1 -0
- omlish/{lite → io}/fdio/handlers.py +5 -5
- omlish/{lite → io}/fdio/kqueue.py +8 -8
- omlish/{lite → io}/fdio/manager.py +7 -7
- omlish/{lite → io}/fdio/pollers.py +13 -13
- omlish/io/generators/__init__.py +56 -0
- omlish/io/generators/consts.py +1 -0
- omlish/io/generators/direct.py +13 -0
- omlish/io/generators/readers.py +189 -0
- omlish/io/generators/stepped.py +191 -0
- omlish/io/pyio.py +5 -2
- omlish/iterators/__init__.py +24 -0
- omlish/iterators/iterators.py +132 -0
- omlish/iterators/recipes.py +18 -0
- omlish/iterators/tools.py +96 -0
- omlish/iterators/unique.py +67 -0
- omlish/lang/__init__.py +13 -1
- omlish/lang/functions.py +11 -2
- omlish/lang/generators.py +243 -0
- omlish/lang/iterables.py +46 -49
- omlish/lang/maybes.py +4 -4
- omlish/lite/cached.py +39 -6
- omlish/lite/check.py +438 -75
- omlish/lite/contextmanagers.py +17 -4
- omlish/lite/dataclasses.py +42 -0
- omlish/lite/inject.py +28 -45
- omlish/lite/logs.py +0 -270
- omlish/lite/marshal.py +309 -144
- omlish/lite/pycharm.py +47 -0
- omlish/lite/reflect.py +33 -0
- omlish/lite/resources.py +8 -0
- omlish/lite/runtime.py +4 -4
- omlish/lite/shlex.py +12 -0
- omlish/lite/socketserver.py +2 -2
- omlish/lite/strings.py +31 -0
- omlish/logs/__init__.py +0 -32
- omlish/logs/{_abc.py → abc.py} +0 -1
- omlish/logs/all.py +37 -0
- omlish/logs/{formatters.py → color.py} +1 -2
- omlish/logs/configs.py +7 -38
- omlish/logs/filters.py +10 -0
- omlish/logs/handlers.py +4 -1
- omlish/logs/json.py +56 -0
- omlish/logs/proxy.py +99 -0
- omlish/logs/standard.py +128 -0
- omlish/logs/utils.py +2 -2
- omlish/manifests/__init__.py +2 -0
- omlish/manifests/load.py +209 -0
- omlish/manifests/types.py +17 -0
- omlish/marshal/base.py +1 -1
- omlish/marshal/factories.py +1 -1
- omlish/marshal/forbidden.py +1 -1
- omlish/marshal/iterables.py +1 -1
- omlish/marshal/literals.py +50 -0
- omlish/marshal/mappings.py +1 -1
- omlish/marshal/maybes.py +1 -1
- omlish/marshal/standard.py +5 -1
- omlish/marshal/unions.py +1 -1
- omlish/os/__init__.py +0 -0
- omlish/os/atomics.py +205 -0
- omlish/os/deathsig.py +23 -0
- omlish/{os.py → os/files.py} +0 -9
- omlish/{lite → os}/journald.py +2 -1
- omlish/os/linux.py +484 -0
- omlish/os/paths.py +36 -0
- omlish/{lite → os}/pidfile.py +1 -0
- omlish/os/sizes.py +9 -0
- omlish/reflect/__init__.py +3 -0
- omlish/reflect/subst.py +2 -1
- omlish/reflect/types.py +126 -44
- omlish/secrets/pwhash.py +1 -1
- omlish/secrets/subprocesses.py +3 -1
- omlish/specs/jsonrpc/marshal.py +1 -1
- omlish/specs/openapi/marshal.py +1 -1
- omlish/sql/alchemy/asyncs.py +1 -1
- omlish/sql/queries/__init__.py +9 -1
- omlish/sql/queries/building.py +3 -0
- omlish/sql/queries/exprs.py +10 -27
- omlish/sql/queries/idents.py +48 -10
- omlish/sql/queries/names.py +80 -13
- omlish/sql/queries/params.py +64 -0
- omlish/sql/queries/rendering.py +1 -1
- omlish/subprocesses.py +340 -0
- omlish/term.py +29 -14
- omlish/testing/pytest/marks.py +2 -2
- omlish/testing/pytest/plugins/asyncs.py +6 -1
- omlish/testing/pytest/plugins/logging.py +1 -1
- omlish/testing/pytest/plugins/switches.py +1 -1
- {omlish-0.0.0.dev133.dist-info → omlish-0.0.0.dev177.dist-info}/METADATA +7 -5
- {omlish-0.0.0.dev133.dist-info → omlish-0.0.0.dev177.dist-info}/RECORD +200 -117
- omlish/fnpairs.py +0 -496
- omlish/formats/json/cli/__main__.py +0 -11
- omlish/formats/json/cli/cli.py +0 -298
- omlish/formats/json/cli/formats.py +0 -71
- omlish/formats/json/cli/io.py +0 -74
- omlish/formats/json/cli/parsing.py +0 -82
- omlish/formats/json/cli/processing.py +0 -48
- omlish/formats/json/cli/rendering.py +0 -92
- omlish/iterators.py +0 -300
- omlish/lite/subprocesses.py +0 -130
- /omlish/{formats/json/cli → argparse}/__init__.py +0 -0
- /omlish/{lite/fdio → asyncs/asyncio}/__init__.py +0 -0
- /omlish/asyncs/{asyncio.py → asyncio/asyncio.py} +0 -0
- /omlish/{lite/http → asyncs/bluelet}/__init__.py +0 -0
- /omlish/collections/{_abc.py → abc.py} +0 -0
- /omlish/{fnpipes.py → funcs/pipes.py} +0 -0
- /omlish/io/{_abc.py → abc.py} +0 -0
- /omlish/sql/{_abc.py → abc.py} +0 -0
- {omlish-0.0.0.dev133.dist-info → omlish-0.0.0.dev177.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev133.dist-info → omlish-0.0.0.dev177.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev133.dist-info → omlish-0.0.0.dev177.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev133.dist-info → omlish-0.0.0.dev177.dist-info}/top_level.txt +0 -0
omlish/bootstrap/sys.py
CHANGED
@@ -21,15 +21,15 @@ from .base import SimpleBootstrap
|
|
21
21
|
|
22
22
|
if ta.TYPE_CHECKING:
|
23
23
|
from .. import libc
|
24
|
-
from .. import logs
|
25
24
|
from ..formats import dotenv
|
26
|
-
from ..
|
25
|
+
from ..logs import all as logs
|
26
|
+
from ..os import pidfile
|
27
27
|
|
28
28
|
else:
|
29
29
|
libc = lang.proxy_import('..libc', __package__)
|
30
30
|
logs = lang.proxy_import('..logs', __package__)
|
31
31
|
dotenv = lang.proxy_import('..formats.dotenv', __package__)
|
32
|
-
pidfile = lang.proxy_import('..
|
32
|
+
pidfile = lang.proxy_import('..os.pidfile', __package__)
|
33
33
|
|
34
34
|
|
35
35
|
##
|
omlish/cached.py
CHANGED
@@ -10,9 +10,9 @@ builtins and thus not distinguish it from a normal property.
|
|
10
10
|
|
11
11
|
"""
|
12
12
|
from .lang.cached import _CachedProperty # noqa
|
13
|
-
from .lang.cached import cached_function
|
13
|
+
from .lang.cached import cached_function as _cached_function
|
14
14
|
|
15
|
-
function =
|
15
|
+
function = _cached_function
|
16
16
|
|
17
17
|
property = property # noqa
|
18
18
|
|
omlish/check.py
CHANGED
@@ -1,18 +1,13 @@
|
|
1
|
-
"""
|
2
|
-
TODO:
|
3
|
-
- def maybe(v: lang.Maybe[T])
|
4
|
-
"""
|
5
|
-
import collections
|
6
|
-
import threading
|
7
1
|
import typing as ta
|
8
2
|
|
3
|
+
from .lite.check import CheckArgsRenderer as ArgsRenderer # noqa
|
4
|
+
from .lite.check import CheckExceptionFactory as ExceptionFactory # noqa
|
5
|
+
from .lite.check import CheckLateConfigureFn as LateConfigureFn # noqa
|
6
|
+
from .lite.check import CheckMessage as Message # noqa
|
7
|
+
from .lite.check import CheckOnRaiseFn as OnRaiseFn # noqa
|
8
|
+
from .lite.check import Checks
|
9
|
+
from .lite.check import check
|
9
10
|
|
10
|
-
T = ta.TypeVar('T')
|
11
|
-
SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
|
12
|
-
|
13
|
-
Message: ta.TypeAlias = str | ta.Callable[..., str | None] | None
|
14
|
-
|
15
|
-
_NONE_TYPE = type(None)
|
16
11
|
|
17
12
|
_isinstance = isinstance
|
18
13
|
_issubclass = issubclass
|
@@ -22,43 +17,21 @@ _callable = callable
|
|
22
17
|
##
|
23
18
|
|
24
19
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
OnRaiseFn: ta.TypeAlias = ta.Callable[[Exception], None]
|
29
|
-
_ON_RAISE: ta.Sequence[OnRaiseFn] = []
|
30
|
-
|
31
|
-
|
32
|
-
def register_on_raise(fn: OnRaiseFn) -> None:
|
33
|
-
global _ON_RAISE
|
34
|
-
with _CONFIG_LOCK:
|
35
|
-
_ON_RAISE = [*_ON_RAISE, fn]
|
36
|
-
|
37
|
-
|
38
|
-
def unregister_on_raise(fn: OnRaiseFn) -> None:
|
39
|
-
global _ON_RAISE
|
40
|
-
with _CONFIG_LOCK:
|
41
|
-
_ON_RAISE = [e for e in _ON_RAISE if e != fn]
|
20
|
+
register_on_raise = check.register_on_raise
|
21
|
+
unregister_on_raise = check.unregister_on_raise
|
42
22
|
|
43
23
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
_ARGS_RENDERER: ta.Callable[..., str | None] | None = None
|
48
|
-
|
24
|
+
##
|
49
25
|
|
50
|
-
def _try_enable_args_rendering() -> bool:
|
51
|
-
global _ARGS_RENDERER
|
52
|
-
if _ARGS_RENDERER is not None:
|
53
|
-
return True
|
54
26
|
|
27
|
+
def _try_get_args_rendering() -> ArgsRenderer | None:
|
55
28
|
try:
|
56
29
|
from .diag.asts import ArgsRenderer
|
57
30
|
|
58
31
|
ArgsRenderer.smoketest()
|
59
32
|
|
60
33
|
except Exception: # noqa
|
61
|
-
return
|
34
|
+
return None
|
62
35
|
|
63
36
|
def _real_render_args(fmt: str, *args: ta.Any) -> str | None:
|
64
37
|
ra = ArgsRenderer(back=3).render_args(*args)
|
@@ -67,443 +40,59 @@ def _try_enable_args_rendering() -> bool:
|
|
67
40
|
|
68
41
|
return fmt % tuple(str(a) for a in ra)
|
69
42
|
|
70
|
-
|
71
|
-
return True
|
72
|
-
|
73
|
-
|
74
|
-
_TRIED_ENABLED_ARGS_RENDERING: bool | None = None
|
75
|
-
|
76
|
-
|
77
|
-
def try_enable_args_rendering() -> bool:
|
78
|
-
global _TRIED_ENABLED_ARGS_RENDERING
|
79
|
-
if _TRIED_ENABLED_ARGS_RENDERING is not None:
|
80
|
-
return _TRIED_ENABLED_ARGS_RENDERING
|
81
|
-
|
82
|
-
with _CONFIG_LOCK:
|
83
|
-
if _TRIED_ENABLED_ARGS_RENDERING is None:
|
84
|
-
_TRIED_ENABLED_ARGS_RENDERING = _try_enable_args_rendering()
|
85
|
-
|
86
|
-
return _TRIED_ENABLED_ARGS_RENDERING
|
87
|
-
|
88
|
-
|
89
|
-
##
|
90
|
-
|
91
|
-
|
92
|
-
def _default_exception_factory(exc_cls: type[Exception], *args, **kwargs) -> Exception:
|
93
|
-
return exc_cls(*args, **kwargs) # noqa
|
94
|
-
|
95
|
-
|
96
|
-
_EXCEPTION_FACTORY = _default_exception_factory
|
97
|
-
|
98
|
-
|
99
|
-
class _ArgsKwargs:
|
100
|
-
def __init__(self, *args, **kwargs):
|
101
|
-
self.args = args
|
102
|
-
self.kwargs = kwargs
|
103
|
-
|
104
|
-
|
105
|
-
def _raise(
|
106
|
-
exception_type: type[Exception],
|
107
|
-
default_message: str,
|
108
|
-
message: Message,
|
109
|
-
ak: _ArgsKwargs = _ArgsKwargs(),
|
110
|
-
*,
|
111
|
-
render_fmt: str | None = None,
|
112
|
-
) -> ta.NoReturn:
|
113
|
-
exc_args = ()
|
114
|
-
if _callable(message):
|
115
|
-
message = ta.cast(ta.Callable, message)(*ak.args, **ak.kwargs)
|
116
|
-
if _isinstance(message, tuple):
|
117
|
-
message, *exc_args = message # type: ignore
|
118
|
-
|
119
|
-
if message is None:
|
120
|
-
message = default_message
|
121
|
-
|
122
|
-
try_enable_args_rendering()
|
123
|
-
|
124
|
-
if render_fmt is not None and _ARGS_RENDERER is not None:
|
125
|
-
rendered_args = _ARGS_RENDERER(render_fmt, *ak.args)
|
126
|
-
if rendered_args is not None:
|
127
|
-
message = f'{message} : {rendered_args}'
|
128
|
-
|
129
|
-
exc = _EXCEPTION_FACTORY(
|
130
|
-
exception_type,
|
131
|
-
message,
|
132
|
-
*exc_args,
|
133
|
-
*ak.args,
|
134
|
-
**ak.kwargs,
|
135
|
-
)
|
136
|
-
|
137
|
-
for fn in _ON_RAISE:
|
138
|
-
fn(exc)
|
139
|
-
|
140
|
-
raise exc
|
141
|
-
|
142
|
-
|
143
|
-
##
|
144
|
-
|
145
|
-
|
146
|
-
def _unpack_isinstance_spec(spec: ta.Any) -> tuple:
|
147
|
-
if not _isinstance(spec, tuple):
|
148
|
-
spec = (spec,)
|
149
|
-
if None in spec:
|
150
|
-
spec = tuple(filter(None, spec)) + (_NONE_TYPE,) # noqa
|
151
|
-
if ta.Any in spec:
|
152
|
-
spec = (object,)
|
153
|
-
return spec
|
154
|
-
|
155
|
-
|
156
|
-
def isinstance(v: ta.Any, spec: type[T] | tuple, msg: Message = None) -> T: # noqa
|
157
|
-
if not _isinstance(v, _unpack_isinstance_spec(spec)):
|
158
|
-
_raise(
|
159
|
-
TypeError,
|
160
|
-
'Must be instance',
|
161
|
-
msg,
|
162
|
-
_ArgsKwargs(v, spec),
|
163
|
-
render_fmt='not isinstance(%s, %s)',
|
164
|
-
)
|
165
|
-
|
166
|
-
return v
|
167
|
-
|
168
|
-
|
169
|
-
def of_isinstance(spec: type[T] | tuple, msg: Message = None) -> ta.Callable[[ta.Any], T]:
|
170
|
-
def inner(v):
|
171
|
-
return isinstance(v, _unpack_isinstance_spec(spec), msg)
|
172
|
-
|
173
|
-
return inner
|
174
|
-
|
175
|
-
|
176
|
-
def cast(v: ta.Any, cls: type[T], msg: Message = None) -> T: # noqa
|
177
|
-
if not _isinstance(v, cls):
|
178
|
-
_raise(
|
179
|
-
TypeError,
|
180
|
-
'Must be instance',
|
181
|
-
msg,
|
182
|
-
_ArgsKwargs(v, cls),
|
183
|
-
)
|
184
|
-
|
185
|
-
return v
|
186
|
-
|
187
|
-
|
188
|
-
def of_cast(cls: type[T], msg: Message = None) -> ta.Callable[[T], T]:
|
189
|
-
def inner(v):
|
190
|
-
return isinstance(v, cls, msg)
|
191
|
-
|
192
|
-
return inner
|
193
|
-
|
194
|
-
|
195
|
-
def not_isinstance(v: T, spec: ta.Any, msg: Message = None) -> T: # noqa
|
196
|
-
if _isinstance(v, _unpack_isinstance_spec(spec)):
|
197
|
-
_raise(
|
198
|
-
TypeError,
|
199
|
-
'Must not be instance',
|
200
|
-
msg,
|
201
|
-
_ArgsKwargs(v, spec),
|
202
|
-
render_fmt='isinstance(%s, %s)',
|
203
|
-
)
|
204
|
-
|
205
|
-
return v
|
206
|
-
|
43
|
+
return _real_render_args
|
207
44
|
|
208
|
-
def of_not_isinstance(spec: ta.Any, msg: Message = None) -> ta.Callable[[T], T]:
|
209
|
-
def inner(v):
|
210
|
-
return not_isinstance(v, _unpack_isinstance_spec(spec), msg)
|
211
45
|
|
212
|
-
|
46
|
+
def _try_enable_args_rendering(c: Checks) -> None:
|
47
|
+
if (rf := _try_get_args_rendering()) is not None:
|
48
|
+
c.set_args_renderer(rf)
|
213
49
|
|
214
50
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
def issubclass(v: type[T], spec: ta.Any, msg: Message = None) -> type[T]: # noqa
|
219
|
-
if not _issubclass(v, spec):
|
220
|
-
_raise(
|
221
|
-
TypeError,
|
222
|
-
'Must be subclass',
|
223
|
-
msg,
|
224
|
-
_ArgsKwargs(v, spec),
|
225
|
-
render_fmt='not issubclass(%s, %s)',
|
226
|
-
)
|
227
|
-
|
228
|
-
return v
|
229
|
-
|
230
|
-
|
231
|
-
def not_issubclass(v: type[T], spec: ta.Any, msg: Message = None) -> type[T]: # noqa
|
232
|
-
if _issubclass(v, spec):
|
233
|
-
_raise(
|
234
|
-
TypeError,
|
235
|
-
'Must not be subclass',
|
236
|
-
msg,
|
237
|
-
_ArgsKwargs(v, spec),
|
238
|
-
render_fmt='issubclass(%s, %s)',
|
239
|
-
)
|
240
|
-
|
241
|
-
return v
|
242
|
-
|
243
|
-
|
244
|
-
##
|
245
|
-
|
246
|
-
|
247
|
-
def in_(v: T, c: ta.Container[T], msg: Message = None) -> T:
|
248
|
-
if v not in c:
|
249
|
-
_raise(
|
250
|
-
ValueError,
|
251
|
-
'Must be in',
|
252
|
-
msg,
|
253
|
-
_ArgsKwargs(v, c),
|
254
|
-
render_fmt='%s not in %s',
|
255
|
-
)
|
256
|
-
|
257
|
-
return v
|
258
|
-
|
259
|
-
|
260
|
-
def not_in(v: T, c: ta.Container[T], msg: Message = None) -> T:
|
261
|
-
if v in c:
|
262
|
-
_raise(
|
263
|
-
ValueError,
|
264
|
-
'Must not be in',
|
265
|
-
msg,
|
266
|
-
_ArgsKwargs(v, c),
|
267
|
-
render_fmt='%s in %s',
|
268
|
-
)
|
269
|
-
|
270
|
-
return v
|
271
|
-
|
272
|
-
|
273
|
-
def empty(v: SizedT, msg: Message = None) -> SizedT:
|
274
|
-
if len(v) != 0:
|
275
|
-
_raise(
|
276
|
-
ValueError,
|
277
|
-
'Must be empty',
|
278
|
-
msg,
|
279
|
-
_ArgsKwargs(v),
|
280
|
-
render_fmt='%s',
|
281
|
-
)
|
282
|
-
|
283
|
-
return v
|
284
|
-
|
285
|
-
|
286
|
-
def iterempty(v: ta.Iterable[T], msg: Message = None) -> ta.Iterable[T]:
|
287
|
-
it = iter(v)
|
288
|
-
try:
|
289
|
-
next(it)
|
290
|
-
except StopIteration:
|
291
|
-
pass
|
292
|
-
else:
|
293
|
-
_raise(
|
294
|
-
ValueError,
|
295
|
-
'Must be empty',
|
296
|
-
msg,
|
297
|
-
_ArgsKwargs(v),
|
298
|
-
render_fmt='%s',
|
299
|
-
)
|
300
|
-
|
301
|
-
return v
|
302
|
-
|
303
|
-
|
304
|
-
def not_empty(v: SizedT, msg: Message = None) -> SizedT:
|
305
|
-
if len(v) == 0:
|
306
|
-
_raise(
|
307
|
-
ValueError,
|
308
|
-
'Must not be empty',
|
309
|
-
msg,
|
310
|
-
_ArgsKwargs(v),
|
311
|
-
render_fmt='%s',
|
312
|
-
)
|
313
|
-
|
314
|
-
return v
|
315
|
-
|
316
|
-
|
317
|
-
def unique(it: ta.Iterable[T], msg: Message = None) -> ta.Iterable[T]:
|
318
|
-
dupes = [e for e, c in collections.Counter(it).items() if c > 1]
|
319
|
-
if dupes:
|
320
|
-
_raise(
|
321
|
-
ValueError,
|
322
|
-
'Must be unique',
|
323
|
-
msg,
|
324
|
-
_ArgsKwargs(it, dupes),
|
325
|
-
)
|
326
|
-
|
327
|
-
return it
|
328
|
-
|
329
|
-
|
330
|
-
def single(obj: ta.Iterable[T], message: Message = None) -> T:
|
331
|
-
try:
|
332
|
-
[value] = obj
|
333
|
-
except ValueError:
|
334
|
-
_raise(
|
335
|
-
ValueError,
|
336
|
-
'Must be single',
|
337
|
-
message,
|
338
|
-
_ArgsKwargs(obj),
|
339
|
-
render_fmt='%s',
|
340
|
-
)
|
341
|
-
|
342
|
-
return value
|
343
|
-
|
344
|
-
|
345
|
-
def opt_single(obj: ta.Iterable[T], message: Message = None) -> T | None:
|
346
|
-
it = iter(obj)
|
347
|
-
try:
|
348
|
-
value = next(it)
|
349
|
-
except StopIteration:
|
350
|
-
return None
|
351
|
-
|
352
|
-
try:
|
353
|
-
next(it)
|
354
|
-
except StopIteration:
|
355
|
-
return value # noqa
|
356
|
-
|
357
|
-
_raise(
|
358
|
-
ValueError,
|
359
|
-
'Must be empty or single',
|
360
|
-
message,
|
361
|
-
_ArgsKwargs(obj),
|
362
|
-
render_fmt='%s',
|
363
|
-
)
|
51
|
+
check.register_late_configure(_try_enable_args_rendering)
|
364
52
|
|
365
53
|
|
366
54
|
##
|
367
55
|
|
368
56
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
_ArgsKwargs(v),
|
376
|
-
render_fmt='%s',
|
377
|
-
)
|
378
|
-
|
379
|
-
|
380
|
-
def not_none(v: T | None, msg: Message = None) -> T:
|
381
|
-
if v is None:
|
382
|
-
_raise(
|
383
|
-
ValueError,
|
384
|
-
'Must not be None',
|
385
|
-
msg,
|
386
|
-
_ArgsKwargs(v),
|
387
|
-
render_fmt='%s',
|
388
|
-
)
|
389
|
-
|
390
|
-
return v
|
391
|
-
|
392
|
-
|
393
|
-
##
|
394
|
-
|
395
|
-
|
396
|
-
def equal(v: T, o: ta.Any, msg: Message = None) -> T:
|
397
|
-
if o != v:
|
398
|
-
_raise(
|
399
|
-
ValueError,
|
400
|
-
'Must be equal',
|
401
|
-
msg,
|
402
|
-
_ArgsKwargs(v, o),
|
403
|
-
render_fmt='%s != %s',
|
404
|
-
)
|
405
|
-
|
406
|
-
return v
|
407
|
-
|
408
|
-
|
409
|
-
def is_(v: T, o: ta.Any, msg: Message = None) -> T:
|
410
|
-
if o is not v:
|
411
|
-
_raise(
|
412
|
-
ValueError,
|
413
|
-
'Must be the same',
|
414
|
-
msg,
|
415
|
-
_ArgsKwargs(v, o),
|
416
|
-
render_fmt='%s is not %s',
|
417
|
-
)
|
418
|
-
|
419
|
-
return v
|
420
|
-
|
421
|
-
|
422
|
-
def is_not(v: T, o: ta.Any, msg: Message = None) -> T:
|
423
|
-
if o is v:
|
424
|
-
_raise(
|
425
|
-
ValueError,
|
426
|
-
'Must not be the same',
|
427
|
-
msg,
|
428
|
-
_ArgsKwargs(v, o),
|
429
|
-
render_fmt='%s is %s',
|
430
|
-
)
|
431
|
-
|
432
|
-
return v
|
433
|
-
|
434
|
-
|
435
|
-
def callable(v: T, msg: Message = None) -> T: # noqa
|
436
|
-
if not _callable(v):
|
437
|
-
_raise(
|
438
|
-
TypeError,
|
439
|
-
'Must be callable',
|
440
|
-
msg,
|
441
|
-
_ArgsKwargs(v),
|
442
|
-
render_fmt='%s',
|
443
|
-
)
|
444
|
-
|
445
|
-
return v # type: ignore
|
446
|
-
|
447
|
-
|
448
|
-
def non_empty_str(v: str | None, msg: Message = None) -> str:
|
449
|
-
if not _isinstance(v, str) or not v:
|
450
|
-
_raise(
|
451
|
-
ValueError,
|
452
|
-
'Must be non-empty str',
|
453
|
-
msg,
|
454
|
-
_ArgsKwargs(v),
|
455
|
-
render_fmt='%s',
|
456
|
-
)
|
457
|
-
|
458
|
-
return v
|
57
|
+
isinstance = check.isinstance # noqa
|
58
|
+
of_isinstance = check.of_isinstance
|
59
|
+
cast = check.cast
|
60
|
+
of_cast = check.of_cast
|
61
|
+
not_isinstance = check.not_isinstance
|
62
|
+
of_not_isinstance = check.of_not_isinstance
|
459
63
|
|
64
|
+
#
|
460
65
|
|
461
|
-
|
462
|
-
|
463
|
-
_raise(
|
464
|
-
ValueError,
|
465
|
-
'Must be replacing',
|
466
|
-
msg,
|
467
|
-
_ArgsKwargs(expected, old, new),
|
468
|
-
render_fmt='%s -> %s -> %s',
|
469
|
-
)
|
66
|
+
issubclass = check.issubclass # noqa
|
67
|
+
not_issubclass = check.not_issubclass
|
470
68
|
|
471
|
-
|
69
|
+
#
|
472
70
|
|
71
|
+
in_ = check.in_
|
72
|
+
not_in = check.not_in
|
73
|
+
empty = check.empty
|
74
|
+
iterempty = check.iterempty
|
75
|
+
not_empty = check.not_empty
|
76
|
+
unique = check.unique
|
77
|
+
single = check.single
|
78
|
+
opt_single = check.opt_single
|
473
79
|
|
474
|
-
|
475
|
-
if old is not None:
|
476
|
-
_raise(
|
477
|
-
ValueError,
|
478
|
-
'Must be replacing None',
|
479
|
-
msg,
|
480
|
-
_ArgsKwargs(old, new),
|
481
|
-
render_fmt='%s -> %s',
|
482
|
-
)
|
80
|
+
#
|
483
81
|
|
484
|
-
|
82
|
+
none = check.none
|
83
|
+
not_none = check.not_none
|
485
84
|
|
85
|
+
#
|
486
86
|
|
487
|
-
|
87
|
+
equal = check.equal
|
88
|
+
is_ = check.is_
|
89
|
+
is_not = check.is_not
|
90
|
+
callable = check.callable # noqa
|
91
|
+
non_empty_str = check.non_empty_str
|
92
|
+
replacing = check.replacing
|
93
|
+
replacing_none = check.replacing_none
|
488
94
|
|
95
|
+
#
|
489
96
|
|
490
|
-
|
491
|
-
|
492
|
-
_raise(
|
493
|
-
RuntimeError,
|
494
|
-
'Argument condition not met',
|
495
|
-
msg,
|
496
|
-
_ArgsKwargs(v),
|
497
|
-
render_fmt='%s',
|
498
|
-
)
|
499
|
-
|
500
|
-
|
501
|
-
def state(v: bool, msg: Message = None) -> None:
|
502
|
-
if not v:
|
503
|
-
_raise(
|
504
|
-
RuntimeError,
|
505
|
-
'State condition not met',
|
506
|
-
msg,
|
507
|
-
_ArgsKwargs(v),
|
508
|
-
render_fmt='%s',
|
509
|
-
)
|
97
|
+
arg = check.arg
|
98
|
+
state = check.state
|
@@ -0,0 +1,72 @@
|
|
1
|
+
from .base import ( # noqa
|
2
|
+
EagerCodec,
|
3
|
+
IncrementalCodec,
|
4
|
+
ComboCodec,
|
5
|
+
|
6
|
+
check_codec_name,
|
7
|
+
|
8
|
+
Codec,
|
9
|
+
|
10
|
+
LazyLoadedCodec,
|
11
|
+
)
|
12
|
+
|
13
|
+
from .bytes import ( # noqa
|
14
|
+
ASCII85,
|
15
|
+
BASE16,
|
16
|
+
BASE32,
|
17
|
+
BASE64,
|
18
|
+
BASE85,
|
19
|
+
BASE32_HEX,
|
20
|
+
BASE64_HEX,
|
21
|
+
BASE64_URLSAFE,
|
22
|
+
HEX,
|
23
|
+
)
|
24
|
+
|
25
|
+
from .chain import ( # noqa
|
26
|
+
ChainEagerCodec,
|
27
|
+
|
28
|
+
chain,
|
29
|
+
)
|
30
|
+
|
31
|
+
from .funcs import ( # noqa
|
32
|
+
FnPairEagerCodec,
|
33
|
+
|
34
|
+
of_pair,
|
35
|
+
of,
|
36
|
+
)
|
37
|
+
|
38
|
+
from .registry import ( # noqa
|
39
|
+
CodecRegistry,
|
40
|
+
|
41
|
+
REGISTRY,
|
42
|
+
register,
|
43
|
+
lookup,
|
44
|
+
|
45
|
+
encode,
|
46
|
+
decode,
|
47
|
+
)
|
48
|
+
|
49
|
+
from .standard import ( # noqa
|
50
|
+
STANDARD_CODECS,
|
51
|
+
)
|
52
|
+
|
53
|
+
from .text import ( # noqa
|
54
|
+
TextEncodingErrors,
|
55
|
+
TextEncodingOptions,
|
56
|
+
|
57
|
+
TextEncodingComboCodec,
|
58
|
+
|
59
|
+
TextEncodingCodec,
|
60
|
+
|
61
|
+
ASCII,
|
62
|
+
LATIN1,
|
63
|
+
UTF32,
|
64
|
+
UTF32BE,
|
65
|
+
UTF32LE,
|
66
|
+
UTF16,
|
67
|
+
UTF16BE,
|
68
|
+
UTF16LE,
|
69
|
+
UTF7,
|
70
|
+
UTF8,
|
71
|
+
UTF8SIG,
|
72
|
+
)
|