omdev 0.0.0.dev180__tar.gz → 0.0.0.dev181__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. {omdev-0.0.0.dev180/omdev.egg-info → omdev-0.0.0.dev181}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/inspect.py +9 -4
  3. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/providers/system.py +5 -2
  4. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/pyenv/pyenv.py +5 -2
  5. {omdev-0.0.0.dev180/omdev/pyproject → omdev-0.0.0.dev181/omdev/interp}/venvs.py +41 -41
  6. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/configs.py +3 -4
  7. omdev-0.0.0.dev181/omdev/pyproject/inject.py +12 -0
  8. omdev-0.0.0.dev181/omdev/pyproject/venvs.py +78 -0
  9. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/interp.py +17 -12
  10. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/pyproject.py +252 -120
  11. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181/omdev.egg-info}/PKG-INFO +2 -2
  12. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev.egg-info/SOURCES.txt +2 -0
  13. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev.egg-info/requires.txt +1 -1
  14. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/pyproject.toml +2 -2
  15. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/LICENSE +0 -0
  16. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/MANIFEST.in +0 -0
  17. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/README.rst +0 -0
  18. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/.manifests.json +0 -0
  19. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/__about__.py +0 -0
  20. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/__init__.py +0 -0
  21. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/__init__.py +0 -0
  22. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/__main__.py +0 -0
  23. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/gen.py +0 -0
  24. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/imports.py +0 -0
  25. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/main.py +0 -0
  26. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/manifests.py +0 -0
  27. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/resources.py +0 -0
  28. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/srcfiles.py +0 -0
  29. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/strip.py +0 -0
  30. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/types.py +0 -0
  31. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/amalg/typing.py +0 -0
  32. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/antlr/__init__.py +0 -0
  33. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/antlr/consts.py +0 -0
  34. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/antlr/gen.py +0 -0
  35. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/bracepy.py +0 -0
  36. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/__init__.py +0 -0
  37. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/__init__.py +0 -0
  38. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/cache.py +0 -0
  39. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/contexts.py +0 -0
  40. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/currents.py +0 -0
  41. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/fns.py +0 -0
  42. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/resolvers.py +0 -0
  43. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/storage.py +0 -0
  44. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/compute/types.py +0 -0
  45. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/__init__.py +0 -0
  46. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/actions.py +0 -0
  47. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/cache.py +0 -0
  48. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/consts.py +0 -0
  49. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/defaults.py +0 -0
  50. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/manifests.py +0 -0
  51. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cache/data/specs.py +0 -0
  52. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/__init__.py +0 -0
  53. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_boilerplate.cc +0 -0
  54. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/LICENSE +0 -0
  55. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/__init__.py +0 -0
  56. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/build_ext.py +0 -0
  57. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  58. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  59. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/compilers/options.py +0 -0
  60. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  61. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/dir_util.py +0 -0
  62. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/errors.py +0 -0
  63. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/extension.py +0 -0
  64. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/file_util.py +0 -0
  65. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/modified.py +0 -0
  66. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/spawn.py +0 -0
  67. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/sysconfig.py +0 -0
  68. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/util.py +0 -0
  69. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/_distutils/version.py +0 -0
  70. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/build.py +0 -0
  71. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/cmake.py +0 -0
  72. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/importhook.py +0 -0
  73. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/magic.py +0 -0
  74. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cexts/scan.py +0 -0
  75. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/classdot.py +0 -0
  76. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/__init__.py +0 -0
  77. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/__main__.py +0 -0
  78. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/_pathhack.py +0 -0
  79. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/clicli.py +0 -0
  80. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/install.py +0 -0
  81. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/main.py +0 -0
  82. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/managers.py +0 -0
  83. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cli/types.py +0 -0
  84. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/clipboard/__init__.py +0 -0
  85. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/clipboard/clipboard.py +0 -0
  86. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/clipboard/darwin_cf.py +0 -0
  87. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/clipboard/linux_x11.py +0 -0
  88. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/cmake.py +0 -0
  89. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/findimports.py +0 -0
  90. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/git/__init__.py +0 -0
  91. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/git/revisions.py +0 -0
  92. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/git/status.py +0 -0
  93. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/git/subtrees.py +0 -0
  94. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/imgur.py +0 -0
  95. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/__init__.py +0 -0
  96. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/__main__.py +0 -0
  97. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/cli.py +0 -0
  98. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/default.py +0 -0
  99. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/inject.py +0 -0
  100. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/providers/__init__.py +0 -0
  101. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/providers/base.py +0 -0
  102. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/providers/inject.py +0 -0
  103. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/providers/running.py +0 -0
  104. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/providers/standalone.py +0 -0
  105. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/pyenv/__init__.py +0 -0
  106. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/pyenv/inject.py +0 -0
  107. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/resolvers.py +0 -0
  108. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/types.py +0 -0
  109. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/uv/__init__.py +0 -0
  110. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/uv/inject.py +0 -0
  111. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/interp/uv/uv.py +0 -0
  112. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/__init__.py +0 -0
  113. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/__main__.py +0 -0
  114. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/cli.py +0 -0
  115. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/find.py +0 -0
  116. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/magic.py +0 -0
  117. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/prepare.py +0 -0
  118. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/magic/styles.py +0 -0
  119. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/manifests/__init__.py +0 -0
  120. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/manifests/__main__.py +0 -0
  121. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/manifests/build.py +0 -0
  122. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/manifests/main.py +0 -0
  123. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/mypy/__init__.py +0 -0
  124. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/mypy/debug.py +0 -0
  125. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/packaging/__init__.py +0 -0
  126. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/packaging/marshal.py +0 -0
  127. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/packaging/names.py +0 -0
  128. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/packaging/requires.py +0 -0
  129. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/packaging/specifiers.py +0 -0
  130. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/packaging/versions.py +0 -0
  131. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pip.py +0 -0
  132. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/__init__.py +0 -0
  133. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/__main__.py +0 -0
  134. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/base.py +0 -0
  135. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/git.py +0 -0
  136. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/lite.py +0 -0
  137. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/main.py +0 -0
  138. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/manifests.py +0 -0
  139. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/precheck/scripts.py +0 -0
  140. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/ptk/__init__.py +0 -0
  141. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/ptk/apps/__init__.py +0 -0
  142. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/ptk/apps/ncdu.py +0 -0
  143. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pycharm/__init__.py +0 -0
  144. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pycharm/__main__.py +0 -0
  145. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pycharm/cli.py +0 -0
  146. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/__init__.py +0 -0
  147. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/__main__.py +0 -0
  148. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/cexts.py +0 -0
  149. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/cli.py +0 -0
  150. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/pkg.py +0 -0
  151. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/pyproject/reqs.py +0 -0
  152. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/revisions.py +0 -0
  153. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/__init__.py +0 -0
  154. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/bumpversion.py +0 -0
  155. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/execrss.py +0 -0
  156. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/exectime.py +0 -0
  157. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/importtrace.py +0 -0
  158. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/slowcat.py +0 -0
  159. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/scripts/tmpexec.py +0 -0
  160. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/secrets.py +0 -0
  161. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tokens.py +0 -0
  162. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/toml/__init__.py +0 -0
  163. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/toml/parser.py +0 -0
  164. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/toml/writer.py +0 -0
  165. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/__init__.py +0 -0
  166. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/cloc.py +0 -0
  167. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/doc.py +0 -0
  168. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/docker.py +0 -0
  169. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/git.py +0 -0
  170. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/importscan.py +0 -0
  171. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/__init__.py +0 -0
  172. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/__main__.py +0 -0
  173. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/cli.py +0 -0
  174. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/formats.py +0 -0
  175. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/io.py +0 -0
  176. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/parsing.py +0 -0
  177. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/processing.py +0 -0
  178. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/json/rendering.py +0 -0
  179. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/mkrelimp.py +0 -0
  180. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/notebook.py +0 -0
  181. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/pawk/__init__.py +0 -0
  182. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/pawk/__main__.py +0 -0
  183. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/pawk/pawk.py +0 -0
  184. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/pip.py +0 -0
  185. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/prof.py +0 -0
  186. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/qr.py +0 -0
  187. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/tools/sqlrepl.py +0 -0
  188. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev/wheelfile.py +0 -0
  189. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev.egg-info/dependency_links.txt +0 -0
  190. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev.egg-info/entry_points.txt +0 -0
  191. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/omdev.egg-info/top_level.txt +0 -0
  192. {omdev-0.0.0.dev180 → omdev-0.0.0.dev181}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev180
3
+ Version: 0.0.0.dev181
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.dev180
15
+ Requires-Dist: omlish==0.0.0.dev181
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -6,7 +6,6 @@ import sys
6
6
  import typing as ta
7
7
 
8
8
  from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
9
- from omlish.lite.logs import log
10
9
 
11
10
  from ..packaging.versions import Version
12
11
  from .types import InterpOpts
@@ -43,9 +42,15 @@ class InterpInspection:
43
42
 
44
43
 
45
44
  class InterpInspector:
46
- def __init__(self) -> None:
45
+ def __init__(
46
+ self,
47
+ *,
48
+ log: ta.Optional[logging.Logger] = None,
49
+ ) -> None:
47
50
  super().__init__()
48
51
 
52
+ self._log = log
53
+
49
54
  self._cache: ta.Dict[str, ta.Optional[InterpInspection]] = {}
50
55
 
51
56
  _RAW_INSPECTION_CODE = """
@@ -94,8 +99,8 @@ class InterpInspector:
94
99
  try:
95
100
  ret = await self._inspect(exe)
96
101
  except Exception as e: # noqa
97
- if log.isEnabledFor(logging.DEBUG):
98
- log.exception('Failed to inspect interp: %s', exe)
102
+ if self._log is not None and self._log.isEnabledFor(logging.DEBUG):
103
+ self._log.exception('Failed to inspect interp: %s', exe)
99
104
  ret = None
100
105
  self._cache[exe] = ret
101
106
  return ret
@@ -5,13 +5,13 @@ TODO:
5
5
  - check if path py's are venvs: sys.prefix != sys.base_prefix
6
6
  """
7
7
  import dataclasses as dc
8
+ import logging
8
9
  import os
9
10
  import re
10
11
  import typing as ta
11
12
 
12
13
  from omlish.lite.cached import cached_nullary
13
14
  from omlish.lite.check import check
14
- from omlish.lite.logs import log
15
15
 
16
16
  from ...packaging.versions import InvalidVersion
17
17
  from ..inspect import InterpInspector
@@ -37,12 +37,14 @@ class SystemInterpProvider(InterpProvider):
37
37
  options: Options = Options(),
38
38
  *,
39
39
  inspector: ta.Optional[InterpInspector] = None,
40
+ log: ta.Optional[logging.Logger] = None,
40
41
  ) -> None:
41
42
  super().__init__()
42
43
 
43
44
  self._options = options
44
45
 
45
46
  self._inspector = inspector
47
+ self._log = log
46
48
 
47
49
  #
48
50
 
@@ -116,7 +118,8 @@ class SystemInterpProvider(InterpProvider):
116
118
  lst = []
117
119
  for e in self.exes():
118
120
  if (ev := await self.get_exe_version(e)) is None:
119
- log.debug('Invalid system version: %s', e)
121
+ if self._log is not None:
122
+ self._log.debug('Invalid system version: %s', e)
120
123
  continue
121
124
  lst.append((e, ev))
122
125
  return lst
@@ -13,6 +13,7 @@ TODO:
13
13
  import abc
14
14
  import dataclasses as dc
15
15
  import itertools
16
+ import logging
16
17
  import os.path
17
18
  import shutil
18
19
  import sys
@@ -22,7 +23,6 @@ from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
22
23
  from omlish.lite.cached import async_cached_nullary
23
24
  from omlish.lite.cached import cached_nullary
24
25
  from omlish.lite.check import check
25
- from omlish.lite.logs import log
26
26
 
27
27
  from ...packaging.versions import InvalidVersion
28
28
  from ...packaging.versions import Version
@@ -355,6 +355,7 @@ class PyenvInterpProvider(InterpProvider):
355
355
  *,
356
356
  pyenv: Pyenv,
357
357
  inspector: InterpInspector,
358
+ log: ta.Optional[logging.Logger] = None,
358
359
  ) -> None:
359
360
  super().__init__()
360
361
 
@@ -362,6 +363,7 @@ class PyenvInterpProvider(InterpProvider):
362
363
 
363
364
  self._pyenv = pyenv
364
365
  self._inspector = inspector
366
+ self._log = log
365
367
 
366
368
  #
367
369
 
@@ -406,7 +408,8 @@ class PyenvInterpProvider(InterpProvider):
406
408
  ret: ta.List[PyenvInterpProvider.Installed] = []
407
409
  for vn, ep in await self._pyenv.version_exes():
408
410
  if (i := await self._make_installed(vn, ep)) is None:
409
- log.debug('Invalid pyenv version: %s', vn)
411
+ if self._log is not None:
412
+ self._log.debug('Invalid pyenv version: %s', vn)
410
413
  continue
411
414
  ret.append(i)
412
415
  return ret
@@ -1,5 +1,6 @@
1
1
  # ruff: noqa: UP006 UP007
2
- import glob
2
+ import dataclasses as dc
3
+ import logging
3
4
  import os.path
4
5
  import typing as ta
5
6
 
@@ -7,36 +8,50 @@ from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
7
8
  from omlish.lite.cached import async_cached_nullary
8
9
  from omlish.lite.cached import cached_nullary
9
10
  from omlish.lite.check import check
10
- from omlish.lite.logs import log
11
+ from omlish.lite.typing import Func2
11
12
 
12
- from ..interp.default import get_default_interp_resolver
13
- from ..interp.types import InterpSpecifier
14
- from .configs import VenvConfig
15
- from .reqs import RequirementsRewriter
13
+ from .default import get_default_interp_resolver
14
+ from .types import InterpSpecifier
16
15
 
17
16
 
18
17
  ##
19
18
 
20
19
 
21
- class Venv:
20
+ @dc.dataclass(frozen=True)
21
+ class InterpVenvConfig:
22
+ interp: ta.Optional[str] = None
23
+ requires: ta.Optional[ta.Sequence[str]] = None
24
+ use_uv: ta.Optional[bool] = None
25
+
26
+
27
+ class InterpVenvRequirementsProcessor(Func2['InterpVenv', ta.Sequence[str], ta.Sequence[str]]):
28
+ pass
29
+
30
+
31
+ class InterpVenv:
22
32
  def __init__(
23
33
  self,
24
- name: str,
25
- cfg: VenvConfig,
34
+ path: str,
35
+ cfg: InterpVenvConfig,
36
+ *,
37
+ requirements_processor: ta.Optional[InterpVenvRequirementsProcessor] = None,
38
+ log: ta.Optional[logging.Logger] = None,
26
39
  ) -> None:
27
40
  super().__init__()
28
- self._name = name
41
+
42
+ self._path = path
29
43
  self._cfg = cfg
30
44
 
31
- @property
32
- def cfg(self) -> VenvConfig:
33
- return self._cfg
45
+ self._requirements_processor = requirements_processor
46
+ self._log = log
34
47
 
35
- DIR_NAME = '.venvs'
48
+ @property
49
+ def path(self) -> str:
50
+ return self._path
36
51
 
37
52
  @property
38
- def dir_name(self) -> str:
39
- return os.path.join(self.DIR_NAME, self._name)
53
+ def cfg(self) -> InterpVenvConfig:
54
+ return self._cfg
40
55
 
41
56
  @async_cached_nullary
42
57
  async def interp_exe(self) -> str:
@@ -45,19 +60,23 @@ class Venv:
45
60
 
46
61
  @cached_nullary
47
62
  def exe(self) -> str:
48
- ve = os.path.join(self.dir_name, 'bin/python')
63
+ ve = os.path.join(self._path, 'bin/python')
49
64
  if not os.path.isfile(ve):
50
65
  raise Exception(f'venv exe {ve} does not exist or is not a file!')
51
66
  return ve
52
67
 
53
68
  @async_cached_nullary
54
69
  async def create(self) -> bool:
55
- if os.path.exists(dn := self.dir_name):
70
+ if os.path.exists(dn := self._path):
56
71
  if not os.path.isdir(dn):
57
72
  raise Exception(f'{dn} exists but is not a directory!')
58
73
  return False
59
74
 
60
- log.info('Using interpreter %s', (ie := await self.interp_exe()))
75
+ ie = await self.interp_exe()
76
+
77
+ if self._log is not None:
78
+ self._log.info('Using interpreter %s', ie)
79
+
61
80
  await asyncio_subprocesses.check_call(ie, '-m', 'venv', dn)
62
81
 
63
82
  ve = self.exe()
@@ -74,8 +93,9 @@ class Venv:
74
93
  )
75
94
 
76
95
  if sr := self._cfg.requires:
77
- rr = RequirementsRewriter(self._name)
78
- reqs = [rr.rewrite(req) for req in sr]
96
+ reqs = list(sr)
97
+ if self._requirements_processor is not None:
98
+ reqs = list(self._requirements_processor(self, reqs))
79
99
 
