omdev 0.0.0.dev490__tar.gz → 0.0.0.dev493__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.dev490/omdev.egg-info → omdev-0.0.0.dev493}/PKG-INFO +6 -4
- omdev-0.0.0.dev493/omdev/README.md +51 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/__about__.py +2 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/cli.py +1 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/cli.py +1 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/cli.py +1 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/main.py +1 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/revisions.py +1 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/pipdepup.py +143 -90
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/cli.py +1 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/ci.py +361 -25
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/interp.py +3 -4
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/logs.py +117 -21
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/pyproject.py +364 -25
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/cli.py +19 -61
- omdev-0.0.0.dev493/omdev/tools/jsonview/resources/jsonview.html.j2 +43 -0
- omdev-0.0.0.dev493/omdev/tools/pawk/README.md +195 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/rich/__init__.py +9 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/__init__.py +35 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/app2.py +6 -1
- omdev-0.0.0.dev493/omdev/tui/textual/debug/__init__.py +10 -0
- omdev-0.0.0.dev493/omdev/tui/textual/debug/dominfo.py +151 -0
- omdev-0.0.0.dev493/omdev/tui/textual/debug/screen.py +24 -0
- omdev-0.0.0.dev493/omdev/tui/textual/devtools.py +187 -0
- omdev-0.0.0.dev493/omdev/tui/textual/logging2.py +20 -0
- omdev-0.0.0.dev493/omdev/tui/textual/types.py +45 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493/omdev.egg-info}/PKG-INFO +6 -4
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/SOURCES.txt +10 -1
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/requires.txt +5 -3
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/pyproject.toml +11 -4
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/LICENSE +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/README.md +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/.omlish-manifests.json +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/cli/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/cli/main.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/gen.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/imports.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/manifests.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/resources.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/srcfiles.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/strip.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/types.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/gen/typing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/info.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/amalg/sources.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/_dumping.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/_template.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/codegen.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataclasses/dumping.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/intellij/open.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/base.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/formats.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/messages.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/messages/parsing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/formats.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/numerics.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/numerics/types.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/LICENSE +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/consts.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/errors.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/message.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/nuh.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/parsing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/rendering.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/tags.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/irc/protocol/utils.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/_dumping.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/building.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/markdown/incparse.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/markdown/tokens.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/blanklines.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/parents.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/toplevel.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/asts/visitors.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/reprs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/all.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tokens/utils.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/tools/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/tools/aboutdeps.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/rs/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/inject.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/lib/marshal.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/resources/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/edit/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/edit/main.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/app.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/client.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/commands.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/irc/main.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/apps/markdown/cli.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/rich/console2.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/rich/markdown2.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/LICENSE +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/__init__.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/matching.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/paths.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/autocomplete/widget.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev/tui/textual/drivers2.py +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev490 → omdev-0.0.0.dev493}/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.dev493
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omlish==0.0.0.dev493
|
|
18
18
|
Provides-Extra: all
|
|
19
19
|
Requires-Dist: black~=25.12; extra == "all"
|
|
20
20
|
Requires-Dist: pycparser~=2.23; extra == "all"
|
|
@@ -27,7 +27,8 @@ Requires-Dist: mypy~=1.19; extra == "all"
|
|
|
27
27
|
Requires-Dist: gprof2dot~=2025.4; extra == "all"
|
|
28
28
|
Requires-Dist: segno~=1.6; extra == "all"
|
|
29
29
|
Requires-Dist: rich~=14.2; extra == "all"
|
|
30
|
-
Requires-Dist: textual~=6.
|
|
30
|
+
Requires-Dist: textual~=6.11; extra == "all"
|
|
31
|
+
Requires-Dist: textual-dev~=1.8; extra == "all"
|
|
31
32
|
Provides-Extra: black
|
|
32
33
|
Requires-Dist: black~=25.12; extra == "black"
|
|
33
34
|
Provides-Extra: c
|
|
@@ -46,7 +47,8 @@ Provides-Extra: qr
|
|
|
46
47
|
Requires-Dist: segno~=1.6; extra == "qr"
|
|
47
48
|
Provides-Extra: tui
|
|
48
49
|
Requires-Dist: rich~=14.2; extra == "tui"
|
|
49
|
-
Requires-Dist: textual~=6.
|
|
50
|
+
Requires-Dist: textual~=6.11; extra == "tui"
|
|
51
|
+
Requires-Dist: textual-dev~=1.8; extra == "tui"
|
|
50
52
|
Dynamic: license-file
|
|
51
53
|
|
|
52
54
|
# Overview
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Development utilities and support code.
|
|
4
|
+
|
|
5
|
+
# Notable packages
|
|
6
|
+
|
|
7
|
+
- **[cli](https://github.com/wrmsr/omlish/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not
|
|
8
|
+
installed as an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli`
|
|
9
|
+
installable package so as to not pollute users' bin/ directories when depping this lib for its utility code.
|
|
10
|
+
|
|
11
|
+
- **[amalg](https://github.com/wrmsr/omlish/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
|
|
12
|
+
|
|
13
|
+
- **[pyproject](https://github.com/wrmsr/omlish/blob/master/omdev/pyproject)**
|
|
14
|
+
([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
|
|
15
|
+
wrangles but does not replace tools like venv, pip, setuptools, and uv. does things like sets up venvs, generates
|
|
16
|
+
[`.pkg`](https://github.com/wrmsr/omlish/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
|
|
17
|
+
`__about__.py`'s), and packages them. this should grow to eat more and more of the Makefile. as it is amalgamated it
|
|
18
|
+
requires no installation and can just be dropped into other projects / repos.
|
|
19
|
+
|
|
20
|
+
- **[ci](https://github.com/wrmsr/omlish/blob/master/omdev/ci)**
|
|
21
|
+
([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/ci.py)) - ci runner. given a
|
|
22
|
+
[`compose.yml`](https://github.com/wrmsr/omlish/blob/master/docker/compose.yml)
|
|
23
|
+
and requirements.txt files, takes care of building and caching of containers and venvs and execution of required ci
|
|
24
|
+
commands. detects and [natively uses](https://github.com/wrmsr/omlish/blob/master/omdev/ci/github/api/v2)
|
|
25
|
+
github-action's caching system. unifies ci execution between local dev and github runners.
|
|
26
|
+
|
|
27
|
+
- **[tools.json](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like
|
|
28
|
+
data, obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
|
|
29
|
+
[jmespath](https://github.com/wrmsr/omlish/blob/master/omlish/specs/jmespath) engine. supports
|
|
30
|
+
[true streaming](https://github.com/wrmsr/omlish/blob/master/omlish/formats/json/stream) json input and output, as
|
|
31
|
+
well as [various other](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json/formats.py) non-streaming input
|
|
32
|
+
formats.
|
|
33
|
+
|
|
34
|
+
- **[tools.git](https://github.com/wrmsr/omlish/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy
|
|
35
|
+
git operations, including the one that (poorly) writes all of these commit messages.
|
|
36
|
+
|
|
37
|
+
# Amalgamation
|
|
38
|
+
|
|
39
|
+
Amalgamation is the process of stitching together multiple python source files into a single self-contained python
|
|
40
|
+
script. ['lite'](https://github.com/wrmsr/omlish/blob/master/omlish#lite-code) code is written in a style conducive to
|
|
41
|
+
this.
|
|
42
|
+
|
|
43
|
+
# Local storage
|
|
44
|
+
|
|
45
|
+
Some of this code, when asked, will store things on the local filesystem. The only directories used (outside of ones
|
|
46
|
+
explicitly specified as command or function arguments) are managed in
|
|
47
|
+
[home.paths](https://github.com/wrmsr/omlish/blob/master/omdev/home/paths.py), and are the following:
|
|
48
|
+
|
|
49
|
+
- `$OMLISH_HOME`, default of `~/.omlish` - persistent things like config and state.
|
|
50
|
+
- `$OMLISH_CACHE`, default of `~/.cache/omlish` - used for things like the local ci cache and
|
|
51
|
+
[various other](https://github.com/search?q=repo%3Awrmsr%2Fomlish+%22dcache.%22&type=code) cached data.
|
|
@@ -22,7 +22,7 @@ from omlish.argparse.cli import argparse_cmd
|
|
|
22
22
|
from omlish.lite.check import check
|
|
23
23
|
from omlish.lite.inject import inj
|
|
24
24
|
from omlish.logs.modules import get_module_logger
|
|
25
|
-
from omlish.logs.standard import configure_standard_logging
|
|
25
|
+
from omlish.logs.std.standard import configure_standard_logging
|
|
26
26
|
|
|
27
27
|
from .cache import DirectoryFileCache
|
|
28
28
|
from .ci import Ci
|
|
@@ -17,7 +17,7 @@ from omlish.lite.check import check
|
|
|
17
17
|
from omlish.lite.inject import Injector
|
|
18
18
|
from omlish.lite.inject import inj
|
|
19
19
|
from omlish.lite.runtime import check_lite_runtime_version
|
|
20
|
-
from omlish.logs.standard import configure_standard_logging
|
|
20
|
+
from omlish.logs.std.standard import configure_standard_logging
|
|
21
21
|
|
|
22
22
|
from .inject import bind_interp
|
|
23
23
|
from .resolvers import InterpResolver
|
|
@@ -5,7 +5,7 @@ import multiprocessing as mp
|
|
|
5
5
|
import os.path
|
|
6
6
|
|
|
7
7
|
from omlish.lite.json import json_dumps_pretty
|
|
8
|
-
from omlish.logs.standard import configure_standard_logging
|
|
8
|
+
from omlish.logs.std.standard import configure_standard_logging
|
|
9
9
|
|
|
10
10
|
from .building import ManifestBuilder
|
|
11
11
|
from .building import check_package_manifests
|
|
@@ -15,7 +15,7 @@ import zipfile
|
|
|
15
15
|
from omlish.lite.cached import cached_nullary
|
|
16
16
|
from omlish.lite.check import check
|
|
17
17
|
from omlish.logs.modules import get_module_logger
|
|
18
|
-
from omlish.logs.standard import configure_standard_logging
|
|
18
|
+
from omlish.logs.std.standard import configure_standard_logging
|
|
19
19
|
|
|
20
20
|
from ..git.revisions import get_git_revision
|
|
21
21
|
from .wheelfile import WheelFile
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""
|
|
2
2
|
TODO:
|
|
3
|
+
- output 2 tables lol
|
|
3
4
|
- min_time_since_prev_version
|
|
4
5
|
- without this the min age is moot lol, can still catch a bad release at the same time of day just n days later
|
|
5
6
|
- * at least show 'suggested', 'suggested age', 'latest', 'latest age', 'number of releases between the 2' *
|
|
@@ -30,7 +31,7 @@ https://news.ycombinator.com/item?id=46005111
|
|
|
30
31
|
# ~> https://github.com/pypa/pip/blob/a52069365063ea813fe3a3f8bac90397c9426d35/src/pip/_internal/commands/list.py (25.3)
|
|
31
32
|
import dataclasses as dc
|
|
32
33
|
import datetime
|
|
33
|
-
import
|
|
34
|
+
import itertools
|
|
34
35
|
import os.path
|
|
35
36
|
import ssl
|
|
36
37
|
import typing as ta
|
|
@@ -312,16 +313,42 @@ class Package:
|
|
|
312
313
|
|
|
313
314
|
return datetime.datetime.fromisoformat(check.isinstance(ut, str)) # noqa
|
|
314
315
|
|
|
316
|
+
@cached.property
|
|
317
|
+
def version(self) -> Version:
|
|
318
|
+
return self.install.version
|
|
319
|
+
|
|
320
|
+
@cached.property
|
|
321
|
+
def filetype(self) -> ta.Literal['wheel', 'sdist']:
|
|
322
|
+
if self.install.link.is_wheel:
|
|
323
|
+
return 'wheel'
|
|
324
|
+
else:
|
|
325
|
+
return 'sdist'
|
|
326
|
+
|
|
327
|
+
unfiltered_candidates: ta.Sequence[Candidate] | None = None
|
|
315
328
|
candidates: ta.Sequence[Candidate] | None = None
|
|
316
329
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
330
|
+
latest_candidate: Candidate | None = None
|
|
331
|
+
suggested_candidate: Candidate | None = None
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def get_best_candidate(
|
|
335
|
+
pkg: Package,
|
|
336
|
+
finder: MyPackageFinder,
|
|
337
|
+
candidates: ta.Sequence[Package.Candidate],
|
|
338
|
+
) -> Package.Candidate | None:
|
|
339
|
+
candidates_by_install: ta.Mapping[InstallationCandidate, Package.Candidate] = col.make_map((
|
|
340
|
+
(c.install, c)
|
|
341
|
+
for c in candidates
|
|
342
|
+
), strict=True, identity=True)
|
|
320
343
|
|
|
321
|
-
|
|
322
|
-
|
|
344
|
+
evaluator = finder.make_candidate_evaluator(
|
|
345
|
+
project_name=pkg.dist.canonical_name,
|
|
346
|
+
)
|
|
347
|
+
best_install = evaluator.sort_best_candidate([c.install for c in candidates])
|
|
348
|
+
if best_install is None:
|
|
349
|
+
return None
|
|
323
350
|
|
|
324
|
-
|
|
351
|
+
return candidates_by_install[best_install]
|
|
325
352
|
|
|
326
353
|
|
|
327
354
|
def set_package_finder_info(
|
|
@@ -332,17 +359,18 @@ def set_package_finder_info(
|
|
|
332
359
|
max_uploaded_at: datetime.datetime | None = None,
|
|
333
360
|
min_time_since_prev_version: datetime.timedelta | None = None,
|
|
334
361
|
) -> None:
|
|
335
|
-
|
|
362
|
+
pkg.unfiltered_candidates = [
|
|
336
363
|
Package.Candidate(
|
|
337
364
|
c,
|
|
338
365
|
finder.get_link_pypi_dict(c.link),
|
|
339
366
|
)
|
|
340
367
|
for c in finder.find_all_candidates(pkg.dist.canonical_name)
|
|
341
368
|
]
|
|
342
|
-
pkg.candidates = candidates
|
|
343
369
|
|
|
344
370
|
#
|
|
345
371
|
|
|
372
|
+
candidates = pkg.unfiltered_candidates
|
|
373
|
+
|
|
346
374
|
if not pre:
|
|
347
375
|
# Remove prereleases
|
|
348
376
|
candidates = [
|
|
@@ -351,8 +379,16 @@ def set_package_finder_info(
|
|
|
351
379
|
if not c.install.version.is_prerelease
|
|
352
380
|
]
|
|
353
381
|
|
|
382
|
+
pkg.candidates = candidates
|
|
383
|
+
|
|
354
384
|
#
|
|
355
385
|
|
|
386
|
+
pkg.latest_candidate = get_best_candidate(pkg, finder, pkg.candidates)
|
|
387
|
+
|
|
388
|
+
#
|
|
389
|
+
|
|
390
|
+
suggested_candidates = candidates
|
|
391
|
+
|
|
356
392
|
if min_time_since_prev_version is not None:
|
|
357
393
|
# candidates_by_version = col.multi_map((c.install.version, c) for c in candidates)
|
|
358
394
|
# uploaded_at_by_version = {
|
|
@@ -361,46 +397,17 @@ def set_package_finder_info(
|
|
|
361
397
|
# }
|
|
362
398
|
raise NotImplementedError
|
|
363
399
|
|
|
364
|
-
#
|
|
365
|
-
|
|
366
400
|
if max_uploaded_at is not None:
|
|
367
|
-
|
|
401
|
+
suggested_candidates = [
|
|
368
402
|
c
|
|
369
|
-
for c in
|
|
403
|
+
for c in suggested_candidates
|
|
370
404
|
if not (
|
|
371
405
|
(c_dt := c.upload_time()) is not None and
|
|
372
406
|
c_dt > max_uploaded_at
|
|
373
407
|
)
|
|
374
408
|
]
|
|
375
409
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
candidates_by_install: ta.Mapping[InstallationCandidate, Package.Candidate] = col.make_map((
|
|
379
|
-
(c.install, c)
|
|
380
|
-
for c in candidates
|
|
381
|
-
), strict=True, identity=True)
|
|
382
|
-
|
|
383
|
-
evaluator = finder.make_candidate_evaluator(
|
|
384
|
-
project_name=pkg.dist.canonical_name,
|
|
385
|
-
)
|
|
386
|
-
best_install = evaluator.sort_best_candidate([c.install for c in candidates])
|
|
387
|
-
if best_install is None:
|
|
388
|
-
return
|
|
389
|
-
best_candidate = candidates_by_install[best_install]
|
|
390
|
-
|
|
391
|
-
#
|
|
392
|
-
|
|
393
|
-
remote_version = best_candidate.install.version
|
|
394
|
-
if best_candidate.install.link.is_wheel:
|
|
395
|
-
typ = 'wheel'
|
|
396
|
-
else:
|
|
397
|
-
typ = 'sdist'
|
|
398
|
-
|
|
399
|
-
pkg.latest_info = Package.LatestInfo(
|
|
400
|
-
candidate=best_candidate,
|
|
401
|
-
version=remote_version,
|
|
402
|
-
filetype=typ,
|
|
403
|
-
)
|
|
410
|
+
pkg.suggested_candidate = get_best_candidate(pkg, finder, suggested_candidates)
|
|
404
411
|
|
|
405
412
|
|
|
406
413
|
##
|
|
@@ -474,20 +481,20 @@ def format_for_json(
|
|
|
474
481
|
infos: list[dict[str, ta.Any]] = []
|
|
475
482
|
|
|
476
483
|
for pkg in pkgs:
|
|
477
|
-
|
|
484
|
+
latest = check.not_none(pkg.latest_candidate)
|
|
485
|
+
suggested = check.not_none(pkg.suggested_candidate)
|
|
478
486
|
|
|
479
487
|
info = {
|
|
480
488
|
'name': pkg.dist.raw_name,
|
|
481
489
|
'version': pkg.version(),
|
|
482
490
|
'location': pkg.dist.location or '',
|
|
483
491
|
'installer': pkg.dist.installer,
|
|
484
|
-
'latest_version': str(
|
|
485
|
-
'
|
|
492
|
+
'latest_version': str(latest.install.version),
|
|
493
|
+
'latest_upload_time': lut.isoformat() if (lut := latest.upload_time()) is not None else None,
|
|
494
|
+
'suggested_version': str(suggested.install.version),
|
|
495
|
+
'suggested_upload_time': sut.isoformat() if (sut := suggested.upload_time()) is not None else None,
|
|
486
496
|
}
|
|
487
497
|
|
|
488
|
-
if (l_ut := latest_info.candidate.upload_time()) is not None:
|
|
489
|
-
info['latest_age'] = human_round_td(now_utc() - l_ut)
|
|
490
|
-
|
|
491
498
|
if editable_project_location := pkg.dist.editable_project_location:
|
|
492
499
|
info['editable_project_location'] = editable_project_location
|
|
493
500
|
|
|
@@ -502,46 +509,87 @@ def format_for_json(
|
|
|
502
509
|
def format_for_columns(pkgs: ta.Sequence[Package]) -> tuple[list[list[str]], list[str]]:
|
|
503
510
|
"""Convert the package data into something usable by output_package_listing_columns."""
|
|
504
511
|
|
|
505
|
-
header = [
|
|
512
|
+
header = [
|
|
513
|
+
'Package',
|
|
514
|
+
'Current',
|
|
506
515
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
wheel_file = dist.read_text('WHEEL')
|
|
510
|
-
except FileNotFoundError:
|
|
511
|
-
return None
|
|
512
|
-
return email.parser.Parser().parsestr(wheel_file).get('Build')
|
|
513
|
-
|
|
514
|
-
build_tags = [wheel_build_tag(p.dist) for p in pkgs]
|
|
515
|
-
has_build_tags = any(build_tags)
|
|
516
|
-
if has_build_tags:
|
|
517
|
-
header.append('Build')
|
|
518
|
-
|
|
519
|
-
has_editables = any(x.dist.editable for x in pkgs)
|
|
520
|
-
if has_editables:
|
|
521
|
-
header.append('Editable project location')
|
|
522
|
-
|
|
523
|
-
data = []
|
|
524
|
-
for i, proj in enumerate(pkgs):
|
|
525
|
-
# if we're working on the 'outdated' list, separate out the latest_version and type
|
|
526
|
-
row = [proj.dist.raw_name, proj.dist.raw_version]
|
|
527
|
-
|
|
528
|
-
latest_info = check.not_none(proj.latest_info)
|
|
529
|
-
row.append(str(latest_info.version))
|
|
530
|
-
if (l_ut := latest_info.candidate.upload_time()) is not None:
|
|
531
|
-
row.append(human_round_td(now_utc() - l_ut))
|
|
532
|
-
else:
|
|
533
|
-
row.append('')
|
|
534
|
-
row.append(latest_info.filetype)
|
|
516
|
+
'Suggested',
|
|
517
|
+
'Age',
|
|
535
518
|
|
|
536
|
-
|
|
537
|
-
|
|
519
|
+
'Latest',
|
|
520
|
+
'Age',
|
|
521
|
+
]
|
|
538
522
|
|
|
539
|
-
|
|
540
|
-
|
|
523
|
+
# def wheel_build_tag(dist: BaseDistribution) -> str | None:
|
|
524
|
+
# try:
|
|
525
|
+
# wheel_file = dist.read_text('WHEEL')
|
|
526
|
+
# except FileNotFoundError:
|
|
527
|
+
# return None
|
|
528
|
+
# return email.parser.Parser().parsestr(wheel_file).get('Build')
|
|
541
529
|
|
|
542
|
-
|
|
530
|
+
# build_tags = [wheel_build_tag(p.dist) for p in pkgs]
|
|
531
|
+
# has_build_tags = any(build_tags)
|
|
532
|
+
# if has_build_tags:
|
|
533
|
+
# header.append('Build')
|
|
543
534
|
|
|
544
|
-
|
|
535
|
+
# has_editables = any(x.dist.editable for x in pkgs)
|
|
536
|
+
# if has_editables:
|
|
537
|
+
# header.append('Editable project location')
|
|
538
|
+
|
|
539
|
+
rows = []
|
|
540
|
+
for pkg in pkgs:
|
|
541
|
+
sc = check.not_none(pkg.suggested_candidate)
|
|
542
|
+
lc = check.not_none(pkg.latest_candidate)
|
|
543
|
+
|
|
544
|
+
row = [
|
|
545
|
+
pkg.dist.raw_name,
|
|
546
|
+
pkg.dist.raw_version,
|
|
547
|
+
]
|
|
548
|
+
|
|
549
|
+
def add_c(c):
|
|
550
|
+
if c is None:
|
|
551
|
+
row.extend(['', ''])
|
|
552
|
+
return
|
|
553
|
+
|
|
554
|
+
row.append(str(c.version))
|
|
555
|
+
|
|
556
|
+
if (l_ut := c.upload_time()) is not None:
|
|
557
|
+
row.append(human_round_td(now_utc() - l_ut))
|
|
558
|
+
else:
|
|
559
|
+
row.append('')
|
|
560
|
+
|
|
561
|
+
add_c(sc if sc.version != pkg.dist.version else None)
|
|
562
|
+
add_c(lc if sc is not lc else None)
|
|
563
|
+
|
|
564
|
+
# if has_build_tags:
|
|
565
|
+
# row.append(build_tags[i] or '')
|
|
566
|
+
|
|
567
|
+
# if has_editables:
|
|
568
|
+
# row.append(pkg.dist.editable_project_location or '')
|
|
569
|
+
|
|
570
|
+
rows.append(row)
|
|
571
|
+
|
|
572
|
+
return rows, header
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
def _tabulate(
|
|
576
|
+
rows: ta.Iterable[ta.Iterable[ta.Any]],
|
|
577
|
+
*,
|
|
578
|
+
sep: str = ' ',
|
|
579
|
+
) -> tuple[list[str], list[int]]:
|
|
580
|
+
"""
|
|
581
|
+
Return a list of formatted rows and a list of column sizes.
|
|
582
|
+
|
|
583
|
+
For example::
|
|
584
|
+
|
|
585
|
+
>>> tabulate([['foobar', 2000], [0xdeadbeef]])
|
|
586
|
+
(['foobar 2000', '3735928559'], [10, 4])
|
|
587
|
+
"""
|
|
588
|
+
|
|
589
|
+
rows = [tuple(map(str, row)) for row in rows]
|
|
590
|
+
sizes = [max(map(len, col)) for col in itertools.zip_longest(*rows, fillvalue='')]
|
|
591
|
+
table = [sep.join(map(str.ljust, row, sizes)).rstrip() for row in rows]
|
|
592
|
+
return table, sizes
|
|
545
593
|
|
|
546
594
|
|
|
547
595
|
def render_package_listing_columns(data: list[list[str]], header: list[str]) -> list[str]:
|
|
@@ -549,12 +597,11 @@ def render_package_listing_columns(data: list[list[str]], header: list[str]) ->
|
|
|
549
597
|
if len(data) > 0:
|
|
550
598
|
data.insert(0, header)
|
|
551
599
|
|
|
552
|
-
|
|
553
|
-
pkg_strings, sizes = tabulate(data)
|
|
600
|
+
pkg_strings, sizes = _tabulate(data, sep=' ')
|
|
554
601
|
|
|
555
602
|
# Create and add a separator.
|
|
556
603
|
if len(data) > 0:
|
|
557
|
-
pkg_strings.insert(1, '
|
|
604
|
+
pkg_strings.insert(1, ' '.join('-' * x for x in sizes))
|
|
558
605
|
|
|
559
606
|
return pkg_strings
|
|
560
607
|
|
|
@@ -612,21 +659,27 @@ def _main() -> None:
|
|
|
612
659
|
|
|
613
660
|
#
|
|
614
661
|
|
|
615
|
-
|
|
662
|
+
outdated_pkgs = [
|
|
616
663
|
pkg
|
|
617
664
|
for pkg in pkgs
|
|
618
|
-
if (li := pkg.
|
|
665
|
+
if (li := pkg.latest_candidate) is not None
|
|
619
666
|
and li.version > pkg.dist.version
|
|
620
667
|
]
|
|
621
668
|
|
|
622
|
-
|
|
669
|
+
outdated_pkgs.sort(key=lambda x: x.dist.raw_name)
|
|
623
670
|
|
|
624
671
|
#
|
|
625
672
|
|
|
626
673
|
if args.json:
|
|
627
|
-
print(json.dumps_pretty(format_for_json(
|
|
674
|
+
print(json.dumps_pretty(format_for_json(outdated_pkgs)))
|
|
675
|
+
|
|
628
676
|
else:
|
|
629
|
-
|
|
677
|
+
# stable_pkgs, unstable_pkgs = col.partition(
|
|
678
|
+
# outdated_pkgs,
|
|
679
|
+
# lambda pkg: pkg.latest_candidate is pkg.suggested_candidate,
|
|
680
|
+
# )
|
|
681
|
+
|
|
682
|
+
print('\n'.join(render_package_listing_columns(*format_for_columns(outdated_pkgs))))
|
|
630
683
|
|
|
631
684
|
|
|
632
685
|
if __name__ == '__main__':
|
|
@@ -40,7 +40,7 @@ from omlish.formats.toml.parser import toml_loads
|
|
|
40
40
|
from omlish.lite.cached import cached_nullary
|
|
41
41
|
from omlish.lite.check import check
|
|
42
42
|
from omlish.lite.runtime import check_lite_runtime_version
|
|
43
|
-
from omlish.logs.standard import configure_standard_logging
|
|
43
|
+
from omlish.logs.std.standard import configure_standard_logging
|
|
44
44
|
|
|
45
45
|
from .configs import PyprojectConfig
|
|
46
46
|
from .configs import PyprojectConfigPreparer
|