omdev 0.0.0.dev181__tar.gz → 0.0.0.dev182__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. {omdev-0.0.0.dev181/omdev.egg-info → omdev-0.0.0.dev182}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/inject.py +1 -1
  3. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/pyenv/inject.py +1 -1
  4. omdev-0.0.0.dev181/omdev/interp/pyenv/pyenv.py → omdev-0.0.0.dev182/omdev/interp/pyenv/install.py +1 -219
  5. omdev-0.0.0.dev182/omdev/interp/pyenv/provider.py +144 -0
  6. omdev-0.0.0.dev182/omdev/interp/pyenv/pyenv.py +86 -0
  7. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/interp.py +104 -102
  8. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/pyproject.py +214 -212
  9. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182/omdev.egg-info}/PKG-INFO +2 -2
  10. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev.egg-info/SOURCES.txt +2 -0
  11. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev.egg-info/requires.txt +1 -1
  12. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/pyproject.toml +2 -2
  13. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/LICENSE +0 -0
  14. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/MANIFEST.in +0 -0
  15. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/README.rst +0 -0
  16. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/.manifests.json +0 -0
  17. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/__about__.py +0 -0
  18. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/__init__.py +0 -0
  19. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/__init__.py +0 -0
  20. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/__main__.py +0 -0
  21. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/gen.py +0 -0
  22. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/imports.py +0 -0
  23. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/main.py +0 -0
  24. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/manifests.py +0 -0
  25. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/resources.py +0 -0
  26. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/srcfiles.py +0 -0
  27. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/strip.py +0 -0
  28. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/types.py +0 -0
  29. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/amalg/typing.py +0 -0
  30. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/antlr/__init__.py +0 -0
  31. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/antlr/consts.py +0 -0
  32. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/antlr/gen.py +0 -0
  33. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/bracepy.py +0 -0
  34. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/__init__.py +0 -0
  35. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/__init__.py +0 -0
  36. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/cache.py +0 -0
  37. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/contexts.py +0 -0
  38. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/currents.py +0 -0
  39. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/fns.py +0 -0
  40. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/resolvers.py +0 -0
  41. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/storage.py +0 -0
  42. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/compute/types.py +0 -0
  43. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/__init__.py +0 -0
  44. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/actions.py +0 -0
  45. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/cache.py +0 -0
  46. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/consts.py +0 -0
  47. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/defaults.py +0 -0
  48. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/manifests.py +0 -0
  49. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cache/data/specs.py +0 -0
  50. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/__init__.py +0 -0
  51. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_boilerplate.cc +0 -0
  52. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/LICENSE +0 -0
  53. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/__init__.py +0 -0
  54. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/build_ext.py +0 -0
  55. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  56. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  57. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/compilers/options.py +0 -0
  58. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  59. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/dir_util.py +0 -0
  60. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/errors.py +0 -0
  61. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/extension.py +0 -0
  62. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/file_util.py +0 -0
  63. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/modified.py +0 -0
  64. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/spawn.py +0 -0
  65. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/sysconfig.py +0 -0
  66. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/util.py +0 -0
  67. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/_distutils/version.py +0 -0
  68. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/build.py +0 -0
  69. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/cmake.py +0 -0
  70. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/importhook.py +0 -0
  71. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/magic.py +0 -0
  72. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cexts/scan.py +0 -0
  73. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/classdot.py +0 -0
  74. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/__init__.py +0 -0
  75. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/__main__.py +0 -0
  76. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/_pathhack.py +0 -0
  77. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/clicli.py +0 -0
  78. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/install.py +0 -0
  79. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/main.py +0 -0
  80. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/managers.py +0 -0
  81. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cli/types.py +0 -0
  82. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/clipboard/__init__.py +0 -0
  83. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/clipboard/clipboard.py +0 -0
  84. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/clipboard/darwin_cf.py +0 -0
  85. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/clipboard/linux_x11.py +0 -0
  86. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/cmake.py +0 -0
  87. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/findimports.py +0 -0
  88. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/git/__init__.py +0 -0
  89. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/git/revisions.py +0 -0
  90. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/git/status.py +0 -0
  91. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/git/subtrees.py +0 -0
  92. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/imgur.py +0 -0
  93. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/__init__.py +0 -0
  94. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/__main__.py +0 -0
  95. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/cli.py +0 -0
  96. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/default.py +0 -0
  97. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/inspect.py +0 -0
  98. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/providers/__init__.py +0 -0
  99. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/providers/base.py +0 -0
  100. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/providers/inject.py +0 -0
  101. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/providers/running.py +0 -0
  102. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/providers/standalone.py +0 -0
  103. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/providers/system.py +0 -0
  104. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/pyenv/__init__.py +0 -0
  105. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/resolvers.py +0 -0
  106. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/types.py +0 -0
  107. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/uv/__init__.py +0 -0
  108. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/uv/inject.py +0 -0
  109. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/uv/uv.py +0 -0
  110. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/interp/venvs.py +0 -0
  111. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/__init__.py +0 -0
  112. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/__main__.py +0 -0
  113. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/cli.py +0 -0
  114. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/find.py +0 -0
  115. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/magic.py +0 -0
  116. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/prepare.py +0 -0
  117. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/magic/styles.py +0 -0
  118. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/manifests/__init__.py +0 -0
  119. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/manifests/__main__.py +0 -0
  120. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/manifests/build.py +0 -0
  121. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/manifests/main.py +0 -0
  122. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/mypy/__init__.py +0 -0
  123. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/mypy/debug.py +0 -0
  124. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/packaging/__init__.py +0 -0
  125. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/packaging/marshal.py +0 -0
  126. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/packaging/names.py +0 -0
  127. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/packaging/requires.py +0 -0
  128. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/packaging/specifiers.py +0 -0
  129. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/packaging/versions.py +0 -0
  130. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pip.py +0 -0
  131. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/__init__.py +0 -0
  132. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/__main__.py +0 -0
  133. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/base.py +0 -0
  134. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/git.py +0 -0
  135. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/lite.py +0 -0
  136. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/main.py +0 -0
  137. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/manifests.py +0 -0
  138. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/precheck/scripts.py +0 -0
  139. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/ptk/__init__.py +0 -0
  140. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/ptk/apps/__init__.py +0 -0
  141. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/ptk/apps/ncdu.py +0 -0
  142. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pycharm/__init__.py +0 -0
  143. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pycharm/__main__.py +0 -0
  144. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pycharm/cli.py +0 -0
  145. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/__init__.py +0 -0
  146. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/__main__.py +0 -0
  147. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/cexts.py +0 -0
  148. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/cli.py +0 -0
  149. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/configs.py +0 -0
  150. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/inject.py +0 -0
  151. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/pkg.py +0 -0
  152. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/reqs.py +0 -0
  153. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/pyproject/venvs.py +0 -0
  154. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/revisions.py +0 -0
  155. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/__init__.py +0 -0
  156. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/bumpversion.py +0 -0
  157. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/execrss.py +0 -0
  158. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/exectime.py +0 -0
  159. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/importtrace.py +0 -0
  160. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/slowcat.py +0 -0
  161. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/scripts/tmpexec.py +0 -0
  162. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/secrets.py +0 -0
  163. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tokens.py +0 -0
  164. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/toml/__init__.py +0 -0
  165. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/toml/parser.py +0 -0
  166. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/toml/writer.py +0 -0
  167. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/__init__.py +0 -0
  168. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/cloc.py +0 -0
  169. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/doc.py +0 -0
  170. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/docker.py +0 -0
  171. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/git.py +0 -0
  172. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/importscan.py +0 -0
  173. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/__init__.py +0 -0
  174. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/__main__.py +0 -0
  175. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/cli.py +0 -0
  176. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/formats.py +0 -0
  177. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/io.py +0 -0
  178. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/parsing.py +0 -0
  179. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/processing.py +0 -0
  180. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/json/rendering.py +0 -0
  181. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/mkrelimp.py +0 -0
  182. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/notebook.py +0 -0
  183. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/pawk/__init__.py +0 -0
  184. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/pawk/__main__.py +0 -0
  185. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/pawk/pawk.py +0 -0
  186. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/pip.py +0 -0
  187. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/prof.py +0 -0
  188. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/qr.py +0 -0
  189. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/tools/sqlrepl.py +0 -0
  190. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev/wheelfile.py +0 -0
  191. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev.egg-info/dependency_links.txt +0 -0
  192. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev.egg-info/entry_points.txt +0 -0
  193. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/omdev.egg-info/top_level.txt +0 -0
  194. {omdev-0.0.0.dev181 → omdev-0.0.0.dev182}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev181
3
+ Version: 0.0.0.dev182
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.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev181
15
+ Requires-Dist: omlish==0.0.0.dev182
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -11,7 +11,7 @@ from .providers.inject import bind_interp_providers
11
11
  from .providers.running import RunningInterpProvider
12
12
  from .providers.system import SystemInterpProvider
13
13
  from .pyenv.inject import bind_interp_pyenv
14
- from .pyenv.pyenv import PyenvInterpProvider
14
+ 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
@@ -6,8 +6,8 @@ from omlish.lite.inject import InjectorBindings
6
6
  from omlish.lite.inject import inj
7
7
 
8
8
  from ..providers.base import InterpProvider
9
+ from .provider import PyenvInterpProvider
9
10
  from .pyenv import Pyenv
10
- from .pyenv import PyenvInterpProvider
11
11
 
12
12
 
13
13
  def bind_interp_pyenv() -> InjectorBindings:
@@ -1,19 +1,7 @@
1
1
  # ruff: noqa: UP006 UP007
2
- """
3
- TODO:
4
- - custom tags
5
- - 'aliases'
6
- - https://github.com/pyenv/pyenv/pull/2966
7
- - https://github.com/pyenv/pyenv/issues/218 (lol)
8
- - probably need custom (temp?) definition file
9
- - *or* python-build directly just into the versions dir?
10
- - optionally install / upgrade pyenv itself
11
- - new vers dont need these custom mac opts, only run on old vers
12
- """
13
2
  import abc
