omlish 0.0.0.dev423__py3-none-any.whl → 0.0.0.dev484__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.
Potentially problematic release.
This version of omlish might be problematic. Click here for more details.
- omlish/{.manifests.json → .omlish-manifests.json} +12 -0
- omlish/__about__.py +21 -18
- omlish/argparse/all.py +17 -9
- omlish/argparse/cli.py +16 -3
- omlish/argparse/utils.py +21 -0
- omlish/asyncs/all.py +0 -13
- omlish/asyncs/asyncio/rlock.py +110 -0
- omlish/asyncs/asyncio/subprocesses.py +2 -2
- omlish/asyncs/asyncio/sync.py +43 -0
- omlish/asyncs/asyncio/utils.py +2 -0
- omlish/asyncs/ioproxy/proxy.py +1 -1
- omlish/asyncs/sync.py +25 -0
- omlish/bootstrap/_marshal.py +1 -1
- omlish/bootstrap/diag.py +12 -21
- omlish/bootstrap/main.py +2 -5
- omlish/bootstrap/sys.py +27 -28
- omlish/c3.py +4 -1
- omlish/cexts/include/omlish/omlish.hh +1 -0
- omlish/collections/__init__.py +13 -1
- omlish/collections/attrregistry.py +210 -0
- omlish/collections/cache/impl.py +3 -2
- omlish/collections/identity.py +1 -0
- omlish/collections/mappings.py +28 -0
- omlish/collections/trie.py +5 -1
- omlish/collections/utils.py +77 -0
- omlish/concurrent/__init__.py +0 -11
- omlish/concurrent/all.py +18 -0
- omlish/concurrent/futures.py +25 -0
- omlish/concurrent/threadlets.py +1 -1
- omlish/configs/processing/flattening.py +1 -1
- omlish/configs/processing/merging.py +8 -6
- omlish/configs/types.py +1 -1
- omlish/daemons/__init__.py +70 -0
- omlish/daemons/daemon.py +2 -2
- omlish/daemons/launching.py +2 -2
- omlish/daemons/reparent.py +2 -3
- omlish/daemons/spawning.py +2 -3
- omlish/dataclasses/__init__.py +5 -5
- omlish/dataclasses/errors.py +1 -1
- omlish/dataclasses/impl/api/classes/decorator.py +3 -0
- omlish/dataclasses/impl/api/classes/make.py +4 -1
- omlish/dataclasses/impl/concerns/doc.py +1 -1
- omlish/dataclasses/impl/concerns/repr.py +15 -2
- omlish/dataclasses/impl/configs.py +97 -36
- omlish/dataclasses/impl/generation/compilation.py +21 -19
- omlish/dataclasses/impl/generation/globals.py +1 -0
- omlish/dataclasses/impl/generation/ops.py +1 -0
- omlish/dataclasses/impl/generation/processor.py +105 -24
- omlish/dataclasses/impl/processing/base.py +8 -0
- omlish/dataclasses/impl/processing/driving.py +8 -8
- omlish/dataclasses/specs.py +34 -2
- omlish/dataclasses/tools/as_.py +0 -12
- omlish/dataclasses/tools/modifiers.py +5 -0
- omlish/dataclasses/tools/static.py +1 -1
- omlish/diag/_pycharm/runhack.py +1 -1
- omlish/diag/{lslocks.py → cmds/lslocks.py} +6 -6
- omlish/diag/{lsof.py → cmds/lsof.py} +6 -6
- omlish/diag/{ps.py → cmds/ps.py} +6 -6
- omlish/diag/procfs.py +4 -4
- omlish/diag/pycharm.py +16 -2
- omlish/diag/pydevd.py +58 -40
- omlish/diag/replserver/console.py +3 -3
- omlish/diag/replserver/server.py +2 -2
- omlish/dispatch/__init__.py +18 -12
- omlish/dispatch/methods.py +50 -140
- omlish/dom/rendering.py +1 -1
- omlish/formats/dotenv.py +8 -8
- omlish/formats/json/stream/__init__.py +18 -3
- omlish/formats/json/stream/building.py +2 -2
- omlish/formats/json/stream/lexing.py +401 -67
- omlish/formats/json/stream/parsing.py +32 -10
- omlish/formats/json/stream/rendering.py +6 -6
- omlish/formats/json/stream/utils.py +132 -30
- omlish/formats/json5/literals.py +7 -4
- omlish/formats/json5/parsing.py +33 -79
- omlish/formats/json5/stream.py +77 -0
- omlish/formats/logfmt.py +8 -2
- omlish/funcs/genmachine.py +2 -2
- omlish/funcs/guard.py +225 -0
- omlish/graphs/dot/rendering.py +1 -1
- omlish/http/all.py +122 -53
- omlish/http/asgi.py +2 -2
- omlish/http/clients/__init__.py +0 -34
- omlish/http/clients/asyncs.py +153 -0
- omlish/http/clients/base.py +63 -122
- omlish/http/clients/coro/sync.py +171 -0
- omlish/http/clients/default.py +209 -30
- omlish/http/clients/executor.py +56 -0
- omlish/http/clients/httpx.py +78 -13
- omlish/http/clients/middleware.py +181 -0
- omlish/http/clients/sync.py +151 -0
- omlish/http/clients/syncasync.py +49 -0
- omlish/http/clients/urllib.py +8 -5
- omlish/http/coro/client/{client.py → connection.py} +43 -37
- omlish/http/coro/client/headers.py +5 -5
- omlish/http/coro/client/response.py +37 -38
- omlish/http/coro/client/status.py +4 -4
- omlish/http/coro/{client/io.py → io.py} +19 -2
- omlish/http/coro/server/fdio.py +10 -9
- omlish/http/coro/server/server.py +14 -41
- omlish/http/coro/server/sockets.py +7 -6
- omlish/http/flasky/__init__.py +40 -0
- omlish/http/flasky/_compat.py +2 -0
- omlish/http/flasky/api.py +82 -0
- omlish/http/flasky/app.py +203 -0
- omlish/http/flasky/cvs.py +59 -0
- omlish/http/flasky/requests.py +20 -0
- omlish/http/flasky/responses.py +23 -0
- omlish/http/flasky/routes.py +23 -0
- omlish/http/flasky/types.py +15 -0
- omlish/http/handlers.py +3 -2
- omlish/http/headers.py +69 -35
- omlish/http/sse.py +1 -1
- omlish/http/urls.py +67 -0
- omlish/inject/__init__.py +173 -126
- omlish/inject/_dataclasses.py +4986 -0
- omlish/inject/binder.py +10 -49
- omlish/inject/elements.py +27 -0
- omlish/inject/{utils.py → helpers/constfn.py} +3 -3
- omlish/inject/{tags.py → helpers/id.py} +2 -2
- omlish/inject/helpers/multis.py +143 -0
- omlish/inject/helpers/wrappers.py +54 -0
- omlish/inject/impl/elements.py +52 -22
- omlish/inject/impl/injector.py +76 -49
- omlish/inject/impl/inspect.py +11 -1
- omlish/inject/impl/maysync.py +43 -0
- omlish/inject/impl/multis.py +10 -7
- omlish/inject/impl/privates.py +8 -8
- omlish/inject/impl/providers.py +23 -34
- omlish/inject/impl/providersmap.py +43 -0
- omlish/inject/impl/proxy.py +0 -2
- omlish/inject/impl/scopes.py +19 -23
- omlish/inject/impl/sync.py +41 -0
- omlish/inject/injector.py +37 -8
- omlish/inject/inspect.py +35 -0
- omlish/inject/listeners.py +4 -4
- omlish/inject/managed.py +54 -18
- omlish/inject/maysync.py +27 -0
- omlish/inject/multis.py +8 -0
- omlish/inject/overrides.py +3 -3
- omlish/inject/privates.py +6 -0
- omlish/inject/providers.py +8 -1
- omlish/inject/scopes.py +40 -12
- omlish/inject/sync.py +49 -0
- omlish/io/buffers.py +119 -1
- omlish/io/readers.py +29 -0
- omlish/iterators/__init__.py +28 -20
- omlish/iterators/transforms.py +204 -0
- omlish/lang/__init__.py +240 -129
- omlish/lang/_asyncs.cc +186 -0
- omlish/lang/asyncs.py +67 -43
- omlish/lang/{attrs.py → attrstorage.py} +15 -15
- omlish/lang/cached/property.py +2 -2
- omlish/lang/casing.py +11 -0
- omlish/lang/classes/bindable.py +2 -3
- omlish/lang/classes/restrict.py +8 -0
- omlish/lang/classes/simple.py +26 -4
- omlish/lang/collections.py +1 -1
- omlish/lang/contextmanagers.py +59 -9
- omlish/lang/functions.py +31 -33
- omlish/lang/imports/_capture.cc +103 -0
- omlish/lang/imports/capture.py +902 -0
- omlish/lang/imports/lazy.py +0 -25
- omlish/lang/imports/proxy.py +559 -0
- omlish/lang/iterables.py +2 -2
- omlish/lang/lazyglobals.py +49 -14
- omlish/lang/maybes.py +2 -1
- omlish/lang/maysync.py +2 -2
- omlish/lang/params.py +17 -0
- omlish/lang/recursion.py +0 -1
- omlish/lang/resources.py +1 -1
- omlish/lang/sequences.py +124 -0
- omlish/lifecycles/contextmanagers.py +1 -2
- omlish/lifecycles/controller.py +1 -2
- omlish/lite/abstract.py +54 -24
- omlish/lite/asyncs.py +146 -0
- omlish/lite/attrops.py +415 -0
- omlish/lite/cached.py +57 -1
- omlish/lite/contextmanagers.py +4 -4
- omlish/lite/dataclasses.py +55 -0
- omlish/lite/inject.py +5 -4
- omlish/lite/marshal.py +1 -0
- omlish/lite/maybes.py +10 -2
- omlish/lite/maysync.py +22 -5
- omlish/lite/pycharm.py +1 -1
- omlish/lite/strings.py +0 -7
- omlish/lite/timing.py +6 -3
- omlish/lite/typing.py +6 -0
- omlish/logs/_amalg.py +8 -0
- omlish/logs/all.py +59 -31
- omlish/logs/base.py +204 -0
- omlish/logs/contexts.py +171 -0
- omlish/logs/formatters.py +13 -0
- omlish/logs/infos.py +377 -0
- omlish/logs/levels.py +97 -0
- omlish/logs/modules.py +13 -0
- omlish/logs/protocols.py +32 -0
- omlish/logs/standard.py +20 -15
- omlish/logs/std/configs.py +29 -0
- omlish/logs/{filters.py → std/filters.py} +1 -1
- omlish/logs/std/formatters.py +25 -0
- omlish/logs/std/handlers.py +19 -0
- omlish/logs/{json.py → std/json.py} +2 -2
- omlish/logs/std/loggers.py +48 -0
- omlish/logs/{proxy.py → std/proxy.py} +3 -3
- omlish/logs/std/records.py +671 -0
- omlish/logs/typed/bindings.py +108 -37
- omlish/logs/typed/types.py +17 -1
- omlish/logs/typed/values.py +2 -2
- omlish/logs/utils.py +60 -4
- omlish/logs/warnings.py +8 -0
- omlish/manifests/loading.py +8 -1
- omlish/marshal/__init__.py +54 -22
- omlish/marshal/_dataclasses.py +2774 -0
- omlish/marshal/base/configs.py +12 -0
- omlish/marshal/base/contexts.py +36 -21
- omlish/marshal/base/funcs.py +8 -11
- omlish/marshal/base/options.py +8 -0
- omlish/marshal/base/registries.py +146 -44
- omlish/marshal/base/types.py +40 -16
- omlish/marshal/composite/iterables.py +33 -20
- omlish/marshal/composite/literals.py +20 -18
- omlish/marshal/composite/mappings.py +36 -23
- omlish/marshal/composite/maybes.py +29 -19
- omlish/marshal/composite/newtypes.py +16 -16
- omlish/marshal/composite/optionals.py +14 -14
- omlish/marshal/composite/special.py +15 -15
- omlish/marshal/composite/unions/literals.py +93 -0
- omlish/marshal/composite/unions/primitives.py +103 -0
- omlish/marshal/factories/invalidate.py +18 -68
- omlish/marshal/factories/method.py +26 -0
- omlish/marshal/factories/moduleimport/factories.py +22 -65
- omlish/marshal/factories/multi.py +13 -25
- omlish/marshal/factories/recursive.py +42 -56
- omlish/marshal/factories/typecache.py +29 -74
- omlish/marshal/factories/typemap.py +42 -43
- omlish/marshal/objects/dataclasses.py +129 -106
- omlish/marshal/objects/marshal.py +18 -14
- omlish/marshal/objects/namedtuples.py +48 -42
- omlish/marshal/objects/unmarshal.py +19 -15
- omlish/marshal/polymorphism/marshal.py +9 -11
- omlish/marshal/polymorphism/metadata.py +16 -5
- omlish/marshal/polymorphism/standard.py +13 -1
- omlish/marshal/polymorphism/unions.py +15 -105
- omlish/marshal/polymorphism/unmarshal.py +9 -10
- omlish/marshal/singular/enums.py +14 -18
- omlish/marshal/standard.py +10 -6
- omlish/marshal/trivial/any.py +1 -1
- omlish/marshal/trivial/forbidden.py +21 -26
- omlish/math/fixed.py +2 -2
- omlish/metadata.py +23 -1
- omlish/os/atomics.py +2 -2
- omlish/os/forkhooks.py +4 -0
- omlish/os/journald.py +3 -3
- omlish/os/pidfiles/pinning.py +2 -2
- omlish/reflect/ops.py +9 -0
- omlish/reflect/types.py +44 -8
- omlish/secrets/marshal.py +1 -1
- omlish/secrets/secrets.py +6 -3
- omlish/sockets/addresses.py +1 -1
- omlish/sockets/server/handlers.py +2 -2
- omlish/sockets/server/server.py +4 -3
- omlish/sockets/server/ssl.py +2 -2
- omlish/specs/jmespath/__init__.py +12 -3
- omlish/specs/jmespath/_dataclasses.py +2893 -0
- omlish/specs/jmespath/ast.py +1 -1
- omlish/specs/jsonrpc/__init__.py +13 -0
- omlish/specs/jsonrpc/_marshal.py +32 -23
- omlish/specs/jsonrpc/conns.py +10 -7
- omlish/specs/jsonschema/_marshal.py +1 -1
- omlish/specs/jsonschema/keywords/__init__.py +7 -0
- omlish/specs/jsonschema/keywords/_dataclasses.py +1644 -0
- omlish/specs/openapi/_marshal.py +31 -22
- omlish/sql/__init__.py +15 -20
- omlish/sql/{tabledefs/alchemy.py → alchemy/tabledefs.py} +2 -2
- omlish/sql/queries/_marshal.py +3 -3
- omlish/sql/queries/params.py +1 -1
- omlish/sql/queries/rendering.py +1 -1
- omlish/sql/tabledefs/_marshal.py +1 -1
- omlish/subprocesses/all.py +135 -0
- omlish/subprocesses/base.py +8 -3
- omlish/subprocesses/editor.py +1 -1
- omlish/sync.py +181 -20
- omlish/term/alt.py +60 -0
- omlish/term/confirm.py +8 -8
- omlish/term/pager.py +235 -0
- omlish/term/terminfo.py +935 -0
- omlish/term/termstate.py +67 -0
- omlish/term/vt100/terminal.py +0 -3
- omlish/testing/pytest/plugins/asyncs/fixtures.py +4 -1
- omlish/testing/pytest/plugins/skips.py +2 -5
- omlish/testing/unittest/main.py +3 -3
- omlish/text/docwrap/__init__.py +3 -0
- omlish/text/docwrap/__main__.py +11 -0
- omlish/text/docwrap/api.py +83 -0
- omlish/text/docwrap/cli.py +86 -0
- omlish/text/docwrap/groups.py +84 -0
- omlish/text/docwrap/lists.py +167 -0
- omlish/text/docwrap/parts.py +146 -0
- omlish/text/docwrap/reflowing.py +106 -0
- omlish/text/docwrap/rendering.py +151 -0
- omlish/text/docwrap/utils.py +11 -0
- omlish/text/docwrap/wrapping.py +59 -0
- omlish/text/filecache.py +2 -2
- omlish/text/lorem.py +6 -0
- omlish/text/parts.py +2 -2
- omlish/text/textwrap.py +51 -0
- omlish/typedvalues/__init__.py +1 -1
- omlish/typedvalues/marshal.py +85 -59
- omlish/typedvalues/values.py +2 -1
- {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/METADATA +36 -38
- {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/RECORD +323 -385
- omlish/asyncs/bluelet/LICENSE +0 -6
- omlish/asyncs/bluelet/all.py +0 -67
- omlish/asyncs/bluelet/api.py +0 -23
- omlish/asyncs/bluelet/core.py +0 -178
- omlish/asyncs/bluelet/events.py +0 -79
- omlish/asyncs/bluelet/files.py +0 -80
- omlish/asyncs/bluelet/runner.py +0 -417
- omlish/asyncs/bluelet/sockets.py +0 -216
- omlish/asyncs/bridge.py +0 -359
- omlish/asyncs/utils.py +0 -18
- omlish/dataclasses/impl/generation/mangling.py +0 -18
- omlish/defs.py +0 -216
- omlish/dispatch/_dispatch2.py +0 -69
- omlish/dispatch/_dispatch3.py +0 -108
- omlish/dynamic.py +0 -219
- omlish/formats/json/Json.g4 +0 -77
- omlish/formats/json/_antlr/JsonLexer.py +0 -109
- omlish/formats/json/_antlr/JsonListener.py +0 -61
- omlish/formats/json/_antlr/JsonParser.py +0 -457
- omlish/formats/json/_antlr/JsonVisitor.py +0 -42
- omlish/formats/json5/Json5.g4 +0 -168
- omlish/formats/json5/_antlr/Json5Lexer.py +0 -354
- omlish/formats/json5/_antlr/Json5Listener.py +0 -79
- omlish/formats/json5/_antlr/Json5Parser.py +0 -617
- omlish/formats/json5/_antlr/Json5Visitor.py +0 -52
- omlish/funcs/match.py +0 -227
- omlish/io/trampoline.py +0 -289
- omlish/lang/imports/proxyinit.py +0 -665
- omlish/lite/logs.py +0 -4
- omlish/lite/reprs.py +0 -85
- omlish/logs/abc.py +0 -319
- omlish/logs/callers.py +0 -67
- omlish/logs/color.py +0 -27
- omlish/logs/configs.py +0 -29
- omlish/logs/handlers.py +0 -17
- omlish/logs/protocol.py +0 -218
- omlish/logs/timing.py +0 -58
- omlish/marshal/factories/match.py +0 -34
- omlish/marshal/factories/simple.py +0 -28
- omlish/specs/irc/messages/base.py +0 -49
- omlish/specs/irc/messages/formats.py +0 -92
- omlish/specs/irc/messages/messages.py +0 -774
- omlish/specs/irc/messages/parsing.py +0 -98
- omlish/specs/irc/numerics/formats.py +0 -97
- omlish/specs/irc/numerics/numerics.py +0 -865
- omlish/specs/irc/numerics/types.py +0 -59
- omlish/specs/irc/protocol/LICENSE +0 -11
- omlish/specs/irc/protocol/__init__.py +0 -61
- omlish/specs/irc/protocol/consts.py +0 -6
- omlish/specs/irc/protocol/errors.py +0 -30
- omlish/specs/irc/protocol/message.py +0 -21
- omlish/specs/irc/protocol/nuh.py +0 -55
- omlish/specs/irc/protocol/parsing.py +0 -158
- omlish/specs/irc/protocol/rendering.py +0 -153
- omlish/specs/irc/protocol/tags.py +0 -102
- omlish/specs/irc/protocol/utils.py +0 -30
- omlish/specs/proto/Protobuf3.g4 +0 -396
- omlish/specs/proto/__init__.py +0 -0
- omlish/specs/proto/_antlr/Protobuf3Lexer.py +0 -340
- omlish/specs/proto/_antlr/Protobuf3Listener.py +0 -448
- omlish/specs/proto/_antlr/Protobuf3Parser.py +0 -3909
- omlish/specs/proto/_antlr/Protobuf3Visitor.py +0 -257
- omlish/specs/proto/_antlr/__init__.py +0 -0
- omlish/specs/proto/nodes.py +0 -54
- omlish/specs/proto/parsing.py +0 -97
- omlish/sql/parsing/Minisql.g4 +0 -292
- omlish/sql/parsing/__init__.py +0 -0
- omlish/sql/parsing/_antlr/MinisqlLexer.py +0 -322
- omlish/sql/parsing/_antlr/MinisqlListener.py +0 -511
- omlish/sql/parsing/_antlr/MinisqlParser.py +0 -3763
- omlish/sql/parsing/_antlr/MinisqlVisitor.py +0 -292
- omlish/sql/parsing/_antlr/__init__.py +0 -0
- omlish/sql/parsing/parsing.py +0 -119
- omlish/text/antlr/__init__.py +0 -3
- omlish/text/antlr/_runtime/BufferedTokenStream.py +0 -305
- omlish/text/antlr/_runtime/CommonTokenFactory.py +0 -64
- omlish/text/antlr/_runtime/CommonTokenStream.py +0 -90
- omlish/text/antlr/_runtime/FileStream.py +0 -30
- omlish/text/antlr/_runtime/InputStream.py +0 -90
- omlish/text/antlr/_runtime/IntervalSet.py +0 -183
- omlish/text/antlr/_runtime/LICENSE.txt +0 -28
- omlish/text/antlr/_runtime/LL1Analyzer.py +0 -176
- omlish/text/antlr/_runtime/Lexer.py +0 -332
- omlish/text/antlr/_runtime/ListTokenSource.py +0 -147
- omlish/text/antlr/_runtime/Parser.py +0 -583
- omlish/text/antlr/_runtime/ParserInterpreter.py +0 -173
- omlish/text/antlr/_runtime/ParserRuleContext.py +0 -189
- omlish/text/antlr/_runtime/PredictionContext.py +0 -632
- omlish/text/antlr/_runtime/Recognizer.py +0 -150
- omlish/text/antlr/_runtime/RuleContext.py +0 -230
- omlish/text/antlr/_runtime/StdinStream.py +0 -14
- omlish/text/antlr/_runtime/Token.py +0 -158
- omlish/text/antlr/_runtime/TokenStreamRewriter.py +0 -258
- omlish/text/antlr/_runtime/Utils.py +0 -36
- omlish/text/antlr/_runtime/__init__.py +0 -2
- omlish/text/antlr/_runtime/_all.py +0 -24
- omlish/text/antlr/_runtime/_pygrun.py +0 -174
- omlish/text/antlr/_runtime/atn/ATN.py +0 -135
- omlish/text/antlr/_runtime/atn/ATNConfig.py +0 -162
- omlish/text/antlr/_runtime/atn/ATNConfigSet.py +0 -215
- omlish/text/antlr/_runtime/atn/ATNDeserializationOptions.py +0 -27
- omlish/text/antlr/_runtime/atn/ATNDeserializer.py +0 -449
- omlish/text/antlr/_runtime/atn/ATNSimulator.py +0 -50
- omlish/text/antlr/_runtime/atn/ATNState.py +0 -267
- omlish/text/antlr/_runtime/atn/ATNType.py +0 -20
- omlish/text/antlr/_runtime/atn/LexerATNSimulator.py +0 -573
- omlish/text/antlr/_runtime/atn/LexerAction.py +0 -301
- omlish/text/antlr/_runtime/atn/LexerActionExecutor.py +0 -146
- omlish/text/antlr/_runtime/atn/ParserATNSimulator.py +0 -1664
- omlish/text/antlr/_runtime/atn/PredictionMode.py +0 -502
- omlish/text/antlr/_runtime/atn/SemanticContext.py +0 -333
- omlish/text/antlr/_runtime/atn/Transition.py +0 -271
- omlish/text/antlr/_runtime/atn/__init__.py +0 -4
- omlish/text/antlr/_runtime/dfa/DFA.py +0 -136
- omlish/text/antlr/_runtime/dfa/DFASerializer.py +0 -76
- omlish/text/antlr/_runtime/dfa/DFAState.py +0 -129
- omlish/text/antlr/_runtime/dfa/__init__.py +0 -4
- omlish/text/antlr/_runtime/error/DiagnosticErrorListener.py +0 -111
- omlish/text/antlr/_runtime/error/ErrorListener.py +0 -75
- omlish/text/antlr/_runtime/error/ErrorStrategy.py +0 -712
- omlish/text/antlr/_runtime/error/Errors.py +0 -176
- omlish/text/antlr/_runtime/error/__init__.py +0 -4
- omlish/text/antlr/_runtime/tree/Chunk.py +0 -33
- omlish/text/antlr/_runtime/tree/ParseTreeMatch.py +0 -121
- omlish/text/antlr/_runtime/tree/ParseTreePattern.py +0 -75
- omlish/text/antlr/_runtime/tree/ParseTreePatternMatcher.py +0 -377
- omlish/text/antlr/_runtime/tree/RuleTagToken.py +0 -53
- omlish/text/antlr/_runtime/tree/TokenTagToken.py +0 -50
- omlish/text/antlr/_runtime/tree/Tree.py +0 -194
- omlish/text/antlr/_runtime/tree/Trees.py +0 -114
- omlish/text/antlr/_runtime/tree/__init__.py +0 -2
- omlish/text/antlr/_runtime/xpath/XPath.py +0 -278
- omlish/text/antlr/_runtime/xpath/XPathLexer.py +0 -98
- omlish/text/antlr/_runtime/xpath/__init__.py +0 -4
- omlish/text/antlr/delimit.py +0 -109
- omlish/text/antlr/dot.py +0 -41
- omlish/text/antlr/errors.py +0 -14
- omlish/text/antlr/input.py +0 -96
- omlish/text/antlr/parsing.py +0 -54
- omlish/text/antlr/runtime.py +0 -102
- omlish/text/antlr/utils.py +0 -38
- /omlish/{asyncs/bluelet → cexts}/__init__.py +0 -0
- /omlish/{formats/json/_antlr → diag/cmds}/__init__.py +0 -0
- /omlish/{formats/json5/_antlr → http/clients/coro}/__init__.py +0 -0
- /omlish/{specs/irc → inject/helpers}/__init__.py +0 -0
- /omlish/{specs/irc/messages → logs/std}/__init__.py +0 -0
- /omlish/logs/{noisy.py → std/noisy.py} +0 -0
- /omlish/{specs/irc/numerics → marshal/composite/unions}/__init__.py +0 -0
- {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/top_level.txt +0 -0
omlish/logs/typed/bindings.py
CHANGED
|
@@ -16,6 +16,7 @@ from ...lite.abstract import Abstract
|
|
|
16
16
|
from .types import TYPED_LOGGER_VALUE_OR_PROVIDER_OR_ABSENT_TYPES
|
|
17
17
|
from .types import TYPED_LOGGER_VALUE_OR_PROVIDER_TYPES
|
|
18
18
|
from .types import DefaultTypedLoggerValue
|
|
19
|
+
from .types import MultiTypedLoggerValue
|
|
19
20
|
from .types import TypedLoggerConstFieldValue
|
|
20
21
|
from .types import TypedLoggerField
|
|
21
22
|
from .types import TypedLoggerFieldValue
|
|
@@ -92,6 +93,9 @@ class TypedLoggerBindings(Abstract):
|
|
|
92
93
|
accept_value: ta.Callable[[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent], None]
|
|
93
94
|
accept_values: ta.Callable[[ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent]]], None] # noqa
|
|
94
95
|
|
|
96
|
+
accept_multi_value: ta.Callable[[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue], None] # noqa
|
|
97
|
+
accept_multi_values: ta.Callable[[ta.Iterable[ta.Tuple[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue]]], None] # noqa
|
|
98
|
+
|
|
95
99
|
accept_const_values: ta.Callable[[ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent]]], None] # noqa
|
|
96
100
|
|
|
97
101
|
accept_value_wrapping: ta.Callable[[ta.Union['TypedLoggerValueWrapper', 'FullTypedLoggerBindings._ValueWrappingState']], None] # noqa
|
|
@@ -110,19 +114,11 @@ class FullTypedLoggerBindings(TypedLoggerBindings):
|
|
|
110
114
|
self,
|
|
111
115
|
*items: TypedLoggerBindingItem,
|
|
112
116
|
override: bool = False,
|
|
117
|
+
override_multis: bool = False,
|
|
113
118
|
) -> None:
|
|
114
119
|
kd: ta.Dict[str, TypedLoggerFieldValue] = {}
|
|
115
120
|
dup_kd: ta.Dict[str, ta.List[TypedLoggerFieldValue]] = {}
|
|
116
121
|
|
|
117
|
-
vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
|
|
118
|
-
dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
|
|
119
|
-
|
|
120
|
-
cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
|
|
121
|
-
|
|
122
|
-
vwl: ta.List[ta.Union[TypedLoggerValueWrapper, FullTypedLoggerBindings._ValueWrappingState]] = []
|
|
123
|
-
|
|
124
|
-
vst: TypedLoggerBindings._Visitor
|
|
125
|
-
|
|
126
122
|
if not override:
|
|
127
123
|
def add_kd(kd_k: str, kd_v: TypedLoggerFieldValue) -> None: # noqa
|
|
128
124
|
if kd_k in kd:
|
|
@@ -130,42 +126,71 @@ class FullTypedLoggerBindings(TypedLoggerBindings):
|
|
|
130
126
|
else:
|
|
131
127
|
kd[kd_k] = kd_v
|
|
132
128
|
|
|
129
|
+
def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
|
|
130
|
+
collections.deque(itertools.starmap(add_kd, it), maxlen=0)
|
|
131
|
+
|
|
132
|
+
else:
|
|
133
|
+
add_kd = kd.__setitem__ # type: ignore[assignment]
|
|
134
|
+
add_kds = kd.update # type: ignore[assignment]
|
|
135
|
+
|
|
136
|
+
#
|
|
137
|
+
|
|
138
|
+
vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
|
|
139
|
+
dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
|
|
140
|
+
|
|
141
|
+
if not override:
|
|
133
142
|
def add_vd(vd_k: 'ta.Type[TypedLoggerValue]', vd_v: TypedLoggerValueOrProviderOrAbsent) -> None: # noqa
|
|
134
143
|
if vd_k in vd:
|
|
135
144
|
dup_vd.setdefault(vd_k, []).append(vd_v)
|
|
136
145
|
else:
|
|
137
146
|
vd[vd_k] = vd_v
|
|
138
147
|
|
|
139
|
-
def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
|
|
140
|
-
collections.deque(itertools.starmap(add_kd, it), maxlen=0)
|
|
141
|
-
|
|
142
148
|
def add_vds(it: 'ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent]]') -> None: # noqa
|
|
143
149
|
collections.deque(itertools.starmap(add_vd, it), maxlen=0)
|
|
144
150
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
151
|
+
else:
|
|
152
|
+
add_vd = vd.__setitem__ # type: ignore[assignment]
|
|
153
|
+
add_vds = vd.update # type: ignore[assignment]
|
|
154
|
+
|
|
155
|
+
#
|
|
148
156
|
|
|
149
|
-
|
|
150
|
-
add_vds,
|
|
157
|
+
mvd: ta.Dict[ta.Type[MultiTypedLoggerValue], ta.List[MultiTypedLoggerValue]] = {}
|
|
151
158
|
|
|
152
|
-
|
|
159
|
+
if override_multis:
|
|
160
|
+
def add_mvd(mvd_k: 'ta.Type[MultiTypedLoggerValue]', mvd_v: MultiTypedLoggerValue) -> None: # noqa
|
|
161
|
+
try:
|
|
162
|
+
mvd_l = mvd[mvd_k]
|
|
163
|
+
except KeyError:
|
|
164
|
+
mvd_l = mvd[mvd_k] = []
|
|
165
|
+
mvd_l.append(mvd_v)
|
|
153
166
|
|
|
154
|
-
|
|
155
|
-
|
|
167
|
+
def add_mvds(it: 'ta.Iterable[ta.Tuple[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue]]') -> None:
|
|
168
|
+
collections.deque(itertools.starmap(add_mvd, it), maxlen=0)
|
|
156
169
|
|
|
157
170
|
else:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
kd.update,
|
|
171
|
+
add_mvd = mvd.__setitem__ # type: ignore[assignment]
|
|
172
|
+
add_mvds = mvd.update # type: ignore[assignment]
|
|
161
173
|
|
|
162
|
-
|
|
163
|
-
vd.update,
|
|
174
|
+
#
|
|
164
175
|
|
|
165
|
-
|
|
176
|
+
cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
|
|
166
177
|
|
|
167
|
-
|
|
168
|
-
|
|
178
|
+
vwl: ta.List[ta.Union[TypedLoggerValueWrapper, FullTypedLoggerBindings._ValueWrappingState]] = []
|
|
179
|
+
|
|
180
|
+
vst = TypedLoggerBindings._Visitor( # noqa
|
|
181
|
+
add_kd,
|
|
182
|
+
add_kds,
|
|
183
|
+
|
|
184
|
+
add_vd,
|
|
185
|
+
add_vds,
|
|
186
|
+
|
|
187
|
+
add_mvd,
|
|
188
|
+
add_mvds,
|
|
189
|
+
|
|
190
|
+
cvd.update,
|
|
191
|
+
|
|
192
|
+
vwl.append,
|
|
193
|
+
)
|
|
169
194
|
|
|
170
195
|
for o in items:
|
|
171
196
|
o._typed_logger_visit_bindings(vst) # noqa
|
|
@@ -288,18 +313,22 @@ class ChainTypedLoggerBindings(TypedLoggerBindings):
|
|
|
288
313
|
kd: ta.Dict[str, TypedLoggerFieldValue] = {}
|
|
289
314
|
dup_kd: ta.Dict[str, ta.List[TypedLoggerFieldValue]] = {}
|
|
290
315
|
|
|
291
|
-
vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
|
|
292
|
-
dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
|
|
293
|
-
|
|
294
|
-
pcv = dict(parent.const_value_map)
|
|
295
|
-
cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
|
|
296
|
-
|
|
297
316
|
def add_kd(kd_k: str, kd_v: TypedLoggerFieldValue) -> None: # noqa
|
|
298
317
|
if kd_k in kd:
|
|
299
318
|
dup_kd.setdefault(kd_k, []).append(kd_v)
|
|
300
319
|
else:
|
|
301
320
|
kd[kd_k] = kd_v
|
|
302
321
|
|
|
322
|
+
def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
|
|
323
|
+
collections.deque(itertools.starmap(add_kd, it), maxlen=0)
|
|
324
|
+
|
|
325
|
+
#
|
|
326
|
+
|
|
327
|
+
vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
|
|
328
|
+
dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
|
|
329
|
+
|
|
330
|
+
pcv = dict(parent.const_value_map)
|
|
331
|
+
|
|
303
332
|
def add_vd(vd_k: 'ta.Type[TypedLoggerValue]', vd_v: TypedLoggerValueOrProviderOrAbsent) -> None: # noqa
|
|
304
333
|
if vd_k in vd:
|
|
305
334
|
dup_vd.setdefault(vd_k, []).append(vd_v)
|
|
@@ -307,12 +336,27 @@ class ChainTypedLoggerBindings(TypedLoggerBindings):
|
|
|
307
336
|
vd[vd_k] = vd_v
|
|
308
337
|
pcv.pop(vd_k, None)
|
|
309
338
|
|
|
310
|
-
def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
|
|
311
|
-
collections.deque(itertools.starmap(add_kd, it), maxlen=0)
|
|
312
|
-
|
|
313
339
|
def add_vds(it: 'ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent]]') -> None: # noqa
|
|
314
340
|
collections.deque(itertools.starmap(add_vd, it), maxlen=0)
|
|
315
341
|
|
|
342
|
+
#
|
|
343
|
+
|
|
344
|
+
mvd: ta.Dict[ta.Type[MultiTypedLoggerValue], ta.List[MultiTypedLoggerValue]] = {}
|
|
345
|
+
|
|
346
|
+
def add_mvd(mvd_k: 'ta.Type[MultiTypedLoggerValue]', mvd_v: MultiTypedLoggerValue) -> None: # noqa
|
|
347
|
+
try:
|
|
348
|
+
mvd_l = mvd[mvd_k]
|
|
349
|
+
except KeyError:
|
|
350
|
+
mvd_l = mvd[mvd_k] = []
|
|
351
|
+
mvd_l.append(mvd_v)
|
|
352
|
+
|
|
353
|
+
def add_mvds(it: 'ta.Iterable[ta.Tuple[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue]]') -> None:
|
|
354
|
+
collections.deque(itertools.starmap(add_mvd, it), maxlen=0)
|
|
355
|
+
|
|
356
|
+
#
|
|
357
|
+
|
|
358
|
+
cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
|
|
359
|
+
|
|
316
360
|
def bad_type(*args, **kwargs): # noqa
|
|
317
361
|
raise ChainTypedLoggerBindingsUnhandledItemError
|
|
318
362
|
|
|
@@ -323,6 +367,9 @@ class ChainTypedLoggerBindings(TypedLoggerBindings):
|
|
|
323
367
|
add_vd,
|
|
324
368
|
add_vds,
|
|
325
369
|
|
|
370
|
+
add_mvd,
|
|
371
|
+
add_mvds,
|
|
372
|
+
|
|
326
373
|
cvd.update,
|
|
327
374
|
|
|
328
375
|
bad_type,
|
|
@@ -448,6 +495,30 @@ _AS_TYPED_LOGGER_BINDINGS_FIELD_VALUE_DIRECT_TYPES: ta.Tuple[type, ...] = (
|
|
|
448
495
|
)
|
|
449
496
|
|
|
450
497
|
|
|
498
|
+
# @ta.final
|
|
499
|
+
# class TypedLoggerBindingsBuilder:
|
|
500
|
+
# def __init__(
|
|
501
|
+
# self,
|
|
502
|
+
# *,
|
|
503
|
+
# add_default_keys: bool = False,
|
|
504
|
+
# default_key_filter: ta.Optional[ta.Callable[[str], bool]] = None,
|
|
505
|
+
#
|
|
506
|
+
# add_default_values: bool = False,
|
|
507
|
+
# default_value_filter: ta.Optional[ta.Callable[[ta.Type[DefaultTypedLoggerValue]], bool]] = None,
|
|
508
|
+
#
|
|
509
|
+
# value_wrapper: ta.Optional[TypedLoggerValueWrapperFn] = None,
|
|
510
|
+
# ) -> None:
|
|
511
|
+
# self._add_default_keys = add_default_keys
|
|
512
|
+
# self._default_key_filter = default_key_filter
|
|
513
|
+
#
|
|
514
|
+
# self._add_default_values = add_default_values
|
|
515
|
+
# self._default_value_filter = default_value_filter
|
|
516
|
+
#
|
|
517
|
+
# self._value_wrapper = value_wrapper
|
|
518
|
+
#
|
|
519
|
+
# self._lst: ta.List[TypedLoggerBindingItem] = []
|
|
520
|
+
|
|
521
|
+
|
|
451
522
|
def as_typed_logger_bindings(
|
|
452
523
|
*objs: CanTypedLoggerBinding,
|
|
453
524
|
|
omlish/logs/typed/types.py
CHANGED
|
@@ -86,6 +86,7 @@ class TypedLoggerValue(Abstract, ta.Generic[T]):
|
|
|
86
86
|
def of(cls: ta.Type[TypedLoggerValueT], v: ta.Any) -> ta.Union[TypedLoggerValueT, AbsentTypedLoggerValue]:
|
|
87
87
|
return cls(v) if v is not ABSENT_TYPED_LOGGER_VALUE else ABSENT_TYPED_LOGGER_VALUE
|
|
88
88
|
|
|
89
|
+
@ta.final
|
|
89
90
|
@property
|
|
90
91
|
def v(self) -> T:
|
|
91
92
|
return self._v
|
|
@@ -180,7 +181,6 @@ class TypedLoggerValue(Abstract, ta.Generic[T]):
|
|
|
180
181
|
def _typed_logger_unwrap_field_value(self, ctx: 'TypedLoggerContext') -> UnwrappedTypedLoggerFieldValue: # noqa
|
|
181
182
|
return self._v
|
|
182
183
|
|
|
183
|
-
@ta.final
|
|
184
184
|
def _typed_logger_visit_bindings(self, vst: 'TypedLoggerBindings._Visitor') -> None: # noqa
|
|
185
185
|
vst.accept_values(((type(self), self),))
|
|
186
186
|
vst.accept_const_values(((type(self), self),))
|
|
@@ -232,6 +232,22 @@ class DefaultTypedLoggerValue(TypedLoggerValue[T], Abstract):
|
|
|
232
232
|
return (cls.default_provider().provide_value(ctx),)
|
|
233
233
|
|
|
234
234
|
|
|
235
|
+
class MultiTypedLoggerValue(TypedLoggerValue[T], Abstract):
|
|
236
|
+
"""
|
|
237
|
+
Note: There is no DefaultMultiTypedLoggerValue.
|
|
238
|
+
"""
|
|
239
|
+
|
|
240
|
+
@classmethod
|
|
241
|
+
@abc.abstractmethod
|
|
242
|
+
def merge_values(cls, *values: T) -> T:
|
|
243
|
+
raise NotImplementedError
|
|
244
|
+
|
|
245
|
+
#
|
|
246
|
+
|
|
247
|
+
def _typed_logger_visit_bindings(self, vst: 'TypedLoggerBindings._Visitor') -> None: # noqa
|
|
248
|
+
vst.accept_multi_values(((type(self), self),))
|
|
249
|
+
|
|
250
|
+
|
|
235
251
|
##
|
|
236
252
|
|
|
237
253
|
|
omlish/logs/typed/values.py
CHANGED
|
@@ -7,7 +7,7 @@ import threading
|
|
|
7
7
|
import time
|
|
8
8
|
import typing as ta
|
|
9
9
|
|
|
10
|
-
from ...logs.
|
|
10
|
+
from ...logs.infos import LoggingContextInfos
|
|
11
11
|
from ...logs.levels import LogLevel
|
|
12
12
|
from .types import ABSENT_TYPED_LOGGER_VALUE
|
|
13
13
|
from .types import AbsentTypedLoggerValue
|
|
@@ -57,7 +57,7 @@ class StandardTypedLoggerValues:
|
|
|
57
57
|
|
|
58
58
|
#
|
|
59
59
|
|
|
60
|
-
class Caller(TypedLoggerValue[
|
|
60
|
+
class Caller(TypedLoggerValue[LoggingContextInfos.Caller]):
|
|
61
61
|
pass
|
|
62
62
|
|
|
63
63
|
#
|
omlish/logs/utils.py
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
# ruff: noqa: UP006 UP007 UP045
|
|
2
|
+
# @omlish-lite
|
|
1
3
|
import functools
|
|
2
4
|
import logging
|
|
5
|
+
import time
|
|
6
|
+
import typing as ta
|
|
3
7
|
|
|
4
|
-
|
|
5
|
-
##
|
|
8
|
+
from .protocols import LoggerLike
|
|
6
9
|
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
##
|
|
9
12
|
|
|
10
13
|
|
|
11
|
-
def
|
|
14
|
+
def exception_logging(log): # noqa
|
|
12
15
|
def outer(fn):
|
|
13
16
|
@functools.wraps(fn)
|
|
14
17
|
def inner(*args, **kwargs):
|
|
@@ -21,3 +24,56 @@ def error_logging(log=_log): # noqa
|
|
|
21
24
|
return inner
|
|
22
25
|
|
|
23
26
|
return outer
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class LogTimingContext:
|
|
33
|
+
DEFAULT_LOG: ta.ClassVar[ta.Optional[LoggerLike]] = None
|
|
34
|
+
|
|
35
|
+
class _NOT_SPECIFIED: # noqa
|
|
36
|
+
def __new__(cls, *args, **kwargs): # noqa
|
|
37
|
+
raise TypeError
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
description: str,
|
|
42
|
+
*,
|
|
43
|
+
log: ta.Union[LoggerLike, ta.Type[_NOT_SPECIFIED], None] = _NOT_SPECIFIED, # noqa
|
|
44
|
+
level: int = logging.DEBUG,
|
|
45
|
+
) -> None:
|
|
46
|
+
super().__init__()
|
|
47
|
+
|
|
48
|
+
self._description = description
|
|
49
|
+
if log is self._NOT_SPECIFIED:
|
|
50
|
+
log = self.DEFAULT_LOG # noqa
|
|
51
|
+
self._log: ta.Optional[LoggerLike] = log # type: ignore
|
|
52
|
+
self._level = level
|
|
53
|
+
|
|
54
|
+
def set_description(self, description: str) -> 'LogTimingContext':
|
|
55
|
+
self._description = description
|
|
56
|
+
return self
|
|
57
|
+
|
|
58
|
+
_begin_time: float
|
|
59
|
+
_end_time: float
|
|
60
|
+
|
|
61
|
+
def __enter__(self) -> 'LogTimingContext':
|
|
62
|
+
self._begin_time = time.time()
|
|
63
|
+
|
|
64
|
+
if self._log is not None:
|
|
65
|
+
self._log.log(self._level, f'Begin : {self._description}') # noqa
|
|
66
|
+
|
|
67
|
+
return self
|
|
68
|
+
|
|
69
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
70
|
+
self._end_time = time.time()
|
|
71
|
+
|
|
72
|
+
if self._log is not None:
|
|
73
|
+
self._log.log(
|
|
74
|
+
self._level,
|
|
75
|
+
f'End : {self._description} - {self._end_time - self._begin_time:0.2f} s elapsed',
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
log_timing_context = LogTimingContext
|
omlish/logs/warnings.py
ADDED
omlish/manifests/loading.py
CHANGED
|
@@ -8,6 +8,12 @@ TODO:
|
|
|
8
8
|
- TypeMap style weak cache of issubclass queries
|
|
9
9
|
- wait.. lazily load the class for virtual subclass queries? xor support virtual bases?
|
|
10
10
|
- weakref class dict keys?
|
|
11
|
+
- cheap_discover_package_root_dirs: Seq[str] | None = None or smth
|
|
12
|
+
- maaaybe.. add an EnvVar? OMLISH_MANIFEST_ROOT_DIRS? if set to : delimited, turns off package disco and overrides
|
|
13
|
+
scan_root_dirs
|
|
14
|
+
- currently the cli cant subprocess itself and keep manifests working
|
|
15
|
+
- EnvVar cls is already lite
|
|
16
|
+
- can discover_packages deadlock with concurrent / multithreaded imports?
|
|
11
17
|
"""
|
|
12
18
|
import dataclasses as dc
|
|
13
19
|
import importlib.machinery
|
|
@@ -411,6 +417,7 @@ class ManifestLoader:
|
|
|
411
417
|
def _read_package_file_text(cls, package_name: str, file_name: str) -> ta.Optional[str]:
|
|
412
418
|
# importlib.resources.files actually imports the package - to avoid this, if possible, the file is read straight
|
|
413
419
|
# off the filesystem.
|
|
420
|
+
# FIXME: find_spec *still* imports the parent package to get __path__ to feed to _find_spec...
|
|
414
421
|
spec = importlib.util.find_spec(package_name)
|
|
415
422
|
if (
|
|
416
423
|
spec is not None and
|
|
@@ -432,7 +439,7 @@ class ManifestLoader:
|
|
|
432
439
|
return None
|
|
433
440
|
return t.read_text('utf-8')
|
|
434
441
|
|
|
435
|
-
MANIFESTS_FILE_NAME: ta.ClassVar[str] = '.manifests.json'
|
|
442
|
+
MANIFESTS_FILE_NAME: ta.ClassVar[str] = '.omlish-manifests.json'
|
|
436
443
|
|
|
437
444
|
@classmethod
|
|
438
445
|
def _read_package_raw_manifests(cls, package_name: str) -> ta.Optional[ta.Sequence[Manifest]]:
|
omlish/marshal/__init__.py
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
# ruff: noqa: I001
|
|
2
2
|
"""
|
|
3
3
|
TODO:
|
|
4
|
-
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
- streaming?
|
|
5
|
+
- datatypes
|
|
6
|
+
- redacted
|
|
7
|
+
- lang.Marker - class name, handle type[Foo]
|
|
8
|
+
- pathlib.Path
|
|
9
|
+
- decimal.Decimal
|
|
10
|
+
- datetime.date, datetime.time
|
|
11
|
+
- ipaddress
|
|
12
|
+
- numpy types
|
|
13
|
+
- jackson switches
|
|
14
|
+
- accept_case_insensitive_enums
|
|
15
|
+
- accept_case_insensitive_properties
|
|
16
|
+
- accept_case_insensitive_values
|
|
17
|
+
- allow_coercion_of_scalars
|
|
18
|
+
- use_base_type_as_default_impl
|
|
19
|
+
- codegen
|
|
20
|
+
- context-local switches
|
|
21
|
+
- mutable_collections
|
|
12
22
|
- simple lite interop like inj - alt ObjMarshalerManager impl for Context
|
|
13
23
|
|
|
14
24
|
See:
|
|
@@ -16,6 +26,8 @@ See:
|
|
|
16
26
|
- https://github.com/jcrist/msgspec
|
|
17
27
|
- https://github.com/Fatal1ty/mashumaro
|
|
18
28
|
- https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#custom-serializers
|
|
29
|
+
- https://github.com/yukinarit/pyserde
|
|
30
|
+
- https://github.com/FasterXML/jackson
|
|
19
31
|
"""
|
|
20
32
|
from .. import dataclasses as _dc # noqa
|
|
21
33
|
|
|
@@ -32,16 +44,22 @@ _dc.init_package(
|
|
|
32
44
|
from .. import lang as _lang # noqa
|
|
33
45
|
|
|
34
46
|
|
|
35
|
-
with _lang.auto_proxy_init(globals())
|
|
47
|
+
with _lang.auto_proxy_init(globals()):
|
|
36
48
|
##
|
|
37
49
|
|
|
38
50
|
from .base.configs import ( # noqa
|
|
39
51
|
Config,
|
|
52
|
+
Configs,
|
|
53
|
+
|
|
40
54
|
ConfigRegistry,
|
|
41
55
|
)
|
|
42
56
|
|
|
43
57
|
from .base.contexts import ( # noqa
|
|
44
58
|
BaseContext,
|
|
59
|
+
|
|
60
|
+
MarshalFactoryContext,
|
|
61
|
+
UnmarshalFactoryContext,
|
|
62
|
+
|
|
45
63
|
MarshalContext,
|
|
46
64
|
UnmarshalContext,
|
|
47
65
|
)
|
|
@@ -96,19 +114,35 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
96
114
|
IterableUnmarshaler,
|
|
97
115
|
)
|
|
98
116
|
|
|
117
|
+
from .composite.optionals import ( # noqa
|
|
118
|
+
OptionalMarshaler,
|
|
119
|
+
OptionalUnmarshaler,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
from .composite.unions.literals import ( # noqa
|
|
123
|
+
LITERAL_UNION_TYPES,
|
|
124
|
+
LiteralUnionMarshaler,
|
|
125
|
+
LiteralUnionMarshalerFactory,
|
|
126
|
+
LiteralUnionUnmarshaler,
|
|
127
|
+
LiteralUnionUnmarshalerFactory,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
from .composite.unions.primitives import ( # noqa
|
|
131
|
+
PRIMITIVE_UNION_TYPES,
|
|
132
|
+
PrimitiveUnionMarshaler,
|
|
133
|
+
PrimitiveUnionMarshalerFactory,
|
|
134
|
+
PrimitiveUnionUnmarshaler,
|
|
135
|
+
PrimitiveUnionUnmarshalerFactory,
|
|
136
|
+
)
|
|
137
|
+
|
|
99
138
|
from .composite.wrapped import ( # noqa
|
|
100
139
|
WrappedMarshaler,
|
|
101
140
|
WrappedUnmarshaler,
|
|
102
141
|
)
|
|
103
142
|
|
|
104
|
-
from .factories.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
from .factories.match import ( # noqa
|
|
110
|
-
MarshalerFactoryMatchClass,
|
|
111
|
-
UnmarshalerFactoryMatchClass,
|
|
143
|
+
from .factories.method import ( # noqa
|
|
144
|
+
MarshalerFactoryMethodClass,
|
|
145
|
+
UnmarshalerFactoryMethodClass,
|
|
112
146
|
)
|
|
113
147
|
|
|
114
148
|
from .factories.moduleimport.configs import ( # noqa
|
|
@@ -180,6 +214,7 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
180
214
|
)
|
|
181
215
|
|
|
182
216
|
from .polymorphism.metadata import ( # noqa
|
|
217
|
+
AutoStripSuffix,
|
|
183
218
|
FieldTypeTagging,
|
|
184
219
|
Impl,
|
|
185
220
|
Impls,
|
|
@@ -195,13 +230,8 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
195
230
|
)
|
|
196
231
|
|
|
197
232
|
from .polymorphism.unions import ( # noqa
|
|
198
|
-
PRIMITIVE_UNION_TYPES,
|
|
199
233
|
PolymorphismUnionMarshalerFactory,
|
|
200
234
|
PolymorphismUnionUnmarshalerFactory,
|
|
201
|
-
PrimitiveUnionMarshaler,
|
|
202
|
-
PrimitiveUnionMarshalerFactory,
|
|
203
|
-
PrimitiveUnionUnmarshaler,
|
|
204
|
-
PrimitiveUnionUnmarshalerFactory,
|
|
205
235
|
)
|
|
206
236
|
|
|
207
237
|
from .polymorphism.unmarshal import ( # noqa
|
|
@@ -213,6 +243,7 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
213
243
|
from .singular.base64 import ( # noqa
|
|
214
244
|
BASE64_MARSHALER_FACTORY,
|
|
215
245
|
BASE64_UNMARSHALER_FACTORY,
|
|
246
|
+
Base64MarshalerUnmarshaler,
|
|
216
247
|
)
|
|
217
248
|
|
|
218
249
|
from .singular.primitives import ( # noqa
|
|
@@ -221,6 +252,7 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
221
252
|
|
|
222
253
|
from .trivial.forbidden import ( # noqa
|
|
223
254
|
ForbiddenTypeMarshalerFactory,
|
|
255
|
+
ForbiddenTypeMarshalerFactoryUnmarshalerFactory,
|
|
224
256
|
ForbiddenTypeUnmarshalerFactory,
|
|
225
257
|
)
|
|
226
258
|
|