omdev 0.0.9__tar.gz → 0.0.11__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 (477) hide show
  1. {omdev-0.0.9/omdev.egg-info → omdev-0.0.11}/PKG-INFO +8 -2
  2. {omdev-0.0.9 → omdev-0.0.11}/omdev/.omlish-manifests.json +14 -0
  3. {omdev-0.0.9 → omdev-0.0.11}/omdev/__about__.py +10 -0
  4. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/cli.py +2 -2
  5. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/cli.py +2 -2
  6. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/cli.py +2 -2
  7. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/cli.py +2 -2
  8. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/cli.py +2 -2
  9. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/ci.py +202 -162
  10. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/interp.py +199 -159
  11. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/pyproject.py +199 -159
  12. omdev-0.0.11/omdev/supervisor/__main__.py +11 -0
  13. omdev-0.0.11/omdev/supervisor/cli.py +23 -0
  14. omdev-0.0.11/omdev/tui/apps/markdown/__init__.py +0 -0
  15. {omdev-0.0.9 → omdev-0.0.11/omdev.egg-info}/PKG-INFO +8 -2
  16. {omdev-0.0.9 → omdev-0.0.11}/omdev.egg-info/SOURCES.txt +3 -0
  17. {omdev-0.0.9 → omdev-0.0.11}/omdev.egg-info/requires.txt +9 -1
  18. {omdev-0.0.9 → omdev-0.0.11}/pyproject.toml +10 -2
  19. {omdev-0.0.9 → omdev-0.0.11}/LICENSE +0 -0
  20. {omdev-0.0.9 → omdev-0.0.11}/MANIFEST.in +0 -0
  21. {omdev-0.0.9 → omdev-0.0.11}/README.md +0 -0
  22. {omdev-0.0.9 → omdev-0.0.11}/omdev/README.md +0 -0
  23. {omdev-0.0.9 → omdev-0.0.11}/omdev/__init__.py +0 -0
  24. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/__init__.py +0 -0
  25. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/__main__.py +0 -0
  26. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/cli/__init__.py +0 -0
  27. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/cli/main.py +0 -0
  28. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/__init__.py +0 -0
  29. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/gen.py +0 -0
  30. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/imports.py +0 -0
  31. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/manifests.py +0 -0
  32. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/resources.py +0 -0
  33. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/srcfiles.py +0 -0
  34. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/strip.py +0 -0
  35. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/types.py +0 -0
  36. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/gen/typing.py +0 -0
  37. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/info.py +0 -0
  38. {omdev-0.0.9 → omdev-0.0.11}/omdev/amalg/sources.py +0 -0
  39. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/__init__.py +0 -0
  40. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/__init__.py +0 -0
  41. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/cache.py +0 -0
  42. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/contexts.py +0 -0
  43. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/currents.py +0 -0
  44. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/fns.py +0 -0
  45. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/resolvers.py +0 -0
  46. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/storage.py +0 -0
  47. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/compute/types.py +0 -0
  48. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/__init__.py +0 -0
  49. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/actions.py +0 -0
  50. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/cache.py +0 -0
  51. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/consts.py +0 -0
  52. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/defaults.py +0 -0
  53. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/manifests.py +0 -0
  54. {omdev-0.0.9 → omdev-0.0.11}/omdev/cache/data/specs.py +0 -0
  55. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/__init__.py +0 -0
  56. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/darwin/__init__.py +0 -0
  57. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/darwin/aps.py +0 -0
  58. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/darwin/ax.py +0 -0
  59. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/darwin/cf.py +0 -0
  60. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/darwin/cg.py +0 -0
  61. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/linux/__init__.py +0 -0
  62. {omdev-0.0.9 → omdev-0.0.11}/omdev/capi/linux/x11.py +0 -0
  63. {omdev-0.0.9 → omdev-0.0.11}/omdev/cc/__init__.py +0 -0
  64. {omdev-0.0.9 → omdev-0.0.11}/omdev/cc/__main__.py +0 -0
  65. {omdev-0.0.9 → omdev-0.0.11}/omdev/cc/cdeps.py +0 -0
  66. {omdev-0.0.9 → omdev-0.0.11}/omdev/cc/cdeps.toml +0 -0
  67. {omdev-0.0.9 → omdev-0.0.11}/omdev/cc/cli.py +0 -0
  68. {omdev-0.0.9 → omdev-0.0.11}/omdev/cc/srclangs.py +0 -0
  69. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/__init__.py +0 -0
  70. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_boilerplate.cc +0 -0
  71. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/LICENSE +0 -0
  72. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/__init__.py +0 -0
  73. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/build_ext.py +0 -0
  74. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  75. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  76. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/compilers/options.py +0 -0
  77. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  78. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/dir_util.py +0 -0
  79. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/errors.py +0 -0
  80. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/extension.py +0 -0
  81. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/file_util.py +0 -0
  82. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/modified.py +0 -0
  83. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/spawn.py +0 -0
  84. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/sysconfig.py +0 -0
  85. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/util.py +0 -0
  86. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/_distutils/version.py +0 -0
  87. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/build.py +0 -0
  88. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/cmake.py +0 -0
  89. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/importhook.py +0 -0
  90. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/magic.py +0 -0
  91. {omdev-0.0.9 → omdev-0.0.11}/omdev/cexts/scan.py +0 -0
  92. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/__init__.py +0 -0
  93. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/__main__.py +0 -0
  94. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/cache.py +0 -0
  95. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/ci.py +0 -0
  96. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/compose.py +0 -0
  97. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/consts.py +0 -0
  98. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/__init__.py +0 -0
  99. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/buildcaching.py +0 -0
  100. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/cache.py +0 -0
  101. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  102. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/cacheserved/cache.py +0 -0
  103. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  104. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/cmds.py +0 -0
  105. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/dataserver.py +0 -0
  106. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/imagepulling.py +0 -0
  107. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/inject.py +0 -0
  108. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/packing.py +0 -0
  109. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/repositories.py +0 -0
  110. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/docker/utils.py +0 -0
  111. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/__init__.py +0 -0
  112. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/__init__.py +0 -0
  113. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/clients.py +0 -0
  114. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v1/__init__.py +0 -0
  115. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v1/api.py +0 -0
  116. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v1/client.py +0 -0
  117. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v2/__init__.py +0 -0
  118. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v2/api.py +0 -0
  119. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v2/azure.py +0 -0
  120. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/api/v2/client.py +0 -0
  121. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/bootstrap.py +0 -0
  122. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/cache.py +0 -0
  123. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/env.py +0 -0
  124. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/github/inject.py +0 -0
  125. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/inject.py +0 -0
  126. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/requirements.py +0 -0
  127. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/shell.py +0 -0
  128. {omdev-0.0.9 → omdev-0.0.11}/omdev/ci/utils.py +0 -0
  129. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/__init__.py +0 -0
  130. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/__main__.py +0 -0
  131. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/_pathhack.py +0 -0
  132. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/clicli.py +0 -0
  133. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/install.py +0 -0
  134. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/main.py +0 -0
  135. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/managers.py +0 -0
  136. {omdev-0.0.9 → omdev-0.0.11}/omdev/cli/types.py +0 -0
  137. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/__init__.py +0 -0
  138. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/capi/__init__.py +0 -0
  139. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/capi/darwin_cf.py +0 -0
  140. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/capi/linux_x11.py +0 -0
  141. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/commands.py +0 -0
  142. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/platform.py +0 -0
  143. {omdev-0.0.9 → omdev-0.0.11}/omdev/clipboard/types.py +0 -0
  144. {omdev-0.0.9 → omdev-0.0.11}/omdev/cmake.py +0 -0
  145. {omdev-0.0.9 → omdev-0.0.11}/omdev/cmdlog/__init__.py +0 -0
  146. {omdev-0.0.9 → omdev-0.0.11}/omdev/cmdlog/__main__.py +0 -0
  147. {omdev-0.0.9 → omdev-0.0.11}/omdev/cmdlog/_cmdlog.py +0 -0
  148. {omdev-0.0.9 → omdev-0.0.11}/omdev/cmdlog/cli.py +0 -0
  149. {omdev-0.0.9 → omdev-0.0.11}/omdev/cmdlog/cmdlog.py +0 -0
  150. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/__init__.py +0 -0
  151. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/__main__.py +0 -0
  152. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/_dumping.py +0 -0
  153. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/_template.py +0 -0
  154. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/cli.py +0 -0
  155. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/codegen.py +0 -0
  156. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataclasses/dumping.py +0 -0
  157. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataserver/__init__.py +0 -0
  158. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataserver/handlers.py +0 -0
  159. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataserver/http.py +0 -0
  160. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataserver/routes.py +0 -0
  161. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataserver/server.py +0 -0
  162. {omdev-0.0.9 → omdev-0.0.11}/omdev/dataserver/targets.py +0 -0
  163. {omdev-0.0.9 → omdev-0.0.11}/omdev/diffs/__init__.py +0 -0
  164. {omdev-0.0.9 → omdev-0.0.11}/omdev/diffs/__main__.py +0 -0
  165. {omdev-0.0.9 → omdev-0.0.11}/omdev/diffs/cli.py +0 -0
  166. {omdev-0.0.9 → omdev-0.0.11}/omdev/diffs/parsing.py +0 -0
  167. {omdev-0.0.9 → omdev-0.0.11}/omdev/diffs/rendering.py +0 -0
  168. {omdev-0.0.9 → omdev-0.0.11}/omdev/diffs/types.py +0 -0
  169. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/__init__.py +0 -0
  170. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/__main__.py +0 -0
  171. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/cli.py +0 -0
  172. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/config.py +0 -0
  173. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/config.toml +0 -0
  174. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/content.py +0 -0
  175. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/gen.py +0 -0
  176. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/helpers.py +0 -0
  177. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/ops.py +0 -0
  178. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/rendering.py +0 -0
  179. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/.python-versions.json +0 -0
  180. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  181. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  182. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  183. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  184. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  185. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  186. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  187. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  188. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  189. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  190. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  191. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  192. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  193. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  194. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  195. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  196. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  197. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  198. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  199. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  200. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  201. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  202. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  203. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  204. {omdev-0.0.9 → omdev-0.0.11}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  205. {omdev-0.0.9 → omdev-0.0.11}/omdev/git/__init__.py +0 -0
  206. {omdev-0.0.9 → omdev-0.0.11}/omdev/git/magic.py +0 -0
  207. {omdev-0.0.9 → omdev-0.0.11}/omdev/git/revisions.py +0 -0
  208. {omdev-0.0.9 → omdev-0.0.11}/omdev/git/shallow.py +0 -0
  209. {omdev-0.0.9 → omdev-0.0.11}/omdev/git/status.py +0 -0
  210. {omdev-0.0.9 → omdev-0.0.11}/omdev/home/__init__.py +0 -0
  211. {omdev-0.0.9 → omdev-0.0.11}/omdev/home/paths.py +0 -0
  212. {omdev-0.0.9 → omdev-0.0.11}/omdev/home/secrets.py +0 -0
  213. {omdev-0.0.9 → omdev-0.0.11}/omdev/home/shadow.py +0 -0
  214. {omdev-0.0.9 → omdev-0.0.11}/omdev/imgur.py +0 -0
  215. {omdev-0.0.9 → omdev-0.0.11}/omdev/intellij/__init__.py +0 -0
  216. {omdev-0.0.9 → omdev-0.0.11}/omdev/intellij/cli.py +0 -0
  217. {omdev-0.0.9 → omdev-0.0.11}/omdev/intellij/ides.py +0 -0
  218. {omdev-0.0.9 → omdev-0.0.11}/omdev/intellij/open.py +0 -0
  219. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/__init__.py +0 -0
  220. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/__main__.py +0 -0
  221. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/default.py +0 -0
  222. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/inject.py +0 -0
  223. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/inspect.py +0 -0
  224. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/providers/__init__.py +0 -0
  225. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/providers/base.py +0 -0
  226. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/providers/inject.py +0 -0
  227. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/providers/running.py +0 -0
  228. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/providers/standalone.py +0 -0
  229. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/providers/system.py +0 -0
  230. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/pyenv/__init__.py +0 -0
  231. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/pyenv/inject.py +0 -0
  232. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/pyenv/install.py +0 -0
  233. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/pyenv/provider.py +0 -0
  234. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/pyenv/pyenv.py +0 -0
  235. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/resolvers.py +0 -0
  236. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/types.py +0 -0
  237. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/uv/__init__.py +0 -0
  238. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/uv/inject.py +0 -0
  239. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/uv/provider.py +0 -0
  240. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/uv/uv.py +0 -0
  241. {omdev-0.0.9 → omdev-0.0.11}/omdev/interp/venvs.py +0 -0
  242. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/__init__.py +0 -0
  243. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/messages/__init__.py +0 -0
  244. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/messages/base.py +0 -0
  245. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/messages/formats.py +0 -0
  246. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/messages/messages.py +0 -0
  247. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/messages/parsing.py +0 -0
  248. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/numerics/__init__.py +0 -0
  249. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/numerics/formats.py +0 -0
  250. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/numerics/numerics.py +0 -0
  251. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/numerics/types.py +0 -0
  252. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/LICENSE +0 -0
  253. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/__init__.py +0 -0
  254. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/consts.py +0 -0
  255. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/errors.py +0 -0
  256. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/message.py +0 -0
  257. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/nuh.py +0 -0
  258. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/parsing.py +0 -0
  259. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/rendering.py +0 -0
  260. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/tags.py +0 -0
  261. {omdev-0.0.9 → omdev-0.0.11}/omdev/irc/protocol/utils.py +0 -0
  262. {omdev-0.0.9 → omdev-0.0.11}/omdev/java/__init__.py +0 -0
  263. {omdev-0.0.9 → omdev-0.0.11}/omdev/java/__main__.py +0 -0
  264. {omdev-0.0.9 → omdev-0.0.11}/omdev/java/cli.py +0 -0
  265. {omdev-0.0.9 → omdev-0.0.11}/omdev/java/pomgen.py +0 -0
  266. {omdev-0.0.9 → omdev-0.0.11}/omdev/java/utils.py +0 -0
  267. {omdev-0.0.9 → omdev-0.0.11}/omdev/java/xml.py +0 -0
  268. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/__init__.py +0 -0
  269. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/__main__.py +0 -0
  270. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/find.py +0 -0
  271. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/magic.py +0 -0
  272. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/prepare.py +0 -0
  273. {omdev-0.0.9 → omdev-0.0.11}/omdev/magic/styles.py +0 -0
  274. {omdev-0.0.9 → omdev-0.0.11}/omdev/manifests/__init__.py +0 -0
  275. {omdev-0.0.9 → omdev-0.0.11}/omdev/manifests/__main__.py +0 -0
  276. {omdev-0.0.9 → omdev-0.0.11}/omdev/manifests/_dumping.py +0 -0
  277. {omdev-0.0.9 → omdev-0.0.11}/omdev/manifests/building.py +0 -0
  278. {omdev-0.0.9 → omdev-0.0.11}/omdev/manifests/dumping.py +0 -0
  279. {omdev-0.0.9 → omdev-0.0.11}/omdev/manifests/main.py +0 -0
  280. {omdev-0.0.9 → omdev-0.0.11}/omdev/markdown/__init__.py +0 -0
  281. {omdev-0.0.9 → omdev-0.0.11}/omdev/markdown/incparse.py +0 -0
  282. {omdev-0.0.9 → omdev-0.0.11}/omdev/markdown/tokens.py +0 -0
  283. {omdev-0.0.9 → omdev-0.0.11}/omdev/mypy/__init__.py +0 -0
  284. {omdev-0.0.9 → omdev-0.0.11}/omdev/mypy/debug.py +0 -0
  285. {omdev-0.0.9 → omdev-0.0.11}/omdev/mypy/report.py +0 -0
  286. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/__init__.py +0 -0
  287. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/building.py +0 -0
  288. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/compression.py +0 -0
  289. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/data.py +0 -0
  290. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/datarefs.py +0 -0
  291. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/dataserver.py +0 -0
  292. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/loading.py +0 -0
  293. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/media.py +0 -0
  294. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/pack/__init__.py +0 -0
  295. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/pack/packing.py +0 -0
  296. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/pack/repositories.py +0 -0
  297. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/pack/unpacking.py +0 -0
  298. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/repositories.py +0 -0
  299. {omdev-0.0.9 → omdev-0.0.11}/omdev/oci/tars.py +0 -0
  300. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/__init__.py +0 -0
  301. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/marshal.py +0 -0
  302. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/names.py +0 -0
  303. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/requires.py +0 -0
  304. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/revisions.py +0 -0
  305. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/specifiers.py +0 -0
  306. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/versions.py +0 -0
  307. {omdev-0.0.9 → omdev-0.0.11}/omdev/packaging/wheelfile.py +0 -0
  308. {omdev-0.0.9 → omdev-0.0.11}/omdev/pip.py +0 -0
  309. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/__init__.py +0 -0
  310. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/__main__.py +0 -0
  311. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/base.py +0 -0
  312. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/blanklines.py +0 -0
  313. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/caches.py +0 -0
  314. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/git.py +0 -0
  315. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/imports.py +0 -0
  316. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/lite.py +0 -0
  317. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/main.py +0 -0
  318. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/manifests.py +0 -0
  319. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/scripts.py +0 -0
  320. {omdev-0.0.9 → omdev-0.0.11}/omdev/precheck/unicode.py +0 -0
  321. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/__init__.py +0 -0
  322. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/asts/__init__.py +0 -0
  323. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/asts/parents.py +0 -0
  324. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/asts/toplevel.py +0 -0
  325. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/asts/visitors.py +0 -0
  326. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/attrdocs.py +0 -0
  327. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/bracepy.py +0 -0
  328. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/classdot.py +0 -0
  329. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/LICENSE +0 -0
  330. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/__init__.py +0 -0
  331. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/attrdoc.py +0 -0
  332. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/common.py +0 -0
  333. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/epydoc.py +0 -0
  334. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/google.py +0 -0
  335. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/numpydoc.py +0 -0
  336. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/parser.py +0 -0
  337. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/docstrings/rest.py +0 -0
  338. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/findimports.py +0 -0
  339. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/reprs.py +0 -0
  340. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/scripts/__init__.py +0 -0
  341. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/scripts/bumpversion.py +0 -0
  342. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/scripts/execstat.py +0 -0
  343. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/scripts/importtrace.py +0 -0
  344. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/srcheaders.py +0 -0
  345. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tokens/__init__.py +0 -0
  346. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tokens/all.py +0 -0
  347. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tokens/tokenizert.py +0 -0
  348. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tokens/utils.py +0 -0
  349. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tools/__init__.py +0 -0
  350. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tools/importscan.py +0 -0
  351. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tools/mkrelimp.py +0 -0
  352. {omdev-0.0.9 → omdev-0.0.11}/omdev/py/tools/pipdepup.py +0 -0
  353. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/__init__.py +0 -0
  354. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/__main__.py +0 -0
  355. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/configs.py +0 -0
  356. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/inject.py +0 -0
  357. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/pkg.py +0 -0
  358. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/reqs.py +0 -0
  359. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/resources/dockerdev.sh +0 -0
  360. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/resources/python.sh +0 -0
  361. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/tools/__init__.py +0 -0
  362. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/tools/aboutdeps.py +0 -0
  363. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/tools/buildrs.py +0 -0
  364. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/tools/pyversions.py +0 -0
  365. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/venvs.py +0 -0
  366. {omdev-0.0.9 → omdev-0.0.11}/omdev/pyproject/versions.py +0 -0
  367. {omdev-0.0.9 → omdev-0.0.11}/omdev/rs/__init__.py +0 -0
  368. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/__init__.py +0 -0
  369. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/__init__.py +0 -0
  370. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/formats/__init__.py +0 -0
  371. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/formats/goyaml.py +0 -0
  372. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/inject.py +0 -0
  373. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/io/__init__.py +0 -0
  374. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/io/pipelines.py +0 -0
  375. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/io/streams.py +0 -0
  376. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/logs.py +0 -0
  377. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/lib/marshal.py +0 -0
  378. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/slowcat.py +0 -0
  379. {omdev-0.0.9 → omdev-0.0.11}/omdev/scripts/tmpexec.py +0 -0
  380. {omdev-0.0.9/omdev/tools/git → omdev-0.0.11/omdev/supervisor}/__init__.py +0 -0
  381. {omdev-0.0.9 → omdev-0.0.11}/omdev/tagstrings.py +0 -0
  382. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/__init__.py +0 -0
  383. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/cloc.py +0 -0
  384. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/diff.py +0 -0
  385. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/doc.py +0 -0
  386. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/docker.py +0 -0
  387. {omdev-0.0.9/omdev/tools/json → omdev-0.0.11/omdev/tools/git}/__init__.py +0 -0
  388. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/git/__main__.py +0 -0
  389. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/git/cli.py +0 -0
  390. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/git/cloning.py +0 -0
  391. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/git/consts.py +0 -0
  392. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/git/messages.py +0 -0
  393. {omdev-0.0.9/omdev/tools/jsonview → omdev-0.0.11/omdev/tools/json}/__init__.py +0 -0
  394. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/__main__.py +0 -0
  395. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/cli.py +0 -0
  396. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/formats.py +0 -0
  397. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/io.py +0 -0
  398. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/parsing.py +0 -0
  399. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/processing.py +0 -0
  400. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/json/rendering.py +0 -0
  401. {omdev-0.0.9/omdev/tools/pawk → omdev-0.0.11/omdev/tools/jsonview}/__init__.py +0 -0
  402. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/jsonview/__main__.py +0 -0
  403. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/jsonview/cli.py +0 -0
  404. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  405. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  406. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  407. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/linehisto.py +0 -0
  408. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/mkenv.py +0 -0
  409. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/notebook.py +0 -0
  410. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/pawk/README.md +0 -0
  411. {omdev-0.0.9/omdev/tui → omdev-0.0.11/omdev/tools/pawk}/__init__.py +0 -0
  412. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/pawk/__main__.py +0 -0
  413. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/pawk/pawk.py +0 -0
  414. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/pip.py +0 -0
  415. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/prof.py +0 -0
  416. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/qr.py +0 -0
  417. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/shadow.py +0 -0
  418. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/shell.py +0 -0
  419. {omdev-0.0.9 → omdev-0.0.11}/omdev/tools/sqlrepl.py +0 -0
  420. {omdev-0.0.9/omdev/tui/apps → omdev-0.0.11/omdev/tui}/__init__.py +0 -0
  421. {omdev-0.0.9/omdev/tui/apps/edit → omdev-0.0.11/omdev/tui/apps}/__init__.py +0 -0
  422. {omdev-0.0.9/omdev/tui/apps/irc → omdev-0.0.11/omdev/tui/apps/edit}/__init__.py +0 -0
  423. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/edit/main.py +0 -0
  424. {omdev-0.0.9/omdev/tui/apps/jtree → omdev-0.0.11/omdev/tui/apps/irc}/__init__.py +0 -0
  425. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/irc/__main__.py +0 -0
  426. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/irc/app.py +0 -0
  427. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/irc/client.py +0 -0
  428. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/irc/commands.py +0 -0
  429. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/irc/main.py +0 -0
  430. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/LICENSE +0 -0
  431. {omdev-0.0.9/omdev/tui/apps/markdown → omdev-0.0.11/omdev/tui/apps/jtree}/__init__.py +0 -0
  432. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/__main__.py +0 -0
  433. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/app.py +0 -0
  434. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/cli.py +0 -0
  435. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  436. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/utils.py +0 -0
  437. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/jtree/widgets.py +0 -0
  438. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/markdown/__main__.py +0 -0
  439. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/apps/markdown/cli.py +0 -0
  440. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/__init__.py +0 -0
  441. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/console2.py +0 -0
  442. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/LICENSE +0 -0
  443. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/__init__.py +0 -0
  444. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/__main__.py +0 -0
  445. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/_compat.py +0 -0
  446. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/cli.py +0 -0
  447. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/renderables.py +0 -0
  448. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/rendering.py +0 -0
  449. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/diff/underlinebar.py +0 -0
  450. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/markdown2.py +0 -0
  451. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/textual/__init__.py +0 -0
  452. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/textual/dark.py +0 -0
  453. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/textual/dump.py +0 -0
  454. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/rich/textual/themes.py +0 -0
  455. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/__init__.py +0 -0
  456. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/app2.py +0 -0
  457. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  458. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  459. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/autocomplete/matching.py +0 -0
  460. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/autocomplete/paths.py +0 -0
  461. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/autocomplete/widget.py +0 -0
  462. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/binding2.py +0 -0
  463. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/clipboard.py +0 -0
  464. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/debug/__init__.py +0 -0
  465. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/debug/dominfo.py +0 -0
  466. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/debug/screen.py +0 -0
  467. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/devtools.py +0 -0
  468. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/drivers2.py +0 -0
  469. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/logging2.py +0 -0
  470. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/render2.py +0 -0
  471. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/screen2.py +0 -0
  472. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/types.py +0 -0
  473. {omdev-0.0.9 → omdev-0.0.11}/omdev/tui/textual/widgets2.py +0 -0
  474. {omdev-0.0.9 → omdev-0.0.11}/omdev.egg-info/dependency_links.txt +0 -0
  475. {omdev-0.0.9 → omdev-0.0.11}/omdev.egg-info/entry_points.txt +0 -0
  476. {omdev-0.0.9 → omdev-0.0.11}/omdev.egg-info/top_level.txt +0 -0
  477. {omdev-0.0.9 → omdev-0.0.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.9
3
+ Version: 0.0.11
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,8 +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.9
17
+ Requires-Dist: omlish==0.0.11
18
18
  Provides-Extra: all
19
+ Requires-Dist: ominfra==0.0.11; extra == "all"
20
+ Requires-Dist: ommlds==0.0.11; extra == "all"
19
21
  Requires-Dist: black~=26.3; extra == "all"
20
22
  Requires-Dist: pycparser~=3.0; extra == "all"
21
23
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -30,6 +32,10 @@ Requires-Dist: rich~=15.0; extra == "all"
30
32
  Requires-Dist: textual~=8.2; extra == "all"
31
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
32
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
+ Provides-Extra: ominfra
36
+ Requires-Dist: ominfra==0.0.11; extra == "ominfra"
37
+ Provides-Extra: ommlds
38
+ Requires-Dist: ommlds==0.0.11; extra == "ommlds"
33
39
  Provides-Extra: black
34
40
  Requires-Dist: black~=26.3; extra == "black"
35
41
  Provides-Extra: c
@@ -337,6 +337,20 @@
337
337
  }
338
338
  }
339
339
  },
340
+ {
341
+ "module": ".supervisor.__main__",
342
+ "attr": "_CLI_MODULE",
343
+ "file": "omdev/supervisor/__main__.py",
344
+ "line": 4,
345
+ "value": {
346
+ "!.cli.types.CliModule": {
347
+ "name": [
348
+ "supervisor"
349
+ ],
350
+ "module": "omdev.supervisor.__main__"
351
+ }
352
+ }
353
+ },
340
354
  {
341
355
  "module": ".tools.cloc",
342
356
  "attr": "_CLI_MODULE",
@@ -12,6 +12,16 @@ class Project(ProjectBase):
12
12
  ]
13
13
 
14
14
  optional_dependencies = {
15
+ 'ominfra': [
16
+ f'ominfra == {__version__}',
17
+ ],
18
+
19
+ 'ommlds': [
20
+ f'ommlds == {__version__}',
21
+ ],
22
+
23
+ #
24
+
15
25
  'black': [
16
26
  'black ~= 26.3',
17
27
  ],
@@ -23,8 +23,8 @@ import sys
23
23
  import typing as ta
24
24
 
25
25
  from omlish.argparse.cli import ArgparseCli
26
- from omlish.argparse.cli import argparse_arg
27
- from omlish.argparse.cli import argparse_cmd
26
+ from omlish.argparse.parsers import argparse_arg
27
+ from omlish.argparse.parsers import argparse_cmd
28
28
  from omlish.lite.check import check
29
29
  from omlish.lite.inject import inj
30
30
  from omlish.logs.modules import get_module_logger
@@ -6,8 +6,8 @@ See:
6
6
  import dataclasses as dc
7
7
 
8
8
  from omlish.argparse.cli import ArgparseCli
9
- from omlish.argparse.cli import argparse_arg
10
- from omlish.argparse.cli import argparse_cmd
9
+ from omlish.argparse.parsers import argparse_arg
10
+ from omlish.argparse.parsers import argparse_cmd
11
11
  from omlish.lite.json import json_dumps_pretty
12
12
 
13
13
  from .api.v1.client import GithubCacheServiceV1Client
@@ -10,8 +10,8 @@ import asyncio
10
10
  import typing as ta
11
11
 
12
12
  from omlish.argparse.cli import ArgparseCli
13
- from omlish.argparse.cli import argparse_arg
14
- from omlish.argparse.cli import argparse_cmd
13
+ from omlish.argparse.parsers import argparse_arg
14
+ from omlish.argparse.parsers import argparse_cmd
15
15
  from omlish.lite.cached import cached_nullary
16
16
  from omlish.lite.check import check
17
17
  from omlish.lite.inject import Injector
@@ -2,8 +2,8 @@
2
2
  import typing as ta
3
3
 
4
4
  from omlish.argparse.cli import ArgparseCli
5
- from omlish.argparse.cli import argparse_arg
6
- from omlish.argparse.cli import argparse_cmd
5
+ from omlish.argparse.parsers import argparse_arg
6
+ from omlish.argparse.parsers import argparse_cmd
7
7
 
8
8
  from .find import find_magic_files
9
9
  from .find import find_magic_py_modules
@@ -32,8 +32,8 @@ import sys
32
32
  import typing as ta
33
33
 
34
34
  from omlish.argparse.cli import ArgparseCli
35
- from omlish.argparse.cli import argparse_arg
36
- from omlish.argparse.cli import argparse_cmd
35
+ from omlish.argparse.parsers import argparse_arg
36
+ from omlish.argparse.parsers import argparse_cmd
37
37
  from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
38
38
  from omlish.formats.toml.parser import toml_loads
39
39
  from omlish.lite.cached import cached_nullary
@@ -129,7 +129,7 @@ def __omlish_amalg__(): # noqa
129
129
  dict(path='github/bootstrap.py', sha1='9bf24b05603cd1a82db8be8b645bbad3e0d3f22f'),
130
130
  dict(path='../oci/datarefs.py', sha1='793ce5f2774e052b28d04b226a5f1eff6eec0a72'),
131
131
  dict(path='../oci/pack/unpacking.py', sha1='f43dee9a2eee79cbbb90f0721ed234a2bc35daa7'),
132
- dict(path='../../omlish/argparse/cli.py', sha1='ae89334840eadb9838667d98a0bdd4870bdd790b'),
132
+ dict(path='../../omlish/argparse/parsers.py', sha1='f874eb5c45e22156b2e9a762cfb68a2311b6d1f8'),
133
133
  dict(path='../../omlish/formats/yaml/goyaml/errors.py', sha1='c4dda09d78bc14d9824e45e3d5d434185ee5598b'),
134
134
  dict(path='../../omlish/http/headers.py', sha1='fa6777687a0573176750f358a4b7163d704c7e5b'),
135
135
  dict(path='../../omlish/http/parsing.py', sha1='2ee187993274e697332c7df7b46a98382f4cee2a'),
@@ -152,6 +152,7 @@ def __omlish_amalg__(): # noqa
152
152
  dict(path='../oci/data.py', sha1='6c8b30260f3418505d0053d6a9cf8473196069d2'),
153
153
  dict(path='../oci/repositories.py', sha1='f224ea10f5d0f9d3719bc9fe867c7e1d2ccffbf3'),
154
154
  dict(path='../oci/tars.py', sha1='3ed00e97a494bd92c6a6149d22d51469bc0af384'),
155
+ dict(path='../../omlish/argparse/cli.py', sha1='aef500dd2d8f5a65c4c04ede11355ac8eb513f2e'),
155
156
  dict(path='../../omlish/asyncs/asyncio/sockets.py', sha1='8d24dae988a30bb73f167a9ab62d4fc9eef4ad06'),
156
157
  dict(path='../../omlish/asyncs/asyncio/timeouts.py', sha1='4d31b02b3c39b8f2fa7e94db36552fde6942e36a'),
157
158
  dict(path='../../omlish/formats/yaml/goyaml/tokens.py', sha1='e9744c171d982ea8b4a6ace5f937926d51d5ec30'),
@@ -234,14 +235,14 @@ def __omlish_amalg__(): # noqa
234
235
  dict(path='../../omlish/http/simple/pipelines/handlers.py', sha1='a6064bcd6dedec75072edc3a10f0f082c83dbb37'), # noqa
235
236
  dict(path='ci.py', sha1='87b82e2bd86aa886764f1e0067251b056e359650'),
236
237
  dict(path='github/cache.py', sha1='d91f9c87d167574e94c99817e6c3a0f75925dfb9'),
237
- dict(path='github/cli.py', sha1='6d14b0eb4ca5f606ad2821b63b9707ce57f50406'),
238
+ dict(path='github/cli.py', sha1='4f63c026d5d00b04a579ee9186a6264094eeae9d'),
238
239
  dict(path='../../omlish/http/simple/pipelines/sync.py', sha1='097922607bca8c85ee0a4d35d306dab661f11b3e'),
239
240
  dict(path='docker/dataserver.py', sha1='fa09a10352255ec3de2d87344de8c8324ad8679e'),
240
241
  dict(path='github/inject.py', sha1='99c0dd7c55767e7c49f70b7edac25da67f718b2e'),
241
242
  dict(path='docker/cacheserved/cache.py', sha1='4f8c5c2b7451b8f0d7cccb12060ff609af4f44e8'),
242
243
  dict(path='docker/inject.py', sha1='69acac65fae413cb58c1f9aa739d2cc1c3ffa09d'),
243
244
  dict(path='inject.py', sha1='e86b16d79a113a4f387e68ed0db1d067bcada93a'),
244
- dict(path='cli.py', sha1='bf4845886c5e7b623e54fb98ce7c8f0fa6696d3a'),
245
+ dict(path='cli.py', sha1='b392df23b6eaf1a0b5223db07a3c4bcd1d1fe0a2'),
245
246
  ],
