omlish 0.0.0.dev10__tar.gz → 0.0.0.dev11__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 (274) hide show
  1. {omlish-0.0.0.dev10/omlish.egg-info → omlish-0.0.0.dev11}/PKG-INFO +1 -1
  2. omlish-0.0.0.dev11/README.rst +5 -0
  3. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/__about__.py +2 -2
  4. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/methods.py +2 -15
  5. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/__init__.py +1 -0
  6. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/objects.py +25 -0
  7. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/matchfns.py +8 -2
  8. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/__init__.py +1 -0
  9. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/inject/harness.py +28 -12
  10. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/asyncs.py +16 -0
  11. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/testing.py +6 -0
  12. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11/omlish.egg-info}/PKG-INFO +1 -1
  13. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/pyproject.toml +3 -3
  14. omlish-0.0.0.dev10/README.rst +0 -1
  15. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/LICENSE +0 -0
  16. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/MANIFEST.in +0 -0
  17. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/__init__.py +0 -0
  18. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/argparse.py +0 -0
  19. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/__init__.py +0 -0
  20. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/anyio.py +0 -0
  21. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/asyncio.py +0 -0
  22. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/asyncs.py +0 -0
  23. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/bridge.py +0 -0
  24. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/flavors.py +0 -0
  25. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/trio.py +0 -0
  26. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/trio_asyncio.py +0 -0
  27. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/bootstrap.py +0 -0
  28. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/c3.py +0 -0
  29. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/cached.py +0 -0
  30. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/check.py +0 -0
  31. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/__init__.py +0 -0
  32. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/_abc.py +0 -0
  33. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/_io_abc.py +0 -0
  34. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/__init__.py +0 -0
  35. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/descriptor.py +0 -0
  36. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/impl.py +0 -0
  37. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/types.py +0 -0
  38. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/coerce.py +0 -0
  39. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/exceptions.py +0 -0
  40. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/frozen.py +0 -0
  41. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/identity.py +0 -0
  42. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/indexed.py +0 -0
  43. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/mappings.py +0 -0
  44. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/ordered.py +0 -0
  45. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/persistent.py +0 -0
  46. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/skiplist.py +0 -0
  47. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/sorted.py +0 -0
  48. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/treap.py +0 -0
  49. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/treapmap.py +0 -0
  50. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/unmodifiable.py +0 -0
  51. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/utils.py +0 -0
  52. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/concurrent.py +0 -0
  53. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/__init__.py +0 -0
  54. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/classes.py +0 -0
  55. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/flattening.py +0 -0
  56. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/strings.py +0 -0
  57. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/__init__.py +0 -0
  58. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/__init__.py +0 -0
  59. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/api.py +0 -0
  60. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/as_.py +0 -0
  61. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/copy.py +0 -0
  62. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/descriptors.py +0 -0
  63. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/exceptions.py +0 -0
  64. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/fields.py +0 -0
  65. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/frozen.py +0 -0
  66. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/hashing.py +0 -0
  67. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/init.py +0 -0
  68. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/internals.py +0 -0
  69. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/main.py +0 -0
  70. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/metaclass.py +0 -0
  71. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/metadata.py +0 -0
  72. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/order.py +0 -0
  73. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/params.py +0 -0
  74. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/processing.py +0 -0
  75. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/reflect.py +0 -0
  76. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/replace.py +0 -0
  77. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/repr.py +0 -0
  78. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/simple.py +0 -0
  79. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/slots.py +0 -0
  80. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/utils.py +0 -0
  81. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/utils.py +0 -0
  82. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/datetimes.py +0 -0
  83. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/defs.py +0 -0
  84. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/__init__.py +0 -0
  85. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/procfs.py +0 -0
  86. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/procstats.py +0 -0
  87. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/ps.py +0 -0
  88. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/pydevd.py +0 -0
  89. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/__init__.py +0 -0
  90. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/__main__.py +0 -0
  91. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/console.py +0 -0
  92. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/server.py +0 -0
  93. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/threads.py +0 -0
  94. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/__init__.py +0 -0
  95. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/_dispatch2.py +0 -0
  96. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/_dispatch3.py +0 -0
  97. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/dispatch.py +0 -0
  98. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/functions.py +0 -0
  99. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/docker.py +0 -0
  100. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dynamic.py +0 -0
  101. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/fnpairs.py +0 -0
  102. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/__init__.py +0 -0
  103. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/dotenv.py +0 -0
  104. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/json.py +0 -0
  105. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/props.py +0 -0
  106. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/yaml.py +0 -0
  107. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/__init__.py +0 -0
  108. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dags.py +0 -0
  109. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/domination.py +0 -0
  110. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/__init__.py +0 -0
  111. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/items.py +0 -0
  112. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/rendering.py +0 -0
  113. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/utils.py +0 -0
  114. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/trees.py +0 -0
  115. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/__init__.py +0 -0
  116. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/asgi.py +0 -0
  117. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/collections.py +0 -0
  118. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/consts.py +0 -0
  119. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/cookies.py +0 -0
  120. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/dates.py +0 -0
  121. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/encodings.py +0 -0
  122. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/json.py +0 -0
  123. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/sessions.py +0 -0
  124. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/wsgi.py +0 -0
  125. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/__init__.py +0 -0
  126. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/binder.py +0 -0
  127. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/bindings.py +0 -0
  128. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/eagers.py +0 -0
  129. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/elements.py +0 -0
  130. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/exceptions.py +0 -0
  131. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/__init__.py +0 -0
  132. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/bindings.py +0 -0
  133. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/elements.py +0 -0
  134. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/injector.py +0 -0
  135. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/inspect.py +0 -0
  136. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/multis.py +0 -0
  137. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/origins.py +0 -0
  138. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/privates.py +0 -0
  139. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/providers.py +0 -0
  140. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/proxy.py +0 -0
  141. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/scopes.py +0 -0
  142. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/injector.py +0 -0
  143. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/inspect.py +0 -0
  144. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/keys.py +0 -0
  145. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/listeners.py +0 -0
  146. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/managed.py +0 -0
  147. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/multis.py +0 -0
  148. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/origins.py +0 -0
  149. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/overrides.py +0 -0
  150. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/privates.py +0 -0
  151. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/providers.py +0 -0
  152. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/scopes.py +0 -0
  153. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/types.py +0 -0
  154. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/utils.py +0 -0
  155. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/iterators.py +0 -0
  156. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/cached.py +0 -0
  157. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/__init__.py +0 -0
  158. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/abstract.py +0 -0
  159. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/restrict.py +0 -0
  160. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/simple.py +0 -0
  161. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/virtual.py +0 -0
  162. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/clsdct.py +0 -0
  163. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/cmp.py +0 -0
  164. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/contextmanagers.py +0 -0
  165. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/descriptors.py +0 -0
  166. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/exceptions.py +0 -0
  167. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/functions.py +0 -0
  168. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/imports.py +0 -0
  169. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/iterables.py +0 -0
  170. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/maybes.py +0 -0
  171. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/resolving.py +0 -0
  172. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/strings.py +0 -0
  173. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/sys.py +0 -0
  174. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/timeouts.py +0 -0
  175. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/typing.py +0 -0
  176. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/libc.py +0 -0
  177. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/__init__.py +0 -0
  178. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/abstract.py +0 -0
  179. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/base.py +0 -0
  180. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/contextmanagers.py +0 -0
  181. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/controller.py +0 -0
  182. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/manager.py +0 -0
  183. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/states.py +0 -0
  184. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/transitions.py +0 -0
  185. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/__init__.py +0 -0
  186. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/cached.py +0 -0
  187. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/check.py +0 -0
  188. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/contextmanagers.py +0 -0
  189. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/json.py +0 -0
  190. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/logs.py +0 -0
  191. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/marshal.py +0 -0
  192. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/reflect.py +0 -0
  193. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/runtime.py +0 -0
  194. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/secrets.py +0 -0
  195. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/strings.py +0 -0
  196. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/subprocesses.py +0 -0
  197. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/__init__.py +0 -0
  198. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/_abc.py +0 -0
  199. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/configs.py +0 -0
  200. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/formatters.py +0 -0
  201. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/utils.py +0 -0
  202. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/__init__.py +0 -0
  203. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/any.py +0 -0
  204. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/base.py +0 -0
  205. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/base64.py +0 -0
  206. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/dataclasses.py +0 -0
  207. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/datetimes.py +0 -0
  208. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/enums.py +0 -0
  209. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/exceptions.py +0 -0
  210. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/factories.py +0 -0
  211. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/forbidden.py +0 -0
  212. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/global_.py +0 -0
  213. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/iterables.py +0 -0
  214. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/mappings.py +0 -0
  215. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/naming.py +0 -0
  216. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/numbers.py +0 -0
  217. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/objects.py +0 -0
  218. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/optionals.py +0 -0
  219. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/polymorphism.py +0 -0
  220. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/primitives.py +0 -0
  221. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/registries.py +0 -0
  222. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/standard.py +0 -0
  223. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/utils.py +0 -0
  224. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/uuids.py +0 -0
  225. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/values.py +0 -0
  226. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/math.py +0 -0
  227. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/os.py +0 -0
  228. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/__init__.py +0 -0
  229. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/isinstance.py +0 -0
  230. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/ops.py +0 -0
  231. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/subst.py +0 -0
  232. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/types.py +0 -0
  233. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/runmodule.py +0 -0
  234. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/__init__.py +0 -0
  235. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/crypto.py +0 -0
  236. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/marshal.py +0 -0
  237. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/openssl.py +0 -0
  238. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/passwords.py +0 -0
  239. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/secrets.py +0 -0
  240. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/subprocesses.py +0 -0
  241. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/__init__.py +0 -0
  242. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/_abc.py +0 -0
  243. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/asyncs.py +0 -0
  244. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/dbs.py +0 -0
  245. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/duckdb.py +0 -0
  246. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/exprs.py +0 -0
  247. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/secrets.py +0 -0
  248. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/sqlean.py +0 -0
  249. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/stats.py +0 -0
  250. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sync.py +0 -0
  251. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/term.py +0 -0
  252. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/__init__.py +0 -0
  253. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/helpers.py +0 -0
  254. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/inject/__init__.py +0 -0
  255. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/marks.py +0 -0
  256. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/__init__.py +0 -0
  257. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/_registry.py +0 -0
  258. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/logging.py +0 -0
  259. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/managermarks.py +0 -0
  260. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/pydevd.py +0 -0
  261. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/repeat.py +0 -0
  262. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/skips.py +0 -0
  263. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/spacing.py +0 -0
  264. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/switches.py +0 -0
  265. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/__init__.py +0 -0
  266. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/delimit.py +0 -0
  267. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/glyphsplit.py +0 -0
  268. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/indent.py +0 -0
  269. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/parts.py +0 -0
  270. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/SOURCES.txt +0 -0
  271. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/dependency_links.txt +0 -0
  272. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/requires.txt +0 -0
  273. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/top_level.txt +0 -0
  274. {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev10
3
+ Version: 0.0.0.dev11
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -0,0 +1,5 @@
1
+ *omlish*
2
+
3
+ Packages installable from git via:
4
+ ::
5
+ pip install 'git+https://github.com/wrmsr/omlish@master#subdirectory=.pkg/<pkg>'
@@ -1,4 +1,4 @@
1
- __version__ = '0.0.0.dev10'
1
+ __version__ = '0.0.0.dev11'
2
2
 
3
3
 
4
4
  #
@@ -77,7 +77,7 @@ class Project(ProjectBase):
77
77
  ],
