omdev 0.0.24__tar.gz → 0.0.26__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 (522) hide show
  1. {omdev-0.0.24/omdev.egg-info → omdev-0.0.26}/PKG-INFO +8 -8
  2. {omdev-0.0.24 → omdev-0.0.26}/omdev/__about__.py +1 -1
  3. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/_dumping.py +20 -7
  4. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/cli.py +3 -1
  5. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/codegen.py +8 -17
  6. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/dumping.py +19 -6
  7. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/marshal.py +1 -1
  8. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/wheelfile.py +1 -1
  9. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/ci.py +55 -46
  10. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/interp.py +1 -19
  11. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/io/pipelines.py +29 -18
  12. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/pidfiles.py +1 -19
  13. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/pyproject.py +3 -21
  14. {omdev-0.0.24 → omdev-0.0.26/omdev.egg-info}/PKG-INFO +8 -8
  15. {omdev-0.0.24 → omdev-0.0.26}/omdev.egg-info/requires.txt +7 -7
  16. {omdev-0.0.24 → omdev-0.0.26}/pyproject.toml +8 -8
  17. {omdev-0.0.24 → omdev-0.0.26}/LICENSE +0 -0
  18. {omdev-0.0.24 → omdev-0.0.26}/MANIFEST.in +0 -0
  19. {omdev-0.0.24 → omdev-0.0.26}/README.md +0 -0
  20. {omdev-0.0.24 → omdev-0.0.26}/omdev/.omlish-manifests.json +0 -0
  21. {omdev-0.0.24 → omdev-0.0.26}/omdev/README.md +0 -0
  22. {omdev-0.0.24 → omdev-0.0.26}/omdev/__init__.py +0 -0
  23. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/__init__.py +0 -0
  24. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/__main__.py +0 -0
  25. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/cli/__init__.py +0 -0
  26. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/cli/main.py +0 -0
  27. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/__init__.py +0 -0
  28. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/gen.py +0 -0
  29. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/imports.py +0 -0
  30. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/manifests.py +0 -0
  31. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/resources.py +0 -0
  32. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/srcfiles.py +0 -0
  33. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/strip.py +0 -0
  34. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/types.py +0 -0
  35. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/gen/typing.py +0 -0
  36. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/info.py +0 -0
  37. {omdev-0.0.24 → omdev-0.0.26}/omdev/amalg/sources.py +0 -0
  38. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/__init__.py +0 -0
  39. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/__init__.py +0 -0
  40. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/cache.py +0 -0
  41. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/contexts.py +0 -0
  42. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/currents.py +0 -0
  43. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/fns.py +0 -0
  44. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/resolvers.py +0 -0
  45. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/storage.py +0 -0
  46. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/compute/types.py +0 -0
  47. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/__init__.py +0 -0
  48. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/actions.py +0 -0
  49. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/cache.py +0 -0
  50. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/consts.py +0 -0
  51. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/defaults.py +0 -0
  52. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/manifests.py +0 -0
  53. {omdev-0.0.24 → omdev-0.0.26}/omdev/cache/data/specs.py +0 -0
  54. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/__init__.py +0 -0
  55. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/darwin/__init__.py +0 -0
  56. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/darwin/aps.py +0 -0
  57. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/darwin/ax.py +0 -0
  58. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/darwin/cf.py +0 -0
  59. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/darwin/cg.py +0 -0
  60. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/linux/__init__.py +0 -0
  61. {omdev-0.0.24 → omdev-0.0.26}/omdev/capi/linux/x11.py +0 -0
  62. {omdev-0.0.24 → omdev-0.0.26}/omdev/cc/__init__.py +0 -0
  63. {omdev-0.0.24 → omdev-0.0.26}/omdev/cc/__main__.py +0 -0
  64. {omdev-0.0.24 → omdev-0.0.26}/omdev/cc/cdeps.py +0 -0
  65. {omdev-0.0.24 → omdev-0.0.26}/omdev/cc/cdeps.toml +0 -0
  66. {omdev-0.0.24 → omdev-0.0.26}/omdev/cc/cli.py +0 -0
  67. {omdev-0.0.24 → omdev-0.0.26}/omdev/cc/srclangs.py +0 -0
  68. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/__init__.py +0 -0
  69. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_boilerplate.cc +0 -0
  70. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/LICENSE +0 -0
  71. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/__init__.py +0 -0
  72. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/build_ext.py +0 -0
  73. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  74. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  75. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/options.py +0 -0
  76. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  77. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/dir_util.py +0 -0
  78. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/errors.py +0 -0
  79. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/extension.py +0 -0
  80. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/file_util.py +0 -0
  81. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/modified.py +0 -0
  82. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/spawn.py +0 -0
  83. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/sysconfig.py +0 -0
  84. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/util.py +0 -0
  85. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/_distutils/version.py +0 -0
  86. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/build.py +0 -0
  87. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/cmake.py +0 -0
  88. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/importhook.py +0 -0
  89. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/magic.py +0 -0
  90. {omdev-0.0.24 → omdev-0.0.26}/omdev/cexts/scan.py +0 -0
  91. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/__init__.py +0 -0
  92. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/__main__.py +0 -0
  93. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/cache.py +0 -0
  94. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/ci.py +0 -0
  95. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/cli.py +0 -0
  96. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/compose.py +0 -0
  97. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/consts.py +0 -0
  98. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/__init__.py +0 -0
  99. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/buildcaching.py +0 -0
  100. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/cache.py +0 -0
  101. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  102. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/cacheserved/cache.py +0 -0
  103. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  104. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/cmds.py +0 -0
  105. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/dataserver.py +0 -0
  106. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/imagepulling.py +0 -0
  107. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/inject.py +0 -0
  108. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/packing.py +0 -0
  109. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/repositories.py +0 -0
  110. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/docker/utils.py +0 -0
  111. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/__init__.py +0 -0
  112. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/__init__.py +0 -0
  113. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/clients.py +0 -0
  114. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v1/__init__.py +0 -0
  115. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v1/api.py +0 -0
  116. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v1/client.py +0 -0
  117. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v2/__init__.py +0 -0
  118. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v2/api.py +0 -0
  119. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v2/azure.py +0 -0
  120. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/api/v2/client.py +0 -0
  121. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/bootstrap.py +0 -0
  122. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/cache.py +0 -0
  123. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/cli.py +0 -0
  124. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/env.py +0 -0
  125. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/github/inject.py +0 -0
  126. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/inject.py +0 -0
  127. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/requirements.py +0 -0
  128. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/shell.py +0 -0
  129. {omdev-0.0.24 → omdev-0.0.26}/omdev/ci/utils.py +0 -0
  130. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/__init__.py +0 -0
  131. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/__main__.py +0 -0
  132. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/_pathhack.py +0 -0
  133. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/clicli.py +0 -0
  134. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/install.py +0 -0
  135. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/main.py +0 -0
  136. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/managers.py +0 -0
  137. {omdev-0.0.24 → omdev-0.0.26}/omdev/cli/types.py +0 -0
  138. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/__init__.py +0 -0
  139. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/capi/__init__.py +0 -0
  140. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/capi/darwin_cf.py +0 -0
  141. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/capi/linux_x11.py +0 -0
  142. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/commands.py +0 -0
  143. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/platform.py +0 -0
  144. {omdev-0.0.24 → omdev-0.0.26}/omdev/clipboard/types.py +0 -0
  145. {omdev-0.0.24 → omdev-0.0.26}/omdev/cmake.py +0 -0
  146. {omdev-0.0.24 → omdev-0.0.26}/omdev/cmdlog/__init__.py +0 -0
  147. {omdev-0.0.24 → omdev-0.0.26}/omdev/cmdlog/__main__.py +0 -0
  148. {omdev-0.0.24 → omdev-0.0.26}/omdev/cmdlog/_cmdlog.py +0 -0
  149. {omdev-0.0.24 → omdev-0.0.26}/omdev/cmdlog/cli.py +0 -0
  150. {omdev-0.0.24 → omdev-0.0.26}/omdev/cmdlog/cmdlog.py +0 -0
  151. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/__init__.py +0 -0
  152. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/__main__.py +0 -0
  153. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataclasses/_template.py +0 -0
  154. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataserver/__init__.py +0 -0
  155. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataserver/handlers.py +0 -0
  156. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataserver/http.py +0 -0
  157. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataserver/routes.py +0 -0
  158. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataserver/server.py +0 -0
  159. {omdev-0.0.24 → omdev-0.0.26}/omdev/dataserver/targets.py +0 -0
  160. {omdev-0.0.24 → omdev-0.0.26}/omdev/diffs/__init__.py +0 -0
  161. {omdev-0.0.24 → omdev-0.0.26}/omdev/diffs/__main__.py +0 -0
  162. {omdev-0.0.24 → omdev-0.0.26}/omdev/diffs/cli.py +0 -0
  163. {omdev-0.0.24 → omdev-0.0.26}/omdev/diffs/parsing.py +0 -0
  164. {omdev-0.0.24 → omdev-0.0.26}/omdev/diffs/rendering.py +0 -0
  165. {omdev-0.0.24 → omdev-0.0.26}/omdev/diffs/types.py +0 -0
  166. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/__init__.py +0 -0
  167. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/__main__.py +0 -0
  168. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/build.py +0 -0
  169. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/cli.py +0 -0
  170. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/config.py +0 -0
  171. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/config.toml +0 -0
  172. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/content.py +0 -0
  173. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/gen.py +0 -0
  174. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/helpers.py +0 -0
  175. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/ops.py +0 -0
  176. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/rendering.py +0 -0
  177. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/.python-versions.json +0 -0
  178. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  179. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  180. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  181. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  182. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  183. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  184. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  185. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  186. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
  187. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  188. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  189. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  190. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  191. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  192. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  193. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  194. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  195. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  196. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  197. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  198. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  199. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  200. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
  201. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  202. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  203. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  204. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/install-pi +0 -0
  205. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  206. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/resources/shift-uid.sh +0 -0
  207. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/run.py +0 -0
  208. {omdev-0.0.24 → omdev-0.0.26}/omdev/dockerdev/utils.py +0 -0
  209. {omdev-0.0.24 → omdev-0.0.26}/omdev/git/__init__.py +0 -0
  210. {omdev-0.0.24 → omdev-0.0.26}/omdev/git/magic.py +0 -0
  211. {omdev-0.0.24 → omdev-0.0.26}/omdev/git/revisions.py +0 -0
  212. {omdev-0.0.24 → omdev-0.0.26}/omdev/git/shallow.py +0 -0
  213. {omdev-0.0.24 → omdev-0.0.26}/omdev/git/status.py +0 -0
  214. {omdev-0.0.24 → omdev-0.0.26}/omdev/home/__init__.py +0 -0
  215. {omdev-0.0.24 → omdev-0.0.26}/omdev/home/__main__.py +0 -0
  216. {omdev-0.0.24 → omdev-0.0.26}/omdev/home/cli.py +0 -0
  217. {omdev-0.0.24 → omdev-0.0.26}/omdev/home/paths.py +0 -0
  218. {omdev-0.0.24 → omdev-0.0.26}/omdev/home/secrets.py +0 -0
  219. {omdev-0.0.24 → omdev-0.0.26}/omdev/home/shadow.py +0 -0
  220. {omdev-0.0.24 → omdev-0.0.26}/omdev/imgur.py +0 -0
  221. {omdev-0.0.24 → omdev-0.0.26}/omdev/intellij/__init__.py +0 -0
  222. {omdev-0.0.24 → omdev-0.0.26}/omdev/intellij/cli.py +0 -0
  223. {omdev-0.0.24 → omdev-0.0.26}/omdev/intellij/ides.py +0 -0
  224. {omdev-0.0.24 → omdev-0.0.26}/omdev/intellij/open.py +0 -0
  225. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/__init__.py +0 -0
  226. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/__main__.py +0 -0
  227. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/cli.py +0 -0
  228. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/default.py +0 -0
  229. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/inject.py +0 -0
  230. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/inspect.py +0 -0
  231. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/providers/__init__.py +0 -0
  232. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/providers/base.py +0 -0
  233. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/providers/inject.py +0 -0
  234. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/providers/running.py +0 -0
  235. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/providers/standalone.py +0 -0
  236. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/providers/system.py +0 -0
  237. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/pyenv/__init__.py +0 -0
  238. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/pyenv/inject.py +0 -0
  239. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/pyenv/install.py +0 -0
  240. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/pyenv/provider.py +0 -0
  241. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/pyenv/pyenv.py +0 -0
  242. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/resolvers.py +0 -0
  243. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/types.py +0 -0
  244. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/uv/__init__.py +0 -0
  245. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/uv/inject.py +0 -0
  246. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/uv/provider.py +0 -0
  247. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/uv/uv.py +0 -0
  248. {omdev-0.0.24 → omdev-0.0.26}/omdev/interp/venvs.py +0 -0
  249. {omdev-0.0.24 → omdev-0.0.26}/omdev/java/__init__.py +0 -0
  250. {omdev-0.0.24 → omdev-0.0.26}/omdev/java/__main__.py +0 -0
  251. {omdev-0.0.24 → omdev-0.0.26}/omdev/java/cli.py +0 -0
  252. {omdev-0.0.24 → omdev-0.0.26}/omdev/java/pomgen.py +0 -0
  253. {omdev-0.0.24 → omdev-0.0.26}/omdev/java/utils.py +0 -0
  254. {omdev-0.0.24 → omdev-0.0.26}/omdev/java/xml.py +0 -0
  255. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/__init__.py +0 -0
  256. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/__main__.py +0 -0
  257. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/cli.py +0 -0
  258. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/find.py +0 -0
  259. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/magic.py +0 -0
  260. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/prepare.py +0 -0
  261. {omdev-0.0.24 → omdev-0.0.26}/omdev/magic/styles.py +0 -0
  262. {omdev-0.0.24 → omdev-0.0.26}/omdev/manifests/__init__.py +0 -0
  263. {omdev-0.0.24 → omdev-0.0.26}/omdev/manifests/__main__.py +0 -0
  264. {omdev-0.0.24 → omdev-0.0.26}/omdev/manifests/_dumping.py +0 -0
  265. {omdev-0.0.24 → omdev-0.0.26}/omdev/manifests/building.py +0 -0
  266. {omdev-0.0.24 → omdev-0.0.26}/omdev/manifests/dumping.py +0 -0
  267. {omdev-0.0.24 → omdev-0.0.26}/omdev/manifests/main.py +0 -0
  268. {omdev-0.0.24 → omdev-0.0.26}/omdev/markdown/__init__.py +0 -0
  269. {omdev-0.0.24 → omdev-0.0.26}/omdev/markdown/incparse.py +0 -0
  270. {omdev-0.0.24 → omdev-0.0.26}/omdev/markdown/tokens.py +0 -0
  271. {omdev-0.0.24 → omdev-0.0.26}/omdev/mypy/__init__.py +0 -0
  272. {omdev-0.0.24 → omdev-0.0.26}/omdev/mypy/debug.py +0 -0
  273. {omdev-0.0.24 → omdev-0.0.26}/omdev/mypy/report.py +0 -0
  274. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/__init__.py +0 -0
  275. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/names.py +0 -0
  276. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/requires.py +0 -0
  277. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/revisions.py +0 -0
  278. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/specifiers.py +0 -0
  279. {omdev-0.0.24 → omdev-0.0.26}/omdev/packaging/versions.py +0 -0
  280. {omdev-0.0.24 → omdev-0.0.26}/omdev/pip.py +0 -0
  281. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/__init__.py +0 -0
  282. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/__main__.py +0 -0
  283. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/base.py +0 -0
  284. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/blanklines.py +0 -0
  285. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/caches.py +0 -0
  286. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/git.py +0 -0
  287. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/imports.py +0 -0
  288. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/lite.py +0 -0
  289. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/main.py +0 -0
  290. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/manifests.py +0 -0
  291. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/scripts.py +0 -0
  292. {omdev-0.0.24 → omdev-0.0.26}/omdev/precheck/unicode.py +0 -0
  293. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/__init__.py +0 -0
  294. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/asts/__init__.py +0 -0
  295. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/asts/parents.py +0 -0
  296. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/asts/toplevel.py +0 -0
  297. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/asts/visitors.py +0 -0
  298. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/attrdocs.py +0 -0
  299. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/bracepy.py +0 -0
  300. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/classdot.py +0 -0
  301. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/LICENSE +0 -0
  302. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/__init__.py +0 -0
  303. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/attrdoc.py +0 -0
  304. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/common.py +0 -0
  305. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/epydoc.py +0 -0
  306. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/google.py +0 -0
  307. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/numpydoc.py +0 -0
  308. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/parser.py +0 -0
  309. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/docstrings/rest.py +0 -0
  310. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/findimports.py +0 -0
  311. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/reprs.py +0 -0
  312. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/scripts/__init__.py +0 -0
  313. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/scripts/bumpversion.py +0 -0
  314. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/scripts/importtrace.py +0 -0
  315. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/srcheaders.py +0 -0
  316. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tokens/__init__.py +0 -0
  317. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tokens/all.py +0 -0
  318. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tokens/tokenizert.py +0 -0
  319. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tokens/utils.py +0 -0
  320. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tools/__init__.py +0 -0
  321. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tools/fixdocstrings.py +0 -0
  322. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tools/importscan.py +0 -0
  323. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tools/mkrelimp.py +0 -0
  324. {omdev-0.0.24 → omdev-0.0.26}/omdev/py/tools/pipdepup.py +0 -0
  325. {omdev-0.0.24 → omdev-0.0.26}/omdev/py.typed +0 -0
  326. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/__init__.py +0 -0
  327. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/__main__.py +0 -0
  328. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/cli.py +0 -0
  329. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/configs.py +0 -0
  330. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/inject.py +0 -0
  331. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/pkg.py +0 -0
  332. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/reqs.py +0 -0
  333. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/resources/dockerdev.sh +0 -0
  334. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/resources/python.sh +0 -0
  335. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/tools/__init__.py +0 -0
  336. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/tools/aboutdeps.py +0 -0
  337. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/tools/buildrs.py +0 -0
  338. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/tools/pyversions.py +0 -0
  339. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/venvs.py +0 -0
  340. {omdev-0.0.24 → omdev-0.0.26}/omdev/pyproject/versions.py +0 -0
  341. {omdev-0.0.24 → omdev-0.0.26}/omdev/rs/__init__.py +0 -0
  342. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/__init__.py +0 -0
  343. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/__init__.py +0 -0
  344. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/formats/__init__.py +0 -0
  345. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/formats/goyaml.py +0 -0
  346. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/inject.py +0 -0
  347. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/io/__init__.py +0 -0
  348. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/io/streams.py +0 -0
  349. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/logs.py +0 -0
  350. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/lib/marshal.py +0 -0
  351. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/slowcat.py +0 -0
  352. {omdev-0.0.24 → omdev-0.0.26}/omdev/scripts/tmpexec.py +0 -0
  353. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/__init__.py +0 -0
  354. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/__init__.py +0 -0
  355. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/messages/__init__.py +0 -0
  356. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/messages/base.py +0 -0
  357. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/messages/formats.py +0 -0
  358. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/messages/messages.py +0 -0
  359. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/messages/parsing.py +0 -0
  360. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/numerics/__init__.py +0 -0
  361. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/numerics/formats.py +0 -0
  362. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/numerics/numerics.py +0 -0
  363. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/numerics/types.py +0 -0
  364. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/LICENSE +0 -0
  365. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/__init__.py +0 -0
  366. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/consts.py +0 -0
  367. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/errors.py +0 -0
  368. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/message.py +0 -0
  369. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/nuh.py +0 -0
  370. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/parsing.py +0 -0
  371. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/rendering.py +0 -0
  372. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/tags.py +0 -0
  373. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/irc/protocol/utils.py +0 -0
  374. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/__init__.py +0 -0
  375. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
  376. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
  377. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
  378. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/cli.py +0 -0
  379. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/config.py +0 -0
  380. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/errors.py +0 -0
  381. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/generator.py +0 -0
  382. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/ir.py +0 -0
  383. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/names.py +0 -0
  384. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
  385. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
  386. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/typing.py +0 -0
  387. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/__init__.py +0 -0
  388. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/building.py +0 -0
  389. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/compression.py +0 -0
  390. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/data.py +0 -0
  391. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/datarefs.py +0 -0
  392. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/dataserver.py +0 -0
  393. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/loading.py +0 -0
  394. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/media.py +0 -0
  395. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/pack/__init__.py +0 -0
  396. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/pack/packing.py +0 -0
  397. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/pack/repositories.py +0 -0
  398. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/pack/unpacking.py +0 -0
  399. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/repositories.py +0 -0
  400. {omdev-0.0.24 → omdev-0.0.26}/omdev/specs/oci/tars.py +0 -0
  401. {omdev-0.0.24 → omdev-0.0.26}/omdev/supervisor/__init__.py +0 -0
  402. {omdev-0.0.24 → omdev-0.0.26}/omdev/supervisor/__main__.py +0 -0
  403. {omdev-0.0.24 → omdev-0.0.26}/omdev/supervisor/cli.py +0 -0
  404. {omdev-0.0.24 → omdev-0.0.26}/omdev/tagstrings.py +0 -0
  405. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/__init__.py +0 -0
  406. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/cloc.py +0 -0
  407. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/diff.py +0 -0
  408. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/doc.py +0 -0
  409. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/docker.py +0 -0
  410. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/git/__init__.py +0 -0
  411. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/git/__main__.py +0 -0
  412. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/git/cli.py +0 -0
  413. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/git/cloning.py +0 -0
  414. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/git/consts.py +0 -0
  415. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/git/messages.py +0 -0
  416. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/__init__.py +0 -0
  417. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/__main__.py +0 -0
  418. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/cli.py +0 -0
  419. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/formats.py +0 -0
  420. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/io.py +0 -0
  421. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/parsing.py +0 -0
  422. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/processing.py +0 -0
  423. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/json/rendering.py +0 -0
  424. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/jsonview/__init__.py +0 -0
  425. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/jsonview/__main__.py +0 -0
  426. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/jsonview/cli.py +0 -0
  427. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  428. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  429. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  430. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/linehisto.py +0 -0
  431. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/mkenv.py +0 -0
  432. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/notebook.py +0 -0
  433. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/pawk/README.md +0 -0
  434. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/pawk/__init__.py +0 -0
  435. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/pawk/__main__.py +0 -0
  436. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/pawk/pawk.py +0 -0
  437. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/pip.py +0 -0
  438. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/prof.py +0 -0
  439. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/qr.py +0 -0
  440. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/shadow.py +0 -0
  441. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/shell.py +0 -0
  442. {omdev-0.0.24 → omdev-0.0.26}/omdev/tools/sqlrepl.py +0 -0
  443. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/__init__.py +0 -0
  444. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/__init__.py +0 -0
  445. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/edit/__init__.py +0 -0
  446. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/edit/main.py +0 -0
  447. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/irc/__init__.py +0 -0
  448. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/irc/__main__.py +0 -0
  449. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/irc/app.py +0 -0
  450. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/irc/client.py +0 -0
  451. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/irc/commands.py +0 -0
  452. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/irc/main.py +0 -0
  453. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/LICENSE +0 -0
  454. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/__init__.py +0 -0
  455. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/__main__.py +0 -0
  456. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/app.py +0 -0
  457. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/cli.py +0 -0
  458. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  459. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/utils.py +0 -0
  460. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/jtree/widgets.py +0 -0
  461. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/markdown/__init__.py +0 -0
  462. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/markdown/__main__.py +0 -0
  463. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/apps/markdown/cli.py +0 -0
  464. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/__init__.py +0 -0
  465. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/console2.py +0 -0
  466. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/LICENSE +0 -0
  467. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/__init__.py +0 -0
  468. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/__main__.py +0 -0
  469. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/_compat.py +0 -0
  470. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/cli.py +0 -0
  471. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/renderables.py +0 -0
  472. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/rendering.py +0 -0
  473. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/diff/underlinebar.py +0 -0
  474. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/markdown2.py +0 -0
  475. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/textual/__init__.py +0 -0
  476. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/textual/dark.py +0 -0
  477. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/textual/dump.py +0 -0
  478. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/textual/themes.py +0 -0
  479. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/rich/trirule.py +0 -0
  480. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/__init__.py +0 -0
  481. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/actionmenu.py +0 -0
  482. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/LICENSE +0 -0
  483. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/__init__.py +0 -0
  484. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/client.py +0 -0
  485. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/__init__.py +0 -0
  486. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/borders.py +0 -0
  487. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/colors.py +0 -0
  488. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/colors.tcss +0 -0
  489. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/easing.py +0 -0
  490. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/easing.tcss +0 -0
  491. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/keys.py +0 -0
  492. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/protocol.py +0 -0
  493. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/redirect_output.py +0 -0
  494. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/renderables.py +0 -0
  495. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/server.py +0 -0
  496. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/service.py +0 -0
  497. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
  498. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/altdevtools/tools/diagnose.py +0 -0
  499. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/app2.py +0 -0
  500. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  501. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  502. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/autocomplete/matching.py +0 -0
  503. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/autocomplete/paths.py +0 -0
  504. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/autocomplete/widget.py +0 -0
  505. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/binding2.py +0 -0
  506. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/clipboard.py +0 -0
  507. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/debug/__init__.py +0 -0
  508. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/debug/dominfo.py +0 -0
  509. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/debug/screen.py +0 -0
  510. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/devtools.py +0 -0
  511. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/dom2.py +0 -0
  512. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/drivers2.py +0 -0
  513. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/logging2.py +0 -0
  514. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/render2.py +0 -0
  515. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/screen2.py +0 -0
  516. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/types.py +0 -0
  517. {omdev-0.0.24 → omdev-0.0.26}/omdev/tui/textual/widgets2.py +0 -0
  518. {omdev-0.0.24 → omdev-0.0.26}/omdev.egg-info/SOURCES.txt +0 -0
  519. {omdev-0.0.24 → omdev-0.0.26}/omdev.egg-info/dependency_links.txt +0 -0
  520. {omdev-0.0.24 → omdev-0.0.26}/omdev.egg-info/entry_points.txt +0 -0
  521. {omdev-0.0.24 → omdev-0.0.26}/omdev.egg-info/top_level.txt +0 -0
  522. {omdev-0.0.24 → omdev-0.0.26}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.24
3
+ Version: 0.0.26
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,10 +14,10 @@ Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.24
17
+ Requires-Dist: omlish==0.0.26
18
18
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.24; extra == "all"
20
- Requires-Dist: ommlds==0.0.24; extra == "all"
19
+ Requires-Dist: ominfra==0.0.26; extra == "all"
20
+ Requires-Dist: ommlds==0.0.26; extra == "all"
21
21
  Requires-Dist: black~=26.5; extra == "all"
22
22
  Requires-Dist: pycparser~=3.0; extra == "all"
23
23
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -25,7 +25,7 @@ Requires-Dist: docutils~=0.23; extra == "all"
25
25
  Requires-Dist: markdown-it-py~=4.2; extra == "all"
26
26
  Requires-Dist: mdit-py-plugins~=0.6; extra == "all"
27
27
  Requires-Dist: pygments~=2.20; extra == "all"
28
- Requires-Dist: mypy~=2.1; extra == "all"
28
+ Requires-Dist: mypy~=2.2; extra == "all"
29
29
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
30
30
  Requires-Dist: segno~=1.6; extra == "all"
31
31
  Requires-Dist: rich~=15.0; extra == "all"
@@ -33,9 +33,9 @@ Requires-Dist: textual~=8.2; extra == "all"
33
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
34
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
35
  Provides-Extra: ominfra
36
- Requires-Dist: ominfra==0.0.24; extra == "ominfra"
36
+ Requires-Dist: ominfra==0.0.26; extra == "ominfra"
37
37
  Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.24; extra == "ommlds"
38
+ Requires-Dist: ommlds==0.0.26; extra == "ommlds"
39
39
  Provides-Extra: black
40
40
  Requires-Dist: black~=26.5; extra == "black"
41
41
  Provides-Extra: c
@@ -47,7 +47,7 @@ Requires-Dist: markdown-it-py~=4.2; extra == "doc"
47
47
  Requires-Dist: mdit-py-plugins~=0.6; extra == "doc"
48
48
  Requires-Dist: pygments~=2.20; extra == "doc"
49
49
  Provides-Extra: mypy
50
- Requires-Dist: mypy~=2.1; extra == "mypy"
50
+ Requires-Dist: mypy~=2.2; extra == "mypy"
51
51
  Provides-Extra: prof
52
52
  Requires-Dist: gprof2dot~=2025.4; extra == "prof"
53
53
  Provides-Extra: qr
@@ -41,7 +41,7 @@ class Project(ProjectBase):
41
41
  ],
42
42
 
43
43
  'mypy': [
44
- 'mypy ~= 2.1',
44
+ 'mypy ~= 2.2',
45
45
  ],
46
46
 
47
47
  'prof': [
@@ -21,6 +21,7 @@ import json
21
21
  import os.path
22
22
  import sys
23
23
  import threading
24
+ import traceback
24
25
  import types
25
26
  import typing as ta
26
27
  import uuid
@@ -45,7 +46,7 @@ def __omlish_amalg__(): # noqa
45
46
  dict(path='../../omlish/lite/strings.py', sha1='89631bb5cfd6496176db71ab3abd58b89872068b'),
46
47
  dict(path='../../omlish/lite/json.py', sha1='01124e62093ebd4078602f16df0ec04cb724a612'),
47
48
  dict(path='../../omlish/lite/marshal.py', sha1='66bc88d705df274e9fa1168d2aab20c7e3935cf6'),
48
- dict(path='dumping.py', sha1='ae4148f671d2cb1e7bf1a819b78ca388b4680bbc'),
49
+ dict(path='dumping.py', sha1='3a116abfd0a6c5abc2e2ad3f2ff48ce8c114ac07'),
49
50
  ],
50
51
  )
51
52
 
@@ -1985,6 +1986,7 @@ class _DataclassCodegenDumper:
1985
1986
  init_file_path: str,
1986
1987
  out_file_path: str,
1987
1988
  cfg_pkg_name: ta.Optional[str] = None,
1989
+ debug: bool = False,
1988
1990
  ) -> None:
1989
1991
  from omlish.dataclasses.impl.configs import PACKAGE_CONFIG_CACHE # noqa
1990
1992
  from omlish.dataclasses.impl.generation.compilation import OpCompiler # noqa
@@ -1992,6 +1994,8 @@ class _DataclassCodegenDumper:
1992
1994
  from omlish.dataclasses.impl.generation.ops import OpRef # noqa
1993
1995
  from omlish.dataclasses.impl.generation.processor import Codegen # noqa
1994
1996
  from omlish.dataclasses.impl.generation.processor import GeneratorProcessor # noqa
1997
+ from omlish.dataclasses.impl.generation.processor import ProcessingOption # noqa
1998
+ from omlish.dataclasses.impl.generation.processor import Verbosity # noqa
1995
1999
  from omlish.dataclasses.impl.processing.base import ProcessingContext # noqa
1996
2000
  from omlish.dataclasses.impl.processing.driving import processing_options_context # noqa
1997
2001
 
@@ -2060,7 +2064,7 @@ class _DataclassCodegenDumper:
2060
2064
  try:
2061
2065
  __import__(spec)
2062
2066
  except Exception as e: # noqa
2063
- import_errors[spec] = repr(e)
2067
+ import_errors[spec] = ''.join(traceback.format_exc())
2064
2068
 
2065
2069
  finally:
2066
2070
  cur_module = None
@@ -2113,11 +2117,20 @@ class _DataclassCodegenDumper:
2113
2117
 
2114
2118
  #
2115
2119
 
2116
- with processing_options_context(Codegen(
2117
- style='aot',
2118
- force=True,
2119
- callback=callback,
2120
- )):
2120
+ proc_opts: list[ProcessingOption] = []
2121
+
2122
+ proc_opts.append(Codegen(
2123
+ style='aot',
2124
+ force=True,
2125
+ callback=callback,
2126
+ ))
2127
+
2128
+ if debug:
2129
+ proc_opts.append(Verbosity(
2130
+ debug=True,
2131
+ ))
2132
+
2133
+ with processing_options_context(*proc_opts):
2121
2134
  process_dir(os.path.dirname(init_file_path))
2122
2135
 
2123
2136
  #
@@ -13,6 +13,7 @@ class Cli(ap.Cli):
13
13
  ap.arg('--dump-inline', action='store_true'),
14
14
  ap.arg('--dry-run', action='store_true'),
15
15
  ap.arg('--print-code', action='store_true'),
16
+ ap.arg('--debug', action='store_true'),
16
17
  ap.arg('-j', '--jobs', type=int),
17
18
  )
18
19
  def codegen(self) -> None:
@@ -20,8 +21,9 @@ class Cli(ap.Cli):
20
21
 
21
22
  asyncio.run(DataclassCodeGen(
22
23
  dump_inline=self.args.dump_inline,
23
- print_code=self.args.print_code,
24
24
  dry_run=self.args.dry_run,
25
+ print_code=self.args.print_code,
26
+ debug=self.args.debug,
25
27
  ).run(
26
28
  self.args.roots,
27
29
  **(dict(concurrency=self.args.jobs) if self.args.jobs is not None else {}),
@@ -74,16 +74,18 @@ class DataclassCodeGen:
74
74
  *,
75
75
  target_line_width: int | None = None,
76
76
  dump_inline: bool = False,
77
- print_code: bool = False,
78
77
  dry_run: bool = False,
78
+ print_code: bool = False,
79
+ debug: bool = False,
79
80
  subprocess_kwargs: ta.Mapping[str, ta.Any] | None = None,
80
81
  ) -> None:
81
82
  super().__init__()
82
83
 
83
84
  self._target_line_width = target_line_width or self.DEFAULT_TARGET_LINE_WIDTH
84
85
  self._dump_inline = dump_inline
85
- self._print_code = print_code
86
86
  self._dry_run = dry_run
87
+ self._print_code = print_code
88
+ self._debug = debug
87
89
  self._subprocess_kwargs = subprocess_kwargs
88
90
 
89
91
  #
@@ -203,6 +205,7 @@ class DataclassCodeGen:
203
205
  init_file_path=cfg_pkg.init_file_path,
204
206
  out_file_path=out_file_path,
205
207
  cfg_pkg_name=cfg_pkg.name,
208
+ **(dict(debug=True) if self._debug else {}),
206
209
  )
207
210
 
208
211
  start_time = time.time()
@@ -235,6 +238,9 @@ class DataclassCodeGen:
235
238
  ) -> None:
236
239
  gen_file_path = os.path.join(os.path.dirname(cfg_pkg.init_file_path), '_dataclasses.py')
237
240
 
241
+ for err_mod, err_str in output.import_errors.items():
242
+ log.error(lambda: f'Failed to import {err_mod}: {err_str}')
243
+
238
244
  if os.path.isfile(gen_file_path):
239
245
  if not _is_generated_py_file(gen_file_path):
240
246
  raise RuntimeError(f'Refusing to overwrite non-generated file: {gen_file_path!r}')
@@ -315,21 +321,6 @@ class DataclassCodeGen:
315
321
  f' plan_repr_sha1={pr_sha1!r},',
316
322
  ])
317
323
 
318
- op_ref_idents = [r.ident for r in x.refs if r.kind == 'op']
319
- if op_ref_idents:
320
- lines.extend([
321
- f' op_ref_idents=(',
322
- *[
323
- f' {r!r},'
324
- for r in sorted(op_ref_idents)
325
- ],
326
- f' ),',
327
- ])
328
- else:
329
- lines.append(
330
- ' op_ref_idents=(),',
331
- )
332
-
333
324
  lines.extend([
334
325
  f' cls_names=(',
335
326
  *[
@@ -3,6 +3,7 @@
3
3
  # @omlish-amalg _dumping.py
4
4
  import dataclasses as dc
5
5
  import os.path
6
+ import traceback
6
7
  import typing as ta
7
8
 
8
9
  from omlish.lite.check import check
@@ -57,6 +58,7 @@ class _DataclassCodegenDumper:
57
58
  init_file_path: str,
58
59
  out_file_path: str,
59
60
  cfg_pkg_name: ta.Optional[str] = None,
61
+ debug: bool = False,
60
62
  ) -> None:
61
63
  from omlish.dataclasses.impl.configs import PACKAGE_CONFIG_CACHE # noqa
62
64
  from omlish.dataclasses.impl.generation.compilation import OpCompiler # noqa
@@ -64,6 +66,8 @@ class _DataclassCodegenDumper:
64
66
  from omlish.dataclasses.impl.generation.ops import OpRef # noqa
65
67
  from omlish.dataclasses.impl.generation.processor import Codegen # noqa
66
68
  from omlish.dataclasses.impl.generation.processor import GeneratorProcessor # noqa
69
+ from omlish.dataclasses.impl.generation.processor import ProcessingOption # noqa
70
+ from omlish.dataclasses.impl.generation.processor import Verbosity # noqa
67
71
  from omlish.dataclasses.impl.processing.base import ProcessingContext # noqa
68
72
  from omlish.dataclasses.impl.processing.driving import processing_options_context # noqa
69
73
 
@@ -132,7 +136,7 @@ class _DataclassCodegenDumper:
132
136
  try:
133
137
  __import__(spec)
134
138
  except Exception as e: # noqa
135
- import_errors[spec] = repr(e)
139
+ import_errors[spec] = ''.join(traceback.format_exc())
136
140
 
137
141
  finally:
138
142
  cur_module = None
@@ -185,11 +189,20 @@ class _DataclassCodegenDumper:
185
189
 
186
190
  #
187
191
 
188
- with processing_options_context(Codegen(
189
- style='aot',
190
- force=True,
191
- callback=callback,
192
- )):
192
+ proc_opts: list[ProcessingOption] = []
193
+
194
+ proc_opts.append(Codegen(
195
+ style='aot',
196
+ force=True,
197
+ callback=callback,
198
+ ))
199
+
200
+ if debug:
201
+ proc_opts.append(Verbosity(
202
+ debug=True,
203
+ ))
204
+
205
+ with processing_options_context(*proc_opts):
193
206
  process_dir(os.path.dirname(init_file_path))
194
207
 
195
208
  #
@@ -45,7 +45,7 @@ class RequiresMarkerListMarshaler(msh.Marshaler):
45
45
 
46
46
  class RequiresMarkerListMarshalerFactory(msh.MarshalerFactory):
47
47
  def make_marshaler(self, ctx: msh.MarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], msh.Marshaler] | None:
48
- if rty is not MarshalRequiresMarkerList:
48
+ if rty.runtime_object is not MarshalRequiresMarkerList:
49
49
  return None
50
50
  return lambda: RequiresMarkerListMarshaler(
51
51
  ctx.make_marshaler(RequiresMarkerItem),
@@ -129,7 +129,7 @@ class WheelFile(zipfile.ZipFile):
129
129
  def open( # type: ignore # noqa
130
130
  self,
131
131
  name_or_info: ta.Union[str, zipfile.ZipInfo],
132
- mode: str = 'r', # ta.Literal["r", "w"]
132
+ mode: ta.Literal['r', 'w'] = 'r',
133
133
  pwd: ta.Optional[bytes] = None,
134
134
  ) -> ta.IO[bytes]:
135
135
  def _update_crc(newdata: bytes) -> None:
@@ -134,7 +134,7 @@ def __omlish_amalg__(): # noqa
134
134
  dict(path='../../omlish/argparse/parsers.py', sha1='51044d7b7d1b1ca27173be2d3c007d574827a188'),
135
135
  dict(path='../../omlish/formats/yaml/goyaml/errors.py', sha1='c4dda09d78bc14d9824e45e3d5d434185ee5598b'),
136
136
  dict(path='../../omlish/http/headers.py', sha1='aa2182505c9b09e2b658df8f8b3d927bc5fae13b'),
137
- dict(path='../../omlish/http/parsing.py', sha1='4477d00145b207dd0397ecfbc8fef5ae8c641bb3'),
137
+ dict(path='../../omlish/http/parsing.py', sha1='1adee35518ee930557f2c3b19fd4253df98a5b3c'),
138
138
  dict(path='../../omlish/http/pipelines/compression/codings.py', sha1='b88bf055dff1b040ecde17d98484559e9078b8cf'), # noqa
139
139
  dict(path='../../omlish/io/pipelines/core.py', sha1='cec21cacb85a0f443ea4caa021b33184d3816cf2'),
140
140
  dict(path='../../omlish/io/streams/types.py', sha1='6a3167bf66a0a8817e19115b9c31973b2ff77788'),
@@ -163,7 +163,7 @@ def __omlish_amalg__(): # noqa
163
163
  dict(path='../../omlish/http/simple/types.py', sha1='8e31b8c442603b396523884ff554d3df6e7f4c1a'),
164
164
  dict(path='../../omlish/io/pipelines/bytes/buffering.py', sha1='c19bddb05ef9449aa1a1c228901cab0d2d927946'),
165
165
  dict(path='../../omlish/io/pipelines/drivers/metadata.py', sha1='44e49cb87136933ffe867087897eab5004034a93'), # noqa
166
- dict(path='../../omlish/io/pipelines/flow/types.py', sha1='ac9a91d0a8115443984a75a63ffac51a7acef580'),
166
+ dict(path='../../omlish/io/pipelines/flow/types.py', sha1='4353968e5bd490f4121eadf9e391076bd2673f28'),
167
167
  dict(path='../../omlish/io/pipelines/sched/types.py', sha1='854b3f0f8ed5da2132a516f787b9019f5cb4eef5'),
168
168
  dict(path='../../omlish/io/streams/base.py', sha1='bdeaff419684dec34fd0dc59808a9686131992bc'),
169
169
  dict(path='../../omlish/io/streams/framing.py', sha1='dc2d7f638b042619fd3d95789c71532a29fd5fe4'),
@@ -176,7 +176,7 @@ def __omlish_amalg__(): # noqa
176
176
  dict(path='../../omlish/sockets/handlers/simple.py', sha1='78e1a4c419c8f82d10577f19654a3d8ce28d757f'),
177
177
  dict(path='../../omlish/sockets/handlers/ssl.py', sha1='94c0acedffe5b581419a7a92c2f1c4e4a58b7a83'),
178
178
  dict(path='../../omlish/sockets/handlers/threading.py', sha1='24d7815c7bf8fcf3480267020785a3edc90b32f9'),
179
- dict(path='../../omlish/subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
179
+ dict(path='../../omlish/subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
180
180
  dict(path='../../omlish/subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
181
181
  dict(path='../dataserver/handlers.py', sha1='ce0a208cbd7f66b26b9539ec6d5e7ef1041a4886'),
182
182
  dict(path='../dataserver/routes.py', sha1='97379cba6a531ca1bde33de0eb432bd9b36791c1'),
@@ -4924,6 +4924,7 @@ class SemanticHeaderHttpParseErrorCode(enum.Enum):
4924
4924
  INVALID_AUTHORIZATION = enum.auto()
4925
4925
  TE_WITHOUT_CHUNKED_LAST = enum.auto()
4926
4926
  TE_IN_HTTP10 = enum.auto()
4927
+ INVALID_TE = enum.auto()
4927
4928
 
4928
4929
 
4929
4930
  class EncodingHttpParseErrorCode(enum.Enum):
@@ -5203,14 +5204,14 @@ class HttpParser:
5203
5204
  """Strictness knobs. Defaults are maximally strict."""
5204
5205
 
5205
5206
  allow_obs_fold: bool = False
5206
- allow_space_before_colon: bool = False # DANGEROUS - upstreams may not handle well
5207
+ dangerous_allow_space_before_colon: bool = False # DANGEROUS - upstreams may not handle well
5207
5208
  allow_multiple_content_lengths: bool = False
5208
5209
  allow_content_length_with_te: bool = False
5209
5210
  allow_bare_lf: bool = False
5210
5211
  allow_missing_host: bool = False
5211
5212
  allow_multiple_hosts: bool = False
5212
5213
  allow_unknown_transfer_encoding: bool = False
5213
- allow_empty_header_values: bool = True
5214
+ reject_empty_header_values: bool = False
5214
5215
  allow_bare_cr_in_value: bool = False
5215
5216
  allow_te_without_chunked_in_response: bool = False
5216
5217
  allow_transfer_encoding_http10: bool = False
@@ -5879,7 +5880,7 @@ class _HttpParseContext:
5879
5880
 
5880
5881
  # Check for space before colon
5881
5882
  if name_bytes[-1] in self._OWS_CHARS:
5882
- if not self.config.allow_space_before_colon:
5883
+ if not self.config.dangerous_allow_space_before_colon:
5883
5884
  raise HeaderFieldHttpParseError(
5884
5885
  code=HeaderFieldHttpParseErrorCode.SPACE_BEFORE_COLON,
5885
5886
  message='Whitespace between field-name and colon',
@@ -5930,7 +5931,7 @@ class _HttpParseContext:
5930
5931
  value_stripped = self._strip_ows(value_bytes)
5931
5932
 
5932
5933
  # Check for empty value
5933
- if not value_stripped and not self.config.allow_empty_header_values:
5934
+ if not value_stripped and self.config.reject_empty_header_values:
5934
5935
  raise HeaderFieldHttpParseError(
5935
5936
  code=HeaderFieldHttpParseErrorCode.INVALID_FIELD_VALUE,
5936
5937
  message='Empty header field value not allowed',
@@ -6050,7 +6051,10 @@ class _HttpParseContext:
6050
6051
  for part in v.split(','):
6051
6052
  stripped = part.strip()
6052
6053
 
6053
- if not stripped.isdigit():
6054
+ # NOTE: must be ASCII digits only. str.isdigit() is True for non-ASCII numerics present in the
6055
+ # latin-1-decoded value (e.g. superscripts U+00B2/B3/B9), but int() rejects those with a ValueError -
6056
+ # which would escape as an uncaught exception rather than a clean parse error.
6057
+ if not (stripped.isascii() and stripped.isdigit()):
6054
6058
  raise SemanticHeaderHttpParseError(
6055
6059
  code=SemanticHeaderHttpParseErrorCode.INVALID_CONTENT_LENGTH,
6056
6060
  message=f'Content-Length value is not a valid non-negative integer: {stripped!r}',
@@ -6410,16 +6414,28 @@ class _HttpParseContext:
6410
6414
  if q_str is not None:
6411
6415
  q = float(q_str) # caller wraps ValueError
6412
6416
 
6417
+ # float() also accepts 'nan'/'inf'/overflowing exponents; reject those and any out-of-range value. The
6418
+ # chained comparison is False for NaN and +/-inf, so this single check covers non-finite and range at once.
6419
+ # (RFC 9110 qvalue is 0 <= q <= 1.)
6420
+ if not (0.0 <= q <= 1.0):
6421
+ raise ValueError(f'q-value out of range [0, 1]: {q_str!r}')
6422
+
6413
6423
  return token, q, params
6414
6424
 
6415
6425
  def _prepare_te(self, headers: ParsedHttpHeaders, prepared: PreparedParsedHttpHeaders) -> None:
6416
6426
  if 'te' not in headers:
6417
6427
  return
6418
6428
 
6419
- codings = [
6420
- self._split_header_element(p)[0]
6421
- for p in self._parse_comma_list(headers['te'])
6422
- ]
6429
+ try:
6430
+ codings = [
6431
+ self._split_header_element(p)[0]
6432
+ for p in self._parse_comma_list(headers['te'])
6433
+ ]
6434
+ except ValueError:
6435
+ raise SemanticHeaderHttpParseError(
6436
+ code=SemanticHeaderHttpParseErrorCode.INVALID_TE,
6437
+ message=f'Invalid q-value in TE header: {headers["te"]!r}',
6438
+ ) from None
6423
6439
 
6424
6440
  prepared.te = [c for c in codings if c]
6425
6441
 
@@ -13526,25 +13542,36 @@ class IoPipelineFlowMessages(NamespaceClass):
13526
13542
  ):
13527
13543
  pass
13528
13544
 
13545
+ ##
13546
+ # TODO / WIP:
13547
+ # - Level-triggered writability, edge-notified: emitters send one message per *transition*, never repeats.
13548
+ # ReadyForOutput means 'output may flow'; PauseOutput means 'stop producing output'.
13549
+ # - They flow INBOUND (transport -> app), originated by the transport head (or a dedicated watermark handler
13550
+ # watching an OutboundBytesBufferingIoPipelineHandler) from its unflushed backlog vs high/low watermarks.
13551
+ # - Handlers that buffer outbound data (ssl, compression, ...) do not forward these blindly: they combine the
13552
+ # transport-side signal with their own buffer level and re-announce the COMBINED value inbound, again only on
13553
+ # change. Pass-through handlers just propagate.
13554
+ # - The implied initial state is writable; a pipeline that never sends either message behaves as if ReadyForOutput
13555
+ # were always in effect. As with the other flow messages, these are only ever sent when an IoPipelineFlow service
13556
+ # is present.
13557
+
13529
13558
  #
13530
13559
 
13531
- # # TODO:
13532
- # @ta.final
13533
- # @dc.dataclass(frozen=True)
13534
- # class ReadyForOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
13535
- # IoPipelineMessages.MayPropagate,
13536
- # IoPipelineMessages.NeverOutbound,
13537
- # ):
13538
- # pass
13560
+ @ta.final
13561
+ @dc.dataclass(frozen=True)
13562
+ class ReadyForOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
13563
+ IoPipelineMessages.MayPropagate,
13564
+ IoPipelineMessages.NeverOutbound,
13565
+ ):
13566
+ pass
13539
13567
 
13540
- # # TODO:
13541
- # @ta.final
13542
- # @dc.dataclass(frozen=True)
13543
- # class PauseOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
13544
- # IoPipelineMessages.MayPropagate,
13545
- # IoPipelineMessages.NeverOutbound,
13546
- # ):
13547
- # pass
13568
+ @ta.final
13569
+ @dc.dataclass(frozen=True)
13570
+ class PauseOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
13571
+ IoPipelineMessages.MayPropagate,
13572
+ IoPipelineMessages.NeverOutbound,
13573
+ ):
13574
+ pass
13548
13575
 
13549
13576
 
13550
13577
  ##
@@ -16017,17 +16044,6 @@ class SubprocessRun:
16017
16044
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
16018
16045
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
16019
16046
 
16020
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
16021
-
16022
- async def maysync_run(
16023
- self,
16024
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
16025
- **kwargs: ta.Any,
16026
- ) -> SubprocessRunOutput:
16027
- if maysync_subprocesses is None:
16028
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
16029
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
16030
-
16031
16047
 
16032
16048
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
16033
16049
 
@@ -16060,13 +16076,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
16060
16076
  ) -> T:
16061
16077
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
16062
16078
 
16063
- async def maysync_run(
16064
- self,
16065
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
16066
- **kwargs: ta.Any,
16067
- ) -> T:
16068
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
16069
-
16070
16079
 
16071
16080
  ########################################
16072
16081
  # ../../../omlish/subprocesses/wrap.py
@@ -77,7 +77,7 @@ def __omlish_amalg__(): # noqa
77
77
  dict(path='../../omlish/asyncs/asyncio/timeouts.py', sha1='4d31b02b3c39b8f2fa7e94db36552fde6942e36a'),
78
78
  dict(path='../../omlish/lite/inject.py', sha1='172296edc98b32e51fdaa44ccc0a05b56e94f3ba'),
79
79
  dict(path='../../omlish/logs/std/json.py', sha1='2a75553131e4d5331bb0cedde42aa183f403fc3b'),
80
- dict(path='../../omlish/subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
80
+ dict(path='../../omlish/subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
81
81
  dict(path='../../omlish/subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
82
82
  dict(path='providers/base.py', sha1='f5d068c21f230d742e9015b033cd6320f4c68898'),
83
83
  dict(path='../../omlish/logs/std/standard.py', sha1='472f1f0623d6bcd301612551432afa7e3a661a34'),
@@ -4790,17 +4790,6 @@ class SubprocessRun:
4790
4790
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
4791
4791
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
4792
4792
 
4793
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
4794
-
4795
- async def maysync_run(
4796
- self,
4797
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
4798
- **kwargs: ta.Any,
4799
- ) -> SubprocessRunOutput:
4800
- if maysync_subprocesses is None:
4801
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
4802
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
4803
-
4804
4793
 
4805
4794
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
4806
4795
 
@@ -4833,13 +4822,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
4833
4822
  ) -> T:
4834
4823
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
4835
4824
 
4836
- async def maysync_run(
4837
- self,
4838
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
4839
- **kwargs: ta.Any,
4840
- ) -> T:
4841
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
4842
-
4843
4825
 
4844
4826
  ########################################
4845
4827
  # ../../../omlish/subprocesses/wrap.py
@@ -52,7 +52,7 @@ def __omlish_amalg__(): # noqa
52
52
  dict(path='asyncs.py', sha1='a78bd64bada44716809c19e95d6ca4a96f3a28d7'),
53
53
  dict(path='bytes/buffering.py', sha1='c19bddb05ef9449aa1a1c228901cab0d2d927946'),
54
54
  dict(path='drivers/metadata.py', sha1='44e49cb87136933ffe867087897eab5004034a93'),
55
- dict(path='flow/types.py', sha1='ac9a91d0a8115443984a75a63ffac51a7acef580'),
55
+ dict(path='flow/types.py', sha1='4353968e5bd490f4121eadf9e391076bd2673f28'),
56
56
  dict(path='handlers/fns.py', sha1='6dd1901ebdbdb31caeffab06d239f1c41e3f2726'),
57
57
  dict(path='handlers/queues.py', sha1='f49d19c5dd7de77299bedbfb3a77a36479fd1edf'),
58
58
  dict(path='sched/types.py', sha1='854b3f0f8ed5da2132a516f787b9019f5cb4eef5'),
@@ -4145,25 +4145,36 @@ class IoPipelineFlowMessages(NamespaceClass):
4145
4145
  ):
4146
4146
  pass
4147
4147
 
4148
+ ##
4149
+ # TODO / WIP:
4150
+ # - Level-triggered writability, edge-notified: emitters send one message per *transition*, never repeats.
4151
+ # ReadyForOutput means 'output may flow'; PauseOutput means 'stop producing output'.
4152
+ # - They flow INBOUND (transport -> app), originated by the transport head (or a dedicated watermark handler
4153
+ # watching an OutboundBytesBufferingIoPipelineHandler) from its unflushed backlog vs high/low watermarks.
4154
+ # - Handlers that buffer outbound data (ssl, compression, ...) do not forward these blindly: they combine the
4155
+ # transport-side signal with their own buffer level and re-announce the COMBINED value inbound, again only on
4156
+ # change. Pass-through handlers just propagate.
4157
+ # - The implied initial state is writable; a pipeline that never sends either message behaves as if ReadyForOutput
4158
+ # were always in effect. As with the other flow messages, these are only ever sent when an IoPipelineFlow service
4159
+ # is present.
4160
+
4148
4161
  #
4149
4162
 
4150
- # # TODO:
4151
- # @ta.final
4152
- # @dc.dataclass(frozen=True)
4153
- # class ReadyForOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
4154
- # IoPipelineMessages.MayPropagate,
4155
- # IoPipelineMessages.NeverOutbound,
4156
- # ):
4157
- # pass
4158
-
4159
- # # TODO:
4160
- # @ta.final
4161
- # @dc.dataclass(frozen=True)
4162
- # class PauseOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
4163
- # IoPipelineMessages.MayPropagate,
4164
- # IoPipelineMessages.NeverOutbound,
4165
- # ):
4166
- # pass
4163
+ @ta.final
4164
+ @dc.dataclass(frozen=True)
4165
+ class ReadyForOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
4166
+ IoPipelineMessages.MayPropagate,
4167
+ IoPipelineMessages.NeverOutbound,
4168
+ ):
4169
+ pass
4170
+
4171
+ @ta.final
4172
+ @dc.dataclass(frozen=True)
4173
+ class PauseOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
4174
+ IoPipelineMessages.MayPropagate,
4175
+ IoPipelineMessages.NeverOutbound,
4176
+ ):
4177
+ pass
4167
4178
 
4168
4179
 
4169
4180
  ##
@@ -72,7 +72,7 @@ def __omlish_amalg__(): # noqa
72
72
  dict(path='../../logs/protocols.py', sha1='05ca4d1d7feb50c4e3b9f22ee371aa7bf4b3dbd1'),
73
73
  dict(path='../../argparse/cli.py', sha1='aef500dd2d8f5a65c4c04ede11355ac8eb513f2e'),
74
74
  dict(path='../../lite/args.py', sha1='ae96b0baeb376617a63c0e64632ab2c5ff4171a8'),
75
- dict(path='../../subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
75
+ dict(path='../../subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
76
76
  dict(path='../../subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
77
77
  dict(path='../../diag/cmds/lslocks.py', sha1='b1e09c9374f9007cb19c2c5009937e7d2f4c0a7b'),
78
78
  dict(path='../../diag/cmds/lsof.py', sha1='0a58d3c05ce0038690ce8c5b64dd96e7b21b5853'),
@@ -3700,17 +3700,6 @@ class SubprocessRun:
3700
3700
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
3701
3701
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
3702
3702
 
3703
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
3704
-
3705
- async def maysync_run(
3706
- self,
3707
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
3708
- **kwargs: ta.Any,
3709
- ) -> SubprocessRunOutput:
3710
- if maysync_subprocesses is None:
3711
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
3712
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
3713
-
3714
3703
 
3715
3704
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
3716
3705
 
@@ -3743,13 +3732,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
3743
3732
  ) -> T:
3744
3733
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
3745
3734
 
3746
- async def maysync_run(
3747
- self,
3748
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
3749
- **kwargs: ta.Any,
3750
- ) -> T:
3751
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
3752
-
3753
3735
 
3754
3736
  ########################################
3755
3737
  # ../../../subprocesses/wrap.py