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.
- {omdev-0.0.0.dev399/omdev.egg-info → omdev-0.0.0.dev401}/PKG-INFO +2 -2
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/.manifests.json +3 -3
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/utils.py +1 -1
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/main.py +11 -8
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/codegen.py +2 -2
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/building.py +7 -3
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/tars.py +4 -2
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/manifests.py +2 -2
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/scripts.py +14 -2
- omdev-0.0.0.dev401/omdev/py/findimports.py +150 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/execstat.py +4 -2
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/importtrace.py +1 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/ci.py +5 -3
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/messages.py +3 -3
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/pyproject.toml +2 -2
- omdev-0.0.0.dev399/omdev/py/findimports.py +0 -102
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/LICENSE +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/README.md +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataclasses/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/intellij/open.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/_dumping.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/confirm.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/LICENSE +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/border.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/markdown.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/parser.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/styles.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/tags.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/ptk/markdown/utils.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/interp.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/pyproject.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/consts.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/antlr/gen.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/resources/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/SOURCES.txt +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev399 → omdev-0.0.0.dev401}/omdev.egg-info/top_level.txt +0 -0
- {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.
|
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.
|
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":
|
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":
|
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":
|
251
|
+
"line": 491,
|
252
252
|
"value": {
|
253
253
|
"$.cli.types.CliModule": {
|
254
254
|
"cmd_name": "py/importtrace",
|
@@ -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
|
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 =
|
187
|
-
|
188
|
-
|
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.
|
194
|
-
|
195
|
-
|
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
|
-
|
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
|
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 =
|
431
|
-
value =
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
45
|
-
|
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
|
|
@@ -237,7 +237,7 @@ class ShellCmd:
|
|
237
237
|
|
238
238
|
|
239
239
|
def read_yaml_file(yaml_file: str) -> ta.Any:
|
240
|
-
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
|
-
|
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.
|
58
|
-
pkgs = ldr.
|
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.
|
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.
|
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"
|
@@ -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.
|
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.
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|