omdev 0.0.0.dev281__tar.gz → 0.0.0.dev283__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 (269) hide show
  1. {omdev-0.0.0.dev281/omdev.egg-info → omdev-0.0.0.dev283}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/.manifests.json +16 -4
  3. omdev-0.0.0.dev283/omdev/attrdocs.py +177 -0
  4. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/bracepy.py +6 -0
  5. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/classdot.py +3 -0
  6. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cmake.py +3 -0
  7. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/findimports.py +6 -0
  8. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/imgur.py +3 -0
  9. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/pyenv/install.py +27 -5
  10. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/interp.py +27 -5
  11. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/pyproject.py +27 -5
  12. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tokens/all.py +1 -0
  13. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tokens/utils.py +9 -0
  14. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283/omdev.egg-info}/PKG-INFO +2 -2
  15. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev.egg-info/SOURCES.txt +1 -0
  16. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev.egg-info/requires.txt +1 -1
  17. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/pyproject.toml +2 -2
  18. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/LICENSE +0 -0
  19. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/MANIFEST.in +0 -0
  20. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/README.rst +0 -0
  21. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/__about__.py +0 -0
  22. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/__init__.py +0 -0
  23. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/__init__.py +0 -0
  24. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/__main__.py +0 -0
  25. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/gen.py +0 -0
  26. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/imports.py +0 -0
  27. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/main.py +0 -0
  28. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/manifests.py +0 -0
  29. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/resources.py +0 -0
  30. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/srcfiles.py +0 -0
  31. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/strip.py +0 -0
  32. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/types.py +0 -0
  33. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/amalg/typing.py +0 -0
  34. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/antlr/__init__.py +0 -0
  35. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/antlr/consts.py +0 -0
  36. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/antlr/gen.py +0 -0
  37. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/__init__.py +0 -0
  38. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/__init__.py +0 -0
  39. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/cache.py +0 -0
  40. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/contexts.py +0 -0
  41. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/currents.py +0 -0
  42. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/fns.py +0 -0
  43. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/resolvers.py +0 -0
  44. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/storage.py +0 -0
  45. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/compute/types.py +0 -0
  46. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/__init__.py +0 -0
  47. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/actions.py +0 -0
  48. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/cache.py +0 -0
  49. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/consts.py +0 -0
  50. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/defaults.py +0 -0
  51. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/manifests.py +0 -0
  52. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cache/data/specs.py +0 -0
  53. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cc/__init__.py +0 -0
  54. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cc/__main__.py +0 -0
  55. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cc/cdeps.py +0 -0
  56. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cc/cdeps.toml +0 -0
  57. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cc/cli.py +0 -0
  58. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/__init__.py +0 -0
  59. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_boilerplate.cc +0 -0
  60. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/LICENSE +0 -0
  61. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/__init__.py +0 -0
  62. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/build_ext.py +0 -0
  63. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  64. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  65. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/compilers/options.py +0 -0
  66. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  67. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/dir_util.py +0 -0
  68. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/errors.py +0 -0
  69. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/extension.py +0 -0
  70. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/file_util.py +0 -0
  71. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/modified.py +0 -0
  72. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/spawn.py +0 -0
  73. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/sysconfig.py +0 -0
  74. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/util.py +0 -0
  75. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/_distutils/version.py +0 -0
  76. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/build.py +0 -0
  77. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/cmake.py +0 -0
  78. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/importhook.py +0 -0
  79. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/magic.py +0 -0
  80. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cexts/scan.py +0 -0
  81. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/__init__.py +0 -0
  82. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/__main__.py +0 -0
  83. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/cache.py +0 -0
  84. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/ci.py +0 -0
  85. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/cli.py +0 -0
  86. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/compose.py +0 -0
  87. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/consts.py +0 -0
  88. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/__init__.py +0 -0
  89. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/buildcaching.py +0 -0
  90. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/cache.py +0 -0
  91. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  92. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/cacheserved/cache.py +0 -0
  93. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  94. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/cmds.py +0 -0
  95. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/dataserver.py +0 -0
  96. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/imagepulling.py +0 -0
  97. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/inject.py +0 -0
  98. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/packing.py +0 -0
  99. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/repositories.py +0 -0
  100. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/docker/utils.py +0 -0
  101. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/__init__.py +0 -0
  102. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/api.py +0 -0
  103. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/bootstrap.py +0 -0
  104. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/cache.py +0 -0
  105. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/cli.py +0 -0
  106. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/client.py +0 -0
  107. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/env.py +0 -0
  108. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/github/inject.py +0 -0
  109. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/inject.py +0 -0
  110. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/requirements.py +0 -0
  111. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/shell.py +0 -0
  112. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ci/utils.py +0 -0
  113. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/__init__.py +0 -0
  114. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/__main__.py +0 -0
  115. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/_pathhack.py +0 -0
  116. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/clicli.py +0 -0
  117. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/install.py +0 -0
  118. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/main.py +0 -0
  119. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/managers.py +0 -0
  120. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/cli/types.py +0 -0
  121. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/clipboard/__init__.py +0 -0
  122. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/clipboard/clipboard.py +0 -0
  123. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/clipboard/darwin_cf.py +0 -0
  124. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/clipboard/linux_x11.py +0 -0
  125. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/dataserver/__init__.py +0 -0
  126. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/dataserver/handlers.py +0 -0
  127. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/dataserver/http.py +0 -0
  128. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/dataserver/routes.py +0 -0
  129. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/dataserver/server.py +0 -0
  130. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/dataserver/targets.py +0 -0
  131. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/git/__init__.py +0 -0
  132. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/git/magic.py +0 -0
  133. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/git/revisions.py +0 -0
  134. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/git/shallow.py +0 -0
  135. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/git/status.py +0 -0
  136. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/home/__init__.py +0 -0
  137. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/home/paths.py +0 -0
  138. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/home/secrets.py +0 -0
  139. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/home/shadow.py +0 -0
  140. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/__init__.py +0 -0
  141. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/__main__.py +0 -0
  142. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/cli.py +0 -0
  143. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/default.py +0 -0
  144. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/inject.py +0 -0
  145. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/inspect.py +0 -0
  146. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/providers/__init__.py +0 -0
  147. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/providers/base.py +0 -0
  148. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/providers/inject.py +0 -0
  149. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/providers/running.py +0 -0
  150. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/providers/standalone.py +0 -0
  151. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/providers/system.py +0 -0
  152. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/pyenv/__init__.py +0 -0
  153. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/pyenv/inject.py +0 -0
  154. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/pyenv/provider.py +0 -0
  155. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/pyenv/pyenv.py +0 -0
  156. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/resolvers.py +0 -0
  157. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/types.py +0 -0
  158. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/uv/__init__.py +0 -0
  159. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/uv/inject.py +0 -0
  160. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/uv/provider.py +0 -0
  161. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/uv/uv.py +0 -0
  162. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/interp/venvs.py +0 -0
  163. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/__init__.py +0 -0
  164. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/__main__.py +0 -0
  165. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/cli.py +0 -0
  166. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/find.py +0 -0
  167. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/magic.py +0 -0
  168. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/prepare.py +0 -0
  169. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/magic/styles.py +0 -0
  170. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/manifests/__init__.py +0 -0
  171. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/manifests/__main__.py +0 -0
  172. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/manifests/build.py +0 -0
  173. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/manifests/dumping.py +0 -0
  174. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/manifests/main.py +0 -0
  175. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/mypy/__init__.py +0 -0
  176. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/mypy/debug.py +0 -0
  177. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/__init__.py +0 -0
  178. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/building.py +0 -0
  179. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/compression.py +0 -0
  180. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/data.py +0 -0
  181. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/datarefs.py +0 -0
  182. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/dataserver.py +0 -0
  183. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/loading.py +0 -0
  184. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/media.py +0 -0
  185. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/pack/__init__.py +0 -0
  186. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/pack/packing.py +0 -0
  187. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/pack/repositories.py +0 -0
  188. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/pack/unpacking.py +0 -0
  189. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/repositories.py +0 -0
  190. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/oci/tars.py +0 -0
  191. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/__init__.py +0 -0
  192. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/marshal.py +0 -0
  193. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/names.py +0 -0
  194. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/requires.py +0 -0
  195. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/revisions.py +0 -0
  196. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/specifiers.py +0 -0
  197. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/versions.py +0 -0
  198. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/packaging/wheelfile.py +0 -0
  199. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pip.py +0 -0
  200. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/__init__.py +0 -0
  201. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/__main__.py +0 -0
  202. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/base.py +0 -0
  203. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/git.py +0 -0
  204. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/lite.py +0 -0
  205. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/main.py +0 -0
  206. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/manifests.py +0 -0
  207. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/precheck/scripts.py +0 -0
  208. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ptk/__init__.py +0 -0
  209. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ptk/apps/__init__.py +0 -0
  210. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/ptk/apps/ncdu.py +0 -0
  211. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/__init__.py +0 -0
  212. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/__main__.py +0 -0
  213. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/cexts.py +0 -0
  214. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/cli.py +0 -0
  215. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/configs.py +0 -0
  216. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/inject.py +0 -0
  217. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/pkg.py +0 -0
  218. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/reqs.py +0 -0
  219. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/resources/__init__.py +0 -0
  220. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/resources/docker-dev.sh +0 -0
  221. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/resources/python.sh +0 -0
  222. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/pyproject/venvs.py +0 -0
  223. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/__init__.py +0 -0
  224. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/bumpversion.py +0 -0
  225. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/ci.py +0 -0
  226. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/execrss.py +0 -0
  227. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/exectime.py +0 -0
  228. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/importtrace.py +0 -0
  229. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/slowcat.py +0 -0
  230. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/scripts/tmpexec.py +0 -0
  231. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tagstrings.py +0 -0
  232. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tokens/__init__.py +0 -0
  233. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tokens/tokenizert.py +0 -0
  234. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/__init__.py +0 -0
  235. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/cloc.py +0 -0
  236. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/diff.py +0 -0
  237. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/doc.py +0 -0
  238. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/docker.py +0 -0
  239. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/git/__init__.py +0 -0
  240. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/git/__main__.py +0 -0
  241. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/git/cli.py +0 -0
  242. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/git/consts.py +0 -0
  243. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/git/messages.py +0 -0
  244. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/importscan.py +0 -0
  245. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/intellij.py +0 -0
  246. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/__init__.py +0 -0
  247. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/__main__.py +0 -0
  248. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/cli.py +0 -0
  249. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/formats.py +0 -0
  250. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/io.py +0 -0
  251. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/parsing.py +0 -0
  252. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/processing.py +0 -0
  253. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/json/rendering.py +0 -0
  254. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/linehisto.py +0 -0
  255. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/mkenv.py +0 -0
  256. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/mkrelimp.py +0 -0
  257. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/notebook.py +0 -0
  258. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/pawk/__init__.py +0 -0
  259. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/pawk/__main__.py +0 -0
  260. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/pawk/pawk.py +0 -0
  261. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/pip.py +0 -0
  262. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/prof.py +0 -0
  263. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/qr.py +0 -0
  264. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/shadow.py +0 -0
  265. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev/tools/sqlrepl.py +0 -0
  266. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev.egg-info/dependency_links.txt +0 -0
  267. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev.egg-info/entry_points.txt +0 -0
  268. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/omdev.egg-info/top_level.txt +0 -0
  269. {omdev-0.0.0.dev281 → omdev-0.0.0.dev283}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev281
