omextra 0.0.0.dev514__tar.gz → 0.0.0.dev515__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.
Files changed (182) hide show
  1. {omextra-0.0.0.dev514/omextra.egg-info → omextra-0.0.0.dev515}/PKG-INFO +2 -2
  2. omextra-0.0.0.dev515/omextra/asyncs/all.py +18 -0
  3. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bridge.py +1 -1
  4. omextra-0.0.0.dev515/omextra/asyncs/flavors.py +229 -0
  5. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/io/trampoline.py +1 -1
  6. omextra-0.0.0.dev515/omextra/sql/alchemy/__init__.py +9 -0
  7. omextra-0.0.0.dev515/omextra/sql/alchemy/asyncs.py +154 -0
  8. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515/omextra.egg-info}/PKG-INFO +2 -2
  9. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra.egg-info/SOURCES.txt +4 -12
  10. omextra-0.0.0.dev515/omextra.egg-info/requires.txt +1 -0
  11. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/pyproject.toml +2 -2
  12. omextra-0.0.0.dev514/omextra/io/buffers/DESIGN.md +0 -253
  13. omextra-0.0.0.dev514/omextra/io/buffers/adapters.py +0 -294
  14. omextra-0.0.0.dev514/omextra/io/buffers/all.py +0 -63
  15. omextra-0.0.0.dev514/omextra/io/buffers/errors.py +0 -54
  16. omextra-0.0.0.dev514/omextra/io/buffers/framing.py +0 -187
  17. omextra-0.0.0.dev514/omextra/io/buffers/linear.py +0 -202
  18. omextra-0.0.0.dev514/omextra/io/buffers/reading.py +0 -149
  19. omextra-0.0.0.dev514/omextra/io/buffers/scanning.py +0 -110
  20. omextra-0.0.0.dev514/omextra/io/buffers/segmented.py +0 -637
  21. omextra-0.0.0.dev514/omextra/io/buffers/types.py +0 -263
  22. omextra-0.0.0.dev514/omextra/io/buffers/utils.py +0 -76
  23. omextra-0.0.0.dev514/omextra/text/antlr/cli/__init__.py +0 -0
  24. omextra-0.0.0.dev514/omextra.egg-info/requires.txt +0 -1
  25. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/LICENSE +0 -0
  26. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/MANIFEST.in +0 -0
  27. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/README.md +0 -0
  28. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/.omlish-manifests.json +0 -0
  29. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/README.md +0 -0
  30. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/__about__.py +0 -0
  31. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/__init__.py +0 -0
  32. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/__init__.py +0 -0
  33. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/LICENSE +0 -0
  34. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/__init__.py +0 -0
  35. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/all.py +0 -0
  36. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/api.py +0 -0
  37. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/core.py +0 -0
  38. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/events.py +0 -0
  39. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/files.py +0 -0
  40. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/runner.py +0 -0
  41. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/asyncs/bluelet/sockets.py +0 -0
  42. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/defs.py +0 -0
  43. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/dynamic.py +0 -0
  44. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/__init__.py +0 -0
  45. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/LICENSE +0 -0
  46. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/__init__.py +0 -0
  47. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/ast.py +0 -0
  48. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/errors.py +0 -0
  49. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/parsing.py +0 -0
  50. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/scanning.py +0 -0
  51. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/goyaml/tokens.py +0 -0
  52. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/Json.g4 +0 -0
  53. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/__init__.py +0 -0
  54. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/_antlr/JsonLexer.py +0 -0
  55. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/_antlr/JsonListener.py +0 -0
  56. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/_antlr/JsonParser.py +0 -0
  57. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/_antlr/JsonVisitor.py +0 -0
  58. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json/_antlr/__init__.py +0 -0
  59. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/Json5.g4 +0 -0
  60. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/__init__.py +0 -0
  61. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/_antlr/Json5Lexer.py +0 -0
  62. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/_antlr/Json5Listener.py +0 -0
  63. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/_antlr/Json5Parser.py +0 -0
  64. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/_antlr/Json5Visitor.py +0 -0
  65. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/_antlr/__init__.py +0 -0
  66. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/formats/json5/parsing.py +0 -0
  67. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/io/__init__.py +0 -0
  68. {omextra-0.0.0.dev514/omextra/io/buffers → omextra-0.0.0.dev515/omextra/specs}/__init__.py +0 -0
  69. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/Protobuf3.g4 +0 -0
  70. {omextra-0.0.0.dev514/omextra/specs → omextra-0.0.0.dev515/omextra/specs/proto}/__init__.py +0 -0
  71. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/_antlr/Protobuf3Lexer.py +0 -0
  72. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/_antlr/Protobuf3Listener.py +0 -0
  73. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/_antlr/Protobuf3Parser.py +0 -0
  74. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/_antlr/Protobuf3Visitor.py +0 -0
  75. {omextra-0.0.0.dev514/omextra/specs/proto → omextra-0.0.0.dev515/omextra/specs/proto/_antlr}/__init__.py +0 -0
  76. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/nodes.py +0 -0
  77. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/specs/proto/parsing.py +0 -0
  78. {omextra-0.0.0.dev514/omextra/specs/proto/_antlr → omextra-0.0.0.dev515/omextra/sql}/__init__.py +0 -0
  79. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/sql/parsing/Minisql.g4 +0 -0
  80. {omextra-0.0.0.dev514/omextra/sql → omextra-0.0.0.dev515/omextra/sql/parsing}/__init__.py +0 -0
  81. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/sql/parsing/_antlr/MinisqlLexer.py +0 -0
  82. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/sql/parsing/_antlr/MinisqlListener.py +0 -0
  83. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/sql/parsing/_antlr/MinisqlParser.py +0 -0
  84. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/sql/parsing/_antlr/MinisqlVisitor.py +0 -0
  85. {omextra-0.0.0.dev514/omextra/sql/parsing → omextra-0.0.0.dev515/omextra/sql/parsing/_antlr}/__init__.py +0 -0
  86. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/sql/parsing/parsing.py +0 -0
  87. {omextra-0.0.0.dev514/omextra/sql/parsing/_antlr → omextra-0.0.0.dev515/omextra/text}/__init__.py +0 -0
  88. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/LICENSE +0 -0
  89. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/__init__.py +0 -0
  90. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/_dataclasses.py +0 -0
  91. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/base.py +0 -0
  92. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/core.py +0 -0
  93. {omextra-0.0.0.dev514/omextra/text → omextra-0.0.0.dev515/omextra/text/abnf/docs}/__init__.py +0 -0
  94. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/docs/rfc5234.txt +0 -0
  95. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/docs/rfc7405.txt +0 -0
  96. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/errors.py +0 -0
  97. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/grammars.py +0 -0
  98. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/internal.py +0 -0
  99. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/matches.py +0 -0
  100. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/meta.py +0 -0
  101. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/ops.py +0 -0
  102. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/opto.py +0 -0
  103. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/parsing.py +0 -0
  104. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/utils.py +0 -0
  105. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/abnf/visitors.py +0 -0
  106. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/__init__.py +0 -0
  107. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/BufferedTokenStream.py +0 -0
  108. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/CommonTokenFactory.py +0 -0
  109. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/CommonTokenStream.py +0 -0
  110. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/FileStream.py +0 -0
  111. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/InputStream.py +0 -0
  112. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/IntervalSet.py +0 -0
  113. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/LICENSE.txt +0 -0
  114. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/LL1Analyzer.py +0 -0
  115. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/Lexer.py +0 -0
  116. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/ListTokenSource.py +0 -0
  117. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/Parser.py +0 -0
  118. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/ParserInterpreter.py +0 -0
  119. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/ParserRuleContext.py +0 -0
  120. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/PredictionContext.py +0 -0
  121. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/Recognizer.py +0 -0
  122. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/RuleContext.py +0 -0
  123. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/StdinStream.py +0 -0
  124. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/Token.py +0 -0
  125. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/TokenStreamRewriter.py +0 -0
  126. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/Utils.py +0 -0
  127. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/__init__.py +0 -0
  128. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/_all.py +0 -0
  129. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/_pygrun.py +0 -0
  130. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATN.py +0 -0
  131. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNConfig.py +0 -0
  132. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNConfigSet.py +0 -0
  133. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNDeserializationOptions.py +0 -0
  134. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNDeserializer.py +0 -0
  135. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNSimulator.py +0 -0
  136. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNState.py +0 -0
  137. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ATNType.py +0 -0
  138. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/LexerATNSimulator.py +0 -0
  139. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/LexerAction.py +0 -0
  140. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/LexerActionExecutor.py +0 -0
  141. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/ParserATNSimulator.py +0 -0
  142. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/PredictionMode.py +0 -0
  143. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/SemanticContext.py +0 -0
  144. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/Transition.py +0 -0
  145. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/atn/__init__.py +0 -0
  146. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/dfa/DFA.py +0 -0
  147. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/dfa/DFASerializer.py +0 -0
  148. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/dfa/DFAState.py +0 -0
  149. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/dfa/__init__.py +0 -0
  150. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/error/DiagnosticErrorListener.py +0 -0
  151. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/error/ErrorListener.py +0 -0
  152. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/error/ErrorStrategy.py +0 -0
  153. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/error/Errors.py +0 -0
  154. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/error/__init__.py +0 -0
  155. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/Chunk.py +0 -0
  156. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/ParseTreeMatch.py +0 -0
  157. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/ParseTreePattern.py +0 -0
  158. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/ParseTreePatternMatcher.py +0 -0
  159. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/RuleTagToken.py +0 -0
  160. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/TokenTagToken.py +0 -0
  161. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/Tree.py +0 -0
  162. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/Trees.py +0 -0
  163. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/tree/__init__.py +0 -0
  164. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/xpath/XPath.py +0 -0
  165. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/xpath/XPathLexer.py +0 -0
  166. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/_runtime/xpath/__init__.py +0 -0
  167. {omextra-0.0.0.dev514/omextra/text/abnf/docs → omextra-0.0.0.dev515/omextra/text/antlr/cli}/__init__.py +0 -0
  168. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/cli/__main__.py +0 -0
  169. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/cli/cli.py +0 -0
  170. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/cli/consts.py +0 -0
  171. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/cli/gen.py +0 -0
  172. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/delimit.py +0 -0
  173. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/dot.py +0 -0
  174. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/errors.py +0 -0
  175. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/input.py +0 -0
  176. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/parsing.py +0 -0
  177. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/runtime.py +0 -0
  178. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra/text/antlr/utils.py +0 -0
  179. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra.egg-info/dependency_links.txt +0 -0
  180. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra.egg-info/entry_points.txt +0 -0
  181. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/omextra.egg-info/top_level.txt +0 -0
  182. {omextra-0.0.0.dev514 → omextra-0.0.0.dev515}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omextra
3
- Version: 0.0.0.dev514
3
+ Version: 0.0.0.dev515
4
4
  Summary: omextra
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.dev514
17
+ Requires-Dist: omlish==0.0.0.dev515
18
18
  Dynamic: license-file
19
19
 
20
20
  # Overview
@@ -0,0 +1,18 @@
1
+ from .flavors import ( # noqa
2
+ ContextManagerAdapter,
3
+ Flavor,
4
+ adapt,
5
+ adapt_context,
6
+ from_anyio,
7
+ from_anyio_context,
8
+ from_asyncio,
9
+ from_asyncio_context,
10
+ from_trio,
11
+ from_trio_context,
12
+ get_flavor,
13
+ mark_anyio,
14
+ mark_asyncio,
15
+ mark_flavor,
16
+ mark_trio,
17
+ with_adapter_loop,
18
+ )
@@ -41,7 +41,7 @@ import weakref
41
41
 
42
42
  from omlish import check
43
43
  from omlish import lang
44
- from omlish import sync
44
+ from omlish.sync import all as sync
45
45
  from omlish.concurrent import threadlets
46
46
 
47
47
 
@@ -0,0 +1,229 @@
1
+ """
2
+ Tools for working with the different async loop implementations - currently anyio, asyncio, trio.
3
+
4
+ TODO:
5
+ - mark whole class / module?
6
+ """
7
+ import abc
8
+ import dataclasses as dc
9
+ import enum
10
+ import functools
11
+ import typing as ta
12
+
13
+ from omlish import lang
14
+ from omlish.asyncs.trio_asyncio import check_trio_asyncio
15
+ from omlish.asyncs.trio_asyncio import with_trio_asyncio_loop
16
+
17
+
18
+ if ta.TYPE_CHECKING:
19
+ import sniffio
20
+ import trio_asyncio
21
+ else:
22
+ sniffio = lang.proxy_import('sniffio')
23
+ trio_asyncio = lang.proxy_import('trio_asyncio')
24
+
25
+
26
+ T = ta.TypeVar('T')
27
+
28
+
29
+ ##
30
+
31
+
32
+ _FLAVOR_ATTR = '__async_flavor__'
33
+
34
+
35
+ class _MISSING(lang.Marker):
36
+ pass
37
+
38
+
39
+ class Flavor(enum.Enum):
40
+ ASYNCIO = enum.auto()
41
+ TRIO = enum.auto()
42
+ ANYIO = enum.auto()
43
+
44
+
45
+ def mark_flavor(f: Flavor):
46
+ if not isinstance(f, Flavor):
47
+ raise TypeError(f)
48
+
49
+ def inner(fn):
50
+ setattr(fn, _FLAVOR_ATTR, f)
51
+ return fn
52
+
53
+ return inner
54
+
55
+
56
+ mark_asyncio = mark_flavor(Flavor.ASYNCIO)
57
+ mark_anyio = mark_flavor(Flavor.ANYIO)
58
+ mark_trio = mark_flavor(Flavor.TRIO)
59
+
60
+ PACKAGE_FLAVORS: ta.MutableMapping[str, Flavor] = {
61
+ 'anyio': Flavor.ANYIO,
62
+ 'asyncio': Flavor.ASYNCIO,
63
+ 'trio': Flavor.TRIO,
64
+
65
+ 'sqlalchemy.ext.asyncio': Flavor.ASYNCIO,
66
+ }
67
+
68
+ _MODULE_FLAVOR_CACHE: dict[str, Flavor | None] = {}
69
+
70
+
71
+ def _get_module_flavor(p: str) -> Flavor | None:
72
+ try:
73
+ return _MODULE_FLAVOR_CACHE[p]
74
+ except KeyError:
75
+ pass
76
+
77
+ pf: Flavor | None = None
78
+ for cp, cf in PACKAGE_FLAVORS.items():
79
+ if p.startswith(cp) and (len(cp) == len(p) or p[len(cp)] == '.'):
80
+ pf = cf
81
+ break
82
+
83
+ _MODULE_FLAVOR_CACHE[p] = pf
84
+ return pf
85
+
86
+
87
+ def get_flavor(obj: ta.Any, default: Flavor | type[_MISSING] | None = _MISSING) -> Flavor:
88
+ u = lang.unwrap_func(obj)
89
+
90
+ try:
91
+ return getattr(u, _FLAVOR_ATTR)
92
+ except AttributeError:
93
+ pass
94
+
95
+ if (mn := getattr(u, '__module__', None)) is not None:
96
+ if (pf := _get_module_flavor(mn)):
97
+ return pf
98
+
99
+ if default is not _MISSING:
100
+ return default # type: ignore
101
+
102
+ raise TypeError(f'not marked with flavor: {obj}')
103
+
104
+
105
+ ##
106
+
107
+
108
+ def with_adapter_loop(*, wait=False):
109
+ def outer(fn):
110
+ @functools.wraps(fn)
111
+ async def inner(*args, **kwargs):
112
+ cur_lib = sniffio.current_async_library()
113
+
114
+ if cur_lib == 'asyncio':
115
+ await fn(*args, **kwargs)
116
+
117
+ elif cur_lib == 'trio':
118
+ await with_trio_asyncio_loop(wait=wait)(fn)(*args, **kwargs)
119
+
120
+ else:
121
+ raise RuntimeError(f'Unknown async library: {cur_lib}')
122
+
123
+ return inner
124
+
125
+ return outer
126
+
127
+
128
+ ##
129
+
130
+
131
+ class Adapter(lang.Abstract):
132
+ _FROM_METHODS_BY_FLAVOR: ta.ClassVar[ta.Mapping[Flavor, str]] = {
133
+ Flavor.ANYIO: 'from_anyio',
134
+ Flavor.ASYNCIO: 'from_asyncio',
135
+ Flavor.TRIO: 'from_trio',
136
+ }
137
+
138
+ def adapt(self, fn, fl=None):
139
+ if fl is None:
140
+ fl = get_flavor(fn)
141
+ return getattr(self, self._FROM_METHODS_BY_FLAVOR[fl])(fn)
142
+
143
+ #
144
+
145
+ def from_anyio(self, fn):
146
+ return fn
147
+
148
+ @abc.abstractmethod
149
+ def from_asyncio(self, fn):
150
+ raise NotImplementedError
151
+
152
+ @abc.abstractmethod
153
+ def from_trio(self, fn):
154
+ raise NotImplementedError
155
+
156
+
157
+ class AsyncioAdapter(Adapter):
158
+ def from_asyncio(self, fn):
159
+ return fn
160
+
161
+ def from_trio(self, fn):
162
+ check_trio_asyncio()
163
+ return trio_asyncio.trio_as_aio(fn)
164
+
165
+
166
+ class TrioAdapter(Adapter):
167
+ def from_asyncio(self, fn):
168
+ check_trio_asyncio()
169
+ return trio_asyncio.aio_as_trio(fn)
170
+
171
+ def from_trio(self, fn):
172
+ return fn
173
+
174
+
175
+ _ADAPTERS_BY_BACKEND: ta.Mapping[str, Adapter] = {
176
+ 'asyncio': AsyncioAdapter(),
177
+ 'trio': TrioAdapter(),
178
+ }
179
+
180
+
181
+ def get_adapter() -> Adapter:
182
+ return _ADAPTERS_BY_BACKEND[sniffio.current_async_library()]
183
+
184
+
185
+ def adapt(fn, fl=None):
186
+ return get_adapter().adapt(fn, fl)
187
+
188
+
189
+ def from_anyio(fn):
190
+ return get_adapter().from_anyio(fn)
191
+
192
+
193
+ def from_asyncio(fn):
194
+ return get_adapter().from_asyncio(fn)
195
+
196
+
197
+ def from_trio(fn):
198
+ return get_adapter().from_trio(fn)
199
+
200
+
201
+ ##
202
+
203
+
204
+ @dc.dataclass(frozen=True)
205
+ class ContextManagerAdapter(ta.Generic[T]):
206
+ obj: ta.AsyncContextManager[T]
207
+ adapt: ta.Callable[[ta.Callable], ta.Callable]
208
+
209
+ async def __aenter__(self, *args: ta.Any, **kwargs: ta.Any) -> T:
210
+ return await self.adapt(self.obj.__aenter__)(*args, **kwargs)
211
+
212
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
213
+ return await self.adapt(self.obj.__aexit__)(exc_type, exc_val, exc_tb)
214
+
215
+
216
+ def adapt_context(obj):
217
+ return ContextManagerAdapter(obj, get_adapter().adapt)
218
+
219
+
220
+ def from_anyio_context(obj):
221
+ return ContextManagerAdapter(obj, get_adapter().from_anyio)
222
+
223
+
224
+ def from_asyncio_context(obj):
225
+ return ContextManagerAdapter(obj, get_adapter().from_asyncio)
226
+
227
+
228
+ def from_trio_context(obj):
229
+ return ContextManagerAdapter(obj, get_adapter().from_trio)
@@ -6,7 +6,7 @@ import typing as ta
6
6
  from omlish import check
7
7
  from omlish import lang
8
8
  from omlish.concurrent import threadlets as tls
9
- from omlish.sync import ConditionDeque
9
+ from omlish.sync.conddeque import ConditionDeque
10
10
 
11
11
 
12
12
  if ta.TYPE_CHECKING:
@@ -0,0 +1,9 @@
1
+ from .asyncs import ( # noqa
2
+ AsyncConnection,
3
+ AsyncConnectionLike,
4
+ AsyncEngine,
5
+ AsyncEngineLike,
6
+ AsyncTransaction,
7
+ AsyncTransactionLike,
8
+ async_adapt,
9
+ )
@@ -0,0 +1,154 @@
1
+ """
2
+ TODO:
3
+ - Maysync impls?
4
+ - base Protocol so adapters and real sa impls can be used interchangeably (if in asyncio ctx)?
5
+ """
6
+ import contextlib
7
+ import typing as ta
8
+
9
+ import sqlalchemy as sa
10
+ import sqlalchemy.ext.asyncio as saa
11
+
12
+ from ...asyncs import all as au
13
+
14
+
15
+ T = ta.TypeVar('T')
16
+ P = ta.ParamSpec('P')
17
+
18
+
19
+ AsyncEngineLike: ta.TypeAlias = ta.Union[saa.AsyncEngine, 'AsyncEngine']
20
+ AsyncConnectionLike: ta.TypeAlias = ta.Union[saa.AsyncConnection, 'AsyncConnection']
21
+ AsyncTransactionLike: ta.TypeAlias = ta.Union[saa.AsyncTransaction, 'AsyncTransaction']
22
+
23
+
24
+ ##
25
+
26
+
27
+ class AsyncTransaction:
28
+ def __init__(self, underlying: saa.AsyncTransaction) -> None:
29
+ super().__init__()
30
+
31
+ self._underlying = underlying
32
+
33
+ @property
34
+ def underlying(self) -> saa.AsyncTransaction:
35
+ return self._underlying
36
+
37
+ ##
38
+
39
+ @au.mark_asyncio
40
+ async def close(self) -> None:
41
+ await au.from_asyncio(self._underlying.close)()
42
+
43
+ @au.mark_asyncio
44
+ async def rollback(self) -> None:
45
+ await au.from_asyncio(self._underlying.rollback)()
46
+
47
+ @au.mark_asyncio
48
+ async def commit(self) -> None:
49
+ await au.from_asyncio(self._underlying.commit)()
50
+
51
+
52
+ class AsyncConnection:
53
+ def __init__(self, underlying: saa.AsyncConnection) -> None:
54
+ super().__init__()
55
+
56
+ self._underlying = underlying
57
+
58
+ @property
59
+ def underlying(self) -> saa.AsyncConnection:
60
+ return self._underlying
61
+
62
+ ##
63
+
64
+ @contextlib.asynccontextmanager
65
+ @au.mark_asyncio
66
+ async def begin(self) -> ta.AsyncIterator[AsyncTransaction]:
67
+ async with au.from_asyncio_context(self._underlying.begin()) as u:
68
+ yield AsyncTransaction(u)
69
+
70
+ @au.mark_asyncio
71
+ async def execute(
72
+ self,
73
+ statement: ta.Any,
74
+ *args: ta.Any,
75
+ **kwargs: ta.Any,
76
+ ) -> sa.CursorResult[ta.Any]:
77
+ return await au.from_asyncio(self._underlying.execute)(statement, *args, **kwargs)
78
+
79
+ @au.mark_asyncio
80
+ async def run_sync(
81
+ self,
82
+ fn: ta.Callable[ta.Concatenate[sa.Connection, P], T],
83
+ *args: P.args,
84
+ **kwargs: P.kwargs,
85
+ ) -> T:
86
+ return await au.from_asyncio(self._underlying.run_sync)(fn, *args, **kwargs)
87
+
88
+
89
+ class AsyncEngine:
90
+ def __init__(self, underlying: saa.AsyncEngine) -> None:
91
+ super().__init__()
92
+
93
+ self._underlying = underlying
94
+
95
+ @property
96
+ def underlying(self) -> saa.AsyncEngine:
97
+ return self._underlying
98
+
99
+ ##
100
+
101
+ @contextlib.asynccontextmanager
102
+ @au.mark_asyncio
103
+ async def connect(self) -> ta.AsyncIterator[AsyncConnection]:
104
+ async with au.from_asyncio_context(self._underlying.connect()) as u:
105
+ yield AsyncConnection(u)
106
+
107
+ @au.mark_asyncio
108
+ async def dispose(self, close: bool = True) -> None:
109
+ await au.from_asyncio(self._underlying.dispose)(close)
110
+
111
+
112
+ ##
113
+
114
+
115
+ @ta.overload
116
+ def async_adapt(obj: AsyncEngine) -> AsyncEngine:
117
+ ...
118
+
119
+
120
+ @ta.overload
121
+ def async_adapt(obj: AsyncConnection) -> AsyncConnection:
122
+ ...
123
+
124
+
125
+ @ta.overload
126
+ def async_adapt(obj: AsyncTransaction) -> AsyncTransaction:
127
+ ...
128
+
129
+
130
+ @ta.overload
131
+ def async_adapt(obj: saa.AsyncEngine) -> AsyncEngine:
132
+ ...
133
+
134
+
135
+ @ta.overload
136
+ def async_adapt(obj: saa.AsyncConnection) -> AsyncConnection:
137
+ ...
138
+
139
+
140
+ @ta.overload
141
+ def async_adapt(obj: saa.AsyncTransaction) -> AsyncTransaction:
142
+ ...
143
+
144
+
145
+ def async_adapt(obj: ta.Any) -> ta.Any:
146
+ if isinstance(obj, (AsyncEngine, AsyncConnection, AsyncTransaction)):
147
+ return obj
148
+ if isinstance(obj, saa.AsyncTransaction):
149
+ return AsyncTransaction(obj)
150
+ if isinstance(obj, saa.AsyncConnection):
151
+ return AsyncConnection(obj)
152
+ if isinstance(obj, saa.AsyncEngine):
153
+ return AsyncEngine(obj)
154
+ raise TypeError(obj)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omextra
3
- Version: 0.0.0.dev514
3
+ Version: 0.0.0.dev515
4
4
  Summary: omextra
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.dev514
17
+ Requires-Dist: omlish==0.0.0.dev515
18
18
  Dynamic: license-file
19
19
 
20
20
  # Overview
@@ -15,7 +15,9 @@ omextra.egg-info/entry_points.txt
15
15
  omextra.egg-info/requires.txt
16
16
  omextra.egg-info/top_level.txt
17
17
  omextra/asyncs/__init__.py
18
+ omextra/asyncs/all.py
18
19
  omextra/asyncs/bridge.py
20
+ omextra/asyncs/flavors.py
19
21
  omextra/asyncs/bluelet/LICENSE
20
22
  omextra/asyncs/bluelet/__init__.py
21
23
  omextra/asyncs/bluelet/all.py
@@ -50,18 +52,6 @@ omextra/formats/json5/_antlr/Json5Visitor.py
50
52
  omextra/formats/json5/_antlr/__init__.py
51
53
  omextra/io/__init__.py
52
54
  omextra/io/trampoline.py
53
- omextra/io/buffers/DESIGN.md
54
- omextra/io/buffers/__init__.py
55
- omextra/io/buffers/adapters.py
56
- omextra/io/buffers/all.py
57
- omextra/io/buffers/errors.py
58
- omextra/io/buffers/framing.py
59
- omextra/io/buffers/linear.py
60
- omextra/io/buffers/reading.py
61
- omextra/io/buffers/scanning.py
62
- omextra/io/buffers/segmented.py
63
- omextra/io/buffers/types.py
64
- omextra/io/buffers/utils.py
65
55
  omextra/specs/__init__.py
66
56
  omextra/specs/proto/Protobuf3.g4
67
57
  omextra/specs/proto/__init__.py
@@ -73,6 +63,8 @@ omextra/specs/proto/_antlr/Protobuf3Parser.py
73
63
  omextra/specs/proto/_antlr/Protobuf3Visitor.py
74
64
  omextra/specs/proto/_antlr/__init__.py
75
65
  omextra/sql/__init__.py
66
+ omextra/sql/alchemy/__init__.py
67
+ omextra/sql/alchemy/asyncs.py
76
68
  omextra/sql/parsing/Minisql.g4
77
69
  omextra/sql/parsing/__init__.py
78
70
  omextra/sql/parsing/parsing.py
@@ -0,0 +1 @@
1
+ omlish==0.0.0.dev515
@@ -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.dev514'
16
+ version = '0.0.0.dev515'
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 = 'omextra'
26
26
  dependencies = [
27
- 'omlish == 0.0.0.dev514',
27
+ 'omlish == 0.0.0.dev515',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]