omlish 0.0.0.dev7__tar.gz → 0.0.0.dev10__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 (277) hide show
  1. {omlish-0.0.0.dev7/omlish.egg-info → omlish-0.0.0.dev10}/PKG-INFO +28 -1
  2. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/__about__.py +2 -2
  3. omlish-0.0.0.dev10/omlish/lite/logs.py +121 -0
  4. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/marshal.py +3 -1
  5. omlish-0.0.0.dev10/omlish/logs/__init__.py +13 -0
  6. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/logs/configs.py +12 -30
  7. omlish-0.0.0.dev10/omlish/logs/formatters.py +26 -0
  8. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10/omlish.egg-info}/PKG-INFO +28 -1
  9. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish.egg-info/SOURCES.txt +0 -1
  10. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish.egg-info/requires.txt +32 -0
  11. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/pyproject.toml +29 -1
  12. omlish-0.0.0.dev7/omlish/lite/logs.py +0 -52
  13. omlish-0.0.0.dev7/omlish/logs/__init__.py +0 -9
  14. omlish-0.0.0.dev7/omlish/logs/filters.py +0 -11
  15. omlish-0.0.0.dev7/omlish/logs/formatters.py +0 -76
  16. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/LICENSE +0 -0
  17. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/MANIFEST.in +0 -0
  18. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/README.rst +0 -0
  19. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/__init__.py +0 -0
  20. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/argparse.py +0 -0
  21. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/__init__.py +0 -0
  22. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/anyio.py +0 -0
  23. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/asyncio.py +0 -0
  24. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/asyncs.py +0 -0
  25. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/bridge.py +0 -0
  26. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/flavors.py +0 -0
  27. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/trio.py +0 -0
  28. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/asyncs/trio_asyncio.py +0 -0
  29. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/bootstrap.py +0 -0
  30. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/c3.py +0 -0
  31. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/cached.py +0 -0
  32. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/check.py +0 -0
  33. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/__init__.py +0 -0
  34. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/_abc.py +0 -0
  35. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/_io_abc.py +0 -0
  36. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/cache/__init__.py +0 -0
  37. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/cache/descriptor.py +0 -0
  38. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/cache/impl.py +0 -0
  39. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/cache/types.py +0 -0
  40. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/coerce.py +0 -0
  41. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/exceptions.py +0 -0
  42. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/frozen.py +0 -0
  43. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/identity.py +0 -0
  44. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/indexed.py +0 -0
  45. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/mappings.py +0 -0
  46. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/ordered.py +0 -0
  47. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/persistent.py +0 -0
  48. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/skiplist.py +0 -0
  49. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/sorted.py +0 -0
  50. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/treap.py +0 -0
  51. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/treapmap.py +0 -0
  52. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/unmodifiable.py +0 -0
  53. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/collections/utils.py +0 -0
  54. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/concurrent.py +0 -0
  55. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/configs/__init__.py +0 -0
  56. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/configs/classes.py +0 -0
  57. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/configs/flattening.py +0 -0
  58. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/configs/strings.py +0 -0
  59. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/__init__.py +0 -0
  60. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/__init__.py +0 -0
  61. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/api.py +0 -0
  62. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/as_.py +0 -0
  63. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/copy.py +0 -0
  64. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/descriptors.py +0 -0
  65. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/exceptions.py +0 -0
  66. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/fields.py +0 -0
  67. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/frozen.py +0 -0
  68. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/hashing.py +0 -0
  69. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/init.py +0 -0
  70. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/internals.py +0 -0
  71. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/main.py +0 -0
  72. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/metaclass.py +0 -0
  73. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/metadata.py +0 -0
  74. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/order.py +0 -0
  75. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/params.py +0 -0
  76. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/processing.py +0 -0
  77. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/reflect.py +0 -0
  78. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/replace.py +0 -0
  79. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/repr.py +0 -0
  80. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/simple.py +0 -0
  81. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/slots.py +0 -0
  82. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/impl/utils.py +0 -0
  83. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dataclasses/utils.py +0 -0
  84. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/datetimes.py +0 -0
  85. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/defs.py +0 -0
  86. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/__init__.py +0 -0
  87. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/procfs.py +0 -0
  88. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/procstats.py +0 -0
  89. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/ps.py +0 -0
  90. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/pydevd.py +0 -0
  91. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/replserver/__init__.py +0 -0
  92. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/replserver/__main__.py +0 -0
  93. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/replserver/console.py +0 -0
  94. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/replserver/server.py +0 -0
  95. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/diag/threads.py +0 -0
  96. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dispatch/__init__.py +0 -0
  97. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dispatch/_dispatch2.py +0 -0
  98. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dispatch/_dispatch3.py +0 -0
  99. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dispatch/dispatch.py +0 -0
  100. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dispatch/functions.py +0 -0
  101. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dispatch/methods.py +0 -0
  102. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/docker.py +0 -0
  103. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/dynamic.py +0 -0
  104. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/fnpairs.py +0 -0
  105. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/formats/__init__.py +0 -0
  106. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/formats/dotenv.py +0 -0
  107. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/formats/json.py +0 -0
  108. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/formats/props.py +0 -0
  109. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/formats/yaml.py +0 -0
  110. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/__init__.py +0 -0
  111. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/dags.py +0 -0
  112. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/domination.py +0 -0
  113. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/dot/__init__.py +0 -0
  114. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/dot/items.py +0 -0
  115. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/dot/rendering.py +0 -0
  116. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/dot/utils.py +0 -0
  117. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/graphs/trees.py +0 -0
  118. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/__init__.py +0 -0
  119. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/asgi.py +0 -0
  120. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/collections.py +0 -0
  121. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/consts.py +0 -0
  122. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/cookies.py +0 -0
  123. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/dates.py +0 -0
  124. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/encodings.py +0 -0
  125. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/json.py +0 -0
  126. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/sessions.py +0 -0
  127. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/http/wsgi.py +0 -0
  128. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/__init__.py +0 -0
  129. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/binder.py +0 -0
  130. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/bindings.py +0 -0
  131. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/eagers.py +0 -0
  132. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/elements.py +0 -0
  133. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/exceptions.py +0 -0
  134. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/__init__.py +0 -0
  135. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/bindings.py +0 -0
  136. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/elements.py +0 -0
  137. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/injector.py +0 -0
  138. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/inspect.py +0 -0
  139. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/multis.py +0 -0
  140. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/origins.py +0 -0
  141. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/privates.py +0 -0
  142. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/providers.py +0 -0
  143. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/proxy.py +0 -0
  144. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/impl/scopes.py +0 -0
  145. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/injector.py +0 -0
  146. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/inspect.py +0 -0
  147. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/keys.py +0 -0
  148. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/listeners.py +0 -0
  149. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/managed.py +0 -0
  150. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/multis.py +0 -0
  151. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/origins.py +0 -0
  152. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/overrides.py +0 -0
  153. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/privates.py +0 -0
  154. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/providers.py +0 -0
  155. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/scopes.py +0 -0
  156. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/types.py +0 -0
  157. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/inject/utils.py +0 -0
  158. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/iterators.py +0 -0
  159. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/__init__.py +0 -0
  160. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/cached.py +0 -0
  161. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/classes/__init__.py +0 -0
  162. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/classes/abstract.py +0 -0
  163. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/classes/restrict.py +0 -0
  164. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/classes/simple.py +0 -0
  165. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/classes/virtual.py +0 -0
  166. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/clsdct.py +0 -0
  167. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/cmp.py +0 -0
  168. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/contextmanagers.py +0 -0
  169. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/descriptors.py +0 -0
  170. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/exceptions.py +0 -0
  171. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/functions.py +0 -0
  172. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/imports.py +0 -0
  173. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/iterables.py +0 -0
  174. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/maybes.py +0 -0
  175. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/objects.py +0 -0
  176. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/resolving.py +0 -0
  177. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/strings.py +0 -0
  178. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/sys.py +0 -0
  179. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/timeouts.py +0 -0
  180. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lang/typing.py +0 -0
  181. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/libc.py +0 -0
  182. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/__init__.py +0 -0
  183. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/abstract.py +0 -0
  184. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/base.py +0 -0
  185. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/contextmanagers.py +0 -0
  186. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/controller.py +0 -0
  187. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/manager.py +0 -0
  188. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/states.py +0 -0
  189. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lifecycles/transitions.py +0 -0
  190. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/__init__.py +0 -0
  191. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/cached.py +0 -0
  192. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/check.py +0 -0
  193. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/contextmanagers.py +0 -0
  194. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/json.py +0 -0
  195. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/reflect.py +0 -0
  196. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/runtime.py +0 -0
  197. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/secrets.py +0 -0
  198. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/strings.py +0 -0
  199. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/lite/subprocesses.py +0 -0
  200. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/logs/_abc.py +0 -0
  201. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/logs/utils.py +0 -0
  202. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/__init__.py +0 -0
  203. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/any.py +0 -0
  204. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/base.py +0 -0
  205. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/base64.py +0 -0
  206. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/dataclasses.py +0 -0
  207. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/datetimes.py +0 -0
  208. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/enums.py +0 -0
  209. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/exceptions.py +0 -0
  210. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/factories.py +0 -0
  211. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/forbidden.py +0 -0
  212. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/global_.py +0 -0
  213. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/iterables.py +0 -0
  214. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/mappings.py +0 -0
  215. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/naming.py +0 -0
  216. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/numbers.py +0 -0
  217. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/objects.py +0 -0
  218. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/optionals.py +0 -0
  219. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/polymorphism.py +0 -0
  220. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/primitives.py +0 -0
  221. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/registries.py +0 -0
  222. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/standard.py +0 -0
  223. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/utils.py +0 -0
  224. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/uuids.py +0 -0
  225. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/marshal/values.py +0 -0
  226. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/matchfns.py +0 -0
  227. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/math.py +0 -0
  228. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/os.py +0 -0
  229. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/reflect/__init__.py +0 -0
  230. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/reflect/isinstance.py +0 -0
  231. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/reflect/ops.py +0 -0
  232. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/reflect/subst.py +0 -0
  233. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/reflect/types.py +0 -0
  234. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/runmodule.py +0 -0
  235. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/__init__.py +0 -0
  236. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/crypto.py +0 -0
  237. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/marshal.py +0 -0
  238. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/openssl.py +0 -0
  239. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/passwords.py +0 -0
  240. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/secrets.py +0 -0
  241. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/secrets/subprocesses.py +0 -0
  242. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/__init__.py +0 -0
  243. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/_abc.py +0 -0
  244. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/asyncs.py +0 -0
  245. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/dbs.py +0 -0
  246. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/duckdb.py +0 -0
  247. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/exprs.py +0 -0
  248. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/secrets.py +0 -0
  249. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sql/sqlean.py +0 -0
  250. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/stats.py +0 -0
  251. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/sync.py +0 -0
  252. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/term.py +0 -0
  253. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/__init__.py +0 -0
  254. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/__init__.py +0 -0
  255. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/helpers.py +0 -0
  256. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/inject/__init__.py +0 -0
  257. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/inject/harness.py +0 -0
  258. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/marks.py +0 -0
  259. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/__init__.py +0 -0
  260. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/_registry.py +0 -0
  261. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/asyncs.py +0 -0
  262. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/logging.py +0 -0
  263. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/managermarks.py +0 -0
  264. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/pydevd.py +0 -0
  265. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/repeat.py +0 -0
  266. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/skips.py +0 -0
  267. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/spacing.py +0 -0
  268. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/pytest/plugins/switches.py +0 -0
  269. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/testing/testing.py +0 -0
  270. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/text/__init__.py +0 -0
  271. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/text/delimit.py +0 -0
  272. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/text/glyphsplit.py +0 -0
  273. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/text/indent.py +0 -0
  274. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish/text/parts.py +0 -0
  275. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish.egg-info/dependency_links.txt +0 -0
  276. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/omlish.egg-info/top_level.txt +0 -0
  277. {omlish-0.0.0.dev7 → omlish-0.0.0.dev10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev7
3
+ Version: 0.0.0.dev10
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,6 +12,33 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
+ Provides-Extra: all
16
+ Requires-Dist: anyio>=4.4; extra == "all"
17
+ Requires-Dist: sniffio>=1.3; extra == "all"
18
+ Requires-Dist: greenlet>=3; python_version < "3.13" and extra == "all"
19
+ Requires-Dist: trio>=0.26; extra == "all"
20
+ Requires-Dist: trio-asyncio>=0.15; python_version < "3.13" and extra == "all"
21
+ Requires-Dist: lz4>=4; extra == "all"
22
+ Requires-Dist: python-snappy>=0.7; python_version < "3.13" and extra == "all"
23
+ Requires-Dist: zstd>=1.5; extra == "all"
24
+ Requires-Dist: orjson>3.10; extra == "all"
25
+ Requires-Dist: cloudpickle>=3; extra == "all"
26
+ Requires-Dist: pyyaml>=5; extra == "all"
27
+ Requires-Dist: httpx[http2]>=0.27; extra == "all"
28
+ Requires-Dist: jinja2>=3.1; extra == "all"
29
+ Requires-Dist: psutil>=6; extra == "all"
30
+ Requires-Dist: wrapt>=1.14; extra == "all"
31
+ Requires-Dist: cryptography>=43; extra == "all"
32
+ Requires-Dist: sqlalchemy>=2; python_version >= "3.13" and extra == "all"
33
+ Requires-Dist: sqlalchemy[asyncio]>=2; python_version < "3.13" and extra == "all"
34
+ Requires-Dist: pg8000>=1.31; extra == "all"
35
+ Requires-Dist: pymysql>=1.1; extra == "all"
36
+ Requires-Dist: aiomysql>=0.2; extra == "all"
37
+ Requires-Dist: aiosqlite>=0.20; extra == "all"
38
+ Requires-Dist: asyncpg>=0.29; python_version < "3.13" and extra == "all"
39
+ Requires-Dist: sqlean.py>=3.45; python_version < "3.13" and extra == "all"
40
+ Requires-Dist: duckdb>=1; extra == "all"
41
+ Requires-Dist: pytest>=8; extra == "all"
15
42
  Provides-Extra: async
16
43
  Requires-Dist: anyio>=4.4; extra == "async"
17
44
  Requires-Dist: sniffio>=1.3; extra == "async"
@@ -1,4 +1,4 @@
1
- __version__ = '0.0.0.dev7'
1
+ __version__ = '0.0.0.dev10'
2
2
 
3
3
 
4
4
  #
@@ -105,6 +105,6 @@ class SetuptoolsBase:
105
105
 
106
106
  class Setuptools(SetuptoolsBase):
107
107
  find_packages = {
108
- 'include': ['omlish', 'omlish.*'],
108
+ 'include': [Project.name, f'{Project.name}.*'],
109
109
  'exclude': [*SetuptoolsBase.find_packages['exclude']],
110
110
  }
@@ -0,0 +1,121 @@
1
+ """
2
+ TODO:
3
+ - translate json keys
4
+ - debug
5
+ """
6
+ # ruff: noqa: UP006 UP007 N802
7
+ import datetime
8
+ import logging
9
+ import threading
10
+ import typing as ta
11
+
12
+ from .json import json_dumps_compact
13
+
14
+
15
+ log = logging.getLogger(__name__)
16
+
17
+
18
+ ##
19
+
20
+
21
+ class TidLogFilter(logging.Filter):
22
+
23
+ def filter(self, record):
24
+ record.tid = threading.get_native_id()
25
+ return True
26
+
27
+
28
+ ##
29
+
30
+
31
+ class JsonLogFormatter(logging.Formatter):
32
+
33
+ KEYS: ta.Mapping[str, bool] = {
34
+ 'name': False,
35
+ 'msg': False,
36
+ 'args': False,
37
+ 'levelname': False,
38
+ 'levelno': False,
39
+ 'pathname': False,
40
+ 'filename': False,
41
+ 'module': False,
42
+ 'exc_info': True,
43
+ 'exc_text': True,
44
+ 'stack_info': True,
45
+ 'lineno': False,
46
+ 'funcName': False,
47
+ 'created': False,
48
+ 'msecs': False,
49
+ 'relativeCreated': False,
50
+ 'thread': False,
51
+ 'threadName': False,
52
+ 'processName': False,
53
+ 'process': False,
54
+ }
55
+
56
+ def format(self, record: logging.LogRecord) -> str:
57
+ dct = {
58
+ k: v
59
+ for k, o in self.KEYS.items()
60
+ for v in [getattr(record, k)]
61
+ if not (o and v is None)
62
+ }
63
+ return json_dumps_compact(dct)
64
+
65
+
66
+ ##
67
+
68
+
69
+ STANDARD_LOG_FORMAT_PARTS = [
70
+ ('asctime', '%(asctime)-15s'),
71
+ ('process', 'pid=%(process)-6s'),
72
+ ('thread', 'tid=%(thread)-16s'),
73
+ ('levelname', '%(levelname)-8s'),
74
+ ('name', '%(name)s'),
75
+ ('separator', '::'),
76
+ ('message', '%(message)s'),
77
+ ]
78
+
79
+
80
+ class StandardLogFormatter(logging.Formatter):
81
+
82
+ @staticmethod
83
+ def build_log_format(parts: ta.Iterable[ta.Tuple[str, str]]) -> str:
84
+ return ' '.join(v for k, v in parts)
85
+
86
+ converter = datetime.datetime.fromtimestamp # type: ignore
87
+
88
+ def formatTime(self, record, datefmt=None):
89
+ ct = self.converter(record.created) # type: ignore
90
+ if datefmt:
91
+ return ct.strftime(datefmt) # noqa
92
+ else:
93
+ t = ct.strftime("%Y-%m-%d %H:%M:%S") # noqa
94
+ return '%s.%03d' % (t, record.msecs)
95
+
96
+
97
+ ##
98
+
99
+
100
+ def configure_standard_logging(
101
+ level: ta.Union[int, str] = logging.INFO,
102
+ *,
103
+ json: bool = False,
104
+ ) -> logging.Handler:
105
+ handler = logging.StreamHandler()
106
+
107
+ formatter: logging.Formatter
108
+ if json:
109
+ formatter = JsonLogFormatter()
110
+ else:
111
+ formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
112
+ handler.setFormatter(formatter)
113
+
114
+ handler.addFilter(TidLogFilter())
115
+
116
+ logging.root.addHandler(handler)
117
+
118
+ if level is not None:
119
+ logging.root.setLevel(level)
120
+
121
+ return handler
@@ -1,6 +1,7 @@
1
1
  """
2
2
  TODO:
3
3
  - pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
4
+ - nonstrict toggle
4
5
  """
5
6
  # ruff: noqa: UP006 UP007
6
7
  import abc
@@ -143,12 +144,13 @@ class IterableObjMarshaler(ObjMarshaler):
143
144
  class DataclassObjMarshaler(ObjMarshaler):
144
145
  ty: type
145
146
  fs: ta.Mapping[str, ObjMarshaler]
147
+ nonstrict: bool = False
146
148
 
147
149
  def marshal(self, o: ta.Any) -> ta.Any:
148
150
  return {k: m.marshal(getattr(o, k)) for k, m in self.fs.items()}
149
151
 
150
152
  def unmarshal(self, o: ta.Any) -> ta.Any:
151
- return self.ty(**{k: self.fs[k].unmarshal(v) for k, v in o.items()})
153
+ return self.ty(**{k: self.fs[k].unmarshal(v) for k, v in o.items() if self.nonstrict or k in self.fs})
152
154
 
153
155
 
154
156
  @dc.dataclass(frozen=True)
@@ -0,0 +1,13 @@
1
+ from .configs import ( # noqa
2
+ configure_standard_logging,
3
+ )
4
+
5
+ from .formatters import ( # noqa
6
+ ColorLogFormatter,
7
+ JsonLogFormatter,
8
+ StandardLogFormatter,
9
+ )
10
+
11
+ from .utils import ( # noqa
12
+ error_logging,
13
+ )
@@ -2,9 +2,10 @@ import dataclasses as dc
2
2
  import logging
3
3
  import typing as ta
4
4
 
5
- from .filters import TidFilter
6
- from .formatters import JsonLogFormatter
7
- from .formatters import StandardLogFormatter
5
+ from ..lite.logs import configure_standard_logging as configure_lite_standard_logging
6
+
7
+
8
+ ##
8
9
 
9
10
 
10
11
  NOISY_LOGGERS: set[str] = {
@@ -16,6 +17,9 @@ NOISY_LOGGERS: set[str] = {
16
17
  }
17
18
 
18
19
 
20
+ ##
21
+
22
+
19
23
  @dc.dataclass()
20
24
  class DictConfig:
21
25
  version: int = 1
@@ -33,19 +37,8 @@ FormatterConfig = dict[str, ta.Any]
33
37
  HandlerConfig = dict[str, ta.Any]
34
38
  LoggerConfig = dict[str, ta.Any]
35
39
 
36
- STANDARD_LOG_FORMAT_PARTS = [
37
- ('asctime', '%(asctime)-15s'),
38
- ('process', 'pid=%(process)-6s'),
39
- ('thread', 'tid=%(thread)-16s'),
40
- ('levelname', '%(levelname)-8s'),
41
- ('name', '%(name)s'),
42
- ('separator', '::'),
43
- ('message', '%(message)s'),
44
- ]
45
-
46
40
 
47
- def build_log_format(parts: ta.Iterable[tuple[str, str]]) -> str:
48
- return ' '.join(v for k, v in parts)
41
+ ##
49
42
 
50
43
 
51
44
  def configure_standard_logging(
@@ -53,21 +46,10 @@ def configure_standard_logging(
53
46
  *,
54
47
  json: bool = False,
55
48
  ) -> logging.Handler:
56
- handler = logging.StreamHandler()
57
-
58
- formatter: logging.Formatter
59
- if json:
60
- formatter = JsonLogFormatter()
61
- else:
62
- formatter = StandardLogFormatter(build_log_format(STANDARD_LOG_FORMAT_PARTS))
63
- handler.setFormatter(formatter)
64
-
65
- handler.addFilter(TidFilter())
66
-
67
- logging.root.addHandler(handler)
68
-
69
- if level is not None:
70
- logging.root.setLevel(level)
49
+ handler = configure_lite_standard_logging(
50
+ level,
51
+ json=json,
52
+ )
71
53
 
72
54
  for noisy_logger in NOISY_LOGGERS:
73
55
  logging.getLogger(noisy_logger).setLevel(logging.WARNING)
@@ -0,0 +1,26 @@
1
+ # ruff: noqa: ANN201 N802
2
+ import logging
3
+ import typing as ta
4
+
5
+ from .. import term
6
+ from ..lite.logs import JsonLogFormatter # noqa
7
+ from ..lite.logs import StandardLogFormatter
8
+
9
+
10
+ class ColorLogFormatter(StandardLogFormatter):
11
+
12
+ LEVEL_COLORS: ta.Mapping[int, term.SGRs.FG] = {
13
+ logging.WARNING: term.SGRs.FG.BRIGHT_YELLOW,
14
+ logging.ERROR: term.SGRs.FG.BRIGHT_RED,
15
+ logging.CRITICAL: term.SGRs.FG.BRIGHT_RED,
16
+ }
17
+
18
+ def formatMessage(self, record):
19
+ buf = super().formatMessage(record)
20
+ try:
21
+ c = self.LEVEL_COLORS[record.levelno]
22
+ except KeyError:
23
+ pass
24
+ else:
25
+ buf = term.SGR(c) + buf + term.SGR(term.SGRs.RESET)
26
+ return buf
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev7
3
+ Version: 0.0.0.dev10
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,6 +12,33 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
+ Provides-Extra: all
16
+ Requires-Dist: anyio>=4.4; extra == "all"
17
+ Requires-Dist: sniffio>=1.3; extra == "all"
18
+ Requires-Dist: greenlet>=3; python_version < "3.13" and extra == "all"
19
+ Requires-Dist: trio>=0.26; extra == "all"
20
+ Requires-Dist: trio-asyncio>=0.15; python_version < "3.13" and extra == "all"
21
+ Requires-Dist: lz4>=4; extra == "all"
22
+ Requires-Dist: python-snappy>=0.7; python_version < "3.13" and extra == "all"
23
+ Requires-Dist: zstd>=1.5; extra == "all"
24
+ Requires-Dist: orjson>3.10; extra == "all"
25
+ Requires-Dist: cloudpickle>=3; extra == "all"
26
+ Requires-Dist: pyyaml>=5; extra == "all"
27
+ Requires-Dist: httpx[http2]>=0.27; extra == "all"
28
+ Requires-Dist: jinja2>=3.1; extra == "all"
29
+ Requires-Dist: psutil>=6; extra == "all"
30
+ Requires-Dist: wrapt>=1.14; extra == "all"
31
+ Requires-Dist: cryptography>=43; extra == "all"
32
+ Requires-Dist: sqlalchemy>=2; python_version >= "3.13" and extra == "all"
33
+ Requires-Dist: sqlalchemy[asyncio]>=2; python_version < "3.13" and extra == "all"
34
+ Requires-Dist: pg8000>=1.31; extra == "all"
35
+ Requires-Dist: pymysql>=1.1; extra == "all"
36
+ Requires-Dist: aiomysql>=0.2; extra == "all"
37
+ Requires-Dist: aiosqlite>=0.20; extra == "all"
38
+ Requires-Dist: asyncpg>=0.29; python_version < "3.13" and extra == "all"
39
+ Requires-Dist: sqlean.py>=3.45; python_version < "3.13" and extra == "all"
40
+ Requires-Dist: duckdb>=1; extra == "all"
41
+ Requires-Dist: pytest>=8; extra == "all"
15
42
  Provides-Extra: async
16
43
  Requires-Dist: anyio>=4.4; extra == "async"
17
44
  Requires-Dist: sniffio>=1.3; extra == "async"
@@ -201,7 +201,6 @@ omlish/lite/subprocesses.py
201
201
  omlish/logs/__init__.py
202
202
  omlish/logs/_abc.py
203
203
  omlish/logs/configs.py
204
- omlish/logs/filters.py
205
204
  omlish/logs/formatters.py
206
205
  omlish/logs/utils.py
207
206
  omlish/marshal/__init__.py
@@ -1,4 +1,36 @@
1
1
 
2
+ [all]
3
+ anyio>=4.4
4
+ sniffio>=1.3
5
+ trio>=0.26
6
+ lz4>=4
7
+ zstd>=1.5
8
+ orjson>3.10
9
+ cloudpickle>=3
10
+ pyyaml>=5
11
+ httpx[http2]>=0.27
12
+ jinja2>=3.1
13
+ psutil>=6
14
+ wrapt>=1.14
15
+ cryptography>=43
16
+ pg8000>=1.31
17
+ pymysql>=1.1
18
+ aiomysql>=0.2
19
+ aiosqlite>=0.20
20
+ duckdb>=1
21
+ pytest>=8
22
+
23
+ [all:python_version < "3.13"]
24
+ greenlet>=3
25
+ trio-asyncio>=0.15
26
+ python-snappy>=0.7
27
+ sqlalchemy[asyncio]>=2
28
+ asyncpg>=0.29
29
+ sqlean.py>=3.45
30
+
31
+ [all:python_version >= "3.13"]
32
+ sqlalchemy>=2
33
+
2
34
  [async]
3
35
  anyio>=4.4
4
36
  sniffio>=1.3
@@ -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.dev7'
15
+ version = '0.0.0.dev10'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -23,6 +23,34 @@ classifiers = [
23
23
  description = 'omlish'
24
24
 
25
25
  [project.optional-dependencies]
26
+ all = [
27
+ 'anyio >= 4.4',
28
+ 'sniffio >= 1.3',
29
+ 'greenlet >= 3; python_version < "3.13"',
30
+ 'trio >= 0.26',
31
+ 'trio-asyncio >= 0.15; python_version < "3.13"',
32
+ 'lz4 >= 4',
33
+ 'python-snappy >= 0.7; python_version < "3.13"',
34
+ 'zstd >= 1.5',
35
+ 'orjson > 3.10',
36
+ 'cloudpickle >= 3',
37
+ 'pyyaml >= 5',
38
+ 'httpx[http2] >= 0.27',
39
+ 'jinja2 >= 3.1',
40
+ 'psutil >= 6',
41
+ 'wrapt >= 1.14',
42
+ 'cryptography >= 43',
43
+ 'sqlalchemy >= 2; python_version >= "3.13"',
44
+ 'sqlalchemy[asyncio] >= 2; python_version < "3.13"',
45
+ 'pg8000 >= 1.31',
46
+ 'pymysql >= 1.1',
47
+ 'aiomysql >= 0.2',
48
+ 'aiosqlite >= 0.20',
49
+ 'asyncpg >= 0.29; python_version < "3.13"',
50
+ "sqlean.py >= 3.45; python_version < '3.13'",
51
+ 'duckdb >= 1',
52
+ 'pytest >= 8',
53
+ ]
26
54
  async = [
27
55
  'anyio >= 4.4',
28
56
  'sniffio >= 1.3',
@@ -1,52 +0,0 @@
1
- """
2
- TODO:
3
- - debug
4
- """
5
- # ruff: noqa: UP007
6
- import logging
7
- import typing as ta
8
-
9
- from .json import json_dumps_compact
10
-
11
-
12
- log = logging.getLogger(__name__)
13
-
14
-
15
- class JsonLogFormatter(logging.Formatter):
16
-
17
- KEYS: ta.Mapping[str, bool] = {
18
- 'name': False,
19
- 'msg': False,
20
- 'args': False,
21
- 'levelname': False,
22
- 'levelno': False,
23
- 'pathname': False,
24
- 'filename': False,
25
- 'module': False,
26
- 'exc_info': True,
27
- 'exc_text': True,
28
- 'stack_info': True,
29
- 'lineno': False,
30
- 'funcName': False,
31
- 'created': False,
32
- 'msecs': False,
33
- 'relativeCreated': False,
34
- 'thread': False,
35
- 'threadName': False,
36
- 'processName': False,
37
- 'process': False,
38
- }
39
-
40
- def format(self, record: logging.LogRecord) -> str:
41
- dct = {
42
- k: v
43
- for k, o in self.KEYS.items()
44
- for v in [getattr(record, k)]
45
- if not (o and v is None)
46
- }
47
- return json_dumps_compact(dct)
48
-
49
-
50
- def configure_standard_logging(level: ta.Union[int, str] = logging.INFO) -> None:
51
- logging.root.addHandler(logging.StreamHandler())
52
- logging.root.setLevel(level)
@@ -1,9 +0,0 @@
1
- from .configs import build_log_format # noqa
2
- from .configs import configure_standard_logging # noqa
3
- from .configs import DictConfig # noqa
4
- from .configs import NOISY_LOGGERS # noqa
5
- from .configs import STANDARD_LOG_FORMAT_PARTS # noqa
6
- from .filters import TidFilter # noqa
7
- from .formatters import ColorLogFormatter # noqa
8
- from .formatters import JsonLogFormatter # noqa
9
- from .utils import error_logging # noqa
@@ -1,11 +0,0 @@
1
- # ruff: noqa: ANN201
2
-
3
- import logging
4
- import threading
5
-
6
-
7
- class TidFilter(logging.Filter):
8
-
9
- def filter(self, record):
10
- record.tid = threading.get_native_id()
11
- return True
@@ -1,76 +0,0 @@
1
- # ruff: noqa: ANN201
2
- # ruff: noqa: N802
3
-
4
- import datetime
5
- import logging
6
- import typing as ta
7
-
8
- from .. import term
9
- from ..formats import json
10
-
11
-
12
- class StandardLogFormatter(logging.Formatter):
13
-
14
- converter = datetime.datetime.fromtimestamp # type: ignore
15
-
16
- def formatTime(self, record, datefmt=None):
17
- ct = self.converter(record.created) # type: ignore
18
- if datefmt:
19
- return ct.strftime(datefmt) # noqa
20
- else:
21
- t = ct.strftime("%Y-%m-%d %H:%M:%S") # noqa
22
- return '%s.%03d' % (t, record.msecs)
23
-
24
-
25
- class ColorLogFormatter(StandardLogFormatter):
26
-
27
- LEVEL_COLORS: ta.Mapping[int, term.SGRs.FG] = {
28
- logging.WARNING: term.SGRs.FG.BRIGHT_YELLOW,
29
- logging.ERROR: term.SGRs.FG.BRIGHT_RED,
30
- logging.CRITICAL: term.SGRs.FG.BRIGHT_RED,
31
- }
32
-
33
- def formatMessage(self, record):
34
- buf = super().formatMessage(record)
35
- try:
36
- c = self.LEVEL_COLORS[record.levelno]
37
- except KeyError:
38
- pass
39
- else:
40
- buf = term.SGR(c) + buf + term.SGR(term.SGRs.RESET)
41
- return buf
42
-
43
-
44
- class JsonLogFormatter(logging.Formatter):
45
-
46
- KEYS: ta.Mapping[str, bool] = {
47
- 'name': False,
48
- 'msg': False,
49
- 'args': False,
50
- 'levelname': False,
51
- 'levelno': False,
52
- 'pathname': False,
53
- 'filename': False,
54
- 'module': False,
55
- 'exc_info': True,
56
- 'exc_text': True,
57
- 'stack_info': True,
58
- 'lineno': False,
59
- 'funcName': False,
60
- 'created': False,
61
- 'msecs': False,
62
- 'relativeCreated': False,
63
- 'thread': False,
64
- 'threadName': False,
65
- 'processName': False,
66
- 'process': False,
67
- }
68
-
69
- def format(self, record: logging.LogRecord) -> str:
70
- dct = {
71
- k: v
72
- for k, o in self.KEYS.items()
73
- for v in [getattr(record, k)]
74
- if not (o and v is None)
75
- }
76
- return json.dumps_compact(dct)
File without changes
File without changes
File without changes
File without changes