omdev 0.0.0.dev431__tar.gz → 0.0.0.dev432__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.dev431/omdev.egg-info → omdev-0.0.0.dev432}/PKG-INFO +2 -2
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/ci.py +75 -20
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/interp.py +10 -6
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/pyproject.py +75 -20
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/pyproject.toml +2 -2
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/LICENSE +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/README.md +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/.omlish-manifests.json +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/cli/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/cli/main.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/gen.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/imports.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/manifests.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/resources.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/srcfiles.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/strip.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/types.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/gen/typing.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/amalg/sources.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataclasses/codegen.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/intellij/open.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/_dumping.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/building.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/confirm.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/LICENSE +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/border.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/markdown.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/parser.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/styles.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/tags.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/ptk/markdown/utils.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/resources/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/SOURCES.txt +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev431 → omdev-0.0.0.dev432}/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.dev432
|
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.dev432
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -7653,6 +7653,16 @@ class LoggingContext(Abstract):
|
|
7653
7653
|
raise TypeError(f'LoggingContextInfo absent: {ty}')
|
7654
7654
|
return info
|
7655
7655
|
|
7656
|
+
|
7657
|
+
@ta.final
|
7658
|
+
class SimpleLoggingContext(LoggingContext):
|
7659
|
+
def __init__(self, *infos: LoggingContextInfo) -> None:
|
7660
|
+
self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {type(i): i for i in infos}
|
7661
|
+
|
7662
|
+
def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
|
7663
|
+
return self._infos.get(ty)
|
7664
|
+
|
7665
|
+
|
7656
7666
|
##
|
7657
7667
|
|
7658
7668
|
|
@@ -7854,10 +7864,14 @@ def _locking_logging_module_lock() -> ta.Iterator[None]:
|
|
7854
7864
|
def configure_standard_logging(
|
7855
7865
|
level: ta.Union[int, str] = logging.INFO,
|
7856
7866
|
*,
|
7857
|
-
json: bool = False,
|
7858
7867
|
target: ta.Optional[logging.Logger] = None,
|
7868
|
+
|
7859
7869
|
force: bool = False,
|
7870
|
+
|
7860
7871
|
handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
|
7872
|
+
|
7873
|
+
formatter: ta.Optional[logging.Formatter] = None, # noqa
|
7874
|
+
json: bool = False,
|
7861
7875
|
) -> ta.Optional[StandardConfiguredLoggingHandler]:
|
7862
7876
|
with _locking_logging_module_lock():
|
7863
7877
|
if target is None:
|
@@ -7878,11 +7892,11 @@ def configure_standard_logging(
|
|
7878
7892
|
|
7879
7893
|
#
|
7880
7894
|
|
7881
|
-
formatter:
|
7882
|
-
|
7883
|
-
|
7884
|
-
|
7885
|
-
|
7895
|
+
if formatter is None:
|
7896
|
+
if json:
|
7897
|
+
formatter = JsonLoggingFormatter()
|
7898
|
+
else:
|
7899
|
+
formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS)) # noqa
|
7886
7900
|
handler.setFormatter(formatter)
|
7887
7901
|
|
7888
7902
|
#
|
@@ -9976,8 +9990,23 @@ class LoggingContextInfoRecordAdapters:
|
|
9976
9990
|
|
9977
9991
|
def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.Caller]:
|
9978
9992
|
# FIXME: piecemeal?
|
9979
|
-
|
9980
|
-
|
9993
|
+
if (
|
9994
|
+
rec.pathname != self._UNKNOWN_PATH_NAME and
|
9995
|
+
rec.lineno != 0 and
|
9996
|
+
rec.funcName != self._UNKNOWN_FUNC_NAME
|
9997
|
+
):
|
9998
|
+
if (sinfo := rec.stack_info) is not None and sinfo.startswith(self._STACK_INFO_PREFIX):
|
9999
|
+
sinfo = sinfo[len(self._STACK_INFO_PREFIX):]
|
10000
|
+
return LoggingContextInfos.Caller(
|
10001
|
+
file_path=rec.pathname,
|
10002
|
+
|
10003
|
+
line_no=rec.lineno,
|
10004
|
+
func_name=rec.funcName,
|
10005
|
+
|
10006
|
+
stack_info=sinfo,
|
10007
|
+
)
|
10008
|
+
|
10009
|
+
return None
|
9981
10010
|
|
9982
10011
|
class SourceFile(Adapter[LoggingContextInfos.SourceFile]):
|
9983
10012
|
info_cls: ta.ClassVar[ta.Type[LoggingContextInfos.SourceFile]] = LoggingContextInfos.SourceFile
|
@@ -10013,9 +10042,9 @@ class LoggingContextInfoRecordAdapters:
|
|
10013
10042
|
)
|
10014
10043
|
|
10015
10044
|
def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.SourceFile]:
|
10016
|
-
if
|
10017
|
-
rec.module is None
|
10018
|
-
rec.module
|
10045
|
+
if (
|
10046
|
+
rec.module is not None and
|
10047
|
+
rec.module != self._UNKNOWN_MODULE
|
10019
10048
|
):
|
10020
10049
|
return LoggingContextInfos.SourceFile(
|
10021
10050
|
file_name=rec.filename,
|
@@ -10168,16 +10197,11 @@ _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS: ta.Mapping[ta.Type[LoggingContextInfo], L
|
|
10168
10197
|
##
|
10169
10198
|
|
10170
10199
|
|
10171
|
-
KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
|
10172
|
-
a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
|
10173
|
-
)
|
10174
|
-
|
10175
|
-
|
10176
10200
|
# Formatter:
|
10177
10201
|
# - https://github.com/python/cpython/blob/39b2f82717a69dde7212bc39b673b0f55c99e6a3/Lib/logging/__init__.py#L514 (3.8)
|
10178
10202
|
# - https://github.com/python/cpython/blob/f070f54c5f4a42c7c61d1d5d3b8f3b7203b4a0fb/Lib/logging/__init__.py#L554 (~3.14) # noqa
|
10179
10203
|
#
|
10180
|
-
|
10204
|
+
_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
|
10181
10205
|
# The logged message, computed as msg % args. Set to `record.getMessage()`.
|
10182
10206
|
message=str,
|
10183
10207
|
|
@@ -10191,7 +10215,15 @@ KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
|
|
10191
10215
|
exc_text=ta.Optional[str],
|
10192
10216
|
)
|
10193
10217
|
|
10194
|
-
|
10218
|
+
|
10219
|
+
##
|
10220
|
+
|
10221
|
+
|
10222
|
+
_KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
|
10223
|
+
a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
|
10224
|
+
)
|
10225
|
+
|
10226
|
+
_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS)
|
10195
10227
|
|
10196
10228
|
|
10197
10229
|
class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
|
@@ -10201,13 +10233,13 @@ class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
|
|
10201
10233
|
def _check_std_logging_record_attrs() -> None:
|
10202
10234
|
if (
|
10203
10235
|
len([a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs]) !=
|
10204
|
-
len(
|
10236
|
+
len(_KNOWN_STD_LOGGING_RECORD_ATTR_SET)
|
10205
10237
|
):
|
10206
10238
|
raise RuntimeError('Duplicate LoggingContextInfoRecordAdapter record attrs')
|
10207
10239
|
|
10208
10240
|
rec_dct = dict(logging.makeLogRecord({}).__dict__)
|
10209
10241
|
|
10210
|
-
if (unk_rec_fields := frozenset(rec_dct) -
|
10242
|
+
if (unk_rec_fields := frozenset(rec_dct) - _KNOWN_STD_LOGGING_RECORD_ATTR_SET):
|
10211
10243
|
import warnings # noqa
|
10212
10244
|
|
10213
10245
|
warnings.warn(
|
@@ -10235,10 +10267,33 @@ class LoggingContextLogRecord(logging.LogRecord):
|
|
10235
10267
|
# - sinfo: str | None = None -> stack_info
|
10236
10268
|
|
10237
10269
|
def __init__(self, *, _logging_context: LoggingContext) -> None: # noqa
|
10270
|
+
self._logging_context = _logging_context
|
10271
|
+
|
10238
10272
|
for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_:
|
10239
10273
|
self.__dict__.update(ad.context_to_record(_logging_context))
|
10240
10274
|
|
10241
10275
|
|
10276
|
+
##
|
10277
|
+
|
10278
|
+
|
10279
|
+
@ta.final
|
10280
|
+
class LogRecordLoggingContext(LoggingContext):
|
10281
|
+
def __init__(self, rec: logging.LogRecord) -> None:
|
10282
|
+
if isinstance(rec, LoggingContextLogRecord):
|
10283
|
+
raise TypeError(rec)
|
10284
|
+
|
10285
|
+
self._rec = rec
|
10286
|
+
|
10287
|
+
self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {
|
10288
|
+
type(info): info
|
10289
|
+
for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_
|
10290
|
+
if (info := ad.record_to_info(rec)) is not None
|
10291
|
+
}
|
10292
|
+
|
10293
|
+
def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
|
10294
|
+
return self._infos.get(ty)
|
10295
|
+
|
10296
|
+
|
10242
10297
|
########################################
|
10243
10298
|
# ../../../omlish/secrets/tempssl.py
|
10244
10299
|
|
@@ -4220,10 +4220,14 @@ def _locking_logging_module_lock() -> ta.Iterator[None]:
|
|
4220
4220
|
def configure_standard_logging(
|
4221
4221
|
level: ta.Union[int, str] = logging.INFO,
|
4222
4222
|
*,
|
4223
|
-
json: bool = False,
|
4224
4223
|
target: ta.Optional[logging.Logger] = None,
|
4224
|
+
|
4225
4225
|
force: bool = False,
|
4226
|
+
|
4226
4227
|
handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
|
4228
|
+
|
4229
|
+
formatter: ta.Optional[logging.Formatter] = None, # noqa
|
4230
|
+
json: bool = False,
|
4227
4231
|
) -> ta.Optional[StandardConfiguredLoggingHandler]:
|
4228
4232
|
with _locking_logging_module_lock():
|
4229
4233
|
if target is None:
|
@@ -4244,11 +4248,11 @@ def configure_standard_logging(
|
|
4244
4248
|
|
4245
4249
|
#
|
4246
4250
|
|
4247
|
-
formatter:
|
4248
|
-
|
4249
|
-
|
4250
|
-
|
4251
|
-
|
4251
|
+
if formatter is None:
|
4252
|
+
if json:
|
4253
|
+
formatter = JsonLoggingFormatter()
|
4254
|
+
else:
|
4255
|
+
formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS)) # noqa
|
4252
4256
|
handler.setFormatter(formatter)
|
4253
4257
|
|
4254
4258
|
#
|
@@ -7116,6 +7116,16 @@ class LoggingContext(Abstract):
|
|
7116
7116
|
raise TypeError(f'LoggingContextInfo absent: {ty}')
|
7117
7117
|
return info
|
7118
7118
|
|
7119
|
+
|
7120
|
+
@ta.final
|
7121
|
+
class SimpleLoggingContext(LoggingContext):
|
7122
|
+
def __init__(self, *infos: LoggingContextInfo) -> None:
|
7123
|
+
self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {type(i): i for i in infos}
|
7124
|
+
|
7125
|
+
def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
|
7126
|
+
return self._infos.get(ty)
|
7127
|
+
|
7128
|
+
|
7119
7129
|
##
|
7120
7130
|
|
7121
7131
|
|
@@ -7317,10 +7327,14 @@ def _locking_logging_module_lock() -> ta.Iterator[None]:
|
|
7317
7327
|
def configure_standard_logging(
|
7318
7328
|
level: ta.Union[int, str] = logging.INFO,
|
7319
7329
|
*,
|
7320
|
-
json: bool = False,
|
7321
7330
|
target: ta.Optional[logging.Logger] = None,
|
7331
|
+
|
7322
7332
|
force: bool = False,
|
7333
|
+
|
7323
7334
|
handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
|
7335
|
+
|
7336
|
+
formatter: ta.Optional[logging.Formatter] = None, # noqa
|
7337
|
+
json: bool = False,
|
7324
7338
|
) -> ta.Optional[StandardConfiguredLoggingHandler]:
|
7325
7339
|
with _locking_logging_module_lock():
|
7326
7340
|
if target is None:
|
@@ -7341,11 +7355,11 @@ def configure_standard_logging(
|
|
7341
7355
|
|
7342
7356
|
#
|
7343
7357
|
|
7344
|
-
formatter:
|
7345
|
-
|
7346
|
-
|
7347
|
-
|
7348
|
-
|
7358
|
+
if formatter is None:
|
7359
|
+
if json:
|
7360
|
+
formatter = JsonLoggingFormatter()
|
7361
|
+
else:
|
7362
|
+
formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS)) # noqa
|
7349
7363
|
handler.setFormatter(formatter)
|
7350
7364
|
|
7351
7365
|
#
|
@@ -8121,8 +8135,23 @@ class LoggingContextInfoRecordAdapters:
|
|
8121
8135
|
|
8122
8136
|
def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.Caller]:
|
8123
8137
|
# FIXME: piecemeal?
|
8124
|
-
|
8125
|
-
|
8138
|
+
if (
|
8139
|
+
rec.pathname != self._UNKNOWN_PATH_NAME and
|
8140
|
+
rec.lineno != 0 and
|
8141
|
+
rec.funcName != self._UNKNOWN_FUNC_NAME
|
8142
|
+
):
|
8143
|
+
if (sinfo := rec.stack_info) is not None and sinfo.startswith(self._STACK_INFO_PREFIX):
|
8144
|
+
sinfo = sinfo[len(self._STACK_INFO_PREFIX):]
|
8145
|
+
return LoggingContextInfos.Caller(
|
8146
|
+
file_path=rec.pathname,
|
8147
|
+
|
8148
|
+
line_no=rec.lineno,
|
8149
|
+
func_name=rec.funcName,
|
8150
|
+
|
8151
|
+
stack_info=sinfo,
|
8152
|
+
)
|
8153
|
+
|
8154
|
+
return None
|
8126
8155
|
|
8127
8156
|
class SourceFile(Adapter[LoggingContextInfos.SourceFile]):
|
8128
8157
|
info_cls: ta.ClassVar[ta.Type[LoggingContextInfos.SourceFile]] = LoggingContextInfos.SourceFile
|
@@ -8158,9 +8187,9 @@ class LoggingContextInfoRecordAdapters:
|
|
8158
8187
|
)
|
8159
8188
|
|
8160
8189
|
def record_to_info(self, rec: logging.LogRecord) -> ta.Optional[LoggingContextInfos.SourceFile]:
|
8161
|
-
if
|
8162
|
-
rec.module is None
|
8163
|
-
rec.module
|
8190
|
+
if (
|
8191
|
+
rec.module is not None and
|
8192
|
+
rec.module != self._UNKNOWN_MODULE
|
8164
8193
|
):
|
8165
8194
|
return LoggingContextInfos.SourceFile(
|
8166
8195
|
file_name=rec.filename,
|
@@ -8313,16 +8342,11 @@ _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS: ta.Mapping[ta.Type[LoggingContextInfo], L
|
|
8313
8342
|
##
|
8314
8343
|
|
8315
8344
|
|
8316
|
-
KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
|
8317
|
-
a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
|
8318
|
-
)
|
8319
|
-
|
8320
|
-
|
8321
8345
|
# Formatter:
|
8322
8346
|
# - https://github.com/python/cpython/blob/39b2f82717a69dde7212bc39b673b0f55c99e6a3/Lib/logging/__init__.py#L514 (3.8)
|
8323
8347
|
# - https://github.com/python/cpython/blob/f070f54c5f4a42c7c61d1d5d3b8f3b7203b4a0fb/Lib/logging/__init__.py#L554 (~3.14) # noqa
|
8324
8348
|
#
|
8325
|
-
|
8349
|
+
_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
|
8326
8350
|
# The logged message, computed as msg % args. Set to `record.getMessage()`.
|
8327
8351
|
message=str,
|
8328
8352
|
|
@@ -8336,7 +8360,15 @@ KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS: ta.Dict[str, ta.Any] = dict(
|
|
8336
8360
|
exc_text=ta.Optional[str],
|
8337
8361
|
)
|
8338
8362
|
|
8339
|
-
|
8363
|
+
|
8364
|
+
##
|
8365
|
+
|
8366
|
+
|
8367
|
+
_KNOWN_STD_LOGGING_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(
|
8368
|
+
a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs
|
8369
|
+
)
|
8370
|
+
|
8371
|
+
_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTR_SET: ta.FrozenSet[str] = frozenset(_KNOWN_STD_LOGGING_FORMATTER_RECORD_ATTRS)
|
8340
8372
|
|
8341
8373
|
|
8342
8374
|
class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
|
@@ -8346,13 +8378,13 @@ class UnknownStdLoggingRecordAttrsWarning(LoggingSetupWarning):
|
|
8346
8378
|
def _check_std_logging_record_attrs() -> None:
|
8347
8379
|
if (
|
8348
8380
|
len([a for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS.values() for a in ad.record_attrs]) !=
|
8349
|
-
len(
|
8381
|
+
len(_KNOWN_STD_LOGGING_RECORD_ATTR_SET)
|
8350
8382
|
):
|
8351
8383
|
raise RuntimeError('Duplicate LoggingContextInfoRecordAdapter record attrs')
|
8352
8384
|
|
8353
8385
|
rec_dct = dict(logging.makeLogRecord({}).__dict__)
|
8354
8386
|
|
8355
|
-
if (unk_rec_fields := frozenset(rec_dct) -
|
8387
|
+
if (unk_rec_fields := frozenset(rec_dct) - _KNOWN_STD_LOGGING_RECORD_ATTR_SET):
|
8356
8388
|
import warnings # noqa
|
8357
8389
|
|
8358
8390
|
warnings.warn(
|
@@ -8380,10 +8412,33 @@ class LoggingContextLogRecord(logging.LogRecord):
|
|
8380
8412
|
# - sinfo: str | None = None -> stack_info
|
8381
8413
|
|
8382
8414
|
def __init__(self, *, _logging_context: LoggingContext) -> None: # noqa
|
8415
|
+
self._logging_context = _logging_context
|
8416
|
+
|
8383
8417
|
for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_:
|
8384
8418
|
self.__dict__.update(ad.context_to_record(_logging_context))
|
8385
8419
|
|
8386
8420
|
|
8421
|
+
##
|
8422
|
+
|
8423
|
+
|
8424
|
+
@ta.final
|
8425
|
+
class LogRecordLoggingContext(LoggingContext):
|
8426
|
+
def __init__(self, rec: logging.LogRecord) -> None:
|
8427
|
+
if isinstance(rec, LoggingContextLogRecord):
|
8428
|
+
raise TypeError(rec)
|
8429
|
+
|
8430
|
+
self._rec = rec
|
8431
|
+
|
8432
|
+
self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {
|
8433
|
+
type(info): info
|
8434
|
+
for ad in _LOGGING_CONTEXT_INFO_RECORD_ADAPTERS_
|
8435
|
+
if (info := ad.record_to_info(rec)) is not None
|
8436
|
+
}
|
8437
|
+
|
8438
|
+
def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
|
8439
|
+
return self._infos.get(ty)
|
8440
|
+
|
8441
|
+
|
8387
8442
|
########################################
|
8388
8443
|
# ../../../omlish/subprocesses/base.py
|
8389
8444
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev432
|
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.dev432
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
|
|
13
13
|
license = 'BSD-3-Clause'
|
14
14
|
readme = 'README.md'
|
15
15
|
requires-python = '>=3.13'
|
16
|
-
version = '0.0.0.
|
16
|
+
version = '0.0.0.dev432'
|
17
17
|
classifiers = [
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
19
19
|
'Intended Audience :: Developers',
|
@@ -24,7 +24,7 @@ classifiers = [
|
|
24
24
|
]
|
25
25
|
description = 'omdev'
|
26
26
|
dependencies = [
|
27
|
-
'omlish == 0.0.0.
|
27
|
+
'omlish == 0.0.0.dev432',
|
28
28
|
]
|
29
29
|
|
30
30
|
[project.optional-dependencies]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|