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
|
@@ -5,14 +5,12 @@ from ... import check
|
|
|
5
5
|
from ... import dataclasses as dc
|
|
6
6
|
from ... import lang
|
|
7
7
|
from ... import reflect as rfl
|
|
8
|
-
from
|
|
9
|
-
from ..base.contexts import
|
|
10
|
-
from ..base.contexts import UnmarshalContext
|
|
8
|
+
from ..base.contexts import MarshalFactoryContext
|
|
9
|
+
from ..base.contexts import UnmarshalFactoryContext
|
|
11
10
|
from ..base.types import Marshaler
|
|
11
|
+
from ..base.types import MarshalerFactory
|
|
12
12
|
from ..base.types import Unmarshaler
|
|
13
|
-
from ..base.
|
|
14
|
-
from ..factories.simple import SimpleMarshalerFactory
|
|
15
|
-
from ..factories.simple import SimpleUnmarshalerFactory
|
|
13
|
+
from ..base.types import UnmarshalerFactory
|
|
16
14
|
from .marshal import make_polymorphism_marshaler
|
|
17
15
|
from .metadata import Impls
|
|
18
16
|
from .metadata import TypeTagging
|
|
@@ -23,98 +21,6 @@ from .unmarshal import make_polymorphism_unmarshaler
|
|
|
23
21
|
##
|
|
24
22
|
|
|
25
23
|
|
|
26
|
-
class MatchUnionMarshaler(Marshaler):
|
|
27
|
-
mmf: mfs.MultiMatchFn[[UnmarshalContext, Value], ta.Any]
|
|
28
|
-
|
|
29
|
-
def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
|
|
30
|
-
try:
|
|
31
|
-
m = self.mmf.match(ctx, o)
|
|
32
|
-
except mfs.AmbiguousMatchesError:
|
|
33
|
-
raise ValueError(o) # noqa
|
|
34
|
-
return m.fn(ctx, o)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class MatchUnionUnmarshaler(Unmarshaler):
|
|
38
|
-
mmf: mfs.MultiMatchFn[[UnmarshalContext, Value], ta.Any]
|
|
39
|
-
|
|
40
|
-
def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
|
|
41
|
-
try:
|
|
42
|
-
m = self.mmf.match(ctx, v)
|
|
43
|
-
except mfs.AmbiguousMatchesError:
|
|
44
|
-
raise ValueError(v) # noqa
|
|
45
|
-
return m.fn(ctx, v)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
##
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
PRIMITIVE_UNION_TYPES: tuple[type, ...] = (
|
|
52
|
-
float,
|
|
53
|
-
int,
|
|
54
|
-
str,
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
#
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@dc.dataclass(frozen=True)
|
|
62
|
-
class PrimitiveUnionMarshaler(Marshaler):
|
|
63
|
-
tys: ta.Sequence[type]
|
|
64
|
-
|
|
65
|
-
def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
|
|
66
|
-
if type(o) not in self.tys:
|
|
67
|
-
raise TypeError(o)
|
|
68
|
-
return o
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
@dc.dataclass(frozen=True)
|
|
72
|
-
class PrimitiveUnionMarshalerFactory(SimpleMarshalerFactory):
|
|
73
|
-
tys: ta.Sequence[type] = PRIMITIVE_UNION_TYPES
|
|
74
|
-
|
|
75
|
-
def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
|
|
76
|
-
return isinstance(rty, rfl.Union) and all(a in self.tys for a in rty.args)
|
|
77
|
-
|
|
78
|
-
def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
|
79
|
-
args = check.isinstance(rty, rfl.Union).args
|
|
80
|
-
return PrimitiveUnionMarshaler([t for t in self.tys if t in args])
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
@dc.dataclass(frozen=True)
|
|
87
|
-
class PrimitiveUnionUnmarshaler(Unmarshaler):
|
|
88
|
-
tys: ta.Sequence[type]
|
|
89
|
-
|
|
90
|
-
def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
|
|
91
|
-
if type(v) not in self.tys:
|
|
92
|
-
raise TypeError(v)
|
|
93
|
-
return v
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
@dc.dataclass(frozen=True)
|
|
97
|
-
class PrimitiveUnionUnmarshalerFactory(SimpleUnmarshalerFactory):
|
|
98
|
-
tys: ta.Sequence[type] = PRIMITIVE_UNION_TYPES
|
|
99
|
-
|
|
100
|
-
def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
|
|
101
|
-
return isinstance(rty, rfl.Union) and all(a in self.tys for a in rty.args)
|
|
102
|
-
|
|
103
|
-
def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
|
104
|
-
args = check.isinstance(rty, rfl.Union).args
|
|
105
|
-
return PrimitiveUnionUnmarshaler([t for t in self.tys if t in args])
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
#
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
PRIMITIVE_UNION_MARSHALER_FACTORY = PrimitiveUnionMarshalerFactory()
|
|
112
|
-
PRIMITIVE_UNION_UNMARSHALER_FACTORY = PrimitiveUnionUnmarshalerFactory()
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
|
|
118
24
|
@dc.dataclass(frozen=True)
|
|
119
25
|
class _BasePolymorphismUnionFactory(lang.Abstract):
|
|
120
26
|
impls: Impls
|
|
@@ -126,7 +32,7 @@ class _BasePolymorphismUnionFactory(lang.Abstract):
|
|
|
126
32
|
def rtys(self) -> frozenset[rfl.Type]:
|
|
127
33
|
return frozenset(i.ty for i in self.impls)
|
|
128
34
|
|
|
129
|
-
def
|
|
35
|
+
def _guard(self, rty: rfl.Type) -> bool:
|
|
130
36
|
if not isinstance(rty, rfl.Union):
|
|
131
37
|
return False
|
|
132
38
|
if self.allow_partial:
|
|
@@ -140,12 +46,16 @@ class _BasePolymorphismUnionFactory(lang.Abstract):
|
|
|
140
46
|
|
|
141
47
|
|
|
142
48
|
@dc.dataclass(frozen=True)
|
|
143
|
-
class PolymorphismUnionMarshalerFactory(_BasePolymorphismUnionFactory,
|
|
144
|
-
def
|
|
145
|
-
|
|
49
|
+
class PolymorphismUnionMarshalerFactory(_BasePolymorphismUnionFactory, MarshalerFactory):
|
|
50
|
+
def make_marshaler(self, ctx: MarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Marshaler] | None:
|
|
51
|
+
if not self._guard(rty):
|
|
52
|
+
return None
|
|
53
|
+
return lambda: make_polymorphism_marshaler(self.get_impls(rty), self.tt, ctx)
|
|
146
54
|
|
|
147
55
|
|
|
148
56
|
@dc.dataclass(frozen=True)
|
|
149
|
-
class PolymorphismUnionUnmarshalerFactory(_BasePolymorphismUnionFactory,
|
|
150
|
-
def
|
|
151
|
-
|
|
57
|
+
class PolymorphismUnionUnmarshalerFactory(_BasePolymorphismUnionFactory, UnmarshalerFactory):
|
|
58
|
+
def make_unmarshaler(self, ctx: UnmarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Unmarshaler] | None:
|
|
59
|
+
if not self._guard(rty):
|
|
60
|
+
return None
|
|
61
|
+
return lambda: make_polymorphism_unmarshaler(self.get_impls(rty), self.tt, ctx)
|
|
@@ -7,9 +7,10 @@ from ... import check
|
|
|
7
7
|
from ... import lang
|
|
8
8
|
from ... import reflect as rfl
|
|
9
9
|
from ..base.contexts import UnmarshalContext
|
|
10
|
+
from ..base.contexts import UnmarshalFactoryContext
|
|
10
11
|
from ..base.types import Unmarshaler
|
|
12
|
+
from ..base.types import UnmarshalerFactory
|
|
11
13
|
from ..base.values import Value
|
|
12
|
-
from ..factories.simple import SimpleUnmarshalerFactory
|
|
13
14
|
from .metadata import FieldTypeTagging
|
|
14
15
|
from .metadata import Impls
|
|
15
16
|
from .metadata import Polymorphism
|
|
@@ -58,12 +59,12 @@ class FieldPolymorphismUnmarshaler(PolymorphismUnmarshaler):
|
|
|
58
59
|
def make_polymorphism_unmarshaler(
|
|
59
60
|
impls: Impls,
|
|
60
61
|
tt: TypeTagging,
|
|
61
|
-
ctx:
|
|
62
|
+
ctx: UnmarshalFactoryContext,
|
|
62
63
|
) -> Unmarshaler:
|
|
63
64
|
m = {
|
|
64
65
|
t: u
|
|
65
66
|
for i in impls
|
|
66
|
-
for u in [ctx.
|
|
67
|
+
for u in [ctx.make_unmarshaler(i.ty)]
|
|
67
68
|
for t in [i.tag, *i.alts]
|
|
68
69
|
}
|
|
69
70
|
if isinstance(tt, WrapperTypeTagging):
|
|
@@ -75,13 +76,11 @@ def make_polymorphism_unmarshaler(
|
|
|
75
76
|
|
|
76
77
|
|
|
77
78
|
@dc.dataclass(frozen=True)
|
|
78
|
-
class PolymorphismUnmarshalerFactory(
|
|
79
|
+
class PolymorphismUnmarshalerFactory(UnmarshalerFactory):
|
|
79
80
|
p: Polymorphism
|
|
80
81
|
tt: TypeTagging = WrapperTypeTagging()
|
|
81
82
|
|
|
82
|
-
def
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
check.is_(rty, self.p.ty)
|
|
87
|
-
return make_polymorphism_unmarshaler(self.p.impls, self.tt, ctx)
|
|
83
|
+
def make_unmarshaler(self, ctx: UnmarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Unmarshaler] | None:
|
|
84
|
+
if rty is not self.p.ty:
|
|
85
|
+
return None
|
|
86
|
+
return lambda: make_polymorphism_unmarshaler(self.p.impls, self.tt, ctx)
|
omlish/marshal/singular/enums.py
CHANGED
|
@@ -5,12 +5,14 @@ import typing as ta
|
|
|
5
5
|
from ... import check
|
|
6
6
|
from ... import reflect as rfl
|
|
7
7
|
from ..base.contexts import MarshalContext
|
|
8
|
+
from ..base.contexts import MarshalFactoryContext
|
|
8
9
|
from ..base.contexts import UnmarshalContext
|
|
10
|
+
from ..base.contexts import UnmarshalFactoryContext
|
|
9
11
|
from ..base.types import Marshaler
|
|
12
|
+
from ..base.types import MarshalerFactory
|
|
10
13
|
from ..base.types import Unmarshaler
|
|
14
|
+
from ..base.types import UnmarshalerFactory
|
|
11
15
|
from ..base.values import Value
|
|
12
|
-
from ..factories.simple import SimpleMarshalerFactory
|
|
13
|
-
from ..factories.simple import SimpleUnmarshalerFactory
|
|
14
16
|
|
|
15
17
|
|
|
16
18
|
##
|
|
@@ -24,14 +26,11 @@ class EnumMarshaler(Marshaler):
|
|
|
24
26
|
return o.name
|
|
25
27
|
|
|
26
28
|
|
|
27
|
-
class EnumMarshalerFactory(
|
|
28
|
-
def
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
ty = check.isinstance(rty, type)
|
|
33
|
-
check.state(issubclass(ty, enum.Enum))
|
|
34
|
-
return EnumMarshaler(ty) # noqa
|
|
29
|
+
class EnumMarshalerFactory(MarshalerFactory):
|
|
30
|
+
def make_marshaler(self, ctx: MarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Marshaler] | None:
|
|
31
|
+
if not (isinstance(rty, type) and issubclass(rty, enum.Enum)):
|
|
32
|
+
return None
|
|
33
|
+
return lambda: EnumMarshaler(rty) # noqa
|
|
35
34
|
|
|
36
35
|
|
|
37
36
|
@dc.dataclass(frozen=True)
|
|
@@ -42,11 +41,8 @@ class EnumUnmarshaler(Unmarshaler):
|
|
|
42
41
|
return self.ty[check.isinstance(v, str)]
|
|
43
42
|
|
|
44
43
|
|
|
45
|
-
class EnumUnmarshalerFactory(
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
ty = check.isinstance(rty, type)
|
|
51
|
-
check.state(issubclass(ty, enum.Enum))
|
|
52
|
-
return EnumUnmarshaler(ty)
|
|
44
|
+
class EnumUnmarshalerFactory(UnmarshalerFactory):
|
|
45
|
+
def make_unmarshaler(self, ctx: UnmarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Unmarshaler] | None:
|
|
46
|
+
if not (isinstance(rty, type) and issubclass(rty, enum.Enum)):
|
|
47
|
+
return None
|
|
48
|
+
return lambda: EnumUnmarshaler(rty) # noqa
|
omlish/marshal/standard.py
CHANGED
|
@@ -22,6 +22,10 @@ from .composite.optionals import OptionalMarshalerFactory
|
|
|
22
22
|
from .composite.optionals import OptionalUnmarshalerFactory
|
|
23
23
|
from .composite.special import SequenceNotStrMarshalerFactory
|
|
24
24
|
from .composite.special import SequenceNotStrUnmarshalerFactory
|
|
25
|
+
from .composite.unions.literals import LiteralUnionMarshalerFactory
|
|
26
|
+
from .composite.unions.literals import LiteralUnionUnmarshalerFactory
|
|
27
|
+
from .composite.unions.primitives import PrimitiveUnionMarshalerFactory
|
|
28
|
+
from .composite.unions.primitives import PrimitiveUnionUnmarshalerFactory
|
|
25
29
|
from .factories.invalidate import InvalidatableMarshalerFactory
|
|
26
30
|
from .factories.invalidate import InvalidatableUnmarshalerFactory
|
|
27
31
|
from .factories.moduleimport.factories import ModuleImportingMarshalerFactory
|
|
@@ -36,8 +40,6 @@ from .objects.dataclasses import DataclassMarshalerFactory
|
|
|
36
40
|
from .objects.dataclasses import DataclassUnmarshalerFactory
|
|
37
41
|
from .objects.namedtuples import NamedtupleMarshalerFactory
|
|
38
42
|
from .objects.namedtuples import NamedtupleUnmarshalerFactory
|
|
39
|
-
from .polymorphism.unions import PrimitiveUnionMarshalerFactory
|
|
40
|
-
from .polymorphism.unions import PrimitiveUnionUnmarshalerFactory
|
|
41
43
|
from .singular.datetimes import DATETIME_MARSHALER_FACTORY
|
|
42
44
|
from .singular.datetimes import DATETIME_UNMARSHALER_FACTORY
|
|
43
45
|
from .singular.enums import EnumMarshalerFactory
|
|
@@ -65,6 +67,7 @@ DEFAULT_STANDARD_FACTORIES = StandardFactories(
|
|
|
65
67
|
PRIMITIVE_MARSHALER_FACTORY,
|
|
66
68
|
NewtypeMarshalerFactory(),
|
|
67
69
|
OptionalMarshalerFactory(),
|
|
70
|
+
LiteralUnionMarshalerFactory(),
|
|
68
71
|
PrimitiveUnionMarshalerFactory(),
|
|
69
72
|
DataclassMarshalerFactory(),
|
|
70
73
|
NamedtupleMarshalerFactory(),
|
|
@@ -84,6 +87,7 @@ DEFAULT_STANDARD_FACTORIES = StandardFactories(
|
|
|
84
87
|
PRIMITIVE_UNMARSHALER_FACTORY,
|
|
85
88
|
NewtypeUnmarshalerFactory(),
|
|
86
89
|
OptionalUnmarshalerFactory(),
|
|
90
|
+
LiteralUnionUnmarshalerFactory(),
|
|
87
91
|
PrimitiveUnionUnmarshalerFactory(),
|
|
88
92
|
DataclassUnmarshalerFactory(),
|
|
89
93
|
NamedtupleUnmarshalerFactory(),
|
|
@@ -115,11 +119,11 @@ def new_standard_marshaler_factory(
|
|
|
115
119
|
nonlocal gl
|
|
116
120
|
gl = DEFAULT_STANDARD_FACTORIES
|
|
117
121
|
|
|
118
|
-
fi: MarshalerFactory = MultiMarshalerFactory(
|
|
122
|
+
fi: MarshalerFactory = MultiMarshalerFactory(
|
|
119
123
|
*(first if first is not None else []),
|
|
120
124
|
*gl.marshaler_factories,
|
|
121
125
|
*(last if last is not None else []),
|
|
122
|
-
|
|
126
|
+
)
|
|
123
127
|
|
|
124
128
|
fi = RecursiveMarshalerFactory(fi)
|
|
125
129
|
|
|
@@ -148,11 +152,11 @@ def new_standard_unmarshaler_factory(
|
|
|
148
152
|
nonlocal gl
|
|
149
153
|
gl = DEFAULT_STANDARD_FACTORIES
|
|
150
154
|
|
|
151
|
-
fi: UnmarshalerFactory = MultiUnmarshalerFactory(
|
|
155
|
+
fi: UnmarshalerFactory = MultiUnmarshalerFactory(
|
|
152
156
|
*(first if first is not None else []),
|
|
153
157
|
*gl.unmarshaler_factories,
|
|
154
158
|
*(last if last is not None else []),
|
|
155
|
-
|
|
159
|
+
)
|
|
156
160
|
|
|
157
161
|
fi = RecursiveUnmarshalerFactory(fi)
|
|
158
162
|
|
omlish/marshal/trivial/any.py
CHANGED
|
@@ -15,7 +15,7 @@ from ..factories.typemap import TypeMapUnmarshalerFactory
|
|
|
15
15
|
|
|
16
16
|
class AnyMarshalerUnmarshaler(Marshaler, Unmarshaler):
|
|
17
17
|
def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
|
|
18
|
-
return ctx.
|
|
18
|
+
return ctx.marshal_factory_context.make_marshaler(type(o)).marshal(ctx, o)
|
|
19
19
|
|
|
20
20
|
def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
|
|
21
21
|
return v
|
|
@@ -2,45 +2,40 @@ import dataclasses as dc
|
|
|
2
2
|
import typing as ta
|
|
3
3
|
|
|
4
4
|
from ... import reflect as rfl
|
|
5
|
-
from
|
|
6
|
-
from ..base.contexts import
|
|
7
|
-
from ..base.contexts import UnmarshalContext
|
|
5
|
+
from ..base.contexts import MarshalFactoryContext
|
|
6
|
+
from ..base.contexts import UnmarshalFactoryContext
|
|
8
7
|
from ..base.errors import ForbiddenTypeError
|
|
9
8
|
from ..base.types import Marshaler
|
|
9
|
+
from ..base.types import MarshalerFactory
|
|
10
10
|
from ..base.types import Unmarshaler
|
|
11
|
-
from ..
|
|
12
|
-
from ..factories.simple import SimpleUnmarshalerFactory
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
C = ta.TypeVar('C')
|
|
16
|
-
R = ta.TypeVar('R')
|
|
11
|
+
from ..base.types import UnmarshalerFactory
|
|
17
12
|
|
|
18
13
|
|
|
19
14
|
##
|
|
20
15
|
|
|
21
16
|
|
|
22
17
|
@dc.dataclass(frozen=True)
|
|
23
|
-
class
|
|
18
|
+
class ForbiddenTypeMarshalerFactoryUnmarshalerFactory(MarshalerFactory, UnmarshalerFactory):
|
|
24
19
|
rtys: ta.AbstractSet[rfl.Type]
|
|
25
20
|
|
|
26
|
-
def
|
|
27
|
-
|
|
21
|
+
def make_marshaler(self, ctx: MarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Marshaler] | None:
|
|
22
|
+
if rty not in self.rtys:
|
|
23
|
+
return None
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
def inner():
|
|
26
|
+
raise ForbiddenTypeError(rty)
|
|
31
27
|
|
|
28
|
+
return inner
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
SimpleMarshalerFactory,
|
|
37
|
-
):
|
|
38
|
-
pass
|
|
30
|
+
def make_unmarshaler(self, ctx: UnmarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], Unmarshaler] | None:
|
|
31
|
+
if rty not in self.rtys:
|
|
32
|
+
return None
|
|
39
33
|
|
|
34
|
+
def inner():
|
|
35
|
+
raise ForbiddenTypeError(rty)
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
pass
|
|
37
|
+
return inner
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
ForbiddenTypeMarshalerFactory = ForbiddenTypeMarshalerFactoryUnmarshalerFactory
|
|
41
|
+
ForbiddenTypeUnmarshalerFactory = ForbiddenTypeMarshalerFactoryUnmarshalerFactory
|
omlish/math/fixed.py
CHANGED
|
@@ -70,8 +70,8 @@ class FixedWidthInt(int, lang.Abstract):
|
|
|
70
70
|
|
|
71
71
|
#
|
|
72
72
|
|
|
73
|
-
def __init_subclass__(cls) -> None:
|
|
74
|
-
super().__init_subclass__()
|
|
73
|
+
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
|
74
|
+
super().__init_subclass__(**kwargs)
|
|
75
75
|
|
|
76
76
|
if lang.is_abstract_class(cls):
|
|
77
77
|
return
|
omlish/metadata.py
CHANGED
|
@@ -19,6 +19,8 @@ from . import lang
|
|
|
19
19
|
|
|
20
20
|
T = ta.TypeVar('T')
|
|
21
21
|
|
|
22
|
+
ObjectMetadataT = ta.TypeVar('ObjectMetadataT', bound='ObjectMetadata')
|
|
23
|
+
|
|
22
24
|
|
|
23
25
|
##
|
|
24
26
|
|
|
@@ -94,12 +96,32 @@ def append_object_metadata(obj: T, *mds: ObjectMetadata) -> T:
|
|
|
94
96
|
_type = type
|
|
95
97
|
|
|
96
98
|
|
|
99
|
+
@ta.overload
|
|
100
|
+
def get_object_metadata(
|
|
101
|
+
obj: ta.Any,
|
|
102
|
+
*,
|
|
103
|
+
strict: bool = False,
|
|
104
|
+
type: ta.Type[ObjectMetadataT], # noqa
|
|
105
|
+
) -> ta.Sequence[ObjectMetadataT]:
|
|
106
|
+
...
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@ta.overload
|
|
97
110
|
def get_object_metadata(
|
|
98
111
|
obj: ta.Any,
|
|
99
112
|
*,
|
|
100
113
|
strict: bool = False,
|
|
101
114
|
type: ta.Type | tuple[ta.Type, ...] | None = None, # noqa
|
|
102
|
-
) -> ta.Sequence[
|
|
115
|
+
) -> ta.Sequence[ta.Any]:
|
|
116
|
+
...
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def get_object_metadata(
|
|
120
|
+
obj,
|
|
121
|
+
*,
|
|
122
|
+
strict=False,
|
|
123
|
+
type=None, # noqa
|
|
124
|
+
):
|
|
103
125
|
try:
|
|
104
126
|
tgt = _unwrap_object_metadata_target(obj)
|
|
105
127
|
except ObjectMetadataTargetTypeError:
|
omlish/os/atomics.py
CHANGED
|
@@ -7,11 +7,11 @@ import tempfile
|
|
|
7
7
|
import typing as ta
|
|
8
8
|
|
|
9
9
|
from ..lite.abstract import Abstract
|
|
10
|
+
from ..lite.attrops import attr_repr
|
|
10
11
|
from ..lite.check import check
|
|
11
|
-
from ..lite.strings import attr_repr
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
AtomicPathSwapKind = ta.Literal['dir', 'file']
|
|
14
|
+
AtomicPathSwapKind = ta.Literal['dir', 'file'] # ta.TypeAlias
|
|
15
15
|
AtomicPathSwapState = ta.Literal['open', 'committed', 'aborted'] # ta.TypeAlias
|
|
16
16
|
|
|
17
17
|
|
omlish/os/forkhooks.py
CHANGED
omlish/os/journald.py
CHANGED
|
@@ -79,7 +79,7 @@ SD_LOG_LEVEL_MAP: ta.Mapping[int, int] = {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
class
|
|
82
|
+
class JournaldLoggingHandler(logging.Handler):
|
|
83
83
|
"""
|
|
84
84
|
TODO:
|
|
85
85
|
- fallback handler for when this barfs
|
|
@@ -148,7 +148,7 @@ class JournaldLogHandler(logging.Handler):
|
|
|
148
148
|
self.handleError(record)
|
|
149
149
|
|
|
150
150
|
|
|
151
|
-
def
|
|
151
|
+
def journald_logging_handler_factory(
|
|
152
152
|
*,
|
|
153
153
|
no_tty_check: bool = False,
|
|
154
154
|
no_fallback: bool = False,
|
|
@@ -158,6 +158,6 @@ def journald_log_handler_factory(
|
|
|
158
158
|
(no_tty_check or not sys.stderr.isatty()) and
|
|
159
159
|
(no_fallback or sd_try_libsystemd() is not None)
|
|
160
160
|
):
|
|
161
|
-
return
|
|
161
|
+
return JournaldLoggingHandler()
|
|
162
162
|
|
|
163
163
|
return logging.StreamHandler()
|
omlish/os/pidfiles/pinning.py
CHANGED
|
@@ -25,8 +25,8 @@ import sys
|
|
|
25
25
|
import time
|
|
26
26
|
import typing as ta
|
|
27
27
|
|
|
28
|
-
from ...diag.lslocks import LslocksCommand
|
|
29
|
-
from ...diag.lsof import LsofCommand
|
|
28
|
+
from ...diag.cmds.lslocks import LslocksCommand
|
|
29
|
+
from ...diag.cmds.lsof import LsofCommand
|
|
30
30
|
from ...lite.abstract import Abstract
|
|
31
31
|
from ...lite.check import check
|
|
32
32
|
from ...lite.timeouts import Timeout
|
omlish/reflect/ops.py
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- visitor / transformer
|
|
4
|
+
- gson had an ObjectNavigator:
|
|
5
|
+
- https://github.com/google/gson/blob/f291c4d33ea5fcc52afcfa5713e519e663378bda/gson/src/main/java/com/google/gson/ObjectNavigator.java
|
|
6
|
+
- removed in 25c6ae177b1ca56db7f3c29eb574bdd032a06165
|
|
7
|
+
- uniform collection isinstance - items() for mappings, iter() for other
|
|
8
|
+
- also check instance type in isinstance not just items lol
|
|
9
|
+
""" # noqa
|
|
1
10
|
import dataclasses as dc
|
|
2
11
|
import typing as ta
|
|
3
12
|
|
omlish/reflect/types.py
CHANGED
|
@@ -9,12 +9,9 @@ give it some guiding North Star to make all of its decisions for it, and to add
|
|
|
9
9
|
meet, join, solve, ...), but it's quite a bit of work and not a priority at the moment.
|
|
10
10
|
|
|
11
11
|
TODO:
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
- ta.Generic in mro causing trouble - omit? no longer 1:1
|
|
16
|
-
- cache this shit, esp generic_mro shit
|
|
17
|
-
- cache __hash__ in Generic/Union
|
|
12
|
+
- !!! refactor like a GuardFn - no check_only, return a closure to continue computation !!!
|
|
13
|
+
- !! cache this shit !!
|
|
14
|
+
- especially generic_mro shit
|
|
18
15
|
"""
|
|
19
16
|
import dataclasses as dc
|
|
20
17
|
import threading
|
|
@@ -22,6 +19,7 @@ import types
|
|
|
22
19
|
import typing as ta
|
|
23
20
|
|
|
24
21
|
from ..lite.abstract import Abstract
|
|
22
|
+
from ..lite.dataclasses import dataclass_cache_hash
|
|
25
23
|
|
|
26
24
|
|
|
27
25
|
_NoneType = types.NoneType # type: ignore
|
|
@@ -51,6 +49,7 @@ if not isinstance(_Protocol, type) or not issubclass(_Protocol, _Generic):
|
|
|
51
49
|
##
|
|
52
50
|
|
|
53
51
|
|
|
52
|
+
@dataclass_cache_hash()
|
|
54
53
|
@dc.dataclass(frozen=True)
|
|
55
54
|
class _Special:
|
|
56
55
|
name: str
|
|
@@ -68,6 +67,7 @@ class _Special:
|
|
|
68
67
|
)
|
|
69
68
|
|
|
70
69
|
|
|
70
|
+
@dataclass_cache_hash()
|
|
71
71
|
@dc.dataclass(frozen=True)
|
|
72
72
|
class _LazySpecial:
|
|
73
73
|
name: str
|
|
@@ -226,7 +226,7 @@ def is_simple_generic_alias_type(oty: type) -> bool:
|
|
|
226
226
|
|
|
227
227
|
def get_params(obj: ta.Any) -> tuple[ta.TypeVar, ...]:
|
|
228
228
|
if isinstance(obj, type):
|
|
229
|
-
if issubclass(obj, ta.Generic):
|
|
229
|
+
if issubclass(obj, ta.Generic):
|
|
230
230
|
return obj.__dict__.get('__parameters__', ()) # noqa
|
|
231
231
|
|
|
232
232
|
if (ks := _KNOWN_SPECIALS.get_by_origin(obj)) is not None:
|
|
@@ -297,6 +297,7 @@ TYPES: tuple[type, ...] = (
|
|
|
297
297
|
##
|
|
298
298
|
|
|
299
299
|
|
|
300
|
+
@dataclass_cache_hash()
|
|
300
301
|
@dc.dataclass(frozen=True)
|
|
301
302
|
class Union(TypeInfo):
|
|
302
303
|
args: frozenset[Type]
|
|
@@ -320,6 +321,7 @@ class Union(TypeInfo):
|
|
|
320
321
|
GenericLikeCls = ta.TypeVar('GenericLikeCls')
|
|
321
322
|
|
|
322
323
|
|
|
324
|
+
@dataclass_cache_hash()
|
|
323
325
|
@dc.dataclass(frozen=True)
|
|
324
326
|
class GenericLike(TypeInfo, Abstract, ta.Generic[GenericLikeCls]):
|
|
325
327
|
cls: GenericLikeCls
|
|
@@ -363,6 +365,7 @@ class Protocol(GenericLike[ta.Any]):
|
|
|
363
365
|
#
|
|
364
366
|
|
|
365
367
|
|
|
368
|
+
@dataclass_cache_hash()
|
|
366
369
|
@dc.dataclass(frozen=True)
|
|
367
370
|
class NewType(TypeInfo):
|
|
368
371
|
obj: ta.Any
|
|
@@ -372,6 +375,7 @@ class NewType(TypeInfo):
|
|
|
372
375
|
#
|
|
373
376
|
|
|
374
377
|
|
|
378
|
+
@dataclass_cache_hash()
|
|
375
379
|
@dc.dataclass(frozen=True)
|
|
376
380
|
class Annotated(TypeInfo):
|
|
377
381
|
ty: Type
|
|
@@ -383,6 +387,7 @@ class Annotated(TypeInfo):
|
|
|
383
387
|
#
|
|
384
388
|
|
|
385
389
|
|
|
390
|
+
@dataclass_cache_hash()
|
|
386
391
|
@dc.dataclass(frozen=True)
|
|
387
392
|
class Literal(TypeInfo):
|
|
388
393
|
args: tuple[ta.Any, ...]
|
|
@@ -407,6 +412,25 @@ class ReflectTypeError(TypeError):
|
|
|
407
412
|
pass
|
|
408
413
|
|
|
409
414
|
|
|
415
|
+
_TRIVIAL_TYPES: set[ta.Any] = {
|
|
416
|
+
bool,
|
|
417
|
+
int,
|
|
418
|
+
str,
|
|
419
|
+
float,
|
|
420
|
+
object,
|
|
421
|
+
type(None),
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
# TODO: speed up is_type: `if obj.__class__ in _NOT_SUBCLASSED_SPECIAL_TYPES: return True`
|
|
426
|
+
# _NOT_SUBCLASSED_SPECIAL_TYPES: set[type] = {
|
|
427
|
+
# type(ta.Any),
|
|
428
|
+
# _UnionGenericAlias,
|
|
429
|
+
# ta.NewType,
|
|
430
|
+
# }
|
|
431
|
+
# TODO: static_init(for t in _NOT_SUBCLASSED_SPECIAL_TYPES: if (sts := t.__subclasses__()): raise TypeError)
|
|
432
|
+
|
|
433
|
+
|
|
410
434
|
class Reflector:
|
|
411
435
|
def __init__(
|
|
412
436
|
self,
|
|
@@ -448,12 +472,24 @@ class Reflector:
|
|
|
448
472
|
if obj is ta.Any:
|
|
449
473
|
return ANY
|
|
450
474
|
|
|
475
|
+
##
|
|
476
|
+
# Trivial
|
|
477
|
+
|
|
478
|
+
try:
|
|
479
|
+
if obj in _TRIVIAL_TYPES:
|
|
480
|
+
return obj
|
|
481
|
+
except TypeError:
|
|
482
|
+
pass
|
|
483
|
+
|
|
451
484
|
##
|
|
452
485
|
# Already a Type?
|
|
453
486
|
|
|
454
487
|
if isinstance(obj, (ta.TypeVar, TypeInfo)): # noqa
|
|
455
488
|
return obj
|
|
456
489
|
|
|
490
|
+
##
|
|
491
|
+
# It's a type
|
|
492
|
+
|
|
457
493
|
oty = type(obj)
|
|
458
494
|
|
|
459
495
|
##
|
|
@@ -556,7 +592,7 @@ class Reflector:
|
|
|
556
592
|
obj,
|
|
557
593
|
)
|
|
558
594
|
|
|
559
|
-
if issubclass(obj, ta.Generic):
|
|
595
|
+
if issubclass(obj, ta.Generic):
|
|
560
596
|
params = get_params(obj)
|
|
561
597
|
if params:
|
|
562
598
|
return Generic(
|
omlish/secrets/marshal.py
CHANGED
|
@@ -54,7 +54,7 @@ def marshal_secret_field(f: dc.Field) -> dc.Field:
|
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
@lang.static_init
|
|
57
|
-
def
|
|
57
|
+
def _install_standard_marshaling() -> None:
|
|
58
58
|
msh.install_standard_factories(
|
|
59
59
|
msh.ForbiddenTypeMarshalerFactory({Secret}),
|
|
60
60
|
msh.ForbiddenTypeUnmarshalerFactory({Secret}),
|