80
100
  # TODO: automatically try slower uv download when it fails? lol
81
101
  # Caused by: Failed to download distribution due to network timeout. Try increasing UV_HTTP_TIMEOUT (current value: 30s). # noqa
@@ -92,23 +112,3 @@ class Venv:
92
112
  )
93
113
 
94
114
  return True
95
-
96
- @staticmethod
97
- def _resolve_srcs(raw: ta.List[str]) -> ta.List[str]:
98
- out: list[str] = []
99
- seen: ta.Set[str] = set()
100
- for r in raw:
101
- es: list[str]
102
- if any(c in r for c in '*?'):
103
- es = list(glob.glob(r, recursive=True))
104
- else:
105
- es = [r]
106
- for e in es:
107
- if e not in seen:
108
- seen.add(e)
109
- out.append(e)
110
- return out
111
-
112
- @cached_nullary
113
- def srcs(self) -> ta.Sequence[str]:
114
- return self._resolve_srcs(self._cfg.srcs or [])
@@ -4,15 +4,14 @@ import typing as ta
4
4
 
5
5
  from omlish.lite.marshal import unmarshal_obj
6
6
 
7
+ from ..interp.venvs import InterpVenvConfig
8
+
7
9
 
8
10
  @dc.dataclass(frozen=True)
9
- class VenvConfig:
11
+ class VenvConfig(InterpVenvConfig):
10
12
  inherits: ta.Optional[ta.Sequence[str]] = None
11
- interp: ta.Optional[str] = None
12
- requires: ta.Optional[ta.List[str]] = None
13
13
  docker: ta.Optional[str] = None
14
14
  srcs: ta.Optional[ta.List[str]] = None
15
- use_uv: ta.Optional[bool] = None
16
15
 
17
16
 
18
17
  @dc.dataclass(frozen=True)
@@ -0,0 +1,12 @@
1
+ # ruff: noqa: UP006 UP007
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
+
9
+ def bind_pyproject() -> InjectorBindings:
10
+ lst: ta.List[InjectorBindingOrBindings] = []
11
+
12
+ return inj.as_bindings(*lst)
@@ -0,0 +1,78 @@
1
+ # ruff: noqa: UP006 UP007
2
+ import glob
3
+ import os.path
4
+ import typing as ta
5
+
6
+ from omlish.lite.cached import async_cached_nullary
7
+ from omlish.lite.cached import cached_nullary
8
+ from omlish.lite.logs import log
9
+
10
+ from ..interp.venvs import InterpVenv
11
+ from ..interp.venvs import InterpVenvRequirementsProcessor
12
+ from .configs import VenvConfig
13
+ from .reqs import RequirementsRewriter
14
+
15
+
16
+ ##
17
+
18
+
19
+ class Venv:
20
+ def __init__(
21
+ self,
22
+ name: str,
23
+ cfg: VenvConfig,
24
+ ) -> None:
25
+ super().__init__()
26
+ self._name = name
27
+ self._cfg = cfg
28
+
29
+ @property
30
+ def cfg(self) -> VenvConfig:
31
+ return self._cfg
32
+
33
+ DIR_NAME = '.venvs'
34
+
35
+ @property
36
+ def dir_name(self) -> str:
37
+ return os.path.join(self.DIR_NAME, self._name)
38
+
39
+ @cached_nullary
40
+ def _iv(self) -> InterpVenv:
41
+ rr = RequirementsRewriter(self._name)
42
+
43
+ return InterpVenv(
44
+ self.dir_name,
45
+ self._cfg,
46
+ requirements_processor=InterpVenvRequirementsProcessor(
47
+ lambda iv, reqs: [rr.rewrite(req) for req in reqs] # noqa
48
+ ),
49
+ log=log,
50
+ )
51
+
52
+ @cached_nullary
53
+ def exe(self) -> str:
54
+ return self._iv().exe()
55
+
56
+ @async_cached_nullary
57
+ async def create(self) -> bool:
58
+ return await self._iv().create()
59
+
60
+ @staticmethod
61
+ def _resolve_srcs(raw: ta.List[str]) -> ta.List[str]:
62
+ out: list[str] = []
63
+ seen: ta.Set[str] = set()
64
+ for r in raw:
65
+ es: list[str]
66
+ if any(c in r for c in '*?'):
67
+ es = list(glob.glob(r, recursive=True))
68
+ else:
69
+ es = [r]
70
+ for e in es:
71
+ if e not in seen:
72
+ seen.add(e)
73
+ out.append(e)
74
+ return out
75
+
76
+ @cached_nullary
77
+ def srcs(self) -> ta.Sequence[str]:
78
+ return self._resolve_srcs(self._cfg.srcs or [])
@@ -1050,13 +1050,6 @@ json_dump_compact: ta.Callable[..., bytes] = functools.partial(json.dump, **JSON
1050
1050
  json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_COMPACT_KWARGS)
1051
1051
 
1052
1052
 
1053
- ########################################
1054
- # ../../../omlish/lite/logs.py
1055
-
1056
-
1057
- log = logging.getLogger(__name__)
1058
-
1059
-
1060
1053
  ########################################
1061
1054
  # ../../../omlish/lite/maybes.py
1062
1055
 
@@ -4205,9 +4198,15 @@ class InterpInspection:
4205
4198
 
4206
4199
 
4207
4200
  class InterpInspector:
4208
- def __init__(self) -> None:
4201
+ def __init__(
4202
+ self,
4203
+ *,
4204
+ log: ta.Optional[logging.Logger] = None,
4205
+ ) -> None:
4209
4206
  super().__init__()
4210
4207
 
4208
+ self._log = log
4209
+
4211
4210
  self._cache: ta.Dict[str, ta.Optional[InterpInspection]] = {}
4212
4211
 
4213
4212
  _RAW_INSPECTION_CODE = """
@@ -4256,8 +4255,8 @@ class InterpInspector:
4256
4255
  try:
4257
4256
  ret = await self._inspect(exe)
4258
4257
  except Exception as e: # noqa
4259
- if log.isEnabledFor(logging.DEBUG):
4260
- log.exception('Failed to inspect interp: %s', exe)
4258
+ if self._log is not None and self._log.isEnabledFor(logging.DEBUG):
4259
+ self._log.exception('Failed to inspect interp: %s', exe)
4261
4260
  ret = None
4262
4261
  self._cache[exe] = ret
4263
4262
  return ret
@@ -4397,12 +4396,14 @@ class SystemInterpProvider(InterpProvider):
4397
4396
  options: Options = Options(),
4398
4397
  *,
4399
4398
  inspector: ta.Optional[InterpInspector] = None,
4399
+ log: ta.Optional[logging.Logger] = None,
4400
4400
  ) -> None:
4401
4401
  super().__init__()
4402
4402
 
4403
4403
  self._options = options
4404
4404
 
4405
4405
  self._inspector = inspector
4406
+ self._log = log
4406
4407
 
4407
4408
  #
4408
4409
 
@@ -4476,7 +4477,8 @@ class SystemInterpProvider(InterpProvider):
4476
4477
  lst = []
4477
4478
  for e in self.exes():
4478
4479
  if (ev := await self.get_exe_version(e)) is None:
4479
- log.debug('Invalid system version: %s', e)
4480
+ if self._log is not None:
4481
+ self._log.debug('Invalid system version: %s', e)
4480
4482
  continue
4481
4483
  lst.append((e, ev))
4482
4484
  return lst
@@ -4833,6 +4835,7 @@ class PyenvInterpProvider(InterpProvider):
4833
4835
  *,
4834
4836
  pyenv: Pyenv,
4835
4837
  inspector: InterpInspector,
4838
+ log: ta.Optional[logging.Logger] = None,
4836
4839
  ) -> None:
4837
4840
  super().__init__()
4838
4841
 
@@ -4840,6 +4843,7 @@ class PyenvInterpProvider(InterpProvider):
4840
4843
 
4841
4844
  self._pyenv = pyenv
4842
4845
  self._inspector = inspector
4846
+ self._log = log
4843
4847
 
4844
4848
  #
4845
4849
 
@@ -4884,7 +4888,8 @@ class PyenvInterpProvider(InterpProvider):
4884
4888
  ret: ta.List[PyenvInterpProvider.Installed] = []
4885
4889
  for vn, ep in await self._pyenv.version_exes():
4886
4890
  if (i := await self._make_installed(vn, ep)) is None:
4887
- log.debug('Invalid pyenv version: %s', vn)
4891
+ if self._log is not None:
4892
+ self._log.debug('Invalid pyenv version: %s', vn)
4888
4893
  continue
4889
4894
  ret.append(i)
4890
4895
  return ret