246
247
  )
247
248
 
@@ -285,8 +286,8 @@ SocketAddress = ta.Any # ta.TypeAlias
285
286
  GithubCacheServiceV2RequestT = ta.TypeVar('GithubCacheServiceV2RequestT')
286
287
  GithubCacheServiceV2ResponseT = ta.TypeVar('GithubCacheServiceV2ResponseT')
287
288
 
288
- # ../../omlish/argparse/cli.py
289
- ArgparseCmdFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
289
+ # ../../omlish/argparse/parsers.py
290
+ ArgparseCmdFn = ta.Callable[[], ta.Union[ta.Optional[int], ta.Awaitable[ta.Optional[int]]]] # ta.TypeAlias
290
291
 
291
292
  # ../../omlish/formats/yaml/goyaml/errors.py
292
293
  YamlErrorOr = ta.Union['YamlError', T] # ta.TypeAlias
@@ -3984,19 +3985,7 @@ class OciLayerUnpacker(ExitStacked):
3984
3985
 
3985
3986
 
3986
3987
  ########################################
3987
- # ../../../omlish/argparse/cli.py
3988
- """
3989
- FIXME:
3990
- - exit_on_error lol
3991
-
3992
- TODO:
3993
- - default command
3994
- - auto match all underscores to hyphens
3995
- - pre-run, post-run hooks
3996
- - exitstack?
3997
- - suggestion - difflib.get_close_matches
3998
- - add_argument_group - group kw on ArgparseKwarg?
3999
- """
3988
+ # ../../../omlish/argparse/parsers.py
4000
3989
 
4001
3990
 
4002
3991
  ##
@@ -4041,6 +4030,7 @@ class ArgparseCmd:
4041
4030
  aliases: ta.Optional[ta.Sequence[str]] = None
4042
4031
  parent: ta.Optional['ArgparseCmd'] = None
4043
4032
  accepts_unknown: bool = False
4033
+ default: bool = False
4044
4034
 
4045
4035
  def __post_init__(self) -> None:
4046
4036
  def check_name(s: str) -> None:
@@ -4064,7 +4054,7 @@ class ArgparseCmd:
4064
4054
  return self
4065
4055
  return dc.replace(self, fn=self.fn.__get__(instance, owner)) # noqa
4066
4056
 
4067
- def __call__(self, *args, **kwargs) -> ta.Optional[int]:
4057
+ def __call__(self, *args, **kwargs) -> ta.Union[ta.Optional[int], ta.Awaitable[ta.Optional[int]]]:
4068
4058
  return self.fn(*args, **kwargs)
4069
4059
 
4070
4060
 
@@ -4074,12 +4064,14 @@ def argparse_cmd(
4074
4064
  aliases: ta.Optional[ta.Iterable[str]] = None,
4075
4065
  parent: ta.Optional[ArgparseCmd] = None,
4076
4066
  accepts_unknown: bool = False,
4067
+ default: bool = False,
4077
4068
  ) -> ta.Any: # ta.Callable[[ArgparseCmdFn], ArgparseCmd]: # FIXME
4078
4069
  for arg in args:
4079
4070
  check.isinstance(arg, ArgparseArg)
4080
4071
  check.isinstance(name, (str, type(None)))
4081
4072
  check.isinstance(parent, (ArgparseCmd, type(None)))
4082
4073
  check.not_isinstance(aliases, str)
4074
+ check.isinstance(default, bool)
4083
4075
 
4084
4076
  def inner(fn):
4085
4077
  return ArgparseCmd(
@@ -4089,6 +4081,7 @@ def argparse_cmd(
4089
4081
  aliases=tuple(aliases) if aliases is not None else None,
4090
4082
  parent=parent,
4091
4083
  accepts_unknown=accepts_unknown,
4084
+ default=default,
4092
4085
  )
4093
4086
 
4094
4087
  return inner
@@ -4112,186 +4105,129 @@ def _get_argparse_arg_ann_kwargs(ann: ta.Any) -> ta.Mapping[str, ta.Any]:
4112
4105
  raise TypeError(ann)
4113
4106
 
4114
4107
 
4115
- class _ArgparseCliAnnotationBox:
4108
+ class _ArgparseParserClassAnnotationBox:
4116
4109
  def __init__(self, annotations: ta.Mapping[str, ta.Any]) -> None:
4117
4110
  super().__init__()
4118
4111
 
4119
4112
  self.__annotations__ = annotations # type: ignore
4120
4113
 
4121
4114
 
4122
- class ArgparseCli:
4123
- def __init__(self, argv: ta.Optional[ta.Sequence[str]] = None) -> None:
4124
- super().__init__()
4125
-
4126
- self._argv = argv if argv is not None else sys.argv[1:]
4127
-
4128
- self._args, self._unknown_args = self.get_parser().parse_known_args(self._argv)
4115
+ def configure_argparse_parser_class_parser(
4116
+ cls: type,
4117
+ parser: ta.Optional[argparse.ArgumentParser] = None,
4118
+ ) -> argparse.ArgumentParser:
4119
+ ns = cls.__dict__
4120
+ objs = {}
4121
+ mro = cls.__mro__[::-1]
4122
+ for bns in [bcls.__dict__ for bcls in reversed(mro)] + [ns]:
4123
+ bseen = set() # type: ignore
4124
+ for k, v in bns.items():
4125
+ if isinstance(v, (ArgparseCmd, ArgparseArg)):
4126
+ check.not_in(v, bseen)
4127
+ bseen.add(v)
4128
+ objs[k] = v
4129
+ elif k in objs:
4130
+ del [k]
4129
4131
 
4130
4132
  #
4131
4133
 
4132
- def __init_subclass__(cls, **kwargs: ta.Any) -> None:
4133
- super().__init_subclass__(**kwargs)
4134
-
4135
- ns = cls.__dict__
4136
- objs = {}
4137
- mro = cls.__mro__[::-1]
4138
- for bns in [bcls.__dict__ for bcls in reversed(mro)] + [ns]:
4139
- bseen = set() # type: ignore
4140
- for k, v in bns.items():
4141
- if isinstance(v, (ArgparseCmd, ArgparseArg)):
4142
- check.not_in(v, bseen)
4143
- bseen.add(v)
4144
- objs[k] = v
4145
- elif k in objs:
4146
- del [k]
4147
-
4148
- #
4149
-
4150
- anns = ta.get_type_hints(_ArgparseCliAnnotationBox({
4151
- **{k: v for bcls in reversed(mro) for k, v in getattr(bcls, '__annotations__', {}).items()},
4152
- **ns.get('__annotations__', {}),
4153
- }), globalns=ns.get('__globals__', {}))
4154
-
4155
- #
4134
+ anns = ta.get_type_hints(_ArgparseParserClassAnnotationBox({
4135
+ **{k: v for bcls in reversed(mro) for k, v in getattr(bcls, '__annotations__', {}).items()},
4136
+ **ns.get('__annotations__', {}),
4137
+ }), globalns=ns.get('__globals__', {}))
4156
4138
 
4157
- if '_parser' in ns:
4158
- parser = check.isinstance(ns['_parser'], argparse.ArgumentParser)
4159
- else:
4160
- parser = argparse.ArgumentParser()
4161
- setattr(cls, '_parser', parser)
4139
+ #
4162
4140
 
4163
- #
4141
+ if parser is None:
4142
+ parser = argparse.ArgumentParser()
4164
4143
 
4165
- subparsers = parser.add_subparsers()
4166
-
4167
- for att, obj in objs.items():
4168
- if isinstance(obj, ArgparseCmd):
4169
- if obj.parent is not None:
4170
- raise NotImplementedError
4171
-
4172
- for cn in [obj.name, *(obj.aliases or [])]:
4173
- subparser = subparsers.add_parser(cn)
4174
-
4175
- for arg in (obj.args or []):
4176
- if (
4177
- len(arg.args) == 1 and
4178
- isinstance(arg.args[0], str) and
4179
- not (n := check.isinstance(arg.args[0], str)).startswith('-') and
4180
- 'metavar' not in arg.kwargs
4181
- ):
4182
- subparser.add_argument(
4183
- n.replace('-', '_'),
4184
- **arg.kwargs,
4185
- metavar=n,
4186
- )
4187
- else:
4188
- subparser.add_argument(*arg.args, **arg.kwargs)
4144
+ #
4189
4145
 
4190
- subparser.set_defaults(_cmd=obj)
4146
+ subparsers = parser.add_subparsers()
4191
4147
 
4192
- elif isinstance(obj, ArgparseArg):
4193
- if obj.group is not None:
4194
- # FIXME: add_argument_group
4195
- raise NotImplementedError
4148
+ default_cmd: ta.Optional[ArgparseCmd] = None
4196
4149
 
4197
- if att in anns:
4198
- ann_kwargs = _get_argparse_arg_ann_kwargs(anns[att])
4199
- obj.kwargs = {**ann_kwargs, **obj.kwargs}
4150
+ for att, obj in objs.items():
4151
+ if isinstance(obj, ArgparseCmd):
4152
+ if obj.parent is not None:
4153
+ raise NotImplementedError
4200
4154
 
4201
- if not obj.dest:
4202
- if 'dest' in obj.kwargs:
4203
- obj.dest = obj.kwargs['dest']
4155
+ if obj.default:
4156
+ if default_cmd:
4157
+ raise TypeError(f'Already have a default command: {default_cmd}, {obj}')
4158
+ default_cmd = obj
4159
+
4160
+ for cn in [obj.name, *(obj.aliases or [])]:
4161
+ subparser = subparsers.add_parser(cn)
4162
+
4163
+ for arg in (obj.args or []):
4164
+ if (
4165
+ len(arg.args) == 1 and
4166
+ isinstance(arg.args[0], str) and
4167
+ not (n := check.isinstance(arg.args[0], str)).startswith('-') and
4168
+ 'metavar' not in arg.kwargs
4169
+ ):
4170
+ subparser.add_argument(
4171
+ n.replace('-', '_'),
4172
+ **arg.kwargs,
4173
+ metavar=n,
4174
+ )
4204
4175
  else:
4205
- obj.dest = obj.kwargs['dest'] = att # type: ignore
4206
-
4207
- parser.add_argument(*obj.args, **obj.kwargs)
4208
-
4209
- else:
4210
- raise TypeError(obj)
4176
+ subparser.add_argument(*arg.args, **arg.kwargs)
4211
4177
 
4212
- #
4213
-
4214
- _parser: ta.ClassVar[argparse.ArgumentParser]
4178
+ subparser.set_defaults(_cmd=obj)
4215
4179
 
4216
- @classmethod
4217
- def get_parser(cls) -> argparse.ArgumentParser:
4218
- return cls._parser
4180
+ elif isinstance(obj, ArgparseArg):
4181
+ if obj.group is not None:
4182
+ # FIXME: add_argument_group
4183
+ raise NotImplementedError
4219
4184
 
4220
- @property
4221
- def argv(self) -> ta.Sequence[str]:
4222
- return self._argv
4185
+ if att in anns:
4186
+ ann_kwargs = _get_argparse_arg_ann_kwargs(anns[att])
4187
+ obj.kwargs = {**ann_kwargs, **obj.kwargs}
4223
4188
 
4224
- @property
4225
- def args(self) -> argparse.Namespace:
4226
- return self._args
4189
+ if not obj.dest:
4190
+ if 'dest' in obj.kwargs:
4191
+ obj.dest = obj.kwargs['dest']
4192
+ else:
4193
+ obj.dest = obj.kwargs['dest'] = att # type: ignore
4227
4194
 
4228
- @property
4229
- def unknown_args(self) -> ta.Sequence[str]:
4230
- return self._unknown_args
4195
+ parser.add_argument(*obj.args, **obj.kwargs)
4231
4196
 
4232
- #
4197
+ else:
4198
+ raise TypeError(obj)
4233
4199
 
4234
- def _bind_cli_cmd(self, cmd: ArgparseCmd) -> ta.Callable:
4235
- return cmd.__get__(self, type(self))
4200
+ if default_cmd is not None:
4201
+ parser.set_defaults(_cmd=default_cmd)
4236
4202
 
4237
- def prepare_cli_run(self) -> ta.Optional[ta.Callable]:
4238
- cmd = getattr(self.args, '_cmd', None)
4203
+ return parser
4239
4204
 
4240
- if self._unknown_args and not (cmd is not None and cmd.accepts_unknown):
4241
- msg = f'unrecognized arguments: {" ".join(self._unknown_args)}'
4242
- if (parser := self.get_parser()).exit_on_error: # noqa
4243
- parser.error(msg)
4244
- else:
4245
- raise argparse.ArgumentError(None, msg)
4246
4205
 
4247
- if cmd is None:
4248
- self.get_parser().print_help()
4249
- return None
4206
+ ##
4250
4207
 
4251
- return self._bind_cli_cmd(cmd)
4252
4208
 
4253
- #
4209
+ class ArgparseParserClass(Abstract):
4210
+ def __init_subclass__(cls, **kwargs: ta.Any) -> None:
4211
+ super().__init_subclass__(**kwargs)
4254
4212
 
4255
- def cli_run(self) -> ta.Optional[int]:
4256
- if (fn := self.prepare_cli_run()) is None:
4257
- return 0
4213
+ ns = cls.__dict__
4258
4214
 
4259
- return fn()
4215
+ if '_parser' in ns:
4216
+ parser = check.isinstance(ns['_parser'], argparse.ArgumentParser)
4217
+ else:
4218
+ parser = argparse.ArgumentParser()
4260
4219
 
4261
- def cli_run_and_exit(self) -> ta.NoReturn:
4262
- rc = self.cli_run()
4263
- if not isinstance(rc, int):
4264
- rc = 0
4265
- raise SystemExit(rc)
4220
+ configure_argparse_parser_class_parser(cls, parser)
4266
4221
 
4267
- def __call__(self, *, exit: bool = False) -> ta.Optional[int]: # noqa
4268
- if exit:
4269
- return self.cli_run_and_exit()
4270
- else:
4271
- return self.cli_run()
4222
+ setattr(cls, '_parser', parser)
4272
4223
 
4273
4224
  #
4274
4225
 
4275
- async def async_cli_run(
4276
- self,
4277
- *,
4278
- force_async: bool = False,
4279
- ) -> ta.Optional[int]:
4280
- if (fn := self.prepare_cli_run()) is None:
4281
- return 0
4282
-
4283
- if force_async:
4284
- is_async = True
4285
- else:
4286
- tfn = fn
4287
- if isinstance(tfn, ArgparseCmd):
4288
- tfn = tfn.fn
4289
- is_async = inspect.iscoroutinefunction(tfn)
4226
+ _parser: ta.ClassVar[argparse.ArgumentParser]
4290
4227
 
4291
- if is_async:
4292
- return await fn()
4293
- else:
4294
- return fn()
4228
+ @classmethod
4229
+ def get_parser(cls) -> argparse.ArgumentParser:
4230
+ return cls._parser
4295
4231
 
4296
4232
 
4297
4233
  ########################################
@@ -11625,6 +11561,110 @@ def write_oci_data_tar_file(
11625
11561
  return tgw.info()
11626
11562
 
11627
11563
 
11564
+ ########################################
11565
+ # ../../../omlish/argparse/cli.py
11566
+ """
11567
+ FIXME:
11568
+ - exit_on_error lol
11569
+
11570
+ TODO:
11571
+ - default command
11572
+ - auto match all underscores to hyphens
11573
+ - pre-run, post-run hooks
11574
+ - exitstack?
11575
+ - suggestion - difflib.get_close_matches
11576
+ - add_argument_group - group kw on ArgparseKwarg?
11577
+ """
11578
+
11579
+
11580
+ ##
11581
+
11582
+
11583
+ class ArgparseCli(ArgparseParserClass, Abstract):
11584
+ def __init__(self, argv: ta.Optional[ta.Sequence[str]] = None) -> None:
11585
+ super().__init__()
11586
+
11587
+ self._argv = argv if argv is not None else sys.argv[1:]
11588
+
11589
+ self._args, self._unknown_args = self.get_parser().parse_known_args(self._argv)
11590
+
11591
+ @property
11592
+ def argv(self) -> ta.Sequence[str]:
11593
+ return self._argv
11594
+
11595
+ @property
11596
+ def args(self) -> argparse.Namespace:
11597
+ return self._args
11598
+
11599
+ @property
11600
+ def unknown_args(self) -> ta.Sequence[str]:
11601
+ return self._unknown_args
11602
+
11603
+ #
11604
+
11605
+ def _bind_cli_cmd(self, cmd: ArgparseCmd) -> ta.Callable:
11606
+ return cmd.__get__(self, type(self))
11607
+
11608
+ def prepare_cli_run(self) -> ta.Optional[ta.Callable]:
11609
+ cmd = getattr(self.args, '_cmd', None)
11610
+
11611
+ if self._unknown_args and not (cmd is not None and cmd.accepts_unknown):
11612
+ msg = f'unrecognized arguments: {" ".join(self._unknown_args)}'
11613
+ if (parser := self.get_parser()).exit_on_error: # noqa
11614
+ parser.error(msg)
11615
+ else:
11616
+ raise argparse.ArgumentError(None, msg)
11617
+
11618
+ if cmd is None:
11619
+ self.get_parser().print_help()
11620
+ return None
11621
+
11622
+ return self._bind_cli_cmd(cmd)
11623
+
11624
+ #
11625
+
11626
+ def cli_run(self) -> ta.Optional[int]:
11627
+ if (fn := self.prepare_cli_run()) is None:
11628
+ return 0
11629
+
11630
+ return check.isinstance(fn(), (int, None))
11631
+
11632
+ def cli_run_and_exit(self) -> ta.NoReturn:
11633
+ rc = self.cli_run()
11634
+ if not isinstance(rc, int):
11635
+ rc = 0
11636
+ raise SystemExit(rc)
11637
+
11638
+ def __call__(self, *, exit: bool = False) -> ta.Optional[int]: # noqa
11639
+ if exit:
11640
+ return self.cli_run_and_exit()
11641
+ else:
11642
+ return self.cli_run()
11643
+
11644
+ #
11645
+
11646
+ async def async_cli_run(
11647
+ self,
11648
+ *,
11649
+ force_async: bool = False,
11650
+ ) -> ta.Optional[int]:
11651
+ if (fn := self.prepare_cli_run()) is None:
11652
+ return 0
11653
+
11654
+ if force_async:
11655
+ is_async = True
11656
+ else:
11657
+ tfn = fn
11658
+ if isinstance(tfn, ArgparseCmd):
11659
+ tfn = tfn.fn
11660
+ is_async = inspect.iscoroutinefunction(tfn)
11661
+
11662
+ if is_async:
11663
+ return await fn()
11664
+ else:
11665
+ return fn()
11666
+
11667
+
11628
11668
  ########################################
11629
11669
  # ../../../omlish/asyncs/asyncio/sockets.py
11630
11670