omdev 0.0.42__tar.gz → 0.0.44__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.42 → omdev-0.0.44}/LICENSE +6 -0
- {omdev-0.0.42/omdev.egg-info → omdev-0.0.44}/PKG-INFO +6 -6
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/currents.py +2 -2
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/build_ext.py +1 -1
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/om.sh +4 -3
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/upstreams.py +1 -1
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_pyqjsng.c +2 -1
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/cli.py +79 -5
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/configs.py +20 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/pkg.py +21 -13
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/venvs.py +18 -1
- omdev-0.0.44/omdev/pyright/report.py +120 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/ci.py +24 -24
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/interp.py +16 -16
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/lib/formats/goyaml.py +8 -8
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/lib/inject.py +16 -16
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/pidfiles.py +21 -21
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/pyproject.py +162 -47
- omdev-0.0.44/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44/omdev.egg-info}/PKG-INFO +6 -6
- {omdev-0.0.42 → omdev-0.0.44}/omdev.egg-info/SOURCES.txt +2 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev.egg-info/requires.txt +5 -5
- {omdev-0.0.42 → omdev-0.0.44}/pyproject.toml +6 -6
- {omdev-0.0.42 → omdev-0.0.44}/MANIFEST.in +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/README.md +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/.om-manifests.json +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/README.md +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/__about__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/cli/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/cli/main.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/gen.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/imports.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/manifests.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/resources.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/srcfiles.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/strip.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/gen/typing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/info.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/amalg/sources.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cc/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/build.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/configs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/cache.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/ci.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/compose.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/consts.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/shell.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/ci/utils.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/install.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/main.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/managers.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cli/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/capi/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/capi/darwin_cf.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/capi/linux_x11.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/commands.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/platform.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/clipboard/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cmake.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/_dumping.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/_template.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/codegen.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataclasses/dumping.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/diffs/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/diffs/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/diffs/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/diffs/parsing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/diffs/rendering.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/diffs/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/build.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/config.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/config.toml +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/content.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/gen.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/helpers.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/ops.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/rendering.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/.python-versions.json +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/configs/.vimrc +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/depsets/python.toml +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/depsets/system.toml +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/go.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/man.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/user.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/scripts/install-claude +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/scripts/install-codex +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/scripts/install-pi +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/resources/shift-uid.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/run.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/dockerdev/utils.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/magic.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/revisions.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/shallow.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/status.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/aborting.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/diffing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/errors.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/journals.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/merging.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/paths.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/pulling.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/runners.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/git/vendor/specs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/home/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/home/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/home/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/home/paths.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/home/secrets.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/home/shadow.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/imgur.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/intellij/open.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/default.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/java/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/java/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/java/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/java/pomgen.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/java/utils.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/java/xml.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/TODO.md +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_pyqjsng.pyi +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/builtin-array-fromasync.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/builtin-iterator-zip-keyed.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/builtin-iterator-zip.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/cutils.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/dtoa.c +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/dtoa.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/libregexp-opcode.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/libregexp.c +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/libregexp.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/libunicode-table.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/libunicode.c +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/libunicode.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/list.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs-atom.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs-c-atomics.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs-libc.c +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs-libc.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs-opcode.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs.c +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/_quickjs/quickjs.h +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/js/quickjs/snapshots.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/find.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/magic.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/magic/styles.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/manifests/_dumping.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/manifests/building.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/manifests/main.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/markdown/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/markdown/incparse.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/markdown/tokens.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/mypy/report.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/names.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/requirements.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pip.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/base.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/blanklines.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/git.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/main.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/asts/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/asts/parents.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/asts/toplevel.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/asts/visitors.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/classdot.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/findimports.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/reprs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tokens/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tokens/all.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tokens/tokenizert.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tokens/utils.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tools/fixdocstrings.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py/tools/pipdepup.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/py.typed +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/resources/dockerdev.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/tools/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/tools/aboutdeps.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/tools/buildrs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/tools/pyversions.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/pyproject/versions.py +0 -0
- {omdev-0.0.42/omdev/rs → omdev-0.0.44/omdev/pyright}/__init__.py +0 -0
- {omdev-0.0.42/omdev/scripts/lib → omdev-0.0.44/omdev/rs}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.42/omdev/scripts/lib/formats → omdev-0.0.44/omdev/scripts/lib}/__init__.py +0 -0
- {omdev-0.0.42/omdev/scripts/lib/io → omdev-0.0.44/omdev/scripts/lib/formats}/__init__.py +0 -0
- {omdev-0.0.42/omdev/specs → omdev-0.0.44/omdev/scripts/lib/io}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/lib/io/pipelines.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/lib/io/streambufs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/lib/logs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/lib/marshal.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.42/omdev/specs/irc → omdev-0.0.44/omdev/specs}/__init__.py +0 -0
- {omdev-0.0.42/omdev/specs/irc/messages → omdev-0.0.44/omdev/specs/irc}/__init__.py +0 -0
- {omdev-0.0.42/omdev/specs/irc/numerics → omdev-0.0.44/omdev/specs/irc/messages}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/messages/base.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/messages/formats.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/messages/messages.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/messages/parsing.py +0 -0
- {omdev-0.0.42/omdev/specs/jsonschema → omdev-0.0.44/omdev/specs/irc/numerics}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/numerics/formats.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/numerics/numerics.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/numerics/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/consts.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/errors.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/message.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/nuh.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/parsing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/rendering.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/tags.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/irc/protocol/utils.py +0 -0
- {omdev-0.0.42/omdev/specs/oci → omdev-0.0.44/omdev/specs/jsonschema}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/config.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/errors.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/generator.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/ir.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/names.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/jsonschema/codegen/typing.py +0 -0
- {omdev-0.0.42/omdev/specs/oci/pack → omdev-0.0.44/omdev/specs/oci}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/building.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/compression.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/data.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/datarefs.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/dataserver.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/loading.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/media.py +0 -0
- {omdev-0.0.42/omdev/tools/git → omdev-0.0.44/omdev/specs/oci/pack}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/pack/packing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/pack/repositories.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/pack/unpacking.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/repositories.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/specs/oci/tars.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tagstrings.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/diff.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/doc.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/docker.py +0 -0
- {omdev-0.0.42/omdev/tools/json → omdev-0.0.44/omdev/tools/git}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.42/omdev/tools/jsonview → omdev-0.0.44/omdev/tools/json}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.42/omdev/tools/pawk → omdev-0.0.44/omdev/tools/jsonview}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/ocr.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/pawk/README.md +0 -0
- {omdev-0.0.42/omdev/tui → omdev-0.0.44/omdev/tools/pawk}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/pip.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/prof.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/qr.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/shell.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.42/omdev/tui/apps → omdev-0.0.44/omdev/tui}/__init__.py +0 -0
- {omdev-0.0.42/omdev/tui/apps/edit → omdev-0.0.44/omdev/tui/apps}/__init__.py +0 -0
- {omdev-0.0.42/omdev/tui/apps/irc → omdev-0.0.44/omdev/tui/apps/edit}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/edit/main.py +0 -0
- {omdev-0.0.42/omdev/tui/apps/jtree → omdev-0.0.44/omdev/tui/apps/irc}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/irc/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/irc/app.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/irc/client.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/irc/commands.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/irc/main.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/LICENSE +0 -0
- {omdev-0.0.42/omdev/tui/apps/markdown → omdev-0.0.44/omdev/tui/apps/jtree}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/app.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/utils.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/jtree/widgets.py +0 -0
- {omdev-0.0.42/omdev/tui/textual/altdevtools/tools → omdev-0.0.44/omdev/tui/apps/markdown}/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/markdown/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/apps/markdown/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/console2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/__main__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/_compat.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/cli.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/renderables.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/rendering.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/diff/underlinebar.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/markdown2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/textual/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/textual/dark.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/textual/dump.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/textual/themes.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/rich/trirule.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/actionmenu.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/client.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/borders.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/colors.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/colors.tcss +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/easing.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/easing.tcss +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/previews/keys.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/protocol.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/redirect_output.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/renderables.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/server.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/service.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/altdevtools/tools/diagnose.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/app2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/autocomplete/LICENSE +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/autocomplete/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/autocomplete/matching.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/autocomplete/paths.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/autocomplete/widget.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/binding2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/clipboard.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/debug/__init__.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/debug/dominfo.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/debug/screen.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/devtools.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/dom2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/drivers2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/logging2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/render2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/screen2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/types.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev/tui/textual/widgets2.py +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.42 → omdev-0.0.44}/setup.cfg +0 -0
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
Except where otherwise indicated, original code in this repository is licensed under the BSD 3-Clause License.
|
|
2
|
+
|
|
3
|
+
Third-party and adapted code retains the license identified in its source file and/or directory.
|
|
4
|
+
|
|
5
|
+
====
|
|
6
|
+
|
|
1
7
|
Copyright 2023- wrmsr
|
|
2
8
|
|
|
3
9
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.44
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,10 +14,10 @@ Classifier: Programming Language :: Python :: 3.15
|
|
|
14
14
|
Requires-Python: >=3.14
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omcore==0.0.
|
|
17
|
+
Requires-Dist: omcore==0.0.44
|
|
18
18
|
Provides-Extra: all
|
|
19
|
-
Requires-Dist: ominfra==0.0.
|
|
20
|
-
Requires-Dist: omllm==0.0.
|
|
19
|
+
Requires-Dist: ominfra==0.0.44; extra == "all"
|
|
20
|
+
Requires-Dist: omllm==0.0.44; extra == "all"
|
|
21
21
|
Requires-Dist: black~=26.5; extra == "all"
|
|
22
22
|
Requires-Dist: pycparser~=3.0; extra == "all"
|
|
23
23
|
Requires-Dist: pcpp~=1.30; extra == "all"
|
|
@@ -36,9 +36,9 @@ Requires-Dist: textual~=8.2; extra == "all"
|
|
|
36
36
|
Requires-Dist: textual-dev~=1.8; extra == "all"
|
|
37
37
|
Requires-Dist: textual-speedups~=0.2; extra == "all"
|
|
38
38
|
Provides-Extra: ominfra
|
|
39
|
-
Requires-Dist: ominfra==0.0.
|
|
39
|
+
Requires-Dist: ominfra==0.0.44; extra == "ominfra"
|
|
40
40
|
Provides-Extra: omllm
|
|
41
|
-
Requires-Dist: omllm==0.0.
|
|
41
|
+
Requires-Dist: omllm==0.0.44; extra == "omllm"
|
|
42
42
|
Provides-Extra: black
|
|
43
43
|
Requires-Dist: black~=26.5; extra == "black"
|
|
44
44
|
Provides-Extra: c
|
|
@@ -25,7 +25,7 @@ _CURRENT_CACHE: Cache | None = None
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
@contextlib.contextmanager
|
|
28
|
-
def setting_current_cache(cache: CacheT) -> ta.
|
|
28
|
+
def setting_current_cache(cache: CacheT) -> ta.Generator[CacheT]:
|
|
29
29
|
global _CURRENT_CACHE
|
|
30
30
|
prev = _CURRENT_CACHE
|
|
31
31
|
|
|
@@ -53,7 +53,7 @@ def setting_current_context(
|
|
|
53
53
|
obj: Object,
|
|
54
54
|
key: CacheKey | None = None,
|
|
55
55
|
**kwargs: ta.Any,
|
|
56
|
-
) -> ta.
|
|
56
|
+
) -> ta.Generator[Context]:
|
|
57
57
|
global _CURRENT_CONTEXT
|
|
58
58
|
prev = _CURRENT_CONTEXT
|
|
59
59
|
|
|
@@ -305,7 +305,7 @@ class BuildExt:
|
|
|
305
305
|
return self._build_extension(ext)
|
|
306
306
|
|
|
307
307
|
@contextlib.contextmanager
|
|
308
|
-
def _filter_build_errors(self, ext: extension.Extension) -> ta.
|
|
308
|
+
def _filter_build_errors(self, ext: extension.Extension) -> ta.Generator[None]:
|
|
309
309
|
try:
|
|
310
310
|
yield
|
|
311
311
|
except (
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
curl -LsSf 'https://raw.githubusercontent.com/wrmsr/om/master/omdev/cli/install.py' | bash --login -c 'python3 - $@' - \
|
|
2
2
|
omcore-cext \
|
|
3
|
+
omcore-mypyc \
|
|
3
4
|
omdev-cext \
|
|
4
5
|
ominfra \
|
|
5
6
|
omllm \
|
|
@@ -12,9 +13,9 @@ curl -LsSf 'https://raw.githubusercontent.com/wrmsr/om/master/omdev/cli/install.
|
|
|
12
13
|
orjson \
|
|
13
14
|
pyyaml \
|
|
14
15
|
\
|
|
15
|
-
textual \
|
|
16
|
-
textual-speedups \
|
|
17
|
-
\
|
|
18
16
|
pg8000 \
|
|
19
17
|
pymysql \
|
|
18
|
+
\
|
|
19
|
+
textual \
|
|
20
|
+
textual-speedups \
|
|
20
21
|
;
|
|
@@ -15,7 +15,7 @@ def git_upstream_source(
|
|
|
15
15
|
*,
|
|
16
16
|
from_path: str | None = None,
|
|
17
17
|
timeout: float = 15. * 60.,
|
|
18
|
-
) -> ta.
|
|
18
|
+
) -> ta.Generator[GitRunner]:
|
|
19
19
|
"""
|
|
20
20
|
Yields a GitRunner for the upstream repo - either an existing local clone (used strictly read-only) or a temporary
|
|
21
21
|
bare clone of `url` which is removed afterward.
|
|
@@ -22,6 +22,7 @@ See:
|
|
|
22
22
|
import argparse
|
|
23
23
|
import asyncio
|
|
24
24
|
import concurrent.futures as cf
|
|
25
|
+
import dataclasses as dc
|
|
25
26
|
import functools
|
|
26
27
|
import itertools
|
|
27
28
|
import multiprocessing as mp
|
|
@@ -43,6 +44,7 @@ from omcore.logs.std.standard import configure_standard_logging
|
|
|
43
44
|
|
|
44
45
|
from .configs import PyprojectConfig
|
|
45
46
|
from .configs import PyprojectConfigPreparer
|
|
47
|
+
from .configs import VenvConfig
|
|
46
48
|
from .pkg import BasePyprojectPackageGenerator
|
|
47
49
|
from .pkg import PyprojectPackageGenerator
|
|
48
50
|
from .venvs import Venv
|
|
@@ -93,11 +95,46 @@ class Run:
|
|
|
93
95
|
|
|
94
96
|
@cached_nullary
|
|
95
97
|
def venvs(self) -> ta.Mapping[str, Venv]:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
real_cfgs: ta.Dict[str, VenvConfig] = {}
|
|
99
|
+
alias_set: ta.Set[str] = set()
|
|
100
|
+
alias_map: ta.Dict[str, ta.List[str]] = {}
|
|
101
|
+
|
|
102
|
+
for n, c in self.cfg().venvs.items():
|
|
103
|
+
if n.startswith('_'):
|
|
104
|
+
continue
|
|
105
|
+
|
|
106
|
+
check.not_in(n, real_cfgs)
|
|
107
|
+
check.not_in(n, alias_set)
|
|
108
|
+
|
|
109
|
+
if (af := c.alias_for):
|
|
110
|
+
alias_set.add(n)
|
|
111
|
+
alias_map.setdefault(af, []).append(n)
|
|
112
|
+
continue
|
|
113
|
+
|
|
114
|
+
for a in c.aliases or []:
|
|
115
|
+
check.not_in(a, real_cfgs)
|
|
116
|
+
check.not_in(a, alias_set)
|
|
117
|
+
alias_set.add(n)
|
|
118
|
+
alias_map.setdefault(a, []).append(n)
|
|
119
|
+
|
|
120
|
+
real_cfgs[n] = c
|
|
121
|
+
|
|
122
|
+
venvs: ta.Dict[str, Venv] = {}
|
|
123
|
+
for n, c in real_cfgs.items():
|
|
124
|
+
cal = [
|
|
125
|
+
*(c.aliases or []),
|
|
126
|
+
*alias_map.get(n, []),
|
|
127
|
+
]
|
|
128
|
+
c = dc.replace(c, aliases=cal or None)
|
|
129
|
+
|
|
130
|
+
venvs[n] = Venv(n, c)
|
|
131
|
+
|
|
132
|
+
for n, afs in alias_map.items():
|
|
133
|
+
v = venvs[n]
|
|
134
|
+
for af in afs:
|
|
135
|
+
venvs[af] = v
|
|
136
|
+
|
|
137
|
+
return venvs
|
|
101
138
|
|
|
102
139
|
|
|
103
140
|
##
|
|
@@ -192,6 +229,7 @@ class PyprojectCli(ArgparseCli):
|
|
|
192
229
|
argparse_arg('-b', '--build', action='store_true'),
|
|
193
230
|
argparse_arg('-r', '--revision', action='store_true'),
|
|
194
231
|
argparse_arg('-j', '--jobs', type=int),
|
|
232
|
+
argparse_arg('-S', '--suffix', action='append'),
|
|
195
233
|
argparse_arg('cmd', nargs='?'),
|
|
196
234
|
argparse_arg('args', nargs=argparse.REMAINDER),
|
|
197
235
|
)
|
|
@@ -223,6 +261,8 @@ class PyprojectCli(ArgparseCli):
|
|
|
223
261
|
for dir_name in run.cfg().pkgs
|
|
224
262
|
]
|
|
225
263
|
pgs = list(itertools.chain.from_iterable([pg, *pg.children()] for pg in pgs))
|
|
264
|
+
if self.args.suffix is not None:
|
|
265
|
+
pgs = [pg for pg in pgs if pg.pkg_suffix.lstrip('-') in self.args.suffix]
|
|
226
266
|
|
|
227
267
|
num_threads = self.args.jobs or int(max(mp.cpu_count() // 1.5, 1))
|
|
228
268
|
futs: ta.List[cf.Future]
|
|
@@ -245,6 +285,40 @@ class PyprojectCli(ArgparseCli):
|
|
|
245
285
|
for fut in futs:
|
|
246
286
|
fut.result()
|
|
247
287
|
|
|
288
|
+
elif cmd == 'build':
|
|
289
|
+
pkgs_root = os.path.join('.pkg')
|
|
290
|
+
|
|
291
|
+
build_output_dir = 'dist'
|
|
292
|
+
add_revision = bool(self.args.revision)
|
|
293
|
+
|
|
294
|
+
os.makedirs(build_output_dir, exist_ok=True)
|
|
295
|
+
|
|
296
|
+
pgs = [
|
|
297
|
+
PyprojectPackageGenerator(
|
|
298
|
+
dir_name,
|
|
299
|
+
pkgs_root,
|
|
300
|
+
)
|
|
301
|
+
for dir_name in run.cfg().pkgs
|
|
302
|
+
]
|
|
303
|
+
pgs = list(itertools.chain.from_iterable([pg, *pg.children()] for pg in pgs))
|
|
304
|
+
if self.args.suffix is not None:
|
|
305
|
+
pgs = [pg for pg in pgs if pg.pkg_suffix.lstrip('-') in self.args.suffix]
|
|
306
|
+
|
|
307
|
+
num_threads = self.args.jobs or int(max(mp.cpu_count() // 1.5, 1))
|
|
308
|
+
with cf.ThreadPoolExecutor(num_threads) as ex:
|
|
309
|
+
futs = [
|
|
310
|
+
ex.submit(functools.partial(
|
|
311
|
+
pg.build,
|
|
312
|
+
build_output_dir,
|
|
313
|
+
BasePyprojectPackageGenerator.BuildOpts(
|
|
314
|
+
add_revision=add_revision,
|
|
315
|
+
),
|
|
316
|
+
))
|
|
317
|
+
for pg in pgs
|
|
318
|
+
]
|
|
319
|
+
for fut in futs:
|
|
320
|
+
fut.result()
|
|
321
|
+
|
|
248
322
|
else:
|
|
249
323
|
raise Exception(f'unknown subcommand: {cmd}')
|
|
250
324
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import dataclasses as dc
|
|
3
3
|
import typing as ta
|
|
4
4
|
|
|
5
|
+
from omcore.lite.check import check
|
|
6
|
+
from omcore.lite.dataclasses import dataclass_maybe_post_init
|
|
5
7
|
from omcore.lite.marshal import unmarshal_obj
|
|
6
8
|
|
|
7
9
|
from ..interp.venvs import InterpVenvConfig
|
|
@@ -12,10 +14,26 @@ from ..interp.venvs import InterpVenvConfig
|
|
|
12
14
|
|
|
13
15
|
@dc.dataclass(frozen=True)
|
|
14
16
|
class VenvConfig(InterpVenvConfig):
|
|
17
|
+
alias_for: ta.Optional[str] = None
|
|
18
|
+
aliases: ta.Optional[ta.List[str]] = None
|
|
19
|
+
|
|
15
20
|
inherits: ta.Optional[ta.Sequence[str]] = None
|
|
16
21
|
docker_service: ta.Optional[str] = None
|
|
17
22
|
srcs: ta.Optional[ta.List[str]] = None
|
|
18
23
|
|
|
24
|
+
def __post_init__(self) -> None:
|
|
25
|
+
dataclass_maybe_post_init(super())
|
|
26
|
+
|
|
27
|
+
if self.alias_for is not None:
|
|
28
|
+
check.non_empty_str(self.alias_for)
|
|
29
|
+
for f in dc.fields(self):
|
|
30
|
+
if f.name != 'alias_for':
|
|
31
|
+
if getattr(self, f.name) is not None:
|
|
32
|
+
raise ValueError(f'Must not set {f.name} when alias_for is present.')
|
|
33
|
+
|
|
34
|
+
else:
|
|
35
|
+
check.not_isinstance(self.inherits, str)
|
|
36
|
+
|
|
19
37
|
|
|
20
38
|
@dc.dataclass(frozen=True)
|
|
21
39
|
class PyprojectConfig:
|
|
@@ -93,6 +111,8 @@ class PyprojectConfigPreparer:
|
|
|
93
111
|
|
|
94
112
|
ivs = dict(self._inherit_venvs(pcfg.venvs or {}))
|
|
95
113
|
for k, v in ivs.items():
|
|
114
|
+
if v.alias_for:
|
|
115
|
+
continue
|
|
96
116
|
v = dc.replace(v, srcs=self._resolve_srcs(v.srcs or [], pcfg.srcs or {}))
|
|
97
117
|
v = dc.replace(v, interp=self._fixup_interp(v.interp))
|
|
98
118
|
ivs[k] = v
|
|
@@ -78,6 +78,10 @@ class BasePyprojectPackageGenerator(Abstract):
|
|
|
78
78
|
self._pkgs_root = pkgs_root
|
|
79
79
|
self._pkg_suffix = pkg_suffix
|
|
80
80
|
|
|
81
|
+
@property
|
|
82
|
+
def pkg_suffix(self) -> str:
|
|
83
|
+
return self._pkg_suffix
|
|
84
|
+
|
|
81
85
|
#
|
|
82
86
|
|
|
83
87
|
@cached_nullary
|
|
@@ -88,6 +92,10 @@ class BasePyprojectPackageGenerator(Abstract):
|
|
|
88
92
|
|
|
89
93
|
@cached_nullary
|
|
90
94
|
def _pkg_dir(self) -> str:
|
|
95
|
+
return os.path.join(self._pkgs_root, self._dir_name + self._pkg_suffix)
|
|
96
|
+
|
|
97
|
+
@cached_nullary
|
|
98
|
+
def _cleaned_pkg_dir(self) -> str:
|
|
91
99
|
pkg_dir: str = os.path.join(self._pkgs_root, self._dir_name + self._pkg_suffix)
|
|
92
100
|
if os.path.isdir(pkg_dir):
|
|
93
101
|
shutil.rmtree(pkg_dir)
|
|
@@ -103,15 +111,15 @@ class BasePyprojectPackageGenerator(Abstract):
|
|
|
103
111
|
]
|
|
104
112
|
|
|
105
113
|
def _write_git_ignore(self) -> None:
|
|
106
|
-
with open(os.path.join(self.
|
|
114
|
+
with open(os.path.join(self._cleaned_pkg_dir(), '.gitignore'), 'w') as f:
|
|
107
115
|
f.write('\n'.join([*self._GIT_IGNORE, '']))
|
|
108
116
|
|
|
109
117
|
#
|
|
110
118
|
|
|
111
119
|
def _symlink_source_dir(self) -> None:
|
|
112
120
|
os.symlink(
|
|
113
|
-
os.path.relpath(self._dir_name, self.
|
|
114
|
-
os.path.join(self.
|
|
121
|
+
os.path.relpath(self._dir_name, self._cleaned_pkg_dir()),
|
|
122
|
+
os.path.join(self._cleaned_pkg_dir(), self._dir_name),
|
|
115
123
|
)
|
|
116
124
|
|
|
117
125
|
#
|
|
@@ -240,12 +248,12 @@ class BasePyprojectPackageGenerator(Abstract):
|
|
|
240
248
|
def _symlink_standard_files(self) -> None:
|
|
241
249
|
for fn in self._STANDARD_FILES:
|
|
242
250
|
for tp in [
|
|
243
|
-
[self.
|
|
251
|
+
[self._cleaned_pkg_dir(), self._dir_name],
|
|
244
252
|
[],
|
|
245
253
|
]:
|
|
246
254
|
fp = os.path.join(*tp, fn)
|
|
247
255
|
if os.path.exists(fp):
|
|
248
|
-
os.symlink(os.path.relpath(fp, self.
|
|
256
|
+
os.symlink(os.path.relpath(fp, self._cleaned_pkg_dir()), os.path.join(self._cleaned_pkg_dir(), fn))
|
|
249
257
|
break
|
|
250
258
|
|
|
251
259
|
#
|
|
@@ -258,13 +266,13 @@ class BasePyprojectPackageGenerator(Abstract):
|
|
|
258
266
|
def gen(self) -> str:
|
|
259
267
|
log.info('Generating pyproject package: %s -> %s (%s)', self._dir_name, self._pkgs_root, self._pkg_suffix)
|
|
260
268
|
|
|
261
|
-
self.
|
|
269
|
+
self._cleaned_pkg_dir()
|
|
262
270
|
self._write_git_ignore()
|
|
263
271
|
self._symlink_source_dir()
|
|
264
272
|
self._write_file_contents()
|
|
265
273
|
self._symlink_standard_files()
|
|
266
274
|
|
|
267
|
-
return self.
|
|
275
|
+
return self._cleaned_pkg_dir()
|
|
268
276
|
|
|
269
277
|
#
|
|
270
278
|
|
|
@@ -433,11 +441,11 @@ class PyprojectPackageGenerator(BasePyprojectPackageGenerator):
|
|
|
433
441
|
def _write_file_contents(self) -> None:
|
|
434
442
|
fc = self.file_contents()
|
|
435
443
|
|
|
436
|
-
with open(os.path.join(self.
|
|
444
|
+
with open(os.path.join(self._cleaned_pkg_dir(), 'pyproject.toml'), 'w') as f:
|
|
437
445
|
TomlWriter(f).write_root(fc.pyproject_dct)
|
|
438
446
|
|
|
439
447
|
if fc.manifest_in:
|
|
440
|
-
with open(os.path.join(self.
|
|
448
|
+
with open(os.path.join(self._cleaned_pkg_dir(), 'MANIFEST.in'), 'w') as f:
|
|
441
449
|
f.write('\n'.join([*fc.manifest_in, ''])) # noqa
|
|
442
450
|
|
|
443
451
|
#
|
|
@@ -530,14 +538,14 @@ class _PyprojectExtensionPackageGenerator(BasePyprojectPackageGenerator, Abstrac
|
|
|
530
538
|
def _write_file_contents(self) -> None:
|
|
531
539
|
fc = self.file_contents()
|
|
532
540
|
|
|
533
|
-
with open(os.path.join(self.
|
|
541
|
+
with open(os.path.join(self._cleaned_pkg_dir(), 'pyproject.toml'), 'w') as f:
|
|
534
542
|
TomlWriter(f).write_root(fc.pyproject_dct)
|
|
535
543
|
|
|
536
|
-
with open(os.path.join(self.
|
|
544
|
+
with open(os.path.join(self._cleaned_pkg_dir(), 'setup.py'), 'w') as f:
|
|
537
545
|
f.write(fc.setup_py)
|
|
538
546
|
|
|
539
547
|
if fc.manifest_in:
|
|
540
|
-
with open(os.path.join(self.
|
|
548
|
+
with open(os.path.join(self._cleaned_pkg_dir(), 'MANIFEST.in'), 'w') as f:
|
|
541
549
|
f.write('\n'.join([*fc.manifest_in, ''])) # noqa
|
|
542
550
|
|
|
543
551
|
|
|
@@ -1085,5 +1093,5 @@ class _PyprojectCliPackageGenerator(BasePyprojectPackageGenerator):
|
|
|
1085
1093
|
def _write_file_contents(self) -> None:
|
|
1086
1094
|
fc = self.file_contents()
|
|
1087
1095
|
|
|
1088
|
-
with open(os.path.join(self.
|
|
1096
|
+
with open(os.path.join(self._cleaned_pkg_dir(), 'pyproject.toml'), 'w') as f:
|
|
1089
1097
|
TomlWriter(f).write_root(fc.pyproject_dct)
|
|
@@ -31,10 +31,17 @@ class Venv:
|
|
|
31
31
|
self._name = name
|
|
32
32
|
self._cfg = cfg
|
|
33
33
|
|
|
34
|
+
@property
|
|
35
|
+
def name(self) -> str:
|
|
36
|
+
return self._name
|
|
37
|
+
|
|
34
38
|
@property
|
|
35
39
|
def cfg(self) -> VenvConfig:
|
|
36
40
|
return self._cfg
|
|
37
41
|
|
|
42
|
+
def __repr__(self) -> str:
|
|
43
|
+
return f'{self.__class__.__name__}(name={self._name!r}, cfg={self._cfg!r})'
|
|
44
|
+
|
|
38
45
|
DIR_NAME = '.venvs'
|
|
39
46
|
|
|
40
47
|
@property
|
|
@@ -66,7 +73,17 @@ class Venv:
|
|
|
66
73
|
|
|
67
74
|
@async_cached_nullary
|
|
68
75
|
async def create(self) -> bool:
|
|
69
|
-
|
|
76
|
+
ret = await self._iv().create()
|
|
77
|
+
|
|
78
|
+
for a in self._cfg.aliases or []:
|
|
79
|
+
ap = os.path.join(self.DIR_NAME, a)
|
|
80
|
+
if os.path.exists(ap):
|
|
81
|
+
if not os.path.islink(ap):
|
|
82
|
+
raise Exception(f'{ap} exists but is not a symlink!')
|
|
83
|
+
else:
|
|
84
|
+
os.symlink(self._name, ap)
|
|
85
|
+
|
|
86
|
+
return ret
|
|
70
87
|
|
|
71
88
|
@staticmethod
|
|
72
89
|
def _resolve_srcs(raw: ta.List[str]) -> ta.List[str]:
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- baseline integration - report new-vs-baselined counts
|
|
4
|
+
"""
|
|
5
|
+
import argparse
|
|
6
|
+
import collections
|
|
7
|
+
import json
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
import typing as ta
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
DEFAULT_TIMEOUT_S: float = 60. * 60.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def run_basedpyright_json(
|
|
20
|
+
args: ta.Sequence[str],
|
|
21
|
+
*,
|
|
22
|
+
timeout_s: float = DEFAULT_TIMEOUT_S,
|
|
23
|
+
) -> tuple[ta.Any, int]:
|
|
24
|
+
proc = subprocess.run( # noqa
|
|
25
|
+
[sys.executable, '-m', 'basedpyright', '--outputjson', *args],
|
|
26
|
+
stdout=subprocess.PIPE,
|
|
27
|
+
text=True,
|
|
28
|
+
timeout=timeout_s,
|
|
29
|
+
check=False,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
output = json.loads(proc.stdout)
|
|
34
|
+
except json.JSONDecodeError:
|
|
35
|
+
sys.stdout.write(proc.stdout)
|
|
36
|
+
raise
|
|
37
|
+
|
|
38
|
+
return output, proc.returncode
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
##
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
_SEVERITIES: ta.Sequence[str] = ['error', 'warning', 'information']
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _print_counter_table(counter: ta.Mapping[str, int]) -> None:
|
|
48
|
+
max_key_len = max(map(len, counter))
|
|
49
|
+
for key, count in sorted(counter.items(), key=lambda kv: -kv[1]):
|
|
50
|
+
print(f'{key.rjust(max_key_len)} : {count}')
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def report_output(
|
|
54
|
+
output: ta.Any,
|
|
55
|
+
*,
|
|
56
|
+
top_files: int = 0,
|
|
57
|
+
) -> None:
|
|
58
|
+
diags: ta.Sequence[ta.Mapping[str, ta.Any]] = output.get('generalDiagnostics', [])
|
|
59
|
+
|
|
60
|
+
rules_by_severity: ta.Mapping[str, collections.Counter] = {
|
|
61
|
+
severity: collections.Counter(
|
|
62
|
+
d.get('rule', '(none)')
|
|
63
|
+
for d in diags
|
|
64
|
+
if d.get('severity') == severity
|
|
65
|
+
)
|
|
66
|
+
for severity in _SEVERITIES
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for severity in _SEVERITIES:
|
|
70
|
+
if not (counter := rules_by_severity[severity]):
|
|
71
|
+
continue
|
|
72
|
+
|
|
73
|
+
print()
|
|
74
|
+
print(f'## {severity}s')
|
|
75
|
+
print()
|
|
76
|
+
_print_counter_table(counter)
|
|
77
|
+
|
|
78
|
+
if top_files and diags:
|
|
79
|
+
count_by_file = collections.Counter(d['file'] for d in diags if 'file' in d)
|
|
80
|
+
|
|
81
|
+
print()
|
|
82
|
+
print(f'## top {top_files} files')
|
|
83
|
+
print()
|
|
84
|
+
_print_counter_table(dict(count_by_file.most_common(top_files)))
|
|
85
|
+
|
|
86
|
+
summary: ta.Mapping[str, ta.Any] = output.get('summary', {})
|
|
87
|
+
|
|
88
|
+
print()
|
|
89
|
+
print(', '.join([
|
|
90
|
+
f'{summary.get("filesAnalyzed", "?")} files',
|
|
91
|
+
*[
|
|
92
|
+
f'{summary.get(f"{severity}Count", 0)} {severity}s'
|
|
93
|
+
for severity in _SEVERITIES
|
|
94
|
+
],
|
|
95
|
+
f'{summary.get("timeInSec", "?")}s',
|
|
96
|
+
]))
|
|
97
|
+
print()
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
##
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def _main() -> None:
|
|
104
|
+
parser = argparse.ArgumentParser()
|
|
105
|
+
parser.add_argument('--top-files', type=int, default=0)
|
|
106
|
+
parser.add_argument('args', nargs=argparse.REMAINDER)
|
|
107
|
+
ns = parser.parse_args()
|
|
108
|
+
|
|
109
|
+
output, rc = run_basedpyright_json(ns.args)
|
|
110
|
+
|
|
111
|
+
report_output(
|
|
112
|
+
output,
|
|
113
|
+
top_files=ns.top_files,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
raise SystemExit(rc)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
if __name__ == '__main__':
|
|
120
|
+
_main()
|