omdev 0.0.0.dev355__tar.gz → 0.0.0.dev357__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 (319) hide show
  1. {omdev-0.0.0.dev355/omdev.egg-info → omdev-0.0.0.dev357}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/.manifests.json +1 -1
  3. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/dataserver.py +1 -1
  4. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/repositories.py +1 -1
  5. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/clicli.py +9 -2
  6. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/cli.py +3 -0
  7. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/default.py +3 -0
  8. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/inject.py +5 -0
  9. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/inspect.py +3 -0
  10. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/providers/inject.py +3 -0
  11. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/providers/running.py +3 -0
  12. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/providers/standalone.py +3 -0
  13. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/pyenv/inject.py +3 -0
  14. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/pyenv/provider.py +3 -0
  15. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/pyenv/pyenv.py +3 -0
  16. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/resolvers.py +3 -0
  17. omdev-0.0.0.dev357/omdev/interp/uv/inject.py +24 -0
  18. omdev-0.0.0.dev357/omdev/interp/uv/provider.py +40 -0
  19. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/uv/uv.py +3 -0
  20. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/magic.py +3 -0
  21. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/prepare.py +3 -0
  22. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/styles.py +3 -0
  23. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/git.py +1 -1
  24. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/imports.py +3 -3
  25. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/lite.py +1 -1
  26. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/manifests.py +1 -1
  27. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/scripts.py +1 -1
  28. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/scripts/ci.py +1 -1
  29. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/scripts/interp.py +143 -11
  30. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/scripts/pyproject.py +151 -11
  31. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/cli.py +14 -6
  32. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/parsing.py +4 -4
  33. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/processing.py +18 -0
  34. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/rendering.py +1 -1
  35. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357/omdev.egg-info}/PKG-INFO +2 -2
  36. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev.egg-info/requires.txt +1 -1
  37. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/pyproject.toml +2 -2
  38. omdev-0.0.0.dev355/omdev/interp/uv/inject.py +0 -12
  39. omdev-0.0.0.dev355/omdev/interp/uv/provider.py +0 -21
  40. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/LICENSE +0 -0
  41. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/MANIFEST.in +0 -0
  42. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/README.md +0 -0
  43. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/__about__.py +0 -0
  44. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/__init__.py +0 -0
  45. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/__init__.py +0 -0
  46. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/__main__.py +0 -0
  47. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/gen.py +0 -0
  48. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/imports.py +0 -0
  49. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/main.py +0 -0
  50. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/manifests.py +0 -0
  51. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/resources.py +0 -0
  52. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/srcfiles.py +0 -0
  53. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/strip.py +0 -0
  54. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/types.py +0 -0
  55. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/amalg/typing.py +0 -0
  56. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/__init__.py +0 -0
  57. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/__init__.py +0 -0
  58. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/cache.py +0 -0
  59. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/contexts.py +0 -0
  60. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/currents.py +0 -0
  61. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/fns.py +0 -0
  62. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/resolvers.py +0 -0
  63. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/storage.py +0 -0
  64. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/compute/types.py +0 -0
  65. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/__init__.py +0 -0
  66. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/actions.py +0 -0
  67. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/cache.py +0 -0
  68. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/consts.py +0 -0
  69. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/defaults.py +0 -0
  70. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/manifests.py +0 -0
  71. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cache/data/specs.py +0 -0
  72. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cc/__init__.py +0 -0
  73. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cc/__main__.py +0 -0
  74. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cc/cdeps.py +0 -0
  75. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cc/cdeps.toml +0 -0
  76. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cc/cli.py +0 -0
  77. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cc/srclangs.py +0 -0
  78. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/__init__.py +0 -0
  79. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_boilerplate.cc +0 -0
  80. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/LICENSE +0 -0
  81. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/__init__.py +0 -0
  82. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/build_ext.py +0 -0
  83. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  84. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  85. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/compilers/options.py +0 -0
  86. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  87. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/dir_util.py +0 -0
  88. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/errors.py +0 -0
  89. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/extension.py +0 -0
  90. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/file_util.py +0 -0
  91. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/modified.py +0 -0
  92. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/spawn.py +0 -0
  93. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/sysconfig.py +0 -0
  94. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/util.py +0 -0
  95. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/_distutils/version.py +0 -0
  96. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/build.py +0 -0
  97. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/cmake.py +0 -0
  98. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/importhook.py +0 -0
  99. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/magic.py +0 -0
  100. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cexts/scan.py +0 -0
  101. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/__init__.py +0 -0
  102. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/__main__.py +0 -0
  103. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/cache.py +0 -0
  104. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/ci.py +0 -0
  105. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/cli.py +0 -0
  106. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/compose.py +0 -0
  107. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/consts.py +0 -0
  108. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/__init__.py +0 -0
  109. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/buildcaching.py +0 -0
  110. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/cache.py +0 -0
  111. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  112. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/cacheserved/cache.py +0 -0
  113. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  114. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/cmds.py +0 -0
  115. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/imagepulling.py +0 -0
  116. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/inject.py +0 -0
  117. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/packing.py +0 -0
  118. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/docker/utils.py +0 -0
  119. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/__init__.py +0 -0
  120. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/__init__.py +0 -0
  121. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/clients.py +0 -0
  122. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v1/__init__.py +0 -0
  123. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v1/api.py +0 -0
  124. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v1/client.py +0 -0
  125. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v2/__init__.py +0 -0
  126. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v2/api.py +0 -0
  127. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v2/azure.py +0 -0
  128. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/api/v2/client.py +0 -0
  129. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/bootstrap.py +0 -0
  130. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/cache.py +0 -0
  131. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/cli.py +0 -0
  132. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/env.py +0 -0
  133. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/github/inject.py +0 -0
  134. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/inject.py +0 -0
  135. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/requirements.py +0 -0
  136. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/shell.py +0 -0
  137. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ci/utils.py +0 -0
  138. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/__init__.py +0 -0
  139. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/__main__.py +0 -0
  140. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/_pathhack.py +0 -0
  141. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/install.py +0 -0
  142. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/main.py +0 -0
  143. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/managers.py +0 -0
  144. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cli/types.py +0 -0
  145. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/clipboard/__init__.py +0 -0
  146. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/clipboard/clipboard.py +0 -0
  147. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/clipboard/darwin_cf.py +0 -0
  148. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/clipboard/linux_x11.py +0 -0
  149. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cmake.py +0 -0
  150. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cmdlog/__init__.py +0 -0
  151. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cmdlog/__main__.py +0 -0
  152. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cmdlog/_cmdlog.py +0 -0
  153. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cmdlog/cli.py +0 -0
  154. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/cmdlog/cmdlog.py +0 -0
  155. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/dataserver/__init__.py +0 -0
  156. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/dataserver/handlers.py +0 -0
  157. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/dataserver/http.py +0 -0
  158. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/dataserver/routes.py +0 -0
  159. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/dataserver/server.py +0 -0
  160. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/dataserver/targets.py +0 -0
  161. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/git/__init__.py +0 -0
  162. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/git/magic.py +0 -0
  163. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/git/revisions.py +0 -0
  164. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/git/shallow.py +0 -0
  165. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/git/status.py +0 -0
  166. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/home/__init__.py +0 -0
  167. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/home/paths.py +0 -0
  168. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/home/secrets.py +0 -0
  169. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/home/shadow.py +0 -0
  170. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/imgur.py +0 -0
  171. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/__init__.py +0 -0
  172. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/__main__.py +0 -0
  173. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/providers/__init__.py +0 -0
  174. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/providers/base.py +0 -0
  175. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/providers/system.py +0 -0
  176. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/pyenv/__init__.py +0 -0
  177. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/pyenv/install.py +0 -0
  178. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/types.py +0 -0
  179. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/uv/__init__.py +0 -0
  180. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/interp/venvs.py +0 -0
  181. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/__init__.py +0 -0
  182. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/__main__.py +0 -0
  183. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/cli.py +0 -0
  184. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/magic/find.py +0 -0
  185. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/manifests/__init__.py +0 -0
  186. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/manifests/__main__.py +0 -0
  187. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/manifests/build.py +0 -0
  188. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/manifests/dumping.py +0 -0
  189. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/manifests/main.py +0 -0
  190. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/mypy/__init__.py +0 -0
  191. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/mypy/debug.py +0 -0
  192. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/mypy/report.py +0 -0
  193. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/__init__.py +0 -0
  194. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/building.py +0 -0
  195. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/compression.py +0 -0
  196. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/data.py +0 -0
  197. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/datarefs.py +0 -0
  198. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/dataserver.py +0 -0
  199. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/loading.py +0 -0
  200. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/media.py +0 -0
  201. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/pack/__init__.py +0 -0
  202. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/pack/packing.py +0 -0
  203. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/pack/repositories.py +0 -0
  204. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/pack/unpacking.py +0 -0
  205. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/repositories.py +0 -0
  206. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/oci/tars.py +0 -0
  207. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/__init__.py +0 -0
  208. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/marshal.py +0 -0
  209. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/names.py +0 -0
  210. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/requires.py +0 -0
  211. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/revisions.py +0 -0
  212. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/specifiers.py +0 -0
  213. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/versions.py +0 -0
  214. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/packaging/wheelfile.py +0 -0
  215. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pip.py +0 -0
  216. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/__init__.py +0 -0
  217. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/__main__.py +0 -0
  218. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/base.py +0 -0
  219. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/caches.py +0 -0
  220. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/precheck/main.py +0 -0
  221. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/__init__.py +0 -0
  222. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/apps/__init__.py +0 -0
  223. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/apps/ncdu.py +0 -0
  224. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/confirm.py +0 -0
  225. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/LICENSE +0 -0
  226. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/__init__.py +0 -0
  227. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/__main__.py +0 -0
  228. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/border.py +0 -0
  229. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/cli.py +0 -0
  230. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/markdown.py +0 -0
  231. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/parser.py +0 -0
  232. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/styles.py +0 -0
  233. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/tags.py +0 -0
  234. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/ptk/markdown/utils.py +0 -0
  235. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/__init__.py +0 -0
  236. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/attrdocs.py +0 -0
  237. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/bracepy.py +0 -0
  238. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/classdot.py +0 -0
  239. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/LICENSE +0 -0
  240. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/__init__.py +0 -0
  241. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/attrdoc.py +0 -0
  242. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/common.py +0 -0
  243. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/epydoc.py +0 -0
  244. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/google.py +0 -0
  245. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/numpydoc.py +0 -0
  246. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/parser.py +0 -0
  247. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/docstrings/rest.py +0 -0
  248. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/findimports.py +0 -0
  249. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/scripts/__init__.py +0 -0
  250. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/scripts/bumpversion.py +0 -0
  251. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/scripts/execstat.py +0 -0
  252. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/scripts/importtrace.py +0 -0
  253. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/srcheaders.py +0 -0
  254. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/tools/__init__.py +0 -0
  255. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/tools/importscan.py +0 -0
  256. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/py/tools/mkrelimp.py +0 -0
  257. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/__init__.py +0 -0
  258. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/__main__.py +0 -0
  259. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/cexts.py +0 -0
  260. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/cli.py +0 -0
  261. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/configs.py +0 -0
  262. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/inject.py +0 -0
  263. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/pkg.py +0 -0
  264. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/reqs.py +0 -0
  265. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/resources/__init__.py +0 -0
  266. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/resources/docker-dev.sh +0 -0
  267. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/resources/python.sh +0 -0
  268. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/pyproject/venvs.py +0 -0
  269. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/scripts/__init__.py +0 -0
  270. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/scripts/slowcat.py +0 -0
  271. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/scripts/tmpexec.py +0 -0
  272. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tagstrings.py +0 -0
  273. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tokens/__init__.py +0 -0
  274. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tokens/all.py +0 -0
  275. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tokens/tokenizert.py +0 -0
  276. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tokens/utils.py +0 -0
  277. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/__init__.py +0 -0
  278. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/antlr/__init__.py +0 -0
  279. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/antlr/__main__.py +0 -0
  280. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/antlr/cli.py +0 -0
  281. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/antlr/consts.py +0 -0
  282. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/antlr/gen.py +0 -0
  283. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/cloc.py +0 -0
  284. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/diff.py +0 -0
  285. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/doc.py +0 -0
  286. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/docker.py +0 -0
  287. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/git/__init__.py +0 -0
  288. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/git/__main__.py +0 -0
  289. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/git/cli.py +0 -0
  290. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/git/consts.py +0 -0
  291. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/git/messages.py +0 -0
  292. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/intellij.py +0 -0
  293. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/__init__.py +0 -0
  294. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/__main__.py +0 -0
  295. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/formats.py +0 -0
  296. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/json/io.py +0 -0
  297. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/jsonview/__init__.py +0 -0
  298. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/jsonview/__main__.py +0 -0
  299. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/jsonview/cli.py +0 -0
  300. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/jsonview/resources/__init__.py +0 -0
  301. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  302. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  303. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/linehisto.py +0 -0
  304. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/mkenv.py +0 -0
  305. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/notebook.py +0 -0
  306. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/pawk/__init__.py +0 -0
  307. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/pawk/__main__.py +0 -0
  308. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/pawk/pawk.py +0 -0
  309. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/pip.py +0 -0
  310. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/prof.py +0 -0
  311. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/qr.py +0 -0
  312. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/shadow.py +0 -0
  313. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/shell.py +0 -0
  314. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev/tools/sqlrepl.py +0 -0
  315. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev.egg-info/SOURCES.txt +0 -0
  316. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev.egg-info/dependency_links.txt +0 -0
  317. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev.egg-info/entry_points.txt +0 -0
  318. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/omdev.egg-info/top_level.txt +0 -0
  319. {omdev-0.0.0.dev355 → omdev-0.0.0.dev357}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev355
