omdev 0.0.7__tar.gz → 0.0.8__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 (474) hide show
  1. {omdev-0.0.7/omdev.egg-info → omdev-0.0.8}/PKG-INFO +2 -2
  2. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/marshal.py +13 -0
  3. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/requires.py +4 -1
  4. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/ci.py +11 -10
  5. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/formats/goyaml.py +11 -10
  6. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/pyproject.py +266 -2
  7. {omdev-0.0.7 → omdev-0.0.8/omdev.egg-info}/PKG-INFO +2 -2
  8. {omdev-0.0.7 → omdev-0.0.8}/omdev.egg-info/requires.txt +1 -1
  9. {omdev-0.0.7 → omdev-0.0.8}/pyproject.toml +2 -2
  10. {omdev-0.0.7 → omdev-0.0.8}/LICENSE +0 -0
  11. {omdev-0.0.7 → omdev-0.0.8}/MANIFEST.in +0 -0
  12. {omdev-0.0.7 → omdev-0.0.8}/README.md +0 -0
  13. {omdev-0.0.7 → omdev-0.0.8}/omdev/.omlish-manifests.json +0 -0
  14. {omdev-0.0.7 → omdev-0.0.8}/omdev/README.md +0 -0
  15. {omdev-0.0.7 → omdev-0.0.8}/omdev/__about__.py +0 -0
  16. {omdev-0.0.7 → omdev-0.0.8}/omdev/__init__.py +0 -0
  17. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/__init__.py +0 -0
  18. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/__main__.py +0 -0
  19. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/cli/__init__.py +0 -0
  20. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/cli/main.py +0 -0
  21. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/__init__.py +0 -0
  22. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/gen.py +0 -0
  23. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/imports.py +0 -0
  24. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/manifests.py +0 -0
  25. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/resources.py +0 -0
  26. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/srcfiles.py +0 -0
  27. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/strip.py +0 -0
  28. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/types.py +0 -0
  29. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/gen/typing.py +0 -0
  30. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/info.py +0 -0
  31. {omdev-0.0.7 → omdev-0.0.8}/omdev/amalg/sources.py +0 -0
  32. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/__init__.py +0 -0
  33. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/__init__.py +0 -0
  34. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/cache.py +0 -0
  35. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/contexts.py +0 -0
  36. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/currents.py +0 -0
  37. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/fns.py +0 -0
  38. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/resolvers.py +0 -0
  39. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/storage.py +0 -0
  40. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/compute/types.py +0 -0
  41. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/__init__.py +0 -0
  42. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/actions.py +0 -0
  43. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/cache.py +0 -0
  44. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/consts.py +0 -0
  45. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/defaults.py +0 -0
  46. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/manifests.py +0 -0
  47. {omdev-0.0.7 → omdev-0.0.8}/omdev/cache/data/specs.py +0 -0
  48. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/__init__.py +0 -0
  49. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/darwin/__init__.py +0 -0
  50. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/darwin/aps.py +0 -0
  51. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/darwin/ax.py +0 -0
  52. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/darwin/cf.py +0 -0
  53. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/darwin/cg.py +0 -0
  54. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/linux/__init__.py +0 -0
  55. {omdev-0.0.7 → omdev-0.0.8}/omdev/capi/linux/x11.py +0 -0
  56. {omdev-0.0.7 → omdev-0.0.8}/omdev/cc/__init__.py +0 -0
  57. {omdev-0.0.7 → omdev-0.0.8}/omdev/cc/__main__.py +0 -0
  58. {omdev-0.0.7 → omdev-0.0.8}/omdev/cc/cdeps.py +0 -0
  59. {omdev-0.0.7 → omdev-0.0.8}/omdev/cc/cdeps.toml +0 -0
  60. {omdev-0.0.7 → omdev-0.0.8}/omdev/cc/cli.py +0 -0
  61. {omdev-0.0.7 → omdev-0.0.8}/omdev/cc/srclangs.py +0 -0
  62. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/__init__.py +0 -0
  63. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_boilerplate.cc +0 -0
  64. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/LICENSE +0 -0
  65. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/__init__.py +0 -0
  66. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/build_ext.py +0 -0
  67. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  68. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  69. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/compilers/options.py +0 -0
  70. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  71. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/dir_util.py +0 -0
  72. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/errors.py +0 -0
  73. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/extension.py +0 -0
  74. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/file_util.py +0 -0
  75. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/modified.py +0 -0
  76. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/spawn.py +0 -0
  77. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/sysconfig.py +0 -0
  78. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/util.py +0 -0
  79. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/_distutils/version.py +0 -0
  80. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/build.py +0 -0
  81. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/cmake.py +0 -0
  82. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/importhook.py +0 -0
  83. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/magic.py +0 -0
  84. {omdev-0.0.7 → omdev-0.0.8}/omdev/cexts/scan.py +0 -0
  85. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/__init__.py +0 -0
  86. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/__main__.py +0 -0
  87. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/cache.py +0 -0
  88. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/ci.py +0 -0
  89. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/cli.py +0 -0
  90. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/compose.py +0 -0
  91. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/consts.py +0 -0
  92. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/__init__.py +0 -0
  93. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/buildcaching.py +0 -0
  94. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/cache.py +0 -0
  95. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  96. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/cacheserved/cache.py +0 -0
  97. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  98. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/cmds.py +0 -0
  99. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/dataserver.py +0 -0
  100. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/imagepulling.py +0 -0
  101. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/inject.py +0 -0
  102. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/packing.py +0 -0
  103. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/repositories.py +0 -0
  104. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/docker/utils.py +0 -0
  105. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/__init__.py +0 -0
  106. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/__init__.py +0 -0
  107. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/clients.py +0 -0
  108. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v1/__init__.py +0 -0
  109. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v1/api.py +0 -0
  110. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v1/client.py +0 -0
  111. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v2/__init__.py +0 -0
  112. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v2/api.py +0 -0
  113. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v2/azure.py +0 -0
  114. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/api/v2/client.py +0 -0
  115. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/bootstrap.py +0 -0
  116. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/cache.py +0 -0
  117. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/cli.py +0 -0
  118. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/env.py +0 -0
  119. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/github/inject.py +0 -0
  120. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/inject.py +0 -0
  121. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/requirements.py +0 -0
  122. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/shell.py +0 -0
  123. {omdev-0.0.7 → omdev-0.0.8}/omdev/ci/utils.py +0 -0
  124. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/__init__.py +0 -0
  125. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/__main__.py +0 -0
  126. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/_pathhack.py +0 -0
  127. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/clicli.py +0 -0
  128. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/install.py +0 -0
  129. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/main.py +0 -0
  130. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/managers.py +0 -0
  131. {omdev-0.0.7 → omdev-0.0.8}/omdev/cli/types.py +0 -0
  132. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/__init__.py +0 -0
  133. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/capi/__init__.py +0 -0
  134. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/capi/darwin_cf.py +0 -0
  135. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/capi/linux_x11.py +0 -0
  136. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/commands.py +0 -0
  137. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/platform.py +0 -0
  138. {omdev-0.0.7 → omdev-0.0.8}/omdev/clipboard/types.py +0 -0
  139. {omdev-0.0.7 → omdev-0.0.8}/omdev/cmake.py +0 -0
  140. {omdev-0.0.7 → omdev-0.0.8}/omdev/cmdlog/__init__.py +0 -0
  141. {omdev-0.0.7 → omdev-0.0.8}/omdev/cmdlog/__main__.py +0 -0
  142. {omdev-0.0.7 → omdev-0.0.8}/omdev/cmdlog/_cmdlog.py +0 -0
  143. {omdev-0.0.7 → omdev-0.0.8}/omdev/cmdlog/cli.py +0 -0
  144. {omdev-0.0.7 → omdev-0.0.8}/omdev/cmdlog/cmdlog.py +0 -0
  145. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/__init__.py +0 -0
  146. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/__main__.py +0 -0
  147. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/_dumping.py +0 -0
  148. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/_template.py +0 -0
  149. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/cli.py +0 -0
  150. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/codegen.py +0 -0
  151. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataclasses/dumping.py +0 -0
  152. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataserver/__init__.py +0 -0
  153. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataserver/handlers.py +0 -0
  154. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataserver/http.py +0 -0
  155. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataserver/routes.py +0 -0
  156. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataserver/server.py +0 -0
  157. {omdev-0.0.7 → omdev-0.0.8}/omdev/dataserver/targets.py +0 -0
  158. {omdev-0.0.7 → omdev-0.0.8}/omdev/diffs/__init__.py +0 -0
  159. {omdev-0.0.7 → omdev-0.0.8}/omdev/diffs/__main__.py +0 -0
  160. {omdev-0.0.7 → omdev-0.0.8}/omdev/diffs/cli.py +0 -0
  161. {omdev-0.0.7 → omdev-0.0.8}/omdev/diffs/parsing.py +0 -0
  162. {omdev-0.0.7 → omdev-0.0.8}/omdev/diffs/rendering.py +0 -0
  163. {omdev-0.0.7 → omdev-0.0.8}/omdev/diffs/types.py +0 -0
  164. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/__init__.py +0 -0
  165. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/__main__.py +0 -0
  166. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/cli.py +0 -0
  167. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/config.py +0 -0
  168. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/config.toml +0 -0
  169. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/content.py +0 -0
  170. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/gen.py +0 -0
  171. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/helpers.py +0 -0
  172. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/ops.py +0 -0
  173. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/rendering.py +0 -0
  174. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/.python-versions.json +0 -0
  175. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  176. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  177. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  178. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  179. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  180. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  181. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  182. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  183. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  184. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  185. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  186. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  187. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  188. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  189. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  190. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  191. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  192. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  193. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  194. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  195. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  196. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  197. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  198. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  199. {omdev-0.0.7 → omdev-0.0.8}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  200. {omdev-0.0.7 → omdev-0.0.8}/omdev/git/__init__.py +0 -0
  201. {omdev-0.0.7 → omdev-0.0.8}/omdev/git/magic.py +0 -0
  202. {omdev-0.0.7 → omdev-0.0.8}/omdev/git/revisions.py +0 -0
  203. {omdev-0.0.7 → omdev-0.0.8}/omdev/git/shallow.py +0 -0
  204. {omdev-0.0.7 → omdev-0.0.8}/omdev/git/status.py +0 -0
  205. {omdev-0.0.7 → omdev-0.0.8}/omdev/home/__init__.py +0 -0
  206. {omdev-0.0.7 → omdev-0.0.8}/omdev/home/paths.py +0 -0
  207. {omdev-0.0.7 → omdev-0.0.8}/omdev/home/secrets.py +0 -0
  208. {omdev-0.0.7 → omdev-0.0.8}/omdev/home/shadow.py +0 -0
  209. {omdev-0.0.7 → omdev-0.0.8}/omdev/imgur.py +0 -0
  210. {omdev-0.0.7 → omdev-0.0.8}/omdev/intellij/__init__.py +0 -0
  211. {omdev-0.0.7 → omdev-0.0.8}/omdev/intellij/cli.py +0 -0
  212. {omdev-0.0.7 → omdev-0.0.8}/omdev/intellij/ides.py +0 -0
  213. {omdev-0.0.7 → omdev-0.0.8}/omdev/intellij/open.py +0 -0
  214. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/__init__.py +0 -0
  215. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/__main__.py +0 -0
  216. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/cli.py +0 -0
  217. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/default.py +0 -0
  218. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/inject.py +0 -0
  219. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/inspect.py +0 -0
  220. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/providers/__init__.py +0 -0
  221. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/providers/base.py +0 -0
  222. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/providers/inject.py +0 -0
  223. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/providers/running.py +0 -0
  224. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/providers/standalone.py +0 -0
  225. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/providers/system.py +0 -0
  226. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/pyenv/__init__.py +0 -0
  227. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/pyenv/inject.py +0 -0
  228. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/pyenv/install.py +0 -0
  229. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/pyenv/provider.py +0 -0
  230. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/pyenv/pyenv.py +0 -0
  231. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/resolvers.py +0 -0
  232. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/types.py +0 -0
  233. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/uv/__init__.py +0 -0
  234. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/uv/inject.py +0 -0
  235. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/uv/provider.py +0 -0
  236. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/uv/uv.py +0 -0
  237. {omdev-0.0.7 → omdev-0.0.8}/omdev/interp/venvs.py +0 -0
  238. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/__init__.py +0 -0
  239. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/messages/__init__.py +0 -0
  240. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/messages/base.py +0 -0
  241. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/messages/formats.py +0 -0
  242. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/messages/messages.py +0 -0
  243. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/messages/parsing.py +0 -0
  244. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/numerics/__init__.py +0 -0
  245. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/numerics/formats.py +0 -0
  246. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/numerics/numerics.py +0 -0
  247. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/numerics/types.py +0 -0
  248. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/LICENSE +0 -0
  249. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/__init__.py +0 -0
  250. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/consts.py +0 -0
  251. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/errors.py +0 -0
  252. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/message.py +0 -0
  253. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/nuh.py +0 -0
  254. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/parsing.py +0 -0
  255. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/rendering.py +0 -0
  256. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/tags.py +0 -0
  257. {omdev-0.0.7 → omdev-0.0.8}/omdev/irc/protocol/utils.py +0 -0
  258. {omdev-0.0.7 → omdev-0.0.8}/omdev/java/__init__.py +0 -0
  259. {omdev-0.0.7 → omdev-0.0.8}/omdev/java/__main__.py +0 -0
  260. {omdev-0.0.7 → omdev-0.0.8}/omdev/java/cli.py +0 -0
  261. {omdev-0.0.7 → omdev-0.0.8}/omdev/java/pomgen.py +0 -0
  262. {omdev-0.0.7 → omdev-0.0.8}/omdev/java/utils.py +0 -0
  263. {omdev-0.0.7 → omdev-0.0.8}/omdev/java/xml.py +0 -0
  264. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/__init__.py +0 -0
  265. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/__main__.py +0 -0
  266. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/cli.py +0 -0
  267. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/find.py +0 -0
  268. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/magic.py +0 -0
  269. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/prepare.py +0 -0
  270. {omdev-0.0.7 → omdev-0.0.8}/omdev/magic/styles.py +0 -0
  271. {omdev-0.0.7 → omdev-0.0.8}/omdev/manifests/__init__.py +0 -0
  272. {omdev-0.0.7 → omdev-0.0.8}/omdev/manifests/__main__.py +0 -0
  273. {omdev-0.0.7 → omdev-0.0.8}/omdev/manifests/_dumping.py +0 -0
  274. {omdev-0.0.7 → omdev-0.0.8}/omdev/manifests/building.py +0 -0
  275. {omdev-0.0.7 → omdev-0.0.8}/omdev/manifests/dumping.py +0 -0
  276. {omdev-0.0.7 → omdev-0.0.8}/omdev/manifests/main.py +0 -0
  277. {omdev-0.0.7 → omdev-0.0.8}/omdev/markdown/__init__.py +0 -0
  278. {omdev-0.0.7 → omdev-0.0.8}/omdev/markdown/incparse.py +0 -0
  279. {omdev-0.0.7 → omdev-0.0.8}/omdev/markdown/tokens.py +0 -0
  280. {omdev-0.0.7 → omdev-0.0.8}/omdev/mypy/__init__.py +0 -0
  281. {omdev-0.0.7 → omdev-0.0.8}/omdev/mypy/debug.py +0 -0
  282. {omdev-0.0.7 → omdev-0.0.8}/omdev/mypy/report.py +0 -0
  283. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/__init__.py +0 -0
  284. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/building.py +0 -0
  285. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/compression.py +0 -0
  286. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/data.py +0 -0
  287. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/datarefs.py +0 -0
  288. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/dataserver.py +0 -0
  289. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/loading.py +0 -0
  290. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/media.py +0 -0
  291. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/pack/__init__.py +0 -0
  292. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/pack/packing.py +0 -0
  293. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/pack/repositories.py +0 -0
  294. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/pack/unpacking.py +0 -0
  295. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/repositories.py +0 -0
  296. {omdev-0.0.7 → omdev-0.0.8}/omdev/oci/tars.py +0 -0
  297. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/__init__.py +0 -0
  298. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/names.py +0 -0
  299. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/revisions.py +0 -0
  300. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/specifiers.py +0 -0
  301. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/versions.py +0 -0
  302. {omdev-0.0.7 → omdev-0.0.8}/omdev/packaging/wheelfile.py +0 -0
  303. {omdev-0.0.7 → omdev-0.0.8}/omdev/pip.py +0 -0
  304. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/__init__.py +0 -0
  305. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/__main__.py +0 -0
  306. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/base.py +0 -0
  307. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/blanklines.py +0 -0
  308. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/caches.py +0 -0
  309. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/git.py +0 -0
  310. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/imports.py +0 -0
  311. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/lite.py +0 -0
  312. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/main.py +0 -0
  313. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/manifests.py +0 -0
  314. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/scripts.py +0 -0
  315. {omdev-0.0.7 → omdev-0.0.8}/omdev/precheck/unicode.py +0 -0
  316. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/__init__.py +0 -0
  317. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/asts/__init__.py +0 -0
  318. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/asts/parents.py +0 -0
  319. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/asts/toplevel.py +0 -0
  320. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/asts/visitors.py +0 -0
  321. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/attrdocs.py +0 -0
  322. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/bracepy.py +0 -0
  323. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/classdot.py +0 -0
  324. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/LICENSE +0 -0
  325. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/__init__.py +0 -0
  326. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/attrdoc.py +0 -0
  327. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/common.py +0 -0
  328. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/epydoc.py +0 -0
  329. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/google.py +0 -0
  330. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/numpydoc.py +0 -0
  331. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/parser.py +0 -0
  332. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/docstrings/rest.py +0 -0
  333. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/findimports.py +0 -0
  334. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/reprs.py +0 -0
  335. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/scripts/__init__.py +0 -0
  336. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/scripts/bumpversion.py +0 -0
  337. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/scripts/execstat.py +0 -0
  338. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/scripts/importtrace.py +0 -0
  339. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/srcheaders.py +0 -0
  340. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tokens/__init__.py +0 -0
  341. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tokens/all.py +0 -0
  342. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tokens/tokenizert.py +0 -0
  343. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tokens/utils.py +0 -0
  344. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tools/__init__.py +0 -0
  345. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tools/importscan.py +0 -0
  346. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tools/mkrelimp.py +0 -0
  347. {omdev-0.0.7 → omdev-0.0.8}/omdev/py/tools/pipdepup.py +0 -0
  348. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/__init__.py +0 -0
  349. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/__main__.py +0 -0
  350. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/cli.py +0 -0
  351. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/configs.py +0 -0
  352. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/inject.py +0 -0
  353. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/pkg.py +0 -0
  354. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/reqs.py +0 -0
  355. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/resources/dockerdev.sh +0 -0
  356. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/resources/python.sh +0 -0
  357. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/tools/__init__.py +0 -0
  358. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/tools/aboutdeps.py +0 -0
  359. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/tools/buildrs.py +0 -0
  360. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/tools/pyversions.py +0 -0
  361. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/venvs.py +0 -0
  362. {omdev-0.0.7 → omdev-0.0.8}/omdev/pyproject/versions.py +0 -0
  363. {omdev-0.0.7 → omdev-0.0.8}/omdev/rs/__init__.py +0 -0
  364. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/__init__.py +0 -0
  365. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/interp.py +0 -0
  366. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/__init__.py +0 -0
  367. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/formats/__init__.py +0 -0
  368. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/inject.py +0 -0
  369. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/io/__init__.py +0 -0
  370. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/io/pipelines.py +0 -0
  371. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/io/streams.py +0 -0
  372. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/logs.py +0 -0
  373. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/lib/marshal.py +0 -0
  374. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/slowcat.py +0 -0
  375. {omdev-0.0.7 → omdev-0.0.8}/omdev/scripts/tmpexec.py +0 -0
  376. {omdev-0.0.7 → omdev-0.0.8}/omdev/tagstrings.py +0 -0
  377. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/__init__.py +0 -0
  378. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/cloc.py +0 -0
  379. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/diff.py +0 -0
  380. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/doc.py +0 -0
  381. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/docker.py +0 -0
  382. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/git/__init__.py +0 -0
  383. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/git/__main__.py +0 -0
  384. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/git/cli.py +0 -0
  385. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/git/cloning.py +0 -0
  386. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/git/consts.py +0 -0
  387. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/git/messages.py +0 -0
  388. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/__init__.py +0 -0
  389. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/__main__.py +0 -0
  390. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/cli.py +0 -0
  391. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/formats.py +0 -0
  392. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/io.py +0 -0
  393. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/parsing.py +0 -0
  394. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/processing.py +0 -0
  395. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/json/rendering.py +0 -0
  396. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/jsonview/__init__.py +0 -0
  397. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/jsonview/__main__.py +0 -0
  398. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/jsonview/cli.py +0 -0
  399. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  400. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  401. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  402. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/linehisto.py +0 -0
  403. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/mkenv.py +0 -0
  404. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/notebook.py +0 -0
  405. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/pawk/README.md +0 -0
  406. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/pawk/__init__.py +0 -0
  407. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/pawk/__main__.py +0 -0
  408. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/pawk/pawk.py +0 -0
  409. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/pip.py +0 -0
  410. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/prof.py +0 -0
  411. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/qr.py +0 -0
  412. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/shadow.py +0 -0
  413. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/shell.py +0 -0
  414. {omdev-0.0.7 → omdev-0.0.8}/omdev/tools/sqlrepl.py +0 -0
  415. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/__init__.py +0 -0
  416. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/__init__.py +0 -0
  417. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/edit/__init__.py +0 -0
  418. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/edit/main.py +0 -0
  419. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/irc/__init__.py +0 -0
  420. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/irc/__main__.py +0 -0
  421. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/irc/app.py +0 -0
  422. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/irc/client.py +0 -0
  423. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/irc/commands.py +0 -0
  424. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/irc/main.py +0 -0
  425. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/LICENSE +0 -0
  426. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/__init__.py +0 -0
  427. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/__main__.py +0 -0
  428. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/app.py +0 -0
  429. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/cli.py +0 -0
  430. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  431. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/utils.py +0 -0
  432. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/jtree/widgets.py +0 -0
  433. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/markdown/__init__.py +0 -0
  434. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/markdown/__main__.py +0 -0
  435. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/apps/markdown/cli.py +0 -0
  436. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/__init__.py +0 -0
  437. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/console2.py +0 -0
  438. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/LICENSE +0 -0
  439. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/__init__.py +0 -0
  440. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/__main__.py +0 -0
  441. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/_compat.py +0 -0
  442. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/cli.py +0 -0
  443. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/renderables.py +0 -0
  444. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/rendering.py +0 -0
  445. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/diff/underlinebar.py +0 -0
  446. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/markdown2.py +0 -0
  447. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/textual/__init__.py +0 -0
  448. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/textual/dark.py +0 -0
  449. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/textual/dump.py +0 -0
  450. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/rich/textual/themes.py +0 -0
  451. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/__init__.py +0 -0
  452. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/app2.py +0 -0
  453. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  454. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  455. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/autocomplete/matching.py +0 -0
  456. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/autocomplete/paths.py +0 -0
  457. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/autocomplete/widget.py +0 -0
  458. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/binding2.py +0 -0
  459. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/clipboard.py +0 -0
  460. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/debug/__init__.py +0 -0
  461. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/debug/dominfo.py +0 -0
  462. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/debug/screen.py +0 -0
  463. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/devtools.py +0 -0
  464. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/drivers2.py +0 -0
  465. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/logging2.py +0 -0
  466. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/render2.py +0 -0
  467. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/screen2.py +0 -0
  468. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/types.py +0 -0
  469. {omdev-0.0.7 → omdev-0.0.8}/omdev/tui/textual/widgets2.py +0 -0
  470. {omdev-0.0.7 → omdev-0.0.8}/omdev.egg-info/SOURCES.txt +0 -0
  471. {omdev-0.0.7 → omdev-0.0.8}/omdev.egg-info/dependency_links.txt +0 -0
  472. {omdev-0.0.7 → omdev-0.0.8}/omdev.egg-info/entry_points.txt +0 -0
  473. {omdev-0.0.7 → omdev-0.0.8}/omdev.egg-info/top_level.txt +0 -0
  474. {omdev-0.0.7 → omdev-0.0.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ 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.7
17
+ Requires-Dist: omlish==0.0.8
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.3; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -9,6 +9,7 @@ from omlish import lang
9
9
  from omlish import marshal as msh
10
10
  from omlish import reflect as rfl
11
11
 
12
+ from .requires import ParsedRequirement
12
13
  from .requires import RequiresMarkerItem
13
14
  from .requires import RequiresMarkerList
14
15
  from .requires import RequiresNode
@@ -79,3 +80,15 @@ def _install_standard_marshaling() -> None:
79
80
  msh.ReflectOverride(MarshalRequiresMarkerList),
80
81
  identity=True,
81
82
  )
