omdev 0.0.0.dev291__tar.gz → 0.0.0.dev293__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.dev291/omdev.egg-info → omdev-0.0.0.dev293}/PKG-INFO +2 -2
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/.manifests.json +1 -1
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/compose.py +1 -1
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/clicli.py +6 -1
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/base.py +5 -7
- omdev-0.0.0.dev293/omdev/precheck/caches.py +77 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/git.py +2 -3
- omdev-0.0.0.dev293/omdev/precheck/imports.py +76 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/lite.py +3 -1
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/main.py +73 -26
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/manifests.py +3 -1
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/scripts.py +8 -2
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ptk/__init__.py +2 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/scripts/ci.py +6 -4
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev.egg-info/SOURCES.txt +2 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/pyproject.toml +2 -2
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/LICENSE +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/README.md +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/antlr/consts.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/antlr/gen.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/scripts/interp.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/scripts/pyproject.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/intellij.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev291 → omdev-0.0.0.dev293}/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.dev293
|
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.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev293
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -155,7 +155,7 @@ class DockerComposeRun(AsyncExitStacked):
|
|
155
155
|
|
156
156
|
async with contextlib.AsyncExitStack() as es:
|
157
157
|
if not (self._cfg.no_dependencies or self._cfg.no_dependency_cleanup):
|
158
|
-
await es.enter_async_context(adefer(self._cleanup_dependencies)) # noqa
|
158
|
+
await es.enter_async_context(adefer(self._cleanup_dependencies())) # noqa
|
159
159
|
|
160
160
|
sh_cmd = ' '.join([
|
161
161
|
'docker',
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import inspect
|
2
2
|
import os
|
3
|
+
import shlex
|
3
4
|
import subprocess
|
4
5
|
import sys
|
5
6
|
import typing as ta
|
@@ -76,6 +77,7 @@ class CliCli(ap.Cli):
|
|
76
77
|
ap.arg('--url', default=DEFAULT_REINSTALL_URL),
|
77
78
|
ap.arg('--local', action='store_true'),
|
78
79
|
ap.arg('--no-deps', action='store_true'),
|
80
|
+
ap.arg('--dry-run', action='store_true'),
|
79
81
|
ap.arg('extra_deps', nargs='*'),
|
80
82
|
)
|
81
83
|
def reinstall(self) -> None:
|
@@ -147,7 +149,7 @@ class CliCli(ap.Cli):
|
|
147
149
|
|
148
150
|
reco_cmd = ' '.join([
|
149
151
|
'curl -LsSf',
|
150
|
-
url,
|
152
|
+
f"'{url}'" if (qu := shlex.quote(url)) == url else qu,
|
151
153
|
'| python3 -',
|
152
154
|
*deps,
|
153
155
|
])
|
@@ -156,6 +158,9 @@ class CliCli(ap.Cli):
|
|
156
158
|
with urllib.request.urlopen(urllib.request.Request(url)) as resp: # noqa
|
157
159
|
install_src = resp.read().decode('utf-8')
|
158
160
|
|
161
|
+
if self.args.dry_run:
|
162
|
+
return
|
163
|
+
|
159
164
|
os.execl(
|
160
165
|
sys.executable,
|
161
166
|
sys.executable,
|
@@ -2,6 +2,9 @@ import abc
|
|
2
2
|
import dataclasses as dc
|
3
3
|
import typing as ta
|
4
4
|
|
5
|
+
from omlish import lang
|
6
|
+
from omlish.configs import all as cfgs
|
7
|
+
|
5
8
|
|
6
9
|
PrecheckConfigT = ta.TypeVar('PrecheckConfigT', bound='Precheck.Config')
|
7
10
|
|
@@ -17,16 +20,11 @@ class PrecheckContext:
|
|
17
20
|
##
|
18
21
|
|
19
22
|
|
20
|
-
class Precheck(
|
23
|
+
class Precheck(cfgs.Configurable[PrecheckConfigT], lang.Abstract):
|
21
24
|
@dc.dataclass(frozen=True)
|
22
|
-
class Config:
|
25
|
+
class Config(cfgs.Configurable.Config):
|
23
26
|
pass
|
24
27
|
|
25
|
-
def __init__(self, context: PrecheckContext, config: PrecheckConfigT) -> None:
|
26
|
-
super().__init__()
|
27
|
-
self._context = context
|
28
|
-
self._config = config
|
29
|
-
|
30
28
|
@dc.dataclass(frozen=True)
|
31
29
|
class Violation:
|
32
30
|
pc: 'Precheck'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
import ast
|
2
|
+
import os
|
3
|
+
import typing as ta
|
4
|
+
|
5
|
+
from omlish import dataclasses as dc
|
6
|
+
from omlish import lang
|
7
|
+
from omlish.text.filecache import TextFileCache
|
8
|
+
|
9
|
+
from ..py.srcheaders import PyHeaderLine
|
10
|
+
from ..py.srcheaders import get_py_header_lines
|
11
|
+
from ..tokens import all as tks
|
12
|
+
|
13
|
+
|
14
|
+
##
|
15
|
+
|
16
|
+
|
17
|
+
class DirWalkCache:
|
18
|
+
@dc.dataclass(frozen=True)
|
19
|
+
class Entry:
|
20
|
+
root: str
|
21
|
+
dirs: ta.Sequence[str]
|
22
|
+
files: ta.Sequence[str]
|
23
|
+
|
24
|
+
@lang.cached_function
|
25
|
+
def list_dir(self, path: str) -> ta.Sequence[Entry]:
|
26
|
+
return [
|
27
|
+
self.Entry(root, list(dirs), list(files))
|
28
|
+
for root, dirs, files in os.walk(path)
|
29
|
+
]
|
30
|
+
|
31
|
+
|
32
|
+
##
|
33
|
+
|
34
|
+
|
35
|
+
@dc.dataclass(frozen=True)
|
36
|
+
class AstCache:
|
37
|
+
_tfc: TextFileCache = dc.field(repr=False)
|
38
|
+
|
39
|
+
@lang.cached_function
|
40
|
+
def get_file_ast(self, path: str) -> ast.AST | Exception:
|
41
|
+
try:
|
42
|
+
tfe = self._tfc.get_entry(path)
|
43
|
+
return ast.parse(tfe.text(), path)
|
44
|
+
except Exception as e: # noqa
|
45
|
+
return e
|
46
|
+
|
47
|
+
|
48
|
+
##
|
49
|
+
|
50
|
+
|
51
|
+
@dc.dataclass(frozen=True)
|
52
|
+
class TokensCache:
|
53
|
+
_tfc: TextFileCache = dc.field(repr=False)
|
54
|
+
|
55
|
+
@lang.cached_function
|
56
|
+
def get_file_tokens(self, path: str) -> tks.Tokens | Exception:
|
57
|
+
try:
|
58
|
+
tfe = self._tfc.get_entry(path)
|
59
|
+
return tks.src_to_tokens(tfe.text())
|
60
|
+
except Exception as e: # noqa
|
61
|
+
return e
|
62
|
+
|
63
|
+
|
64
|
+
##
|
65
|
+
|
66
|
+
|
67
|
+
@dc.dataclass(frozen=True)
|
68
|
+
class HeadersCache:
|
69
|
+
_tfc: TextFileCache = dc.field(repr=False)
|
70
|
+
|
71
|
+
@lang.cached_function
|
72
|
+
def get_file_headers(self, path: str) -> ta.Sequence[PyHeaderLine] | Exception:
|
73
|
+
try:
|
74
|
+
tfe = self._tfc.get_entry(path)
|
75
|
+
return get_py_header_lines(tfe.text())
|
76
|
+
except Exception as e: # noqa
|
77
|
+
return e
|
@@ -3,7 +3,6 @@ import dataclasses as dc
|
|
3
3
|
import typing as ta
|
4
4
|
|
5
5
|
from .base import Precheck
|
6
|
-
from .base import PrecheckContext
|
7
6
|
|
8
7
|
|
9
8
|
##
|
@@ -23,8 +22,8 @@ class GitBlacklistPrecheck(Precheck['GitBlacklistPrecheck.Config']):
|
|
23
22
|
'secrets.yml',
|
24
23
|
)
|
25
24
|
|
26
|
-
def __init__(self,
|
27
|
-
super().__init__(
|
25
|
+
def __init__(self, config: Config = Config()) -> None:
|
26
|
+
super().__init__(config)
|
28
27
|
|
29
28
|
async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
|
30
29
|
for f in self._config.files:
|
@@ -0,0 +1,76 @@
|
|
1
|
+
import ast
|
2
|
+
import dataclasses as dc
|
3
|
+
import os.path
|
4
|
+
import typing as ta
|
5
|
+
|
6
|
+
from .base import Precheck
|
7
|
+
from .base import PrecheckContext
|
8
|
+
from .caches import AstCache
|
9
|
+
from .caches import DirWalkCache
|
10
|
+
from .caches import HeadersCache
|
11
|
+
|
12
|
+
|
13
|
+
##
|
14
|
+
|
15
|
+
|
16
|
+
class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
|
17
|
+
@dc.dataclass(frozen=True)
|
18
|
+
class Config(Precheck.Config):
|
19
|
+
pass
|
20
|
+
|
21
|
+
def __init__(
|
22
|
+
self,
|
23
|
+
context: PrecheckContext,
|
24
|
+
config: Config = Config(),
|
25
|
+
*,
|
26
|
+
dir_walk_cache: DirWalkCache,
|
27
|
+
headers_cache: HeadersCache,
|
28
|
+
ast_cache: AstCache,
|
29
|
+
) -> None:
|
30
|
+
super().__init__(config)
|
31
|
+
|
32
|
+
self._context = context
|
33
|
+
|
34
|
+
self._dir_walk_cache = dir_walk_cache
|
35
|
+
self._headers_cache = headers_cache
|
36
|
+
self._ast_cache = ast_cache
|
37
|
+
|
38
|
+
async def _run_py_file(self, py_file: str, src_root: str) -> ta.AsyncGenerator[Precheck.Violation, None]:
|
39
|
+
if isinstance(header_lines := self._headers_cache.get_file_headers(py_file), Exception):
|
40
|
+
return
|
41
|
+
if any(hl.src.strip() == '# ruff: noqa' for hl in header_lines):
|
42
|
+
return
|
43
|
+
|
44
|
+
py_file_ast = self._ast_cache.get_file_ast(py_file)
|
45
|
+
if not isinstance(py_file_ast, ast.Module):
|
46
|
+
return
|
47
|
+
|
48
|
+
for cur_node in py_file_ast.body:
|
49
|
+
if isinstance(cur_node, ast.Import):
|
50
|
+
imp_alias: ast.alias
|
51
|
+
for imp_alias in cur_node.names:
|
52
|
+
if imp_alias.name.split('.')[0] == src_root:
|
53
|
+
yield Precheck.Violation(self, f'Root relative import in file {py_file}: {imp_alias.name!r}')
|
54
|
+
|
55
|
+
elif isinstance(cur_node, ast.ImportFrom):
|
56
|
+
if cur_node.level == 0 and cur_node.module and cur_node.module.split('.')[0] == src_root:
|
57
|
+
yield Precheck.Violation(self, f'Root relative import in file {py_file}: {cur_node.module!r}')
|
58
|
+
|
59
|
+
return
|
60
|
+
|
61
|
+
async def _run_src_root(self, src_root: str) -> ta.AsyncGenerator[Precheck.Violation, None]:
|
62
|
+
py_files = [
|
63
|
+
os.path.join(e.root, f)
|
64
|
+
for e in self._dir_walk_cache.list_dir(src_root)
|
65
|
+
for f in e.files
|
66
|
+
if f.endswith('.py')
|
67
|
+
]
|
68
|
+
|
69
|
+
for py_file in py_files:
|
70
|
+
async for v in self._run_py_file(py_file, src_root):
|
71
|
+
yield v
|
72
|
+
|
73
|
+
async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
|
74
|
+
for src_root in self._context.src_roots:
|
75
|
+
async for v in self._run_src_root(src_root):
|
76
|
+
yield v
|
@@ -29,7 +29,9 @@ class LitePython8Precheck(Precheck['LitePython8Precheck.Config']):
|
|
29
29
|
concurrency: int = 4
|
30
30
|
|
31
31
|
def __init__(self, context: PrecheckContext, config: Config = Config()) -> None:
|
32
|
-
super().__init__(
|
32
|
+
super().__init__(config)
|
33
|
+
|
34
|
+
self._context = context
|
33
35
|
|
34
36
|
#
|
35
37
|
|
@@ -25,11 +25,18 @@ import os.path
|
|
25
25
|
import sys
|
26
26
|
import typing as ta
|
27
27
|
|
28
|
+
from omlish import inject as inj
|
28
29
|
from omlish.logs import all as logs
|
29
30
|
|
30
31
|
from .base import Precheck
|
31
32
|
from .base import PrecheckContext
|
33
|
+
from .caches import AstCache
|
34
|
+
from .caches import DirWalkCache
|
35
|
+
from .caches import HeadersCache
|
36
|
+
from .caches import TextFileCache
|
37
|
+
from .caches import TokensCache
|
32
38
|
from .git import GitBlacklistPrecheck
|
39
|
+
from .imports import RootRelativeImportPrecheck
|
33
40
|
from .lite import LitePython8Precheck
|
34
41
|
from .manifests import ManifestsPrecheck
|
35
42
|
from .scripts import ScriptDepsPrecheck
|
@@ -41,6 +48,36 @@ log = logging.getLogger(__name__)
|
|
41
48
|
##
|
42
49
|
|
43
50
|
|
51
|
+
def bind_main(
|
52
|
+
ctx: PrecheckContext,
|
53
|
+
pc_cfgs: ta.Iterable[Precheck.Config],
|
54
|
+
) -> inj.Elements:
|
55
|
+
lst: list[inj.Elemental] = [
|
56
|
+
inj.bind(ctx),
|
57
|
+
|
58
|
+
inj.set_binder[Precheck](),
|
59
|
+
|
60
|
+
inj.bind(AstCache, singleton=True),
|
61
|
+
inj.bind(DirWalkCache, singleton=True),
|
62
|
+
inj.bind(HeadersCache, singleton=True),
|
63
|
+
inj.bind(TextFileCache, singleton=True),
|
64
|
+
inj.bind(TokensCache, singleton=True),
|
65
|
+
]
|
66
|
+
|
67
|
+
#
|
68
|
+
|
69
|
+
for pc_cfg in pc_cfgs:
|
70
|
+
lst.extend([
|
71
|
+
inj.bind(pc_cfg),
|
72
|
+
inj.bind(pc_cfg.configurable_cls, eager=True, singleton=True),
|
73
|
+
inj.set_binder[Precheck]().bind(pc_cfg.configurable_cls),
|
74
|
+
])
|
75
|
+
|
76
|
+
#
|
77
|
+
|
78
|
+
return inj.as_elements(*lst)
|
79
|
+
|
80
|
+
|
44
81
|
def _check_cmd(args) -> None:
|
45
82
|
if not os.path.isfile('pyproject.toml'):
|
46
83
|
raise RuntimeError('must run in project root')
|
@@ -49,34 +86,44 @@ def _check_cmd(args) -> None:
|
|
49
86
|
src_roots=args.roots,
|
50
87
|
)
|
51
88
|
|
52
|
-
|
53
|
-
GitBlacklistPrecheck(
|
54
|
-
|
55
|
-
|
56
|
-
|
89
|
+
pc_cfgs: list[Precheck.Config] = [
|
90
|
+
GitBlacklistPrecheck.Config(),
|
91
|
+
LitePython8Precheck.Config(),
|
92
|
+
ManifestsPrecheck.Config(),
|
93
|
+
RootRelativeImportPrecheck.Config(),
|
94
|
+
ScriptDepsPrecheck.Config(),
|
57
95
|
]
|
58
96
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
97
|
+
with inj.create_managed_injector(bind_main(
|
98
|
+
ctx,
|
99
|
+
pc_cfgs,
|
100
|
+
)) as injector:
|
101
|
+
async def run() -> list[Precheck.Violation]:
|
102
|
+
vs: list[Precheck.Violation] = []
|
103
|
+
|
104
|
+
pcs = sorted(
|
105
|
+
injector[ta.AbstractSet[Precheck]],
|
106
|
+
key=lambda pc: type(pc).__name__,
|
107
|
+
)
|
108
|
+
|
109
|
+
for pc in pcs:
|
110
|
+
log.info('Running precheck: %s', type(pc).__name__)
|
111
|
+
async for v in pc.run():
|
112
|
+
vs.append(v)
|
113
|
+
print('*** VIOLATION ***')
|
114
|
+
print(f'Seq: {len(vs)}')
|
115
|
+
print(f'Precheck: {v.pc}')
|
116
|
+
print(f'Message:')
|
117
|
+
print(v.msg.strip())
|
118
|
+
print()
|
119
|
+
|
120
|
+
return vs
|
121
|
+
|
122
|
+
vs = asyncio.run(run())
|
123
|
+
|
124
|
+
if vs:
|
125
|
+
print(f'{len(vs)} violations found')
|
126
|
+
sys.exit(1)
|
80
127
|
|
81
128
|
|
82
129
|
##
|
@@ -16,7 +16,9 @@ class ManifestsPrecheck(Precheck['ManifestsPrecheck.Config']):
|
|
16
16
|
pass
|
17
17
|
|
18
18
|
def __init__(self, context: PrecheckContext, config: Config = Config()) -> None:
|
19
|
-
super().__init__(
|
19
|
+
super().__init__(config)
|
20
|
+
|
21
|
+
self._context = context
|
20
22
|
|
21
23
|
async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
|
22
24
|
for src_root in self._context.src_roots:
|
@@ -17,8 +17,14 @@ class ScriptDepsPrecheck(Precheck['ScriptDepsPrecheck.Config']):
|
|
17
17
|
class Config(Precheck.Config):
|
18
18
|
pass
|
19
19
|
|
20
|
-
def __init__(
|
21
|
-
|
20
|
+
def __init__(
|
21
|
+
self,
|
22
|
+
context: PrecheckContext,
|
23
|
+
config: Config = Config(),
|
24
|
+
) -> None:
|
25
|
+
super().__init__(config)
|
26
|
+
|
27
|
+
self._context = context
|
22
28
|
|
23
29
|
async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
|
24
30
|
for fp in magic.find_magic_files(
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# flake8: noqa: F401
|
3
3
|
|
4
4
|
from prompt_toolkit import Application
|
5
|
+
from prompt_toolkit import prompt
|
5
6
|
from prompt_toolkit.application import get_app
|
6
7
|
from prompt_toolkit.application import get_app_session
|
7
8
|
from prompt_toolkit.application import run_in_terminal
|
@@ -21,6 +22,7 @@ from prompt_toolkit.filters import is_searching
|
|
21
22
|
from prompt_toolkit.filters import to_filter
|
22
23
|
from prompt_toolkit.filters import vi_insert_mode
|
23
24
|
from prompt_toolkit.filters import vi_navigation_mode
|
25
|
+
from prompt_toolkit.formatted_text import ANSI
|
24
26
|
from prompt_toolkit.formatted_text import HTML
|
25
27
|
from prompt_toolkit.formatted_text import AnyFormattedText
|
26
28
|
from prompt_toolkit.formatted_text import FormattedText
|
@@ -3331,7 +3331,9 @@ class AsyncExitStacked:
|
|
3331
3331
|
|
3332
3332
|
|
3333
3333
|
@contextlib.contextmanager
|
3334
|
-
def defer(fn: ta.Callable) -> ta.Generator[ta.Callable, None, None]:
|
3334
|
+
def defer(fn: ta.Callable, *args: ta.Any, **kwargs: ta.Any) -> ta.Generator[ta.Callable, None, None]:
|
3335
|
+
if args or kwargs:
|
3336
|
+
fn = functools.partial(fn, *args, **kwargs)
|
3335
3337
|
try:
|
3336
3338
|
yield fn
|
3337
3339
|
finally:
|
@@ -3339,11 +3341,11 @@ def defer(fn: ta.Callable) -> ta.Generator[ta.Callable, None, None]:
|
|
3339
3341
|
|
3340
3342
|
|
3341
3343
|
@contextlib.asynccontextmanager
|
3342
|
-
async def adefer(fn: ta.
|
3344
|
+
async def adefer(fn: ta.Awaitable) -> ta.AsyncGenerator[ta.Awaitable, None]:
|
3343
3345
|
try:
|
3344
3346
|
yield fn
|
3345
3347
|
finally:
|
3346
|
-
await fn
|
3348
|
+
await fn
|
3347
3349
|
|
3348
3350
|
|
3349
3351
|
##
|
@@ -11702,7 +11704,7 @@ class DockerComposeRun(AsyncExitStacked):
|
|
11702
11704
|
|
11703
11705
|
async with contextlib.AsyncExitStack() as es:
|
11704
11706
|
if not (self._cfg.no_dependencies or self._cfg.no_dependency_cleanup):
|
11705
|
-
await es.enter_async_context(adefer(self._cleanup_dependencies)) # noqa
|
11707
|
+
await es.enter_async_context(adefer(self._cleanup_dependencies())) # noqa
|
11706
11708
|
|
11707
11709
|
sh_cmd = ' '.join([
|
11708
11710
|
'docker',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev293
|
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.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev293
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -202,7 +202,9 @@ omdev/packaging/wheelfile.py
|
|
202
202
|
omdev/precheck/__init__.py
|
203
203
|
omdev/precheck/__main__.py
|
204
204
|
omdev/precheck/base.py
|
205
|
+
omdev/precheck/caches.py
|
205
206
|
omdev/precheck/git.py
|
207
|
+
omdev/precheck/imports.py
|
206
208
|
omdev/precheck/lite.py
|
207
209
|
omdev/precheck/main.py
|
208
210
|
omdev/precheck/manifests.py
|
@@ -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.
|
15
|
+
version = '0.0.0.dev293'
|
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.
|
25
|
+
'omlish == 0.0.0.dev293',
|
26
26
|
]
|
27
27
|
|
28
28
|
[project.optional-dependencies]
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|