omlish 0.0.0.dev38__tar.gz → 0.0.0.dev40__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 (334) hide show
  1. {omlish-0.0.0.dev38/omlish.egg-info → omlish-0.0.0.dev40}/PKG-INFO +13 -11
  2. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/README.rst +8 -0
  3. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/__about__.py +7 -4
  4. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/argparse.py +2 -2
  5. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/base.py +1 -1
  6. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/c3.py +6 -3
  7. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/check.py +33 -23
  8. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/concurrent/threadlets.py +1 -1
  9. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/pycharm.py +2 -2
  10. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/docker.py +4 -1
  11. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/base.py +5 -5
  12. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/core.py +1 -2
  13. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/metadata.py +1 -2
  14. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/parse.py +3 -4
  15. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/validation.py +1 -2
  16. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/__init__.py +2 -4
  17. omlish-0.0.0.dev40/omlish/testing/pytest/marks.py +18 -0
  18. omlish-0.0.0.dev38/omlish/testing/pytest/marks.py → omlish-0.0.0.dev40/omlish/testing/pytest/skip.py +5 -20
  19. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40/omlish.egg-info}/PKG-INFO +13 -11
  20. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish.egg-info/SOURCES.txt +1 -0
  21. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish.egg-info/requires.txt +6 -4
  22. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/pyproject.toml +6 -4
  23. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/LICENSE +0 -0
  24. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/MANIFEST.in +0 -0
  25. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/.manifests.json +0 -0
  26. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/__init__.py +0 -0
  27. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/__init__.py +0 -0
  28. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/anyio.py +0 -0
  29. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/asyncio.py +0 -0
  30. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/asyncs.py +0 -0
  31. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/bridge.py +0 -0
  32. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/flavors.py +0 -0
  33. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/trio.py +0 -0
  34. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/asyncs/trio_asyncio.py +0 -0
  35. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/__init__.py +0 -0
  36. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/__main__.py +0 -0
  37. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/diag.py +0 -0
  38. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/harness.py +0 -0
  39. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/main.py +0 -0
  40. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/marshal.py +0 -0
  41. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/bootstrap/sys.py +0 -0
  42. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/cached.py +0 -0
  43. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/__init__.py +0 -0
  44. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/_abc.py +0 -0
  45. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/_io_abc.py +0 -0
  46. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/cache/__init__.py +0 -0
  47. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/cache/descriptor.py +0 -0
  48. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/cache/impl.py +0 -0
  49. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/cache/types.py +0 -0
  50. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/coerce.py +0 -0
  51. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/exceptions.py +0 -0
  52. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/frozen.py +0 -0
  53. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/identity.py +0 -0
  54. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/indexed.py +0 -0
  55. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/mappings.py +0 -0
  56. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/ordered.py +0 -0
  57. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/persistent.py +0 -0
  58. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/skiplist.py +0 -0
  59. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/sorted.py +0 -0
  60. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/treap.py +0 -0
  61. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/treapmap.py +0 -0
  62. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/unmodifiable.py +0 -0
  63. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/collections/utils.py +0 -0
  64. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/concurrent/__init__.py +0 -0
  65. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/concurrent/executors.py +0 -0
  66. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/concurrent/futures.py +0 -0
  67. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/configs/__init__.py +0 -0
  68. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/configs/classes.py +0 -0
  69. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/configs/flattening.py +0 -0
  70. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/configs/strings.py +0 -0
  71. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/__init__.py +0 -0
  72. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/LICENSE +0 -0
  73. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/__init__.py +0 -0
  74. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/api.py +0 -0
  75. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/as_.py +0 -0
  76. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/copy.py +0 -0
  77. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/descriptors.py +0 -0
  78. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/exceptions.py +0 -0
  79. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/fields.py +0 -0
  80. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/frozen.py +0 -0
  81. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/hashing.py +0 -0
  82. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/init.py +0 -0
  83. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/internals.py +0 -0
  84. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/main.py +0 -0
  85. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/metaclass.py +0 -0
  86. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/metadata.py +0 -0
  87. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/order.py +0 -0
  88. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/params.py +0 -0
  89. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/processing.py +0 -0
  90. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/reflect.py +0 -0
  91. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/replace.py +0 -0
  92. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/repr.py +0 -0
  93. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/simple.py +0 -0
  94. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/slots.py +0 -0
  95. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/impl/utils.py +0 -0
  96. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dataclasses/utils.py +0 -0
  97. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/datetimes.py +0 -0
  98. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/defs.py +0 -0
  99. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/__init__.py +0 -0
  100. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/asts.py +0 -0
  101. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/procfs.py +0 -0
  102. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/procstats.py +0 -0
  103. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/ps.py +0 -0
  104. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/pydevd.py +0 -0
  105. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/replserver/__init__.py +0 -0
  106. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/replserver/__main__.py +0 -0
  107. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/replserver/console.py +0 -0
  108. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/replserver/server.py +0 -0
  109. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/diag/threads.py +0 -0
  110. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dispatch/__init__.py +0 -0
  111. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dispatch/_dispatch2.py +0 -0
  112. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dispatch/_dispatch3.py +0 -0
  113. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dispatch/dispatch.py +0 -0
  114. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dispatch/functions.py +0 -0
  115. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dispatch/methods.py +0 -0
  116. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/dynamic.py +0 -0
  117. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/fnpairs.py +0 -0
  118. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/fnpipes.py +0 -0
  119. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/formats/__init__.py +0 -0
  120. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/formats/dotenv.py +0 -0
  121. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/formats/json.py +0 -0
  122. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/formats/props.py +0 -0
  123. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/formats/yaml.py +0 -0
  124. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/genmachine.py +0 -0
  125. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/__init__.py +0 -0
  126. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/dags.py +0 -0
  127. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/domination.py +0 -0
  128. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/dot/__init__.py +0 -0
  129. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/dot/items.py +0 -0
  130. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/dot/make.py +0 -0
  131. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/dot/rendering.py +0 -0
  132. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/dot/utils.py +0 -0
  133. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/graphs/trees.py +0 -0
  134. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/__init__.py +0 -0
  135. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/asgi.py +0 -0
  136. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/collections.py +0 -0
  137. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/consts.py +0 -0
  138. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/cookies.py +0 -0
  139. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/dates.py +0 -0
  140. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/encodings.py +0 -0
  141. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/json.py +0 -0
  142. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/sessions.py +0 -0
  143. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/http/wsgi.py +0 -0
  144. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/__init__.py +0 -0
  145. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/binder.py +0 -0
  146. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/bindings.py +0 -0
  147. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/eagers.py +0 -0
  148. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/elements.py +0 -0
  149. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/exceptions.py +0 -0
  150. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/__init__.py +0 -0
  151. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/bindings.py +0 -0
  152. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/elements.py +0 -0
  153. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/injector.py +0 -0
  154. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/inspect.py +0 -0
  155. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/multis.py +0 -0
  156. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/origins.py +0 -0
  157. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/privates.py +0 -0
  158. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/providers.py +0 -0
  159. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/proxy.py +0 -0
  160. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/impl/scopes.py +0 -0
  161. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/injector.py +0 -0
  162. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/inspect.py +0 -0
  163. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/keys.py +0 -0
  164. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/listeners.py +0 -0
  165. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/managed.py +0 -0
  166. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/multis.py +0 -0
  167. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/origins.py +0 -0
  168. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/overrides.py +0 -0
  169. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/privates.py +0 -0
  170. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/providers.py +0 -0
  171. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/scopes.py +0 -0
  172. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/types.py +0 -0
  173. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/inject/utils.py +0 -0
  174. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/iterators.py +0 -0
  175. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/__init__.py +0 -0
  176. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/cached.py +0 -0
  177. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/classes/__init__.py +0 -0
  178. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/classes/abstract.py +0 -0
  179. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/classes/restrict.py +0 -0
  180. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/classes/simple.py +0 -0
  181. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/classes/virtual.py +0 -0
  182. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/clsdct.py +0 -0
  183. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/cmp.py +0 -0
  184. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/contextmanagers.py +0 -0
  185. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/datetimes.py +0 -0
  186. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/descriptors.py +0 -0
  187. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/exceptions.py +0 -0
  188. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/functions.py +0 -0
  189. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/imports.py +0 -0
  190. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/iterables.py +0 -0
  191. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/maybes.py +0 -0
  192. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/objects.py +0 -0
  193. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/resolving.py +0 -0
  194. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/resources.py +0 -0
  195. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/strings.py +0 -0
  196. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/sys.py +0 -0
  197. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/timeouts.py +0 -0
  198. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lang/typing.py +0 -0
  199. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/libc.py +0 -0
  200. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/__init__.py +0 -0
  201. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/abstract.py +0 -0
  202. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/base.py +0 -0
  203. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/contextmanagers.py +0 -0
  204. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/controller.py +0 -0
  205. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/manager.py +0 -0
  206. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/states.py +0 -0
  207. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lifecycles/transitions.py +0 -0
  208. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/__init__.py +0 -0
  209. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/cached.py +0 -0
  210. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/check.py +0 -0
  211. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/contextmanagers.py +0 -0
  212. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/json.py +0 -0
  213. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/logs.py +0 -0
  214. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/marshal.py +0 -0
  215. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/reflect.py +0 -0
  216. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/runtime.py +0 -0
  217. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/secrets.py +0 -0
  218. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/strings.py +0 -0
  219. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/lite/subprocesses.py +0 -0
  220. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/__init__.py +0 -0
  221. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/_abc.py +0 -0
  222. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/configs.py +0 -0
  223. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/formatters.py +0 -0
  224. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/handlers.py +0 -0
  225. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/noisy.py +0 -0
  226. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/logs/utils.py +0 -0
  227. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/__init__.py +0 -0
  228. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/any.py +0 -0
  229. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/base.py +0 -0
  230. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/base64.py +0 -0
  231. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/dataclasses.py +0 -0
  232. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/datetimes.py +0 -0
  233. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/enums.py +0 -0
  234. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/exceptions.py +0 -0
  235. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/factories.py +0 -0
  236. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/forbidden.py +0 -0
  237. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/global_.py +0 -0
  238. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/helpers.py +0 -0
  239. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/iterables.py +0 -0
  240. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/mappings.py +0 -0
  241. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/maybes.py +0 -0
  242. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/naming.py +0 -0
  243. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/numbers.py +0 -0
  244. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/objects.py +0 -0
  245. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/optionals.py +0 -0
  246. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/polymorphism.py +0 -0
  247. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/primitives.py +0 -0
  248. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/registries.py +0 -0
  249. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/standard.py +0 -0
  250. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/unions.py +0 -0
  251. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/utils.py +0 -0
  252. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/uuids.py +0 -0
  253. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/marshal/values.py +0 -0
  254. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/matchfns.py +0 -0
  255. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/math/__init__.py +0 -0
  256. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/math/bits.py +0 -0
  257. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/math/floats.py +0 -0
  258. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/math/stats.py +0 -0
  259. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/multiprocessing.py +0 -0
  260. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/os.py +0 -0
  261. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/reflect/__init__.py +0 -0
  262. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/reflect/isinstance.py +0 -0
  263. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/reflect/ops.py +0 -0
  264. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/reflect/subst.py +0 -0
  265. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/reflect/types.py +0 -0
  266. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/runmodule.py +0 -0
  267. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/__init__.py +0 -0
  268. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/crypto.py +0 -0
  269. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/marshal.py +0 -0
  270. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/openssl.py +0 -0
  271. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/passwords.py +0 -0
  272. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/secrets.py +0 -0
  273. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/secrets/subprocesses.py +0 -0
  274. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/__init__.py +0 -0
  275. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonrpc/__init__.py +0 -0
  276. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonrpc/errors.py +0 -0
  277. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonrpc/marshal.py +0 -0
  278. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonrpc/types.py +0 -0
  279. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/__init__.py +0 -0
  280. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/__init__.py +0 -0
  281. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/keywords/render.py +0 -0
  282. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/__init__.py +0 -0
  283. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/__init__.py +0 -0
  284. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/metaschema.json +0 -0
  285. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/__init__.py +0 -0
  286. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/applicator.json +0 -0
  287. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/content.json +0 -0
  288. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/core.json +0 -0
  289. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-annotation.json +0 -0
  290. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-assertion.json +0 -0
  291. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format.json +0 -0
  292. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/meta-data.json +0 -0
  293. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/unevaluated.json +0 -0
  294. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json +0 -0
  295. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/specs/jsonschema/types.py +0 -0
  296. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/__init__.py +0 -0
  297. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/_abc.py +0 -0
  298. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/alchemy/__init__.py +0 -0
  299. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/alchemy/asyncs.py +0 -0
  300. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/alchemy/duckdb.py +0 -0
  301. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/alchemy/exprs.py +0 -0
  302. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/alchemy/secrets.py +0 -0
  303. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/alchemy/sqlean.py +0 -0
  304. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/dbs.py +0 -0
  305. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sql/qualifiedname.py +0 -0
  306. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/sync.py +0 -0
  307. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/term.py +0 -0
  308. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/__init__.py +0 -0
  309. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/helpers.py +0 -0
  310. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/inject/__init__.py +0 -0
  311. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/inject/harness.py +0 -0
  312. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/__init__.py +0 -0
  313. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/_registry.py +0 -0
  314. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/asyncs.py +0 -0
  315. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/depskip.py +0 -0
  316. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/logging.py +0 -0
  317. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/managermarks.py +0 -0
  318. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/pydevd.py +0 -0
  319. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/repeat.py +0 -0
  320. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/skips.py +0 -0
  321. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/spacing.py +0 -0
  322. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/switches.py +0 -0
  323. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/pytest/plugins/utils.py +0 -0
  324. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/testing/testing.py +0 -0
  325. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/text/__init__.py +0 -0
  326. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/text/asdl.py +0 -0
  327. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/text/delimit.py +0 -0
  328. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/text/glyphsplit.py +0 -0
  329. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/text/indent.py +0 -0
  330. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish/text/parts.py +0 -0
  331. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish.egg-info/dependency_links.txt +0 -0
  332. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish.egg-info/entry_points.txt +0 -0
  333. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/omlish.egg-info/top_level.txt +0 -0
  334. {omlish-0.0.0.dev38 → omlish-0.0.0.dev40}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev38
3
+ Version: 0.0.0.dev40
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -18,7 +18,7 @@ Requires-Dist: sniffio~=1.3; extra == "all"
18
18
  Requires-Dist: greenlet~=3.1; extra == "all"
19
19
  Requires-Dist: trio~=0.26; extra == "all"
20
20
  Requires-Dist: trio-asyncio~=0.15; extra == "all"
21
- Requires-Dist: lz4~=4.0; extra == "all"
21
+ Requires-Dist: lz4~=4.3; extra == "all"
22
22
  Requires-Dist: python-snappy~=0.7; python_version < "3.13" and extra == "all"
23
23
  Requires-Dist: zstd~=1.5; extra == "all"
24
24
  Requires-Dist: asttokens~=2.4; extra == "all"
@@ -39,6 +39,7 @@ Requires-Dist: pymysql~=1.1; extra == "all"
39
39
  Requires-Dist: aiomysql~=0.2; extra == "all"
40
40
  Requires-Dist: aiosqlite~=0.20; extra == "all"
41
41
  Requires-Dist: asyncpg~=0.29; python_version < "3.13" and extra == "all"
42
+ Requires-Dist: apsw~=3.46; extra == "all"
42
43
  Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "all"
43
44
  Requires-Dist: duckdb~=1.1; extra == "all"
44
45
  Requires-Dist: pytest~=8.0; extra == "all"
@@ -49,7 +50,7 @@ Requires-Dist: greenlet~=3.1; extra == "async"
49
50
  Requires-Dist: trio~=0.26; extra == "async"
50
51
  Requires-Dist: trio-asyncio~=0.15; extra == "async"
51
52
  Provides-Extra: compress
52
- Requires-Dist: lz4~=4.0; extra == "compress"
53
+ Requires-Dist: lz4~=4.3; extra == "compress"
53
54
  Requires-Dist: python-snappy~=0.7; python_version < "3.13" and extra == "compress"
54
55
  Requires-Dist: zstd~=1.5; extra == "compress"
55
56
  Provides-Extra: diag
@@ -71,13 +72,14 @@ Provides-Extra: secrets
71
72
  Requires-Dist: cryptography~=43.0; extra == "secrets"
72
73
  Provides-Extra: sqlalchemy
73
74
  Requires-Dist: sqlalchemy[asyncio]~=2.0; extra == "sqlalchemy"
74
- Provides-Extra: sqlalchemy-drivers
75
- Requires-Dist: pg8000~=1.31; extra == "sqlalchemy-drivers"
76
- Requires-Dist: pymysql~=1.1; extra == "sqlalchemy-drivers"
77
- Requires-Dist: aiomysql~=0.2; extra == "sqlalchemy-drivers"
78
- Requires-Dist: aiosqlite~=0.20; extra == "sqlalchemy-drivers"
79
- Requires-Dist: asyncpg~=0.29; python_version < "3.13" and extra == "sqlalchemy-drivers"
80
- Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "sqlalchemy-drivers"
81
- Requires-Dist: duckdb~=1.1; extra == "sqlalchemy-drivers"
75
+ Provides-Extra: sqldrivers
76
+ Requires-Dist: pg8000~=1.31; extra == "sqldrivers"
77
+ Requires-Dist: pymysql~=1.1; extra == "sqldrivers"
78
+ Requires-Dist: aiomysql~=0.2; extra == "sqldrivers"
79
+ Requires-Dist: aiosqlite~=0.20; extra == "sqldrivers"
80
+ Requires-Dist: asyncpg~=0.29; python_version < "3.13" and extra == "sqldrivers"
81
+ Requires-Dist: apsw~=3.46; extra == "sqldrivers"
82
+ Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "sqldrivers"
83
+ Requires-Dist: duckdb~=1.1; extra == "sqldrivers"
82
84
  Provides-Extra: testing
83
85
  Requires-Dist: pytest~=8.0; extra == "testing"
@@ -11,3 +11,11 @@ Core packages installable from git via:
11
11
 
12
12
  Core packages have no required dependencies, but numerous optional ones - see their respective ``pyproject.toml`` files
13
13
  for details.
14
+
15
+ The cli is installable through uvx or pipx via:
16
+
17
+ .. code-block::
18
+
19
+ curl -LsSf https://raw.githubusercontent.com/wrmsr/omlish/master/omdev/cli/install.py | python3 -
20
+
21
+ Additional deps to be injected may be appended to the command.
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev38'
2
- __revision__ = 'ff24c9ed55c341bfc1359f26dcd421346f5822ba-dirty'
1
+ __version__ = '0.0.0.dev40'
2
+ __revision__ = '12eed3861e67278bb050cec10f1ebd2296c0bbe9-dirty'
3
3
 
4
4
 
5
5
  #
@@ -40,7 +40,8 @@ class Project(ProjectBase):
40
40
  ],
41
41
 
42
42
  'compress': [
43
- 'lz4 ~= 4.0',
43
+ 'lz4 ~= 4.3',
44
+ # 'lz4 @ git+https://github.com/wrmsr/python-lz4@wrmsr_20240830_GIL_NOT_USED'
44
45
 
45
46
  'python-snappy ~= 0.7; python_version < "3.13"',
46
47
 
@@ -83,7 +84,7 @@ class Project(ProjectBase):
83
84
  'sqlalchemy[asyncio] ~= 2.0',
84
85
  ],
85
86
 
86
- 'sqlalchemy-drivers': [
87
+ 'sqldrivers': [
87
88
  'pg8000 ~= 1.31',
88
89
  # 'psycopg2 ~= 2.9',
89
90
  # 'psycopg ~= 3.2',
@@ -96,6 +97,8 @@ class Project(ProjectBase):
96
97
  'aiosqlite ~= 0.20',
97
98
  'asyncpg ~= 0.29; python_version < "3.13"',
98
99
 
100
+ 'apsw ~= 3.46',
101
+
99
102
  'sqlean.py ~= 3.45; python_version < "3.13"',
100
103
 
101
104
  'duckdb ~= 1.1',
@@ -73,7 +73,7 @@ class Command:
73
73
 
74
74
  def __post_init__(self) -> None:
75
75
  check.isinstance(self.name, str)
76
- check.not_in('-', self.name)
76
+ check.not_in('_', self.name)
77
77
  check.not_empty(self.name)
78
78
 
79
79
  check.callable(self.fn)
@@ -103,7 +103,7 @@ def command(
103
103
 
104
104
  def inner(fn):
105
105
  return Command(
106
- (name if name is not None else fn.__name__).replace('-', '_'),
106
+ (name if name is not None else fn.__name__).replace('_', '-'),
107
107
  fn,
108
108
  args,
109
109
  parent=parent,
@@ -2,7 +2,7 @@ import abc
2
2
  import dataclasses as dc
3
3
  import typing as ta
4
4
 
5
- from omlish import lang
5
+ from .. import lang
6
6
 
7
7
 
8
8
  BootstrapConfigT = ta.TypeVar('BootstrapConfigT', bound='Bootstrap.Config')
@@ -43,7 +43,8 @@ T = ta.TypeVar('T')
43
43
 
44
44
 
45
45
  def merge(seqs: ta.MutableSequence[list[T]]) -> list[T]:
46
- """Merges MROs in *sequences* to a single MRO using the C3 algorithm.
46
+ """
47
+ Merges MROs in *sequences* to a single MRO using the C3 algorithm.
47
48
 
48
49
  Adapted from https://www.python.org/download/releases/2.3/mro/.
49
50
  """
@@ -78,7 +79,8 @@ def mro(
78
79
  get_bases: ta.Callable[[T], ta.Sequence[T]] = operator.attrgetter('__bases__'),
79
80
  is_subclass: ta.Callable[[T, T], bool] = issubclass, # type: ignore
80
81
  ) -> list[T]:
81
- """Computes the method resolution order using extended C3 linearization.
82
+ """
83
+ Computes the method resolution order using extended C3 linearization.
82
84
 
83
85
  If no *abcs* are given, the algorithm works exactly like the built-in C3 linearization used for method resolution.
84
86
 
@@ -128,7 +130,8 @@ def compose_mro(
128
130
  is_subclass: ta.Callable[[T, T], bool] = issubclass, # type: ignore
129
131
  get_subclasses: ta.Callable[[T], ta.Iterable[T]] = operator.methodcaller('__subclasses__'),
130
132
  ) -> list[T]:
131
- """Calculates the method resolution order for a given class *cls*.
133
+ """
134
+ Calculates the method resolution order for a given class *cls*.
132
135
 
133
136
  Includes relevant abstract base classes (with their respective bases) from the *types* list. Uses a modified C3
134
137
  linearization algorithm.
@@ -44,41 +44,49 @@ def unregister_on_raise(fn: OnRaiseFn) -> None:
44
44
  #
45
45
 
46
46
 
47
- _render_args: ta.Callable[..., str | None] | None = None
47
+ _ARGS_RENDERER: ta.Callable[..., str | None] | None = None
48
48
 
49
49
 
50
- def enable_args_rendering() -> bool:
51
- global _render_args
52
- if _render_args is not None:
50
+ def _try_enable_args_rendering() -> bool:
51
+ global _ARGS_RENDERER
52
+ if _ARGS_RENDERER is not None:
53
53
  return True
54
54
 
55
- with _CONFIG_LOCK:
56
- if _render_args is not None:
57
- return True # type: ignore
55
+ try:
56
+ from .diag.asts import ArgsRenderer
58
57
 
59
- try:
60
- from .diag.asts import ArgsRenderer
58
+ ArgsRenderer.smoketest()
61
59
 
62
- ArgsRenderer.smoketest()
60
+ except Exception: # noqa
61
+ return False
63
62
 
64
- except Exception: # noqa
65
- return False
63
+ def _real_render_args(fmt: str, *args: ta.Any) -> str | None:
64
+ ra = ArgsRenderer(back=3).render_args(*args)
65
+ if ra is None:
66
+ return None
66
67
 
67
- def _real_render_args(fmt: str, *args: ta.Any) -> str | None:
68
- ra = ArgsRenderer(back=3).render_args(*args)
69
- if ra is None:
70
- return None
68
+ return fmt % tuple(str(a) for a in ra)
71
69
 
72
- return fmt % tuple(str(a) for a in ra)
70
+ _ARGS_RENDERER = _real_render_args
71
+ return True
73
72
 
74
- _render_args = _real_render_args
75
- return True
76
73
 
74
+ _TRIED_ENABLED_ARGS_RENDERING: bool | None = None
77
75
 
78
- enable_args_rendering()
79
76
 
77
+ def try_enable_args_rendering() -> bool:
78
+ global _TRIED_ENABLED_ARGS_RENDERING
79
+ if _TRIED_ENABLED_ARGS_RENDERING is not None:
80
+ return _TRIED_ENABLED_ARGS_RENDERING
80
81
 
81
- #
82
+ with _CONFIG_LOCK:
83
+ if _TRIED_ENABLED_ARGS_RENDERING is None:
84
+ _TRIED_ENABLED_ARGS_RENDERING = _try_enable_args_rendering()
85
+
86
+ return _TRIED_ENABLED_ARGS_RENDERING
87
+
88
+
89
+ ##
82
90
 
83
91
 
84
92
  def _default_exception_factory(exc_cls: type[Exception], *args, **kwargs) -> Exception:
@@ -111,8 +119,8 @@ def _raise(
111
119
  if message is None:
112
120
  message = default_message
113
121
 
114
- if render_fmt is not None and _render_args is not None:
115
- rendered_args = _render_args(render_fmt, *ak.args)
122
+ if render_fmt is not None and _ARGS_RENDERER is not None:
123
+ rendered_args = _ARGS_RENDERER(render_fmt, *ak.args)
116
124
  if rendered_args is not None:
117
125
  message = f'{message} : {rendered_args}'
118
126
 
@@ -124,6 +132,8 @@ def _raise(
124
132
  **ak.kwargs,
125
133
  )
126
134
 
135
+ try_enable_args_rendering()
136
+
127
137
  for fn in _ON_RAISE:
128
138
  fn(exc)
129
139
 
@@ -7,7 +7,7 @@ import abc
7
7
  import dataclasses as dc
8
8
  import typing as ta
9
9
 
10
- from omlish import lang
10
+ from .. import lang
11
11
 
12
12
 
13
13
  if ta.TYPE_CHECKING:
@@ -9,9 +9,9 @@ from .. import lang
9
9
 
10
10
 
11
11
  if ta.TYPE_CHECKING:
12
- docker = lang.proxy_import('omlish.docker')
12
+ docker = lang.proxy_import('..docker')
13
13
  else:
14
- from omlish import docker
14
+ from .. import docker
15
15
 
16
16
 
17
17
  ##
@@ -159,7 +159,10 @@ def get_compose_port(cfg: ta.Mapping[str, ta.Any], default: int) -> int:
159
159
  ##
160
160
 
161
161
 
162
- def timebomb_payload(delay_s: float, name: str = 'omlish-docker-timebomb') -> str:
162
+ _DEFAULT_TIMEBOMB_NAME = '-'.join([*__name__.split('.'), 'timebomb'])
163
+
164
+
165
+ def timebomb_payload(delay_s: float, name: str = _DEFAULT_TIMEBOMB_NAME) -> str:
163
166
  return (
164
167
  '('
165
168
  f'echo {shlex.quote(name)} && '
@@ -1,11 +1,11 @@
1
1
  import operator
2
2
  import typing as ta
3
3
 
4
- from omlish import cached
5
- from omlish import check
6
- from omlish import collections as col
7
- from omlish import dataclasses as dc
8
- from omlish import lang
4
+ from .... import cached
5
+ from .... import check
6
+ from .... import collections as col
7
+ from .... import dataclasses as dc
8
+ from .... import lang
9
9
 
10
10
 
11
11
  KeywordT = ta.TypeVar('KeywordT', bound='Keyword')
@@ -1,5 +1,4 @@
1
- from omlish import lang
2
-
1
+ from .... import lang
3
2
  from .base import Keyword
4
3
  from .base import StrKeyword
5
4
 
@@ -1,5 +1,4 @@
1
- from omlish import lang
2
-
1
+ from .... import lang
3
2
  from .base import Keyword
4
3
  from .base import StrKeyword
5
4
 
@@ -1,10 +1,9 @@
1
1
  import operator
2
2
  import typing as ta
3
3
 
4
- from omlish import check
5
- from omlish import collections as col
6
- from omlish import lang
7
-
4
+ from .... import check
5
+ from .... import collections as col
6
+ from .... import lang
8
7
  from . import core # noqa
9
8
  from . import metadata # noqa
10
9
  from . import validation # noqa
@@ -1,5 +1,4 @@
1
- from omlish import lang
2
-
1
+ from .... import lang
3
2
  from .base import BooleanKeyword
4
3
  from .base import Keyword
5
4
  from .base import KeywordsKeyword
@@ -4,11 +4,9 @@ from .helpers import ( # noqa
4
4
 
5
5
  from .marks import ( # noqa
6
6
  drain_asyncio,
7
- skip_if_cant_import,
8
- skip_if_nogil,
9
- skip_if_not_on_path,
10
- skip_if_python_version_less_than,
11
7
  )
12
8
 
9
+ from . import skip # noqa
10
+
13
11
  # Imported for convenience in things that import this but not lang.
14
12
  from ...lang import breakpoint_on_exception # noqa
@@ -0,0 +1,18 @@
1
+ import typing as ta
2
+
3
+ import pytest
4
+
5
+ from ... import lang # noqa
6
+ from .plugins.managermarks import ManagerMark # noqa
7
+
8
+
9
+ if ta.TYPE_CHECKING:
10
+ from ...asyncs import asyncio as aiu
11
+ else:
12
+ aiu = lang.proxy_import('...asyncs.asyncio', __package__)
13
+
14
+
15
+ class drain_asyncio(ManagerMark): # noqa
16
+ def __call__(self, item: pytest.Function) -> ta.Iterator[None]:
17
+ with aiu.draining_asyncio_tasks():
18
+ yield
@@ -5,41 +5,26 @@ import typing as ta
5
5
 
6
6
  import pytest
7
7
 
8
- from ... import lang # noqa
9
8
  from ..testing import can_import
10
- from .plugins.managermarks import ManagerMark # noqa
11
9
 
12
10
 
13
- if ta.TYPE_CHECKING:
14
- from ...asyncs import asyncio as aiu
15
-
16
- else:
17
- aiu = lang.proxy_import('...asyncs.asyncio', __package__)
18
-
19
-
20
- def skip_if_cant_import(module: str, *args, **kwargs):
11
+ def if_cant_import(module: str, *args, **kwargs):
21
12
  return pytest.mark.skipif(not can_import(module, *args, **kwargs), reason=f'requires import {module}')
22
13
 
23
14
 
24
- def skip_if_not_on_path(exe: str):
15
+ def if_not_on_path(exe: str):
25
16
  return pytest.mark.skipif(shutil.which(exe) is None, reason=f'requires exe on path {exe}')
26
17
 
27
18
 
28
- def skip_if_python_version_less_than(num: ta.Sequence[int]):
19
+ def if_python_version_less_than(num: ta.Sequence[int]):
29
20
  return pytest.mark.skipif(sys.version_info < tuple(num), reason=f'python version {tuple(sys.version_info)} < {tuple(num)}') # noqa
30
21
 
31
22
 
32
- def skip_if_not_single():
23
+ def if_not_single():
33
24
  # FIXME
34
25
  # [resolve_collection_argument(a) for a in session.config.args]
35
26
  raise NotImplementedError
36
27
 
37
28
 
38
- def skip_if_nogil():
29
+ def if_nogil():
39
30
  return pytest.mark.skipif(sysconfig.get_config_var('Py_GIL_DISABLED'), reason='requires gil build')
40
-
41
-
42
- class drain_asyncio(ManagerMark): # noqa
43
- def __call__(self, item: pytest.Function) -> ta.Iterator[None]:
44
- with aiu.draining_asyncio_tasks():
45
- yield
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev38
3
+ Version: 0.0.0.dev40
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -18,7 +18,7 @@ Requires-Dist: sniffio~=1.3; extra == "all"
18
18
  Requires-Dist: greenlet~=3.1; extra == "all"
19
19
  Requires-Dist: trio~=0.26; extra == "all"
20
20
  Requires-Dist: trio-asyncio~=0.15; extra == "all"
21
- Requires-Dist: lz4~=4.0; extra == "all"
21
+ Requires-Dist: lz4~=4.3; extra == "all"
22
22
  Requires-Dist: python-snappy~=0.7; python_version < "3.13" and extra == "all"
23
23
  Requires-Dist: zstd~=1.5; extra == "all"
24
24
  Requires-Dist: asttokens~=2.4; extra == "all"
@@ -39,6 +39,7 @@ Requires-Dist: pymysql~=1.1; extra == "all"
39
39
  Requires-Dist: aiomysql~=0.2; extra == "all"
40
40
  Requires-Dist: aiosqlite~=0.20; extra == "all"
41
41
  Requires-Dist: asyncpg~=0.29; python_version < "3.13" and extra == "all"
42
+ Requires-Dist: apsw~=3.46; extra == "all"
42
43
  Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "all"
43
44
  Requires-Dist: duckdb~=1.1; extra == "all"
44
45
  Requires-Dist: pytest~=8.0; extra == "all"
@@ -49,7 +50,7 @@ Requires-Dist: greenlet~=3.1; extra == "async"
49
50
  Requires-Dist: trio~=0.26; extra == "async"
50
51
  Requires-Dist: trio-asyncio~=0.15; extra == "async"
51
52
  Provides-Extra: compress
52
- Requires-Dist: lz4~=4.0; extra == "compress"
53
+ Requires-Dist: lz4~=4.3; extra == "compress"
53
54
  Requires-Dist: python-snappy~=0.7; python_version < "3.13" and extra == "compress"
54
55
  Requires-Dist: zstd~=1.5; extra == "compress"
55
56
  Provides-Extra: diag
@@ -71,13 +72,14 @@ Provides-Extra: secrets
71
72
  Requires-Dist: cryptography~=43.0; extra == "secrets"
72
73
  Provides-Extra: sqlalchemy
73
74
  Requires-Dist: sqlalchemy[asyncio]~=2.0; extra == "sqlalchemy"
74
- Provides-Extra: sqlalchemy-drivers
75
- Requires-Dist: pg8000~=1.31; extra == "sqlalchemy-drivers"
76
- Requires-Dist: pymysql~=1.1; extra == "sqlalchemy-drivers"
77
- Requires-Dist: aiomysql~=0.2; extra == "sqlalchemy-drivers"
78
- Requires-Dist: aiosqlite~=0.20; extra == "sqlalchemy-drivers"
79
- Requires-Dist: asyncpg~=0.29; python_version < "3.13" and extra == "sqlalchemy-drivers"
80
- Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "sqlalchemy-drivers"
81
- Requires-Dist: duckdb~=1.1; extra == "sqlalchemy-drivers"
75
+ Provides-Extra: sqldrivers
76
+ Requires-Dist: pg8000~=1.31; extra == "sqldrivers"
77
+ Requires-Dist: pymysql~=1.1; extra == "sqldrivers"
78
+ Requires-Dist: aiomysql~=0.2; extra == "sqldrivers"
79
+ Requires-Dist: aiosqlite~=0.20; extra == "sqldrivers"
80
+ Requires-Dist: asyncpg~=0.29; python_version < "3.13" and extra == "sqldrivers"
81
+ Requires-Dist: apsw~=3.46; extra == "sqldrivers"
82
+ Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "sqldrivers"
83
+ Requires-Dist: duckdb~=1.1; extra == "sqldrivers"
82
84
  Provides-Extra: testing
83
85
  Requires-Dist: pytest~=8.0; extra == "testing"
@@ -309,6 +309,7 @@ omlish/testing/testing.py
309
309
  omlish/testing/pytest/__init__.py
310
310
  omlish/testing/pytest/helpers.py
311
311
  omlish/testing/pytest/marks.py
312
+ omlish/testing/pytest/skip.py
312
313
  omlish/testing/pytest/inject/__init__.py
313
314
  omlish/testing/pytest/inject/harness.py
314
315
  omlish/testing/pytest/plugins/__init__.py
@@ -5,7 +5,7 @@ sniffio~=1.3
5
5
  greenlet~=3.1
6
6
  trio~=0.26
7
7
  trio-asyncio~=0.15
8
- lz4~=4.0
8
+ lz4~=4.3
9
9
  zstd~=1.5
10
10
  asttokens~=2.4
11
11
  executing~=2.1
@@ -24,6 +24,7 @@ pg8000~=1.31
24
24
  pymysql~=1.1
25
25
  aiomysql~=0.2
26
26
  aiosqlite~=0.20
27
+ apsw~=3.46
27
28
  duckdb~=1.1
28
29
  pytest~=8.0
29
30
 
@@ -40,7 +41,7 @@ trio~=0.26
40
41
  trio-asyncio~=0.15
41
42
 
42
43
  [compress]
43
- lz4~=4.0
44
+ lz4~=4.3
44
45
  zstd~=1.5
45
46
 
46
47
  [compress:python_version < "3.13"]
@@ -71,14 +72,15 @@ cryptography~=43.0
71
72
  [sqlalchemy]
72
73
  sqlalchemy[asyncio]~=2.0
73
74
 
74
- [sqlalchemy-drivers]
75
+ [sqldrivers]
75
76
  pg8000~=1.31
76
77
  pymysql~=1.1
77
78
  aiomysql~=0.2
78
79
  aiosqlite~=0.20
80
+ apsw~=3.46
79
81
  duckdb~=1.1
80
82
 
81
- [sqlalchemy-drivers:python_version < "3.13"]
83
+ [sqldrivers:python_version < "3.13"]
82
84
  asyncpg~=0.29
83
85
  sqlean.py~=3.45
84
86
 
@@ -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.dev38'
15
+ version = '0.0.0.dev40'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -29,7 +29,7 @@ all = [
29
29
  'greenlet ~= 3.1',
30
30
  'trio ~= 0.26',
31
31
  'trio-asyncio ~= 0.15',
32
- 'lz4 ~= 4.0',
32
+ 'lz4 ~= 4.3',
33
33
  'python-snappy ~= 0.7; python_version < "3.13"',
34
34
  'zstd ~= 1.5',
35
35
  'asttokens ~= 2.4',
@@ -50,6 +50,7 @@ all = [
50
50
  'aiomysql ~= 0.2',
51
51
  'aiosqlite ~= 0.20',
52
52
  'asyncpg ~= 0.29; python_version < "3.13"',
53
+ 'apsw ~= 3.46',
53
54
  'sqlean.py ~= 3.45; python_version < "3.13"',
54
55
  'duckdb ~= 1.1',
55
56
  'pytest ~= 8.0',
@@ -62,7 +63,7 @@ async = [
62
63
  'trio-asyncio ~= 0.15',
63
64
  ]
64
65
  compress = [
65
- 'lz4 ~= 4.0',
66
+ 'lz4 ~= 4.3',
66
67
  'python-snappy ~= 0.7; python_version < "3.13"',
67
68
  'zstd ~= 1.5',
68
69
  ]
@@ -91,12 +92,13 @@ secrets = [
91
92
  sqlalchemy = [
92
93
  'sqlalchemy[asyncio] ~= 2.0',
93
94
  ]
94
- sqlalchemy-drivers = [
95
+ sqldrivers = [
95
96
  'pg8000 ~= 1.31',
96
97
  'pymysql ~= 1.1',
97
98
  'aiomysql ~= 0.2',
98
99
  'aiosqlite ~= 0.20',
99
100
  'asyncpg ~= 0.29; python_version < "3.13"',
101
+ 'apsw ~= 3.46',
100
102
  'sqlean.py ~= 3.45; python_version < "3.13"',
101
103
  'duckdb ~= 1.1',
102
104
  ]
File without changes
File without changes