14
3
  import dataclasses as dc
15
4
  import itertools
16
- import logging
17
5
  import os.path
18
6
  import shutil
19
7
  import sys
@@ -24,84 +12,8 @@ from omlish.lite.cached import async_cached_nullary
24
12
  from omlish.lite.cached import cached_nullary
25
13
  from omlish.lite.check import check
26
14
 
27
- from ...packaging.versions import InvalidVersion
28
- from ...packaging.versions import Version
29
- from ..inspect import InterpInspector
30
- from ..providers.base import InterpProvider
31
- from ..types import Interp
32
15
  from ..types import InterpOpts
33
- from ..types import InterpSpecifier
34
- from ..types import InterpVersion
35
-
36
-
37
- ##
38
-
39
-
40
- class Pyenv:
41
- def __init__(
42
- self,
43
- *,
44
- root: ta.Optional[str] = None,
45
- ) -> None:
46
- if root is not None and not (isinstance(root, str) and root):
47
- raise ValueError(f'pyenv_root: {root!r}')
48
-
49
- super().__init__()
50
-
51
- self._root_kw = root
52
-
53
- @async_cached_nullary
54
- async def root(self) -> ta.Optional[str]:
55
- if self._root_kw is not None:
56
- return self._root_kw
57
-
58
- if shutil.which('pyenv'):
59
- return await asyncio_subprocesses.check_output_str('pyenv', 'root')
60
-
61
- d = os.path.expanduser('~/.pyenv')
62
- if os.path.isdir(d) and os.path.isfile(os.path.join(d, 'bin', 'pyenv')):
63
- return d
64
-
65
- return None
66
-
67
- @async_cached_nullary
68
- async def exe(self) -> str:
69
- return os.path.join(check.not_none(await self.root()), 'bin', 'pyenv')
70
-
71
- async def version_exes(self) -> ta.List[ta.Tuple[str, str]]:
72
- if (root := await self.root()) is None:
73
- return []
74
- ret = []
75
- vp = os.path.join(root, 'versions')
76
- if os.path.isdir(vp):
77
- for dn in os.listdir(vp):
78
- ep = os.path.join(vp, dn, 'bin', 'python')
79
- if not os.path.isfile(ep):
80
- continue
81
- ret.append((dn, ep))
82
- return ret
83
-
84
- async def installable_versions(self) -> ta.List[str]:
85
- if await self.root() is None:
86
- return []
87
- ret = []
88
- s = await asyncio_subprocesses.check_output_str(await self.exe(), 'install', '--list')
89
- for l in s.splitlines():
90
- if not l.startswith(' '):
91
- continue
92
- l = l.strip()
93
- if not l:
94
- continue
95
- ret.append(l)
96
- return ret
97
-
98
- async def update(self) -> bool:
99
- if (root := await self.root()) is None:
100
- return False
101
- if not os.path.isdir(os.path.join(root, '.git')):
102
- return False
103
- await asyncio_subprocesses.check_call('git', 'pull', cwd=root)
104
- return True
16
+ from .pyenv import Pyenv
105
17
 
106
18
 
107
19
  ##
@@ -337,133 +249,3 @@ class PyenvVersionInstaller:
337
249
  if not os.path.isfile(exe):
338
250
  raise RuntimeError(f'Interpreter not found: {exe}')
339
251
  return exe
340
-
341
-
342
- ##
343
-
344
-
345
- class PyenvInterpProvider(InterpProvider):
346
- @dc.dataclass(frozen=True)
347
- class Options:
348
- inspect: bool = False
349
-
350
- try_update: bool = False
351
-
352
- def __init__(
353
- self,
354
- options: Options = Options(),
355
- *,
356
- pyenv: Pyenv,
357
- inspector: InterpInspector,
358
- log: ta.Optional[logging.Logger] = None,
359
- ) -> None:
360
- super().__init__()
361
-
362
- self._options = options
363
-
364
- self._pyenv = pyenv
365
- self._inspector = inspector
366
- self._log = log
367
-
368
- #
369
-
370
- @staticmethod
371
- def guess_version(s: str) -> ta.Optional[InterpVersion]:
372
- def strip_sfx(s: str, sfx: str) -> ta.Tuple[str, bool]:
373
- if s.endswith(sfx):
374
- return s[:-len(sfx)], True
375
- return s, False
376
- ok = {}
377
- s, ok['debug'] = strip_sfx(s, '-debug')
378
- s, ok['threaded'] = strip_sfx(s, 't')
379
- try:
380
- v = Version(s)
381
- except InvalidVersion:
382
- return None
383
- return InterpVersion(v, InterpOpts(**ok))
384
-
385
- class Installed(ta.NamedTuple):
386
- name: str
387
- exe: str
388
- version: InterpVersion
389
-
390
- async def _make_installed(self, vn: str, ep: str) -> ta.Optional[Installed]:
391
- iv: ta.Optional[InterpVersion]
392
- if self._options.inspect:
393
- try:
394
- iv = check.not_none(await self._inspector.inspect(ep)).iv
395
- except Exception as e: # noqa
396
- return None
397
- else:
398
- iv = self.guess_version(vn)
399
- if iv is None:
400
- return None
401
- return PyenvInterpProvider.Installed(
402
- name=vn,
403
- exe=ep,
404
- version=iv,
405
- )
406
-
407
- async def installed(self) -> ta.Sequence[Installed]:
408
- ret: ta.List[PyenvInterpProvider.Installed] = []
409
- for vn, ep in await self._pyenv.version_exes():
410
- if (i := await self._make_installed(vn, ep)) is None:
411
- if self._log is not None:
412
- self._log.debug('Invalid pyenv version: %s', vn)
413
- continue
414
- ret.append(i)
415
- return ret
416
-
417
- #
418
-
419
- async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
420
- return [i.version for i in await self.installed()]
421
-
422
- async def get_installed_version(self, version: InterpVersion) -> Interp:
423
- for i in await self.installed():
424
- if i.version == version:
425
- return Interp(
426
- exe=i.exe,
427
- version=i.version,
428
- )
429
- raise KeyError(version)
430
-
431
- #
432
-
433
- async def _get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
434
- lst = []
435
-
436
- for vs in await self._pyenv.installable_versions():
437
- if (iv := self.guess_version(vs)) is None:
438
- continue
439
- if iv.opts.debug:
440
- raise Exception('Pyenv installable versions not expected to have debug suffix')
441
- for d in [False, True]:
442
- lst.append(dc.replace(iv, opts=dc.replace(iv.opts, debug=d)))
443
-
444
- return lst
445
-
446
- async def get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
447
- lst = await self._get_installable_versions(spec)
448
-
449
- if self._options.try_update and not any(v in spec for v in lst):
450
- if self._pyenv.update():
451
- lst = await self._get_installable_versions(spec)
452
-
453
- return lst
454
-
455
- async def install_version(self, version: InterpVersion) -> Interp:
456
- inst_version = str(version.version)
457
- inst_opts = version.opts
458
- if inst_opts.threaded:
459
- inst_version += 't'
460
- inst_opts = dc.replace(inst_opts, threaded=False)
461
-
462
- installer = PyenvVersionInstaller(
463
- inst_version,
464
- interp_opts=inst_opts,
465
- pyenv=self._pyenv,
466
- )
467
-
468
- exe = await installer.install()
469
- return Interp(exe, version)
@@ -0,0 +1,144 @@
1
+ # ruff: noqa: UP006 UP007
2
+ import dataclasses as dc
3
+ import logging
4
+ import typing as ta
5
+
6
+ from omlish.lite.check import check
7
+
8
+ from ...packaging.versions import InvalidVersion
9
+ from ...packaging.versions import Version
10
+ from ..inspect import InterpInspector
11
+ from ..providers.base import InterpProvider
12
+ from ..types import Interp
13
+ from ..types import InterpOpts
14
+ from ..types import InterpSpecifier
15
+ from ..types import InterpVersion
16
+ from .install import PyenvVersionInstaller
17
+ from .pyenv import Pyenv
18
+
19
+
20
+ class PyenvInterpProvider(InterpProvider):
21
+ @dc.dataclass(frozen=True)
22
+ class Options:
23
+ inspect: bool = False
24
+
25
+ try_update: bool = False
26
+
27
+ def __init__(
28
+ self,
29
+ options: Options = Options(),
30
+ *,
31
+ pyenv: Pyenv,
32
+ inspector: InterpInspector,
33
+ log: ta.Optional[logging.Logger] = None,
34
+ ) -> None:
35
+ super().__init__()
36
+
37
+ self._options = options
38
+
39
+ self._pyenv = pyenv
40
+ self._inspector = inspector
41
+ self._log = log
42
+
43
+ #
44
+
45
+ @staticmethod
46
+ def guess_version(s: str) -> ta.Optional[InterpVersion]:
47
+ def strip_sfx(s: str, sfx: str) -> ta.Tuple[str, bool]:
48
+ if s.endswith(sfx):
49
+ return s[:-len(sfx)], True
50
+ return s, False
51
+ ok = {}
52
+ s, ok['debug'] = strip_sfx(s, '-debug')
53
+ s, ok['threaded'] = strip_sfx(s, 't')
54
+ try:
55
+ v = Version(s)
56
+ except InvalidVersion:
57
+ return None
58
+ return InterpVersion(v, InterpOpts(**ok))
59
+
60
+ class Installed(ta.NamedTuple):
61
+ name: str
62
+ exe: str
63
+ version: InterpVersion
64
+
65
+ async def _make_installed(self, vn: str, ep: str) -> ta.Optional[Installed]:
66
+ iv: ta.Optional[InterpVersion]
67
+ if self._options.inspect:
68
+ try:
69
+ iv = check.not_none(await self._inspector.inspect(ep)).iv
70
+ except Exception as e: # noqa
71
+ return None
72
+ else:
73
+ iv = self.guess_version(vn)
74
+ if iv is None:
75
+ return None
76
+ return PyenvInterpProvider.Installed(
77
+ name=vn,
78
+ exe=ep,
79
+ version=iv,
80
+ )
81
+
82
+ async def installed(self) -> ta.Sequence[Installed]:
83
+ ret: ta.List[PyenvInterpProvider.Installed] = []
84
+ for vn, ep in await self._pyenv.version_exes():
85
+ if (i := await self._make_installed(vn, ep)) is None:
86
+ if self._log is not None:
87
+ self._log.debug('Invalid pyenv version: %s', vn)
88
+ continue
89
+ ret.append(i)
90
+ return ret
91
+
92
+ #
93
+
94
+ async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
95
+ return [i.version for i in await self.installed()]
96
+
97
+ async def get_installed_version(self, version: InterpVersion) -> Interp:
98
+ for i in await self.installed():
99
+ if i.version == version:
100
+ return Interp(
101
+ exe=i.exe,
102
+ version=i.version,
103
+ )
104
+ raise KeyError(version)
105
+
106
+ #
107
+
108
+ async def _get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
109
+ lst = []
110
+
111
+ for vs in await self._pyenv.installable_versions():
112
+ if (iv := self.guess_version(vs)) is None:
113
+ continue
114
+ if iv.opts.debug:
115
+ raise Exception('Pyenv installable versions not expected to have debug suffix')
116
+ for d in [False, True]:
117
+ lst.append(dc.replace(iv, opts=dc.replace(iv.opts, debug=d)))
118
+
119
+ return lst
120
+
121
+ async def get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
122
+ lst = await self._get_installable_versions(spec)
123
+
124
+ if self._options.try_update and not any(v in spec for v in lst):
125
+ if self._pyenv.update():
126
+ lst = await self._get_installable_versions(spec)
127
+
128
+ return lst
129
+
130
+ async def install_version(self, version: InterpVersion) -> Interp:
131
+ inst_version = str(version.version)
132
+ inst_opts = version.opts
133
+ if inst_opts.threaded:
134
+ inst_version += 't'
135
+ inst_opts = dc.replace(inst_opts, threaded=False)
136
+
137
+ installer = PyenvVersionInstaller(
138
+ inst_version,
139
+ interp_opts=inst_opts,
140
+ pyenv=self._pyenv,
141
+ )
142
+
143
+ exe = await installer.install()
144
+ return Interp(exe, version)
@@ -0,0 +1,86 @@
1
+ # ruff: noqa: UP006 UP007
2
+ """
3
+ TODO:
4
+ - custom tags
5
+ - 'aliases'
6
+ - https://github.com/pyenv/pyenv/pull/2966
7
+ - https://github.com/pyenv/pyenv/issues/218 (lol)
8
+ - probably need custom (temp?) definition file
9
+ - *or* python-build directly just into the versions dir?
10
+ - optionally install / upgrade pyenv itself
11
+ - new vers dont need these custom mac opts, only run on old vers
12
+ """
13
+ import os.path
14
+ import shutil
15
+ import typing as ta
16
+
17
+ from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
18
+ from omlish.lite.cached import async_cached_nullary
19
+ from omlish.lite.check import check
20
+
21
+
22
+ class Pyenv:
23
+ def __init__(
24
+ self,
25
+ *,
26
+ root: ta.Optional[str] = None,
27
+ ) -> None:
28
+ if root is not None and not (isinstance(root, str) and root):
29
+ raise ValueError(f'pyenv_root: {root!r}')
30
+
31
+ super().__init__()
32
+
33
+ self._root_kw = root
34
+
35
+ @async_cached_nullary
36
+ async def root(self) -> ta.Optional[str]:
37
+ if self._root_kw is not None:
38
+ return self._root_kw
39
+
40
+ if shutil.which('pyenv'):
41
+ return await asyncio_subprocesses.check_output_str('pyenv', 'root')
42
+
43
+ d = os.path.expanduser('~/.pyenv')
44
+ if os.path.isdir(d) and os.path.isfile(os.path.join(d, 'bin', 'pyenv')):
45
+ return d
46
+
47
+ return None
48
+
49
+ @async_cached_nullary
50
+ async def exe(self) -> str:
51
+ return os.path.join(check.not_none(await self.root()), 'bin', 'pyenv')
52
+
53
+ async def version_exes(self) -> ta.List[ta.Tuple[str, str]]:
54
+ if (root := await self.root()) is None:
55
+ return []
56
+ ret = []
57
+ vp = os.path.join(root, 'versions')
58
+ if os.path.isdir(vp):
59
+ for dn in os.listdir(vp):
60
+ ep = os.path.join(vp, dn, 'bin', 'python')
61
+ if not os.path.isfile(ep):
62
+ continue
63
+ ret.append((dn, ep))
64
+ return ret
65
+
66
+ async def installable_versions(self) -> ta.List[str]:
67
+ if await self.root() is None:
68
+ return []
69
+ ret = []
70
+ s = await asyncio_subprocesses.check_output_str(await self.exe(), 'install', '--list')
71
+ for l in s.splitlines():
72
+ if not l.startswith(' '):
73
+ continue
74
+ l = l.strip()
75
+ if not l:
76
+ continue
77
+ ret.append(l)
78
+ return ret
79
+
80
+ async def update(self) -> bool:
81
+ if (root := await self.root()) is None:
82
+ return False
83
+ if not os.path.isdir(os.path.join(root, '.git')):
84
+ return False
85
+ await asyncio_subprocesses.check_call('git', 'pull', cwd=root)
86
+ return True