3
+ Version: 0.0.0.dev283
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.dev281
15
+ Requires-Dist: omlish==0.0.0.dev283
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -11,11 +11,23 @@
11
11
  }
12
12
  }
13
13
  },
14
+ {
15
+ "module": ".attrdocs",
16
+ "attr": "_CLI_MODULE",
17
+ "file": "omdev/attrdocs.py",
18
+ "line": 146,
19
+ "value": {
20
+ "$.cli.types.CliModule": {
21
+ "cmd_name": "py/attrdocs",
22
+ "mod_name": "omdev.attrdocs"
23
+ }
24
+ }
25
+ },
14
26
  {
15
27
  "module": ".bracepy",
16
28
  "attr": "_CLI_MODULE",
17
29
  "file": "omdev/bracepy.py",
18
- "line": 88,
30
+ "line": 94,
19
31
  "value": {
20
32
  "$.cli.types.CliModule": {
21
33
  "cmd_name": "bracepy",
@@ -51,7 +63,7 @@
51
63
  "module": ".classdot",
52
64
  "attr": "_CLI_MODULE",
53
65
  "file": "omdev/classdot.py",
54
- "line": 62,
66
+ "line": 65,
55
67
  "value": {
56
68
  "$.cli.types.CliModule": {
57
69
  "cmd_name": "py/classdot",
@@ -75,7 +87,7 @@
75
87
  "module": ".findimports",
76
88
  "attr": "_CLI_MODULE",
77
89
  "file": "omdev/findimports.py",
78
- "line": 81,
90
+ "line": 87,
79
91
  "value": {
80
92
  "$.cli.types.CliModule": {
81
93
  "cmd_name": "py/findimports",
@@ -87,7 +99,7 @@
87
99
  "module": ".imgur",
88
100
  "attr": "_FOO_CLI_MODULE",
89
101
  "file": "omdev/imgur.py",
90
- "line": 130,
102
+ "line": 133,
91
103
  "value": {
92
104
  "$.cli.types.CliModule": {
93
105
  "cmd_name": "imgur",
@@ -0,0 +1,177 @@
1
+ # ruff: noqa: N802
2
+ import ast
3
+ import dataclasses as dc
4
+ import inspect
5
+ import typing as ta
6
+
7
+ from omlish import check
8
+ from omlish import lang
9
+
10
+ from .tokens import all as tks
11
+
12
+
13
+ ##
14
+
15
+
16
+ @dc.dataclass(frozen=True)
17
+ class AttrDoc:
18
+ docstring: str | None = None
19
+ trailing_comment: str | None = None
20
+ preceding_comment: str | None = None
21
+
22
+ __repr__ = lang.AttrRepr.of(
23
+ 'docstring',
24
+ 'trailing_comment',
25
+ 'preceding_comment',
26
+ value_filter=bool,
27
+ )
28
+
29
+
30
+ _EMPTY_ATTR_DOC = AttrDoc()
31
+
32
+
33
+ ##
34
+
35
+
36
+ class _AttrDocAstVisitor(ast.NodeVisitor):
37
+ def __init__(
38
+ self,
39
+ *,
40
+ tok_lines: ta.Sequence[tks.Tokens] | None = None,
41
+ ) -> None:
42
+ super().__init__()
43
+
44
+ self._tok_lines = tok_lines
45
+
46
+ self._attr_docs: dict[str, AttrDoc] = {}
47
+ self._target: str | None = None
48
+ self._prev_node_type: type[ast.AST] | None = None
49
+
50
+ @property
51
+ def attr_docs(self) -> ta.Mapping[str, AttrDoc]:
52
+ return self._attr_docs
53
+
54
+ #
55
+
56
+ def visit(self, node: ast.AST) -> ta.Any:
57
+ if isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef)):
58
+ self._prev_node_type = None
59
+ return None
60
+ node_result = super().visit(node)
61
+ self._prev_node_type = type(node)
62
+ return node_result
63
+
64
+ #
65
+
66
+ @staticmethod
67
+ def _comment_tok_src(tok: tks.Token) -> str:
68
+ check.state(tok.name == 'COMMENT')
69
+ tc = tok.src
70
+ check.state(tc[0] == '#')
71
+ return tc[1:].lstrip()
72
+
73
+ def _set_target(self, node: ast.Name) -> None:
74
+ self._target = node.id
75
+
76
+ ad = _EMPTY_ATTR_DOC
77
+
78
+ if self._tok_lines is not None:
79
+ line = self._tok_lines[node.lineno - 1]
80
+ for t in reversed(line):
81
+ if t.name not in tks.WS_NAMES:
82
+ break
83
+ if t.name == 'COMMENT':
84
+ ad = dc.replace(ad, trailing_comment=self._comment_tok_src(t))
85
+ break
86
+
87
+ pll: list[str] = []
88
+ pln = node.lineno - 1
89
+ while pln > 0:
90
+ line = self._tok_lines[pln - 1]
91
+ no_ws_line = list(tks.ignore_ws(line, keep={'COMMENT'}))
92
+ if not no_ws_line or no_ws_line[0].name != 'COMMENT': # noqa
93
+ break
94
+ pll.append(self._comment_tok_src(no_ws_line[0]))
95
+ pln -= 1
96
+ if pll:
97
+ ad = dc.replace(ad, preceding_comment='\n'.join(reversed(pll)))
98
+
99
+ if ad is not _EMPTY_ATTR_DOC:
100
+ self._attr_docs[node.id] = ad
101
+
102
+ def visit_AnnAssign(self, node: ast.AnnAssign) -> ta.Any:
103
+ if isinstance(target := node.target, ast.Name):
104
+ self._set_target(target)
105
+
106
+ def visit_Assign(self, node: ast.Assign) -> ta.Any:
107
+ if len(node.targets) == 1 and isinstance(target := node.targets[0], ast.Name):
108
+ self._set_target(target) # noqa
109
+
110
+ #
111
+
112
+ def visit_Expr(self, node: ast.Expr) -> ta.Any:
113
+ if (
114
+ isinstance(node.value, ast.Constant) and
115
+ isinstance(node.value.value, str) and
116
+ self._prev_node_type in (ast.Assign, ast.AnnAssign)
117
+ ):
118
+ docstring = inspect.cleandoc(node.value.value)
119
+ if self._target:
120
+ ex = self._attr_docs.get(self._target, _EMPTY_ATTR_DOC)
121
+ check.none(ex.docstring)
122
+ self._attr_docs[self._target] = dc.replace(ex, docstring=docstring)
123
+ self._target = None
124
+
125
+
126
+ def extract_attr_docs(src: str) -> ta.Mapping[str, AttrDoc]:
127
+ if not src:
128
+ return {}
129
+
130
+ toks = tks.src_to_tokens(src)
131
+ tok_lines = tks.split_lines_dense(toks)
132
+
133
+ src_ast = ast.parse(src)
134
+
135
+ # import astpretty
136
+ # astpretty.pprint(src_ast)
137
+
138
+ ast_visitor = _AttrDocAstVisitor(tok_lines=tok_lines)
139
+ ast_visitor.visit(src_ast)
140
+ return ast_visitor.attr_docs
141
+
142
+
143
+ ##
144
+
145
+
146
+ # @omlish-manifest
147
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
148
+ 'cmd_name': 'py/attrdocs',
149
+ 'mod_name': __name__,
150
+ }}
151
+
152
+
153
+ if __name__ == '__main__':
154
+ def _main() -> None:
155
+ import argparse
156
+
157
+ parser = argparse.ArgumentParser()
158
+ parser.add_argument('file')
159
+ args = parser.parse_args()
160
+
161
+ #
162
+
163
+ with open(args.file) as f:
164
+ src = f.read()
165
+
166
+ attr_docs = extract_attr_docs(src)
167
+
168
+ #
169
+
170
+ import json
171
+
172
+ print(json.dumps({
173
+ a: {k: v for k, v in dc.asdict(ad).items() if v}
174
+ for a, ad in sorted(attr_docs.items(), key=lambda t: t[0])
175
+ }))
176
+
177
+ _main()
@@ -7,6 +7,9 @@ import io
7
7
  import tokenize
8
8
 
9
9
 
10
+ ##
11
+
12
+
10
13
  def translate_brace_python(
11
14
  s: str,
12
15
  *,
@@ -85,6 +88,9 @@ def translate_brace_python(
85
88
  return ret.getvalue()
86
89
 
87
90
 
91
+ ##
92
+
93
+
88
94
  # @omlish-manifest
89
95
  _CLI_MODULE = {'$omdev.cli.types.CliModule': {
90
96
  'cmd_name': 'bracepy',
@@ -10,6 +10,9 @@ from omlish.graphs import dot
10
10
  from .cli import CliModule
11
11
 
12
12
 
13
+ ##
14
+
15
+
13
16
  def gen_class_dot(roots: ta.Iterable[type]) -> dot.Graph:
14
17
  roots = set(roots)
15
18
  root_tup = tuple(roots)
@@ -4,6 +4,9 @@ import typing as ta
4
4
  from omlish import dataclasses as dc
5
5
 
6
6
 
7
+ ##
8
+
9
+
7
10
  @dc.dataclass(frozen=True)
8
11
  class Command:
9
12
  name: str
@@ -13,6 +13,9 @@ import sys
13
13
  import typing as ta
14
14
 
15
15
 
16
+ ##
17
+
18
+
16
19
  _BUILTIN_MODULE_NAMES = frozenset([*sys.builtin_module_names, *sys.stdlib_module_names])
17
20
 
18
21
 
@@ -78,6 +81,9 @@ def get_import_deps(imps: set[str]) -> set[str]:
78
81
  return {i for i in eimps if whichmod(i) != 'builtin'}
79
82
 
80
83
 
84
+ ##
85
+
86
+
81
87
  # @omlish-manifest
82
88
  _CLI_MODULE = {'$omdev.cli.types.CliModule': {
83
89
  'cmd_name': 'py/findimports',
@@ -36,6 +36,9 @@ from .cli import CliModule
36
36
  from .home.secrets import load_secrets
37
37
 
38
38
 
39
+ ##
40
+
41
+
39
42
  @dc.dataclass(frozen=True)
40
43
  @msh.update_object_metadata(unknown_field='x')
41
44
  class ImageUploadData:
@@ -38,16 +38,13 @@ class PyenvInstallOpts:
38
38
 
39
39
 
40
40
  # TODO: https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md#building-for-maximum-performance
41
- DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
41
+ _DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
42
42
  opts=[
43
43
  '-s',
44
44
  '-v',
45
45
  '-k',
46
46
  ],
47
47
  conf_opts=[
48
- # FIXME: breaks on mac for older py's
49
- '--enable-loadable-sqlite-extensions',
50
-
51
48
  # '--enable-shared',
52
49
 
53
50
  '--enable-optimizations',
@@ -63,6 +60,27 @@ DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
63
60
  ],
64
61
  )
65
62
 
63
+
64
+ def get_default_pyenv_install_opts(
65
+ version: str,
66
+ *,
67
+ platform: ta.Optional[str] = None,
68
+ ) -> PyenvInstallOpts:
69
+ if platform is None:
70
+ platform = sys.platform
71
+
72
+ opts = _DEFAULT_PYENV_INSTALL_OPTS
73
+
74
+ ma, mi = map(int, version.split('.')[:2])
75
+ if not (platform == 'darwin' and (ma, mi) < (3, 11)):
76
+ opts = dc.replace(opts, conf_opts=[
77
+ *opts.conf_opts,
78
+ '--enable-loadable-sqlite-extensions',
79
+ ])
80
+
81
+ return opts
82
+
83
+
66
84
  DEBUG_PYENV_INSTALL_OPTS = PyenvInstallOpts(opts=['-g'])
67
85
 
68
86
  THREADED_PYENV_INSTALL_OPTS = PyenvInstallOpts(conf_opts=['--disable-gil'])
@@ -188,7 +206,11 @@ class PyenvVersionInstaller:
188
206
  if opts is None:
189
207
  opts = PyenvInstallOpts()
190
208
  else:
191
- lst = [self._given_opts if self._given_opts is not None else DEFAULT_PYENV_INSTALL_OPTS]
209
+ lst: ta.List[PyenvInstallOpts] = []
210
+ if self._given_opts is not None:
211
+ lst.append(self._given_opts)
212
+ else:
213
+ lst.append(get_default_pyenv_install_opts(self._version))
192
214
  if self._interp_opts.debug:
193
215
  lst.append(DEBUG_PYENV_INSTALL_OPTS)
194
216
  if self._interp_opts.threaded:
@@ -4988,16 +4988,13 @@ class PyenvInstallOpts:
4988
4988
 
4989
4989
 
4990
4990
  # TODO: https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md#building-for-maximum-performance
4991
- DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
4991
+ _DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
4992
4992
  opts=[
4993
4993
  '-s',
4994
4994
  '-v',
4995
4995
  '-k',
4996
4996
  ],
4997
4997
  conf_opts=[
4998
- # FIXME: breaks on mac for older py's
4999
- '--enable-loadable-sqlite-extensions',
5000
-
5001
4998
  # '--enable-shared',
5002
4999
 
5003
5000
  '--enable-optimizations',
@@ -5013,6 +5010,27 @@ DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
5013
5010
  ],
5014
5011
  )
5015
5012
 
5013
+
5014
+ def get_default_pyenv_install_opts(
5015
+ version: str,
5016
+ *,
5017
+ platform: ta.Optional[str] = None,
5018
+ ) -> PyenvInstallOpts:
5019
+ if platform is None:
5020
+ platform = sys.platform
5021
+
5022
+ opts = _DEFAULT_PYENV_INSTALL_OPTS
5023
+
5024
+ ma, mi = map(int, version.split('.')[:2])
5025
+ if not (platform == 'darwin' and (ma, mi) < (3, 11)):
5026
+ opts = dc.replace(opts, conf_opts=[
5027
+ *opts.conf_opts,
5028
+ '--enable-loadable-sqlite-extensions',
5029
+ ])
5030
+
5031
+ return opts
5032
+
5033
+
5016
5034
  DEBUG_PYENV_INSTALL_OPTS = PyenvInstallOpts(opts=['-g'])
5017
5035
 
5018
5036
  THREADED_PYENV_INSTALL_OPTS = PyenvInstallOpts(conf_opts=['--disable-gil'])
@@ -5138,7 +5156,11 @@ class PyenvVersionInstaller:
5138
5156
  if opts is None:
5139
5157
  opts = PyenvInstallOpts()
5140
5158
  else:
5141
- lst = [self._given_opts if self._given_opts is not None else DEFAULT_PYENV_INSTALL_OPTS]
5159
+ lst: ta.List[PyenvInstallOpts] = []
5160
+ if self._given_opts is not None:
5161
+ lst.append(self._given_opts)
5162
+ else:
5163
+ lst.append(get_default_pyenv_install_opts(self._version))
5142
5164
  if self._interp_opts.debug:
5143
5165
  lst.append(DEBUG_PYENV_INSTALL_OPTS)
5144
5166
  if self._interp_opts.threaded:
@@ -7561,16 +7561,13 @@ class PyenvInstallOpts:
7561
7561
 
7562
7562
 
7563
7563
  # TODO: https://github.com/pyenv/pyenv/blob/master/plugins/python-build/README.md#building-for-maximum-performance
7564
- DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
7564
+ _DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
7565
7565
  opts=[
7566
7566
  '-s',
7567
7567
  '-v',
7568
7568
  '-k',
7569
7569
  ],
7570
7570
  conf_opts=[
7571
- # FIXME: breaks on mac for older py's
7572
- '--enable-loadable-sqlite-extensions',
7573
-
7574
7571
  # '--enable-shared',
7575
7572
 
7576
7573
  '--enable-optimizations',
@@ -7586,6 +7583,27 @@ DEFAULT_PYENV_INSTALL_OPTS = PyenvInstallOpts(
7586
7583
  ],
7587
7584
  )
7588
7585
 
7586
+
7587
+ def get_default_pyenv_install_opts(
7588
+ version: str,
7589
+ *,
7590
+ platform: ta.Optional[str] = None,
7591
+ ) -> PyenvInstallOpts:
7592
+ if platform is None:
7593
+ platform = sys.platform
7594
+
7595
+ opts = _DEFAULT_PYENV_INSTALL_OPTS
7596
+
7597
+ ma, mi = map(int, version.split('.')[:2])
7598
+ if not (platform == 'darwin' and (ma, mi) < (3, 11)):
7599
+ opts = dc.replace(opts, conf_opts=[
7600
+ *opts.conf_opts,
7601
+ '--enable-loadable-sqlite-extensions',
7602
+ ])
7603
+
7604
+ return opts
7605
+
7606
+
7589
7607
  DEBUG_PYENV_INSTALL_OPTS = PyenvInstallOpts(opts=['-g'])
7590
7608
 
7591
7609
  THREADED_PYENV_INSTALL_OPTS = PyenvInstallOpts(conf_opts=['--disable-gil'])
@@ -7711,7 +7729,11 @@ class PyenvVersionInstaller:
7711
7729
  if opts is None:
7712
7730
  opts = PyenvInstallOpts()
7713
7731
  else:
7714
- lst = [self._given_opts if self._given_opts is not None else DEFAULT_PYENV_INSTALL_OPTS]
7732
+ lst: ta.List[PyenvInstallOpts] = []
7733
+ if self._given_opts is not None:
7734
+ lst.append(self._given_opts)
7735
+ else:
7736
+ lst.append(get_default_pyenv_install_opts(self._version))
7715
7737
  if self._interp_opts.debug:
7716
7738
  lst.append(DEBUG_PYENV_INSTALL_OPTS)
7717
7739
  if self._interp_opts.threaded:
@@ -14,6 +14,7 @@ from .utils import ( # noqa
14
14
  ignore_ws,
15
15
 
16
16
  split_lines,
17
+ split_lines_dense,
17
18
  join_toks,
18
19
  join_lines,
19
20
 
@@ -42,6 +42,15 @@ def split_lines(ts: Tokens) -> list[Tokens]:
42
42
  return [list(it) for g, it in itertools.groupby(ts, lambda t: t.line)]
43
43
 
44
44
 
45
+ def split_lines_dense(ts: Tokens) -> list[Tokens]:
46
+ lines: list[list[Token]] = []
47
+ for t in ts:
48
+ while len(lines) < (t.line or 0):
49
+ lines.append([])
50
+ lines[-1].append(t)
51
+ return lines # type: ignore[return-value]
52
+
53
+
45
54
  def join_toks(ts: Tokens) -> str:
46
55
  return ''.join(t.src for t in ts)
47
56
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev281
3
+ Version: 0.0.0.dev283
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.dev281
15
+ Requires-Dist: omlish==0.0.0.dev283
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -5,6 +5,7 @@ pyproject.toml
5
5
  omdev/.manifests.json
6
6
  omdev/__about__.py
7
7
  omdev/__init__.py
8
+ omdev/attrdocs.py
8
9
  omdev/bracepy.py
9
10
  omdev/classdot.py
10
11
  omdev/cmake.py
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev281
1
+ omlish==0.0.0.dev283
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev281'
15
+ version = '0.0.0.dev283'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev281',
25
+ 'omlish == 0.0.0.dev283',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes