omxtra 0.0.0.dev526__tar.gz → 0.0.0.dev527__tar.gz
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.
- {omxtra-0.0.0.dev526/omxtra.egg-info → omxtra-0.0.0.dev527}/PKG-INFO +2 -2
- omxtra-0.0.0.dev527/omxtra/io/pipelines/bytes/buffering.py +19 -0
- {omxtra-0.0.0.dev526/omxtra/io/pipelines/handlers → omxtra-0.0.0.dev527/omxtra/io/pipelines/bytes}/decoders.py +1 -1
- omxtra-0.0.0.dev527/omxtra/io/pipelines/bytes/queues.py +56 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/core.py +0 -38
- {omxtra-0.0.0.dev526/omxtra/io/pipelines → omxtra-0.0.0.dev527/omxtra/io/pipelines/drivers}/asyncio.py +2 -2
- {omxtra-0.0.0.dev526/omxtra/io/pipelines → omxtra-0.0.0.dev527/omxtra/io/pipelines/flow}/bytes.py +1 -14
- {omxtra-0.0.0.dev526/omxtra/io/pipelines → omxtra-0.0.0.dev527/omxtra/io/pipelines/flow}/flow.py +6 -6
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/handlers/flatmap.py +1 -1
- omxtra-0.0.0.dev527/omxtra/io/pipelines/handlers/fns.py +120 -0
- omxtra-0.0.0.dev527/omxtra/io/pipelines/handlers/queues.py +99 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/client/responses.py +1 -1
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/server/requests.py +1 -1
- omxtra-0.0.0.dev527/omxtra/text/__init__.py +0 -0
- omxtra-0.0.0.dev527/omxtra/text/abnf/docs/__init__.py +0 -0
- omxtra-0.0.0.dev527/omxtra/text/antlr/cli/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527/omxtra.egg-info}/PKG-INFO +2 -2
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra.egg-info/SOURCES.txt +11 -4
- omxtra-0.0.0.dev527/omxtra.egg-info/requires.txt +1 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/pyproject.toml +2 -2
- omxtra-0.0.0.dev526/omxtra.egg-info/requires.txt +0 -1
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/LICENSE +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/MANIFEST.in +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/README.md +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/.omlish-manifests.json +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/README.md +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/__about__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/all.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/LICENSE +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/all.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/api.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/core.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/events.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/files.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/runner.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bluelet/sockets.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/bridge.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/asyncs/flavors.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/concurrent/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/concurrent/threadlets.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/defs.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/dynamic.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/LICENSE +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/ast.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/errors.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/parsing.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/scanning.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/goyaml/tokens.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/Json.g4 +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/_antlr/JsonLexer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/_antlr/JsonListener.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/_antlr/JsonParser.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/_antlr/JsonVisitor.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json/_antlr/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/Json5.g4 +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/_antlr/Json5Lexer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/_antlr/Json5Listener.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/_antlr/Json5Parser.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/_antlr/Json5Visitor.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/_antlr/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/formats/json5/parsing.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/__init__.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/io/pipelines/handlers → omxtra-0.0.0.dev527/omxtra/io/pipelines/bytes}/__init__.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/io/pipelines/http → omxtra-0.0.0.dev527/omxtra/io/pipelines/drivers}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/errors.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/io/pipelines/http/client → omxtra-0.0.0.dev527/omxtra/io/pipelines/flow}/__init__.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/io/pipelines/http/server → omxtra-0.0.0.dev527/omxtra/io/pipelines/handlers}/__init__.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/specs → omxtra-0.0.0.dev527/omxtra/io/pipelines/http}/__init__.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/specs/proto → omxtra-0.0.0.dev527/omxtra/io/pipelines/http/client}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/client/requests.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/client/responses2.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/client/responses3.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/decoders.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/requests.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/responses.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/specs/proto/_antlr → omxtra-0.0.0.dev527/omxtra/io/pipelines/http/server}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/server/responses.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/pipelines/http/sse.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/io/trampoline.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/sql → omxtra-0.0.0.dev527/omxtra/specs}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/Protobuf3.g4 +0 -0
- {omxtra-0.0.0.dev526/omxtra/sql/parsing → omxtra-0.0.0.dev527/omxtra/specs/proto}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/_antlr/Protobuf3Lexer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/_antlr/Protobuf3Listener.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/_antlr/Protobuf3Parser.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/_antlr/Protobuf3Visitor.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/sql/parsing → omxtra-0.0.0.dev527/omxtra/specs/proto}/_antlr/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/nodes.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/specs/proto/parsing.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/text → omxtra-0.0.0.dev527/omxtra/sql}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/alchemy/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/alchemy/asyncs.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/parsing/Minisql.g4 +0 -0
- {omxtra-0.0.0.dev526/omxtra/text/abnf/docs → omxtra-0.0.0.dev527/omxtra/sql/parsing}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/parsing/_antlr/MinisqlLexer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/parsing/_antlr/MinisqlListener.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/parsing/_antlr/MinisqlParser.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/parsing/_antlr/MinisqlVisitor.py +0 -0
- {omxtra-0.0.0.dev526/omxtra/text/antlr/cli → omxtra-0.0.0.dev527/omxtra/sql/parsing/_antlr}/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/sql/parsing/parsing.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/LICENSE +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/_dataclasses.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/base.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/core.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/docs/rfc5234.txt +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/docs/rfc7405.txt +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/errors.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/grammars.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/internal.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/matches.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/meta.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/ops.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/opto.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/parsing.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/utils.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/abnf/visitors.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/BufferedTokenStream.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/CommonTokenFactory.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/CommonTokenStream.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/FileStream.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/InputStream.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/IntervalSet.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/LICENSE.txt +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/LL1Analyzer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/Lexer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/ListTokenSource.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/Parser.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/ParserInterpreter.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/ParserRuleContext.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/PredictionContext.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/Recognizer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/RuleContext.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/StdinStream.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/Token.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/TokenStreamRewriter.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/Utils.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/_all.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/_pygrun.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATN.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNConfig.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNConfigSet.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNDeserializationOptions.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNDeserializer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNSimulator.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNState.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ATNType.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/LexerATNSimulator.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/LexerAction.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/LexerActionExecutor.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/ParserATNSimulator.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/PredictionMode.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/SemanticContext.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/Transition.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/atn/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/dfa/DFA.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/dfa/DFASerializer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/dfa/DFAState.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/dfa/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/error/DiagnosticErrorListener.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/error/ErrorListener.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/error/ErrorStrategy.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/error/Errors.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/error/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/Chunk.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/ParseTreeMatch.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/ParseTreePattern.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/ParseTreePatternMatcher.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/RuleTagToken.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/TokenTagToken.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/Tree.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/Trees.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/tree/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/xpath/XPath.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/xpath/XPathLexer.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/_runtime/xpath/__init__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/cli/__main__.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/cli/cli.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/cli/consts.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/cli/gen.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/delimit.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/dot.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/errors.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/input.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/parsing.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/runtime.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra/text/antlr/utils.py +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra.egg-info/dependency_links.txt +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra.egg-info/entry_points.txt +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/omxtra.egg-info/top_level.txt +0 -0
- {omxtra-0.0.0.dev526 → omxtra-0.0.0.dev527}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omxtra
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev527
|
|
4
4
|
Summary: omxtra
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omlish==0.0.0.dev527
|
|
18
18
|
Dynamic: license-file
|
|
19
19
|
|
|
20
20
|
# Overview
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ruff: noqa: UP045
|
|
2
|
+
# @omlish-lite
|
|
3
|
+
import abc
|
|
4
|
+
import typing as ta
|
|
5
|
+
|
|
6
|
+
from omlish.lite.abstract import Abstract
|
|
7
|
+
|
|
8
|
+
from ..core import ChannelPipelineHandler
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
##
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InboundBytesBufferingChannelPipelineHandler(ChannelPipelineHandler, Abstract):
|
|
15
|
+
@abc.abstractmethod
|
|
16
|
+
def inbound_buffered_bytes(self) -> ta.Optional[int]:
|
|
17
|
+
"""Returning `None` denotes currently unknown/unanswerable."""
|
|
18
|
+
|
|
19
|
+
raise NotImplementedError
|
|
@@ -7,11 +7,11 @@ from omlish.io.streams.scanning import ScanningByteStreamBuffer
|
|
|
7
7
|
from omlish.io.streams.segmented import SegmentedByteStreamBuffer
|
|
8
8
|
from omlish.io.streams.utils import ByteStreamBuffers
|
|
9
9
|
|
|
10
|
-
from ..bytes import InboundBytesBufferingChannelPipelineHandler
|
|
11
10
|
from ..core import ChannelPipelineHandler
|
|
12
11
|
from ..core import ChannelPipelineHandlerContext
|
|
13
12
|
from ..core import ChannelPipelineMessages
|
|
14
13
|
from ..errors import IncompleteDecodingChannelPipelineError
|
|
14
|
+
from .buffering import InboundBytesBufferingChannelPipelineHandler
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
##
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# ruff: noqa: FURB188 UP045
|
|
2
|
+
# @omlish-lite
|
|
3
|
+
import typing as ta
|
|
4
|
+
|
|
5
|
+
from omlish.io.streams.utils import ByteStreamBuffers
|
|
6
|
+
|
|
7
|
+
from ..handlers.fns import ChannelPipelineHandlerFn
|
|
8
|
+
from ..handlers.fns import ChannelPipelineHandlerFns
|
|
9
|
+
from ..handlers.queues import InboundQueueChannelPipelineHandler
|
|
10
|
+
from .buffering import InboundBytesBufferingChannelPipelineHandler
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class InboundBytesBufferingQueueChannelPipelineHandler(
|
|
17
|
+
InboundBytesBufferingChannelPipelineHandler,
|
|
18
|
+
InboundQueueChannelPipelineHandler,
|
|
19
|
+
):
|
|
20
|
+
def __init__(
|
|
21
|
+
self,
|
|
22
|
+
*,
|
|
23
|
+
filter: ta.Union[ChannelPipelineHandlerFn[ta.Any, bool], ta.Literal[True], None] = None, # noqa
|
|
24
|
+
passthrough: bool = False,
|
|
25
|
+
) -> None:
|
|
26
|
+
if filter is True:
|
|
27
|
+
filter = ChannelPipelineHandlerFns.no_context(ByteStreamBuffers.can_bytes) # noqa
|
|
28
|
+
|
|
29
|
+
super().__init__(
|
|
30
|
+
filter=filter, # noqa
|
|
31
|
+
passthrough=passthrough,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
_buffered_bytes: int = 0
|
|
35
|
+
|
|
36
|
+
# @ta.override
|
|
37
|
+
def inbound_buffered_bytes(self) -> ta.Optional[int]:
|
|
38
|
+
return self._buffered_bytes
|
|
39
|
+
|
|
40
|
+
# @ta.override
|
|
41
|
+
def _append(self, msg: ta.Any) -> None:
|
|
42
|
+
bl = ByteStreamBuffers.bytes_len(msg, True)
|
|
43
|
+
|
|
44
|
+
super()._append((msg, bl))
|
|
45
|
+
|
|
46
|
+
if bl is not None:
|
|
47
|
+
self._buffered_bytes += bl
|
|
48
|
+
|
|
49
|
+
# @ta.override
|
|
50
|
+
def _popleft(self) -> ta.Any:
|
|
51
|
+
msg, bl = self._q.popleft()
|
|
52
|
+
|
|
53
|
+
if bl is not None:
|
|
54
|
+
self._buffered_bytes -= bl
|
|
55
|
+
|
|
56
|
+
return msg
|
|
@@ -16,14 +16,11 @@ from .errors import MessageReachedTerminalChannelPipelineError
|
|
|
16
16
|
from .errors import SawEofChannelPipelineError
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
F = ta.TypeVar('F')
|
|
20
19
|
T = ta.TypeVar('T')
|
|
21
20
|
|
|
22
21
|
ChannelPipelineHandlerT = ta.TypeVar('ChannelPipelineHandlerT', bound='ChannelPipelineHandler')
|
|
23
22
|
ShareableChannelPipelineHandlerT = ta.TypeVar('ShareableChannelPipelineHandlerT', bound='ShareableChannelPipelineHandler') # noqa
|
|
24
23
|
|
|
25
|
-
ChannelPipelineHandlerFn = ta.Callable[['ChannelPipelineHandlerContext', F], T] # ta.TypeAlias
|
|
26
|
-
|
|
27
24
|
|
|
28
25
|
##
|
|
29
26
|
|
|
@@ -80,41 +77,6 @@ class ChannelPipelineEvents(NamespaceClass):
|
|
|
80
77
|
##
|
|
81
78
|
|
|
82
79
|
|
|
83
|
-
class ChannelPipelineHandlerFns(NamespaceClass):
|
|
84
|
-
@dc.dataclass(frozen=True)
|
|
85
|
-
class NoContext(ta.Generic[F, T]):
|
|
86
|
-
fn: ta.Callable[[F], T]
|
|
87
|
-
|
|
88
|
-
def __repr__(self) -> str:
|
|
89
|
-
return f'{type(self).__name__}({self.fn!r})'
|
|
90
|
-
|
|
91
|
-
def __call__(self, ctx: 'ChannelPipelineHandlerContext', obj: F) -> T:
|
|
92
|
-
return self.fn(obj)
|
|
93
|
-
|
|
94
|
-
@classmethod
|
|
95
|
-
def no_context(cls, fn: ta.Callable[[F], T]) -> ChannelPipelineHandlerFn[F, T]:
|
|
96
|
-
return cls.NoContext(fn=fn)
|
|
97
|
-
|
|
98
|
-
#
|
|
99
|
-
|
|
100
|
-
@dc.dataclass(frozen=True)
|
|
101
|
-
class Isinstance:
|
|
102
|
-
ty: ta.Union[type, ta.Tuple[type, ...]]
|
|
103
|
-
|
|
104
|
-
def __repr__(self) -> str:
|
|
105
|
-
return f'{type(self).__name__}({self.ty!r})'
|
|
106
|
-
|
|
107
|
-
def __call__(self, ctx: 'ChannelPipelineHandlerContext', msg: ta.Any) -> bool:
|
|
108
|
-
return isinstance(msg, self.ty)
|
|
109
|
-
|
|
110
|
-
@classmethod
|
|
111
|
-
def isinstance(cls, ty: ta.Union[type, ta.Tuple[type, ...]]) -> ChannelPipelineHandlerFn[ta.Any, bool]:
|
|
112
|
-
return cls.Isinstance(ty=ty)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
|
|
118
80
|
@ta.final
|
|
119
81
|
class ChannelPipelineHandlerRef(ta.Generic[T]):
|
|
120
82
|
"""
|
|
@@ -6,8 +6,8 @@ import typing as ta
|
|
|
6
6
|
from omlish.io.streams.utils import ByteStreamBuffers
|
|
7
7
|
from omlish.lite.check import check
|
|
8
8
|
|
|
9
|
-
from
|
|
10
|
-
from .
|
|
9
|
+
from ..core import PipelineChannel
|
|
10
|
+
from ..flow.bytes import BytesChannelPipelineFlowControl
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
##
|
{omxtra-0.0.0.dev526/omxtra/io/pipelines → omxtra-0.0.0.dev527/omxtra/io/pipelines/flow}/bytes.py
RENAMED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# ruff: noqa: UP045
|
|
2
2
|
# @omlish-lite
|
|
3
|
-
import abc
|
|
4
3
|
import typing as ta
|
|
5
4
|
|
|
6
5
|
from omlish.io.streams.utils import ByteStreamBuffers
|
|
7
6
|
from omlish.lite.abstract import Abstract
|
|
8
7
|
|
|
9
|
-
from .core import ChannelPipelineHandler
|
|
10
8
|
from .flow import ChannelPipelineFlowControl
|
|
11
9
|
from .flow import ChannelPipelineFlowControlAdapter
|
|
12
10
|
from .flow import FlowControlChannelPipelineHandler
|
|
@@ -15,20 +13,9 @@ from .flow import FlowControlChannelPipelineHandler
|
|
|
15
13
|
##
|
|
16
14
|
|
|
17
15
|
|
|
18
|
-
class InboundBytesBufferingChannelPipelineHandler(ChannelPipelineHandler, Abstract):
|
|
19
|
-
@abc.abstractmethod
|
|
20
|
-
def inbound_buffered_bytes(self) -> ta.Optional[int]:
|
|
21
|
-
"""Returning `None` denotes currently unknown/unanswerable."""
|
|
22
|
-
|
|
23
|
-
raise NotImplementedError
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
##
|
|
27
|
-
|
|
28
|
-
|
|
29
16
|
class BytesChannelPipelineFlowControlAdapter(ChannelPipelineFlowControlAdapter):
|
|
30
17
|
def get_cost(self, msg: ta.Any) -> ta.Optional[int]:
|
|
31
|
-
return ByteStreamBuffers.bytes_len(msg)
|
|
18
|
+
return ByteStreamBuffers.bytes_len(msg, True)
|
|
32
19
|
|
|
33
20
|
|
|
34
21
|
##
|
{omxtra-0.0.0.dev526/omxtra/io/pipelines → omxtra-0.0.0.dev527/omxtra/io/pipelines/flow}/flow.py
RENAMED
|
@@ -9,12 +9,12 @@ from omlish.lite.abstract import Abstract
|
|
|
9
9
|
from omlish.lite.check import check
|
|
10
10
|
from omlish.lite.namespaces import NamespaceClass
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
12
|
+
from ..core import ChannelPipelineEvents
|
|
13
|
+
from ..core import ChannelPipelineHandler
|
|
14
|
+
from ..core import ChannelPipelineHandlerContext
|
|
15
|
+
from ..core import ChannelPipelineMessages
|
|
16
|
+
from ..core import PipelineChannel
|
|
17
|
+
from ..errors import FlowControlValidationChannelPipelineError
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
##
|
|
@@ -11,7 +11,7 @@ from omlish.lite.namespaces import NamespaceClass
|
|
|
11
11
|
from ..core import ChannelPipelineDirectionOrDuplex
|
|
12
12
|
from ..core import ChannelPipelineHandler
|
|
13
13
|
from ..core import ChannelPipelineHandlerContext
|
|
14
|
-
from
|
|
14
|
+
from .fns import ChannelPipelineHandlerFn
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
##
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# ruff: noqa: UP006 UP007 UP045
|
|
2
|
+
# @omlish-lite
|
|
3
|
+
import dataclasses as dc
|
|
4
|
+
import typing as ta
|
|
5
|
+
|
|
6
|
+
from omlish.lite.abstract import Abstract
|
|
7
|
+
from omlish.lite.namespaces import NamespaceClass
|
|
8
|
+
|
|
9
|
+
from ..core import ChannelPipelineHandler
|
|
10
|
+
from ..core import ChannelPipelineHandlerContext
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
F = ta.TypeVar('F')
|
|
14
|
+
T = ta.TypeVar('T')
|
|
15
|
+
|
|
16
|
+
ChannelPipelineHandlerFn = ta.Callable[['ChannelPipelineHandlerContext', F], T] # ta.TypeAlias
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ChannelPipelineHandlerFns(NamespaceClass):
|
|
23
|
+
@dc.dataclass(frozen=True)
|
|
24
|
+
class NoContext(ta.Generic[F, T]):
|
|
25
|
+
fn: ta.Callable[[F], T]
|
|
26
|
+
|
|
27
|
+
def __repr__(self) -> str:
|
|
28
|
+
return f'{type(self).__name__}({self.fn!r})'
|
|
29
|
+
|
|
30
|
+
def __call__(self, ctx: ChannelPipelineHandlerContext, obj: F) -> T:
|
|
31
|
+
return self.fn(obj)
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def no_context(cls, fn: ta.Callable[[F], T]) -> ChannelPipelineHandlerFn[F, T]:
|
|
35
|
+
return cls.NoContext(fn=fn)
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
|
|
39
|
+
@dc.dataclass(frozen=True)
|
|
40
|
+
class Isinstance:
|
|
41
|
+
ty: ta.Union[type, ta.Tuple[type, ...]]
|
|
42
|
+
|
|
43
|
+
def __repr__(self) -> str:
|
|
44
|
+
return f'{type(self).__name__}({self.ty!r})'
|
|
45
|
+
|
|
46
|
+
def __call__(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> bool:
|
|
47
|
+
return isinstance(msg, self.ty)
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def isinstance(cls, ty: ta.Union[type, ta.Tuple[type, ...]]) -> ChannelPipelineHandlerFn[ta.Any, bool]:
|
|
51
|
+
return cls.Isinstance(ty=ty)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
##
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class FnChannelPipelineHandler(ChannelPipelineHandler, Abstract):
|
|
58
|
+
@classmethod
|
|
59
|
+
def of(
|
|
60
|
+
cls,
|
|
61
|
+
*,
|
|
62
|
+
inbound: ta.Optional[ChannelPipelineHandlerFn[ta.Any, None]] = None,
|
|
63
|
+
outbound: ta.Optional[ChannelPipelineHandlerFn[ta.Any, None]] = None,
|
|
64
|
+
) -> ChannelPipelineHandler:
|
|
65
|
+
if inbound is not None and outbound is not None:
|
|
66
|
+
return DuplexFnChannelPipelineHandler(inbound=inbound, outbound=outbound)
|
|
67
|
+
elif inbound is not None:
|
|
68
|
+
return InboundFnChannelPipelineHandler(inbound)
|
|
69
|
+
elif outbound is not None:
|
|
70
|
+
return OutboundFnChannelPipelineHandler(outbound)
|
|
71
|
+
else:
|
|
72
|
+
raise ValueError('At least one of inbound or outbound must be specified')
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class InboundFnChannelPipelineHandler(FnChannelPipelineHandler):
|
|
76
|
+
def __init__(self, inbound: ChannelPipelineHandlerFn[ta.Any, None]) -> None:
|
|
77
|
+
super().__init__()
|
|
78
|
+
|
|
79
|
+
self._inbound = inbound
|
|
80
|
+
|
|
81
|
+
def __repr__(self) -> str:
|
|
82
|
+
return f'{type(self).__name__}@{id(self):x}({self._inbound!r})'
|
|
83
|
+
|
|
84
|
+
def inbound(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> None:
|
|
85
|
+
self._inbound(ctx, msg)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class OutboundFnChannelPipelineHandler(FnChannelPipelineHandler):
|
|
89
|
+
def __init__(self, outbound: ChannelPipelineHandlerFn[ta.Any, None]) -> None:
|
|
90
|
+
super().__init__()
|
|
91
|
+
|
|
92
|
+
self._outbound = outbound
|
|
93
|
+
|
|
94
|
+
def __repr__(self) -> str:
|
|
95
|
+
return f'{type(self).__name__}@{id(self):x}({self._outbound!r})'
|
|
96
|
+
|
|
97
|
+
def outbound(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> None:
|
|
98
|
+
self._outbound(ctx, msg)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class DuplexFnChannelPipelineHandler(FnChannelPipelineHandler):
|
|
102
|
+
def __init__(
|
|
103
|
+
self,
|
|
104
|
+
*,
|
|
105
|
+
inbound: ChannelPipelineHandlerFn[ta.Any, None],
|
|
106
|
+
outbound: ChannelPipelineHandlerFn[ta.Any, None],
|
|
107
|
+
) -> None:
|
|
108
|
+
super().__init__()
|
|
109
|
+
|
|
110
|
+
self._inbound = inbound
|
|
111
|
+
self._outbound = outbound
|
|
112
|
+
|
|
113
|
+
def __repr__(self) -> str:
|
|
114
|
+
return f'{type(self).__name__}@{id(self):x}(inbound={self._inbound!r}, outbound={self._outbound!r})'
|
|
115
|
+
|
|
116
|
+
def inbound(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> None:
|
|
117
|
+
self._inbound(ctx, msg)
|
|
118
|
+
|
|
119
|
+
def outbound(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> None:
|
|
120
|
+
self._outbound(ctx, msg)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# ruff: noqa: UP006 UP037 UP045
|
|
2
|
+
# @omlish-lite
|
|
3
|
+
"""
|
|
4
|
+
TODO:
|
|
5
|
+
- max size, simple backpressure?
|
|
6
|
+
"""
|
|
7
|
+
import collections
|
|
8
|
+
import typing as ta
|
|
9
|
+
|
|
10
|
+
from omlish.lite.abstract import Abstract
|
|
11
|
+
|
|
12
|
+
from ..core import ChannelPipelineHandler
|
|
13
|
+
from ..core import ChannelPipelineHandlerContext
|
|
14
|
+
from .fns import ChannelPipelineHandlerFn
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class QueueChannelPipelineHandler(ChannelPipelineHandler, Abstract):
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
*,
|
|
24
|
+
filter: ta.Optional[ChannelPipelineHandlerFn[ta.Any, bool]] = None, # noqa
|
|
25
|
+
passthrough: bool = False,
|
|
26
|
+
) -> None:
|
|
27
|
+
super().__init__()
|
|
28
|
+
|
|
29
|
+
self._filter = filter
|
|
30
|
+
self._passthrough = passthrough
|
|
31
|
+
|
|
32
|
+
self._q: 'collections.deque[ta.Any]' = collections.deque()
|
|
33
|
+
|
|
34
|
+
def __repr__(self) -> str:
|
|
35
|
+
return ''.join([
|
|
36
|
+
f'{type(self).__name__}@{id(self):x}',
|
|
37
|
+
f'<len={len(self._q)}>',
|
|
38
|
+
'(',
|
|
39
|
+
', '.join([
|
|
40
|
+
*([f'filter={self._filter!r}'] if self._filter is not None else []),
|
|
41
|
+
*([f'passthrough={self._passthrough!r}'] if self._passthrough else []),
|
|
42
|
+
]),
|
|
43
|
+
')',
|
|
44
|
+
])
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
|
|
48
|
+
def _append(self, msg: ta.Any) -> None:
|
|
49
|
+
self._q.append(msg)
|
|
50
|
+
|
|
51
|
+
def _popleft(self) -> ta.Any:
|
|
52
|
+
return self._q.popleft()
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
|
|
56
|
+
def poll(self) -> ta.Optional[ta.Any]:
|
|
57
|
+
if not self._q:
|
|
58
|
+
return None
|
|
59
|
+
|
|
60
|
+
return self._popleft()
|
|
61
|
+
|
|
62
|
+
def drain(self) -> ta.List[ta.Any]:
|
|
63
|
+
out: ta.List[ta.Any] = []
|
|
64
|
+
|
|
65
|
+
while self._q:
|
|
66
|
+
out.append(self._popleft())
|
|
67
|
+
|
|
68
|
+
return out
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class InboundQueueChannelPipelineHandler(QueueChannelPipelineHandler):
|
|
72
|
+
def inbound(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> None:
|
|
73
|
+
if (self._filter is not None and not self._filter(ctx, msg)):
|
|
74
|
+
ctx.feed_in(msg)
|
|
75
|
+
return
|
|
76
|
+
|
|
77
|
+
self._append(msg)
|
|
78
|
+
|
|
79
|
+
if self._passthrough:
|
|
80
|
+
ctx.feed_in(msg)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class OutboundQueueChannelPipelineHandler(QueueChannelPipelineHandler):
|
|
84
|
+
def outbound(self, ctx: ChannelPipelineHandlerContext, msg: ta.Any) -> None:
|
|
85
|
+
if (self._filter is not None and not self._filter(ctx, msg)):
|
|
86
|
+
ctx.feed_out(msg)
|
|
87
|
+
return
|
|
88
|
+
|
|
89
|
+
self._append(msg)
|
|
90
|
+
|
|
91
|
+
if self._passthrough:
|
|
92
|
+
ctx.feed_out(msg)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class DuplexQueueChannelPipelineHandler(
|
|
96
|
+
InboundQueueChannelPipelineHandler,
|
|
97
|
+
OutboundQueueChannelPipelineHandler,
|
|
98
|
+
):
|
|
99
|
+
pass
|
|
@@ -9,7 +9,7 @@ from omlish.http.parsing import ParsedHttpMessage
|
|
|
9
9
|
from omlish.io.streams.utils import ByteStreamBuffers
|
|
10
10
|
from omlish.lite.check import check
|
|
11
11
|
|
|
12
|
-
from ...bytes import InboundBytesBufferingChannelPipelineHandler
|
|
12
|
+
from ...bytes.buffering import InboundBytesBufferingChannelPipelineHandler
|
|
13
13
|
from ...core import ChannelPipelineHandler
|
|
14
14
|
from ...core import ChannelPipelineHandlerContext
|
|
15
15
|
from ...core import ChannelPipelineMessages
|
|
@@ -10,7 +10,7 @@ from omlish.io.streams.segmented import SegmentedByteStreamBuffer
|
|
|
10
10
|
from omlish.io.streams.utils import ByteStreamBuffers
|
|
11
11
|
from omlish.lite.check import check
|
|
12
12
|
|
|
13
|
-
from ...bytes import InboundBytesBufferingChannelPipelineHandler
|
|
13
|
+
from ...bytes.buffering import InboundBytesBufferingChannelPipelineHandler
|
|
14
14
|
from ...core import ChannelPipelineHandlerContext
|
|
15
15
|
from ...core import ChannelPipelineMessages
|
|
16
16
|
from ..decoders import ChunkedPipelineHttpContentChunkDecoder
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omxtra
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev527
|
|
4
4
|
Summary: omxtra
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omlish==0.0.0.dev527
|
|
18
18
|
Dynamic: license-file
|
|
19
19
|
|
|
20
20
|
# Overview
|
|
@@ -55,14 +55,21 @@ omxtra/formats/json5/_antlr/__init__.py
|
|
|
55
55
|
omxtra/io/__init__.py
|
|
56
56
|
omxtra/io/trampoline.py
|
|
57
57
|
omxtra/io/pipelines/__init__.py
|
|
58
|
-
omxtra/io/pipelines/asyncio.py
|
|
59
|
-
omxtra/io/pipelines/bytes.py
|
|
60
58
|
omxtra/io/pipelines/core.py
|
|
61
59
|
omxtra/io/pipelines/errors.py
|
|
62
|
-
omxtra/io/pipelines/
|
|
60
|
+
omxtra/io/pipelines/bytes/__init__.py
|
|
61
|
+
omxtra/io/pipelines/bytes/buffering.py
|
|
62
|
+
omxtra/io/pipelines/bytes/decoders.py
|
|
63
|
+
omxtra/io/pipelines/bytes/queues.py
|
|
64
|
+
omxtra/io/pipelines/drivers/__init__.py
|
|
65
|
+
omxtra/io/pipelines/drivers/asyncio.py
|
|
66
|
+
omxtra/io/pipelines/flow/__init__.py
|
|
67
|
+
omxtra/io/pipelines/flow/bytes.py
|
|
68
|
+
omxtra/io/pipelines/flow/flow.py
|
|
63
69
|
omxtra/io/pipelines/handlers/__init__.py
|
|
64
|
-
omxtra/io/pipelines/handlers/decoders.py
|
|
65
70
|
omxtra/io/pipelines/handlers/flatmap.py
|
|
71
|
+
omxtra/io/pipelines/handlers/fns.py
|
|
72
|
+
omxtra/io/pipelines/handlers/queues.py
|
|
66
73
|
omxtra/io/pipelines/http/__init__.py
|
|
67
74
|
omxtra/io/pipelines/http/decoders.py
|
|
68
75
|
omxtra/io/pipelines/http/requests.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
omlish==0.0.0.dev527
|
|
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
|
|
|
13
13
|
license = 'BSD-3-Clause'
|
|
14
14
|
readme = 'README.md'
|
|
15
15
|
requires-python = '>=3.13'
|
|
16
|
-
version = '0.0.0.
|
|
16
|
+
version = '0.0.0.dev527'
|
|
17
17
|
classifiers = [
|
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
|
19
19
|
'Intended Audience :: Developers',
|
|
@@ -24,7 +24,7 @@ classifiers = [
|
|
|
24
24
|
]
|
|
25
25
|
description = 'omxtra'
|
|
26
26
|
dependencies = [
|
|
27
|
-
'omlish == 0.0.0.
|
|
27
|
+
'omlish == 0.0.0.dev527',
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
[project.optional-dependencies]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
omlish==0.0.0.dev526
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|