omlish 0.0.0.dev62__tar.gz → 0.0.0.dev64__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (423) hide show
  1. {omlish-0.0.0.dev62/omlish.egg-info → omlish-0.0.0.dev64}/PKG-INFO +1 -1
  2. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/__about__.py +3 -3
  3. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/argparse.py +11 -8
  4. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/main.py +1 -1
  5. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/indexed.py +2 -2
  6. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/docker/__init__.py +2 -0
  7. omlish-0.0.0.dev64/omlish/docker/hub.py +161 -0
  8. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/yaml.py +8 -0
  9. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/classes/simple.py +19 -14
  10. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/descriptors.py +9 -9
  11. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/strings.py +1 -1
  12. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/marshal.py +23 -22
  13. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64/omlish.egg-info}/PKG-INFO +1 -1
  14. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/pyproject.toml +1 -1
  15. omlish-0.0.0.dev62/omlish/docker/hub.py +0 -75
  16. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/LICENSE +0 -0
  17. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/MANIFEST.in +0 -0
  18. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/README.rst +0 -0
  19. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/.manifests.json +0 -0
  20. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/__init__.py +0 -0
  21. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/__init__.py +0 -0
  22. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/BufferedTokenStream.py +0 -0
  23. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/CommonTokenFactory.py +0 -0
  24. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/CommonTokenStream.py +0 -0
  25. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/FileStream.py +0 -0
  26. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/InputStream.py +0 -0
  27. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/IntervalSet.py +0 -0
  28. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/LL1Analyzer.py +0 -0
  29. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/Lexer.py +0 -0
  30. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/ListTokenSource.py +0 -0
  31. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/Parser.py +0 -0
  32. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/ParserInterpreter.py +0 -0
  33. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/ParserRuleContext.py +0 -0
  34. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/PredictionContext.py +0 -0
  35. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/Recognizer.py +0 -0
  36. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/RuleContext.py +0 -0
  37. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/StdinStream.py +0 -0
  38. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/Token.py +0 -0
  39. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/TokenStreamRewriter.py +0 -0
  40. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/Utils.py +0 -0
  41. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/__init__.py +0 -0
  42. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/_pygrun.py +0 -0
  43. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATN.py +0 -0
  44. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNConfig.py +0 -0
  45. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNConfigSet.py +0 -0
  46. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNDeserializationOptions.py +0 -0
  47. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNDeserializer.py +0 -0
  48. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNSimulator.py +0 -0
  49. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNState.py +0 -0
  50. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ATNType.py +0 -0
  51. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/LexerATNSimulator.py +0 -0
  52. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/LexerAction.py +0 -0
  53. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/LexerActionExecutor.py +0 -0
  54. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/ParserATNSimulator.py +0 -0
  55. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/PredictionMode.py +0 -0
  56. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/SemanticContext.py +0 -0
  57. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/Transition.py +0 -0
  58. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/atn/__init__.py +0 -0
  59. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/dfa/DFA.py +0 -0
  60. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/dfa/DFASerializer.py +0 -0
  61. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/dfa/DFAState.py +0 -0
  62. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/dfa/__init__.py +0 -0
  63. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/error/DiagnosticErrorListener.py +0 -0
  64. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/error/ErrorListener.py +0 -0
  65. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/error/ErrorStrategy.py +0 -0
  66. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/error/Errors.py +0 -0
  67. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/error/__init__.py +0 -0
  68. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/Chunk.py +0 -0
  69. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/ParseTreeMatch.py +0 -0
  70. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/ParseTreePattern.py +0 -0
  71. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/ParseTreePatternMatcher.py +0 -0
  72. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/RuleTagToken.py +0 -0
  73. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/TokenTagToken.py +0 -0
  74. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/Tree.py +0 -0
  75. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/Trees.py +0 -0
  76. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/tree/__init__.py +0 -0
  77. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/xpath/XPath.py +0 -0
  78. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/xpath/XPathLexer.py +0 -0
  79. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/antlr/_runtime/xpath/__init__.py +0 -0
  80. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/__init__.py +0 -0
  81. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/anyio.py +0 -0
  82. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/asyncio.py +0 -0
  83. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/asyncs.py +0 -0
  84. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/bridge.py +0 -0
  85. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/flavors.py +0 -0
  86. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/trio.py +0 -0
  87. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/asyncs/trio_asyncio.py +0 -0
  88. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/__init__.py +0 -0
  89. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/__main__.py +0 -0
  90. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/base.py +0 -0
  91. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/diag.py +0 -0
  92. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/harness.py +0 -0
  93. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/marshal.py +0 -0
  94. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/bootstrap/sys.py +0 -0
  95. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/c3.py +0 -0
  96. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/cached.py +0 -0
  97. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/check.py +0 -0
  98. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/__init__.py +0 -0
  99. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/_abc.py +0 -0
  100. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/_io_abc.py +0 -0
  101. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/cache/__init__.py +0 -0
  102. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/cache/descriptor.py +0 -0
  103. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/cache/impl.py +0 -0
  104. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/cache/types.py +0 -0
  105. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/coerce.py +0 -0
  106. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/exceptions.py +0 -0
  107. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/frozen.py +0 -0
  108. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/identity.py +0 -0
  109. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/mappings.py +0 -0
  110. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/ordered.py +0 -0
  111. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/persistent.py +0 -0
  112. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/skiplist.py +0 -0
  113. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/sorted.py +0 -0
  114. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/treap.py +0 -0
  115. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/treapmap.py +0 -0
  116. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/unmodifiable.py +0 -0
  117. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/collections/utils.py +0 -0
  118. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/concurrent/__init__.py +0 -0
  119. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/concurrent/executors.py +0 -0
  120. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/concurrent/futures.py +0 -0
  121. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/concurrent/threadlets.py +0 -0
  122. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/configs/__init__.py +0 -0
  123. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/configs/classes.py +0 -0
  124. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/configs/flattening.py +0 -0
  125. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/configs/strings.py +0 -0
  126. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/__init__.py +0 -0
  127. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/LICENSE +0 -0
  128. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/__init__.py +0 -0
  129. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/api.py +0 -0
  130. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/as_.py +0 -0
  131. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/copy.py +0 -0
  132. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/descriptors.py +0 -0
  133. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/exceptions.py +0 -0
  134. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/fields.py +0 -0
  135. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/frozen.py +0 -0
  136. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/hashing.py +0 -0
  137. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/init.py +0 -0
  138. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/internals.py +0 -0
  139. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/main.py +0 -0
  140. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/metaclass.py +0 -0
  141. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/metadata.py +0 -0
  142. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/order.py +0 -0
  143. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/params.py +0 -0
  144. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/processing.py +0 -0
  145. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/reflect.py +0 -0
  146. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/replace.py +0 -0
  147. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/repr.py +0 -0
  148. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/simple.py +0 -0
  149. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/slots.py +0 -0
  150. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/impl/utils.py +0 -0
  151. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dataclasses/utils.py +0 -0
  152. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/datetimes.py +0 -0
  153. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/defs.py +0 -0
  154. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/__init__.py +0 -0
  155. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/asts.py +0 -0
  156. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/debug.py +0 -0
  157. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/procfs.py +0 -0
  158. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/procstats.py +0 -0
  159. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/ps.py +0 -0
  160. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/pycharm.py +0 -0
  161. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/pydevd.py +0 -0
  162. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/replserver/__init__.py +0 -0
  163. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/replserver/__main__.py +0 -0
  164. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/replserver/console.py +0 -0
  165. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/replserver/server.py +0 -0
  166. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/diag/threads.py +0 -0
  167. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dispatch/__init__.py +0 -0
  168. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dispatch/_dispatch2.py +0 -0
  169. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dispatch/_dispatch3.py +0 -0
  170. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dispatch/dispatch.py +0 -0
  171. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dispatch/functions.py +0 -0
  172. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dispatch/methods.py +0 -0
  173. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/docker/cli.py +0 -0
  174. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/docker/compose.py +0 -0
  175. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/docker/helpers.py +0 -0
  176. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/docker/manifests.py +0 -0
  177. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/dynamic.py +0 -0
  178. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/fnpairs.py +0 -0
  179. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/fnpipes.py +0 -0
  180. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/__init__.py +0 -0
  181. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/dotenv.py +0 -0
  182. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/__init__.py +0 -0
  183. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/__main__.py +0 -0
  184. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/backends/__init__.py +0 -0
  185. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/backends/orjson.py +0 -0
  186. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/backends/std.py +0 -0
  187. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/backends/ujson.py +0 -0
  188. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/cli.py +0 -0
  189. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/json.py +0 -0
  190. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/json/render.py +0 -0
  191. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/formats/props.py +0 -0
  192. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/genmachine.py +0 -0
  193. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/__init__.py +0 -0
  194. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/dags.py +0 -0
  195. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/domination.py +0 -0
  196. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/dot/__init__.py +0 -0
  197. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/dot/items.py +0 -0
  198. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/dot/make.py +0 -0
  199. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/dot/rendering.py +0 -0
  200. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/dot/utils.py +0 -0
  201. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/graphs/trees.py +0 -0
  202. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/__init__.py +0 -0
  203. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/asgi.py +0 -0
  204. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/collections.py +0 -0
  205. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/consts.py +0 -0
  206. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/cookies.py +0 -0
  207. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/dates.py +0 -0
  208. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/encodings.py +0 -0
  209. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/json.py +0 -0
  210. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/sessions.py +0 -0
  211. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/http/wsgi.py +0 -0
  212. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/__init__.py +0 -0
  213. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/binder.py +0 -0
  214. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/bindings.py +0 -0
  215. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/eagers.py +0 -0
  216. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/elements.py +0 -0
  217. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/exceptions.py +0 -0
  218. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/__init__.py +0 -0
  219. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/bindings.py +0 -0
  220. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/elements.py +0 -0
  221. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/injector.py +0 -0
  222. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/inspect.py +0 -0
  223. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/multis.py +0 -0
  224. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/origins.py +0 -0
  225. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/privates.py +0 -0
  226. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/providers.py +0 -0
  227. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/proxy.py +0 -0
  228. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/impl/scopes.py +0 -0
  229. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/injector.py +0 -0
  230. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/inspect.py +0 -0
  231. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/keys.py +0 -0
  232. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/listeners.py +0 -0
  233. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/managed.py +0 -0
  234. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/multis.py +0 -0
  235. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/origins.py +0 -0
  236. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/overrides.py +0 -0
  237. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/privates.py +0 -0
  238. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/providers.py +0 -0
  239. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/scopes.py +0 -0
  240. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/types.py +0 -0
  241. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/inject/utils.py +0 -0
  242. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/iterators.py +0 -0
  243. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/__init__.py +0 -0
  244. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/cached.py +0 -0
  245. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/classes/__init__.py +0 -0
  246. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/classes/abstract.py +0 -0
  247. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/classes/restrict.py +0 -0
  248. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/classes/virtual.py +0 -0
  249. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/clsdct.py +0 -0
  250. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/cmp.py +0 -0
  251. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/contextmanagers.py +0 -0
  252. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/datetimes.py +0 -0
  253. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/exceptions.py +0 -0
  254. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/functions.py +0 -0
  255. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/imports.py +0 -0
  256. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/iterables.py +0 -0
  257. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/maybes.py +0 -0
  258. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/objects.py +0 -0
  259. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/resolving.py +0 -0
  260. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/resources.py +0 -0
  261. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/sys.py +0 -0
  262. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/timeouts.py +0 -0
  263. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lang/typing.py +0 -0
  264. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/libc.py +0 -0
  265. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/__init__.py +0 -0
  266. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/abstract.py +0 -0
  267. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/base.py +0 -0
  268. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/contextmanagers.py +0 -0
  269. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/controller.py +0 -0
  270. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/manager.py +0 -0
  271. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/states.py +0 -0
  272. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lifecycles/transitions.py +0 -0
  273. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/__init__.py +0 -0
  274. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/cached.py +0 -0
  275. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/check.py +0 -0
  276. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/contextmanagers.py +0 -0
  277. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/json.py +0 -0
  278. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/logs.py +0 -0
  279. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/reflect.py +0 -0
  280. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/runtime.py +0 -0
  281. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/secrets.py +0 -0
  282. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/strings.py +0 -0
  283. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/lite/subprocesses.py +0 -0
  284. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/__init__.py +0 -0
  285. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/_abc.py +0 -0
  286. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/configs.py +0 -0
  287. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/formatters.py +0 -0
  288. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/handlers.py +0 -0
  289. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/noisy.py +0 -0
  290. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/logs/utils.py +0 -0
  291. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/__init__.py +0 -0
  292. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/any.py +0 -0
  293. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/base.py +0 -0
  294. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/base64.py +0 -0
  295. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/dataclasses.py +0 -0
  296. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/datetimes.py +0 -0
  297. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/enums.py +0 -0
  298. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/exceptions.py +0 -0
  299. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/factories.py +0 -0
  300. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/forbidden.py +0 -0
  301. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/global_.py +0 -0
  302. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/helpers.py +0 -0
  303. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/iterables.py +0 -0
  304. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/mappings.py +0 -0
  305. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/maybes.py +0 -0
  306. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/naming.py +0 -0
  307. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/nop.py +0 -0
  308. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/numbers.py +0 -0
  309. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/objects.py +0 -0
  310. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/optionals.py +0 -0
  311. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/polymorphism.py +0 -0
  312. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/primitives.py +0 -0
  313. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/registries.py +0 -0
  314. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/standard.py +0 -0
  315. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/unions.py +0 -0
  316. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/utils.py +0 -0
  317. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/uuids.py +0 -0
  318. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/marshal/values.py +0 -0
  319. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/matchfns.py +0 -0
  320. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/math/__init__.py +0 -0
  321. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/math/bits.py +0 -0
  322. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/math/floats.py +0 -0
  323. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/math/stats.py +0 -0
  324. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/multiprocessing.py +0 -0
  325. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/os.py +0 -0
  326. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/reflect/__init__.py +0 -0
  327. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/reflect/isinstance.py +0 -0
  328. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/reflect/ops.py +0 -0
  329. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/reflect/subst.py +0 -0
  330. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/reflect/types.py +0 -0
  331. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/runmodule.py +0 -0
  332. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/__init__.py +0 -0
  333. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/crypto.py +0 -0
  334. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/marshal.py +0 -0
  335. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/openssl.py +0 -0
  336. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/passwords.py +0 -0
  337. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/secrets.py +0 -0
  338. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/secrets/subprocesses.py +0 -0
  339. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/__init__.py +0 -0
  340. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/LICENSE +0 -0
  341. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/__init__.py +0 -0
  342. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/__main__.py +0 -0
  343. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/ast.py +0 -0
  344. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/cli.py +0 -0
  345. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/exceptions.py +0 -0
  346. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/functions.py +0 -0
  347. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/lexer.py +0 -0
  348. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/parser.py +0 -0
  349. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/scope.py +0 -0
  350. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jmespath/visitor.py +0 -0
  351. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonrpc/__init__.py +0 -0
  352. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonrpc/errors.py +0 -0
  353. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonrpc/marshal.py +0 -0
  354. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonrpc/types.py +0 -0
  355. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/__init__.py +0 -0
  356. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/__init__.py +0 -0
  357. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/base.py +0 -0
  358. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/core.py +0 -0
  359. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/metadata.py +0 -0
  360. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/parse.py +0 -0
  361. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/render.py +0 -0
  362. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/keywords/validation.py +0 -0
  363. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/__init__.py +0 -0
  364. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/__init__.py +0 -0
  365. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/metaschema.json +0 -0
  366. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/__init__.py +0 -0
  367. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/applicator.json +0 -0
  368. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/content.json +0 -0
  369. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/core.json +0 -0
  370. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-annotation.json +0 -0
  371. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-assertion.json +0 -0
  372. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format.json +0 -0
  373. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/meta-data.json +0 -0
  374. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/unevaluated.json +0 -0
  375. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json +0 -0
  376. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/jsonschema/types.py +0 -0
  377. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/openapi/__init__.py +0 -0
  378. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/openapi/marshal.py +0 -0
  379. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/specs/openapi/openapi.py +0 -0
  380. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/__init__.py +0 -0
  381. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/_abc.py +0 -0
  382. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/alchemy/__init__.py +0 -0
  383. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/alchemy/asyncs.py +0 -0
  384. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/alchemy/duckdb.py +0 -0
  385. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/alchemy/exprs.py +0 -0
  386. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/alchemy/secrets.py +0 -0
  387. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/alchemy/sqlean.py +0 -0
  388. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/dbs.py +0 -0
  389. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sql/qualifiedname.py +0 -0
  390. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/sync.py +0 -0
  391. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/term.py +0 -0
  392. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/__init__.py +0 -0
  393. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/__init__.py +0 -0
  394. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/helpers.py +0 -0
  395. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/inject/__init__.py +0 -0
  396. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/inject/harness.py +0 -0
  397. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/marks.py +0 -0
  398. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/__init__.py +0 -0
  399. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/_registry.py +0 -0
  400. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/asyncs.py +0 -0
  401. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/depskip.py +0 -0
  402. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/logging.py +0 -0
  403. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/managermarks.py +0 -0
  404. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/pydevd.py +0 -0
  405. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/repeat.py +0 -0
  406. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/skips.py +0 -0
  407. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/spacing.py +0 -0
  408. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/switches.py +0 -0
  409. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/plugins/utils.py +0 -0
  410. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/pytest/skip.py +0 -0
  411. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/testing/testing.py +0 -0
  412. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/text/__init__.py +0 -0
  413. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/text/asdl.py +0 -0
  414. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/text/delimit.py +0 -0
  415. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/text/glyphsplit.py +0 -0
  416. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/text/indent.py +0 -0
  417. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish/text/parts.py +0 -0
  418. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish.egg-info/SOURCES.txt +0 -0
  419. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish.egg-info/dependency_links.txt +0 -0
  420. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish.egg-info/entry_points.txt +0 -0
  421. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish.egg-info/requires.txt +0 -0
  422. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/omlish.egg-info/top_level.txt +0 -0
  423. {omlish-0.0.0.dev62 → omlish-0.0.0.dev64}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev62
3
+ Version: 0.0.0.dev64
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev62'
2
- __revision__ = 'a5ef2d1548d1cdfb856b4a7ff99fe61080ab791e'
1
+ __version__ = '0.0.0.dev64'
2
+ __revision__ = '65b4d26bc20b482253b288f29eebe58b9ae531dd'
3
3
 
4
4
 
5
5
  #
@@ -92,7 +92,7 @@ class Project(ProjectBase):
92
92
  # 'psycopg ~= 3.2',
93
93
 
94
94
  'pymysql ~= 1.1',
95
- # 'mysql-connector-python ~= 9.0',
95
+ # 'mysql-connector-python ~= 9.1',
96
96
  # 'mysqlclient ~= 2.2',
97
97
 
98
98
  'aiomysql ~= 0.2',
@@ -70,7 +70,7 @@ def arg(*args, **kwargs) -> Arg:
70
70
  #
71
71
 
72
72
 
73
- CommandFn = ta.Callable[[], None]
73
+ CommandFn = ta.Callable[[], int | None]
74
74
 
75
75
 
76
76
  @dc.dataclass(eq=False)
@@ -96,9 +96,9 @@ class Command:
96
96
  def __get__(self, instance, owner=None):
97
97
  if instance is None:
98
98
  return self
99
- return dc.replace(self, fn=self.fn.__get__(instance, owner))
99
+ return dc.replace(self, fn=self.fn.__get__(instance, owner)) # noqa
100
100
 
101
- def __call__(self, *args, **kwargs) -> None:
101
+ def __call__(self, *args, **kwargs) -> int | None:
102
102
  return self.fn(*args, **kwargs)
103
103
 
104
104
 
@@ -234,10 +234,10 @@ class Cli(metaclass=_CliMeta):
234
234
  def unknown_args(self) -> ta.Sequence[str]:
235
235
  return self._unknown_args
236
236
 
237
- def _run_cmd(self, cmd: Command) -> None:
238
- cmd.__get__(self, type(self))()
237
+ def _run_cmd(self, cmd: Command) -> int | None:
238
+ return cmd.__get__(self, type(self))()
239
239
 
240
- def __call__(self) -> None:
240
+ def __call__(self) -> int | None:
241
241
  cmd = getattr(self.args, '_cmd', None)
242
242
 
243
243
  if self._unknown_args and not (cmd is not None and cmd.accepts_unknown):
@@ -249,6 +249,9 @@ class Cli(metaclass=_CliMeta):
249
249
 
250
250
  if cmd is None:
251
251
  self.get_parser().print_help()
252
- return
252
+ return 0
253
253
 
254
- self._run_cmd(cmd)
254
+ return self._run_cmd(cmd)
255
+
256
+ def call_and_exit(self) -> ta.NoReturn:
257
+ sys.exit(rc if isinstance(rc := self(), int) else 0)
@@ -83,7 +83,7 @@ def _add_arguments(parser: argparse.ArgumentParser) -> None:
83
83
  else:
84
84
  raise TypeError(fld)
85
85
 
86
- parser.add_argument(aname, action=_OrderedArgsAction, **kw)
86
+ parser.add_argument(aname.replace('_', '-'), action=_OrderedArgsAction, **kw)
87
87
 
88
88
 
89
89
  def _process_arguments(args: ta.Any) -> ta.Sequence[Bootstrap.Config]:
@@ -13,7 +13,7 @@ class IndexedSeq(ta.Sequence[T]):
13
13
  super().__init__()
14
14
 
15
15
  self._lst = list(it)
16
- self._idxs = (IdentityKeyDict if identity else dict)(map(reversed, enumerate(self._lst)))
16
+ self._idxs: ta.Mapping[T, int] = (IdentityKeyDict if identity else dict)((e, i) for i, e in enumerate(self._lst)) # noqa
17
17
  if len(self._idxs) != len(self._lst):
18
18
  raise ValueError(f'{len(self._idxs)} != {len(self._lst)}')
19
19
 
@@ -47,7 +47,7 @@ class IndexedSetSeq(ta.Sequence[ta.AbstractSet[T]]):
47
47
  super().__init__()
48
48
 
49
49
  self._lst = [(IdentitySet if identity else set)(e) for e in it]
50
- self._idxs = (IdentityKeyDict if identity else dict)((e, i) for i, es in enumerate(self._lst) for e in es)
50
+ self._idxs: ta.Mapping[T, int] = (IdentityKeyDict if identity else dict)((e, i) for i, es in enumerate(self._lst) for e in es) # noqa
51
51
  if len(self._idxs) != sum(map(len, self._lst)):
52
52
  raise ValueError(f'{len(self._idxs)} != {sum(map(len, self._lst))}')
53
53
 
@@ -24,4 +24,6 @@ from .helpers import ( # noqa
24
24
  from .hub import ( # noqa
25
25
  HubRepoInfo,
26
26
  get_hub_repo_info,
27
+ select_latest_tag,
28
+ split_tag_suffix,
27
29
  )
@@ -0,0 +1,161 @@
1
+ import typing as ta
2
+ import urllib.error
3
+ import urllib.request
4
+
5
+ from .. import check
6
+ from .. import dataclasses as dc
7
+ from ..formats import json
8
+
9
+
10
+ ##
11
+
12
+
13
+ def _tag_sort_key(s: str) -> tuple:
14
+ l = []
15
+ for p in s.split('.'):
16
+ v: ta.Any
17
+ try:
18
+ v = int(p)
19
+ except ValueError:
20
+ v = s
21
+ l.append((not isinstance(v, int), v))
22
+ return tuple(l)
23
+
24
+
25
+ DEFAULT_TAG_SUFFIX_DELIM = '-+'
26
+
27
+
28
+ def split_tag_suffix(
29
+ tag: str,
30
+ suffix_delim: ta.Iterable[str] = DEFAULT_TAG_SUFFIX_DELIM,
31
+ ) -> tuple[str, str | None]:
32
+ for d in suffix_delim:
33
+ if d in tag:
34
+ p, _, s = tag.partition(d)
35
+ return p, s
36
+ return tag, None
37
+
38
+
39
+ def select_latest_tag(
40
+ tags: ta.Iterable[str],
41
+ *,
42
+ base: str | None = None,
43
+ suffix: str | None = None,
44
+ suffix_delim: ta.Iterable[str] = '-+',
45
+ ) -> str:
46
+ check.not_isinstance(tags, str)
47
+
48
+ tags_by_sfx: dict[str | None, set[tuple[tuple, str]]] = {}
49
+ for t in tags:
50
+ p, s = split_tag_suffix(t, suffix_delim)
51
+ tags_by_sfx.setdefault(s, set()).add((_tag_sort_key(p), t))
52
+
53
+ if base is not None:
54
+ bp, bs = split_tag_suffix(base, suffix_delim)
55
+ if suffix is None:
56
+ suffix = bs
57
+ base_key = _tag_sort_key(bp)
58
+ else:
59
+ base_key = None
60
+
61
+ sl = sorted(tags_by_sfx[suffix])
62
+
63
+ if base_key is not None:
64
+ sl = [(k, t) for k, t in sl if k[0] == base_key[0]]
65
+
66
+ return sl[-1][1]
67
+
68
+
69
+ ##
70
+
71
+
72
+ @dc.dataclass(frozen=True)
73
+ class HubRepoInfo:
74
+ repo: str
75
+ tags: ta.Sequence[str]
76
+ manifests: ta.Mapping[str, ta.Mapping[str, ta.Any]]
77
+
78
+
79
+ def get_hub_repo_info(
80
+ repo: str,
81
+ *,
82
+ auth_url: str = 'https://auth.docker.io/',
83
+ api_url: str = 'https://registry-1.docker.io/v2/',
84
+ tags: ta.Iterable[str] | None = None,
85
+ handled_codes: ta.Container[int] | None = (401, 404),
86
+ ) -> HubRepoInfo | None:
87
+ """
88
+ https://stackoverflow.com/a/39376254
89
+
90
+ ==
91
+
92
+ repo=library/nginx
93
+ token=$(
94
+ curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" \
95
+ | jq -r '.token' \
96
+ )
97
+ curl -H "Authorization: Bearer $token" -s "https://registry-1.docker.io/v2/${repo}/tags/list" | jq
98
+ curl \
99
+ -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
100
+ -H "Accept: application/vnd.docker.distribution.manifest.list.v2+json" \
101
+ -H "Authorization: Bearer $token" \
102
+ -s "https://registry-1.docker.io/v2/${repo}/manifests/latest" \
103
+ | jq .
104
+ """
105
+ if tags is not None:
106
+ check.not_isinstance(tags, str)
107
+ else:
108
+ tags = []
109
+
110
+ auth_url = auth_url.rstrip('/')
111
+ api_url = api_url.rstrip('/')
112
+
113
+ if '/' not in repo:
114
+ repo = '_/' + repo
115
+ if repo.startswith('_/'):
116
+ repo = 'library' + repo[1:]
117
+
118
+ #
119
+
120
+ def req_json(url: str, **kwargs: ta.Any) -> ta.Any:
121
+ with urllib.request.urlopen(urllib.request.Request(url, **kwargs)) as resp: # noqa
122
+ return json.loads(resp.read().decode('utf-8'))
123
+
124
+ #
125
+
126
+ token_dct = req_json(f'{auth_url}/token?service=registry.docker.io&scope=repository:{repo}:pull')
127
+ token = token_dct['token']
128
+
129
+ req_hdrs = {'Authorization': f'Bearer {token}'}
130
+
131
+ #
132
+
133
+ try:
134
+ tags_resp = req_json(
135
+ f'{api_url}/{repo}/tags/list',
136
+ headers=req_hdrs,
137
+ )
138
+ except urllib.error.HTTPError as ue:
139
+ if ue.code in (handled_codes or ()):
140
+ return None
141
+ else:
142
+ raise
143
+
144
+ tags_dct = tags_resp.get('tags', {})
145
+
146
+ manis = {}
147
+ for tag in tags:
148
+ mani = req_json(
149
+ f'{api_url}/{repo}/manifests/latest',
150
+ headers={
151
+ **req_hdrs,
152
+ 'Accept': 'application/vnd.docker.distribution.manifest.v2+json',
153
+ },
154
+ )
155
+ manis[tag] = mani
156
+
157
+ return HubRepoInfo(
158
+ repo,
159
+ tags_dct,
160
+ manis,
161
+ )
@@ -225,6 +225,14 @@ def load_all(stream, Loader): # noqa
225
225
  yield loader.get_data()
226
226
 
227
227
 
228
+ def safe_load(stream): # noqa
229
+ return load(stream, yaml.SafeLoader)
230
+
231
+
232
+ def safe_load_all(stream): # noqa # noqa
233
+ return load_all(stream, yaml.SafeLoader)
234
+
235
+
228
236
  def full_load(stream): # noqa
229
237
  return load(stream, yaml.FullLoader)
230
238
 
@@ -14,6 +14,17 @@ V = ta.TypeVar('V')
14
14
  ##
15
15
 
16
16
 
17
+ class SimpleMetaDict(dict):
18
+ def update(self, m: ta.Mapping[K, V], **kwargs: V) -> None: # type: ignore
19
+ for k, v in m.items():
20
+ self[k] = v
21
+ for k, v in kwargs.items(): # type: ignore
22
+ self[k] = v
23
+
24
+
25
+ ##
26
+
27
+
17
28
  class _NamespaceMeta(abc.ABCMeta):
18
29
  def __new__(mcls, name, bases, namespace):
19
30
  if bases:
@@ -23,9 +34,14 @@ class _NamespaceMeta(abc.ABCMeta):
23
34
  return super().__new__(mcls, name, bases, namespace)
24
35
 
25
36
  def __iter__(cls) -> ta.Iterator[tuple[str, ta.Any]]:
26
- for a in dir(cls):
27
- if not a.startswith('_'):
28
- yield (a, getattr(cls, a))
37
+ seen: set[str] = set()
38
+ for bcls in reversed(cls.__mro__):
39
+ for a in bcls.__dict__:
40
+ if a in seen:
41
+ continue
42
+ seen.add(a)
43
+ if not a.startswith('_'):
44
+ yield (a, getattr(cls, a))
29
45
 
30
46
  def __getitem__(cls, n: str) -> ta.Any:
31
47
  return getattr(cls, n)
@@ -75,17 +91,6 @@ class Marker(NotInstantiable, metaclass=_MarkerMeta):
75
91
  ##
76
92
 
77
93
 
78
- class SimpleMetaDict(dict):
79
- def update(self, m: ta.Mapping[K, V], **kwargs: V) -> None: # type: ignore
80
- for k, v in m.items():
81
- self[k] = v
82
- for k, v in kwargs.items(): # type: ignore
83
- self[k] = v
84
-
85
-
86
- ##
87
-
88
-
89
94
  _SINGLETON_INSTANCE_ATTR = '__singleton_instance__'
90
95
  _SINGLETON_LOCK = threading.RLock()
91
96
 
@@ -97,15 +97,15 @@ def update_wrapper(
97
97
  assigned: ta.Iterable[str] = functools.WRAPPER_ASSIGNMENTS,
98
98
  updated: ta.Iterable[str] = functools.WRAPPER_UPDATES,
99
99
  *,
100
- filter: ta.Iterable[str] | None = None, # noqa
100
+ exclude: ta.Iterable[str] | None = None,
101
101
  getattr: ta.Callable = getattr, # noqa
102
102
  setattr: ta.Callable = setattr, # noqa
103
103
  ) -> T:
104
- if filter:
105
- if isinstance(filter, str):
106
- filter = [filter] # noqa
107
- assigned = tuple(a for a in assigned if a not in filter)
108
- updated = tuple(a for a in updated if a not in filter)
104
+ if exclude:
105
+ if isinstance(exclude, str):
106
+ exclude = [exclude] # noqa
107
+ assigned = tuple(a for a in assigned if a not in exclude)
108
+ updated = tuple(a for a in updated if a not in exclude)
109
109
 
110
110
  for attr in assigned:
111
111
  try:
@@ -135,7 +135,7 @@ class _decorator_descriptor: # noqa
135
135
  if not _DECORATOR_HANDLES_UNBOUND_METHODS:
136
136
  def __init__(self, wrapper, fn):
137
137
  self._wrapper, self._fn = wrapper, fn
138
- update_wrapper(self, fn, filter='__dict__')
138
+ update_wrapper(self, fn, exclude='__dict__')
139
139
 
140
140
  def __get__(self, instance, owner=None):
141
141
  return functools.update_wrapper(functools.partial(self._wrapper, fn := self._fn.__get__(instance, owner)), fn) # noqa
@@ -144,7 +144,7 @@ class _decorator_descriptor: # noqa
144
144
  def __init__(self, wrapper, fn):
145
145
  self._wrapper, self._fn = wrapper, fn
146
146
  self._md = _has_method_descriptor(fn)
147
- update_wrapper(self, fn, filter='__dict__')
147
+ update_wrapper(self, fn, exclude='__dict__')
148
148
 
149
149
  def __get__(self, instance, owner=None):
150
150
  fn = self._fn.__get__(instance, owner)
@@ -174,7 +174,7 @@ class _decorator_descriptor: # noqa
174
174
  class _decorator: # noqa
175
175
  def __init__(self, wrapper):
176
176
  self._wrapper = wrapper
177
- update_wrapper(self, wrapper, filter='__dict__')
177
+ update_wrapper(self, wrapper, exclude='__dict__')
178
178
 
179
179
  def __repr__(self):
180
180
  return f'{self.__class__.__name__}<{self._wrapper}>'
@@ -14,7 +14,7 @@ def prefix_delimited(s: StrOrBytesT, p: StrOrBytesT, d: StrOrBytesT) -> StrOrByt
14
14
 
15
15
 
16
16
  def prefix_lines(s: StrOrBytesT, p: StrOrBytesT) -> StrOrBytesT:
17
- return prefix_delimited(s, p, '\n' if isinstance(s, str) else b'\n')
17
+ return prefix_delimited(s, p, '\n' if isinstance(s, str) else b'\n') # type: ignore
18
18
 
19
19
 
20
20
  def indent_lines(s: StrOrBytesT, num: StrOrBytesT) -> StrOrBytesT:
@@ -246,29 +246,30 @@ def register_opj_marshaler(ty: ta.Any, m: ObjMarshaler) -> None:
246
246
 
247
247
 
248
248
  def _make_obj_marshaler(ty: ta.Any) -> ObjMarshaler:
249
- if isinstance(ty, type) and abc.ABC in ty.__bases__:
250
- impls = [ # type: ignore
251
- PolymorphicObjMarshaler.Impl(
252
- ity,
253
- ity.__qualname__,
254
- get_obj_marshaler(ity),
249
+ if isinstance(ty, type):
250
+ if abc.ABC in ty.__bases__:
251
+ impls = [ # type: ignore
252
+ PolymorphicObjMarshaler.Impl(
253
+ ity,
254
+ ity.__qualname__,
255
+ get_obj_marshaler(ity),
256
+ )
257
+ for ity in deep_subclasses(ty)
258
+ if abc.ABC not in ity.__bases__
259
+ ]
260
+ return PolymorphicObjMarshaler(
261
+ {i.ty: i for i in impls},
262
+ {i.tag: i for i in impls},
263
+ )
264
+
265
+ if issubclass(ty, enum.Enum):
266
+ return EnumObjMarshaler(ty)
267
+
268
+ if dc.is_dataclass(ty):
269
+ return DataclassObjMarshaler(
270
+ ty,
271
+ {f.name: get_obj_marshaler(f.type) for f in dc.fields(ty)},
255
272
  )
256
- for ity in deep_subclasses(ty)
257
- if abc.ABC not in ity.__bases__
258
- ]
259
- return PolymorphicObjMarshaler(
260
- {i.ty: i for i in impls},
261
- {i.tag: i for i in impls},
262
- )
263
-
264
- if isinstance(ty, type) and issubclass(ty, enum.Enum):
265
- return EnumObjMarshaler(ty)
266
-
267
- if dc.is_dataclass(ty):
268
- return DataclassObjMarshaler(
269
- ty,
270
- {f.name: get_obj_marshaler(f.type) for f in dc.fields(ty)},
271
- )
272
273
 
273
274
  if is_generic_alias(ty):
274
275
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev62
3
+ Version: 0.0.0.dev64
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '~=3.12'
15
- version = '0.0.0.dev62'
15
+ version = '0.0.0.dev64'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -1,75 +0,0 @@
1
- import typing as ta
2
- import urllib.request
3
-
4
- from .. import dataclasses as dc
5
- from ..formats import json
6
-
7
-
8
- @dc.dataclass(frozen=True)
9
- class HubRepoInfo:
10
- repo: str
11
- tags: ta.Mapping[str, ta.Any]
12
- latest_manifests: ta.Mapping[str, ta.Any]
13
-
14
-
15
- def get_hub_repo_info(
16
- repo: str,
17
- *,
18
- auth_url: str = 'https://auth.docker.io/',
19
- api_url: str = 'https://registry-1.docker.io/v2/',
20
- ) -> HubRepoInfo:
21
- """
22
- https://stackoverflow.com/a/39376254
23
-
24
- ==
25
-
26
- repo=library/nginx
27
- token=$(
28
- curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" \
29
- | jq -r '.token' \
30
- )
31
- curl -H "Authorization: Bearer $token" -s "https://registry-1.docker.io/v2/${repo}/tags/list" | jq
32
- curl \
33
- -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
34
- -H "Accept: application/vnd.docker.distribution.manifest.list.v2+json" \
35
- -H "Authorization: Bearer $token" \
36
- -s "https://registry-1.docker.io/v2/${repo}/manifests/latest" \
37
- | jq .
38
- """
39
-
40
- auth_url = auth_url.rstrip('/')
41
- api_url = api_url.rstrip('/')
42
-
43
- #
44
-
45
- def req_json(url: str, **kwargs: ta.Any) -> ta.Any:
46
- with urllib.request.urlopen(urllib.request.Request(url, **kwargs)) as resp: # noqa
47
- return json.loads(resp.read().decode('utf-8'))
48
-
49
- #
50
-
51
- token_dct = req_json(f'{auth_url}/token?service=registry.docker.io&scope=repository:{repo}:pull')
52
- token = token_dct['token']
53
-
54
- req_hdrs = {'Authorization': f'Bearer {token}'}
55
-
56
- #
57
-
58
- tags_dct = req_json(
59
- f'{api_url}/{repo}/tags/list',
60
- headers=req_hdrs,
61
- )
62
-
63
- latest_mani_dct = req_json(
64
- f'{api_url}/{repo}/manifests/latest',
65
- headers={
66
- **req_hdrs,
67
- 'Accept': 'application/vnd.docker.distribution.manifest.v2+json',
68
- },
69
- )
70
-
71
- return HubRepoInfo(
72
- repo,
73
- tags_dct,
74
- latest_mani_dct,
75
- )
File without changes
File without changes
File without changes