omdev 0.0.0.dev225__tar.gz → 0.0.0.dev226__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.dev225/omdev.egg-info → omdev-0.0.0.dev226}/PKG-INFO +2 -2
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/ci.py +280 -29
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/interp.py +274 -28
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/pyproject.py +280 -29
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/pyproject.toml +2 -2
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/LICENSE +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/README.rst +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/.manifests.json +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/antlr/consts.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/antlr/gen.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/bracepy.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/cacheserved.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/api.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/client.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/classdot.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/findimports.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pycharm/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pycharm/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pycharm/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/revisions.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/execrss.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/exectime.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/secrets.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/git.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/importscan.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/wheelfile.py +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/SOURCES.txt +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev226
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
|
12
12
|
Classifier: Operating System :: POSIX
|
|
13
13
|
Requires-Python: >=3.12
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
|
15
|
+
Requires-Dist: omlish==0.0.0.dev226
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
|
@@ -64,9 +64,6 @@ T = ta.TypeVar('T')
|
|
|
64
64
|
# ../../omlish/asyncs/asyncio/asyncio.py
|
|
65
65
|
CallableT = ta.TypeVar('CallableT', bound=ta.Callable)
|
|
66
66
|
|
|
67
|
-
# ../../omlish/asyncs/asyncio/timeouts.py
|
|
68
|
-
AwaitableT = ta.TypeVar('AwaitableT', bound=ta.Awaitable)
|
|
69
|
-
|
|
70
67
|
# ../../omlish/lite/check.py
|
|
71
68
|
SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
|
|
72
69
|
CheckMessage = ta.Union[str, ta.Callable[..., ta.Optional[str]], None] # ta.TypeAlias
|
|
@@ -75,9 +72,15 @@ CheckOnRaiseFn = ta.Callable[[Exception], None] # ta.TypeAlias
|
|
|
75
72
|
CheckExceptionFactory = ta.Callable[..., Exception] # ta.TypeAlias
|
|
76
73
|
CheckArgsRenderer = ta.Callable[..., ta.Optional[str]] # ta.TypeAlias
|
|
77
74
|
|
|
75
|
+
# ../../omlish/lite/timeouts.py
|
|
76
|
+
TimeoutLike = ta.Union['Timeout', 'Timeout.Default', ta.Iterable['TimeoutLike'], float] # ta.TypeAlias
|
|
77
|
+
|
|
78
78
|
# ../../omlish/argparse/cli.py
|
|
79
79
|
ArgparseCmdFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
|
|
80
80
|
|
|
81
|
+
# ../../omlish/asyncs/asyncio/timeouts.py
|
|
82
|
+
AwaitableT = ta.TypeVar('AwaitableT', bound=ta.Awaitable)
|
|
83
|
+
|
|
81
84
|
# ../../omlish/lite/contextmanagers.py
|
|
82
85
|
ExitStackedT = ta.TypeVar('ExitStackedT', bound='ExitStacked')
|
|
83
86
|
AsyncExitStackedT = ta.TypeVar('AsyncExitStackedT', bound='AsyncExitStacked')
|
|
@@ -245,19 +248,6 @@ async def asyncio_wait_concurrent(
|
|
|
245
248
|
return [task.result() for task in done]
|
|
246
249
|
|
|
247
250
|
|
|
248
|
-
########################################
|
|
249
|
-
# ../../../omlish/asyncs/asyncio/timeouts.py
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
def asyncio_maybe_timeout(
|
|
253
|
-
fut: AwaitableT,
|
|
254
|
-
timeout: ta.Optional[float] = None,
|
|
255
|
-
) -> AwaitableT:
|
|
256
|
-
if timeout is not None:
|
|
257
|
-
fut = asyncio.wait_for(fut, timeout) # type: ignore
|
|
258
|
-
return fut
|
|
259
|
-
|
|
260
|
-
|
|
261
251
|
########################################
|
|
262
252
|
# ../../../omlish/lite/cached.py
|
|
263
253
|
|
|
@@ -1057,6 +1047,205 @@ def format_num_bytes(num_bytes: int) -> str:
|
|
|
1057
1047
|
return f'{num_bytes / 1024 ** (len(FORMAT_NUM_BYTES_SUFFIXES) - 1):.2f}{FORMAT_NUM_BYTES_SUFFIXES[-1]}'
|
|
1058
1048
|
|
|
1059
1049
|
|
|
1050
|
+
########################################
|
|
1051
|
+
# ../../../omlish/lite/timeouts.py
|
|
1052
|
+
"""
|
|
1053
|
+
TODO:
|
|
1054
|
+
- Event (/ Predicate)
|
|
1055
|
+
"""
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
##
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
class Timeout(abc.ABC):
|
|
1062
|
+
@property
|
|
1063
|
+
@abc.abstractmethod
|
|
1064
|
+
def can_expire(self) -> bool:
|
|
1065
|
+
"""Indicates whether or not this timeout will ever expire."""
|
|
1066
|
+
|
|
1067
|
+
raise NotImplementedError
|
|
1068
|
+
|
|
1069
|
+
@abc.abstractmethod
|
|
1070
|
+
def expired(self) -> bool:
|
|
1071
|
+
"""Return whether or not this timeout has expired."""
|
|
1072
|
+
|
|
1073
|
+
raise NotImplementedError
|
|
1074
|
+
|
|
1075
|
+
@abc.abstractmethod
|
|
1076
|
+
def remaining(self) -> float:
|
|
1077
|
+
"""Returns the time (in seconds) remaining until the timeout expires. May be negative and/or infinite."""
|
|
1078
|
+
|
|
1079
|
+
raise NotImplementedError
|
|
1080
|
+
|
|
1081
|
+
@abc.abstractmethod
|
|
1082
|
+
def __call__(self) -> float:
|
|
1083
|
+
"""Returns the time (in seconds) remaining until the timeout expires, or raises if the timeout has expired."""
|
|
1084
|
+
|
|
1085
|
+
raise NotImplementedError
|
|
1086
|
+
|
|
1087
|
+
@abc.abstractmethod
|
|
1088
|
+
def or_(self, o: ta.Any) -> ta.Any:
|
|
1089
|
+
"""Evaluates time remaining via remaining() if this timeout can expire, otherwise returns `o`."""
|
|
1090
|
+
|
|
1091
|
+
raise NotImplementedError
|
|
1092
|
+
|
|
1093
|
+
#
|
|
1094
|
+
|
|
1095
|
+
@classmethod
|
|
1096
|
+
def _now(cls) -> float:
|
|
1097
|
+
return time.time()
|
|
1098
|
+
|
|
1099
|
+
#
|
|
1100
|
+
|
|
1101
|
+
class Default:
|
|
1102
|
+
def __new__(cls, *args, **kwargs): # noqa
|
|
1103
|
+
raise TypeError
|
|
1104
|
+
|
|
1105
|
+
class _NOT_SPECIFIED: # noqa
|
|
1106
|
+
def __new__(cls, *args, **kwargs): # noqa
|
|
1107
|
+
raise TypeError
|
|
1108
|
+
|
|
1109
|
+
@classmethod
|
|
1110
|
+
def of(
|
|
1111
|
+
cls,
|
|
1112
|
+
obj: ta.Optional[TimeoutLike],
|
|
1113
|
+
default: ta.Union[TimeoutLike, ta.Type[_NOT_SPECIFIED]] = _NOT_SPECIFIED,
|
|
1114
|
+
) -> 'Timeout':
|
|
1115
|
+
if obj is None:
|
|
1116
|
+
return InfiniteTimeout()
|
|
1117
|
+
|
|
1118
|
+
elif isinstance(obj, Timeout):
|
|
1119
|
+
return obj
|
|
1120
|
+
|
|
1121
|
+
elif isinstance(obj, (float, int)):
|
|
1122
|
+
return DeadlineTimeout(cls._now() + obj)
|
|
1123
|
+
|
|
1124
|
+
elif isinstance(obj, ta.Iterable):
|
|
1125
|
+
return CompositeTimeout(*[Timeout.of(c) for c in obj])
|
|
1126
|
+
|
|
1127
|
+
elif obj is Timeout.Default:
|
|
1128
|
+
if default is Timeout._NOT_SPECIFIED or default is Timeout.Default:
|
|
1129
|
+
raise RuntimeError('Must specify a default timeout')
|
|
1130
|
+
|
|
1131
|
+
else:
|
|
1132
|
+
return Timeout.of(default) # type: ignore[arg-type]
|
|
1133
|
+
|
|
1134
|
+
else:
|
|
1135
|
+
raise TypeError(obj)
|
|
1136
|
+
|
|
1137
|
+
@classmethod
|
|
1138
|
+
def of_deadline(cls, deadline: float) -> 'DeadlineTimeout':
|
|
1139
|
+
return DeadlineTimeout(deadline)
|
|
1140
|
+
|
|
1141
|
+
@classmethod
|
|
1142
|
+
def of_predicate(cls, expired_fn: ta.Callable[[], bool]) -> 'PredicateTimeout':
|
|
1143
|
+
return PredicateTimeout(expired_fn)
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
class DeadlineTimeout(Timeout):
|
|
1147
|
+
def __init__(
|
|
1148
|
+
self,
|
|
1149
|
+
deadline: float,
|
|
1150
|
+
exc: ta.Union[ta.Type[BaseException], BaseException] = TimeoutError,
|
|
1151
|
+
) -> None:
|
|
1152
|
+
super().__init__()
|
|
1153
|
+
|
|
1154
|
+
self.deadline = deadline
|
|
1155
|
+
self.exc = exc
|
|
1156
|
+
|
|
1157
|
+
@property
|
|
1158
|
+
def can_expire(self) -> bool:
|
|
1159
|
+
return True
|
|
1160
|
+
|
|
1161
|
+
def expired(self) -> bool:
|
|
1162
|
+
return not (self.remaining() > 0)
|
|
1163
|
+
|
|
1164
|
+
def remaining(self) -> float:
|
|
1165
|
+
return self.deadline - self._now()
|
|
1166
|
+
|
|
1167
|
+
def __call__(self) -> float:
|
|
1168
|
+
if (rem := self.remaining()) > 0:
|
|
1169
|
+
return rem
|
|
1170
|
+
raise self.exc
|
|
1171
|
+
|
|
1172
|
+
def or_(self, o: ta.Any) -> ta.Any:
|
|
1173
|
+
return self()
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
class InfiniteTimeout(Timeout):
|
|
1177
|
+
@property
|
|
1178
|
+
def can_expire(self) -> bool:
|
|
1179
|
+
return False
|
|
1180
|
+
|
|
1181
|
+
def expired(self) -> bool:
|
|
1182
|
+
return False
|
|
1183
|
+
|
|
1184
|
+
def remaining(self) -> float:
|
|
1185
|
+
return float('inf')
|
|
1186
|
+
|
|
1187
|
+
def __call__(self) -> float:
|
|
1188
|
+
return float('inf')
|
|
1189
|
+
|
|
1190
|
+
def or_(self, o: ta.Any) -> ta.Any:
|
|
1191
|
+
return o
|
|
1192
|
+
|
|
1193
|
+
|
|
1194
|
+
class CompositeTimeout(Timeout):
|
|
1195
|
+
def __init__(self, *children: Timeout) -> None:
|
|
1196
|
+
super().__init__()
|
|
1197
|
+
|
|
1198
|
+
self.children = children
|
|
1199
|
+
|
|
1200
|
+
@property
|
|
1201
|
+
def can_expire(self) -> bool:
|
|
1202
|
+
return any(c.can_expire for c in self.children)
|
|
1203
|
+
|
|
1204
|
+
def expired(self) -> bool:
|
|
1205
|
+
return any(c.expired() for c in self.children)
|
|
1206
|
+
|
|
1207
|
+
def remaining(self) -> float:
|
|
1208
|
+
return min(c.remaining() for c in self.children)
|
|
1209
|
+
|
|
1210
|
+
def __call__(self) -> float:
|
|
1211
|
+
return min(c() for c in self.children)
|
|
1212
|
+
|
|
1213
|
+
def or_(self, o: ta.Any) -> ta.Any:
|
|
1214
|
+
if self.can_expire:
|
|
1215
|
+
return self()
|
|
1216
|
+
return o
|
|
1217
|
+
|
|
1218
|
+
|
|
1219
|
+
class PredicateTimeout(Timeout):
|
|
1220
|
+
def __init__(
|
|
1221
|
+
self,
|
|
1222
|
+
expired_fn: ta.Callable[[], bool],
|
|
1223
|
+
exc: ta.Union[ta.Type[BaseException], BaseException] = TimeoutError,
|
|
1224
|
+
) -> None:
|
|
1225
|
+
super().__init__()
|
|
1226
|
+
|
|
1227
|
+
self.expired_fn = expired_fn
|
|
1228
|
+
self.exc = exc
|
|
1229
|
+
|
|
1230
|
+
@property
|
|
1231
|
+
def can_expire(self) -> bool:
|
|
1232
|
+
return True
|
|
1233
|
+
|
|
1234
|
+
def expired(self) -> bool:
|
|
1235
|
+
return self.expired_fn()
|
|
1236
|
+
|
|
1237
|
+
def remaining(self) -> float:
|
|
1238
|
+
return float('inf')
|
|
1239
|
+
|
|
1240
|
+
def __call__(self) -> float:
|
|
1241
|
+
if not self.expired_fn():
|
|
1242
|
+
return float('inf')
|
|
1243
|
+
raise self.exc
|
|
1244
|
+
|
|
1245
|
+
def or_(self, o: ta.Any) -> ta.Any:
|
|
1246
|
+
return self()
|
|
1247
|
+
|
|
1248
|
+
|
|
1060
1249
|
########################################
|
|
1061
1250
|
# ../../../omlish/logs/filters.py
|
|
1062
1251
|
|
|
@@ -1814,6 +2003,19 @@ class ArgparseCli:
|
|
|
1814
2003
|
return fn()
|
|
1815
2004
|
|
|
1816
2005
|
|
|
2006
|
+
########################################
|
|
2007
|
+
# ../../../omlish/asyncs/asyncio/timeouts.py
|
|
2008
|
+
|
|
2009
|
+
|
|
2010
|
+
def asyncio_maybe_timeout(
|
|
2011
|
+
fut: AwaitableT,
|
|
2012
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
2013
|
+
) -> AwaitableT:
|
|
2014
|
+
if timeout is not None:
|
|
2015
|
+
fut = asyncio.wait_for(fut, Timeout.of(timeout)()) # type: ignore
|
|
2016
|
+
return fut
|
|
2017
|
+
|
|
2018
|
+
|
|
1817
2019
|
########################################
|
|
1818
2020
|
# ../../../omlish/lite/contextmanagers.py
|
|
1819
2021
|
|
|
@@ -3147,17 +3349,43 @@ class SubprocessRunOutput(ta.Generic[T]):
|
|
|
3147
3349
|
class SubprocessRun:
|
|
3148
3350
|
cmd: ta.Sequence[str]
|
|
3149
3351
|
input: ta.Any = None
|
|
3150
|
-
timeout: ta.Optional[
|
|
3352
|
+
timeout: ta.Optional[TimeoutLike] = None
|
|
3151
3353
|
check: bool = False
|
|
3152
3354
|
capture_output: ta.Optional[bool] = None
|
|
3153
3355
|
kwargs: ta.Optional[ta.Mapping[str, ta.Any]] = None
|
|
3154
3356
|
|
|
3357
|
+
#
|
|
3358
|
+
|
|
3359
|
+
_FIELD_NAMES: ta.ClassVar[ta.FrozenSet[str]]
|
|
3360
|
+
|
|
3361
|
+
def replace(self, **kwargs: ta.Any) -> 'SubprocessRun':
|
|
3362
|
+
if not kwargs:
|
|
3363
|
+
return self
|
|
3364
|
+
|
|
3365
|
+
field_kws = {}
|
|
3366
|
+
extra_kws = {}
|
|
3367
|
+
for k, v in kwargs.items():
|
|
3368
|
+
if k in self._FIELD_NAMES:
|
|
3369
|
+
field_kws[k] = v
|
|
3370
|
+
else:
|
|
3371
|
+
extra_kws[k] = v
|
|
3372
|
+
|
|
3373
|
+
return dc.replace(self, **{
|
|
3374
|
+
**dict(kwargs={
|
|
3375
|
+
**(self.kwargs or {}),
|
|
3376
|
+
**extra_kws,
|
|
3377
|
+
}),
|
|
3378
|
+
**field_kws, # passing a kwarg named 'kwargs' intentionally clobbers
|
|
3379
|
+
})
|
|
3380
|
+
|
|
3381
|
+
#
|
|
3382
|
+
|
|
3155
3383
|
@classmethod
|
|
3156
3384
|
def of(
|
|
3157
3385
|
cls,
|
|
3158
3386
|
*cmd: str,
|
|
3159
3387
|
input: ta.Any = None, # noqa
|
|
3160
|
-
timeout: ta.Optional[
|
|
3388
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
3161
3389
|
check: bool = False, # noqa
|
|
3162
3390
|
capture_output: ta.Optional[bool] = None,
|
|
3163
3391
|
**kwargs: ta.Any,
|
|
@@ -3178,20 +3406,25 @@ class SubprocessRun:
|
|
|
3178
3406
|
def run(
|
|
3179
3407
|
self,
|
|
3180
3408
|
subprocesses: ta.Optional[ta.Any] = None, # AbstractSubprocesses
|
|
3409
|
+
**kwargs: ta.Any,
|
|
3181
3410
|
) -> SubprocessRunOutput:
|
|
3182
3411
|
if subprocesses is None:
|
|
3183
3412
|
subprocesses = self._DEFAULT_SUBPROCESSES
|
|
3184
|
-
return check.not_none(subprocesses).run_(self) # type: ignore[attr-defined]
|
|
3413
|
+
return check.not_none(subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
|
|
3185
3414
|
|
|
3186
3415
|
_DEFAULT_ASYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractAsyncSubprocesses
|
|
3187
3416
|
|
|
3188
3417
|
async def async_run(
|
|
3189
3418
|
self,
|
|
3190
3419
|
async_subprocesses: ta.Optional[ta.Any] = None, # AbstractAsyncSubprocesses
|
|
3420
|
+
**kwargs: ta.Any,
|
|
3191
3421
|
) -> SubprocessRunOutput:
|
|
3192
3422
|
if async_subprocesses is None:
|
|
3193
3423
|
async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
|
|
3194
|
-
return await check.not_none(async_subprocesses).run_(self) # type: ignore[attr-defined]
|
|
3424
|
+
return await check.not_none(async_subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
|
|
3425
|
+
|
|
3426
|
+
|
|
3427
|
+
SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
|
|
3195
3428
|
|
|
3196
3429
|
|
|
3197
3430
|
##
|
|
@@ -3208,11 +3441,19 @@ class SubprocessRunnable(abc.ABC, ta.Generic[T]):
|
|
|
3208
3441
|
|
|
3209
3442
|
#
|
|
3210
3443
|
|
|
3211
|
-
def run(
|
|
3212
|
-
|
|
3444
|
+
def run(
|
|
3445
|
+
self,
|
|
3446
|
+
subprocesses: ta.Optional[ta.Any] = None, # AbstractSubprocesses
|
|
3447
|
+
**kwargs: ta.Any,
|
|
3448
|
+
) -> T:
|
|
3449
|
+
return self.handle_run_output(self.make_run().run(subprocesses, **kwargs))
|
|
3213
3450
|
|
|
3214
|
-
async def async_run(
|
|
3215
|
-
|
|
3451
|
+
async def async_run(
|
|
3452
|
+
self,
|
|
3453
|
+
async_subprocesses: ta.Optional[ta.Any] = None, # AbstractAsyncSubprocesses
|
|
3454
|
+
**kwargs: ta.Any,
|
|
3455
|
+
) -> T:
|
|
3456
|
+
return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
|
|
3216
3457
|
|
|
3217
3458
|
|
|
3218
3459
|
########################################
|
|
@@ -4320,6 +4561,11 @@ class BaseSubprocesses(abc.ABC): # noqa
|
|
|
4320
4561
|
|
|
4321
4562
|
#
|
|
4322
4563
|
|
|
4564
|
+
if 'timeout' in kwargs:
|
|
4565
|
+
kwargs['timeout'] = Timeout.of(kwargs['timeout']).or_(None)
|
|
4566
|
+
|
|
4567
|
+
#
|
|
4568
|
+
|
|
4323
4569
|
return cmd, dict(
|
|
4324
4570
|
env=env,
|
|
4325
4571
|
shell=shell,
|
|
@@ -4465,7 +4711,7 @@ class AbstractAsyncSubprocesses(BaseSubprocesses):
|
|
|
4465
4711
|
self,
|
|
4466
4712
|
*cmd: str,
|
|
4467
4713
|
input: ta.Any = None, # noqa
|
|
4468
|
-
timeout: ta.Optional[
|
|
4714
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
4469
4715
|
check: bool = False,
|
|
4470
4716
|
capture_output: ta.Optional[bool] = None,
|
|
4471
4717
|
**kwargs: ta.Any,
|
|
@@ -4542,6 +4788,11 @@ class AbstractAsyncSubprocesses(BaseSubprocesses):
|
|
|
4542
4788
|
|
|
4543
4789
|
########################################
|
|
4544
4790
|
# ../../../omlish/subprocesses/sync.py
|
|
4791
|
+
"""
|
|
4792
|
+
TODO:
|
|
4793
|
+
- popen
|
|
4794
|
+
- route check_calls through run_?
|
|
4795
|
+
"""
|
|
4545
4796
|
|
|
4546
4797
|
|
|
4547
4798
|
##
|
|
@@ -4556,7 +4807,7 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
|
|
|
4556
4807
|
self,
|
|
4557
4808
|
*cmd: str,
|
|
4558
4809
|
input: ta.Any = None, # noqa
|
|
4559
|
-
timeout: ta.Optional[
|
|
4810
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
4560
4811
|
check: bool = False,
|
|
4561
4812
|
capture_output: ta.Optional[bool] = None,
|
|
4562
4813
|
**kwargs: ta.Any,
|
|
@@ -4867,7 +5118,7 @@ class AsyncioProcessCommunicator:
|
|
|
4867
5118
|
async def communicate(
|
|
4868
5119
|
self,
|
|
4869
5120
|
input: ta.Any = None, # noqa
|
|
4870
|
-
timeout: ta.Optional[
|
|
5121
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
4871
5122
|
) -> Communication:
|
|
4872
5123
|
return await asyncio_maybe_timeout(self._communicate(input), timeout)
|
|
4873
5124
|
|
|
@@ -4880,7 +5131,7 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
|
|
|
4880
5131
|
self,
|
|
4881
5132
|
proc: asyncio.subprocess.Process,
|
|
4882
5133
|
input: ta.Any = None, # noqa
|
|
4883
|
-
timeout: ta.Optional[
|
|
5134
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
4884
5135
|
) -> ta.Tuple[ta.Optional[bytes], ta.Optional[bytes]]:
|
|
4885
5136
|
return await AsyncioProcessCommunicator(proc).communicate(input, timeout) # noqa
|
|
4886
5137
|
|
|
@@ -4891,7 +5142,7 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
|
|
|
4891
5142
|
self,
|
|
4892
5143
|
*cmd: str,
|
|
4893
5144
|
shell: bool = False,
|
|
4894
|
-
timeout: ta.Optional[
|
|
5145
|
+
timeout: ta.Optional[TimeoutLike] = None,
|
|
4895
5146
|
**kwargs: ta.Any,
|
|
4896
5147
|
) -> ta.AsyncGenerator[asyncio.subprocess.Process, None]:
|
|
4897
5148
|
with self.prepare_and_wrap( *cmd, shell=shell, **kwargs) as (cmd, kwargs): # noqa
|