78
78
 
79
79
  'sqlx': [
80
- "sqlean.py >= 3.45; python_version < '3.13'",
80
+ 'sqlean.py >= 3.45; python_version < "3.13"',
81
81
 
82
82
  'duckdb >= 1',
83
83
  ],
@@ -10,6 +10,7 @@ import typing as ta
10
10
  import weakref
11
11
 
12
12
  from .. import check
13
+ from .. import lang
13
14
  from .dispatch import Dispatcher
14
15
  from .dispatch import get_impl_func_cls_set
15
16
 
@@ -17,20 +18,6 @@ from .dispatch import get_impl_func_cls_set
17
18
  T = ta.TypeVar('T')
18
19
 
19
20
 
20
- def build_mro_dct(instance_cls: type, owner_cls: type | None = None) -> ta.Mapping[str, ta.Any]:
21
- if owner_cls is None:
22
- owner_cls = instance_cls
23
- mro = instance_cls.__mro__[-2::-1]
24
- try:
25
- pos = mro.index(owner_cls)
26
- except ValueError:
27
- raise TypeError(f'Owner class {owner_cls} not in mro of instance class {instance_cls}') from None
28
- dct: dict[str, ta.Any] = {}
29
- for cur_cls in mro[:pos + 1]:
30
- dct.update(cur_cls.__dict__)
31
- return dct
32
-
33
-
34
21
  class Method:
