omdev 0.0.0.dev352__tar.gz → 0.0.0.dev354__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.

Potentially problematic release.


This version of omdev might be problematic. Click here for more details.

Files changed (317) hide show
  1. {omdev-0.0.0.dev352/omdev.egg-info → omdev-0.0.0.dev354}/PKG-INFO +3 -3
  2. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/.manifests.json +1 -1
  3. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/clicli.py +12 -2
  4. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/install.py +22 -7
  5. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/scripts/ci.py +33 -7
  6. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354/omdev.egg-info}/PKG-INFO +3 -3
  7. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev.egg-info/requires.txt +1 -1
  8. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/pyproject.toml +3 -3
  9. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/LICENSE +0 -0
  10. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/MANIFEST.in +0 -0
  11. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/README.md +0 -0
  12. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/__about__.py +0 -0
  13. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/__init__.py +0 -0
  14. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/__init__.py +0 -0
  15. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/__main__.py +0 -0
  16. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/gen.py +0 -0
  17. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/imports.py +0 -0
  18. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/main.py +0 -0
  19. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/manifests.py +0 -0
  20. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/resources.py +0 -0
  21. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/srcfiles.py +0 -0
  22. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/strip.py +0 -0
  23. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/types.py +0 -0
  24. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/amalg/typing.py +0 -0
  25. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/__init__.py +0 -0
  26. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/__init__.py +0 -0
  27. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/cache.py +0 -0
  28. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/contexts.py +0 -0
  29. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/currents.py +0 -0
  30. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/fns.py +0 -0
  31. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/resolvers.py +0 -0
  32. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/storage.py +0 -0
  33. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/compute/types.py +0 -0
  34. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/__init__.py +0 -0
  35. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/actions.py +0 -0
  36. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/cache.py +0 -0
  37. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/consts.py +0 -0
  38. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/defaults.py +0 -0
  39. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/manifests.py +0 -0
  40. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cache/data/specs.py +0 -0
  41. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cc/__init__.py +0 -0
  42. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cc/__main__.py +0 -0
  43. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cc/cdeps.py +0 -0
  44. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cc/cdeps.toml +0 -0
  45. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cc/cli.py +0 -0
  46. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cc/srclangs.py +0 -0
  47. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/__init__.py +0 -0
  48. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_boilerplate.cc +0 -0
  49. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/LICENSE +0 -0
  50. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/__init__.py +0 -0
  51. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/build_ext.py +0 -0
  52. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  53. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  54. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/compilers/options.py +0 -0
  55. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  56. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/dir_util.py +0 -0
  57. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/errors.py +0 -0
  58. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/extension.py +0 -0
  59. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/file_util.py +0 -0
  60. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/modified.py +0 -0
  61. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/spawn.py +0 -0
  62. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/sysconfig.py +0 -0
  63. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/util.py +0 -0
  64. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/_distutils/version.py +0 -0
  65. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/build.py +0 -0
  66. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/cmake.py +0 -0
  67. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/importhook.py +0 -0
  68. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/magic.py +0 -0
  69. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cexts/scan.py +0 -0
  70. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/__init__.py +0 -0
  71. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/__main__.py +0 -0
  72. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/cache.py +0 -0
  73. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/ci.py +0 -0
  74. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/cli.py +0 -0
  75. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/compose.py +0 -0
  76. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/consts.py +0 -0
  77. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/__init__.py +0 -0
  78. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/buildcaching.py +0 -0
  79. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/cache.py +0 -0
  80. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  81. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/cacheserved/cache.py +0 -0
  82. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  83. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/cmds.py +0 -0
  84. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/dataserver.py +0 -0
  85. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/imagepulling.py +0 -0
  86. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/inject.py +0 -0
  87. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/packing.py +0 -0
  88. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/repositories.py +0 -0
  89. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/docker/utils.py +0 -0
  90. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/__init__.py +0 -0
  91. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/__init__.py +0 -0
  92. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/clients.py +0 -0
  93. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v1/__init__.py +0 -0
  94. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v1/api.py +0 -0
  95. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v1/client.py +0 -0
  96. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v2/__init__.py +0 -0
  97. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v2/api.py +0 -0
  98. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v2/azure.py +0 -0
  99. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/api/v2/client.py +0 -0
  100. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/bootstrap.py +0 -0
  101. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/cache.py +0 -0
  102. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/cli.py +0 -0
  103. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/env.py +0 -0
  104. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/github/inject.py +0 -0
  105. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/inject.py +0 -0
  106. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/requirements.py +0 -0
  107. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/shell.py +0 -0
  108. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ci/utils.py +0 -0
  109. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/__init__.py +0 -0
  110. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/__main__.py +0 -0
  111. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/_pathhack.py +0 -0
  112. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/main.py +0 -0
  113. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/managers.py +0 -0
  114. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cli/types.py +0 -0
  115. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/clipboard/__init__.py +0 -0
  116. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/clipboard/clipboard.py +0 -0
  117. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/clipboard/darwin_cf.py +0 -0
  118. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/clipboard/linux_x11.py +0 -0
  119. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cmake.py +0 -0
  120. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cmdlog/__init__.py +0 -0
  121. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cmdlog/__main__.py +0 -0
  122. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cmdlog/_cmdlog.py +0 -0
  123. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cmdlog/cli.py +0 -0
  124. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/cmdlog/cmdlog.py +0 -0
  125. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/dataserver/__init__.py +0 -0
  126. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/dataserver/handlers.py +0 -0
  127. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/dataserver/http.py +0 -0
  128. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/dataserver/routes.py +0 -0
  129. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/dataserver/server.py +0 -0
  130. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/dataserver/targets.py +0 -0
  131. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/git/__init__.py +0 -0
  132. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/git/magic.py +0 -0
  133. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/git/revisions.py +0 -0
  134. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/git/shallow.py +0 -0
  135. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/git/status.py +0 -0
  136. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/home/__init__.py +0 -0
  137. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/home/paths.py +0 -0
  138. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/home/secrets.py +0 -0
  139. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/home/shadow.py +0 -0
  140. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/imgur.py +0 -0
  141. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/__init__.py +0 -0
  142. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/__main__.py +0 -0
  143. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/cli.py +0 -0
  144. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/default.py +0 -0
  145. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/inject.py +0 -0
  146. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/inspect.py +0 -0
  147. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/providers/__init__.py +0 -0
  148. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/providers/base.py +0 -0
  149. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/providers/inject.py +0 -0
  150. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/providers/running.py +0 -0
  151. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/providers/standalone.py +0 -0
  152. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/providers/system.py +0 -0
  153. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/pyenv/__init__.py +0 -0
  154. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/pyenv/inject.py +0 -0
  155. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/pyenv/install.py +0 -0
  156. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/pyenv/provider.py +0 -0
  157. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/pyenv/pyenv.py +0 -0
  158. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/resolvers.py +0 -0
  159. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/types.py +0 -0
  160. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/uv/__init__.py +0 -0
  161. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/uv/inject.py +0 -0
  162. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/uv/provider.py +0 -0
  163. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/uv/uv.py +0 -0
  164. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/interp/venvs.py +0 -0
  165. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/__init__.py +0 -0
  166. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/__main__.py +0 -0
  167. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/cli.py +0 -0
  168. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/find.py +0 -0
  169. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/magic.py +0 -0
  170. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/prepare.py +0 -0
  171. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/magic/styles.py +0 -0
  172. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/manifests/__init__.py +0 -0
  173. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/manifests/__main__.py +0 -0
  174. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/manifests/build.py +0 -0
  175. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/manifests/dumping.py +0 -0
  176. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/manifests/main.py +0 -0
  177. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/mypy/__init__.py +0 -0
  178. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/mypy/debug.py +0 -0
  179. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/mypy/report.py +0 -0
  180. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/__init__.py +0 -0
  181. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/building.py +0 -0
  182. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/compression.py +0 -0
  183. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/data.py +0 -0
  184. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/datarefs.py +0 -0
  185. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/dataserver.py +0 -0
  186. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/loading.py +0 -0
  187. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/media.py +0 -0
  188. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/pack/__init__.py +0 -0
  189. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/pack/packing.py +0 -0
  190. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/pack/repositories.py +0 -0
  191. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/pack/unpacking.py +0 -0
  192. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/repositories.py +0 -0
  193. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/oci/tars.py +0 -0
  194. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/__init__.py +0 -0
  195. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/marshal.py +0 -0
  196. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/names.py +0 -0
  197. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/requires.py +0 -0
  198. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/revisions.py +0 -0
  199. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/specifiers.py +0 -0
  200. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/versions.py +0 -0
  201. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/packaging/wheelfile.py +0 -0
  202. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pip.py +0 -0
  203. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/__init__.py +0 -0
  204. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/__main__.py +0 -0
  205. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/base.py +0 -0
  206. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/caches.py +0 -0
  207. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/git.py +0 -0
  208. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/imports.py +0 -0
  209. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/lite.py +0 -0
  210. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/main.py +0 -0
  211. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/manifests.py +0 -0
  212. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/precheck/scripts.py +0 -0
  213. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/__init__.py +0 -0
  214. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/apps/__init__.py +0 -0
  215. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/apps/ncdu.py +0 -0
  216. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/confirm.py +0 -0
  217. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/LICENSE +0 -0
  218. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/__init__.py +0 -0
  219. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/__main__.py +0 -0
  220. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/border.py +0 -0
  221. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/cli.py +0 -0
  222. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/markdown.py +0 -0
  223. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/parser.py +0 -0
  224. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/styles.py +0 -0
  225. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/tags.py +0 -0
  226. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/ptk/markdown/utils.py +0 -0
  227. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/__init__.py +0 -0
  228. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/attrdocs.py +0 -0
  229. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/bracepy.py +0 -0
  230. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/classdot.py +0 -0
  231. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/LICENSE +0 -0
  232. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/__init__.py +0 -0
  233. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/attrdoc.py +0 -0
  234. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/common.py +0 -0
  235. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/epydoc.py +0 -0
  236. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/google.py +0 -0
  237. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/numpydoc.py +0 -0
  238. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/parser.py +0 -0
  239. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/docstrings/rest.py +0 -0
  240. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/findimports.py +0 -0
  241. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/scripts/__init__.py +0 -0
  242. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/scripts/bumpversion.py +0 -0
  243. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/scripts/execstat.py +0 -0
  244. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/scripts/importtrace.py +0 -0
  245. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/srcheaders.py +0 -0
  246. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/tools/__init__.py +0 -0
  247. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/tools/importscan.py +0 -0
  248. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/py/tools/mkrelimp.py +0 -0
  249. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/__init__.py +0 -0
  250. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/__main__.py +0 -0
  251. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/cexts.py +0 -0
  252. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/cli.py +0 -0
  253. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/configs.py +0 -0
  254. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/inject.py +0 -0
  255. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/pkg.py +0 -0
  256. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/reqs.py +0 -0
  257. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/resources/__init__.py +0 -0
  258. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/resources/docker-dev.sh +0 -0
  259. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/resources/python.sh +0 -0
  260. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/pyproject/venvs.py +0 -0
  261. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/scripts/__init__.py +0 -0
  262. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/scripts/interp.py +0 -0
  263. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/scripts/pyproject.py +0 -0
  264. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/scripts/slowcat.py +0 -0
  265. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/scripts/tmpexec.py +0 -0
  266. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tagstrings.py +0 -0
  267. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tokens/__init__.py +0 -0
  268. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tokens/all.py +0 -0
  269. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tokens/tokenizert.py +0 -0
  270. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tokens/utils.py +0 -0
  271. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/__init__.py +0 -0
  272. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/antlr/__init__.py +0 -0
  273. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/antlr/__main__.py +0 -0
  274. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/antlr/cli.py +0 -0
  275. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/antlr/consts.py +0 -0
  276. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/antlr/gen.py +0 -0
  277. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/cloc.py +0 -0
  278. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/diff.py +0 -0
  279. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/doc.py +0 -0
  280. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/docker.py +0 -0
  281. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/git/__init__.py +0 -0
  282. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/git/__main__.py +0 -0
  283. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/git/cli.py +0 -0
  284. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/git/consts.py +0 -0
  285. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/git/messages.py +0 -0
  286. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/intellij.py +0 -0
  287. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/__init__.py +0 -0
  288. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/__main__.py +0 -0
  289. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/cli.py +0 -0
  290. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/formats.py +0 -0
  291. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/io.py +0 -0
  292. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/parsing.py +0 -0
  293. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/processing.py +0 -0
  294. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/json/rendering.py +0 -0
  295. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/jsonview/__init__.py +0 -0
  296. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/jsonview/__main__.py +0 -0
  297. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/jsonview/cli.py +0 -0
  298. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/jsonview/resources/__init__.py +0 -0
  299. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  300. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  301. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/linehisto.py +0 -0
  302. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/mkenv.py +0 -0
  303. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/notebook.py +0 -0
  304. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/pawk/__init__.py +0 -0
  305. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/pawk/__main__.py +0 -0
  306. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/pawk/pawk.py +0 -0
  307. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/pip.py +0 -0
  308. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/prof.py +0 -0
  309. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/qr.py +0 -0
  310. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/shadow.py +0 -0
  311. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/shell.py +0 -0
  312. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev/tools/sqlrepl.py +0 -0
  313. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev.egg-info/SOURCES.txt +0 -0
  314. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev.egg-info/dependency_links.txt +0 -0
  315. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev.egg-info/entry_points.txt +0 -0
  316. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/omdev.egg-info/top_level.txt +0 -0
  317. {omdev-0.0.0.dev352 → omdev-0.0.0.dev354}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev352
3
+ Version: 0.0.0.dev354
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -10,9 +10,9 @@ Classifier: Development Status :: 2 - Pre-Alpha
10
10
  Classifier: Intended Audience :: Developers
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
- Requires-Python: >=3.12
13
+ Requires-Python: >=3.13
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev352
15
+ Requires-Dist: omlish==0.0.0.dev354
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -39,7 +39,7 @@
39
39
  "module": ".cli.clicli",
40
40
  "attr": "_CLI_MODULE",
41
41
  "file": "omdev/cli/clicli.py",
42
- "line": 176,
42
+ "line": 186,
43
43
  "value": {
44
44
  "$.cli.types.CliModule": {
45
45
  "cmd_name": "cli",
@@ -1,5 +1,6 @@
1
1
  import inspect
2
2
  import os
3
+ import re
3
4
  import shlex
4
5
  import subprocess
5
6
  import sys
@@ -23,6 +24,15 @@ from .types import CliModule
23
24
  DEFAULT_REINSTALL_URL = 'https://raw.githubusercontent.com/wrmsr/omlish/master/omdev/cli/install.py'
24
25
 
25
26
 
27
+ _VALID_VERSION_STR = re.compile(r'\d+(\.\d+(\.\d+(\.dev\d+)?)?)?')
28
+
29
+
30
+ def _parse_latest_version_str(s: str) -> str:
31
+ if not _VALID_VERSION_STR.fullmatch(s):
32
+ raise ValueError(f'Invalid version string: {s}')
33
+ return s
34
+
35
+
26
36
  class CliCli(ap.Cli):
27
37
 
28
38
  #
@@ -84,7 +94,7 @@ class CliCli(ap.Cli):
84
94
  ap.arg('extra_deps', nargs='*'),
85
95
  )
86
96
  def reinstall(self) -> None:
87
- latest_version = lookup_latest_package_version(__package__.split('.')[0])
97
+ latest_version = _parse_latest_version_str(lookup_latest_package_version(__package__.split('.')[0]))
88
98
 
89
99
  #
90
100
 
@@ -153,7 +163,7 @@ class CliCli(ap.Cli):
153
163
  reco_cmd = ' '.join([
154
164
  'curl -LsSf',
155
165
  f"'{url}'" if (qu := shlex.quote(url)) == url else qu,
156
- '| python3 -',
166
+ f'| python3 - --version {shlex.quote(latest_version)}',
157
167
  *deps,
158
168
  ])
159
169
  print(f'Recovery command:\n\n{reco_cmd}\n')
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env python3
2
+ # ruff: noqa: UP045
2
3
  # @omlish-lite
3
4
  # @omlish-script
4
5
  """
@@ -19,17 +20,29 @@ import typing as ta
19
20
 
20
21
 
21
22
  DEFAULT_CLI_PKG = 'omdev-cli'
22
- DEFAULT_PY_VER = '3.12'
23
+ DEFAULT_PY_VER = '3.13'
23
24
 
24
25
 
25
26
  @dc.dataclass(frozen=True)
26
27
  class InstallOpts:
27
28
  cli_pkg: str = DEFAULT_CLI_PKG
29
+ cli_ver: ta.Optional[str] = None
30
+
28
31
  py_ver: str = DEFAULT_PY_VER
29
32
 
30
33
  extras: ta.Sequence[str] = dc.field(default_factory=list)
31
34
 
32
35
 
36
+ def _format_install_cli_pkg(opts: InstallOpts) -> str:
37
+ spec = opts.cli_pkg
38
+ if (ver := opts.cli_ver) is not None:
39
+ if any(c in ver for c in '=<>!~'):
40
+ spec += ver
41
+ else:
42
+ spec = f'{spec}=={ver}'
43
+ return spec
44
+
45
+
33
46
  class InstallManager(abc.ABC):
34
47
  @abc.abstractmethod
35
48
  def is_available(self) -> bool:
@@ -74,7 +87,7 @@ class UvxInstallManager(InstallManager):
74
87
  '--refresh',
75
88
  '--prerelease=allow',
76
89
  f'--python={opts.py_ver}',
77
- opts.cli_pkg,
90
+ _format_install_cli_pkg(opts),
78
91
  *itertools.chain.from_iterable(['--with', e] for e in (opts.extras or [])),
79
92
  ])
80
93
 
@@ -113,7 +126,7 @@ class PipxInstallManager(InstallManager):
113
126
  'pipx',
114
127
  'install',
115
128
  f'--python={opts.py_ver}',
116
- opts.cli_pkg,
129
+ _format_install_cli_pkg(opts),
117
130
  *itertools.chain.from_iterable(['--preinstall', e] for e in (opts.extras or [])),
118
131
  ])
119
132
 
@@ -140,8 +153,9 @@ def _main() -> None:
140
153
 
141
154
  parser = argparse.ArgumentParser()
142
155
  parser.add_argument('-c', '--cli', default=DEFAULT_CLI_PKG)
143
- parser.add_argument('-p', '--py', default=DEFAULT_PY_VER)
144
- parser.add_argument('-m', '--mgr')
156
+ parser.add_argument('-V', '--version')
157
+ parser.add_argument('-p', '--python', default=DEFAULT_PY_VER)
158
+ parser.add_argument('-m', '--manager')
145
159
  parser.add_argument('extra', nargs='*')
146
160
  args = parser.parse_args()
147
161
 
@@ -150,10 +164,10 @@ def _main() -> None:
150
164
 
151
165
  cli = cli.lower().replace('_', '-')
152
166
 
153
- if not (py := args.py):
167
+ if not (py := args.python):
154
168
  raise ValueError(f'Must specify py')
155
169
 
156
- if mgr := args.mgr:
170
+ if mgr := args.manager:
157
171
  if (im := INSTALL_MANAGERS.get(mgr)) is None:
158
172
  raise ValueError(f'Unsupported mgr: {mgr}')
159
173
  if not im.is_available():
@@ -171,6 +185,7 @@ def _main() -> None:
171
185
 
172
186
  im.install(InstallOpts(
173
187
  cli_pkg=cli,
188
+ cli_ver=args.version,
174
189
  py_ver=py,
175
190
  extras=args.extra,
176
191
  ))
@@ -9450,7 +9450,11 @@ class CoroHttpServer:
9450
9450
 
9451
9451
  #
9452
9452
 
9453
- def coro_handle(self) -> ta.Generator[Io, ta.Optional[bytes], None]:
9453
+ @dc.dataclass(frozen=True)
9454
+ class CoroHandleResult:
9455
+ close_reason: ta.Literal['response', 'internal', None] = None
9456
+
9457
+ def coro_handle(self) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
9454
9458
  return self._coro_run_handler(self._coro_handle_one())
9455
9459
 
9456
9460
  class Close(Exception): # noqa
@@ -9463,7 +9467,7 @@ class CoroHttpServer:
9463
9467
  ta.Optional[bytes],
9464
9468
  None,
9465
9469
  ],
9466
- ) -> ta.Generator[Io, ta.Optional[bytes], None]:
9470
+ ) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
9467
9471
  i: ta.Optional[bytes]
9468
9472
  o: ta.Any = next(gen)
9469
9473
  while True:
@@ -9487,7 +9491,9 @@ class CoroHttpServer:
9487
9491
 
9488
9492
  o.close()
9489
9493
  if o.close_connection:
9490
- break
9494
+ return self.CoroHandleResult(
9495
+ close_reason='response',
9496
+ )
9491
9497
  o = None
9492
9498
 
9493
9499
  else:
@@ -9496,9 +9502,11 @@ class CoroHttpServer:
9496
9502
  try:
9497
9503
  o = gen.send(i)
9498
9504
  except self.Close:
9499
- return
9505
+ return self.CoroHandleResult(
9506
+ close_reason='internal',
9507
+ )
9500
9508
  except StopIteration:
9501
- break
9509
+ return self.CoroHandleResult()
9502
9510
 
9503
9511
  except Exception: # noqa
9504
9512
  if hasattr(o, 'close'):
@@ -10813,16 +10821,32 @@ class CoroHttpServerSocketHandler(SocketHandler_):
10813
10821
  self,
10814
10822
  server_factory: CoroHttpServerFactory,
10815
10823
  *,
10824
+ keep_alive: bool = False,
10816
10825
  log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpServer.AnyLogIo], None]] = None,
10817
10826
  ) -> None:
10818
10827
  super().__init__()
10819
10828
 
10820
10829
  self._server_factory = server_factory
10830
+ self._keep_alive = keep_alive
10821
10831
  self._log_handler = log_handler
10822
10832
 
10823
10833
  def __call__(self, client_address: SocketAddress, fp: SocketIoPair) -> None:
10824
10834
  server = self._server_factory(client_address)
10825
10835
 
10836
+ if self._keep_alive:
10837
+ for i in itertools.count(): # noqa
10838
+ res = self._handle_one(server, fp)
10839
+ if res.close_reason is not None:
10840
+ break
10841
+
10842
+ else:
10843
+ self._handle_one(server, fp)
10844
+
10845
+ def _handle_one(
10846
+ self,
10847
+ server: CoroHttpServer,
10848
+ fp: SocketIoPair,
10849
+ ) -> CoroHttpServer.CoroHandleResult:
10826
10850
  gen = server.coro_handle()
10827
10851
 
10828
10852
  o = next(gen)
@@ -10851,8 +10875,8 @@ class CoroHttpServerSocketHandler(SocketHandler_):
10851
10875
  o = gen.send(i)
10852
10876
  else:
10853
10877
  o = next(gen)
10854
- except StopIteration:
10855
- break
10878
+ except StopIteration as e:
10879
+ return check.isinstance(e.value, CoroHttpServer.CoroHandleResult)
10856
10880
 
10857
10881
 
10858
10882
  ########################################
@@ -11666,6 +11690,7 @@ def make_simple_http_server(
11666
11690
  handler: HttpHandler,
11667
11691
  *,
11668
11692
  server_version: HttpProtocolVersion = HttpProtocolVersions.HTTP_1_1,
11693
+ keep_alive: bool = False,
11669
11694
  ssl_context: ta.Optional['ssl.SSLContext'] = None,
11670
11695
  ignore_ssl_errors: bool = False,
11671
11696
  executor: ta.Optional[cf.Executor] = None,
@@ -11687,6 +11712,7 @@ def make_simple_http_server(
11687
11712
 
11688
11713
  socket_handler = CoroHttpServerSocketHandler(
11689
11714
  server_factory,
11715
+ keep_alive=keep_alive,
11690
11716
  )
11691
11717
 
11692
11718
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev352
3
+ Version: 0.0.0.dev354
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -10,9 +10,9 @@ Classifier: Development Status :: 2 - Pre-Alpha
10
10
  Classifier: Intended Audience :: Developers
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
- Requires-Python: >=3.12
13
+ Requires-Python: >=3.13
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev352
15
+ Requires-Dist: omlish==0.0.0.dev354
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev352
1
+ omlish==0.0.0.dev354
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -11,8 +11,8 @@ authors = [
11
11
  ]
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
- requires-python = '>=3.12'
15
- version = '0.0.0.dev352'
14
+ requires-python = '>=3.13'
15
+ version = '0.0.0.dev354'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev352',
25
+ 'omlish == 0.0.0.dev354',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes