omdev 0.0.0.dev399__tar.gz → 0.0.0.dev401__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 (336) hide show
  1. {omdev-0.0.0.dev399/omdev.egg-info → omdev-0.0.0.dev401}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/.manifests.json +3 -3
  3. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/utils.py +1 -1
  4. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/main.py +11 -8
  5. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/codegen.py +2 -2
  6. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/building.py +7 -3
  7. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/tars.py +4 -2
  8. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/manifests.py +2 -2
  9. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/scripts.py +14 -2
  10. omdev-0.0.0.dev401/omdev/py/findimports.py +150 -0
  11. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/execstat.py +4 -2
  12. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/importtrace.py +1 -0
  13. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/ci.py +5 -3
  14. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/messages.py +3 -3
  15. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401/omdev.egg-info}/PKG-INFO +2 -2
  16. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/requires.txt +1 -1
  17. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/pyproject.toml +2 -2
  18. omdev-0.0.0.dev399/omdev/py/findimports.py +0 -102
  19. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/LICENSE +0 -0
  20. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/MANIFEST.in +0 -0
  21. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/README.md +0 -0
  22. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/__about__.py +0 -0
  23. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/__init__.py +0 -0
  24. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/__init__.py +0 -0
  25. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/__main__.py +0 -0
  26. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/gen.py +0 -0
  27. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/imports.py +0 -0
  28. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/main.py +0 -0
  29. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/manifests.py +0 -0
  30. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/resources.py +0 -0
  31. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/srcfiles.py +0 -0
  32. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/strip.py +0 -0
  33. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/types.py +0 -0
  34. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/typing.py +0 -0
  35. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/__init__.py +0 -0
  36. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/__init__.py +0 -0
  37. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/cache.py +0 -0
  38. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/contexts.py +0 -0
  39. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/currents.py +0 -0
  40. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/fns.py +0 -0
  41. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/resolvers.py +0 -0
  42. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/storage.py +0 -0
  43. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/types.py +0 -0
  44. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/__init__.py +0 -0
  45. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/actions.py +0 -0
  46. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/cache.py +0 -0
  47. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/consts.py +0 -0
  48. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/defaults.py +0 -0
  49. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/manifests.py +0 -0
  50. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/specs.py +0 -0
  51. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/__init__.py +0 -0
  52. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/__init__.py +0 -0
  53. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/aps.py +0 -0
  54. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/ax.py +0 -0
  55. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/cf.py +0 -0
  56. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/cg.py +0 -0
  57. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/linux/__init__.py +0 -0
  58. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/linux/x11.py +0 -0
  59. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/__init__.py +0 -0
  60. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/__main__.py +0 -0
  61. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/cdeps.py +0 -0
  62. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/cdeps.toml +0 -0
  63. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/cli.py +0 -0
  64. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/srclangs.py +0 -0
  65. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/__init__.py +0 -0
  66. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_boilerplate.cc +0 -0
  67. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/LICENSE +0 -0
  68. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/__init__.py +0 -0
  69. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/build_ext.py +0 -0
  70. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  71. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  72. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/options.py +0 -0
  73. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  74. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/dir_util.py +0 -0
  75. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/errors.py +0 -0
  76. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/extension.py +0 -0
  77. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/file_util.py +0 -0
  78. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/modified.py +0 -0
  79. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/spawn.py +0 -0
  80. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/sysconfig.py +0 -0
  81. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/util.py +0 -0
  82. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/version.py +0 -0
  83. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/build.py +0 -0
  84. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/cmake.py +0 -0
  85. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/importhook.py +0 -0
  86. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/magic.py +0 -0
  87. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/scan.py +0 -0
  88. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/__init__.py +0 -0
  89. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/__main__.py +0 -0
  90. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/cache.py +0 -0
  91. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/ci.py +0 -0
  92. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/cli.py +0 -0
  93. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/compose.py +0 -0
  94. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/consts.py +0 -0
  95. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/__init__.py +0 -0
  96. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/buildcaching.py +0 -0
  97. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cache.py +0 -0
  98. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  99. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cacheserved/cache.py +0 -0
  100. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  101. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cmds.py +0 -0
  102. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/dataserver.py +0 -0
  103. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/imagepulling.py +0 -0
  104. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/inject.py +0 -0
  105. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/packing.py +0 -0
  106. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/repositories.py +0 -0
  107. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/utils.py +0 -0
  108. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/__init__.py +0 -0
  109. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/__init__.py +0 -0
  110. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/clients.py +0 -0
  111. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v1/__init__.py +0 -0
  112. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v1/api.py +0 -0
  113. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v1/client.py +0 -0
  114. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/__init__.py +0 -0
  115. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/api.py +0 -0
  116. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/azure.py +0 -0
  117. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/client.py +0 -0
  118. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/bootstrap.py +0 -0
  119. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/cache.py +0 -0
  120. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/cli.py +0 -0
  121. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/env.py +0 -0
  122. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/inject.py +0 -0
  123. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/inject.py +0 -0
  124. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/requirements.py +0 -0
  125. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/shell.py +0 -0
  126. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/__init__.py +0 -0
  127. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/__main__.py +0 -0
  128. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/_pathhack.py +0 -0
  129. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/clicli.py +0 -0
  130. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/install.py +0 -0
  131. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/managers.py +0 -0
  132. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/types.py +0 -0
  133. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/__init__.py +0 -0
  134. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/clipboard.py +0 -0
  135. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/darwin_cf.py +0 -0
  136. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/linux_x11.py +0 -0
  137. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmake.py +0 -0
  138. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/__init__.py +0 -0
  139. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/__main__.py +0 -0
  140. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/_cmdlog.py +0 -0
  141. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/cli.py +0 -0
  142. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/cmdlog.py +0 -0
  143. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/__init__.py +0 -0
  144. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/__main__.py +0 -0
  145. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/cli.py +0 -0
  146. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/__init__.py +0 -0
  147. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/handlers.py +0 -0
  148. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/http.py +0 -0
  149. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/routes.py +0 -0
  150. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/server.py +0 -0
  151. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/targets.py +0 -0
  152. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/__init__.py +0 -0
  153. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/magic.py +0 -0
  154. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/revisions.py +0 -0
  155. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/shallow.py +0 -0
  156. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/status.py +0 -0
  157. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/__init__.py +0 -0
  158. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/paths.py +0 -0
  159. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/secrets.py +0 -0
  160. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/shadow.py +0 -0
  161. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/imgur.py +0 -0
  162. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/__init__.py +0 -0
  163. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/cli.py +0 -0
  164. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/ides.py +0 -0
  165. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/open.py +0 -0
  166. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/__init__.py +0 -0
  167. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/__main__.py +0 -0
  168. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/cli.py +0 -0
  169. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/default.py +0 -0
  170. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/inject.py +0 -0
  171. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/inspect.py +0 -0
  172. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/__init__.py +0 -0
  173. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/base.py +0 -0
  174. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/inject.py +0 -0
  175. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/running.py +0 -0
  176. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/standalone.py +0 -0
  177. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/system.py +0 -0
  178. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/__init__.py +0 -0
  179. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/inject.py +0 -0
  180. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/install.py +0 -0
  181. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/provider.py +0 -0
  182. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/pyenv.py +0 -0
  183. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/resolvers.py +0 -0
  184. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/types.py +0 -0
  185. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/__init__.py +0 -0
  186. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/inject.py +0 -0
  187. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/provider.py +0 -0
  188. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/uv.py +0 -0
  189. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/venvs.py +0 -0
  190. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/__init__.py +0 -0
  191. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/__main__.py +0 -0
  192. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/cli.py +0 -0
  193. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/find.py +0 -0
  194. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/magic.py +0 -0
  195. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/prepare.py +0 -0
  196. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/styles.py +0 -0
  197. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/__init__.py +0 -0
  198. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/__main__.py +0 -0
  199. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/_dumping.py +0 -0
  200. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/dumping.py +0 -0
  201. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/main.py +0 -0
  202. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/mypy/__init__.py +0 -0
  203. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/mypy/debug.py +0 -0
  204. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/mypy/report.py +0 -0
  205. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/__init__.py +0 -0
  206. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/building.py +0 -0
  207. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/compression.py +0 -0
  208. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/data.py +0 -0
  209. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/datarefs.py +0 -0
  210. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/dataserver.py +0 -0
  211. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/loading.py +0 -0
  212. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/media.py +0 -0
  213. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/__init__.py +0 -0
  214. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/packing.py +0 -0
  215. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/repositories.py +0 -0
  216. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/unpacking.py +0 -0
  217. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/repositories.py +0 -0
  218. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/__init__.py +0 -0
  219. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/marshal.py +0 -0
  220. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/names.py +0 -0
  221. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/requires.py +0 -0
  222. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/revisions.py +0 -0
  223. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/specifiers.py +0 -0
  224. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/versions.py +0 -0
  225. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/wheelfile.py +0 -0
  226. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pip.py +0 -0
  227. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/__init__.py +0 -0
  228. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/__main__.py +0 -0
  229. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/base.py +0 -0
  230. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/caches.py +0 -0
  231. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/git.py +0 -0
  232. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/imports.py +0 -0
  233. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/lite.py +0 -0
  234. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/main.py +0 -0
  235. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/unicode.py +0 -0
  236. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/__init__.py +0 -0
  237. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/apps/__init__.py +0 -0
  238. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/apps/ncdu.py +0 -0
  239. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/confirm.py +0 -0
  240. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/LICENSE +0 -0
  241. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/__init__.py +0 -0
  242. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/__main__.py +0 -0
  243. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/border.py +0 -0
  244. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/cli.py +0 -0
  245. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/markdown.py +0 -0
  246. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/parser.py +0 -0
  247. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/styles.py +0 -0
  248. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/tags.py +0 -0
  249. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/utils.py +0 -0
  250. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/__init__.py +0 -0
  251. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/attrdocs.py +0 -0
  252. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/bracepy.py +0 -0
  253. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/classdot.py +0 -0
  254. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/LICENSE +0 -0
  255. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/__init__.py +0 -0
  256. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/attrdoc.py +0 -0
  257. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/common.py +0 -0
  258. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/epydoc.py +0 -0
  259. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/google.py +0 -0
  260. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/numpydoc.py +0 -0
  261. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/parser.py +0 -0
  262. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/rest.py +0 -0
  263. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/__init__.py +0 -0
  264. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/bumpversion.py +0 -0
  265. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/srcheaders.py +0 -0
  266. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/tools/__init__.py +0 -0
  267. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/tools/importscan.py +0 -0
  268. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/tools/mkrelimp.py +0 -0
  269. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/__init__.py +0 -0
  270. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/__main__.py +0 -0
  271. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/cexts.py +0 -0
  272. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/cli.py +0 -0
  273. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/configs.py +0 -0
  274. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/inject.py +0 -0
  275. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/pkg.py +0 -0
  276. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/reqs.py +0 -0
  277. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/resources/__init__.py +0 -0
  278. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/resources/docker-dev.sh +0 -0
  279. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/resources/python.sh +0 -0
  280. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/venvs.py +0 -0
  281. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/__init__.py +0 -0
  282. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/interp.py +0 -0
  283. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/pyproject.py +0 -0
  284. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/slowcat.py +0 -0
  285. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/tmpexec.py +0 -0
  286. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tagstrings.py +0 -0
  287. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/__init__.py +0 -0
  288. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/all.py +0 -0
  289. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/tokenizert.py +0 -0
  290. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/utils.py +0 -0
  291. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/__init__.py +0 -0
  292. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/__init__.py +0 -0
  293. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/__main__.py +0 -0
  294. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/cli.py +0 -0
  295. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/consts.py +0 -0
  296. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/gen.py +0 -0
  297. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/cloc.py +0 -0
  298. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/diff.py +0 -0
  299. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/doc.py +0 -0
  300. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/docker.py +0 -0
  301. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/__init__.py +0 -0
  302. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/__main__.py +0 -0
  303. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/cli.py +0 -0
  304. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/cloning.py +0 -0
  305. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/consts.py +0 -0
  306. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/__init__.py +0 -0
  307. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/__main__.py +0 -0
  308. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/cli.py +0 -0
  309. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/formats.py +0 -0
  310. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/io.py +0 -0
  311. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/parsing.py +0 -0
  312. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/processing.py +0 -0
  313. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/rendering.py +0 -0
  314. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/__init__.py +0 -0
  315. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/__main__.py +0 -0
  316. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/cli.py +0 -0
  317. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/resources/__init__.py +0 -0
  318. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  319. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  320. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/linehisto.py +0 -0
  321. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/mkenv.py +0 -0
  322. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/notebook.py +0 -0
  323. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pawk/__init__.py +0 -0
  324. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pawk/__main__.py +0 -0
  325. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pawk/pawk.py +0 -0
  326. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pip.py +0 -0
  327. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/prof.py +0 -0
  328. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/qr.py +0 -0
  329. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/shadow.py +0 -0
  330. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/shell.py +0 -0
  331. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/sqlrepl.py +0 -0
  332. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/SOURCES.txt +0 -0
  333. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/dependency_links.txt +0 -0
  334. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/entry_points.txt +0 -0
  335. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/top_level.txt +0 -0
  336. {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev399
3
+ Version: 0.0.0.dev401
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev399
17
+ Requires-Dist: omlish==0.0.0.dev401
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -224,7 +224,7 @@
224
224
  "module": ".py.findimports",
225
225
  "attr": "_CLI_MODULE",
226
226
  "file": "omdev/py/findimports.py",
227
- "line": 89,
227
+ "line": 136,
228
228
  "value": {
229
229
  "$.cli.types.CliModule": {
230
230
  "cmd_name": "py/findimports",
@@ -236,7 +236,7 @@
236
236
  "module": ".py.scripts.execstat",
237
237
  "attr": "_CLI_MODULE",
238
238
  "file": "omdev/py/scripts/execstat.py",
239
- "line": 82,
239
+ "line": 84,
240
240
  "value": {
241
241
  "$.cli.types.CliModule": {
242
242
  "cmd_name": "py/execstat",
@@ -248,7 +248,7 @@
248
248
  "module": ".py.scripts.importtrace",
249
249
  "attr": "_CLI_MODULE",
250
250
  "file": "omdev/py/scripts/importtrace.py",
251
- "line": 490,
251
+ "line": 491,
252
252
  "value": {
253
253
  "$.cli.types.CliModule": {
254
254
  "cmd_name": "py/importtrace",
@@ -7,7 +7,7 @@ import typing as ta
7
7
 
8
8
 
9
9
  def read_yaml_file(yaml_file: str) -> ta.Any:
10
- yaml = __import__('yaml')
10
+ import yaml # noqa
11
11
 
12
12
  with open(yaml_file) as f:
13
13
  return yaml.safe_load(f)
@@ -13,7 +13,8 @@ import typing as ta
13
13
 
14
14
  from omlish import check
15
15
  from omlish.lite.cached import cached_nullary
16
- from omlish.manifests.globals import MANIFEST_LOADER
16
+ from omlish.manifests.globals import GlobalManifestLoader
17
+ from omlish.manifests.loading import ManifestLoader
17
18
 
18
19
  from .types import CliCmd
19
20
  from .types import CliFunc
@@ -183,16 +184,18 @@ def _build_arg_parser() -> argparse.ArgumentParser:
183
184
 
184
185
 
185
186
  def _build_cmd_set(args: ta.Any) -> CliCmdSet:
186
- ldr = MANIFEST_LOADER.from_entry_point(
187
- globals(),
188
- cls_instantiator=MANIFEST_LOADER.instantiate_cls,
187
+ ldr = ManifestLoader(
188
+ **ManifestLoader.kwargs_from_entry_point(
189
+ globals(),
190
+ **GlobalManifestLoader.default_kwargs(),
191
+ ),
189
192
  )
190
193
 
191
194
  #
192
195
 
193
- pkgs = ldr.scan_or_discover_pkgs(
194
- specified_roots=args.cli_pkg_root,
195
- fallback_root=os.getcwd(),
196
+ pkgs = ldr.scan_or_discover_packages(
197
+ specified_root_dirs=args.cli_pkg_root,
198
+ fallback_root_dir=os.getcwd(),
196
199
  )
197
200
 
198
201
  #
@@ -200,7 +203,7 @@ def _build_cmd_set(args: ta.Any) -> CliCmdSet:
200
203
  lst: list[CliCmd] = []
201
204
 
202
205
  for m in ldr.load(*pkgs, only=[CliModule]):
203
- lst.append(check.isinstance(m.value, CliModule))
206
+ lst.append(check.isinstance(m.value(), CliModule))
204
207
 
205
208
  lst.extend(_CLI_FUNCS)
206
209
 
@@ -7,6 +7,7 @@ TODO:
7
7
  - !! manifests for dataclass config?
8
8
  - more sparse / diffuse intent, not package-level
9
9
  """
10
+ import importlib
10
11
  import logging
11
12
  import os.path
12
13
  import typing as ta
@@ -46,7 +47,6 @@ class DataclassCodeGen:
46
47
  sub_pkgs = sorted(lang.yield_importable(
47
48
  pkg_root,
48
49
  recursive=True,
49
- include_special=True,
50
50
  ))
51
51
 
52
52
  for sub_pkg in sub_pkgs:
@@ -62,7 +62,7 @@ class DataclassCodeGen:
62
62
  with processing_options_context(CodegenProcessingOption(callback)):
63
63
  print(f'{sub_pkg=}')
64
64
  try:
65
- __import__(sub_pkg)
65
+ importlib.import_module(sub_pkg)
66
66
  except ImportError as e:
67
67
  print(repr(e))
68
68
 
@@ -9,6 +9,10 @@ TODO:
9
9
  - is this lite? or not?
10
10
  - can this run externally? or not? what does it have to import?
11
11
  - has to import manifest classes, but not modules with manifest magics
12
+ - !! can make lite / amalg / embeddable with 'manifest base class markers':
13
+ - rather than issubclass(cls, ModAttrManifest), can do if cls.__omlish_manifest_class__ == 'mod_attr'
14
+ - reject unknowns
15
+ - can analyze statically
12
16
 
13
17
  See (entry_points):
14
18
  - https://github.com/pytest-dev/pluggy/blob/main/src/pluggy/_manager.py#L405
@@ -37,7 +41,7 @@ from omlish.lite.imports import import_attr
37
41
  from omlish.lite.json import json_dumps_pretty
38
42
  from omlish.lite.logs import log
39
43
  from omlish.manifests.base import ModAttrManifest
40
- from omlish.manifests.globals import MANIFEST_LOADER
44
+ from omlish.manifests.globals import GlobalManifestLoader
41
45
  from omlish.manifests.types import Manifest
42
46
  from omlish.manifests.types import ManifestOrigin
43
47
 
@@ -427,5 +431,5 @@ def check_package_manifests(
427
431
  [(key, value_dct)] = manifest.value.items()
428
432
  if key.startswith('$.'):
429
433
  key = f'${name}{key[1:]}'
430
- cls = MANIFEST_LOADER.load_cls(key)
431
- value = MANIFEST_LOADER.instantiate_cls(cls, **value_dct) # noqa
434
+ cls = GlobalManifestLoader.instance()._load_class(key) # noqa
435
+ value = GlobalManifestLoader.instance()._instantiate_value(cls, **value_dct) # noqa
@@ -92,10 +92,12 @@ class OciDataTarWriter(ExitStacked):
92
92
  )
93
93
 
94
94
  elif self._compression is OciCompression.ZSTD:
95
- zc = __import__('zstandard').ZstdCompressor(
95
+ import zstandard # noqa
96
+
97
+ zc = zstandard.ZstdCompressor(
96
98
  level=self._zstd_level,
97
99
  )
98
- self._cf = self._enter_context(zc.stream_writer(self._cw))
100
+ self._cf = self._enter_context(zc.stream_writer(self._cw)) # type: ignore
99
101
 
100
102
  elif self._compression is None:
101
103
  self._cf = self._cw # type: ignore
@@ -1,7 +1,7 @@
1
1
  import dataclasses as dc
2
2
  import typing as ta
3
3
 
4
- from omlish.manifests.globals import MANIFEST_LOADER
4
+ from omlish.manifests.globals import GlobalManifestLoader
5
5
 
6
6
  from .base import Precheck
7
7
  from .base import PrecheckContext
@@ -23,6 +23,6 @@ class ManifestsPrecheck(Precheck['ManifestsPrecheck.Config']):
23
23
  async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
24
24
  for src_root in sorted(self._context.src_roots):
25
25
  try:
26
- MANIFEST_LOADER.load(src_root)
26
+ GlobalManifestLoader.load(src_root)
27
27
  except Exception as e: # noqa
28
28
  yield Precheck.Violation(self, f'Error loading manifest for {src_root}: {e!r}')
@@ -41,7 +41,19 @@ class ScriptDepsPrecheck(Precheck['ScriptDepsPrecheck.Config']):
41
41
  if not src.startswith('#!/usr/bin/env python3\n'):
42
42
  yield Precheck.Violation(self, f'script {fp} lacks correct shebang')
43
43
 
44
- imps = findimports.find_imports(fp)
45
- deps = findimports.get_import_deps(imps)
44
+ deps: set[str] = set()
45
+
46
+ imp_finder = findimports.ImportFinder()
47
+ for imp in imp_finder.yield_file_imports(fp):
48
+ # FIXME: lame
49
+ if imp.line and 'noqa' in [p.strip() for p in imp.line.split('#')]:
50
+ continue
51
+
52
+ if (imp_tgts := imp_finder.get_import_node_targets(imp.node)) is None:
53
+ continue
54
+
55
+ imp_deps = imp_finder.get_import_deps(imp_tgts)
56
+ deps.update(imp_deps)
57
+
46
58
  if deps:
47
59
  yield Precheck.Violation(self, f'script {fp} has deps: {deps}')
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env python3
2
+ # @omlish-script
3
+ """
4
+ Note: Not lite as supporting old ast grammars is annoying and a non-goal.
5
+
6
+ TODO:
7
+ - !! FIX: from omlish import lang - try lang as a subpackage
8
+ - multiple commands:
9
+ - dumb cmp (a = set(sys.modules); import ...; print(set(sys.modules) - a)
10
+ - graphviz
11
+ """
12
+ import ast
13
+ import dataclasses as dc
14
+ import importlib.machinery
15
+ import importlib.util
16
+ import os.path
17
+ import sys
18
+ import typing as ta
19
+
20
+
21
+ ##
22
+
23
+
24
+ class ImportFinder:
25
+ def __init__(
26
+ self,
27
+ *,
28
+ builtin_module_names: ta.AbstractSet[str] | None = None,
29
+ ) -> None:
30
+ super().__init__()
31
+
32
+ if builtin_module_names is None:
33
+ builtin_module_names = self.DEFAULT_BUILTIN_MODULE_NAMES
34
+ self._builtin_module_names = builtin_module_names
35
+
36
+ self._whichmod_cache: dict[str, ta.Any] = {}
37
+
38
+ #
39
+
40
+ @dc.dataclass(frozen=True)
41
+ class Import:
42
+ fp: str
43
+ node: ast.AST
44
+ line: str | None
45
+
46
+ def yield_file_imports(self, fp: str) -> ta.Iterator[Import]:
47
+ # if not os.path.isfile(os.path.join(os.path.dirname(fp), '__init__.py')):
48
+ # return
49
+
50
+ with open(fp) as f:
51
+ buf = f.read()
52
+
53
+ lines = buf.splitlines(keepends=True)
54
+
55
+ for node in ast.walk(ast.parse(buf)):
56
+ if isinstance(node, (ast.Import, ast.ImportFrom)):
57
+ yield ImportFinder.Import(
58
+ fp,
59
+ node,
60
+ lines[node.lineno - 1] if node.lineno is not None else None,
61
+ )
62
+
63
+ def yield_imports(self, *rootps: str) -> ta.Iterator[Import]:
64
+ for rootp in rootps:
65
+ if os.path.isfile(rootp):
66
+ if rootp.endswith('.py'):
67
+ yield from self.yield_file_imports(os.path.join(os.path.dirname(rootp), os.path.basename(rootp)))
68
+
69
+ else:
70
+ for dp, dns, fns in os.walk(os.path.expanduser(rootp)): # noqa
71
+ for fn in fns:
72
+ if fn.endswith('.py'):
73
+ yield from self.yield_file_imports(os.path.join(dp, fn))
74
+
75
+ #
76
+
77
+ def get_import_node_targets(self, node: ast.AST) -> set[str] | None:
78
+ if isinstance(node, ast.Import):
79
+ return {na.name for na in node.names}
80
+
81
+ elif isinstance(node, ast.ImportFrom):
82
+ return {node.module} if node.module and not node.level else set()
83
+
84
+ else:
85
+ return None
86
+
87
+ def find_import_targets(self, *rootps: str) -> set[str]:
88
+ ret: set[str] = set()
89
+ for imp in self.yield_imports(*rootps):
90
+ if (imp_tgts := self.get_import_node_targets(imp.node)):
91
+ ret.update(imp_tgts)
92
+ return ret
93
+
94
+ #
95
+
96
+ DEFAULT_BUILTIN_MODULE_NAMES: ta.ClassVar[ta.AbstractSet[str]] = frozenset([
97
+ *sys.builtin_module_names,
98
+ *sys.stdlib_module_names,
99
+ ])
100
+
101
+ def _whichmod(self, i: str) -> ta.Literal['bad', 'builtin', 'dep']:
102
+ try:
103
+ l = importlib.util.find_spec(i)
104
+ except (ImportError, ValueError):
105
+ return 'bad'
106
+
107
+ if not isinstance(l, importlib.machinery.ModuleSpec) or not l.origin:
108
+ return 'bad'
109
+
110
+ # if l.origin.startswith(sys.base_prefix) or l.origin == 'frozen':
111
+ # return 'builtin'
112
+
113
+ if i in self._builtin_module_names:
114
+ return 'builtin'
115
+
116
+ return 'dep'
117
+
118
+ def whichmod(self, i: str) -> ta.Literal['bad', 'builtin', 'dep']:
119
+ try:
120
+ return self._whichmod_cache[i]
121
+ except KeyError:
122
+ pass
123
+
124
+ ret = self._whichmod(i)
125
+ self._whichmod_cache[i] = ret
126
+ return ret
127
+
128
+ def get_import_deps(self, imps: set[str]) -> set[str]:
129
+ eimps = {n for n in imps for n in [n.split('.')[0]] if n not in sys.builtin_module_names}
130
+ return {i for i in eimps if self.whichmod(i) != 'builtin'}
131
+
132
+
133
+ ##
134
+
135
+
136
+ # @omlish-manifest
137
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
138
+ 'cmd_name': 'py/findimports',
139
+ 'mod_name': __name__,
140
+ }}
141
+
142
+
143
+ if __name__ == '__main__':
144
+ def _main() -> None:
145
+ imp_finder = ImportFinder()
146
+ imps = imp_finder.find_import_targets(*sys.argv[1:])
147
+ deps = imp_finder.get_import_deps(imps)
148
+ print(chr(10).join(sorted(deps)))
149
+
150
+ _main()
@@ -36,8 +36,10 @@ def _run(
36
36
 
37
37
  #
38
38
 
39
+ ns: dict = {}
40
+
39
41
  if setup:
40
- exec(setup)
42
+ exec(setup, globals(), ns)
41
43
 
42
44
  code = compile(src, '', 'exec')
43
45
 
@@ -54,7 +56,7 @@ def _run(
54
56
 
55
57
  #
56
58
 
57
- exec(code)
59
+ exec(code, globals(), ns)
58
60
 
59
61
  #
60
62
 
@@ -3,6 +3,7 @@
3
3
  # ruff: noqa: UP006 UP007 UP045
4
4
  """
5
5
  TODO:
6
+ - !! amalg !!
6
7
  - hoist first stacktrace file to a full field
7
8
  - no psutil on lin / togglable on mac
8
9
  - create table paths(path varchar(1024); - norm, dedupe, index, etc (bonus points for 32bit key)
@@ -237,7 +237,7 @@ class ShellCmd:
237
237
 
238
238
 
239
239
  def read_yaml_file(yaml_file: str) -> ta.Any:
240
- yaml = __import__('yaml')
240
+ import yaml # noqa
241
241
 
242
242
  with open(yaml_file) as f:
243
243
  return yaml.safe_load(f)
@@ -7793,10 +7793,12 @@ class OciDataTarWriter(ExitStacked):
7793
7793
  )
7794
7794
 
7795
7795
  elif self._compression is OciCompression.ZSTD:
7796
- zc = __import__('zstandard').ZstdCompressor(
7796
+ import zstandard # noqa
7797
+
7798
+ zc = zstandard.ZstdCompressor(
7797
7799
  level=self._zstd_level,
7798
7800
  )
7799
- self._cf = self._enter_context(zc.stream_writer(self._cw))
7801
+ self._cf = self._enter_context(zc.stream_writer(self._cw)) # type: ignore
7800
7802
 
7801
7803
  elif self._compression is None:
7802
7804
  self._cf = self._cw # type: ignore
@@ -54,10 +54,10 @@ class StaticGitMessageGeneratorManifest(StaticModAttrManifest, GitMessageGenerat
54
54
 
55
55
  @cached.function
56
56
  def load_message_generator_manifests() -> ta.Sequence[GitMessageGeneratorManifest]:
57
- ldr = manifest_globals.MANIFEST_LOADER
58
- pkgs = ldr.scan_or_discover_pkgs(fallback_root=os.getcwd())
57
+ ldr = manifest_globals.GlobalManifestLoader.instance()
58
+ pkgs = ldr.scan_or_discover_packages(fallback_root_dir=os.getcwd())
59
59
  mfs = ldr.load(*pkgs, only=[GitMessageGeneratorManifest])
60
- return [mf.value for mf in mfs]
60
+ return [mf.value() for mf in mfs]
61
61
 
62
62
 
63
63
  @cached.function
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev399
3
+ Version: 0.0.0.dev401
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev399
17
+ Requires-Dist: omlish==0.0.0.dev401
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev399
1
+ omlish==0.0.0.dev401
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.13'
16
- version = '0.0.0.dev399'
16
+ version = '0.0.0.dev401'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,7 +24,7 @@ classifiers = [
24
24
  ]
25
25
  description = 'omdev'
26
26
  dependencies = [
27
- 'omlish == 0.0.0.dev399',
27
+ 'omlish == 0.0.0.dev401',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
@@ -1,102 +0,0 @@
1
- #!/usr/bin/env python3
2
- # @omlish-script
3
- """
4
- TODO:
5
- - !! FIX: from omlish import lang - try lang as a subpackage
6
- - multiple commands:
7
- - dumb cmp (a = set(sys.modules); import ...; print(set(sys.modules) - a)
8
- - graphviz
9
- """
10
- import ast
11
- import importlib.machinery
12
- import importlib.util
13
- import os.path
14
- import sys
15
- import typing as ta
16
-
17
-
18
- ##
19
-
20
-
21
- _BUILTIN_MODULE_NAMES = frozenset([*sys.builtin_module_names, *sys.stdlib_module_names])
22
-
23
-
24
- def whichmod(i: str) -> ta.Literal['bad', 'builtin', 'dep']:
25
- try:
26
- l = importlib.util.find_spec(i)
27
- except (ImportError, ValueError):
28
- return 'bad'
29
-
30
- if not isinstance(l, importlib.machinery.ModuleSpec) or not l.origin:
31
- return 'bad'
32
-
33
- # if l.origin.startswith(sys.base_prefix) or l.origin == 'frozen':
34
- # return 'builtin'
35
-
36
- if i in _BUILTIN_MODULE_NAMES:
37
- return 'builtin'
38
-
39
- return 'dep'
40
-
41
-
42
- def yield_imports(fp: str) -> set[str]:
43
- # if not os.path.isfile(os.path.join(os.path.dirname(fp), '__init__.py')):
44
- # return
45
-
46
- with open(fp) as f:
47
- buf = f.read()
48
-
49
- nodes: list[ast.AST] = []
50
-
51
- def rec(n):
52
- nodes.append(n)
53
- for c in ast.iter_child_nodes(n):
54
- rec(c)
55
-
56
- rec(ast.parse(buf))
57
-
58
- return {
59
- *(na.name for i in nodes if isinstance(i, ast.Import) for na in i.names),
60
- *(i.module for i in nodes if isinstance(i, ast.ImportFrom) if i.module and not i.level),
61
- }
62
-
63
-
64
- def find_imports(*rootps: str) -> set[str]:
65
- imps: set[str] = set()
66
-
67
- for rootp in rootps:
68
- if os.path.isfile(rootp):
69
- if rootp.endswith('.py'):
70
- imps.update(yield_imports(os.path.join(os.path.dirname(rootp), os.path.basename(rootp))))
71
-
72
- else:
73
- for dp, dns, fns in os.walk(os.path.expanduser(rootp)): # noqa
74
- for fn in fns:
75
- if fn.endswith('.py'):
76
- imps.update(yield_imports(os.path.join(dp, fn)))
77
-
78
- return imps
79
-
80
-
81
- def get_import_deps(imps: set[str]) -> set[str]:
82
- eimps = {n for n in imps for n in [n.split('.')[0]] if n not in sys.builtin_module_names}
83
- return {i for i in eimps if whichmod(i) != 'builtin'}
84
-
85
-
86
- ##
87
-
88
-
89
- # @omlish-manifest
90
- _CLI_MODULE = {'$omdev.cli.types.CliModule': {
91
- 'cmd_name': 'py/findimports',
92
- 'mod_name': __name__,
93
- }}
94
-
95
-
96
- if __name__ == '__main__':
97
- def _main() -> None:
98
- imps = find_imports(*sys.argv[1:])
99
- deps = get_import_deps(imps)
100
- print(chr(10).join(sorted(deps)))
101
-
102
- _main()
File without changes
File without changes
File without changes