35
22
  def __init__(self, func: ta.Callable) -> None:
36
23
  if not callable(func) and not hasattr(func, '__get__'): # type: ignore
@@ -91,7 +78,7 @@ class Method:
91
78
  def build_attr_dispatcher(self, instance_cls: type, owner_cls: type | None = None) -> Dispatcher[str]:
92
79
  disp: Dispatcher[str] = Dispatcher()
93
80
 
94
- mro_dct = build_mro_dct(instance_cls, owner_cls)
81
+ mro_dct = lang.build_mro_dict(instance_cls, owner_cls)
95
82
  seen: ta.Mapping[ta.Any, str] = {}
96
83
  for nam, att in mro_dct.items():
97
84
  if att in self._impls:
@@ -146,6 +146,7 @@ from .objects import ( # noqa
146
146
  SimpleProxy,
147
147
  arg_repr,
148
148
  attr_repr,
149
+ build_mro_dict,
149
150
  can_weakref,
150
151
  deep_subclasses,
151
152
  new_type,
@@ -97,6 +97,31 @@ def deep_subclasses(cls: type) -> ta.Iterator[type]:
97
97
  todo.extend(reversed(cur.__subclasses__()))
98
98
 
99
99
 
100
+ def build_mro_dict(
101
+ instance_cls: type,
102
+ owner_cls: type | None = None,
103
+ *,
104
+ bottom_up_key_order: bool = False,
105
+ ) -> ta.Mapping[str, ta.Any]:
106
+ if owner_cls is None:
107
+ owner_cls = instance_cls
108
+ mro = instance_cls.__mro__[-2::-1]
109
+ try:
110
+ pos = mro.index(owner_cls)
111
+ except ValueError:
112
+ raise TypeError(f'Owner class {owner_cls} not in mro of instance class {instance_cls}') from None
113
+ dct: dict[str, ta.Any] = {}
114
+ if not bottom_up_key_order:
115
+ for cur_cls in mro[:pos + 1][::-1]:
116
+ for k, v in cur_cls.__dict__.items():
117
+ if k not in dct:
118
+ dct[k] = v
119
+ else:
120
+ for cur_cls in mro[:pos + 1]:
121
+ dct.update(cur_cls.__dict__)
122
+ return dct
123
+
124
+
100
125
  ##
101
126
 
102
127
 
@@ -1,3 +1,9 @@
1
+ """
2
+ TODO:
3
+ - unify MatchFnClass with dispatch.method?
4
+ - __call__ = mfs.method(); @__call__.register(lambda: ...) def _call_... ?
5
+ - not really the same thing, dispatch is unordered this is necessarily ordered
6
+ """
1
7
  import abc
2
8
  import dataclasses as dc
3
9
  import typing as ta
@@ -117,7 +123,7 @@ class MultiMatchFn(MatchFn[P, T]):
117
123
  )
118
124
 
119
125
 
120
- def multi(*children: MatchFn[P, T], strict: bool = False):
126
+ def multi(*children: MatchFn[P, T], strict: bool = False) -> MultiMatchFn: # MultiMatchFn[P[0], T[-1]]
121
127
  return MultiMatchFn(children, strict=strict) # noqa
122
128
 
123
129
 
@@ -200,7 +206,7 @@ class MatchFnClass(MatchFn[P, T]):
200
206
  mf = self.__match_fn = self._cls_match_fn.__get__(self)
201
207
  return mf
202
208
 
203
- def __init_subclass__(cls, strict: bool = False, **kwargs):
209
+ def __init_subclass__(cls, strict: bool = False, **kwargs: ta.Any) -> None:
204
210
  super().__init_subclass__()
205
211
  if '_cls_match_fn' in cls.__dict__:
206
212
  raise AttributeError('_cls_match_fn')
@@ -1,4 +1,5 @@
1
1
  from .testing import ( # noqa
2
+ assert_dicts_equal_ordered,
2
3
  call_many_with_timeout,
3
4
  can_import,
4
5
  run_with_timeout,
@@ -120,29 +120,44 @@ class Harness:
120
120
 
121
121
  @plugins.register
122
122
  class HarnessPlugin:
123
+ def __init__(self) -> None:
124
+ super().__init__()
125
+ self._harnesses_by_session: dict[ta.Any, Harness] = {}
126
+
127
+ def get_session_harness(self, session: ta.Any) -> Harness:
128
+ return self._harnesses_by_session[session]
123
129
 
124
130
  @pytest.fixture(scope='session', autouse=True)
125
- def _harness_scope_listener_session(self, harness, request):
126
- with harness._pytest_scope_manager(PytestScope.SESSION, request): # noqa
127
- yield
131
+ def _harness_scope_listener_session(self, request):
132
+ with Harness(inj.as_elements(*_HARNESS_ELEMENTS_LIST)).activate() as harness:
133
+ self._harnesses_by_session[request.session] = harness
134
+ try:
135
+ with harness._pytest_scope_manager(PytestScope.SESSION, request): # noqa
136
+ yield
137
+ finally:
138
+ del self._harnesses_by_session[request.session]
128
139
 
129
140
  @pytest.fixture(scope='package', autouse=True)
130
- def _harness_scope_listener_package(self, harness, request):
141
+ def _harness_scope_listener_package(self, request):
142
+ harness = self.get_session_harness(request.session)
131
143
  with harness._pytest_scope_manager(PytestScope.PACKAGE, request): # noqa
132
144
  yield
133
145
 
134
146
  @pytest.fixture(scope='module', autouse=True)
135
- def _harness_scope_listener_module(self, harness, request):
147
+ def _harness_scope_listener_module(self, request):
148
+ harness = self.get_session_harness(request.session)
136
149
  with harness._pytest_scope_manager(PytestScope.MODULE, request): # noqa
137
150
  yield
138
151
 
139
152
  @pytest.fixture(scope='class', autouse=True)
140
- def _harness_scope_listener_class(self, harness, request):
153
+ def _harness_scope_listener_class(self, request):
154
+ harness = self.get_session_harness(request.session)
141
155
  with harness._pytest_scope_manager(PytestScope.CLASS, request): # noqa
142
156
  yield
143
157
 
144
158
  @pytest.fixture(scope='function', autouse=True) # noqa
145
- def _harness_scope_listener_function(self, harness, request):
159
+ def _harness_scope_listener_function(self, request):
160
+ harness = self.get_session_harness(request.session)
146
161
  with harness._pytest_scope_manager(PytestScope.FUNCTION, request): # noqa
147
162
  yield
148
163
 
@@ -163,7 +178,7 @@ TypeT = ta.TypeVar('TypeT', bound=type)
163
178
  def bind(
164
179
  scope: PytestScope | str = PytestScope.SESSION,
165
180
  *,
166
- eager: bool = False,
181
+ eager: bool = False, # FIXME
167
182
  ) -> ta.Callable[[TypeT], TypeT]:
168
183
  def inner(cls):
169
184
  pts = scope if isinstance(scope, PytestScope) else PytestScope[check.isinstance(scope, str).upper()]
@@ -175,7 +190,8 @@ def bind(
175
190
  return inner
176
191
 
177
192
 
178
- @pytest.fixture(scope='session', autouse=True)
179
- def harness() -> ta.Generator[Harness, None, None]:
180
- with Harness(inj.as_elements(*_HARNESS_ELEMENTS_LIST)).activate() as h:
181
- yield h
193
+ @pytest.fixture
194
+ def harness(request) -> Harness:
195
+ pm = request.session.config.pluginmanager
196
+ hp = check.single(p for n, p in pm.list_name_plugin() if isinstance(p, HarnessPlugin))
197
+ return hp.get_session_harness(request.session)
@@ -39,7 +39,9 @@ https://github.com/agronholm/anyio/blob/8907964926a24461840eee0925d3f355e729f15d
39
39
  """ # noqa
40
40
  import functools
41
41
  import inspect
42
+ import sys
42
43
  import typing as ta
44
+ import warnings
43
45
 
44
46
  import pytest
45
47
 
@@ -80,6 +82,20 @@ class AsyncsPlugin:
80
82
  *[s for s in KNOWN_BACKENDS if lang.can_import(s)],
81
83
  ]
82
84
 
85
+ def pytest_cmdline_main(self, config):
86
+ if (aio_plugin := sys.modules.get('pytest_asyncio.plugin')):
87
+ # warnings.filterwarnings is clobbered by pytest using warnings.catch_warnings
88
+ def aio_plugin_warn(message, *args, **kwargs):
89
+ if (
90
+ isinstance(message, pytest.PytestDeprecationWarning) and
91
+ message.args[0].startswith('The configuration option "asyncio_default_fixture_loop_scope" is unset.') # noqa
92
+ ):
93
+ return
94
+ warnings.warn(message, *args, **kwargs)
95
+
96
+ aio_plugin.warnings = lang.proxy_import('warnings') # type: ignore
97
+ aio_plugin.warnings.warn = aio_plugin_warn # type: ignore
98
+
83
99
  def pytest_configure(self, config):
84
100
  config.addinivalue_line('markers', f'{ASYNCS_MARK}: marks for all async backends')
85
101
  config.addinivalue_line('markers', 'trio_asyncio: marks for trio_asyncio backend')
@@ -11,6 +11,12 @@ import typing as ta
11
11
  DEFAULT_TIMEOUT_S = 30
12
12
 
13
13
  T = ta.TypeVar('T')
14
+ K = ta.TypeVar('K')
15
+ V = ta.TypeVar('V')
16
+
17
+
18
+ def assert_dicts_equal_ordered(l: ta.Mapping[K, V], r: ta.Mapping[K, V]) -> None:
19
+ assert list(l.items()) == list(r.items())
14
20
 
15
21
 
16
22
  def call_many_with_timeout(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev10
3
+ Version: 0.0.0.dev11
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.dev10'
15
+ version = '0.0.0.dev11'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -47,7 +47,7 @@ all = [
47
47
  'aiomysql >= 0.2',
48
48
  'aiosqlite >= 0.20',
49
49
  'asyncpg >= 0.29; python_version < "3.13"',
50
- "sqlean.py >= 3.45; python_version < '3.13'",
50
+ 'sqlean.py >= 3.45; python_version < "3.13"',
51
51
  'duckdb >= 1',
52
52
  'pytest >= 8',
53
53
  ]
@@ -89,7 +89,7 @@ sql = [
89
89
  'asyncpg >= 0.29; python_version < "3.13"',
90
90
  ]
91
91
  sqlx = [
92
- "sqlean.py >= 3.45; python_version < '3.13'",
92
+ 'sqlean.py >= 3.45; python_version < "3.13"',
93
93
  'duckdb >= 1',
94
94
  ]
95
95
  testing = [
@@ -1 +0,0 @@
1
- *omlish*
File without changes
File without changes
File without changes