3
+ Version: 0.0.0.dev357
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.13
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev355
15
+ Requires-Dist: omlish==0.0.0.dev357
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": 186,
42
+ "line": 193,
43
43
  "value": {
44
44
  "$.cli.types.CliModule": {
45
45
  "cmd_name": "cli",
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  import asyncio
3
3
  import contextlib
4
4
  import logging
@@ -1,4 +1,4 @@
1
- # ruff: noqa: UP006 UP007 UP045
1
+ # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  import abc
3
3
  import contextlib
4
4
  import shlex
@@ -91,11 +91,17 @@ class CliCli(ap.Cli):
91
91
  ap.arg('--local', action='store_true'),
92
92
  ap.arg('--no-deps', action='store_true'),
93
93
  ap.arg('--dry-run', action='store_true'),
94
+ ap.arg('--version'),
94
95
  ap.arg('extra_deps', nargs='*'),
95
96
  )
96
97
  def reinstall(self) -> None:
97
98
  latest_version = _parse_latest_version_str(lookup_latest_package_version(__package__.split('.')[0]))
98
99
 
100
+ if self.args.version is not None:
101
+ target_version: str = self.args.version
102
+ else:
103
+ target_version = latest_version
104
+
99
105
  #
100
106
 
101
107
  dep_set: set[str] = set(self.args.extra_deps or [])
@@ -142,6 +148,7 @@ class CliCli(ap.Cli):
142
148
 
143
149
  print(f'Current version: {__about__.__version__}')
144
150
  print(f'Latest version: {latest_version}')
151
+ print(f'Target version: {target_version}')
145
152
  print()
146
153
 
147
154
  #
@@ -163,7 +170,7 @@ class CliCli(ap.Cli):
163
170
  reco_cmd = ' '.join([
164
171
  'curl -LsSf',
165
172
  f"'{url}'" if (qu := shlex.quote(url)) == url else qu,
166
- f'| python3 - --version {shlex.quote(latest_version)}',
173
+ f'| python3 - --version {shlex.quote(target_version)}',
167
174
  *deps,
168
175
  ])
169
176
  print(f'Recovery command:\n\n{reco_cmd}\n')
@@ -178,7 +185,7 @@ class CliCli(ap.Cli):
178
185
  sys.executable,
179
186
  sys.executable,
180
187
  '-c', install_src,
181
- '--version', latest_version,
188
+ '--version', target_version,
182
189
  *deps,
183
190
  )
184
191
 
@@ -25,6 +25,9 @@ from .resolvers import InterpResolverProviders
25
25
  from .types import InterpSpecifier
26
26
 
27
27
 
28
+ ##
29
+
30
+
28
31
  class InterpCli(ArgparseCli):
29
32
  @cached_nullary
30
33
  def injector(self) -> Injector:
@@ -5,6 +5,9 @@ from .inject import bind_interp
5
5
  from .resolvers import InterpResolver
6
6
 
7
7
 
8
+ ##
9
+
10
+
8
11
  @cached_nullary
9
12
  def get_default_interp_resolver() -> InterpResolver:
10
13
  return inj.create_injector(bind_interp())[InterpResolver]
@@ -15,6 +15,10 @@ from .pyenv.provider import PyenvInterpProvider
15
15
  from .resolvers import InterpResolver
16
16
  from .resolvers import InterpResolverProviders
17
17
  from .uv.inject import bind_interp_uv
18
+ from .uv.provider import UvInterpProvider
19
+
20
+
21
+ ##
18
22
 
19
23
 
20
24
  def bind_interp() -> InjectorBindings:
@@ -36,6 +40,7 @@ def bind_interp() -> InjectorBindings:
36
40
  injector.provide(c)
37
41
  for c in [
38
42
  PyenvInterpProvider,
43
+ UvInterpProvider,
39
44
  RunningInterpProvider,
40
45
  SystemInterpProvider,
41
46
  ]