83
+
84
+ msh.global_config_registry().register(
85
+ ParsedRequirement,
86
+ msh.ObjectOptions(
87
+ fields=dict(
88
+ marker=msh.FieldOptions(
89
+ marshal_as=RequiresMarkerList | None,
90
+ unmarshal_as=RequiresMarkerList | None,
91
+ ),
92
+ ),
93
+ ),
94
+ )
@@ -29,6 +29,7 @@ import re
29
29
  import typing as ta
30
30
 
31
31
  from omlish.lite.check import check
32
+ from omlish.lite.dataclasses import install_dataclass_cache_hash
32
33
 
33
34
  from .specifiers import Specifier
34
35
 
@@ -241,7 +242,9 @@ class RequiresMarkerItem(ta.NamedTuple):
241
242
  r: ta.Union[RequiresVariable, RequiresValue]
242
243
 
243
244
 
244
- class ParsedRequirement(ta.NamedTuple):
245
+ @install_dataclass_cache_hash()
246
+ @dc.dataclass(frozen=True)
247
+ class ParsedRequirement:
245
248
  name: str
246
249
  url: str
247
250
  extras: ta.List[str]
@@ -154,7 +154,7 @@ def __omlish_amalg__(): # noqa
154
154
  dict(path='../oci/tars.py', sha1='3ed00e97a494bd92c6a6149d22d51469bc0af384'),
155
155
  dict(path='../../omlish/asyncs/asyncio/sockets.py', sha1='8d24dae988a30bb73f167a9ab62d4fc9eef4ad06'),
156
156
  dict(path='../../omlish/asyncs/asyncio/timeouts.py', sha1='4d31b02b3c39b8f2fa7e94db36552fde6942e36a'),
157
- dict(path='../../omlish/formats/yaml/goyaml/tokens.py', sha1='05183c2980204609c9787a24c55e5ed806886962'),
157
+ dict(path='../../omlish/formats/yaml/goyaml/tokens.py', sha1='e9744c171d982ea8b4a6ace5f937926d51d5ec30'),
158
158
  dict(path='../../omlish/http/pipelines/bodymodes.py', sha1='d419b4bce96abbea7ee739412ece462ccbc77aa8'),
159
159
  dict(path='../../omlish/http/pipelines/objects.py', sha1='3de6f87e2a56375cc8a539321b1205e2d1d3900e'),
160
160
  dict(path='../../omlish/http/simple/handlers.py', sha1='9e49c2ba5518616ce15bed6bac80ab4c88ed3b83'),
@@ -208,7 +208,7 @@ def __omlish_amalg__(): # noqa
208
208
  dict(path='../dataserver/http.py', sha1='41a6e39c6d66807b6189e2d78d8cf2ff10e45bc3'),
209
209
  dict(path='../oci/dataserver.py', sha1='dd147b56282b054cef264556a0ff3b3d1719bcee'),
210
210
  dict(path='../../omlish/asyncs/asyncio/subprocesses.py', sha1='b6b5f9ae3fd0b9c83593bad2e04a08f726e5904d'),
211
- dict(path='../../omlish/formats/yaml/goyaml/decoding.py', sha1='7b0282593ca9fec2d70964ddd3ec6214e29bd864'),
211
+ dict(path='../../omlish/formats/yaml/goyaml/decoding.py', sha1='5047d6c283348c2cd4265c955bb94651e971addd'),
212
212
  dict(path='../../omlish/http/pipelines/aggregators.py', sha1='e6a35442108553f39bf5d5d61b55fcdaa3f347b5'),
213
213
  dict(path='../../omlish/io/pipelines/bytes/decoders.py', sha1='e49b17ece8aa2e006a6d92158628e2dc671e21f1'),
214
214
  dict(path='../../omlish/logs/modules.py', sha1='dd7d5f8e63fe8829dfb49460f3929ab64b68ee14'),
@@ -12238,7 +12238,7 @@ def _yaml_is_need_quoted(value: str) -> bool:
12238
12238
  if value == '-':
12239
12239
  return True
12240
12240
 
12241
- if value[0] in ('*', '&', '[', '{', '}', ']', ',', '!', '|', '>', '%', '\'', '"', '@', ' ', '`'):
12241
+ if value[0] in ('*', '&', '[', '{', '}', ']', ',', '!', '|', '>', '%', '\'', '"', '@', ' ', '`', ':'):
12242
12242
  return True
12243
12243
 
12244
12244
  if value[-1] in (':', ' '):
@@ -28457,6 +28457,9 @@ class YamlDecoder:
28457
28457
  self.anchor_node_map[anchor_name] = n.value
28458
28458
  return self.get_map_node(check.not_none(n.value), is_merge)
28459
28459
 
28460
+ elif isinstance(n, TagYamlNode):
28461
+ return self.get_map_node(check.not_none(n.value), is_merge)
28462
+
28460
28463
  elif isinstance(n, AliasYamlNode):
28461
28464
  alias_name = check.not_none(check.not_none(n.value).get_token()).value
28462
28465
  node2 = self.anchor_node_map[alias_name]
@@ -28490,19 +28493,17 @@ class YamlDecoder:
28490
28493
  return None
28491
28494
 
28492
28495
  if isinstance(anchor := node, AnchorYamlNode):
28493
- if isinstance(array_node := anchor.value, ArrayYamlNode):
28494
- return array_node
28495
-
28496
- return UnexpectedNodeTypeYamlError(check.not_none(anchor.value).type(), YamlNodeType.SEQUENCE, check.not_none(node.get_token())) # noqa
28496
+ return self.get_array_node(check.not_none(anchor.value))
28497
28497
 
28498
28498
  if isinstance(alias := node, AliasYamlNode):
28499
28499
  alias_name = check.not_none(check.not_none(alias.value).get_token()).value
28500
28500
  node2 = self.anchor_node_map[alias_name]
28501
28501
  if node2 is None:
28502
28502
  return yaml_error(f'cannot find anchor by alias name {alias_name}')
28503
- if isinstance(array_node := node2, ArrayYamlNode):
28504
- return array_node
28505
- return UnexpectedNodeTypeYamlError(node2.type(), YamlNodeType.SEQUENCE, check.not_none(node2.get_token())) # noqa
28503
+ return self.get_array_node(node2)
28504
+
28505
+ if isinstance(tag := node, TagYamlNode):
28506
+ return self.get_array_node(check.not_none(tag.value))
28506
28507
 
28507
28508
  if not isinstance(array_node := node, ArrayYamlNode):
28508
28509
  return UnexpectedNodeTypeYamlError(node.type(), YamlNodeType.SEQUENCE, check.not_none(node.get_token())) # noqa
@@ -38,11 +38,11 @@ def __omlish_amalg__(): # noqa
38
38
  dict(path='../../../lite/check.py', sha1='7088e41034dbdce7bdae200793aaa9d6838c79d8'),
39
39
  dict(path='../../../lite/dataclasses.py', sha1='42ff344c22262193795c54929bfb90d0a3507bab'),
40
40
  dict(path='errors.py', sha1='c4dda09d78bc14d9824e45e3d5d434185ee5598b'),
41
- dict(path='tokens.py', sha1='05183c2980204609c9787a24c55e5ed806886962'),
41
+ dict(path='tokens.py', sha1='e9744c171d982ea8b4a6ace5f937926d51d5ec30'),
42
42
  dict(path='ast.py', sha1='6d21da91079afcd58467a58153951a6b97a97c20'),
43
43
  dict(path='scanning.py', sha1='9c7bb51121f85ac499f8f907fbc3ce20a07f3e1d'),
44
44
  dict(path='parsing.py', sha1='78c28c2b865c57077b071543361920db142242d0'),
45
- dict(path='decoding.py', sha1='7b0282593ca9fec2d70964ddd3ec6214e29bd864'),
45
+ dict(path='decoding.py', sha1='5047d6c283348c2cd4265c955bb94651e971addd'),
46
46
  dict(path='_amalg.py', sha1='85989224f581528c4a189dca142cb3ec086ecd3c'),
47
47
  ],
48
48
  )
@@ -1654,7 +1654,7 @@ def _yaml_is_need_quoted(value: str) -> bool:
1654
1654
  if value == '-':
1655
1655
  return True
1656
1656
 
1657
- if value[0] in ('*', '&', '[', '{', '}', ']', ',', '!', '|', '>', '%', '\'', '"', '@', ' ', '`'):
1657
+ if value[0] in ('*', '&', '[', '{', '}', ']', ',', '!', '|', '>', '%', '\'', '"', '@', ' ', '`', ':'):
1658
1658
  return True
1659
1659
 
1660
1660
  if value[-1] in (':', ' '):
@@ -9363,6 +9363,9 @@ class YamlDecoder:
9363
9363
  self.anchor_node_map[anchor_name] = n.value
9364
9364
  return self.get_map_node(check.not_none(n.value), is_merge)
9365
9365
 
9366
+ elif isinstance(n, TagYamlNode):
9367
+ return self.get_map_node(check.not_none(n.value), is_merge)
9368
+
9366
9369
  elif isinstance(n, AliasYamlNode):
9367
9370
  alias_name = check.not_none(check.not_none(n.value).get_token()).value
9368
9371
  node2 = self.anchor_node_map[alias_name]
@@ -9396,19 +9399,17 @@ class YamlDecoder:
9396
9399
  return None
9397
9400
 
9398
9401
  if isinstance(anchor := node, AnchorYamlNode):
9399
- if isinstance(array_node := anchor.value, ArrayYamlNode):
9400
- return array_node
9401
-
9402
- return UnexpectedNodeTypeYamlError(check.not_none(anchor.value).type(), YamlNodeType.SEQUENCE, check.not_none(node.get_token())) # noqa
9402
+ return self.get_array_node(check.not_none(anchor.value))
9403
9403
 
9404
9404
  if isinstance(alias := node, AliasYamlNode):
9405
9405
  alias_name = check.not_none(check.not_none(alias.value).get_token()).value
9406
9406
  node2 = self.anchor_node_map[alias_name]
9407
9407
  if node2 is None:
9408
9408
  return yaml_error(f'cannot find anchor by alias name {alias_name}')
9409
- if isinstance(array_node := node2, ArrayYamlNode):
9410
- return array_node
9411
- return UnexpectedNodeTypeYamlError(node2.type(), YamlNodeType.SEQUENCE, check.not_none(node2.get_token())) # noqa
9409
+ return self.get_array_node(node2)
9410
+
9411
+ if isinstance(tag := node, TagYamlNode):
9412
+ return self.get_array_node(check.not_none(tag.value))
9412
9413
 
9413
9414
  if not isinstance(array_node := node, ArrayYamlNode):
9414
9415
  return UnexpectedNodeTypeYamlError(node.type(), YamlNodeType.SEQUENCE, check.not_none(node.get_token())) # noqa
@@ -97,6 +97,7 @@ def __omlish_amalg__(): # noqa
97
97
  dict(path='../../omlish/lite/asyncs.py', sha1='b3f2251c56617ce548abf9c333ac996b63edb23e'),
98
98
  dict(path='../../omlish/lite/cached.py', sha1='0c33cf961ac8f0727284303c7a30c5ea98f714f2'),
