omdev 0.0.0.dev431__tar.gz → 0.0.0.dev432__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 (333) hide show
  1. {omdev-0.0.0.dev431/omdev.egg-info → omdev-0.0.0.dev432}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/ci.py +75 -20
  3. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/interp.py +10 -6
  4. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/pyproject.py +75 -20
  5. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432/omdev.egg-info}/PKG-INFO +2 -2
  6. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/requires.txt +1 -1
  7. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/pyproject.toml +2 -2
  8. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/LICENSE +0 -0
  9. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/MANIFEST.in +0 -0
  10. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/README.md +0 -0
  11. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/.omlish-manifests.json +0 -0
  12. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/__about__.py +0 -0
  13. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/__init__.py +0 -0
  14. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/__init__.py +0 -0
  15. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/__main__.py +0 -0
  16. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/cli/__init__.py +0 -0
  17. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/cli/main.py +0 -0
  18. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/__init__.py +0 -0
  19. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/gen.py +0 -0
  20. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/imports.py +0 -0
  21. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/manifests.py +0 -0
  22. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/resources.py +0 -0
  23. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/srcfiles.py +0 -0
  24. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/strip.py +0 -0
  25. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/types.py +0 -0
  26. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/typing.py +0 -0
  27. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/sources.py +0 -0
  28. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/__init__.py +0 -0
  29. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/__init__.py +0 -0
  30. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/cache.py +0 -0
  31. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/contexts.py +0 -0
  32. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/currents.py +0 -0
  33. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/fns.py +0 -0
  34. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/resolvers.py +0 -0
  35. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/storage.py +0 -0
  36. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/types.py +0 -0
  37. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/__init__.py +0 -0
  38. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/actions.py +0 -0
  39. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/cache.py +0 -0
  40. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/consts.py +0 -0
  41. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/defaults.py +0 -0
  42. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/manifests.py +0 -0
  43. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/specs.py +0 -0
  44. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/__init__.py +0 -0
  45. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/__init__.py +0 -0
  46. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/aps.py +0 -0
  47. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/ax.py +0 -0
  48. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/cf.py +0 -0
  49. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/cg.py +0 -0
  50. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/linux/__init__.py +0 -0
  51. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/linux/x11.py +0 -0
  52. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/__init__.py +0 -0
  53. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/__main__.py +0 -0
  54. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/cdeps.py +0 -0
  55. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/cdeps.toml +0 -0
  56. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/cli.py +0 -0
  57. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/srclangs.py +0 -0
  58. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/__init__.py +0 -0
  59. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_boilerplate.cc +0 -0
  60. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/LICENSE +0 -0
  61. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/__init__.py +0 -0
  62. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/build_ext.py +0 -0
  63. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  64. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  65. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/options.py +0 -0
  66. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  67. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/dir_util.py +0 -0
  68. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/errors.py +0 -0
  69. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/extension.py +0 -0
  70. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/file_util.py +0 -0
  71. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/modified.py +0 -0
  72. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/spawn.py +0 -0
  73. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/sysconfig.py +0 -0
  74. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/util.py +0 -0
  75. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/version.py +0 -0
  76. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/build.py +0 -0
  77. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/cmake.py +0 -0
  78. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/importhook.py +0 -0
  79. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/magic.py +0 -0
  80. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/scan.py +0 -0
  81. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/__init__.py +0 -0
  82. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/__main__.py +0 -0
  83. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/cache.py +0 -0
  84. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/ci.py +0 -0
  85. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/cli.py +0 -0
  86. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/compose.py +0 -0
  87. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/consts.py +0 -0
  88. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/__init__.py +0 -0
  89. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/buildcaching.py +0 -0
  90. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cache.py +0 -0
  91. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  92. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cacheserved/cache.py +0 -0
  93. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  94. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cmds.py +0 -0
  95. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/dataserver.py +0 -0
  96. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/imagepulling.py +0 -0
  97. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/inject.py +0 -0
  98. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/packing.py +0 -0
  99. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/repositories.py +0 -0
  100. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/utils.py +0 -0
  101. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/__init__.py +0 -0
  102. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/__init__.py +0 -0
  103. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/clients.py +0 -0
  104. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v1/__init__.py +0 -0
  105. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v1/api.py +0 -0
  106. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v1/client.py +0 -0
  107. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/__init__.py +0 -0
  108. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/api.py +0 -0
  109. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/azure.py +0 -0
  110. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/client.py +0 -0
  111. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/bootstrap.py +0 -0
  112. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/cache.py +0 -0
  113. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/cli.py +0 -0
  114. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/env.py +0 -0
  115. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/inject.py +0 -0
  116. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/inject.py +0 -0
  117. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/requirements.py +0 -0
  118. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/shell.py +0 -0
  119. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/utils.py +0 -0
  120. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/__init__.py +0 -0
  121. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/__main__.py +0 -0
  122. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/_pathhack.py +0 -0
  123. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/clicli.py +0 -0
  124. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/install.py +0 -0
  125. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/main.py +0 -0
  126. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/managers.py +0 -0
  127. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/types.py +0 -0
  128. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/__init__.py +0 -0
  129. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/clipboard.py +0 -0
  130. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/darwin_cf.py +0 -0
  131. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/linux_x11.py +0 -0
  132. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmake.py +0 -0
  133. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/__init__.py +0 -0
  134. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/__main__.py +0 -0
  135. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/_cmdlog.py +0 -0
  136. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/cli.py +0 -0
  137. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/cmdlog.py +0 -0
  138. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/__init__.py +0 -0
  139. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/__main__.py +0 -0
  140. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/cli.py +0 -0
  141. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/codegen.py +0 -0
  142. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/__init__.py +0 -0
  143. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/handlers.py +0 -0
  144. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/http.py +0 -0
  145. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/routes.py +0 -0
  146. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/server.py +0 -0
  147. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/targets.py +0 -0
  148. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/__init__.py +0 -0
  149. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/magic.py +0 -0
  150. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/revisions.py +0 -0
  151. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/shallow.py +0 -0
  152. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/status.py +0 -0
  153. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/__init__.py +0 -0
  154. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/paths.py +0 -0
  155. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/secrets.py +0 -0
  156. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/shadow.py +0 -0
  157. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/imgur.py +0 -0
  158. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/__init__.py +0 -0
  159. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/cli.py +0 -0
  160. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/ides.py +0 -0
  161. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/open.py +0 -0
  162. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/__init__.py +0 -0
  163. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/__main__.py +0 -0
  164. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/cli.py +0 -0
  165. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/default.py +0 -0
  166. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/inject.py +0 -0
  167. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/inspect.py +0 -0
  168. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/__init__.py +0 -0
  169. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/base.py +0 -0
  170. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/inject.py +0 -0
  171. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/running.py +0 -0
  172. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/standalone.py +0 -0
  173. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/system.py +0 -0
  174. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/__init__.py +0 -0
  175. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/inject.py +0 -0
  176. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/install.py +0 -0
  177. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/provider.py +0 -0
  178. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/pyenv.py +0 -0
  179. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/resolvers.py +0 -0
  180. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/types.py +0 -0
  181. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/__init__.py +0 -0
  182. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/inject.py +0 -0
  183. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/provider.py +0 -0
  184. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/uv.py +0 -0
  185. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/venvs.py +0 -0
  186. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/__init__.py +0 -0
  187. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/__main__.py +0 -0
  188. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/cli.py +0 -0
  189. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/find.py +0 -0
  190. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/magic.py +0 -0
  191. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/prepare.py +0 -0
  192. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/styles.py +0 -0
  193. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/__init__.py +0 -0
  194. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/__main__.py +0 -0
  195. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/_dumping.py +0 -0
  196. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/building.py +0 -0
  197. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/dumping.py +0 -0
  198. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/main.py +0 -0
  199. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/mypy/__init__.py +0 -0
  200. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/mypy/debug.py +0 -0
  201. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/mypy/report.py +0 -0
  202. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/__init__.py +0 -0
  203. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/building.py +0 -0
  204. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/compression.py +0 -0
  205. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/data.py +0 -0
  206. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/datarefs.py +0 -0
  207. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/dataserver.py +0 -0
  208. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/loading.py +0 -0
  209. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/media.py +0 -0
  210. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/__init__.py +0 -0
  211. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/packing.py +0 -0
  212. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/repositories.py +0 -0
  213. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/unpacking.py +0 -0
  214. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/repositories.py +0 -0
  215. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/tars.py +0 -0
  216. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/__init__.py +0 -0
  217. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/marshal.py +0 -0
  218. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/names.py +0 -0
  219. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/requires.py +0 -0
  220. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/revisions.py +0 -0
  221. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/specifiers.py +0 -0
  222. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/versions.py +0 -0
  223. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/wheelfile.py +0 -0
  224. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pip.py +0 -0
  225. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/__init__.py +0 -0
  226. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/__main__.py +0 -0
  227. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/base.py +0 -0
  228. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/caches.py +0 -0
  229. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/git.py +0 -0
  230. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/imports.py +0 -0
  231. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/lite.py +0 -0
  232. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/main.py +0 -0
  233. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/manifests.py +0 -0
  234. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/scripts.py +0 -0
  235. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/unicode.py +0 -0
  236. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/__init__.py +0 -0
  237. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/apps/__init__.py +0 -0
  238. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/apps/ncdu.py +0 -0
  239. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/confirm.py +0 -0
  240. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/LICENSE +0 -0
  241. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/__init__.py +0 -0
  242. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/__main__.py +0 -0
  243. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/border.py +0 -0
  244. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/cli.py +0 -0
  245. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/markdown.py +0 -0
  246. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/parser.py +0 -0
  247. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/styles.py +0 -0
  248. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/tags.py +0 -0
  249. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/utils.py +0 -0
  250. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/__init__.py +0 -0
  251. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/attrdocs.py +0 -0
  252. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/bracepy.py +0 -0
  253. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/classdot.py +0 -0
  254. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/LICENSE +0 -0
  255. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/__init__.py +0 -0
  256. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/attrdoc.py +0 -0
  257. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/common.py +0 -0
  258. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/epydoc.py +0 -0
  259. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/google.py +0 -0
  260. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/numpydoc.py +0 -0
  261. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/parser.py +0 -0
  262. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/rest.py +0 -0
  263. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/findimports.py +0 -0
  264. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/__init__.py +0 -0
  265. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/bumpversion.py +0 -0
  266. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/execstat.py +0 -0
  267. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/importtrace.py +0 -0
  268. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/srcheaders.py +0 -0
  269. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/tools/__init__.py +0 -0
  270. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/tools/importscan.py +0 -0
  271. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/tools/mkrelimp.py +0 -0
  272. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/__init__.py +0 -0
  273. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/__main__.py +0 -0
  274. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/cexts.py +0 -0
  275. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/cli.py +0 -0
  276. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/configs.py +0 -0
  277. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/inject.py +0 -0
  278. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/pkg.py +0 -0
  279. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/reqs.py +0 -0
  280. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/resources/__init__.py +0 -0
  281. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/resources/docker-dev.sh +0 -0
  282. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/resources/python.sh +0 -0
  283. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/venvs.py +0 -0
  284. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/__init__.py +0 -0
  285. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/slowcat.py +0 -0
  286. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/tmpexec.py +0 -0
  287. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tagstrings.py +0 -0
  288. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/__init__.py +0 -0
  289. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/all.py +0 -0
  290. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/tokenizert.py +0 -0
  291. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/utils.py +0 -0
  292. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/__init__.py +0 -0
  293. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/cloc.py +0 -0
  294. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/diff.py +0 -0
  295. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/doc.py +0 -0
  296. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/docker.py +0 -0
  297. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/__init__.py +0 -0
  298. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/__main__.py +0 -0
  299. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/cli.py +0 -0
  300. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/cloning.py +0 -0
  301. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/consts.py +0 -0
  302. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/messages.py +0 -0
  303. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/__init__.py +0 -0
  304. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/__main__.py +0 -0
  305. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/cli.py +0 -0
  306. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/formats.py +0 -0
  307. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/io.py +0 -0
  308. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/parsing.py +0 -0
  309. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/processing.py +0 -0
  310. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/rendering.py +0 -0
  311. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/__init__.py +0 -0
  312. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/__main__.py +0 -0
  313. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/cli.py +0 -0
  314. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/resources/__init__.py +0 -0
  315. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  316. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  317. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/linehisto.py +0 -0
  318. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/mkenv.py +0 -0
  319. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/notebook.py +0 -0
  320. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pawk/__init__.py +0 -0
  321. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pawk/__main__.py +0 -0
  322. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pawk/pawk.py +0 -0
  323. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pip.py +0 -0
  324. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/prof.py +0 -0
  325. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/qr.py +0 -0
  326. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/shadow.py +0 -0
  327. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/shell.py +0 -0
  328. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/sqlrepl.py +0 -0
  329. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/SOURCES.txt +0 -0
  330. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/dependency_links.txt +0 -0
  331. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/entry_points.txt +0 -0
  332. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/top_level.txt +0 -0
  333. {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev431
3
+ Version: 0.0.0.dev432
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev431
17
+ Requires-Dist: omlish==0.0.0.dev432
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -7653,6 +7653,16 @@ class LoggingContext(Abstract):
7653
7653
  raise TypeError(f'LoggingContextInfo absent: {ty}')
7654
7654
  return info
7655
7655
 
7656
+
7657
+ @ta.final
7658
+ class SimpleLoggingContext(LoggingContext):
7659
+ def __init__(self, *infos: LoggingContextInfo) -> None:
7660
+ self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {type(i): i for i in infos}
7661
+
7662
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
7663
+ return self._infos.get(ty)
7664
+
7665
+
7656
7666
  ##
7657
7667
 
7658
7668
 
@@ -7854,10 +7864,14 @@ def _locking_logging_module_lock() -> ta.Iterator[None]:
7854
7864
  def configure_standard_logging(
7855
7865
  level: ta.Union[int, str] = logging.INFO,
7856
7866
  *,
7857
- json: bool = False,
7858
7867
  target: ta.Optional[logging.Logger] = None,
7868
+
7859
7869
  force: bool = False,
7870
+
7860
7871
  handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
7872
+
7873
+ formatter: ta.Optional[logging.Formatter] = None, # noqa
7874
+ json: bool = False,
7861
7875
  ) -> ta.Optional[StandardConfiguredLoggingHandler]:
7862
7876
  with _locking_logging_module_lock():
7863
7877
  if target is None:
@@ -7878,11 +7892,11 @@ def configure_standard_logging(
7878
7892
 
7879
7893
  #
7880
7894
 
7881
- formatter: logging.Formatter
7882
- if json:
7883
- formatter = JsonLoggingFormatter()
7884
- else:
7885
- formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
7895
+ if formatter is None:
7896
+ if json:
7897
+ formatter = JsonLoggingFormatter()
7898
+ else:
7899
+ formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS)) # noqa
7886
7900
  handler.setFormatter(formatter)
7887
7901
 
7888
7902
  #
@@ -9976,8 +9990,23 @@ class LoggingContextInfoRecordAdapters:
9976
9990
 
9977
9991
  def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.Caller]:
9978
9992
  # FIXME: piecemeal?
9979
- # FIXME: strip _STACK_INFO_PREFIX
9980
- raise NotImplementedError
9993
+ if (
9994
+ rec.pathname != self._UNKNOWN_PATH_NAME and
9995
+ rec.lineno != 0 and
9996
+ rec.funcName != self._UNKNOWN_FUNC_NAME
9997
+ ):
9998
+ if (sinfo := rec.stack_info) is not None and sinfo.startswith(self._STACK_INFO_PREFIX):
9999
+ sinfo = sinfo[len(self._STACK_INFO_PREFIX):]
10000
+ return LoggingContextInfos.Caller(
10001
+ file_path=rec.pathname,
10002
+
10003
+ line_no=rec.lineno,
10004
+ func_name=rec.funcName,
10005
+
10006
+ stack_info=sinfo,
10007
+ )
10008
+
10009
+ return None
9981
10010
 
9982
10011
  class SourceFile(Adapter[LoggingContextInfos.SourceFile]):
9983
10012
  info_cls: ta.ClassVar[ta.Type[LoggingContextInfos.SourceFile]] = LoggingContextInfos.SourceFile
@@ -10013,9 +10042,9 @@ class LoggingContextInfoRecordAdapters:
10013
10042
  )
10014
10043
 
10015
10044
  def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.SourceFile]:
10016
- if not (
10017
- rec.module is None or
10018
- rec.module == self._UNKNOWN_MODULE
10045
+ if (
10046
+ rec.module is not None and
10047
+ rec.module != self._UNKNOWN_MODULE
10019
10048
  ):
10020
10049
  return LoggingContextInfos.SourceFile(
10021
10050
  file_name=rec.filename,
@@ -10168,16 +10197,11 @@ _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS: ta.Mapping[ta.Type[LoggingContextInfo], L
10168
10197
  ##
10169
10198
 
10170
10199
 
10171
- KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
10172
- a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
10173
- )
10174
-
10175
-
10176
10200
  # Formatter:
10177
10201
  # - https://github.com/python/cpython/blob/39b2f82717a69dde7212bc39b673b0f55c99e6a3/Lib/logging/__init__.py#L514 (3.8)
10178
10202
  # - https://github.com/python/cpython/blob/f070f54c5f4a42c7c61d1d5d3b8f3b7203b4a0fb/Lib/logging/__init__.py#L554 (~3.14) # noqa
10179
10203
  #
10180
- KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
10204
+ _KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
10181
10205
  # The logged message, computed as msg % args. Set to `record.getMessage()`.
10182
10206
  message=str,
10183
10207
 
@@ -10191,7 +10215,15 @@ KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
10191
10215
  exc_text=ta.Optional[str],
10192
10216
  )
10193
10217
 
10194
- KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS)
10218
+
10219
+ ##
10220
+
10221
+
10222
+ _KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
10223
+ a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
10224
+ )
10225
+
10226
+ _KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS)
10195
10227
 
10196
10228
 
10197
10229
  class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
@@ -10201,13 +10233,13 @@ class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
10201
10233
  def _check_std_logging_record_attrs() -> None:
10202
10234
  if (
10203
10235
  len([a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs]) !=
10204
- len(KNOWN_STD_LOGGING_RECORD_ATTR_SET)
10236
+ len(_KNOWN_STD_LOGGING_RECORD_ATTR_SET)
10205
10237
  ):
10206
10238
  raise RuntimeError('Duplicate LoggingContextInfoRecordAdapter record attrs')
10207
10239
 
10208
10240
  rec_dct = dict(logging.makeLogRecord({}).__dict__)
10209
10241
 
10210
- if (unk_rec_fields := frozenset(rec_dct) - KNOWN_STD_LOGGING_RECORD_ATTR_SET):
10242
+ if (unk_rec_fields := frozenset(rec_dct) - _KNOWN_STD_LOGGING_RECORD_ATTR_SET):
10211
10243
  import warnings # noqa
10212
10244
 
10213
10245
  warnings.warn(
@@ -10235,10 +10267,33 @@ class LoggingContextLogRecord(logging.LogRecord):
10235
10267
  # - sinfo: str | None = None -> stack_info
10236
10268
 
10237
10269
  def __init__(self, *, _logging_context: LoggingContext) -> None: # noqa
10270
+ self._logging_context = _logging_context
10271
+
10238
10272
  for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_:
10239
10273
  self.__dict__.update(ad.context_to_record(_logging_context))
10240
10274
 
10241
10275
 
10276
+ ##
10277
+
10278
+
10279
+ @ta.final
10280
+ class LogRecordLoggingContext(LoggingContext):
10281
+ def __init__(self, rec: logging.LogRecord) -> None:
10282
+ if isinstance(rec, LoggingContextLogRecord):
10283
+ raise TypeError(rec)
10284
+
10285
+ self._rec = rec
10286
+
10287
+ self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {
10288
+ type(info): info
10289
+ for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_
10290
+ if (info := ad.record_to_info(rec)) is not None
10291
+ }
10292
+
10293
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
10294
+ return self._infos.get(ty)
10295
+
10296
+
10242
10297
  ########################################
10243
10298
  # ../../../omlish/secrets/tempssl.py
10244
10299
 
@@ -4220,10 +4220,14 @@ def _locking_logging_module_lock() -> ta.Iterator[None]:
4220
4220
  def configure_standard_logging(
4221
4221
  level: ta.Union[int, str] = logging.INFO,
4222
4222
  *,
4223
- json: bool = False,
4224
4223
  target: ta.Optional[logging.Logger] = None,
4224
+
4225
4225
  force: bool = False,
4226
+
4226
4227
  handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
4228
+
4229
+ formatter: ta.Optional[logging.Formatter] = None, # noqa
4230
+ json: bool = False,
4227
4231
  ) -> ta.Optional[StandardConfiguredLoggingHandler]:
4228
4232
  with _locking_logging_module_lock():
4229
4233
  if target is None:
@@ -4244,11 +4248,11 @@ def configure_standard_logging(
4244
4248
 
4245
4249
  #
4246
4250
 
4247
- formatter: logging.Formatter
4248
- if json:
4249
- formatter = JsonLoggingFormatter()
4250
- else:
4251
- formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
4251
+ if formatter is None:
4252
+ if json:
4253
+ formatter = JsonLoggingFormatter()
4254
+ else:
4255
+ formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS)) # noqa
4252
4256
  handler.setFormatter(formatter)
4253
4257
 
4254
4258
  #
@@ -7116,6 +7116,16 @@ class LoggingContext(Abstract):
7116
7116
  raise TypeError(f'LoggingContextInfo absent: {ty}')
7117
7117
  return info
7118
7118
 
7119
+
7120
+ @ta.final
7121
+ class SimpleLoggingContext(LoggingContext):
7122
+ def __init__(self, *infos: LoggingContextInfo) -> None:
7123
+ self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {type(i): i for i in infos}
7124
+
7125
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
7126
+ return self._infos.get(ty)
7127
+
7128
+
7119
7129
  ##
7120
7130
 
7121
7131
 
@@ -7317,10 +7327,14 @@ def _locking_logging_module_lock() -> ta.Iterator[None]:
7317
7327
  def configure_standard_logging(
7318
7328
  level: ta.Union[int, str] = logging.INFO,
7319
7329
  *,
7320
- json: bool = False,
7321
7330
  target: ta.Optional[logging.Logger] = None,
7331
+
7322
7332
  force: bool = False,
7333
+
7323
7334
  handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
7335
+
7336
+ formatter: ta.Optional[logging.Formatter] = None, # noqa
7337
+ json: bool = False,
7324
7338
  ) -> ta.Optional[StandardConfiguredLoggingHandler]:
7325
7339
  with _locking_logging_module_lock():
7326
7340
  if target is None:
@@ -7341,11 +7355,11 @@ def configure_standard_logging(
7341
7355
 
7342
7356
  #
7343
7357
 
7344
- formatter: logging.Formatter
7345
- if json:
7346
- formatter = JsonLoggingFormatter()
7347
- else:
7348
- formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
7358
+ if formatter is None:
7359
+ if json:
7360
+ formatter = JsonLoggingFormatter()
7361
+ else:
7362
+ formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS)) # noqa
7349
7363
  handler.setFormatter(formatter)
7350
7364
 
7351
7365
  #
@@ -8121,8 +8135,23 @@ class LoggingContextInfoRecordAdapters:
8121
8135
 
8122
8136
  def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.Caller]:
8123
8137
  # FIXME: piecemeal?
8124
- # FIXME: strip _STACK_INFO_PREFIX
8125
- raise NotImplementedError
8138
+ if (
8139
+ rec.pathname != self._UNKNOWN_PATH_NAME and
8140
+ rec.lineno != 0 and
8141
+ rec.funcName != self._UNKNOWN_FUNC_NAME
8142
+ ):
8143
+ if (sinfo := rec.stack_info) is not None and sinfo.startswith(self._STACK_INFO_PREFIX):
8144
+ sinfo = sinfo[len(self._STACK_INFO_PREFIX):]
8145
+ return LoggingContextInfos.Caller(
8146
+ file_path=rec.pathname,
8147
+
8148
+ line_no=rec.lineno,
8149
+ func_name=rec.funcName,
8150
+
8151
+ stack_info=sinfo,
8152
+ )
8153
+
8154
+ return None
8126
8155
 
8127
8156
  class SourceFile(Adapter[LoggingContextInfos.SourceFile]):
8128
8157
  info_cls: ta.ClassVar[ta.Type[LoggingContextInfos.SourceFile]] = LoggingContextInfos.SourceFile
@@ -8158,9 +8187,9 @@ class LoggingContextInfoRecordAdapters:
8158
8187
  )
8159
8188
 
8160
8189
  def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.SourceFile]:
8161
- if not (
8162
- rec.module is None or
8163
- rec.module == self._UNKNOWN_MODULE
8190
+ if (
8191
+ rec.module is not None and
8192
+ rec.module != self._UNKNOWN_MODULE
8164
8193
  ):
8165
8194
  return LoggingContextInfos.SourceFile(
8166
8195
  file_name=rec.filename,
@@ -8313,16 +8342,11 @@ _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS: ta.Mapping[ta.Type[LoggingContextInfo], L
8313
8342
  ##
8314
8343
 
8315
8344
 
8316
- KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
8317
- a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
8318
- )
8319
-
8320
-
8321
8345
  # Formatter:
8322
8346
  # - https://github.com/python/cpython/blob/39b2f82717a69dde7212bc39b673b0f55c99e6a3/Lib/logging/__init__.py#L514 (3.8)
8323
8347
  # - https://github.com/python/cpython/blob/f070f54c5f4a42c7c61d1d5d3b8f3b7203b4a0fb/Lib/logging/__init__.py#L554 (~3.14) # noqa
8324
8348
  #
8325
- KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
8349
+ _KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
8326
8350
  # The logged message, computed as msg % args. Set to `record.getMessage()`.
8327
8351
  message=str,
8328
8352
 
@@ -8336,7 +8360,15 @@ KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
8336
8360
  exc_text=ta.Optional[str],
8337
8361
  )
8338
8362
 
8339
- KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS)
8363
+
8364
+ ##
8365
+
8366
+
8367
+ _KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
8368
+ a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
8369
+ )
8370
+
8371
+ _KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS)
8340
8372
 
8341
8373
 
8342
8374
  class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
@@ -8346,13 +8378,13 @@ class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
8346
8378
  def _check_std_logging_record_attrs() -> None:
8347
8379
  if (
8348
8380
  len([a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs]) !=
8349
- len(KNOWN_STD_LOGGING_RECORD_ATTR_SET)
8381
+ len(_KNOWN_STD_LOGGING_RECORD_ATTR_SET)
8350
8382
  ):
8351
8383
  raise RuntimeError('Duplicate LoggingContextInfoRecordAdapter record attrs')
8352
8384
 
8353
8385
  rec_dct = dict(logging.makeLogRecord({}).__dict__)
8354
8386
 
8355
- if (unk_rec_fields := frozenset(rec_dct) - KNOWN_STD_LOGGING_RECORD_ATTR_SET):
8387
+ if (unk_rec_fields := frozenset(rec_dct) - _KNOWN_STD_LOGGING_RECORD_ATTR_SET):
8356
8388
  import warnings # noqa
8357
8389
 
8358
8390
  warnings.warn(
@@ -8380,10 +8412,33 @@ class LoggingContextLogRecord(logging.LogRecord):
8380
8412
  # - sinfo: str | None = None -> stack_info
8381
8413
 
8382
8414
  def __init__(self, *, _logging_context: LoggingContext) -> None: # noqa
8415
+ self._logging_context = _logging_context
8416
+
8383
8417
  for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_:
8384
8418
  self.__dict__.update(ad.context_to_record(_logging_context))
8385
8419
 
8386
8420
 
8421
+ ##
8422
+
8423
+
8424
+ @ta.final
8425
+ class LogRecordLoggingContext(LoggingContext):
8426
+ def __init__(self, rec: logging.LogRecord) -> None:
8427
+ if isinstance(rec, LoggingContextLogRecord):
8428
+ raise TypeError(rec)
8429
+
8430
+ self._rec = rec
8431
+
8432
+ self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {
8433
+ type(info): info
8434
+ for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_
8435
+ if (info := ad.record_to_info(rec)) is not None
8436
+ }
8437
+
8438
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
8439
+ return self._infos.get(ty)
8440
+
8441
+
8387
8442
  ########################################
8388
8443
  # ../../../omlish/subprocesses/base.py
8389
8444
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev431
3
+ Version: 0.0.0.dev432
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev431
17
+ Requires-Dist: omlish==0.0.0.dev432
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev431
1
+ omlish==0.0.0.dev432
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.13'
16
- version = '0.0.0.dev431'
16
+ version = '0.0.0.dev432'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,7 +24,7 @@ classifiers = [
24
24
  ]
25
25
  description = 'omdev'
26
26
  dependencies = [
27
- 'omlish == 0.0.0.dev431',
27
+ 'omlish == 0.0.0.dev432',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
File without changes
File without changes
File without changes