omdev 0.0.0.dev537__tar.gz → 0.0.0.dev539__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 (440) hide show
  1. {omdev-0.0.0.dev537/omdev.egg-info → omdev-0.0.0.dev539}/PKG-INFO +4 -4
  2. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/__about__.py +1 -1
  3. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/cli.py +3 -0
  4. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/config.toml +1 -1
  5. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/ci.py +3 -1
  6. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/io/pipelines.py +95 -25
  7. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/__init__.py +17 -0
  8. omdev-0.0.0.dev539/omdev/tui/textual/render2.py +39 -0
  9. omdev-0.0.0.dev539/omdev/tui/textual/widgets2.py +24 -0
  10. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539/omdev.egg-info}/PKG-INFO +4 -4
  11. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev.egg-info/SOURCES.txt +2 -0
  12. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev.egg-info/requires.txt +3 -3
  13. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/pyproject.toml +4 -4
  14. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/LICENSE +0 -0
  15. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/MANIFEST.in +0 -0
  16. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/README.md +0 -0
  17. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/.omlish-manifests.json +0 -0
  18. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/README.md +0 -0
  19. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/__init__.py +0 -0
  20. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/__init__.py +0 -0
  21. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/__main__.py +0 -0
  22. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/cli/__init__.py +0 -0
  23. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/cli/main.py +0 -0
  24. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/__init__.py +0 -0
  25. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/gen.py +0 -0
  26. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/imports.py +0 -0
  27. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/manifests.py +0 -0
  28. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/resources.py +0 -0
  29. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/srcfiles.py +0 -0
  30. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/strip.py +0 -0
  31. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/types.py +0 -0
  32. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/gen/typing.py +0 -0
  33. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/info.py +0 -0
  34. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/amalg/sources.py +0 -0
  35. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/__init__.py +0 -0
  36. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/__init__.py +0 -0
  37. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/cache.py +0 -0
  38. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/contexts.py +0 -0
  39. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/currents.py +0 -0
  40. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/fns.py +0 -0
  41. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/resolvers.py +0 -0
  42. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/storage.py +0 -0
  43. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/compute/types.py +0 -0
  44. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/__init__.py +0 -0
  45. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/actions.py +0 -0
  46. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/cache.py +0 -0
  47. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/consts.py +0 -0
  48. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/defaults.py +0 -0
  49. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/manifests.py +0 -0
  50. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cache/data/specs.py +0 -0
  51. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/__init__.py +0 -0
  52. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/darwin/__init__.py +0 -0
  53. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/darwin/aps.py +0 -0
  54. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/darwin/ax.py +0 -0
  55. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/darwin/cf.py +0 -0
  56. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/darwin/cg.py +0 -0
  57. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/linux/__init__.py +0 -0
  58. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/capi/linux/x11.py +0 -0
  59. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cc/__init__.py +0 -0
  60. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cc/__main__.py +0 -0
  61. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cc/cdeps.py +0 -0
  62. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cc/cdeps.toml +0 -0
  63. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cc/cli.py +0 -0
  64. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cc/srclangs.py +0 -0
  65. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/__init__.py +0 -0
  66. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_boilerplate.cc +0 -0
  67. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/LICENSE +0 -0
  68. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/__init__.py +0 -0
  69. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/build_ext.py +0 -0
  70. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  71. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  72. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/compilers/options.py +0 -0
  73. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  74. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/dir_util.py +0 -0
  75. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/errors.py +0 -0
  76. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/extension.py +0 -0
  77. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/file_util.py +0 -0
  78. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/modified.py +0 -0
  79. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/spawn.py +0 -0
  80. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/sysconfig.py +0 -0
  81. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/util.py +0 -0
  82. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/_distutils/version.py +0 -0
  83. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/build.py +0 -0
  84. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/cmake.py +0 -0
  85. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/importhook.py +0 -0
  86. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/magic.py +0 -0
  87. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cexts/scan.py +0 -0
  88. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/__init__.py +0 -0
  89. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/__main__.py +0 -0
  90. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/cache.py +0 -0
  91. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/ci.py +0 -0
  92. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/compose.py +0 -0
  93. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/consts.py +0 -0
  94. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/__init__.py +0 -0
  95. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/buildcaching.py +0 -0
  96. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/cache.py +0 -0
  97. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  98. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/cacheserved/cache.py +0 -0
  99. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  100. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/cmds.py +0 -0
  101. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/dataserver.py +0 -0
  102. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/imagepulling.py +0 -0
  103. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/inject.py +0 -0
  104. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/packing.py +0 -0
  105. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/repositories.py +0 -0
  106. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/docker/utils.py +0 -0
  107. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/__init__.py +0 -0
  108. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/__init__.py +0 -0
  109. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/clients.py +0 -0
  110. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v1/__init__.py +0 -0
  111. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v1/api.py +0 -0
  112. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v1/client.py +0 -0
  113. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v2/__init__.py +0 -0
  114. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v2/api.py +0 -0
  115. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v2/azure.py +0 -0
  116. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/api/v2/client.py +0 -0
  117. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/bootstrap.py +0 -0
  118. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/cache.py +0 -0
  119. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/cli.py +0 -0
  120. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/env.py +0 -0
  121. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/github/inject.py +0 -0
  122. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/inject.py +0 -0
  123. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/requirements.py +0 -0
  124. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/shell.py +0 -0
  125. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/ci/utils.py +0 -0
  126. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/__init__.py +0 -0
  127. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/__main__.py +0 -0
  128. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/_pathhack.py +0 -0
  129. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/clicli.py +0 -0
  130. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/install.py +0 -0
  131. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/main.py +0 -0
  132. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/managers.py +0 -0
  133. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cli/types.py +0 -0
  134. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/__init__.py +0 -0
  135. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/capi/__init__.py +0 -0
  136. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/capi/darwin_cf.py +0 -0
  137. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/capi/linux_x11.py +0 -0
  138. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/commands.py +0 -0
  139. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/platform.py +0 -0
  140. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/clipboard/types.py +0 -0
  141. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cmake.py +0 -0
  142. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cmdlog/__init__.py +0 -0
  143. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cmdlog/__main__.py +0 -0
  144. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cmdlog/_cmdlog.py +0 -0
  145. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cmdlog/cli.py +0 -0
  146. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/cmdlog/cmdlog.py +0 -0
  147. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/__init__.py +0 -0
  148. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/__main__.py +0 -0
  149. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/_dumping.py +0 -0
  150. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/_template.py +0 -0
  151. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/cli.py +0 -0
  152. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/codegen.py +0 -0
  153. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataclasses/dumping.py +0 -0
  154. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataserver/__init__.py +0 -0
  155. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataserver/handlers.py +0 -0
  156. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataserver/http.py +0 -0
  157. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataserver/routes.py +0 -0
  158. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataserver/server.py +0 -0
  159. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dataserver/targets.py +0 -0
  160. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/__init__.py +0 -0
  161. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/__main__.py +0 -0
  162. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/cli.py +0 -0
  163. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/content.py +0 -0
  164. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/gen.py +0 -0
  165. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/helpers.py +0 -0
  166. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/ops.py +0 -0
  167. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/rendering.py +0 -0
  168. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/.python-versions.json +0 -0
  169. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  170. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  171. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  172. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  173. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  174. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  175. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  176. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  177. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  178. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  179. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  180. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  181. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  182. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  183. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  184. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  185. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  186. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  187. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/dockerdev/resources/xu +0 -0
  188. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/git/__init__.py +0 -0
  189. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/git/magic.py +0 -0
  190. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/git/revisions.py +0 -0
  191. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/git/shallow.py +0 -0
  192. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/git/status.py +0 -0
  193. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/home/__init__.py +0 -0
  194. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/home/paths.py +0 -0
  195. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/home/secrets.py +0 -0
  196. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/home/shadow.py +0 -0
  197. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/imgur.py +0 -0
  198. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/intellij/__init__.py +0 -0
  199. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/intellij/cli.py +0 -0
  200. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/intellij/ides.py +0 -0
  201. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/intellij/open.py +0 -0
  202. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/__init__.py +0 -0
  203. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/__main__.py +0 -0
  204. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/cli.py +0 -0
  205. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/default.py +0 -0
  206. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/inject.py +0 -0
  207. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/inspect.py +0 -0
  208. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/providers/__init__.py +0 -0
  209. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/providers/base.py +0 -0
  210. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/providers/inject.py +0 -0
  211. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/providers/running.py +0 -0
  212. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/providers/standalone.py +0 -0
  213. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/providers/system.py +0 -0
  214. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/pyenv/__init__.py +0 -0
  215. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/pyenv/inject.py +0 -0
  216. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/pyenv/install.py +0 -0
  217. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/pyenv/provider.py +0 -0
  218. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/pyenv/pyenv.py +0 -0
  219. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/resolvers.py +0 -0
  220. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/types.py +0 -0
  221. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/uv/__init__.py +0 -0
  222. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/uv/inject.py +0 -0
  223. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/uv/provider.py +0 -0
  224. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/uv/uv.py +0 -0
  225. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/interp/venvs.py +0 -0
  226. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/__init__.py +0 -0
  227. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/messages/__init__.py +0 -0
  228. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/messages/base.py +0 -0
  229. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/messages/formats.py +0 -0
  230. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/messages/messages.py +0 -0
  231. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/messages/parsing.py +0 -0
  232. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/numerics/__init__.py +0 -0
  233. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/numerics/formats.py +0 -0
  234. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/numerics/numerics.py +0 -0
  235. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/numerics/types.py +0 -0
  236. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/LICENSE +0 -0
  237. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/__init__.py +0 -0
  238. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/consts.py +0 -0
  239. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/errors.py +0 -0
  240. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/message.py +0 -0
  241. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/nuh.py +0 -0
  242. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/parsing.py +0 -0
  243. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/rendering.py +0 -0
  244. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/tags.py +0 -0
  245. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/irc/protocol/utils.py +0 -0
  246. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/java/__init__.py +0 -0
  247. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/java/__main__.py +0 -0
  248. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/java/cli.py +0 -0
  249. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/java/pomgen.py +0 -0
  250. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/java/xml.py +0 -0
  251. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/__init__.py +0 -0
  252. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/__main__.py +0 -0
  253. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/cli.py +0 -0
  254. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/find.py +0 -0
  255. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/magic.py +0 -0
  256. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/prepare.py +0 -0
  257. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/magic/styles.py +0 -0
  258. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/manifests/__init__.py +0 -0
  259. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/manifests/__main__.py +0 -0
  260. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/manifests/_dumping.py +0 -0
  261. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/manifests/building.py +0 -0
  262. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/manifests/dumping.py +0 -0
  263. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/manifests/main.py +0 -0
  264. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/markdown/__init__.py +0 -0
  265. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/markdown/incparse.py +0 -0
  266. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/markdown/tokens.py +0 -0
  267. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/mypy/__init__.py +0 -0
  268. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/mypy/debug.py +0 -0
  269. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/mypy/report.py +0 -0
  270. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/__init__.py +0 -0
  271. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/building.py +0 -0
  272. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/compression.py +0 -0
  273. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/data.py +0 -0
  274. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/datarefs.py +0 -0
  275. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/dataserver.py +0 -0
  276. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/loading.py +0 -0
  277. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/media.py +0 -0
  278. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/pack/__init__.py +0 -0
  279. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/pack/packing.py +0 -0
  280. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/pack/repositories.py +0 -0
  281. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/pack/unpacking.py +0 -0
  282. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/repositories.py +0 -0
  283. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/oci/tars.py +0 -0
  284. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/__init__.py +0 -0
  285. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/marshal.py +0 -0
  286. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/names.py +0 -0
  287. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/requires.py +0 -0
  288. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/revisions.py +0 -0
  289. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/specifiers.py +0 -0
  290. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/versions.py +0 -0
  291. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/packaging/wheelfile.py +0 -0
  292. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pip.py +0 -0
  293. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/__init__.py +0 -0
  294. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/__main__.py +0 -0
  295. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/base.py +0 -0
  296. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/blanklines.py +0 -0
  297. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/caches.py +0 -0
  298. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/git.py +0 -0
  299. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/imports.py +0 -0
  300. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/lite.py +0 -0
  301. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/main.py +0 -0
  302. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/manifests.py +0 -0
  303. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/scripts.py +0 -0
  304. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/precheck/unicode.py +0 -0
  305. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/__init__.py +0 -0
  306. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/asts/__init__.py +0 -0
  307. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/asts/parents.py +0 -0
  308. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/asts/toplevel.py +0 -0
  309. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/asts/visitors.py +0 -0
  310. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/attrdocs.py +0 -0
  311. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/bracepy.py +0 -0
  312. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/classdot.py +0 -0
  313. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/LICENSE +0 -0
  314. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/__init__.py +0 -0
  315. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/attrdoc.py +0 -0
  316. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/common.py +0 -0
  317. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/epydoc.py +0 -0
  318. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/google.py +0 -0
  319. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/numpydoc.py +0 -0
  320. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/parser.py +0 -0
  321. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/docstrings/rest.py +0 -0
  322. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/findimports.py +0 -0
  323. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/reprs.py +0 -0
  324. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/scripts/__init__.py +0 -0
  325. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/scripts/bumpversion.py +0 -0
  326. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/scripts/execstat.py +0 -0
  327. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/scripts/importtrace.py +0 -0
  328. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/srcheaders.py +0 -0
  329. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tokens/__init__.py +0 -0
  330. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tokens/all.py +0 -0
  331. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tokens/tokenizert.py +0 -0
  332. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tokens/utils.py +0 -0
  333. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tools/__init__.py +0 -0
  334. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tools/importscan.py +0 -0
  335. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tools/mkrelimp.py +0 -0
  336. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/py/tools/pipdepup.py +0 -0
  337. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/__init__.py +0 -0
  338. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/__main__.py +0 -0
  339. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/cli.py +0 -0
  340. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/configs.py +0 -0
  341. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/inject.py +0 -0
  342. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/pkg.py +0 -0
  343. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/reqs.py +0 -0
  344. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/resources/dockerdev.sh +0 -0
  345. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/resources/python.sh +0 -0
  346. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/tools/__init__.py +0 -0
  347. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/tools/aboutdeps.py +0 -0
  348. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/tools/buildrs.py +0 -0
  349. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/tools/pyversions.py +0 -0
  350. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/venvs.py +0 -0
  351. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/pyproject/versions.py +0 -0
  352. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/rs/__init__.py +0 -0
  353. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/__init__.py +0 -0
  354. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/interp.py +0 -0
  355. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/__init__.py +0 -0
  356. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/formats/__init__.py +0 -0
  357. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/formats/goyaml.py +0 -0
  358. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/inject.py +0 -0
  359. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/io/__init__.py +0 -0
  360. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/io/streams.py +0 -0
  361. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/logs.py +0 -0
  362. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/lib/marshal.py +0 -0
  363. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/pyproject.py +0 -0
  364. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/slowcat.py +0 -0
  365. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/scripts/tmpexec.py +0 -0
  366. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tagstrings.py +0 -0
  367. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/__init__.py +0 -0
  368. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/cloc.py +0 -0
  369. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/diff.py +0 -0
  370. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/doc.py +0 -0
  371. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/docker.py +0 -0
  372. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/git/__init__.py +0 -0
  373. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/git/__main__.py +0 -0
  374. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/git/cli.py +0 -0
  375. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/git/cloning.py +0 -0
  376. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/git/consts.py +0 -0
  377. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/git/messages.py +0 -0
  378. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/__init__.py +0 -0
  379. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/__main__.py +0 -0
  380. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/cli.py +0 -0
  381. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/formats.py +0 -0
  382. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/io.py +0 -0
  383. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/parsing.py +0 -0
  384. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/processing.py +0 -0
  385. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/json/rendering.py +0 -0
  386. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/jsonview/__init__.py +0 -0
  387. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/jsonview/__main__.py +0 -0
  388. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/jsonview/cli.py +0 -0
  389. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  390. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  391. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  392. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/linehisto.py +0 -0
  393. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/mkenv.py +0 -0
  394. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/notebook.py +0 -0
  395. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/pawk/README.md +0 -0
  396. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/pawk/__init__.py +0 -0
  397. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/pawk/__main__.py +0 -0
  398. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/pawk/pawk.py +0 -0
  399. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/pip.py +0 -0
  400. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/prof.py +0 -0
  401. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/qr.py +0 -0
  402. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/shadow.py +0 -0
  403. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/shell.py +0 -0
  404. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tools/sqlrepl.py +0 -0
  405. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/__init__.py +0 -0
  406. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/__init__.py +0 -0
  407. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/edit/__init__.py +0 -0
  408. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/edit/main.py +0 -0
  409. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/irc/__init__.py +0 -0
  410. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/irc/__main__.py +0 -0
  411. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/irc/app.py +0 -0
  412. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/irc/client.py +0 -0
  413. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/irc/commands.py +0 -0
  414. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/irc/main.py +0 -0
  415. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/markdown/__init__.py +0 -0
  416. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/markdown/__main__.py +0 -0
  417. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/apps/markdown/cli.py +0 -0
  418. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/rich/__init__.py +0 -0
  419. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/rich/console2.py +0 -0
  420. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/rich/markdown2.py +0 -0
  421. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/app2.py +0 -0
  422. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  423. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  424. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/autocomplete/matching.py +0 -0
  425. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/autocomplete/paths.py +0 -0
  426. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/autocomplete/widget.py +0 -0
  427. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/binding2.py +0 -0
  428. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/clipboard.py +0 -0
  429. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/debug/__init__.py +0 -0
  430. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/debug/dominfo.py +0 -0
  431. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/debug/screen.py +0 -0
  432. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/devtools.py +0 -0
  433. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/drivers2.py +0 -0
  434. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/logging2.py +0 -0
  435. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/screen2.py +0 -0
  436. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev/tui/textual/types.py +0 -0
  437. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev.egg-info/dependency_links.txt +0 -0
  438. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev.egg-info/entry_points.txt +0 -0
  439. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/omdev.egg-info/top_level.txt +0 -0
  440. {omdev-0.0.0.dev537 → omdev-0.0.0.dev539}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev537
3
+ Version: 0.0.0.dev539
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.dev537
17
+ Requires-Dist: omlish==0.0.0.dev539
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.3; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -27,7 +27,7 @@ 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.3; extra == "all"
30
- Requires-Dist: textual~=8.0; extra == "all"
30
+ Requires-Dist: textual~=8.1; extra == "all"
31
31
  Requires-Dist: textual-dev~=1.8; extra == "all"
32
32
  Requires-Dist: textual-speedups~=0.2; extra == "all"
33
33
  Provides-Extra: black
@@ -48,7 +48,7 @@ Provides-Extra: qr
48
48
  Requires-Dist: segno~=1.6; extra == "qr"
49
49
  Provides-Extra: tui
50
50
  Requires-Dist: rich~=14.3; extra == "tui"
51
- Requires-Dist: textual~=8.0; extra == "tui"
51
+ Requires-Dist: textual~=8.1; extra == "tui"
52
52
  Requires-Dist: textual-dev~=1.8; extra == "tui"
53
53
  Requires-Dist: textual-speedups~=0.2; extra == "tui"
54
54
  Dynamic: license-file
@@ -44,7 +44,7 @@ class Project(ProjectBase):
44
44
 
45
45
  'tui': [
46
46
  'rich ~= 14.3',
47
- 'textual ~= 8.0', # [syntax]
47
+ 'textual ~= 8.1', # [syntax]
48
48
  'textual-dev ~= 1.8',
49
49
  'textual-speedups ~= 0.2',
50
50
  ],
@@ -14,6 +14,7 @@ import argparse
14
14
  import asyncio
15
15
  import itertools
16
16
  import os.path
17
+ import sys
17
18
  import typing as ta
18
19
 
19
20
  from omlish.argparse.cli import ArgparseCli
@@ -110,6 +111,8 @@ class CiCli(ArgparseCli):
110
111
  argparse_arg('cmd', nargs=argparse.REMAINDER),
111
112
  )
112
113
  async def run(self) -> None:
114
+ log.info('Python interpreter: %r, version %r', sys.executable, ' '.join(sys.version.split()))
115
+
113
116
  project_dir = self.args.project_dir
114
117
  docker_file = self.args.docker_file
115
118
  compose_file = self.args.compose_file
@@ -11,7 +11,7 @@ jdks = [
11
11
  'zulu25-ca-jdk',
12
12
  ]
13
13
 
14
- go_version = '1.26.0'
14
+ go_version = '1.26.1'
15
15
 
16
16
  zig_version = '0.15.2'
17
17
 
@@ -208,7 +208,7 @@ def __omlish_amalg__(): # noqa
208
208
  dict(path='github/cli.py', sha1='6d14b0eb4ca5f606ad2821b63b9707ce57f50406'),
209
209
  dict(path='github/inject.py', sha1='99c0dd7c55767e7c49f70b7edac25da67f718b2e'),
210
210
  dict(path='inject.py', sha1='e86b16d79a113a4f387e68ed0db1d067bcada93a'),
211
- dict(path='cli.py', sha1='92948cf3ec76fd9ceb25762aadbf497354adce6d'),
211
+ dict(path='cli.py', sha1='852b4e8975d7f6744ec1790f83fe8a321853d760'),
212
212
  ],
213
213
  )
214
214
 
@@ -26698,6 +26698,8 @@ class CiCli(ArgparseCli):
26698
26698
  argparse_arg('cmd', nargs=argparse.REMAINDER),
26699
26699
  )
26700
26700
  async def run(self) -> None:
26701
+ log.info('Python interpreter: %r, version %r', sys.executable, ' '.join(sys.version.split()))
26702
+
26701
26703
  project_dir = self.args.project_dir
26702
26704
  docker_file = self.args.docker_file
26703
26705
  compose_file = self.args.compose_file
@@ -43,17 +43,18 @@ def __omlish_amalg__(): # noqa
43
43
  dict(path='../../lite/namespaces.py', sha1='27b12b6592403c010fb8b2a0af7c24238490d3a1'),
44
44
  dict(path='../../logs/levels.py', sha1='91405563d082a5eba874da82aac89d83ce7b6152'),
45
45
  dict(path='../../logs/warnings.py', sha1='c4eb694b24773351107fcc058f3620f1dbfb6799'),
46
- dict(path='core.py', sha1='ddac59c8d08b2602c2f1a9d1e4fde19d9f390c1d'),
46
+ dict(path='core.py', sha1='d9c24e9b85536086a93fc6f00ae02cdba2824e55'),
47
47
  dict(path='../streams/types.py', sha1='8959d244de95eaf9f118cc3fd2d713d85e55ff36'),
48
48
  dict(path='../../logs/infos.py', sha1='4dd104bd468a8c438601dd0bbda619b47d2f1620'),
49
49
  dict(path='../../logs/metrics/base.py', sha1='95120732c745ceec5333f81553761ab6ff4bb3fb'),
50
50
  dict(path='../../logs/protocols.py', sha1='05ca4d1d7feb50c4e3b9f22ee371aa7bf4b3dbd1'),
51
51
  dict(path='asyncs.py', sha1='a78bd64bada44716809c19e95d6ca4a96f3a28d7'),
52
52
  dict(path='bytes/buffering.py', sha1='c19bddb05ef9449aa1a1c228901cab0d2d927946'),
53
- dict(path='flow/types.py', sha1='713bd98b7ecb094655439d8517c43147a25ff9a1'),
53
+ dict(path='drivers/metadata.py', sha1='44e49cb87136933ffe867087897eab5004034a93'),
54
+ dict(path='flow/types.py', sha1='f6d06c7d6ca41a88930811507c966eeb073c15b3'),
54
55
  dict(path='handlers/fns.py', sha1='6dd1901ebdbdb31caeffab06d239f1c41e3f2726'),
55
56
  dict(path='handlers/queues.py', sha1='f49d19c5dd7de77299bedbfb3a77a36479fd1edf'),
56
- dict(path='sched/types.py', sha1='0ef85c6cce69bdf8a6cd9c85eb806d52808f7e0d'),
57
+ dict(path='sched/types.py', sha1='854b3f0f8ed5da2132a516f787b9019f5cb4eef5'),
57
58
  dict(path='../streams/base.py', sha1='bdeaff419684dec34fd0dc59808a9686131992bc'),
58
59
  dict(path='../streams/framing.py', sha1='dc2d7f638b042619fd3d95789c71532a29fd5fe4'),
59
60
  dict(path='../streams/utils.py', sha1='eb08fa1d56284b078f973eea6796747b9bbdffdf'),
@@ -70,7 +71,7 @@ def __omlish_amalg__(): # noqa
70
71
  dict(path='../../logs/std/loggers.py', sha1='dbdfc66188e6accb75d03454e43221d3fba0f011'),
71
72
  dict(path='bytes/decoders.py', sha1='6f6d8bc1adc6a5277543389814bc26ef63e34561'),
72
73
  dict(path='../../logs/modules.py', sha1='dd7d5f8e63fe8829dfb49460f3929ab64b68ee14'),
73
- dict(path='drivers/asyncio.py', sha1='f48bd74d34b70b1f9da20ac67e0cc92bc0d7f19c'),
74
+ dict(path='drivers/asyncio.py', sha1='59e80c4ac127e727676f17e956783f3aa39b4088'),
74
75
  dict(path='_amalg.py', sha1='14b67747b1e3b3c1483050a7948a29888d732ed9'),
75
76
  ],
76
77
  )
@@ -1605,14 +1606,14 @@ class IoPipelineHandlerContext:
1605
1606
  _pipeline: 'IoPipeline',
1606
1607
  _handler: 'IoPipelineHandler',
1607
1608
 
1608
- name: ta.Optional[str] = None,
1609
+ _name: ta.Optional[str] = None,
1609
1610
  ) -> None:
1610
1611
  super().__init__()
1611
1612
 
1612
1613
  self._pipeline: ta.Final[IoPipeline] = _pipeline
1613
1614
  self._handler: ta.Final[IoPipelineHandler] = _handler
1614
1615
 
1615
- self._name: ta.Final[ta.Optional[str]] = name
1616
+ self._name: ta.Final[ta.Optional[str]] = _name
1616
1617
 
1617
1618
  self._ref: IoPipelineHandlerRef_ = IoPipelineHandlerRef(_context=self)
1618
1619
 
@@ -1960,13 +1961,21 @@ class ShareableIoPipelineHandler(IoPipelineHandler, Abstract):
1960
1961
  ##
1961
1962
 
1962
1963
 
1963
- IoPipelineDirection = ta.Literal['inbound', 'outbound'] # ta.TypeAlias # omlish-amalg-typing-no-move
1964
+ IoPipelineDirection = ta.Literal[ # ta.TypeAlias # omlish-amalg-typing-no-move
1965
+ 'inbound',
1966
+ 'outbound',
1967
+ ]
1964
1968
 
1965
1969
  IoPipelineDirectionOrDuplex = ta.Literal[ # ta.TypeAlias # omlish-amalg-typing-no-move
1966
1970
  IoPipelineDirection,
1967
1971
  'duplex',
1968
1972
  ]
1969
1973
 
1974
+ IoPipelineUpdate = ta.Literal[ # ta.TypeAlias # omlish-amalg-typing-no-move
1975
+ 'added',
1976
+ 'removed',
1977
+ ]
1978
+
1970
1979
  IoPipelineHandlerUpdate = ta.Literal[ # ta.TypeAlias # omlish-amalg-typing-no-move
1971
1980
  'adding',
1972
1981
  'added',
@@ -1979,6 +1988,9 @@ IoPipelineHandlerUpdate = ta.Literal[ # ta.TypeAlias # omlish-amalg-typing-no-
1979
1988
 
1980
1989
 
1981
1990
  class IoPipelineService(Abstract):
1991
+ def pipeline_update(self, pipeline: 'IoPipeline', kind: IoPipelineUpdate) -> None:
1992
+ pass
1993
+
1982
1994
  def handler_update(self, handler_ref: IoPipelineHandlerRef, kind: IoPipelineHandlerUpdate) -> None:
1983
1995
  pass
1984
1996
 
@@ -1997,12 +2009,15 @@ class IoPipelineServices:
1997
2009
  self._by_type_cache: ta.Dict[type, ta.Sequence[ta.Any]] = {}
1998
2010
  self._single_by_type_cache: ta.Dict[type, ta.Optional[ta.Any]] = {}
1999
2011
 
2012
+ self._handles_pipeline_update = handles_pipeline_update = []
2000
2013
  self._handles_handler_update = handles_handler_update = []
2001
2014
  self._handles_pipeline_enter = handles_pipeline_enter = []
2002
2015
  self._handles_pipeline_exit = handles_pipeline_exit = []
2003
2016
 
2004
2017
  for svc in lst:
2005
2018
  sty = type(svc)
2019
+ if sty.pipeline_update is not IoPipelineService.pipeline_update:
2020
+ handles_pipeline_update.append(sty)
2006
2021
  if sty.handler_update is not IoPipelineService.handler_update:
2007
2022
  handles_handler_update.append(sty)
2008
2023
  if sty.pipeline_enter is not IoPipelineService.pipeline_enter:
@@ -2010,14 +2025,19 @@ class IoPipelineServices:
2010
2025
  if sty.pipeline_exit is not IoPipelineService.pipeline_exit:
2011
2026
  handles_pipeline_exit.append(sty)
2012
2027
 
2028
+ _handles_pipeline_update: ta.Sequence[IoPipelineService]
2013
2029
  _handles_handler_update: ta.Sequence[IoPipelineService]
2014
2030
  _handles_pipeline_enter: ta.Sequence[IoPipelineService]
2015
2031
  _handles_pipeline_exit: ta.Sequence[IoPipelineService]
2016
2032
 
2033
+ _EMPTY: ta.ClassVar['IoPipelineServices']
2034
+
2017
2035
  @classmethod
2018
2036
  def of(cls, obj: ta.Union['IoPipelineServices', ta.Sequence[IoPipelineService]]) -> 'IoPipelineServices': # noqa
2019
2037
  if isinstance(obj, cls):
2020
2038
  return obj
2039
+ elif not obj:
2040
+ return cls._EMPTY
2021
2041
  else:
2022
2042
  return cls(list(obj))
2023
2043
 
@@ -2066,6 +2086,9 @@ class IoPipelineServices:
2066
2086
  return svc
2067
2087
 
2068
2088
 
2089
+ IoPipelineServices._EMPTY = IoPipelineServices([]) # noqa
2090
+
2091
+
2069
2092
  ##
2070
2093
 
2071
2094
 
@@ -2083,10 +2106,14 @@ class IoPipelineMetadatas:
2083
2106
  dct[mty] = md
2084
2107
  self._dct = dct
2085
2108
 
2109
+ _EMPTY: ta.ClassVar['IoPipelineMetadatas']
2110
+
2086
2111
  @classmethod
2087
2112
  def of(cls, obj: ta.Union['IoPipelineMetadatas', ta.Sequence[IoPipelineMetadata]]) -> 'IoPipelineMetadatas': # noqa
2088
2113
  if isinstance(obj, cls):
2089
2114
  return obj
2115
+ elif not obj:
2116
+ return cls._EMPTY
2090
2117
  else:
2091
2118
  return cls(list(obj))
2092
2119
 
@@ -2148,6 +2175,9 @@ class IoPipelineMetadatas:
2148
2175
  return self._dct.get(ty, default)
2149
2176
 
2150
2177
 
2178
+ IoPipelineMetadatas._EMPTY = IoPipelineMetadatas([]) # noqa
2179
+
2180
+
2151
2181
  ##
2152
2182
 
2153
2183
 
@@ -2362,8 +2392,6 @@ class IoPipeline:
2362
2392
  *never_handle_exceptions,
2363
2393
  )
2364
2394
 
2365
- self._execution_depth = 0
2366
-
2367
2395
  self._propagation: _IoPipelinePropagation = _IoPipelinePropagation(self)
2368
2396
 
2369
2397
  #
@@ -2393,16 +2421,14 @@ class IoPipeline:
2393
2421
 
2394
2422
  #
2395
2423
 
2396
- self._saw_any_input = False
2397
- self._saw_initial_input = False
2398
- self._saw_final_input = False
2399
- self._saw_final_output = False
2400
-
2401
2424
  self._state = IoPipeline.State.READY
2402
2425
 
2403
2426
  #
2404
2427
 
2405
2428
  try:
2429
+ for svc in self._services._handles_pipeline_update: # noqa
2430
+ svc.pipeline_update(self, 'added')
2431
+
2406
2432
  for h in spec.handlers:
2407
2433
  self.add_innermost(h)
2408
2434
 
@@ -2435,8 +2461,17 @@ class IoPipeline:
2435
2461
  def state(self) -> State:
2436
2462
  return self._state
2437
2463
 
2464
+ @property
2465
+ def is_ready(self) -> bool:
2466
+ return self._state is IoPipeline.State.READY
2467
+
2438
2468
  #
2439
2469
 
2470
+ _saw_any_input = False
2471
+ _saw_initial_input = False
2472
+ _saw_final_input = False
2473
+ _saw_final_output = False
2474
+
2440
2475
  @property
2441
2476
  def saw_any_input(self) -> bool:
2442
2477
  return self._saw_any_input
@@ -2467,6 +2502,8 @@ class IoPipeline:
2467
2502
  ##
2468
2503
  # execution
2469
2504
 
2505
+ _execution_depth = 0
2506
+
2470
2507
  def _step_in(self) -> None:
2471
2508
  self._execution_depth += 1
2472
2509
 
@@ -2717,7 +2754,7 @@ class IoPipeline:
2717
2754
  _pipeline=self,
2718
2755
  _handler=handler,
2719
2756
 
2720
- name=name,
2757
+ _name=name,
2721
2758
  )
2722
2759
 
2723
2760
  self._handler_update(ctx, 'adding') # noqa
@@ -3062,6 +3099,9 @@ class IoPipeline:
3062
3099
  finally:
3063
3100
  self._step_out()
3064
3101
 
3102
+ for svc in self._services._handles_pipeline_update: # noqa
3103
+ svc.pipeline_update(self, 'removed')
3104
+
3065
3105
  self._state = IoPipeline.State.DESTROYED
3066
3106
 
3067
3107
 
@@ -3940,6 +3980,18 @@ class OutboundBytesBufferingIoPipelineHandler(IoPipelineHandler, Abstract):
3940
3980
  raise NotImplementedError
3941
3981
 
3942
3982
 
3983
+ ########################################
3984
+ # ../drivers/metadata.py
3985
+
3986
+
3987
+ ##
3988
+
3989
+
3990
+ @dc.dataclass(frozen=True)
3991
+ class DriverIoPipelineMetadata(IoPipelineMetadata):
3992
+ driver: ta.Any
3993
+
3994
+
3943
3995
  ########################################
3944
3996
  # ../flow/types.py
3945
3997
 
@@ -4005,14 +4057,31 @@ class IoPipelineFlowMessages(NamespaceClass):
4005
4057
  ##
4006
4058
 
4007
4059
 
4008
- class IoPipelineFlow(IoPipelineService, Abstract):
4060
+ class IoPipelineFlow(Abstract):
4009
4061
  @abc.abstractmethod
4010
- def is_auto_read(self) -> bool:
4011
- raise NotImplementedError
4062
+ def is_auto_read(
4063
+ self: ta.Union[
4064
+ 'IoPipelineFlow',
4065
+ IoPipeline,
4066
+ IoPipelineHandlerContext,
4067
+ None,
4068
+ ],
4069
+ ) -> bool:
4070
+ # This strange construct grants the ability to do `IoPipelineFlow.is_auto_read(opt_flow)`, which is becoming
4071
+ # increasingly frequently useful in real code.
4072
+ if self is None:
4073
+ return False
4012
4074
 
4013
- @staticmethod
4014
- def is_auto_read_context(ctx: IoPipelineHandlerContext) -> bool:
4015
- return (fc := ctx.services.find(IoPipelineFlow)) is None or fc.is_auto_read()
4075
+ if isinstance(self, IoPipelineFlow):
4076
+ return self.is_auto_read()
4077
+
4078
+ if isinstance(self, IoPipelineHandlerContext):
4079
+ self = self._pipeline # noqa
4080
+
4081
+ if isinstance(self, IoPipeline):
4082
+ return (fc := self.services.find(IoPipelineFlow)) is None or fc.is_auto_read()
4083
+
4084
+ raise TypeError(self)
4016
4085
 
4017
4086
 
4018
4087
  ########################################
@@ -4299,7 +4368,7 @@ class DuplexQueueIoPipelineHandler(
4299
4368
  ##
4300
4369
 
4301
4370
 
4302
- class IoPipelineScheduling(IoPipelineService, Abstract):
4371
+ class IoPipelineScheduling(Abstract):
4303
4372
  class Handle(Abstract):
4304
4373
  @abc.abstractmethod
4305
4374
  def cancel(self) -> None:
@@ -7995,7 +8064,7 @@ class AsyncioStreamIoPipelineDriver(Abstract):
7995
8064
  ##
7996
8065
  # init
7997
8066
 
7998
- _sched: 'AsyncioStreamIoPipelineDriver._Scheduling'
8067
+ _sched: 'AsyncioStreamIoPipelineDriver._SchedulingService'
7999
8068
 
8000
8069
  _pipeline: IoPipeline
8001
8070
 
@@ -8005,7 +8074,7 @@ class AsyncioStreamIoPipelineDriver(Abstract):
8005
8074
  _output_handlers: ta.Mapping[type, ta.Callable[[ta.Any], ta.Awaitable[None]]]
8006
8075
 
8007
8076
  async def _init(self) -> None:
8008
- self._sched = self._Scheduling(self)
8077
+ self._sched = self._SchedulingService(self)
8009
8078
 
8010
8079
  services = IoPipelineServices.of(self._spec.services)
8011
8080
  self._flow = services.find(IoPipelineFlow)
@@ -8017,6 +8086,7 @@ class AsyncioStreamIoPipelineDriver(Abstract):
8017
8086
 
8018
8087
  self._pipeline = IoPipeline(dc.replace(
8019
8088
  self._spec,
8089
+ metadata=(*self._spec.metadata, DriverIoPipelineMetadata(self)),
8020
8090
  services=(*self._spec.services, self._sched),
8021
8091
  ))
8022
8092
 
@@ -8237,7 +8307,7 @@ class AsyncioStreamIoPipelineDriver(Abstract):
8237
8307
  ##
8238
8308
  # scheduling
8239
8309
 
8240
- class _Scheduling(IoPipelineScheduling):
8310
+ class _SchedulingService(IoPipelineScheduling, IoPipelineService):
8241
8311
  def __init__(self, d: 'AsyncioStreamIoPipelineDriver') -> None:
8242
8312
  super().__init__()
8243
8313
 
@@ -30,6 +30,7 @@ with _lang.auto_proxy_init(globals()):
30
30
  from textual import widget # noqa
31
31
  from textual import widgets # noqa
32
32
  from textual import work # noqa
33
+ from textual._compositor import Compositor # noqa
33
34
  from textual.app import ActionError # noqa
34
35
  from textual.app import ActiveModeError # noqa
35
36
  from textual.app import App as App_ # noqa
@@ -163,6 +164,7 @@ with _lang.auto_proxy_init(globals()):
163
164
  from textual.screen import ModalScreen # noqa
164
165
  from textual.screen import Screen as Screen_ # noqa
165
166
  from textual.screen import SystemModalScreen # noqa
167
+ from textual.strip import Strip # noqa
166
168
  from textual.style import Style # noqa
167
169
  from textual.suggester import SuggestFromList # noqa
168
170
  from textual.suggester import Suggester # noqa
@@ -232,6 +234,13 @@ with _lang.auto_proxy_init(globals()):
232
234
 
233
235
  ##
234
236
 
237
+ from rich.align import AlignMethod # noqa
238
+ from rich.console import Console # noqa
239
+ from rich.console import ConsoleOptions # noqa
240
+ from rich.markdown import Markdown as RichMarkdown # noqa
241
+ from rich.rule import Rule as RichRule # noqa
242
+ from rich.segment import Segment # noqa
243
+ from rich.style import Style as RichStyle # noqa
235
244
  from rich.text import Text # noqa
236
245
 
237
246
  ##
@@ -273,6 +282,10 @@ with _lang.auto_proxy_init(globals()):
273
282
  translate_log_level,
274
283
  )
275
284
 
285
+ from .render2 import ( # noqa
286
+ render_full_widget_ansi,
287
+ )
288
+
276
289
  from .screen2 import ( # noqa
277
290
  Screen,
278
291
  )
@@ -281,3 +294,7 @@ with _lang.auto_proxy_init(globals()):
281
294
  TopRightBottomLeft,
282
295
  trbl_to_dict,
283
296
  )
297
+
298
+ from .widgets2 import ( # noqa
299
+ ComposeOnce,
300
+ )
@@ -0,0 +1,39 @@
1
+ import io
2
+
3
+ from rich.console import Console
4
+ from textual._compositor import Compositor # noqa
5
+ from textual.geometry import Size
6
+ from textual.widget import Widget
7
+
8
+
9
+ ##
10
+
11
+
12
+ def render_full_widget_ansi(
13
+ widget: Widget,
14
+ console: Console,
15
+ size: Size | None = None,
16
+ *,
17
+ strip: bool = False,
18
+ reset: bool = False,
19
+ ) -> str:
20
+ if size is None:
21
+ size = Size(widget.size.width, widget.size.height)
22
+
23
+ comp = Compositor()
24
+ comp.reflow(widget, size)
25
+
26
+ update = comp.render_full_update(simplify=True)
27
+
28
+ out = io.StringIO()
29
+ for row in update.strips:
30
+ line = ''.join(strip.render(console) for strip in row)
31
+ if strip:
32
+ line = line.rstrip(' ')
33
+ out.write(line)
34
+ if reset:
35
+ out.write('\x1b[0m')
36
+ out.write('\n')
37
+ ansi = out.getvalue()
38
+
39
+ return ansi
@@ -0,0 +1,24 @@
1
+ import abc
2
+ import typing as ta
3
+
4
+ from textual.app import ComposeResult
5
+
6
+ from omlish import check
7
+
8
+
9
+ ##
10
+
11
+
12
+ class ComposeOnce:
13
+ _has_composed = False
14
+
15
+ @ta.final
16
+ def compose(self) -> ComposeResult:
17
+ check.state(not self._has_composed)
18
+ self._has_composed = True
19
+
20
+ return self._compose_once()
21
+
22
+ @abc.abstractmethod
23
+ def _compose_once(self) -> ComposeResult:
24
+ raise NotImplementedError
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev537
3
+ Version: 0.0.0.dev539
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.dev537
17
+ Requires-Dist: omlish==0.0.0.dev539
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.3; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -27,7 +27,7 @@ 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.3; extra == "all"
30
- Requires-Dist: textual~=8.0; extra == "all"
30
+ Requires-Dist: textual~=8.1; extra == "all"
31
31
  Requires-Dist: textual-dev~=1.8; extra == "all"
32
32
  Requires-Dist: textual-speedups~=0.2; extra == "all"
33
33
  Provides-Extra: black
@@ -48,7 +48,7 @@ Provides-Extra: qr
48
48
  Requires-Dist: segno~=1.6; extra == "qr"
49
49
  Provides-Extra: tui
50
50
  Requires-Dist: rich~=14.3; extra == "tui"
51
- Requires-Dist: textual~=8.0; extra == "tui"
51
+ Requires-Dist: textual~=8.1; extra == "tui"
52
52
  Requires-Dist: textual-dev~=1.8; extra == "tui"
53
53
  Requires-Dist: textual-speedups~=0.2; extra == "tui"
54
54
  Dynamic: license-file
@@ -424,8 +424,10 @@ omdev/tui/textual/clipboard.py
424
424
  omdev/tui/textual/devtools.py
425
425
  omdev/tui/textual/drivers2.py
426
426
  omdev/tui/textual/logging2.py
427
+ omdev/tui/textual/render2.py
427
428
  omdev/tui/textual/screen2.py
428
429
  omdev/tui/textual/types.py
430
+ omdev/tui/textual/widgets2.py
429
431
  omdev/tui/textual/autocomplete/LICENSE
430
432
  omdev/tui/textual/autocomplete/__init__.py
431
433
  omdev/tui/textual/autocomplete/matching.py
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev537
1
+ omlish==0.0.0.dev539
2
2
 
3
3
  [all]
4
4
  black~=26.3
@@ -12,7 +12,7 @@ mypy~=1.19
12
12
  gprof2dot~=2025.4
13
13
  segno~=1.6
14
14
  rich~=14.3
15
- textual~=8.0
15
+ textual~=8.1
16
16
  textual-dev~=1.8
17
17
  textual-speedups~=0.2
18
18
 
@@ -40,6 +40,6 @@ segno~=1.6
40
40
 
41
41
  [tui]
42
42
  rich~=14.3
43
- textual~=8.0
43
+ textual~=8.1
44
44
  textual-dev~=1.8
45
45
  textual-speedups~=0.2
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.13'
16
- version = '0.0.0.dev537'
16
+ version = '0.0.0.dev539'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,7 +24,7 @@ classifiers = [
24
24
  ]
25
25
  description = 'omdev'
26
26
  dependencies = [
27
- 'omlish == 0.0.0.dev537',
27
+ 'omlish == 0.0.0.dev539',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
@@ -40,7 +40,7 @@ all = [
40
40
  'gprof2dot ~= 2025.4',
41
41
  'segno ~= 1.6',
42
42
  'rich ~= 14.3',
43
- 'textual ~= 8.0',
43
+ 'textual ~= 8.1',
44
44
  'textual-dev ~= 1.8',
45
45
  'textual-speedups ~= 0.2',
46
46
  ]
@@ -68,7 +68,7 @@ qr = [
68
68
  ]
69
69
  tui = [
70
70
  'rich ~= 14.3',
71
- 'textual ~= 8.0',
71
+ 'textual ~= 8.1',
72
72
  'textual-dev ~= 1.8',
73
73
  'textual-speedups ~= 0.2',
74
74
  ]
File without changes
File without changes
File without changes