omdev 0.0.0.dev542__tar.gz → 0.0.0.dev544__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 (461) hide show
  1. {omdev-0.0.0.dev542/omdev.egg-info → omdev-0.0.0.dev544}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/.omlish-manifests.json +1 -1
  3. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/home/paths.py +15 -5
  4. omdev-0.0.0.dev544/omdev/home/shadow.py +24 -0
  5. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/ci.py +184 -151
  6. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/io/pipelines.py +37 -9
  7. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/io/streams.py +252 -57
  8. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/git/cli.py +2 -2
  9. omdev-0.0.0.dev544/omdev/tools/shadow.py +101 -0
  10. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544/omdev.egg-info}/PKG-INFO +2 -2
  11. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev.egg-info/requires.txt +1 -1
  12. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/pyproject.toml +2 -2
  13. omdev-0.0.0.dev542/omdev/home/shadow.py +0 -14
  14. omdev-0.0.0.dev542/omdev/tools/shadow.py +0 -77
  15. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/LICENSE +0 -0
  16. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/MANIFEST.in +0 -0
  17. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/README.md +0 -0
  18. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/README.md +0 -0
  19. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/__about__.py +0 -0
  20. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/__init__.py +0 -0
  21. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/__init__.py +0 -0
  22. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/__main__.py +0 -0
  23. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/cli/__init__.py +0 -0
  24. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/cli/main.py +0 -0
  25. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/__init__.py +0 -0
  26. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/gen.py +0 -0
  27. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/imports.py +0 -0
  28. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/manifests.py +0 -0
  29. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/resources.py +0 -0
  30. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/srcfiles.py +0 -0
  31. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/strip.py +0 -0
  32. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/types.py +0 -0
  33. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/gen/typing.py +0 -0
  34. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/info.py +0 -0
  35. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/amalg/sources.py +0 -0
  36. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/__init__.py +0 -0
  37. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/__init__.py +0 -0
  38. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/cache.py +0 -0
  39. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/contexts.py +0 -0
  40. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/currents.py +0 -0
  41. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/fns.py +0 -0
  42. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/resolvers.py +0 -0
  43. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/storage.py +0 -0
  44. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/compute/types.py +0 -0
  45. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/__init__.py +0 -0
  46. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/actions.py +0 -0
  47. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/cache.py +0 -0
  48. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/consts.py +0 -0
  49. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/defaults.py +0 -0
  50. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/manifests.py +0 -0
  51. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cache/data/specs.py +0 -0
  52. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/__init__.py +0 -0
  53. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/darwin/__init__.py +0 -0
  54. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/darwin/aps.py +0 -0
  55. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/darwin/ax.py +0 -0
  56. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/darwin/cf.py +0 -0
  57. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/darwin/cg.py +0 -0
  58. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/linux/__init__.py +0 -0
  59. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/capi/linux/x11.py +0 -0
  60. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cc/__init__.py +0 -0
  61. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cc/__main__.py +0 -0
  62. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cc/cdeps.py +0 -0
  63. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cc/cdeps.toml +0 -0
  64. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cc/cli.py +0 -0
  65. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cc/srclangs.py +0 -0
  66. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/__init__.py +0 -0
  67. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_boilerplate.cc +0 -0
  68. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/LICENSE +0 -0
  69. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/__init__.py +0 -0
  70. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/build_ext.py +0 -0
  71. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  72. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  73. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/compilers/options.py +0 -0
  74. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  75. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/dir_util.py +0 -0
  76. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/errors.py +0 -0
  77. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/extension.py +0 -0
  78. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/file_util.py +0 -0
  79. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/modified.py +0 -0
  80. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/spawn.py +0 -0
  81. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/sysconfig.py +0 -0
  82. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/util.py +0 -0
  83. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/_distutils/version.py +0 -0
  84. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/build.py +0 -0
  85. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/cmake.py +0 -0
  86. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/importhook.py +0 -0
  87. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/magic.py +0 -0
  88. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cexts/scan.py +0 -0
  89. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/__init__.py +0 -0
  90. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/__main__.py +0 -0
  91. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/cache.py +0 -0
  92. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/ci.py +0 -0
  93. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/cli.py +0 -0
  94. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/compose.py +0 -0
  95. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/consts.py +0 -0
  96. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/__init__.py +0 -0
  97. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/buildcaching.py +0 -0
  98. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/cache.py +0 -0
  99. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  100. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/cacheserved/cache.py +0 -0
  101. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  102. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/cmds.py +0 -0
  103. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/dataserver.py +0 -0
  104. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/imagepulling.py +0 -0
  105. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/inject.py +0 -0
  106. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/packing.py +0 -0
  107. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/repositories.py +0 -0
  108. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/docker/utils.py +0 -0
  109. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/__init__.py +0 -0
  110. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/__init__.py +0 -0
  111. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/clients.py +0 -0
  112. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v1/__init__.py +0 -0
  113. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v1/api.py +0 -0
  114. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v1/client.py +0 -0
  115. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v2/__init__.py +0 -0
  116. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v2/api.py +0 -0
  117. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v2/azure.py +0 -0
  118. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/api/v2/client.py +0 -0
  119. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/bootstrap.py +0 -0
  120. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/cache.py +0 -0
  121. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/cli.py +0 -0
  122. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/env.py +0 -0
  123. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/github/inject.py +0 -0
  124. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/inject.py +0 -0
  125. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/requirements.py +0 -0
  126. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/shell.py +0 -0
  127. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/ci/utils.py +0 -0
  128. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/__init__.py +0 -0
  129. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/__main__.py +0 -0
  130. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/_pathhack.py +0 -0
  131. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/clicli.py +0 -0
  132. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/install.py +0 -0
  133. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/main.py +0 -0
  134. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/managers.py +0 -0
  135. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cli/types.py +0 -0
  136. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/__init__.py +0 -0
  137. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/capi/__init__.py +0 -0
  138. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/capi/darwin_cf.py +0 -0
  139. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/capi/linux_x11.py +0 -0
  140. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/commands.py +0 -0
  141. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/platform.py +0 -0
  142. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/clipboard/types.py +0 -0
  143. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cmake.py +0 -0
  144. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cmdlog/__init__.py +0 -0
  145. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cmdlog/__main__.py +0 -0
  146. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cmdlog/_cmdlog.py +0 -0
  147. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cmdlog/cli.py +0 -0
  148. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/cmdlog/cmdlog.py +0 -0
  149. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/__init__.py +0 -0
  150. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/__main__.py +0 -0
  151. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/_dumping.py +0 -0
  152. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/_template.py +0 -0
  153. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/cli.py +0 -0
  154. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/codegen.py +0 -0
  155. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataclasses/dumping.py +0 -0
  156. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataserver/__init__.py +0 -0
  157. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataserver/handlers.py +0 -0
  158. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataserver/http.py +0 -0
  159. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataserver/routes.py +0 -0
  160. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataserver/server.py +0 -0
  161. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dataserver/targets.py +0 -0
  162. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/diffs/__init__.py +0 -0
  163. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/diffs/__main__.py +0 -0
  164. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/diffs/cli.py +0 -0
  165. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/diffs/parsing.py +0 -0
  166. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/diffs/rendering.py +0 -0
  167. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/diffs/types.py +0 -0
  168. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/__init__.py +0 -0
  169. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/__main__.py +0 -0
  170. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/cli.py +0 -0
  171. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/config.py +0 -0
  172. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/config.toml +0 -0
  173. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/content.py +0 -0
  174. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/gen.py +0 -0
  175. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/helpers.py +0 -0
  176. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/ops.py +0 -0
  177. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/rendering.py +0 -0
  178. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/.python-versions.json +0 -0
  179. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  180. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  181. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  182. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  183. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  184. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  185. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  186. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  187. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  188. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  189. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  190. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  191. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  192. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  193. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  194. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  195. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  196. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  197. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/dockerdev/resources/xu +0 -0
  198. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/git/__init__.py +0 -0
  199. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/git/magic.py +0 -0
  200. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/git/revisions.py +0 -0
  201. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/git/shallow.py +0 -0
  202. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/git/status.py +0 -0
  203. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/home/__init__.py +0 -0
  204. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/home/secrets.py +0 -0
  205. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/imgur.py +0 -0
  206. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/intellij/__init__.py +0 -0
  207. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/intellij/cli.py +0 -0
  208. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/intellij/ides.py +0 -0
  209. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/intellij/open.py +0 -0
  210. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/__init__.py +0 -0
  211. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/__main__.py +0 -0
  212. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/cli.py +0 -0
  213. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/default.py +0 -0
  214. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/inject.py +0 -0
  215. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/inspect.py +0 -0
  216. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/providers/__init__.py +0 -0
  217. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/providers/base.py +0 -0
  218. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/providers/inject.py +0 -0
  219. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/providers/running.py +0 -0
  220. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/providers/standalone.py +0 -0
  221. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/providers/system.py +0 -0
  222. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/pyenv/__init__.py +0 -0
  223. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/pyenv/inject.py +0 -0
  224. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/pyenv/install.py +0 -0
  225. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/pyenv/provider.py +0 -0
  226. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/pyenv/pyenv.py +0 -0
  227. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/resolvers.py +0 -0
  228. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/types.py +0 -0
  229. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/uv/__init__.py +0 -0
  230. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/uv/inject.py +0 -0
  231. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/uv/provider.py +0 -0
  232. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/uv/uv.py +0 -0
  233. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/interp/venvs.py +0 -0
  234. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/__init__.py +0 -0
  235. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/messages/__init__.py +0 -0
  236. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/messages/base.py +0 -0
  237. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/messages/formats.py +0 -0
  238. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/messages/messages.py +0 -0
  239. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/messages/parsing.py +0 -0
  240. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/numerics/__init__.py +0 -0
  241. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/numerics/formats.py +0 -0
  242. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/numerics/numerics.py +0 -0
  243. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/numerics/types.py +0 -0
  244. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/LICENSE +0 -0
  245. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/__init__.py +0 -0
  246. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/consts.py +0 -0
  247. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/errors.py +0 -0
  248. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/message.py +0 -0
  249. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/nuh.py +0 -0
  250. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/parsing.py +0 -0
  251. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/rendering.py +0 -0
  252. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/tags.py +0 -0
  253. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/irc/protocol/utils.py +0 -0
  254. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/java/__init__.py +0 -0
  255. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/java/__main__.py +0 -0
  256. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/java/cli.py +0 -0
  257. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/java/pomgen.py +0 -0
  258. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/java/xml.py +0 -0
  259. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/__init__.py +0 -0
  260. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/__main__.py +0 -0
  261. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/cli.py +0 -0
  262. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/find.py +0 -0
  263. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/magic.py +0 -0
  264. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/prepare.py +0 -0
  265. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/magic/styles.py +0 -0
  266. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/manifests/__init__.py +0 -0
  267. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/manifests/__main__.py +0 -0
  268. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/manifests/_dumping.py +0 -0
  269. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/manifests/building.py +0 -0
  270. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/manifests/dumping.py +0 -0
  271. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/manifests/main.py +0 -0
  272. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/markdown/__init__.py +0 -0
  273. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/markdown/incparse.py +0 -0
  274. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/markdown/tokens.py +0 -0
  275. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/mypy/__init__.py +0 -0
  276. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/mypy/debug.py +0 -0
  277. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/mypy/report.py +0 -0
  278. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/__init__.py +0 -0
  279. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/building.py +0 -0
  280. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/compression.py +0 -0
  281. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/data.py +0 -0
  282. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/datarefs.py +0 -0
  283. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/dataserver.py +0 -0
  284. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/loading.py +0 -0
  285. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/media.py +0 -0
  286. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/pack/__init__.py +0 -0
  287. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/pack/packing.py +0 -0
  288. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/pack/repositories.py +0 -0
  289. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/pack/unpacking.py +0 -0
  290. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/repositories.py +0 -0
  291. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/oci/tars.py +0 -0
  292. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/__init__.py +0 -0
  293. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/marshal.py +0 -0
  294. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/names.py +0 -0
  295. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/requires.py +0 -0
  296. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/revisions.py +0 -0
  297. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/specifiers.py +0 -0
  298. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/versions.py +0 -0
  299. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/packaging/wheelfile.py +0 -0
  300. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pip.py +0 -0
  301. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/__init__.py +0 -0
  302. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/__main__.py +0 -0
  303. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/base.py +0 -0
  304. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/blanklines.py +0 -0
  305. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/caches.py +0 -0
  306. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/git.py +0 -0
  307. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/imports.py +0 -0
  308. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/lite.py +0 -0
  309. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/main.py +0 -0
  310. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/manifests.py +0 -0
  311. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/scripts.py +0 -0
  312. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/precheck/unicode.py +0 -0
  313. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/__init__.py +0 -0
  314. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/asts/__init__.py +0 -0
  315. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/asts/parents.py +0 -0
  316. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/asts/toplevel.py +0 -0
  317. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/asts/visitors.py +0 -0
  318. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/attrdocs.py +0 -0
  319. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/bracepy.py +0 -0
  320. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/classdot.py +0 -0
  321. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/LICENSE +0 -0
  322. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/__init__.py +0 -0
  323. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/attrdoc.py +0 -0
  324. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/common.py +0 -0
  325. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/epydoc.py +0 -0
  326. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/google.py +0 -0
  327. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/numpydoc.py +0 -0
  328. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/parser.py +0 -0
  329. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/docstrings/rest.py +0 -0
  330. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/findimports.py +0 -0
  331. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/reprs.py +0 -0
  332. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/scripts/__init__.py +0 -0
  333. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/scripts/bumpversion.py +0 -0
  334. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/scripts/execstat.py +0 -0
  335. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/scripts/importtrace.py +0 -0
  336. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/srcheaders.py +0 -0
  337. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tokens/__init__.py +0 -0
  338. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tokens/all.py +0 -0
  339. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tokens/tokenizert.py +0 -0
  340. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tokens/utils.py +0 -0
  341. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tools/__init__.py +0 -0
  342. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tools/importscan.py +0 -0
  343. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tools/mkrelimp.py +0 -0
  344. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/py/tools/pipdepup.py +0 -0
  345. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/__init__.py +0 -0
  346. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/__main__.py +0 -0
  347. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/cli.py +0 -0
  348. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/configs.py +0 -0
  349. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/inject.py +0 -0
  350. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/pkg.py +0 -0
  351. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/reqs.py +0 -0
  352. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/resources/dockerdev.sh +0 -0
  353. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/resources/python.sh +0 -0
  354. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/tools/__init__.py +0 -0
  355. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/tools/aboutdeps.py +0 -0
  356. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/tools/buildrs.py +0 -0
  357. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/tools/pyversions.py +0 -0
  358. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/venvs.py +0 -0
  359. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/pyproject/versions.py +0 -0
  360. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/rs/__init__.py +0 -0
  361. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/__init__.py +0 -0
  362. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/interp.py +0 -0
  363. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/__init__.py +0 -0
  364. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/formats/__init__.py +0 -0
  365. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/formats/goyaml.py +0 -0
  366. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/inject.py +0 -0
  367. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/io/__init__.py +0 -0
  368. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/logs.py +0 -0
  369. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/lib/marshal.py +0 -0
  370. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/pyproject.py +0 -0
  371. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/slowcat.py +0 -0
  372. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/scripts/tmpexec.py +0 -0
  373. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tagstrings.py +0 -0
  374. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/__init__.py +0 -0
  375. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/cloc.py +0 -0
  376. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/diff.py +0 -0
  377. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/doc.py +0 -0
  378. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/docker.py +0 -0
  379. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/git/__init__.py +0 -0
  380. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/git/__main__.py +0 -0
  381. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/git/cloning.py +0 -0
  382. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/git/consts.py +0 -0
  383. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/git/messages.py +0 -0
  384. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/__init__.py +0 -0
  385. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/__main__.py +0 -0
  386. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/cli.py +0 -0
  387. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/formats.py +0 -0
  388. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/io.py +0 -0
  389. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/parsing.py +0 -0
  390. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/processing.py +0 -0
  391. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/json/rendering.py +0 -0
  392. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/jsonview/__init__.py +0 -0
  393. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/jsonview/__main__.py +0 -0
  394. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/jsonview/cli.py +0 -0
  395. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  396. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  397. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  398. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/linehisto.py +0 -0
  399. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/mkenv.py +0 -0
  400. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/notebook.py +0 -0
  401. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/pawk/README.md +0 -0
  402. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/pawk/__init__.py +0 -0
  403. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/pawk/__main__.py +0 -0
  404. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/pawk/pawk.py +0 -0
  405. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/pip.py +0 -0
  406. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/prof.py +0 -0
  407. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/qr.py +0 -0
  408. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/shell.py +0 -0
  409. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tools/sqlrepl.py +0 -0
  410. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/__init__.py +0 -0
  411. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/__init__.py +0 -0
  412. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/edit/__init__.py +0 -0
  413. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/edit/main.py +0 -0
  414. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/irc/__init__.py +0 -0
  415. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/irc/__main__.py +0 -0
  416. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/irc/app.py +0 -0
  417. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/irc/client.py +0 -0
  418. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/irc/commands.py +0 -0
  419. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/irc/main.py +0 -0
  420. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/markdown/__init__.py +0 -0
  421. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/markdown/__main__.py +0 -0
  422. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/apps/markdown/cli.py +0 -0
  423. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/__init__.py +0 -0
  424. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/console2.py +0 -0
  425. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/LICENSE +0 -0
  426. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/__init__.py +0 -0
  427. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/__main__.py +0 -0
  428. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/_compat.py +0 -0
  429. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/cli.py +0 -0
  430. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/renderables.py +0 -0
  431. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/rendering.py +0 -0
  432. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/diff/underlinebar.py +0 -0
  433. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/markdown2.py +0 -0
  434. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/textual/__init__.py +0 -0
  435. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/textual/dark.py +0 -0
  436. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/textual/dump.py +0 -0
  437. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/rich/textual/themes.py +0 -0
  438. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/__init__.py +0 -0
  439. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/app2.py +0 -0
  440. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  441. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  442. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/autocomplete/matching.py +0 -0
  443. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/autocomplete/paths.py +0 -0
  444. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/autocomplete/widget.py +0 -0
  445. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/binding2.py +0 -0
  446. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/clipboard.py +0 -0
  447. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/debug/__init__.py +0 -0
  448. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/debug/dominfo.py +0 -0
  449. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/debug/screen.py +0 -0
  450. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/devtools.py +0 -0
  451. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/drivers2.py +0 -0
  452. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/logging2.py +0 -0
  453. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/render2.py +0 -0
  454. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/screen2.py +0 -0
  455. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/types.py +0 -0
  456. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev/tui/textual/widgets2.py +0 -0
  457. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev.egg-info/SOURCES.txt +0 -0
  458. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev.egg-info/dependency_links.txt +0 -0
  459. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev.egg-info/entry_points.txt +0 -0
  460. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/omdev.egg-info/top_level.txt +0 -0
  461. {omdev-0.0.0.dev542 → omdev-0.0.0.dev544}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev542
3
+ Version: 0.0.0.dev544
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.dev542
17
+ Requires-Dist: omlish==0.0.0.dev544
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.3; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -536,7 +536,7 @@
536
536
  "module": ".tools.shadow",
537
537
  "attr": "_CLI_MODULE",
538
538
  "file": "omdev/tools/shadow.py",
539
- "line": 68,
539
+ "line": 92,
540
540
  "value": {
541
541
  "!.cli.types.CliModule": {
542
542
  "name": "shadow",
@@ -36,25 +36,35 @@ class HomePaths:
36
36
  def home_dir(self) -> str:
37
37
  return self._home_dir
38
38
 
39
+ config_subdir: ta.Final = 'config'
40
+
39
41
  @property
40
42
  def config_dir(self) -> str:
41
- return os.path.join(self._home_dir, 'config')
43
+ return os.path.join(self._home_dir, self.config_subdir)
44
+
45
+ log_subdir: ta.Final = 'log'
42
46
 
43
47
  @property
44
48
  def log_dir(self) -> str:
45
- return os.path.join(self._home_dir, 'log')
49
+ return os.path.join(self._home_dir, self.log_subdir)
50
+
51
+ run_subdir: ta.Final = 'run'
46
52
 
47
53
  @property
48
54
  def run_dir(self) -> str:
49
- return os.path.join(self._home_dir, 'run')
55
+ return os.path.join(self._home_dir, self.run_subdir)
56
+
57
+ shadow_subdir: ta.Final = 'shadow'
50
58
 
51
59
  @property
52
60
  def shadow_dir(self) -> str:
53
- return os.path.join(self._home_dir, 'shadow')
61
+ return os.path.join(self._home_dir, self.shadow_subdir)
62
+
63
+ state_subdir: ta.Final = 'state'
54
64
 
55
65
  @property
56
66
  def state_dir(self) -> str:
57
- return os.path.join(self._home_dir, 'state')
67
+ return os.path.join(self._home_dir, self.state_subdir)
58
68
 
59
69
 
60
70
  def get_home_paths() -> HomePaths:
@@ -0,0 +1,24 @@
1
+ from omlish.configs.shadow import FileShadowConfigs
2
+ from omlish.configs.shadow import FileShadowConfigsImpl
3
+ from omlish.configs.shadow import ShadowConfigs
4
+ from omlish.lite.check import check
5
+ from omlish.os.shadow import ManglingShadowPaths
6
+ from omlish.os.shadow import ShadowPaths
7
+
8
+ from .paths import HomePaths
9
+ from .paths import get_home_paths
10
+
11
+
12
+ ##
13
+
14
+
15
+ def get_shadow_paths() -> ShadowPaths:
16
+ return ManglingShadowPaths(get_home_paths().shadow_dir)
17
+
18
+
19
+ def get_shadow_configs() -> ShadowConfigs:
20
+ return FileShadowConfigsImpl(get_shadow_paths(), HomePaths.config_subdir)
21
+
22
+
23
+ def get_file_shadow_configs() -> FileShadowConfigs:
24
+ return check.isinstance(get_shadow_configs(), FileShadowConfigs)
@@ -93,11 +93,11 @@ def __omlish_amalg__(): # noqa
93
93
  dict(path='github/env.py', sha1='c7a2389048f008f46f59f6bcc11e0d15655f2b1c'),
94
94
  dict(path='shell.py', sha1='a59e59b812394d0502837f4c198e1cf604f90227'),
95
95
  dict(path='../oci/compression.py', sha1='7d165bc51a77db13ff45927daecc42839cfd75ea'),
96
- dict(path='../../omlish/asyncs/asyncio/utils.py', sha1='1ab917e62b40dae3744ba2eb3d10c85ddffe08a4'),
96
+ dict(path='../../omlish/asyncs/asyncio/utils.py', sha1='a093aa6b49e25b3206f59b703b281d569c386838'),
97
97
  dict(path='../../omlish/docker/ports.py', sha1='a3202c69b85bc4f1034479df3400fddc86130e5c'),
98
+ dict(path='../../omlish/http/coro/_pushback.py', sha1='783fe8a40fa9f2febf035f4553c53c73b9bd58e1'),
98
99
  dict(path='../../omlish/http/urllib.py', sha1='25431c5bdc7dd5cbecfcb8c0bdffaabf8c1691b9'),
99
100
  dict(path='../../omlish/http/versions.py', sha1='5b1659b81eb197c6880fbe78684a1348595ec804'),
100
- dict(path='../../omlish/io/pushback.py', sha1='783fe8a40fa9f2febf035f4553c53c73b9bd58e1'),
101
101
  dict(path='../../omlish/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
102
102
  dict(path='../../omlish/lite/asyncs.py', sha1='b3f2251c56617ce548abf9c333ac996b63edb23e'),
103
103
  dict(path='../../omlish/lite/cached.py', sha1='0c33cf961ac8f0727284303c7a30c5ea98f714f2'),
@@ -173,7 +173,7 @@ def __omlish_amalg__(): # noqa
173
173
  dict(path='../oci/building.py', sha1='b4fea06c03ba02d3ecfc6d10d955dc76f263846a'),
174
174
  dict(path='../oci/loading.py', sha1='64d806ffad8d24087ccc29f759f672e6d795bee2'),
175
175
  dict(path='../../omlish/formats/yaml/goyaml/parsing.py', sha1='c92e4772e2d50f080bc1ca8a317d0c7aea5b710a'),
176
- dict(path='../../omlish/http/coro/server/sockets.py', sha1='512e6fdd4ad9a533b81a584e45c7d7e9b0188c15'),
176
+ dict(path='../../omlish/http/coro/server/sockets.py', sha1='bb0915b307622067c5460387ed0014f954167eb5'),
177
177
  dict(path='../../omlish/logs/asyncs.py', sha1='8376df395029a9d0957e2338adede895a9364215'),
178
178
  dict(path='../../omlish/logs/std/loggers.py', sha1='dbdfc66188e6accb75d03454e43221d3fba0f011'),
179
179
  dict(path='../../omlish/subprocesses/asyncs.py', sha1='bba44d524c24c6ac73168aee6343488414e5bf48'),
@@ -497,41 +497,74 @@ async def asyncio_wait_maybe_concurrent(
497
497
  ##
498
498
 
499
499
 
500
- @contextlib.asynccontextmanager
501
- async def asyncio_shielded_finally(
502
- fn: ta.Callable[[], ta.Awaitable[ta.Any]],
503
- *,
504
- timeout: ta.Optional[float] = 5,
505
- ) -> ta.AsyncIterator[None]:
506
- try:
507
- yield
500
+ async def _asyncio_await_finalizer_shielded(
501
+ awaitable: ta.Awaitable[ta.Any],
502
+ *,
503
+ timeout: ta.Optional[float] = None,
504
+ ) -> None:
505
+ task = asyncio.create_task(awaitable) # type: ignore # noqa
508
506
 
509
- finally:
510
- end_task = asyncio.create_task(fn()) # type: ignore # noqa
507
+ if timeout is None:
508
+ try:
509
+ await asyncio.shield(task)
510
+ except asyncio.CancelledError:
511
+ try:
512
+ await task
513
+ finally:
514
+ raise
515
+
516
+ else:
517
+ deadline = time.monotonic() + timeout
511
518
 
512
- if timeout is None:
519
+ def remaining() -> float:
520
+ return max(0., deadline - time.monotonic())
521
+
522
+ try:
523
+ await asyncio.wait_for(asyncio.shield(task), timeout=remaining())
524
+ except asyncio.CancelledError:
513
525
  try:
514
- await asyncio.shield(end_task)
526
+ await asyncio.wait_for(task, timeout=remaining())
527
+ finally:
528
+ raise
515
529
 
516
- except asyncio.CancelledError:
517
- try:
518
- await end_task
519
530
 
520
- finally:
521
- raise
531
+ @dc.dataclass()
532
+ class AsyncioShieldedFinallyCancelledError(asyncio.CancelledError):
533
+ cleanup_exc: BaseException
522
534
 
523
- else:
524
- dl = time.monotonic() + timeout
525
535
 
526
- try:
527
- await asyncio.wait_for(asyncio.shield(end_task), timeout=time.monotonic() - dl)
536
+ @contextlib.asynccontextmanager
537
+ async def asyncio_shielded_finally(
538
+ fn: ta.Callable[[], ta.Awaitable[ta.Any]],
539
+ *,
540
+ timeout: ta.Optional[float] = None,
541
+ ) -> ta.AsyncIterator[None]:
542
+ raised = False
528
543
 
529
- except asyncio.CancelledError:
530
- try:
531
- await asyncio.wait_for(end_task, timeout=time.monotonic() - dl)
544
+ try:
545
+ yield
532
546
 
533
- finally:
534
- raise
547
+ except asyncio.CancelledError as e:
548
+ raised = True
549
+ try:
550
+ await _asyncio_await_finalizer_shielded(fn(), timeout=timeout)
551
+ except BaseException as e2: # noqa
552
+ raise AsyncioShieldedFinallyCancelledError(e2) from e
553
+ else:
554
+ raise
555
+
556
+ except Exception as e: # noqa
557
+ raised = True
558
+ try:
559
+ await _asyncio_await_finalizer_shielded(fn(), timeout=timeout)
560
+ except BaseException as e2: # noqa
561
+ raise e2 from e
562
+ else:
563
+ raise
564
+
565
+ finally:
566
+ if not raised:
567
+ await _asyncio_await_finalizer_shielded(fn(), timeout=timeout)
535
568
 
536
569
 
537
570
  ########################################
@@ -603,128 +636,7 @@ class DockerPortRelay:
603
636
 
604
637
 
605
638
  ########################################
606
- # ../../../omlish/http/urllib.py
607
-
608
-
609
- ##
610
-
611
-
612
- class NonRaisingUrllibErrorProcessor(urllib.request.HTTPErrorProcessor):
613
- """
614
- https://stackoverflow.com/a/74844056
615
-
616
- Usage:
617
-
618
- opener = urllib.request.build_opener(NonRaisingUrllibErrorProcessor)
619
- with opener.open(req) as resp:
620
- ...
621
- """
622
-
623
- def http_response(self, request, response):
624
- return response
625
-
626
- def https_response(self, request, response):
627
- return response
628
-
629
-
630
- ########################################
631
- # ../../../omlish/http/versions.py
632
-
633
-
634
- ##
635
-
636
-
637
- class UnknownHttpVersionError(Exception):
638
- pass
639
-
640
-
641
- @ta.final
642
- @functools.total_ordering
643
- class HttpVersion:
644
- def __init__(self, major: int, minor: int) -> None:
645
- self._major = major
646
- self._minor = minor
647
-
648
- self._parts = parts = (major, minor)
649
-
650
- self._hash = hash(parts)
651
-
652
- self._str = f'HTTP/{major}.{minor}'
653
- self._short_str = f'{major}.{minor}'
654
-
655
- def __repr__(self) -> str:
656
- return f'{self.__class__.__name__}({self.major}, {self.minor})'
657
-
658
- def __hash__(self) -> int:
659
- return self._hash
660
-
661
- def __eq__(self, other: object) -> ta.Any:
662
- if not isinstance(other, HttpVersion):
663
- return NotImplemented
664
- return self._parts == other._parts
665
-
666
- def __lt__(self, other: object) -> ta.Any:
667
- if not isinstance(other, HttpVersion):
668
- return NotImplemented
669
- return self._parts < other._parts
670
-
671
- @property
672
- def major(self) -> int:
673
- return self._major
674
-
675
- @property
676
- def minor(self) -> int:
677
- return self._minor
678
-
679
- def __str__(self) -> str:
680
- return self._str
681
-
682
- @property
683
- def short_str(self) -> str:
684
- return self._short_str
685
-
686
- def __iter__(self) -> ta.Iterator[int]:
687
- return iter(self._parts)
688
-
689
-
690
- @ta.final
691
- class HttpVersions:
692
- def __new__(cls, *args, **kwargs): # noqa
693
- raise TypeError
694
-
695
- HTTP_0_9 = HttpVersion(0, 9)
696
- HTTP_1_0 = HttpVersion(1, 0)
697
- HTTP_1_1 = HttpVersion(1, 1)
698
- HTTP_2_0 = HttpVersion(2, 0)
699
-
700
- _FROM_STR: ta.ClassVar[ta.Mapping[str, HttpVersion]] = {
701
- str(v): v for v in [
702
- HTTP_0_9,
703
- HTTP_1_0,
704
- HTTP_1_1,
705
- HTTP_2_0,
706
- ]
707
- }
708
-
709
- @classmethod
710
- def from_str(cls, s: str) -> HttpVersion:
711
- try:
712
- return cls._FROM_STR[s]
713
- except KeyError:
714
- raise UnknownHttpVersionError(s) from None
715
-
716
- @classmethod
717
- def of(cls, o: ta.Union[HttpVersion, str]) -> HttpVersion:
718
- if isinstance(o, HttpVersion):
719
- return o
720
- elif isinstance(o, str):
721
- return cls.from_str(o)
722
- else:
723
- raise TypeError(o)
724
-
725
-
726
- ########################################
727
- # ../../../omlish/io/pushback.py
639
+ # ../../../omlish/http/coro/_pushback.py
728
640
 
729
641
 
730
642
  ##
@@ -864,6 +776,127 @@ class PushbackReader:
864
776
  buf += chunk
865
777
 
866
778
 
779
+ ########################################
780
+ # ../../../omlish/http/urllib.py
781
+
782
+
783
+ ##
784
+
785
+
786
+ class NonRaisingUrllibErrorProcessor(urllib.request.HTTPErrorProcessor):
787
+ """
788
+ https://stackoverflow.com/a/74844056
789
+
790
+ Usage:
791
+
792
+ opener = urllib.request.build_opener(NonRaisingUrllibErrorProcessor)
793
+ with opener.open(req) as resp:
794
+ ...
795
+ """
796
+
797
+ def http_response(self, request, response):
798
+ return response
799
+
800
+ def https_response(self, request, response):
801
+ return response
802
+
803
+
804
+ ########################################
805
+ # ../../../omlish/http/versions.py
806
+
807
+
808
+ ##
809
+
810
+
811
+ class UnknownHttpVersionError(Exception):
812
+ pass
813
+
814
+
815
+ @ta.final
816
+ @functools.total_ordering
817
+ class HttpVersion:
818
+ def __init__(self, major: int, minor: int) -> None:
819
+ self._major = major
820
+ self._minor = minor
821
+
822
+ self._parts = parts = (major, minor)
823
+
824
+ self._hash = hash(parts)
825
+
826
+ self._str = f'HTTP/{major}.{minor}'
827
+ self._short_str = f'{major}.{minor}'
828
+
829
+ def __repr__(self) -> str:
830
+ return f'{self.__class__.__name__}({self.major}, {self.minor})'
831
+
832
+ def __hash__(self) -> int:
833
+ return self._hash
834
+
835
+ def __eq__(self, other: object) -> ta.Any:
836
+ if not isinstance(other, HttpVersion):
837
+ return NotImplemented
838
+ return self._parts == other._parts
839
+
840
+ def __lt__(self, other: object) -> ta.Any:
841
+ if not isinstance(other, HttpVersion):
842
+ return NotImplemented
843
+ return self._parts < other._parts
844
+
845
+ @property
846
+ def major(self) -> int:
847
+ return self._major
848
+
849
+ @property
850
+ def minor(self) -> int:
851
+ return self._minor
852
+
853
+ def __str__(self) -> str:
854
+ return self._str
855
+
856
+ @property
857
+ def short_str(self) -> str:
858
+ return self._short_str
859
+
860
+ def __iter__(self) -> ta.Iterator[int]:
861
+ return iter(self._parts)
862
+
863
+
864
+ @ta.final
865
+ class HttpVersions:
866
+ def __new__(cls, *args, **kwargs): # noqa
867
+ raise TypeError
868
+
869
+ HTTP_0_9 = HttpVersion(0, 9)
870
+ HTTP_1_0 = HttpVersion(1, 0)
871
+ HTTP_1_1 = HttpVersion(1, 1)
872
+ HTTP_2_0 = HttpVersion(2, 0)
873
+
874
+ _FROM_STR: ta.ClassVar[ta.Mapping[str, HttpVersion]] = {
875
+ str(v): v for v in [
876
+ HTTP_0_9,
877
+ HTTP_1_0,
878
+ HTTP_1_1,
879
+ HTTP_2_0,
880
+ ]
881
+ }
882
+
883
+ @classmethod
884
+ def from_str(cls, s: str) -> HttpVersion:
885
+ try:
886
+ return cls._FROM_STR[s]
887
+ except KeyError:
888
+ raise UnknownHttpVersionError(s) from None
889
+
890
+ @classmethod
891
+ def of(cls, o: ta.Union[HttpVersion, str]) -> HttpVersion:
892
+ if isinstance(o, HttpVersion):
893
+ return o
894
+ elif isinstance(o, str):
895
+ return cls.from_str(o)
896
+ else:
897
+ raise TypeError(o)
898
+
899
+
867
900
  ########################################
868
901
  # ../../../omlish/lite/abstract.py
869
902
 
@@ -61,7 +61,7 @@ def __omlish_amalg__(): # noqa
61
61
  dict(path='../../logs/contexts.py', sha1='1000a6d5ddfb642865ca532e34b1d50759781cf0'),
62
62
  dict(path='../../logs/utils.py', sha1='9b879044cbdc3172fd7282c7f2a4880b81261cdd'),
63
63
  dict(path='bytes/queues.py', sha1='ea3b53a155622376836ba9e3499b85220f37b1fd'),
64
- dict(path='handlers/flatmap.py', sha1='7c9957c9e5136d1fa8ca51997914b4e9a5065843'),
64
+ dict(path='handlers/flatmap.py', sha1='118478ac94449a9a0b5ba44f5f3e8a5d69bb6f65'),
65
65
  dict(path='../streams/direct.py', sha1='b01937212493e9a41644ac4e366e4cbab10332ce'),
66
66
  dict(path='../streams/scanning.py', sha1='00522802dff772689be66151430754d4f9706dbc'),
67
67
  dict(path='../../logs/base.py', sha1='eaa2ce213235815e2f86c50df6c41cfe26a43ba2'),
@@ -71,7 +71,7 @@ def __omlish_amalg__(): # noqa
71
71
  dict(path='../../logs/std/loggers.py', sha1='dbdfc66188e6accb75d03454e43221d3fba0f011'),
72
72
  dict(path='bytes/decoders.py', sha1='6f6d8bc1adc6a5277543389814bc26ef63e34561'),
73
73
  dict(path='../../logs/modules.py', sha1='dd7d5f8e63fe8829dfb49460f3929ab64b68ee14'),
74
- dict(path='drivers/asyncio.py', sha1='59e80c4ac127e727676f17e956783f3aa39b4088'),
74
+ dict(path='drivers/asyncio.py', sha1='44e86ab5b903ea2780fc586aed267f72d501d21f'),
75
75
  dict(path='_amalg.py', sha1='14b67747b1e3b3c1483050a7948a29888d732ed9'),
76
76
  ],
77
77
  )
@@ -5521,12 +5521,13 @@ class FlatMapIoPipelineHandlers(NamespaceClass):
5521
5521
  )
5522
5522
 
5523
5523
  @classmethod
5524
- def _add_drop_filters(
5524
+ def add_filters(
5525
5525
  cls,
5526
5526
  fn: FlatMapIoPipelineHandlerFn,
5527
5527
  *,
5528
5528
  filter_type: ta.Optional[ta.Union[type, ta.Tuple[type, ...]]] = None,
5529
5529
  filter: ta.Optional[IoPipelineHandlerFn[ta.Any, bool]] = None, # noqa
5530
+ not_must_propagate: bool = False,
5530
5531
  ) -> FlatMapIoPipelineHandlerFn:
5531
5532
  if filter is not None:
5532
5533
  fn = FlatMapIoPipelineHandlerFns.filter(filter, fn)
@@ -5534,10 +5535,13 @@ class FlatMapIoPipelineHandlers(NamespaceClass):
5534
5535
  if filter_type is not None:
5535
5536
  fn = FlatMapIoPipelineHandlerFns.filter_type(filter_type, fn)
5536
5537
 
5537
- fn = FlatMapIoPipelineHandlerFns.filter(cls._NOT_MUST_PROPAGATE, fn)
5538
+ if not_must_propagate:
5539
+ fn = FlatMapIoPipelineHandlerFns.filter(cls._NOT_MUST_PROPAGATE, fn)
5538
5540
 
5539
5541
  return fn
5540
5542
 
5543
+ #
5544
+
5541
5545
  @classmethod
5542
5546
  def drop(
5543
5547
  cls,
@@ -5548,10 +5552,33 @@ class FlatMapIoPipelineHandlers(NamespaceClass):
5548
5552
  ) -> IoPipelineHandler:
5549
5553
  return cls.new(
5550
5554
  direction,
5551
- cls._add_drop_filters(
5555
+ cls.add_filters(
5552
5556
  FlatMapIoPipelineHandlerFns.drop(),
5553
5557
  filter=filter,
5554
5558
  filter_type=filter_type,
5559
+ not_must_propagate=True,
5560
+ ),
5561
+ )
5562
+
5563
+ @classmethod
5564
+ def apply_and_drop(
5565
+ cls,
5566
+ direction: IoPipelineDirectionOrDuplex,
5567
+ fn: IoPipelineHandlerFn[ta.Any, None],
5568
+ *,
5569
+ filter_type: ta.Optional[ta.Union[type, ta.Tuple[type, ...]]] = None,
5570
+ filter: ta.Optional[IoPipelineHandlerFn[ta.Any, bool]] = None, # noqa
5571
+ ) -> IoPipelineHandler:
5572
+ return cls.new(
5573
+ direction,
5574
+ cls.add_filters(
5575
+ FlatMapIoPipelineHandlerFns.compose(
5576
+ FlatMapIoPipelineHandlerFns.apply(fn),
5577
+ FlatMapIoPipelineHandlerFns.drop(),
5578
+ ),
5579
+ filter=filter,
5580
+ filter_type=filter_type,
5581
+ not_must_propagate=True,
5555
5582
  ),
5556
5583
  )
5557
5584
 
@@ -5564,13 +5591,14 @@ class FlatMapIoPipelineHandlers(NamespaceClass):
5564
5591
  ) -> IoPipelineHandler:
5565
5592
  return cls.new(
5566
5593
  'inbound',
5567
- cls._add_drop_filters(
5594
+ cls.add_filters(
5568
5595
  FlatMapIoPipelineHandlerFns.compose(
5569
5596
  FlatMapIoPipelineHandlerFns.feed_out(),
5570
5597
  FlatMapIoPipelineHandlerFns.drop(),
5571
5598
  ),
5572
5599
  filter=filter,
5573
5600
  filter_type=filter_type,
5601
+ not_must_propagate=True,
5574
5602
  ),
5575
5603
  )
5576
5604
 
@@ -8169,14 +8197,14 @@ class AsyncioStreamIoPipelineDriver(Abstract):
8169
8197
  fut.set_exception(e)
8170
8198
  raise
8171
8199
 
8172
- async def feed_in(self, *msgs: ta.Any) -> None:
8200
+ def enqueue_waitable(self, *msgs: ta.Any) -> 'asyncio.Future[None]':
8173
8201
  check.state(not self._shutdown_event.is_set())
8174
8202
 
8175
8203
  fut: asyncio.Future[None] = asyncio.Future()
8176
8204
  self._command_queue.put_nowait(AsyncioStreamIoPipelineDriver._FeedInCommand(msgs, fut=fut))
8177
- await fut
8205
+ return fut
8178
8206
 
8179
- def feed_in_nowait(self, *msgs: ta.Any) -> None:
8207
+ def enqueue(self, *msgs: ta.Any) -> None:
8180
8208
  check.state(not self._shutdown_event.is_set())
8181
8209
 
8182
8210
  self._command_queue.put_nowait(AsyncioStreamIoPipelineDriver._FeedInCommand(msgs))