99
99
  dict(path='../../omlish/lite/check.py', sha1='7088e41034dbdce7bdae200793aaa9d6838c79d8'),
100
+ dict(path='../../omlish/lite/dataclasses.py', sha1='42ff344c22262193795c54929bfb90d0a3507bab'),
100
101
  dict(path='../../omlish/lite/json.py', sha1='57eeddc4d23a17931e00284ffa5cb6e3ce089486'),
101
102
  dict(path='../../omlish/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
102
103
  dict(path='../../omlish/lite/reflect.py', sha1='c4fec44bf144e9d93293c996af06f6c65fc5e63d'),
@@ -120,7 +121,7 @@ def __omlish_amalg__(): # noqa
120
121
  dict(path='../../omlish/logs/protocols.py', sha1='05ca4d1d7feb50c4e3b9f22ee371aa7bf4b3dbd1'),
121
122
  dict(path='../../omlish/logs/std/json.py', sha1='2a75553131e4d5331bb0cedde42aa183f403fc3b'),
122
123
  dict(path='../interp/types.py', sha1='c53a8d45d29f2010244760adeb8dcd02a4a240e1'),
123
- dict(path='../packaging/requires.py', sha1='5818353abd45135e0e638e28fa6247b24122231b'),
124
+ dict(path='../packaging/requires.py', sha1='0c34cc4044c4da386622bcd83b9c770e894266dd'),
124
125
  dict(path='../../omlish/asyncs/asyncio/timeouts.py', sha1='4d31b02b3c39b8f2fa7e94db36552fde6942e36a'),
125
126
  dict(path='../../omlish/lite/inject.py', sha1='8cfee01601e9b8d7a4689cb5ba38de8c2bdb4706'),
126
127
  dict(path='../../omlish/logs/contexts.py', sha1='2f5881193a0c19c89c399ab0e0b5072c4048a60c'),
@@ -3030,6 +3031,267 @@ class Checks:
3030
3031
  check = Checks()
3031
3032
 
3032
3033
 
3034
+ ########################################
3035
+ # ../../../omlish/lite/dataclasses.py
3036
+
3037
+
3038
+ ##
3039
+
3040
+
3041
+ def dataclass_shallow_astuple(o: ta.Any) -> ta.Tuple[ta.Any, ...]:
3042
+ return tuple(getattr(o, f.name) for f in dc.fields(o))
3043
+
3044
+
3045
+ def dataclass_shallow_asdict(o: ta.Any) -> ta.Dict[str, ta.Any]:
3046
+ return {f.name: getattr(o, f.name) for f in dc.fields(o)}
3047
+
3048
+
3049
+ ##
3050
+
3051
+
3052
+ def is_immediate_dataclass(cls: type) -> bool:
3053
+ if not isinstance(cls, type):
3054
+ raise TypeError(cls)
3055
+ return dc._FIELDS in cls.__dict__ # type: ignore[attr-defined] # noqa
3056
+
3057
+
3058
+ ##
3059
+
3060
+
3061
+ def _install_dataclass_fn(cls: type, fn: ta.Any, fn_name: ta.Optional[str] = None) -> None:
3062
+ if fn_name is None:
3063
+ fn_name = fn.__name__
3064
+ setattr(cls, fn_name, fn)
3065
+ fn.__qualname__ = f'{cls.__qualname__}.{fn_name}'
3066
+
3067
+
3068
+ ##
3069
+
3070
+
3071
+ def install_dataclass_cache_hash(
3072
+ *,
3073
+ cached_hash_attr: str = '__dataclass_hash__',
3074
+ ):
3075
+ def inner(cls):
3076
+ if not (isinstance(cls, type) and dc.is_dataclass(cls)):
3077
+ raise TypeError(cls)
3078
+
3079
+ if (
3080
+ cls.__hash__ is object.__hash__ or
3081
+ '__hash__' not in cls.__dict__
3082
+ ):
3083
+ raise TypeError(cls)
3084
+
3085
+ real_hash = cls.__hash__
3086
+
3087
+ def cached_hash(self) -> int:
3088
+ try:
3089
+ return object.__getattribute__(self, cached_hash_attr)
3090
+ except AttributeError:
3091
+ object.__setattr__(self, cached_hash_attr, h := real_hash(self))
3092
+ return h
3093
+
3094
+ _install_dataclass_fn(cls, cached_hash, '__hash__')
3095
+
3096
+ return cls
3097
+
3098
+ return inner
3099
+
3100
+
3101
+ ##
3102
+
3103
+
3104
+ def dataclass_maybe_post_init(sup: ta.Any) -> bool:
3105
+ if not isinstance(sup, super):
3106
+ raise TypeError(sup)
3107
+ try:
3108
+ fn = sup.__post_init__ # type: ignore
3109
+ except AttributeError:
3110
+ return False
3111
+ fn()
3112
+ return True
3113
+
3114
+
3115
+ ##
3116
+
3117
+
3118
+ def dataclass_filtered_repr(
3119
+ obj: ta.Any,
3120
+ fn: ta.Union[ta.Callable[[ta.Any, dc.Field, ta.Any], bool], ta.Literal['omit_none', 'omit_falsey']],
3121
+ ) -> str:
3122
+ if fn == 'omit_none':
3123
+ fn = lambda o, f, v: v is not None # noqa
3124
+ elif fn == 'omit_falsey':
3125
+ fn = lambda o, f, v: bool(v)
3126
+
3127
+ return (
3128
+ f'{obj.__class__.__qualname__}(' +
3129
+ ', '.join([
3130
+ f'{f.name}={v!r}'
3131
+ for f in dc.fields(obj)
3132
+ if fn(obj, f, v := getattr(obj, f.name))
3133
+ ]) +
3134
+ ')'
3135
+ )
3136
+
3137
+
3138
+ def dataclass_repr_omit_none(obj: ta.Any) -> str:
3139
+ return dataclass_filtered_repr(obj, 'omit_none')
3140
+
3141
+
3142
+ def dataclass_repr_omit_falsey(obj: ta.Any) -> str:
3143
+ return dataclass_filtered_repr(obj, 'omit_falsey')
3144
+
3145
+
3146
+ def install_dataclass_filtered_repr(
3147
+ fn: ta.Union[ta.Callable[[ta.Any, dc.Field, ta.Any], bool], ta.Literal['omit_none', 'omit_falsey']],
3148
+ ):
3149
+ def inner(cls):
3150
+ if not (isinstance(cls, type) and dc.is_dataclass(cls)):
3151
+ raise TypeError(cls)
3152
+
3153
+ def filtered_repr(self) -> str:
3154
+ return dataclass_filtered_repr(self, fn)
3155
+
3156
+ _install_dataclass_fn(cls, filtered_repr, '__repr__')
3157
+
3158
+ return cls
3159
+
3160
+ return inner
3161
+
3162
+
3163
+ #
3164
+
3165
+
3166
+ def dataclass_terse_repr(obj: ta.Any) -> str:
3167
+ return f'{obj.__class__.__qualname__}({", ".join(repr(getattr(obj, f.name)) for f in dc.fields(obj))})'
3168
+
3169
+
3170
+ def install_dataclass_terse_repr():
3171
+ def inner(cls):
3172
+ if not (isinstance(cls, type) and dc.is_dataclass(cls)):
3173
+ raise TypeError(cls)
3174
+
3175
+ def terse_repr(self) -> str:
3176
+ return dataclass_terse_repr(self)
3177
+
3178
+ _install_dataclass_fn(cls, terse_repr, '__repr__')
3179
+
3180
+ return cls
3181
+
3182
+ return inner
3183
+
3184
+
3185
+ ##
3186
+
3187
+
3188
+ def dataclass_descriptor_method(*bind_attrs: str, bind_owner: bool = False) -> ta.Callable:
3189
+ if not bind_attrs:
3190
+ def __get__(self, instance, owner=None): # noqa
3191
+ return self
3192
+
3193
+ elif bind_owner:
3194
+ def __get__(self, instance, owner=None): # noqa
3195
+ # Guaranteed to return a new instance even with no attrs
3196
+ return dc.replace(self, **{
3197
+ a: v.__get__(instance, owner) if (v := getattr(self, a)) is not None else None
3198
+ for a in bind_attrs
3199
+ })
3200
+
3201
+ else:
3202
+ def __get__(self, instance, owner=None): # noqa
3203
+ if instance is None:
3204
+ return self
3205
+
3206
+ # Guaranteed to return a new instance even with no attrs
3207
+ return dc.replace(self, **{
3208
+ a: v.__get__(instance, owner) if (v := getattr(self, a)) is not None else None
3209
+ for a in bind_attrs
3210
+ })
3211
+
3212
+ return __get__
3213
+
3214
+
3215
+ ##
3216
+
3217
+
3218
+ def install_dataclass_kw_only_init():
3219
+ def inner(cls):
3220
+ if not isinstance(cls, type) and dc.is_dataclass(cls):
3221
+ raise TypeError(cls)
3222
+
3223
+ real_init = cls.__init__ # type: ignore[misc]
3224
+
3225
+ flds = dc.fields(cls) # noqa
3226
+
3227
+ if any(f.name == 'self' for f in flds):
3228
+ self_name = '__dataclass_self__'
3229
+ else:
3230
+ self_name = 'self'
3231
+
3232
+ src = '\n'.join([
3233
+ 'def __init__(',
3234
+ f' {self_name},',
3235
+ ' *,',
3236
+ *[
3237
+ ''.join([
3238
+ f' {f.name}: __dataclass_type_{f.name}__',
3239
+ f' = __dataclass_default_{f.name}__' if f.default is not dc.MISSING else '',
3240
+ ',',
3241
+ ])
3242
+ for f in flds
3243
+ ],
3244
+ ') -> __dataclass_None__:',
3245
+ ' __dataclass_real_init__(',
3246
+ f' {self_name},',
3247
+ *[
3248
+ f' {f.name}={f.name},'
3249
+ for f in flds
3250
+ ],
3251
+ ' )',
3252
+ ])
3253
+
3254
+ ns: dict = {
3255
+ '__dataclass_None__': None,
3256
+ '__dataclass_real_init__': real_init,
3257
+ **{
3258
+ f'__dataclass_type_{f.name}__': f.type
3259
+ for f in flds
3260
+ },
3261
+ **{
3262
+ f'__dataclass_default_{f.name}__': f.default
3263
+ for f in flds
3264
+ if f.default is not dc.MISSING
3265
+ },
3266
+ }
3267
+
3268
+ exec(src, ns)
3269
+
3270
+ kw_only_init = ns['__init__']
3271
+
3272
+ functools.update_wrapper(kw_only_init, real_init)
3273
+
3274
+ _install_dataclass_fn(cls, kw_only_init, '__init__')
3275
+
3276
+ return cls
3277
+
3278
+ return inner
3279
+
3280
+
3281
+ ##
3282
+
3283
+
3284
+ @dc.dataclass()
3285
+ class DataclassFieldRequiredError(Exception):
3286
+ name: str
3287
+
3288
+
3289
+ def dataclass_field_required(name: str) -> ta.Callable[[], ta.Any]:
3290
+ def inner() -> ta.NoReturn:
3291
+ raise DataclassFieldRequiredError(name)
3292
+ return inner
3293
+
3294
+
3033
3295
  ########################################
3034
3296
  # ../../../omlish/lite/json.py
3035
3297
 
@@ -6941,7 +7203,9 @@ class RequiresMarkerItem(ta.NamedTuple):
6941
7203
  r: ta.Union[RequiresVariable, RequiresValue]
6942
7204
 
6943
7205
 
6944
- class ParsedRequirement(ta.NamedTuple):
7206
+ @install_dataclass_cache_hash()
7207
+ @dc.dataclass(frozen=True)
7208
+ class ParsedRequirement:
6945
7209
  name: str
6946
7210
  url: str
6947
7211
  extras: ta.List[str]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ 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.7
17
+ Requires-Dist: omlish==0.0.8
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.3; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.7
1
+ omlish==0.0.8
2
2
 
3
3
  [all]
4
4
  black~=26.3
@@ -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.14'
16
- version = '0.0.7'
16
+ version = '0.0.8'
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.7',
27
+ 'omlish == 0.0.8',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes