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/configs/types.py
CHANGED
omlish/daemons/__init__.py
CHANGED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from .. import lang as _lang # noqa
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
with _lang.auto_proxy_init(globals()):
|
|
5
|
+
##
|
|
6
|
+
|
|
7
|
+
from .daemon import ( # noqa
|
|
8
|
+
Daemon,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from .launching import ( # noqa
|
|
12
|
+
Launcher,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
from .services import ( # noqa
|
|
16
|
+
Service,
|
|
17
|
+
|
|
18
|
+
ServiceTarget,
|
|
19
|
+
ServiceTargetRunner,
|
|
20
|
+
|
|
21
|
+
ServiceConfigTarget,
|
|
22
|
+
ServiceConfigTargetRunner,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from .spawning import ( # noqa
|
|
26
|
+
Spawning,
|
|
27
|
+
Spawn,
|
|
28
|
+
Spawner,
|
|
29
|
+
InProcessSpawner,
|
|
30
|
+
spawner_for,
|
|
31
|
+
|
|
32
|
+
MultiprocessingSpawning,
|
|
33
|
+
MultiprocessingSpawner,
|
|
34
|
+
|
|
35
|
+
ForkSpawning,
|
|
36
|
+
ForkSpawner,
|
|
37
|
+
|
|
38
|
+
ThreadSpawning,
|
|
39
|
+
ThreadSpawner,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
from .targets import ( # noqa
|
|
43
|
+
Target,
|
|
44
|
+
TargetRunner,
|
|
45
|
+
target_runner_for,
|
|
46
|
+
|
|
47
|
+
FnTarget,
|
|
48
|
+
FnTargetRunner,
|
|
49
|
+
|
|
50
|
+
NameTarget,
|
|
51
|
+
NameTargetRunner,
|
|
52
|
+
|
|
53
|
+
ExecTarget,
|
|
54
|
+
ExecTargetRunner,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
from .waiting import ( # noqa
|
|
58
|
+
Wait,
|
|
59
|
+
Waiter,
|
|
60
|
+
waiter_for,
|
|
61
|
+
|
|
62
|
+
SequentialWait,
|
|
63
|
+
SequentialWaiter,
|
|
64
|
+
|
|
65
|
+
FnWait,
|
|
66
|
+
FnWaiter,
|
|
67
|
+
|
|
68
|
+
ConnectWait,
|
|
69
|
+
ConnectWaiter,
|
|
70
|
+
)
|
omlish/daemons/daemon.py
CHANGED
|
@@ -16,13 +16,13 @@ TODO:
|
|
|
16
16
|
- pickle protocol, revision / venv check, multiprocessing manager support
|
|
17
17
|
"""
|
|
18
18
|
import itertools
|
|
19
|
-
import logging
|
|
20
19
|
import os.path
|
|
21
20
|
import time
|
|
22
21
|
|
|
23
22
|
from .. import check
|
|
24
23
|
from .. import dataclasses as dc
|
|
25
24
|
from .. import lang
|
|
25
|
+
from ..logs import all as logs
|
|
26
26
|
from ..os.pidfiles.pidfile import Pidfile
|
|
27
27
|
from .launching import Launcher
|
|
28
28
|
from .spawning import Spawning
|
|
@@ -31,7 +31,7 @@ from .waiting import Wait
|
|
|
31
31
|
from .waiting import waiter_for
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
log =
|
|
34
|
+
log = logs.get_module_logger(globals())
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
##
|
omlish/daemons/launching.py
CHANGED
|
@@ -5,12 +5,12 @@ TODO:
|
|
|
5
5
|
"""
|
|
6
6
|
import contextlib
|
|
7
7
|
import functools
|
|
8
|
-
import logging
|
|
9
8
|
import threading
|
|
10
9
|
import typing as ta
|
|
11
10
|
|
|
12
11
|
from .. import check
|
|
13
12
|
from .. import lang
|
|
13
|
+
from ..logs import all as logs
|
|
14
14
|
from ..os.pidfiles.manager import open_inheritable_pidfile
|
|
15
15
|
from ..os.pidfiles.pidfile import Pidfile
|
|
16
16
|
from .reparent import reparent_process
|
|
@@ -23,7 +23,7 @@ from .targets import Target
|
|
|
23
23
|
from .targets import target_runner_for
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
log =
|
|
26
|
+
log = logs.get_module_logger(globals())
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
##
|
omlish/daemons/reparent.py
CHANGED
|
@@ -10,13 +10,12 @@ def reparent_process(
|
|
|
10
10
|
no_close_stdio: bool = False,
|
|
11
11
|
) -> None:
|
|
12
12
|
if (pid := os.fork()): # noqa
|
|
13
|
-
|
|
14
|
-
raise RuntimeError('Unreachable') # noqa
|
|
13
|
+
raise SystemExit(0)
|
|
15
14
|
|
|
16
15
|
os.setsid()
|
|
17
16
|
|
|
18
17
|
if (pid := os.fork()): # noqa
|
|
19
|
-
|
|
18
|
+
raise SystemExit(0)
|
|
20
19
|
|
|
21
20
|
if not no_close_stdio:
|
|
22
21
|
rn_fd = os.open('/dev/null', os.O_RDONLY)
|
omlish/daemons/spawning.py
CHANGED
|
@@ -2,7 +2,6 @@ import abc
|
|
|
2
2
|
import enum
|
|
3
3
|
import functools
|
|
4
4
|
import os
|
|
5
|
-
import sys
|
|
6
5
|
import threading
|
|
7
6
|
import typing as ta
|
|
8
7
|
|
|
@@ -166,9 +165,9 @@ class ForkSpawner(Spawner, dc.Frozen):
|
|
|
166
165
|
try:
|
|
167
166
|
spawn.fn()
|
|
168
167
|
except BaseException: # noqa
|
|
169
|
-
|
|
168
|
+
raise SystemExit(1) from None
|
|
170
169
|
else:
|
|
171
|
-
|
|
170
|
+
raise SystemExit(0)
|
|
172
171
|
|
|
173
172
|
raise RuntimeError('Unreachable') # noqa
|
|
174
173
|
|
omlish/dataclasses/__init__.py
CHANGED
|
@@ -119,11 +119,6 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
119
119
|
ClassSpec,
|
|
120
120
|
)
|
|
121
121
|
|
|
122
|
-
from .tools.as_ import ( # noqa
|
|
123
|
-
shallow_asdict,
|
|
124
|
-
shallow_astuple,
|
|
125
|
-
)
|
|
126
|
-
|
|
127
122
|
from .tools.iter import ( # noqa
|
|
128
123
|
fields_dict,
|
|
129
124
|
|
|
@@ -158,9 +153,14 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
|
|
|
158
153
|
# lite imports
|
|
159
154
|
|
|
160
155
|
from ..lite.dataclasses import ( # noqa
|
|
156
|
+
dataclass_shallow_asdict as shallow_asdict,
|
|
157
|
+
dataclass_shallow_astuple as shallow_astuple,
|
|
158
|
+
|
|
161
159
|
is_immediate_dataclass,
|
|
162
160
|
|
|
163
161
|
dataclass_maybe_post_init as maybe_post_init,
|
|
162
|
+
|
|
163
|
+
dataclass_descriptor_method as descriptor_method,
|
|
164
164
|
)
|
|
165
165
|
|
|
166
166
|
|
omlish/dataclasses/errors.py
CHANGED
|
@@ -10,6 +10,7 @@ from ..... import lang
|
|
|
10
10
|
from ...._internals import STD_FIELDS_ATTR
|
|
11
11
|
from ...._internals import STD_PARAMS_ATTR
|
|
12
12
|
from ....specs import ClassSpec
|
|
13
|
+
from ....specs import ReprFn
|
|
13
14
|
from ...processing.driving import drive_cls_processing
|
|
14
15
|
from ...utils import class_decorator
|
|
15
16
|
from ..fields.building import build_cls_std_fields
|
|
@@ -53,6 +54,7 @@ def dataclass(
|
|
|
53
54
|
|
|
54
55
|
repr_id: bool | None = None,
|
|
55
56
|
terse_repr: bool | None = None,
|
|
57
|
+
default_repr_fn: ReprFn | None = None,
|
|
56
58
|
|
|
57
59
|
allow_redundant_decorator: bool | None = None,
|
|
58
60
|
|
|
@@ -158,6 +160,7 @@ def dataclass(
|
|
|
158
160
|
|
|
159
161
|
repr_id=repr_id,
|
|
160
162
|
terse_repr=terse_repr,
|
|
163
|
+
default_repr_fn=default_repr_fn,
|
|
161
164
|
|
|
162
165
|
allow_redundant_decorator=allow_redundant_decorator,
|
|
163
166
|
),
|
|
@@ -4,6 +4,7 @@ import sys
|
|
|
4
4
|
import types
|
|
5
5
|
import typing as ta
|
|
6
6
|
|
|
7
|
+
from ....specs import ReprFn
|
|
7
8
|
from .decorator import dataclass
|
|
8
9
|
|
|
9
10
|
|
|
@@ -53,6 +54,7 @@ def make_dataclass( # noqa
|
|
|
53
54
|
|
|
54
55
|
repr_id: bool | None = None,
|
|
55
56
|
terse_repr: bool | None = None,
|
|
57
|
+
default_repr_fn: ReprFn | None = None,
|
|
56
58
|
|
|
57
59
|
allow_redundant_decorator: bool | None = None,
|
|
58
60
|
|
|
@@ -142,7 +144,7 @@ def make_dataclass( # noqa
|
|
|
142
144
|
|
|
143
145
|
if module is None:
|
|
144
146
|
try:
|
|
145
|
-
module = sys._getframemodulename(_frame_offset) or '__main__' #
|
|
147
|
+
module = sys._getframemodulename(_frame_offset) or '__main__' # noqa
|
|
146
148
|
except AttributeError:
|
|
147
149
|
with contextlib.suppress(AttributeError, ValueError):
|
|
148
150
|
module = sys._getframe(_frame_offset).f_globals.get('__name__', '__main__') # noqa
|
|
@@ -174,6 +176,7 @@ def make_dataclass( # noqa
|
|
|
174
176
|
|
|
175
177
|
repr_id=repr_id,
|
|
176
178
|
terse_repr=terse_repr,
|
|
179
|
+
default_repr_fn=default_repr_fn,
|
|
177
180
|
|
|
178
181
|
allow_redundant_decorator=allow_redundant_decorator,
|
|
179
182
|
)
|
|
@@ -32,6 +32,7 @@ class ReprPlan(Plan):
|
|
|
32
32
|
|
|
33
33
|
id: bool = False
|
|
34
34
|
terse: bool = False
|
|
35
|
+
default_fn: OpRef[ReprFn] | None = None
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
@register_generator_type(ReprPlan)
|
|
@@ -66,11 +67,17 @@ class ReprGenerator(Generator[ReprPlan]):
|
|
|
66
67
|
fn=fnr,
|
|
67
68
|
))
|
|
68
69
|
|
|
70
|
+
drf: OpRef | None = None
|
|
71
|
+
if ctx.cs.default_repr_fn is not None:
|
|
72
|
+
drf = OpRef(f'repr.default_fn')
|
|
73
|
+
orm[drf] = ctx.cs.default_repr_fn
|
|
74
|
+
|
|
69
75
|
return PlanResult(
|
|
70
76
|
ReprPlan(
|
|
71
77
|
fields=tuple(rfs),
|
|
72
78
|
id=ctx.cs.repr_id,
|
|
73
79
|
terse=ctx.cs.terse_repr,
|
|
80
|
+
default_fn=drf,
|
|
74
81
|
),
|
|
75
82
|
orm,
|
|
76
83
|
)
|
|
@@ -85,10 +92,16 @@ class ReprGenerator(Generator[ReprPlan]):
|
|
|
85
92
|
if not (pl.terse and not f.kw_only):
|
|
86
93
|
pfx = f'{f.name}='
|
|
87
94
|
|
|
95
|
+
fn: OpRef[ReprFn] | None = None
|
|
88
96
|
if f.fn is not None:
|
|
89
|
-
|
|
97
|
+
fn = f.fn
|
|
98
|
+
elif pl.default_fn is not None:
|
|
99
|
+
fn = pl.default_fn
|
|
100
|
+
|
|
101
|
+
if fn is not None:
|
|
102
|
+
ors.add(fn)
|
|
90
103
|
part_lines.extend([
|
|
91
|
-
f' if (s := {
|
|
104
|
+
f' if (s := {fn.ident()}(self.{f.name})) is not None:',
|
|
92
105
|
f' parts.append(f"{pfx}{{s}}")',
|
|
93
106
|
])
|
|
94
107
|
else:
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- better support anonymous / weakref'd / unlaoded modules / etc.
|
|
4
|
+
- anonymous=False on class spec?
|
|
5
|
+
"""
|
|
1
6
|
import dataclasses as dc
|
|
7
|
+
import threading
|
|
2
8
|
import typing as ta
|
|
3
9
|
|
|
10
|
+
from ... import check
|
|
11
|
+
|
|
4
12
|
|
|
5
13
|
##
|
|
6
14
|
|
|
@@ -19,51 +27,104 @@ DEFAULT_PACKAGE_CONFIG = PackageConfig()
|
|
|
19
27
|
##
|
|
20
28
|
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
@dc.dataclass(frozen=True)
|
|
31
|
+
class NamedPackageConfig:
|
|
32
|
+
pkg: str | None
|
|
33
|
+
cfg: PackageConfig
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
DEFAULT_NAMED_PACKAGE_CONFIG = NamedPackageConfig(None, DEFAULT_PACKAGE_CONFIG)
|
|
28
37
|
|
|
29
38
|
|
|
30
39
|
##
|
|
31
40
|
|
|
32
41
|
|
|
42
|
+
@ta.final
|
|
33
43
|
class PackageConfigCache:
|
|
34
44
|
def __init__(self) -> None:
|
|
35
45
|
super().__init__()
|
|
36
46
|
|
|
37
|
-
self.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
47
|
+
self._lock = threading.Lock()
|
|
48
|
+
self._root = PackageConfigCache._Node('', None)
|
|
49
|
+
self._nodes: dict[str, PackageConfigCache._Node] = {}
|
|
50
|
+
|
|
51
|
+
@ta.final
|
|
52
|
+
class _Node:
|
|
53
|
+
def __init__(self, pkg: str, n_cfg: NamedPackageConfig | None) -> None:
|
|
54
|
+
self.pkg = pkg
|
|
55
|
+
self.n_cfg = n_cfg
|
|
56
|
+
|
|
57
|
+
self.children: dict[str, PackageConfigCache._Node] = {}
|
|
58
|
+
|
|
59
|
+
def __repr__(self) -> str:
|
|
60
|
+
return f'{self.__class__.__name__}(pkg={self.pkg!r}, n_cfg={self.n_cfg!r})'
|
|
61
|
+
|
|
62
|
+
def _navigate(self, *parts: str) -> _Node:
|
|
63
|
+
node = self._root
|
|
64
|
+
for i, p in enumerate(parts):
|
|
65
|
+
if (child := node.children.get(p)) is None:
|
|
66
|
+
child_pkg = '.'.join(parts[:i + 1])
|
|
67
|
+
check.not_in(child_pkg, self._nodes)
|
|
68
|
+
child = node.children[p] = self._nodes[child_pkg] = PackageConfigCache._Node(child_pkg, node.n_cfg)
|
|
69
|
+
node = child
|
|
70
|
+
return node
|
|
71
|
+
|
|
72
|
+
def put(self, pkg: str, cfg: PackageConfig) -> None:
|
|
73
|
+
n_cfg = NamedPackageConfig(pkg, cfg)
|
|
74
|
+
check.non_empty_str(pkg)
|
|
75
|
+
with self._lock:
|
|
76
|
+
check.not_in(pkg, self._nodes)
|
|
77
|
+
parts = pkg.split('.')
|
|
78
|
+
parent = self._navigate(*parts[:-1])
|
|
79
|
+
check.not_in(parts[-1], parent.children)
|
|
80
|
+
parent.children[parts[-1]] = self._nodes[pkg] = PackageConfigCache._Node(pkg, n_cfg)
|
|
81
|
+
|
|
82
|
+
def get(self, pkg: str) -> NamedPackageConfig | None:
|
|
83
|
+
if not pkg:
|
|
84
|
+
return None
|
|
85
|
+
|
|
86
|
+
try:
|
|
87
|
+
node = self._nodes[pkg]
|
|
88
|
+
except KeyError:
|
|
89
|
+
pass
|
|
90
|
+
else:
|
|
91
|
+
return node.n_cfg
|
|
92
|
+
|
|
93
|
+
# Flimsy - if no config anywhere for root package then don't cache. Want to support unlimited anonymous modules
|
|
94
|
+
# which may be unloaded without polluting cache forever.
|
|
95
|
+
parts = pkg.split('.')
|
|
96
|
+
if parts[0] not in self._root.children:
|
|
97
|
+
return None
|
|
98
|
+
|
|
99
|
+
with self._lock:
|
|
100
|
+
try:
|
|
101
|
+
node = self._nodes[pkg]
|
|
102
|
+
except KeyError:
|
|
103
|
+
pass
|
|
104
|
+
else:
|
|
105
|
+
return node.n_cfg
|
|
106
|
+
|
|
107
|
+
node = self._navigate(*pkg.split('.'))
|
|
108
|
+
return node.n_cfg
|
|
67
109
|
|
|
68
110
|
|
|
69
111
|
PACKAGE_CONFIG_CACHE = PackageConfigCache()
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
##
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def init_package(
|
|
118
|
+
init_globals: ta.MutableMapping[str, ta.Any],
|
|
119
|
+
*,
|
|
120
|
+
codegen: bool = False,
|
|
121
|
+
) -> None:
|
|
122
|
+
pkg = check.non_empty_str(init_globals['__package__'])
|
|
123
|
+
if init_globals['__name__'] not in (pkg, '__main__'):
|
|
124
|
+
raise NameError('Must call dataclasses.init_package from __init__')
|
|
125
|
+
|
|
126
|
+
pkg_cfg = PackageConfig(
|
|
127
|
+
codegen=codegen,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
PACKAGE_CONFIG_CACHE.put(pkg, pkg_cfg)
|
|
@@ -64,7 +64,6 @@ class OpCompiler:
|
|
|
64
64
|
f'import {i}'
|
|
65
65
|
for i in FN_GLOBAL_IMPORTS
|
|
66
66
|
],
|
|
67
|
-
'\n',
|
|
68
67
|
]
|
|
69
68
|
|
|
70
69
|
def globals_ns(self) -> ta.Mapping[str, ta.Any]:
|
|
@@ -84,11 +83,14 @@ class OpCompiler:
|
|
|
84
83
|
def style(self) -> Style:
|
|
85
84
|
return self._style
|
|
86
85
|
|
|
87
|
-
@dc.dataclass(frozen=True)
|
|
86
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
|
88
87
|
class CompileResult:
|
|
89
88
|
fn_name: str
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
fn_params: ta.Sequence[str]
|
|
90
|
+
|
|
91
|
+
hdr_lines: ta.Sequence[str]
|
|
92
|
+
fn_lines: ta.Sequence[str]
|
|
93
|
+
|
|
92
94
|
refs: frozenset[Ref]
|
|
93
95
|
|
|
94
96
|
@dc.dataclass(frozen=True)
|
|
@@ -137,7 +139,10 @@ class OpCompiler:
|
|
|
137
139
|
) -> CompileResult:
|
|
138
140
|
body_lines: list[str] = []
|
|
139
141
|
|
|
140
|
-
for op in ops:
|
|
142
|
+
for i, op in enumerate(ops):
|
|
143
|
+
if i:
|
|
144
|
+
body_lines.append('')
|
|
145
|
+
|
|
141
146
|
if isinstance(op, SetAttrOp):
|
|
142
147
|
if isinstance(v := op.value, OpRef):
|
|
143
148
|
vs = v.ident()
|
|
@@ -202,8 +207,6 @@ class OpCompiler:
|
|
|
202
207
|
else:
|
|
203
208
|
raise TypeError(op)
|
|
204
209
|
|
|
205
|
-
body_lines.append('')
|
|
206
|
-
|
|
207
210
|
#
|
|
208
211
|
|
|
209
212
|
refs = frozenset.union(*[get_op_refs(o) for o in ops])
|
|
@@ -226,14 +229,12 @@ class OpCompiler:
|
|
|
226
229
|
src=f'{k.ident}={v.src}' if not v.src.startswith('.') else k.ident,
|
|
227
230
|
noqa=k.ident != k.ident.lower() or not v.src.startswith('.'),
|
|
228
231
|
)
|
|
229
|
-
for k, v in FN_GLOBALS.items()
|
|
232
|
+
for k, v in sorted(FN_GLOBALS.items(), key=lambda t: t[0])
|
|
230
233
|
])
|
|
231
234
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
lines.extend(self._style.header_lines())
|
|
235
|
+
#
|
|
235
236
|
|
|
236
|
-
|
|
237
|
+
fn_lines = [
|
|
237
238
|
f'def {fn_name}(',
|
|
238
239
|
f' *,',
|
|
239
240
|
*[
|
|
@@ -245,15 +246,16 @@ class OpCompiler:
|
|
|
245
246
|
f' {l}'
|
|
246
247
|
for l in body_lines
|
|
247
248
|
],
|
|
248
|
-
]
|
|
249
|
+
]
|
|
249
250
|
|
|
250
251
|
#
|
|
251
252
|
|
|
252
|
-
src = '\n'.join(lines)
|
|
253
|
-
|
|
254
253
|
return self.CompileResult(
|
|
255
|
-
fn_name,
|
|
256
|
-
[p.name for p in params],
|
|
257
|
-
|
|
258
|
-
|
|
254
|
+
fn_name=fn_name,
|
|
255
|
+
fn_params=[p.name for p in params],
|
|
256
|
+
|
|
257
|
+
hdr_lines=self._style.header_lines(),
|
|
258
|
+
fn_lines=fn_lines,
|
|
259
|
+
|
|
260
|
+
refs=refs,
|
|
259
261
|
)
|