omdev 0.0.0.dev490__tar.gz → 0.0.0.dev493__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 (392) hide show
  1. {omdev-0.0.0.dev490/omdev.egg-info → omdev-0.0.0.dev493}/PKG-INFO +6 -4
  2. omdev-0.0.0.dev493/omdev/README.md +51 -0
  3. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/__about__.py +2 -1
  4. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/cli.py +1 -1
  5. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/cli.py +1 -1
  6. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/cli.py +1 -1
  7. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/main.py +1 -1
  8. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/revisions.py +1 -1
  9. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/pipdepup.py +143 -90
  10. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/cli.py +1 -1
  11. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/ci.py +361 -25
  12. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/interp.py +3 -4
  13. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/logs.py +117 -21
  14. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/pyproject.py +364 -25
  15. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/cli.py +19 -61
  16. omdev-0.0.0.dev493/omdev/tools/jsonview/resources/jsonview.html.j2 +43 -0
  17. omdev-0.0.0.dev493/omdev/tools/pawk/README.md +195 -0
  18. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/rich/__init__.py +9 -0
  19. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/__init__.py +35 -0
  20. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/app2.py +6 -1
  21. omdev-0.0.0.dev493/omdev/tui/textual/debug/__init__.py +10 -0
  22. omdev-0.0.0.dev493/omdev/tui/textual/debug/dominfo.py +151 -0
  23. omdev-0.0.0.dev493/omdev/tui/textual/debug/screen.py +24 -0
  24. omdev-0.0.0.dev493/omdev/tui/textual/devtools.py +187 -0
  25. omdev-0.0.0.dev493/omdev/tui/textual/logging2.py +20 -0
  26. omdev-0.0.0.dev493/omdev/tui/textual/types.py +45 -0
  27. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493/omdev.egg-info}/PKG-INFO +6 -4
  28. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/SOURCES.txt +10 -1
  29. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/requires.txt +5 -3
  30. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/pyproject.toml +11 -4
  31. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/LICENSE +0 -0
  32. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/MANIFEST.in +0 -0
  33. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/README.md +0 -0
  34. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/.omlish-manifests.json +0 -0
  35. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/__init__.py +0 -0
  36. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/__init__.py +0 -0
  37. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/__main__.py +0 -0
  38. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/cli/__init__.py +0 -0
  39. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/cli/main.py +0 -0
  40. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/__init__.py +0 -0
  41. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/gen.py +0 -0
  42. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/imports.py +0 -0
  43. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/manifests.py +0 -0
  44. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/resources.py +0 -0
  45. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/srcfiles.py +0 -0
  46. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/strip.py +0 -0
  47. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/types.py +0 -0
  48. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/typing.py +0 -0
  49. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/info.py +0 -0
  50. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/sources.py +0 -0
  51. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/__init__.py +0 -0
  52. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/__init__.py +0 -0
  53. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/cache.py +0 -0
  54. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/contexts.py +0 -0
  55. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/currents.py +0 -0
  56. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/fns.py +0 -0
  57. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/resolvers.py +0 -0
  58. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/storage.py +0 -0
  59. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/types.py +0 -0
  60. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/__init__.py +0 -0
  61. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/actions.py +0 -0
  62. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/cache.py +0 -0
  63. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/consts.py +0 -0
  64. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/defaults.py +0 -0
  65. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/manifests.py +0 -0
  66. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/specs.py +0 -0
  67. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/__init__.py +0 -0
  68. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/__init__.py +0 -0
  69. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/aps.py +0 -0
  70. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/ax.py +0 -0
  71. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/cf.py +0 -0
  72. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/cg.py +0 -0
  73. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/linux/__init__.py +0 -0
  74. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/linux/x11.py +0 -0
  75. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/__init__.py +0 -0
  76. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/__main__.py +0 -0
  77. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/cdeps.py +0 -0
  78. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/cdeps.toml +0 -0
  79. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/cli.py +0 -0
  80. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/srclangs.py +0 -0
  81. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/__init__.py +0 -0
  82. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_boilerplate.cc +0 -0
  83. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/LICENSE +0 -0
  84. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/__init__.py +0 -0
  85. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/build_ext.py +0 -0
  86. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  87. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  88. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/options.py +0 -0
  89. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  90. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/dir_util.py +0 -0
  91. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/errors.py +0 -0
  92. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/extension.py +0 -0
  93. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/file_util.py +0 -0
  94. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/modified.py +0 -0
  95. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/spawn.py +0 -0
  96. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/sysconfig.py +0 -0
  97. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/util.py +0 -0
  98. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/version.py +0 -0
  99. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/build.py +0 -0
  100. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/cmake.py +0 -0
  101. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/importhook.py +0 -0
  102. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/magic.py +0 -0
  103. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/scan.py +0 -0
  104. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/__init__.py +0 -0
  105. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/__main__.py +0 -0
  106. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/cache.py +0 -0
  107. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/ci.py +0 -0
  108. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/compose.py +0 -0
  109. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/consts.py +0 -0
  110. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/__init__.py +0 -0
  111. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/buildcaching.py +0 -0
  112. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cache.py +0 -0
  113. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  114. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cacheserved/cache.py +0 -0
  115. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  116. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cmds.py +0 -0
  117. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/dataserver.py +0 -0
  118. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/imagepulling.py +0 -0
  119. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/inject.py +0 -0
  120. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/packing.py +0 -0
  121. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/repositories.py +0 -0
  122. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/utils.py +0 -0
  123. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/__init__.py +0 -0
  124. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/__init__.py +0 -0
  125. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/clients.py +0 -0
  126. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v1/__init__.py +0 -0
  127. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v1/api.py +0 -0
  128. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v1/client.py +0 -0
  129. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/__init__.py +0 -0
  130. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/api.py +0 -0
  131. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/azure.py +0 -0
  132. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/client.py +0 -0
  133. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/bootstrap.py +0 -0
  134. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/cache.py +0 -0
  135. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/cli.py +0 -0
  136. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/env.py +0 -0
  137. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/inject.py +0 -0
  138. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/inject.py +0 -0
  139. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/requirements.py +0 -0
  140. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/shell.py +0 -0
  141. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/utils.py +0 -0
  142. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/__init__.py +0 -0
  143. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/__main__.py +0 -0
  144. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/_pathhack.py +0 -0
  145. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/clicli.py +0 -0
  146. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/install.py +0 -0
  147. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/main.py +0 -0
  148. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/managers.py +0 -0
  149. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/types.py +0 -0
  150. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/__init__.py +0 -0
  151. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/clipboard.py +0 -0
  152. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/darwin_cf.py +0 -0
  153. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/linux_x11.py +0 -0
  154. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmake.py +0 -0
  155. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/__init__.py +0 -0
  156. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/__main__.py +0 -0
  157. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/_cmdlog.py +0 -0
  158. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/cli.py +0 -0
  159. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/cmdlog.py +0 -0
  160. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/__init__.py +0 -0
  161. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/__main__.py +0 -0
  162. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/_dumping.py +0 -0
  163. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/_template.py +0 -0
  164. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/codegen.py +0 -0
  165. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/dumping.py +0 -0
  166. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/__init__.py +0 -0
  167. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/handlers.py +0 -0
  168. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/http.py +0 -0
  169. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/routes.py +0 -0
  170. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/server.py +0 -0
  171. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/targets.py +0 -0
  172. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/__init__.py +0 -0
  173. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/magic.py +0 -0
  174. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/revisions.py +0 -0
  175. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/shallow.py +0 -0
  176. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/status.py +0 -0
  177. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/__init__.py +0 -0
  178. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/paths.py +0 -0
  179. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/secrets.py +0 -0
  180. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/shadow.py +0 -0
  181. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/imgur.py +0 -0
  182. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/__init__.py +0 -0
  183. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/cli.py +0 -0
  184. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/ides.py +0 -0
  185. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/open.py +0 -0
  186. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/__init__.py +0 -0
  187. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/__main__.py +0 -0
  188. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/default.py +0 -0
  189. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/inject.py +0 -0
  190. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/inspect.py +0 -0
  191. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/__init__.py +0 -0
  192. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/base.py +0 -0
  193. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/inject.py +0 -0
  194. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/running.py +0 -0
  195. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/standalone.py +0 -0
  196. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/system.py +0 -0
  197. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/__init__.py +0 -0
  198. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/inject.py +0 -0
  199. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/install.py +0 -0
  200. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/provider.py +0 -0
  201. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/pyenv.py +0 -0
  202. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/resolvers.py +0 -0
  203. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/types.py +0 -0
  204. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/__init__.py +0 -0
  205. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/inject.py +0 -0
  206. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/provider.py +0 -0
  207. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/uv.py +0 -0
  208. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/venvs.py +0 -0
  209. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/__init__.py +0 -0
  210. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/__init__.py +0 -0
  211. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/base.py +0 -0
  212. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/formats.py +0 -0
  213. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/messages.py +0 -0
  214. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/parsing.py +0 -0
  215. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/__init__.py +0 -0
  216. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/formats.py +0 -0
  217. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/numerics.py +0 -0
  218. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/types.py +0 -0
  219. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/LICENSE +0 -0
  220. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/__init__.py +0 -0
  221. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/consts.py +0 -0
  222. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/errors.py +0 -0
  223. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/message.py +0 -0
  224. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/nuh.py +0 -0
  225. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/parsing.py +0 -0
  226. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/rendering.py +0 -0
  227. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/tags.py +0 -0
  228. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/utils.py +0 -0
  229. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/__init__.py +0 -0
  230. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/__main__.py +0 -0
  231. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/cli.py +0 -0
  232. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/find.py +0 -0
  233. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/magic.py +0 -0
  234. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/prepare.py +0 -0
  235. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/styles.py +0 -0
  236. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/__init__.py +0 -0
  237. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/__main__.py +0 -0
  238. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/_dumping.py +0 -0
  239. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/building.py +0 -0
  240. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/dumping.py +0 -0
  241. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/markdown/__init__.py +0 -0
  242. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/markdown/incparse.py +0 -0
  243. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/markdown/tokens.py +0 -0
  244. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/mypy/__init__.py +0 -0
  245. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/mypy/debug.py +0 -0
  246. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/mypy/report.py +0 -0
  247. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/__init__.py +0 -0
  248. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/building.py +0 -0
  249. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/compression.py +0 -0
  250. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/data.py +0 -0
  251. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/datarefs.py +0 -0
  252. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/dataserver.py +0 -0
  253. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/loading.py +0 -0
  254. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/media.py +0 -0
  255. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/__init__.py +0 -0
  256. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/packing.py +0 -0
  257. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/repositories.py +0 -0
  258. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/unpacking.py +0 -0
  259. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/repositories.py +0 -0
  260. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/tars.py +0 -0
  261. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/__init__.py +0 -0
  262. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/marshal.py +0 -0
  263. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/names.py +0 -0
  264. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/requires.py +0 -0
  265. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/specifiers.py +0 -0
  266. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/versions.py +0 -0
  267. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/wheelfile.py +0 -0
  268. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pip.py +0 -0
  269. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/__init__.py +0 -0
  270. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/__main__.py +0 -0
  271. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/base.py +0 -0
  272. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/blanklines.py +0 -0
  273. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/caches.py +0 -0
  274. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/git.py +0 -0
  275. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/imports.py +0 -0
  276. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/lite.py +0 -0
  277. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/main.py +0 -0
  278. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/manifests.py +0 -0
  279. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/scripts.py +0 -0
  280. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/unicode.py +0 -0
  281. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/__init__.py +0 -0
  282. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/__init__.py +0 -0
  283. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/parents.py +0 -0
  284. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/toplevel.py +0 -0
  285. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/visitors.py +0 -0
  286. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/attrdocs.py +0 -0
  287. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/bracepy.py +0 -0
  288. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/classdot.py +0 -0
  289. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/LICENSE +0 -0
  290. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/__init__.py +0 -0
  291. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/attrdoc.py +0 -0
  292. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/common.py +0 -0
  293. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/epydoc.py +0 -0
  294. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/google.py +0 -0
  295. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/numpydoc.py +0 -0
  296. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/parser.py +0 -0
  297. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/rest.py +0 -0
  298. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/findimports.py +0 -0
  299. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/reprs.py +0 -0
  300. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/__init__.py +0 -0
  301. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/bumpversion.py +0 -0
  302. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/execstat.py +0 -0
  303. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/importtrace.py +0 -0
  304. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/srcheaders.py +0 -0
  305. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/__init__.py +0 -0
  306. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/all.py +0 -0
  307. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/tokenizert.py +0 -0
  308. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/utils.py +0 -0
  309. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/__init__.py +0 -0
  310. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/importscan.py +0 -0
  311. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/mkrelimp.py +0 -0
  312. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/__init__.py +0 -0
  313. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/__main__.py +0 -0
  314. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/configs.py +0 -0
  315. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/inject.py +0 -0
  316. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/pkg.py +0 -0
  317. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/reqs.py +0 -0
  318. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/resources/__init__.py +0 -0
  319. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/resources/docker-dev.sh +0 -0
  320. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/resources/python.sh +0 -0
  321. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/tools/__init__.py +0 -0
  322. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/tools/aboutdeps.py +0 -0
  323. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/venvs.py +0 -0
  324. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/rs/__init__.py +0 -0
  325. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/__init__.py +0 -0
  326. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/__init__.py +0 -0
  327. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/inject.py +0 -0
  328. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/marshal.py +0 -0
  329. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/slowcat.py +0 -0
  330. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/tmpexec.py +0 -0
  331. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tagstrings.py +0 -0
  332. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/__init__.py +0 -0
  333. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/cloc.py +0 -0
  334. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/diff.py +0 -0
  335. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/doc.py +0 -0
  336. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/docker.py +0 -0
  337. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/__init__.py +0 -0
  338. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/__main__.py +0 -0
  339. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/cli.py +0 -0
  340. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/cloning.py +0 -0
  341. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/consts.py +0 -0
  342. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/messages.py +0 -0
  343. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/__init__.py +0 -0
  344. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/__main__.py +0 -0
  345. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/cli.py +0 -0
  346. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/formats.py +0 -0
  347. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/io.py +0 -0
  348. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/parsing.py +0 -0
  349. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/processing.py +0 -0
  350. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/rendering.py +0 -0
  351. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/__init__.py +0 -0
  352. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/__main__.py +0 -0
  353. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/resources/__init__.py +0 -0
  354. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  355. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  356. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/linehisto.py +0 -0
  357. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/mkenv.py +0 -0
  358. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/notebook.py +0 -0
  359. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pawk/__init__.py +0 -0
  360. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pawk/__main__.py +0 -0
  361. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pawk/pawk.py +0 -0
  362. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pip.py +0 -0
  363. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/prof.py +0 -0
  364. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/qr.py +0 -0
  365. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/shadow.py +0 -0
  366. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/shell.py +0 -0
  367. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/sqlrepl.py +0 -0
  368. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/__init__.py +0 -0
  369. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/__init__.py +0 -0
  370. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/edit/__init__.py +0 -0
  371. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/edit/main.py +0 -0
  372. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/__init__.py +0 -0
  373. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/__main__.py +0 -0
  374. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/app.py +0 -0
  375. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/client.py +0 -0
  376. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/commands.py +0 -0
  377. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/main.py +0 -0
  378. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/markdown/__init__.py +0 -0
  379. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/markdown/__main__.py +0 -0
  380. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/markdown/cli.py +0 -0
  381. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/rich/console2.py +0 -0
  382. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/rich/markdown2.py +0 -0
  383. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  384. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  385. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/matching.py +0 -0
  386. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/paths.py +0 -0
  387. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/widget.py +0 -0
  388. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/drivers2.py +0 -0
  389. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/dependency_links.txt +0 -0
  390. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/entry_points.txt +0 -0
  391. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/top_level.txt +0 -0
  392. {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev490
3
+ Version: 0.0.0.dev493
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev490
17
+ Requires-Dist: omlish==0.0.0.dev493
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.12; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -27,7 +27,8 @@ Requires-Dist: mypy~=1.19; extra == "all"
27
27
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
28
28
  Requires-Dist: segno~=1.6; extra == "all"
29
29
  Requires-Dist: rich~=14.2; extra == "all"
30
- Requires-Dist: textual~=6.9; extra == "all"
30
+ Requires-Dist: textual~=6.11; extra == "all"
31
+ Requires-Dist: textual-dev~=1.8; extra == "all"
31
32
  Provides-Extra: black
32
33
  Requires-Dist: black~=25.12; extra == "black"
33
34
  Provides-Extra: c
@@ -46,7 +47,8 @@ Provides-Extra: qr
46
47
  Requires-Dist: segno~=1.6; extra == "qr"
47
48
  Provides-Extra: tui
48
49
  Requires-Dist: rich~=14.2; extra == "tui"
49
- Requires-Dist: textual~=6.9; extra == "tui"
50
+ Requires-Dist: textual~=6.11; extra == "tui"
51
+ Requires-Dist: textual-dev~=1.8; extra == "tui"
50
52
  Dynamic: license-file
51
53
 
52
54
  # Overview
@@ -0,0 +1,51 @@
1
+ # Overview
2
+
3
+ Development utilities and support code.
4
+
5
+ # Notable packages
6
+
7
+ - **[cli](https://github.com/wrmsr/omlish/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not
8
+ installed as an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli`
9
+ installable package so as to not pollute users' bin/ directories when depping this lib for its utility code.
10
+
11
+ - **[amalg](https://github.com/wrmsr/omlish/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
12
+
13
+ - **[pyproject](https://github.com/wrmsr/omlish/blob/master/omdev/pyproject)**
14
+ ([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
15
+ wrangles but does not replace tools like venv, pip, setuptools, and uv. does things like sets up venvs, generates
16
+ [`.pkg`](https://github.com/wrmsr/omlish/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
17
+ `__about__.py`'s), and packages them. this should grow to eat more and more of the Makefile. as it is amalgamated it
18
+ requires no installation and can just be dropped into other projects / repos.
19
+
20
+ - **[ci](https://github.com/wrmsr/omlish/blob/master/omdev/ci)**
21
+ ([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/ci.py)) - ci runner. given a
22
+ [`compose.yml`](https://github.com/wrmsr/omlish/blob/master/docker/compose.yml)
23
+ and requirements.txt files, takes care of building and caching of containers and venvs and execution of required ci
24
+ commands. detects and [natively uses](https://github.com/wrmsr/omlish/blob/master/omdev/ci/github/api/v2)
25
+ github-action's caching system. unifies ci execution between local dev and github runners.
26
+
27
+ - **[tools.json](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like
28
+ data, obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
29
+ [jmespath](https://github.com/wrmsr/omlish/blob/master/omlish/specs/jmespath) engine. supports
30
+ [true streaming](https://github.com/wrmsr/omlish/blob/master/omlish/formats/json/stream) json input and output, as
31
+ well as [various other](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json/formats.py) non-streaming input
32
+ formats.
33
+
34
+ - **[tools.git](https://github.com/wrmsr/omlish/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy
35
+ git operations, including the one that (poorly) writes all of these commit messages.
36
+
37
+ # Amalgamation
38
+
39
+ Amalgamation is the process of stitching together multiple python source files into a single self-contained python
40
+ script. ['lite'](https://github.com/wrmsr/omlish/blob/master/omlish#lite-code) code is written in a style conducive to
41
+ this.
42
+
43
+ # Local storage
44
+
45
+ Some of this code, when asked, will store things on the local filesystem. The only directories used (outside of ones
46
+ explicitly specified as command or function arguments) are managed in
47
+ [home.paths](https://github.com/wrmsr/omlish/blob/master/omdev/home/paths.py), and are the following:
48
+
49
+ - `$OMLISH_HOME`, default of `~/.omlish` - persistent things like config and state.
50
+ - `$OMLISH_CACHE`, default of `~/.cache/omlish` - used for things like the local ci cache and
51
+ [various other](https://github.com/search?q=repo%3Awrmsr%2Fomlish+%22dcache.%22&type=code) cached data.
@@ -44,7 +44,8 @@ class Project(ProjectBase):
44
44
 
45
45
  'tui': [
46
46
  'rich ~= 14.2',
47
- 'textual ~= 6.9',
47
+ 'textual ~= 6.11', # [syntax]
48
+ 'textual-dev ~= 1.8',
48
49
  ],
49
50
  }
50
51
 
@@ -22,7 +22,7 @@ from omlish.argparse.cli import argparse_cmd
22
22
  from omlish.lite.check import check
23
23
  from omlish.lite.inject import inj
24
24
  from omlish.logs.modules import get_module_logger
25
- from omlish.logs.standard import configure_standard_logging
25
+ from omlish.logs.std.standard import configure_standard_logging
26
26
 
27
27
  from .cache import DirectoryFileCache
28
28
  from .ci import Ci
@@ -1,5 +1,5 @@
1
1
  from omlish.argparse import all as ap
2
- from omlish.logs.standard import configure_standard_logging
2
+ from omlish.logs.std.standard import configure_standard_logging
3
3
 
4
4
  from .codegen import DataclassCodeGen
5
5
 
@@ -17,7 +17,7 @@ from omlish.lite.check import check
17
17
  from omlish.lite.inject import Injector
18
18
  from omlish.lite.inject import inj
19
19
  from omlish.lite.runtime import check_lite_runtime_version
20
- from omlish.logs.standard import configure_standard_logging
20
+ from omlish.logs.std.standard import configure_standard_logging
21
21
 
22
22
  from .inject import bind_interp
23
23
  from .resolvers import InterpResolver
@@ -5,7 +5,7 @@ import multiprocessing as mp
5
5
  import os.path
6
6
 
7
7
  from omlish.lite.json import json_dumps_pretty
8
- from omlish.logs.standard import configure_standard_logging
8
+ from omlish.logs.std.standard import configure_standard_logging
9
9
 
10
10
  from .building import ManifestBuilder
11
11
  from .building import check_package_manifests
@@ -15,7 +15,7 @@ import zipfile
15
15
  from omlish.lite.cached import cached_nullary
16
16
  from omlish.lite.check import check
17
17
  from omlish.logs.modules import get_module_logger
18
- from omlish.logs.standard import configure_standard_logging
18
+ from omlish.logs.std.standard import configure_standard_logging
19
19
 
20
20
  from ..git.revisions import get_git_revision
21
21
  from .wheelfile import WheelFile
@@ -1,5 +1,6 @@
1
1
  """
2
2
  TODO:
3
+ - output 2 tables lol
3
4
  - min_time_since_prev_version
4
5
  - without this the min age is moot lol, can still catch a bad release at the same time of day just n days later
5
6
  - * at least show 'suggested', 'suggested age', 'latest', 'latest age', 'number of releases between the 2' *
@@ -30,7 +31,7 @@ https://news.ycombinator.com/item?id=46005111
30
31
  # ~> https://github.com/pypa/pip/blob/a52069365063ea813fe3a3f8bac90397c9426d35/src/pip/_internal/commands/list.py (25.3)
31
32
  import dataclasses as dc
32
33
  import datetime
33
- import email.parser
34
+ import itertools
34
35
  import os.path
35
36
  import ssl
36
37
  import typing as ta
@@ -312,16 +313,42 @@ class Package:
312
313
 
313
314
  return datetime.datetime.fromisoformat(check.isinstance(ut, str)) # noqa
314
315
 
316
+ @cached.property
317
+ def version(self) -> Version:
318
+ return self.install.version
319
+
320
+ @cached.property
321
+ def filetype(self) -> ta.Literal['wheel', 'sdist']:
322
+ if self.install.link.is_wheel:
323
+ return 'wheel'
324
+ else:
325
+ return 'sdist'
326
+
327
+ unfiltered_candidates: ta.Sequence[Candidate] | None = None
315
328
  candidates: ta.Sequence[Candidate] | None = None
316
329
 
317
- @dc.dataclass(frozen=True, kw_only=True)
318
- class LatestInfo:
319
- candidate: 'Package.Candidate'
330
+ latest_candidate: Candidate | None = None
331
+ suggested_candidate: Candidate | None = None
332
+
333
+
334
+ def get_best_candidate(
335
+ pkg: Package,
336
+ finder: MyPackageFinder,
337
+ candidates: ta.Sequence[Package.Candidate],
338
+ ) -> Package.Candidate | None:
339
+ candidates_by_install: ta.Mapping[InstallationCandidate, Package.Candidate] = col.make_map((
340
+ (c.install, c)
341
+ for c in candidates
342
+ ), strict=True, identity=True)
320
343
 
321
- version: Version
322
- filetype: str
344
+ evaluator = finder.make_candidate_evaluator(
345
+ project_name=pkg.dist.canonical_name,
346
+ )
347
+ best_install = evaluator.sort_best_candidate([c.install for c in candidates])
348
+ if best_install is None:
349
+ return None
323
350
 
324
- latest_info: LatestInfo | None = None
351
+ return candidates_by_install[best_install]
325
352
 
326
353
 
327
354
  def set_package_finder_info(
@@ -332,17 +359,18 @@ def set_package_finder_info(
332
359
  max_uploaded_at: datetime.datetime | None = None,
333
360
  min_time_since_prev_version: datetime.timedelta | None = None,
334
361
  ) -> None:
335
- candidates = [
362
+ pkg.unfiltered_candidates = [
336
363
  Package.Candidate(
337
364
  c,
338
365
  finder.get_link_pypi_dict(c.link),
339
366
  )
340
367
  for c in finder.find_all_candidates(pkg.dist.canonical_name)
341
368
  ]
342
- pkg.candidates = candidates
343
369
 
344
370
  #
345
371
 
372
+ candidates = pkg.unfiltered_candidates
373
+
346
374
  if not pre:
347
375
  # Remove prereleases
348
376
  candidates = [
@@ -351,8 +379,16 @@ def set_package_finder_info(
351
379
  if not c.install.version.is_prerelease
352
380
  ]
353
381
 
382
+ pkg.candidates = candidates
383
+
354
384
  #
355
385
 
386
+ pkg.latest_candidate = get_best_candidate(pkg, finder, pkg.candidates)
387
+
388
+ #
389
+
390
+ suggested_candidates = candidates
391
+
356
392
  if min_time_since_prev_version is not None:
357
393
  # candidates_by_version = col.multi_map((c.install.version, c) for c in candidates)
358
394
  # uploaded_at_by_version = {
@@ -361,46 +397,17 @@ def set_package_finder_info(
361
397
  # }
362
398
  raise NotImplementedError
363
399
 
364
- #
365
-
366
400
  if max_uploaded_at is not None:
367
- candidates = [
401
+ suggested_candidates = [
368
402
  c
369
- for c in candidates
403
+ for c in suggested_candidates
370
404
  if not (
371
405
  (c_dt := c.upload_time()) is not None and
372
406
  c_dt > max_uploaded_at
373
407
  )
374
408
  ]
375
409
 
376
- #
377
-
378
- candidates_by_install: ta.Mapping[InstallationCandidate, Package.Candidate] = col.make_map((
379
- (c.install, c)
380
- for c in candidates
381
- ), strict=True, identity=True)
382
-
383
- evaluator = finder.make_candidate_evaluator(
384
- project_name=pkg.dist.canonical_name,
385
- )
386
- best_install = evaluator.sort_best_candidate([c.install for c in candidates])
387
- if best_install is None:
388
- return
389
- best_candidate = candidates_by_install[best_install]
390
-
391
- #
392
-
393
- remote_version = best_candidate.install.version
394
- if best_candidate.install.link.is_wheel:
395
- typ = 'wheel'
396
- else:
397
- typ = 'sdist'
398
-
399
- pkg.latest_info = Package.LatestInfo(
400
- candidate=best_candidate,
401
- version=remote_version,
402
- filetype=typ,
403
- )
410
+ pkg.suggested_candidate = get_best_candidate(pkg, finder, suggested_candidates)
404
411
 
405
412
 
406
413
  ##
@@ -474,20 +481,20 @@ def format_for_json(
474
481
  infos: list[dict[str, ta.Any]] = []
475
482
 
476
483
  for pkg in pkgs:
477
- latest_info = check.not_none(pkg.latest_info)
484
+ latest = check.not_none(pkg.latest_candidate)
485
+ suggested = check.not_none(pkg.suggested_candidate)
478
486
 
479
487
  info = {
480
488
  'name': pkg.dist.raw_name,
481
489
  'version': pkg.version(),
482
490
  'location': pkg.dist.location or '',
483
491
  'installer': pkg.dist.installer,
484
- 'latest_version': str(latest_info.version),
485
- 'latest_filetype': latest_info.filetype,
492
+ 'latest_version': str(latest.install.version),
493
+ 'latest_upload_time': lut.isoformat() if (lut := latest.upload_time()) is not None else None,
494
+ 'suggested_version': str(suggested.install.version),
495
+ 'suggested_upload_time': sut.isoformat() if (sut := suggested.upload_time()) is not None else None,
486
496
  }
487
497
 
488
- if (l_ut := latest_info.candidate.upload_time()) is not None:
489
- info['latest_age'] = human_round_td(now_utc() - l_ut)
490
-
491
498
  if editable_project_location := pkg.dist.editable_project_location:
492
499
  info['editable_project_location'] = editable_project_location
493
500
 
@@ -502,46 +509,87 @@ def format_for_json(
502
509
  def format_for_columns(pkgs: ta.Sequence[Package]) -> tuple[list[list[str]], list[str]]:
503
510
  """Convert the package data into something usable by output_package_listing_columns."""
504
511
 
505
- header = ['Package', 'Version', 'Latest', 'Age', 'Type']
512
+ header = [
513
+ 'Package',
514
+ 'Current',
506
515
 
507
- def wheel_build_tag(dist: BaseDistribution) -> str | None:
508
- try:
509
- wheel_file = dist.read_text('WHEEL')
510
- except FileNotFoundError:
511
- return None
512
- return email.parser.Parser().parsestr(wheel_file).get('Build')
513
-
514
- build_tags = [wheel_build_tag(p.dist) for p in pkgs]
515
- has_build_tags = any(build_tags)
516
- if has_build_tags:
517
- header.append('Build')
518
-
519
- has_editables = any(x.dist.editable for x in pkgs)
520
- if has_editables:
521
- header.append('Editable project location')
522
-
523
- data = []
524
- for i, proj in enumerate(pkgs):
525
- # if we're working on the 'outdated' list, separate out the latest_version and type
526
- row = [proj.dist.raw_name, proj.dist.raw_version]
527
-
528
- latest_info = check.not_none(proj.latest_info)
529
- row.append(str(latest_info.version))
530
- if (l_ut := latest_info.candidate.upload_time()) is not None:
531
- row.append(human_round_td(now_utc() - l_ut))
532
- else:
533
- row.append('')
534
- row.append(latest_info.filetype)
516
+ 'Suggested',
517
+ 'Age',
535
518
 
536
- if has_build_tags:
537
- row.append(build_tags[i] or '')
519
+ 'Latest',
520
+ 'Age',
521
+ ]
538
522
 
539
- if has_editables:
540
- row.append(proj.dist.editable_project_location or '')
523
+ # def wheel_build_tag(dist: BaseDistribution) -> str | None:
524
+ # try:
525
+ # wheel_file = dist.read_text('WHEEL')
526
+ # except FileNotFoundError:
527
+ # return None
528
+ # return email.parser.Parser().parsestr(wheel_file).get('Build')
541
529
 
542
- data.append(row)
530
+ # build_tags = [wheel_build_tag(p.dist) for p in pkgs]
531
+ # has_build_tags = any(build_tags)
532
+ # if has_build_tags:
533
+ # header.append('Build')
543
534
 
544
- return data, header
535
+ # has_editables = any(x.dist.editable for x in pkgs)
536
+ # if has_editables:
537
+ # header.append('Editable project location')
538
+
539
+ rows = []
540
+ for pkg in pkgs:
541
+ sc = check.not_none(pkg.suggested_candidate)
542
+ lc = check.not_none(pkg.latest_candidate)
543
+
544
+ row = [
545
+ pkg.dist.raw_name,
546
+ pkg.dist.raw_version,
547
+ ]
548
+
549
+ def add_c(c):
550
+ if c is None:
551
+ row.extend(['', ''])
552
+ return
553
+
554
+ row.append(str(c.version))
555
+
556
+ if (l_ut := c.upload_time()) is not None:
557
+ row.append(human_round_td(now_utc() - l_ut))
558
+ else:
559
+ row.append('')
560
+
561
+ add_c(sc if sc.version != pkg.dist.version else None)
562
+ add_c(lc if sc is not lc else None)
563
+
564
+ # if has_build_tags:
565
+ # row.append(build_tags[i] or '')
566
+
567
+ # if has_editables:
568
+ # row.append(pkg.dist.editable_project_location or '')
569
+
570
+ rows.append(row)
571
+
572
+ return rows, header
573
+
574
+
575
+ def _tabulate(
576
+ rows: ta.Iterable[ta.Iterable[ta.Any]],
577
+ *,
578
+ sep: str = ' ',
579
+ ) -> tuple[list[str], list[int]]:
580
+ """
581
+ Return a list of formatted rows and a list of column sizes.
582
+
583
+ For example::
584
+
585
+ >>> tabulate([['foobar', 2000], [0xdeadbeef]])
586
+ (['foobar 2000', '3735928559'], [10, 4])
587
+ """
588
+
589
+ rows = [tuple(map(str, row)) for row in rows]
590
+ sizes = [max(map(len, col)) for col in itertools.zip_longest(*rows, fillvalue='')]
591
+ table = [sep.join(map(str.ljust, row, sizes)).rstrip() for row in rows]
592
+ return table, sizes
545
593
 
546
594
 
547
595
  def render_package_listing_columns(data: list[list[str]], header: list[str]) -> list[str]:
@@ -549,12 +597,11 @@ def render_package_listing_columns(data: list[list[str]], header: list[str]) ->
549
597
  if len(data) > 0:
550
598
  data.insert(0, header)
551
599
 
552
- from pip._internal.utils.misc import tabulate # noqa
553
- pkg_strings, sizes = tabulate(data)
600
+ pkg_strings, sizes = _tabulate(data, sep=' ')
554
601
 
555
602
  # Create and add a separator.
556
603
  if len(data) > 0:
557
- pkg_strings.insert(1, ' '.join('-' * x for x in sizes))
604
+ pkg_strings.insert(1, ' '.join('-' * x for x in sizes))
558
605
 
559
606
  return pkg_strings
560
607
 
@@ -612,21 +659,27 @@ def _main() -> None:
612
659
 
613
660
  #
614
661
 
615
- pkgs = [
662
+ outdated_pkgs = [
616
663
  pkg
617
664
  for pkg in pkgs
618
- if (li := pkg.latest_info) is not None
665
+ if (li := pkg.latest_candidate) is not None
619
666
  and li.version > pkg.dist.version
620
667
  ]
621
668
 
622
- pkgs.sort(key=lambda x: x.dist.raw_name)
669
+ outdated_pkgs.sort(key=lambda x: x.dist.raw_name)
623
670
 
624
671
  #
625
672
 
626
673
  if args.json:
627
- print(json.dumps_pretty(format_for_json(pkgs)))
674
+ print(json.dumps_pretty(format_for_json(outdated_pkgs)))
675
+
628
676
  else:
629
- print('\n'.join(render_package_listing_columns(*format_for_columns(pkgs))))
677
+ # stable_pkgs, unstable_pkgs = col.partition(
678
+ # outdated_pkgs,
679
+ # lambda pkg: pkg.latest_candidate is pkg.suggested_candidate,
680
+ # )
681
+
682
+ print('\n'.join(render_package_listing_columns(*format_for_columns(outdated_pkgs))))
630
683
 
631
684
 
632
685
  if __name__ == '__main__':
@@ -40,7 +40,7 @@ from omlish.formats.toml.parser import toml_loads
40
40
  from omlish.lite.cached import cached_nullary
41
41
  from omlish.lite.check import check
42
42
  from omlish.lite.runtime import check_lite_runtime_version
43
- from omlish.logs.standard import configure_standard_logging
43
+ from omlish.logs.std.standard import configure_standard_logging
44
44
 
45
45
  from .configs import PyprojectConfig
46
46
  from .configs import PyprojectConfigPreparer