@@ -12,6 +12,9 @@ from .types import InterpOpts
12
12
  from .types import InterpVersion
13
13
 
14
14
 
15
+ ##
16
+
17
+
15
18
  @dc.dataclass(frozen=True)
16
19
  class InterpInspection:
17
20
  exe: str
@@ -11,6 +11,9 @@ from .running import RunningInterpProvider
11
11
  from .system import SystemInterpProvider
12
12
 
13
13
 
14
+ ##
15
+
16
+
14
17
  def bind_interp_providers() -> InjectorBindings:
15
18
  lst: ta.List[InjectorBindingOrBindings] = [
16
19
  inj.bind_array(InterpProvider),
@@ -10,6 +10,9 @@ from ..types import InterpVersion
10
10
  from .base import InterpProvider
11
11
 
12
12
 
13
+ ##
14
+
15
+
13
16
  class RunningInterpProvider(InterpProvider):
14
17
  @cached_nullary
15
18
  def version(self) -> InterpVersion:
@@ -36,6 +36,9 @@ from omlish.lite.check import check
36
36
  from omlish.lite.logs import log
37
37
 
38
38
 
39
+ ##
40
+
41
+
39
42
  class StandalonePythons:
40
43
  LAST_TAG_FOR_I686_LINUX = '118809599' # tag name: "20230826"
41
44
 
@@ -10,6 +10,9 @@ from .provider import PyenvInterpProvider
10
10
  from .pyenv import Pyenv
11
11
 
12
12
 
13
+ ##
14
+
15
+
13
16
  def bind_interp_pyenv() -> InjectorBindings:
14
17
  lst: ta.List[InjectorBindingOrBindings] = [
15
18
  inj.bind(Pyenv, singleton=True),
@@ -17,6 +17,9 @@ from .install import PyenvVersionInstaller
17
17
  from .pyenv import Pyenv
18
18
 
19
19
 
20
+ ##
21
+
22
+
20
23
  class PyenvInterpProvider(InterpProvider):
21
24
  @dc.dataclass(frozen=True)
22
25
  class Options:
@@ -19,6 +19,9 @@ from omlish.lite.cached import async_cached_nullary
19
19
  from omlish.lite.check import check
20
20
 
21
21
 
22
+ ##
23
+
24
+
22
25
  class Pyenv:
23
26
  def __init__(
24
27
  self,
@@ -9,6 +9,9 @@ from .types import InterpSpecifier
9
9
  from .types import InterpVersion
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  @dc.dataclass(frozen=True)
13
16
  class InterpResolverProviders:
14
17
  providers: ta.Sequence[ta.Tuple[str, InterpProvider]]
@@ -0,0 +1,24 @@
1
+ # ruff: noqa: UP006 UP007 UP045
2
+ import typing as ta
3
+
4
+ from omlish.lite.inject import InjectorBindingOrBindings
5
+ from omlish.lite.inject import InjectorBindings
6
+ from omlish.lite.inject import inj
7
+
8
+ from ..providers.base import InterpProvider
9
+ from .provider import UvInterpProvider
10
+ from .uv import Uv
11
+
12
+
13
+ ##
14
+
15
+
16
+ def bind_interp_uv() -> InjectorBindings:
17
+ lst: ta.List[InjectorBindingOrBindings] = [
18
+ inj.bind(Uv, singleton=True),
19
+
20
+ inj.bind(UvInterpProvider, singleton=True),
21
+ inj.bind(InterpProvider, to_key=UvInterpProvider, array=True),
22
+ ]
23
+
24
+ return inj.as_bindings(*lst)
@@ -0,0 +1,40 @@
1
+ # ruff: noqa: UP006 UP007 UP045
2
+ """
3
+ uv run pip
4
+ uv run --python 3.11.6 pip
5
+ uv venv --python 3.11.6 --seed barf
6
+ python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
7
+ """
8
+ import logging
9
+ import typing as ta
10
+
11
+ from ..inspect import InterpInspector
12
+ from ..providers.base import InterpProvider
13
+ from ..types import Interp
14
+ from ..types import InterpSpecifier
15
+ from ..types import InterpVersion
16
+ from .uv import Uv
17
+
18
+
19
+ ##
20
+
21
+
22
+ class UvInterpProvider(InterpProvider):
23
+ def __init__(
24
+ self,
25
+ *,
26
+ pyenv: Uv,
27
+ inspector: InterpInspector,
28
+ log: ta.Optional[logging.Logger] = None,
29
+ ) -> None:
30
+ super().__init__()
31
+
32
+ self._pyenv = pyenv
33
+ self._inspector = inspector
34
+ self._log = log
35
+
36
+ async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
37
+ return []
38
+
39
+ async def get_installed_version(self, version: InterpVersion) -> Interp:
40
+ raise NotImplementedError
@@ -12,6 +12,9 @@ from omlish.lite.cached import async_cached_nullary
12
12
  from omlish.lite.check import check
13
13
 
14
14
 
15
+ ##
16
+
17
+
15
18
  @dc.dataclass(frozen=True)
16
19
  class UvConfig:
17
20
  ignore_path: bool = False
@@ -3,6 +3,9 @@ import dataclasses as dc
3
3
  import typing as ta
4
4
 
5
5
 
6
+ ##
7
+
8
+
6
9
  @dc.dataclass(frozen=True)
7
10
  class Magic:
8
11
  key: str
@@ -2,6 +2,9 @@ import json
2
2
  import typing as ta
3
3
 
4
4
 
5
+ ##
6
+
7
+
5
8
  class MagicPrepareError(Exception):
6
9
  pass
7
10
 
@@ -3,6 +3,9 @@ import dataclasses as dc
3
3
  import typing as ta
4
4
 
5
5
 
6
+ ##
7
+
8
+
6
9
  MAGIC_KEY_PREFIX = '@omlish-'
7
10
 
8
11
 
@@ -25,7 +25,7 @@ class GitBlacklistPrecheck(Precheck['GitBlacklistPrecheck.Config']):
25
25
  def __init__(self, config: Config = Config()) -> None:
26
26
  super().__init__(config)
27
27
 
28
- async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
28
+ async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
29
29
  for f in self._config.files:
30
30
  proc = await asyncio.create_subprocess_exec('git', 'status', '-s', f)
31
31
  await proc.communicate()
@@ -35,7 +35,7 @@ class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
35
35
  self._headers_cache = headers_cache
36
36
  self._ast_cache = ast_cache
37
37
 
38
- async def _run_py_file(self, py_file: str, src_root: str) -> ta.AsyncGenerator[Precheck.Violation, None]:
38
+ async def _run_py_file(self, py_file: str, src_root: str) -> ta.AsyncGenerator[Precheck.Violation]:
39
39
  if isinstance(header_lines := self._headers_cache.get_file_headers(py_file), Exception):
40
40
  return
41
41
  if any(hl.src.strip() == '# ruff: noqa' for hl in header_lines):
@@ -58,7 +58,7 @@ class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
58
58
 
59
59
  return
60
60
 
61
- async def _run_src_root(self, src_root: str) -> ta.AsyncGenerator[Precheck.Violation, None]:
61
+ async def _run_src_root(self, src_root: str) -> ta.AsyncGenerator[Precheck.Violation]:
62
62
  py_files = [
63
63
  os.path.join(e.root, f)
64
64
  for e in self._dir_walk_cache.list_dir(src_root)
@@ -70,7 +70,7 @@ class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
70
70
  async for v in self._run_py_file(py_file, src_root):
71
71
  yield v
72
72
 
73
- async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
73
+ async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
74
74
  for src_root in self._context.src_roots:
75
75
  async for v in self._run_src_root(src_root):
76
76
  yield v
@@ -157,7 +157,7 @@ class LitePython8Precheck(Precheck['LitePython8Precheck.Config']):
157
157
  else:
158
158
  raise RuntimeError(f'Unknown target kind: {tgt.kind}')
159
159
 
160
- async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
160
+ async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
161
161
  tgts = await self._collect_targets()
162
162
 
163
163
  sem = asyncio.Semaphore(self._config.concurrency)
@@ -20,7 +20,7 @@ class ManifestsPrecheck(Precheck['ManifestsPrecheck.Config']):
20
20
 
21
21
  self._context = context
22
22
 
23
- async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
23
+ async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
24
24
  for src_root in self._context.src_roots:
25
25
  try:
26
26
  MANIFEST_LOADER.load(src_root)
@@ -26,7 +26,7 @@ class ScriptDepsPrecheck(Precheck['ScriptDepsPrecheck.Config']):
26
26
 
27
27
  self._context = context
28
28
 
29
- async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
29
+ async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
30
30
  for fp in magic.find_magic_files(
31
31
  magic.PY_MAGIC_STYLE,
32
32
  self._context.src_roots,
@@ -5,7 +5,7 @@
5
5
  # @omlish-generated
6
6
  # @omlish-amalg-output ../ci/cli.py
7
7
  # @omlish-git-diff-omit
8
- # ruff: noqa: N802 TC003 UP006 UP007 UP036 UP045
8
+ # ruff: noqa: N802 TC003 UP006 UP007 UP036 UP043 UP045
9
9
  """
10
10
  Inputs:
11
11
  - requirements.txt
@@ -5,7 +5,7 @@
5
5
  # @omlish-generated
6
6
  # @omlish-amalg-output ../interp/cli.py
7
7
  # @omlish-git-diff-omit
8
- # ruff: noqa: N802 UP006 UP007 UP036 UP045
8
+ # ruff: noqa: N802 UP006 UP007 UP036 UP043 UP045
9
9
  """
10
10
  TODO:
11
11
  - partial best-matches - '3.12'
@@ -34,6 +34,7 @@ import shlex
34
34
  import shutil
35
35
  import subprocess
36
36
  import sys
37
+ import tempfile
37
38
  import threading
38
39
  import time
39
40
  import types
@@ -4020,16 +4021,6 @@ class Interp:
4020
4021
  version: InterpVersion
4021
4022
 
4022
4023
 
4023
- ########################################
4024
- # ../uv/inject.py
4025
-
4026
-
4027
- def bind_interp_uv() -> InjectorBindings:
4028
- lst: ta.List[InjectorBindingOrBindings] = []
4029
-
4030
- return inj.as_bindings(*lst)
4031
-
4032
-
4033
4024
  ########################################
4034
4025
  # ../../../omlish/logs/standard.py
4035
4026
  """
@@ -4435,6 +4426,9 @@ class BaseSubprocesses(abc.ABC): # noqa
4435
4426
  # ../resolvers.py
4436
4427
 
4437
4428
 
4429
+ ##
4430
+
4431
+
4438
4432
  @dc.dataclass(frozen=True)
4439
4433
  class InterpResolverProviders:
4440
4434
  providers: ta.Sequence[ta.Tuple[str, InterpProvider]]
@@ -4829,6 +4823,9 @@ asyncio_subprocesses = AsyncioSubprocesses()
4829
4823
  # ../inspect.py
4830
4824
 
4831
4825
 
4826
+ ##
4827
+
4828
+
4832
4829
  @dc.dataclass(frozen=True)
4833
4830
  class InterpInspection:
4834
4831
  exe: str
@@ -4938,6 +4935,9 @@ TODO:
4938
4935
  """
4939
4936
 
4940
4937
 
4938
+ ##
4939
+
4940
+
4941
4941
  class Pyenv:
4942
4942
  def __init__(
4943
4943
  self,
@@ -5005,10 +5005,74 @@ class Pyenv:
5005
5005
  return True
5006
5006
 
5007
5007
 
5008
+ ########################################
5009
+ # ../uv/uv.py
5010
+
5011
+
5012
+ ##
5013
+
5014
+
5015
+ @dc.dataclass(frozen=True)
5016
+ class UvConfig:
5017
+ ignore_path: bool = False
5018
+ pip_bootstrap: bool = True
5019
+
5020
+
5021
+ class Uv:
5022
+ def __init__(
5023
+ self,
5024
+ config: UvConfig = UvConfig(),
5025
+ *,
5026
+ log: ta.Optional[logging.Logger] = None,
5027
+ ) -> None:
5028
+ super().__init__()
5029
+
5030
+ self._config = config
5031
+ self._log = log
5032
+
5033
+ self._bootstrap_dir: ta.Optional[str] = None
5034
+
5035
+ def delete_bootstrap_dir(self) -> bool:
5036
+ if (bs := self._bootstrap_dir) is None:
5037
+ return False
5038
+
5039
+ shutil.rmtree(bs)
5040
+ self._bootstrap_dir = None
5041
+ return True
5042
+
5043
+ @async_cached_nullary
5044
+ async def uv_exe(self) -> ta.Optional[str]:
5045
+ if not self._config.ignore_path and (uv := shutil.which('uv')):
5046
+ return uv
5047
+
5048
+ if self._config.pip_bootstrap:
5049
+ if (bd := self._bootstrap_dir) is None:
5050
+ bd = self._bootstrap_dir = tempfile.mkdtemp()
5051
+
5052
+ if self._log is not None:
5053
+ self._log.info(f'Bootstrapping uv into %s', bd)
5054
+
5055
+ vn = 'uv-bootstrap'
5056
+ await asyncio_subprocesses.check_call(os.path.realpath(sys.executable), '-m', 'venv', vn, cwd=bd)
5057
+
5058
+ vx = os.path.join(bd, vn, 'bin', 'python3')
5059
+ await asyncio_subprocesses.check_call(vx, '-m', 'pip', 'install', 'uv', cwd=bd)
5060
+
5061
+ ux = os.path.join(bd, vn, 'bin', 'uv')
5062
+ check.state(os.path.isfile(ux))
5063
+
5064
+ return ux
5065
+
5066
+ return None
5067
+
5068
+
5008
5069
  ########################################
5009
5070
  # ../providers/running.py
5010
5071
 
5011
5072
 
5073
+ ##
5074
+
5075
+
5012
5076
  class RunningInterpProvider(InterpProvider):
5013
5077
  @cached_nullary
5014
5078
  def version(self) -> InterpVersion:
@@ -5415,10 +5479,47 @@ class PyenvVersionInstaller:
5415
5479
  return exe
5416
5480
 
5417
5481
 
5482
+ ########################################
5483
+ # ../uv/provider.py
5484
+ """
5485
+ uv run pip
5486
+ uv run --python 3.11.6 pip
5487
+ uv venv --python 3.11.6 --seed barf
5488
+ python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
5489
+ """
5490
+
5491
+
5492
+ ##
5493
+
5494
+
5495
+ class UvInterpProvider(InterpProvider):
5496
+ def __init__(
5497
+ self,
5498
+ *,
5499
+ pyenv: Uv,
5500
+ inspector: InterpInspector,
5501
+ log: ta.Optional[logging.Logger] = None,
5502
+ ) -> None:
5503
+ super().__init__()
5504
+
5505
+ self._pyenv = pyenv
5506
+ self._inspector = inspector
5507
+ self._log = log
5508
+
5509
+ async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
5510
+ return []
5511
+
5512
+ async def get_installed_version(self, version: InterpVersion) -> Interp:
5513
+ raise NotImplementedError
5514
+
5515
+
5418
5516
  ########################################
5419
5517
  # ../providers/inject.py
5420
5518
 
5421
5519
 
5520
+ ##
5521
+
5522
+
5422
5523
  def bind_interp_providers() -> InjectorBindings:
5423
5524
  lst: ta.List[InjectorBindingOrBindings] = [
5424
5525
  inj.bind_array(InterpProvider),
@@ -5438,6 +5539,9 @@ def bind_interp_providers() -> InjectorBindings:
5438
5539
  # ../pyenv/provider.py
5439
5540
 
5440
5541
 
5542
+ ##
5543
+
5544
+
5441
5545
  class PyenvInterpProvider(InterpProvider):
5442
5546
  @dc.dataclass(frozen=True)
5443
5547
  class Options:
@@ -5565,10 +5669,31 @@ class PyenvInterpProvider(InterpProvider):
5565
5669
  return Interp(exe, version)
5566
5670
 
5567
5671
 
5672
+ ########################################
5673
+ # ../uv/inject.py
5674
+
5675
+
5676
+ ##
5677
+
5678
+
5679
+ def bind_interp_uv() -> InjectorBindings:
5680
+ lst: ta.List[InjectorBindingOrBindings] = [
5681
+ inj.bind(Uv, singleton=True),
5682
+
5683
+ inj.bind(UvInterpProvider, singleton=True),
5684
+ inj.bind(InterpProvider, to_key=UvInterpProvider, array=True),
5685
+ ]
5686
+
5687
+ return inj.as_bindings(*lst)
5688
+
5689
+
5568
5690
  ########################################
5569
5691
  # ../pyenv/inject.py
5570
5692
 
5571
5693
 
5694
+ ##
5695
+
5696
+
5572
5697
  def bind_interp_pyenv() -> InjectorBindings:
5573
5698
  lst: ta.List[InjectorBindingOrBindings] = [
5574
5699
  inj.bind(Pyenv, singleton=True),
@@ -5584,6 +5709,9 @@ def bind_interp_pyenv() -> InjectorBindings:
5584
5709
  # ../inject.py
5585
5710
 
5586
5711
 
5712
+ ##
5713
+
5714
+
5587
5715
  def bind_interp() -> InjectorBindings:
5588
5716
  lst: ta.List[InjectorBindingOrBindings] = [
5589
5717
  bind_interp_providers(),
@@ -5603,6 +5731,7 @@ def bind_interp() -> InjectorBindings:
5603
5731
  injector.provide(c)
5604
5732
  for c in [
5605
5733
  PyenvInterpProvider,
5734
+ UvInterpProvider,
5606
5735
  RunningInterpProvider,
5607
5736
  SystemInterpProvider,
5608
5737
  ]
@@ -5625,6 +5754,9 @@ def bind_interp() -> InjectorBindings:
5625
5754
  # cli.py
5626
5755
 
5627
5756
 
5757
+ ##
5758
+
5759
+
5628
5760
  class InterpCli(ArgparseCli):
5629
5761
  @cached_nullary
5630
5762
  def injector(self) -> Injector: