omdev 0.0.0.dev440__tar.gz → 0.0.0.dev441__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.dev440/omdev.egg-info → omdev-0.0.0.dev441}/PKG-INFO +2 -2
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/manifests/_dumping.py +56 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/ci.py +149 -45
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/interp.py +56 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/pyproject.py +56 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/pyproject.toml +2 -2
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/LICENSE +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/README.md +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/.omlish-manifests.json +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/cli/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/cli/main.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/gen.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/imports.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/manifests.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/resources.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/srcfiles.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/strip.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/types.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/gen/typing.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/amalg/sources.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataclasses/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataclasses/codegen.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/intellij/open.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/manifests/building.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/confirm.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/LICENSE +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/border.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/markdown.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/parser.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/styles.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/tags.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/ptk/markdown/utils.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/lib/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/lib/inject.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/lib/logs.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/lib/marshal.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/jsonview/resources/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev.egg-info/SOURCES.txt +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev440 → omdev-0.0.0.dev441}/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.dev441
|
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.dev441
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.23; extra == "all"
|
@@ -227,6 +227,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
|
|
227
227
|
return _AsyncCachedNullary(fn)
|
228
228
|
|
229
229
|
|
230
|
+
##
|
231
|
+
|
232
|
+
|
233
|
+
cached_property = functools.cached_property
|
234
|
+
|
235
|
+
|
236
|
+
class _cached_property: # noqa
|
237
|
+
"""Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
|
238
|
+
|
239
|
+
def __init__(self, func):
|
240
|
+
self.func = func
|
241
|
+
self.attrname = None # noqa
|
242
|
+
self.__doc__ = func.__doc__
|
243
|
+
self.__module__ = func.__module__
|
244
|
+
|
245
|
+
_NOT_FOUND = object()
|
246
|
+
|
247
|
+
def __set_name__(self, owner, name):
|
248
|
+
if self.attrname is None:
|
249
|
+
self.attrname = name # noqa
|
250
|
+
elif name != self.attrname:
|
251
|
+
raise TypeError(
|
252
|
+
f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
|
253
|
+
)
|
254
|
+
|
255
|
+
def __get__(self, instance, owner=None):
|
256
|
+
if instance is None:
|
257
|
+
return self
|
258
|
+
if self.attrname is None:
|
259
|
+
raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
|
260
|
+
|
261
|
+
try:
|
262
|
+
cache = instance.__dict__
|
263
|
+
except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
|
264
|
+
raise TypeError(
|
265
|
+
f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
|
266
|
+
) from None
|
267
|
+
|
268
|
+
val = cache.get(self.attrname, self._NOT_FOUND)
|
269
|
+
|
270
|
+
if val is self._NOT_FOUND:
|
271
|
+
val = self.func(instance)
|
272
|
+
try:
|
273
|
+
cache[self.attrname] = val
|
274
|
+
except TypeError:
|
275
|
+
raise TypeError(
|
276
|
+
f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
|
277
|
+
f"assignment for caching {self.attrname!r} property.",
|
278
|
+
) from None
|
279
|
+
|
280
|
+
return val
|
281
|
+
|
282
|
+
|
283
|
+
globals()['cached_property'] = _cached_property
|
284
|
+
|
285
|
+
|
230
286
|
########################################
|
231
287
|
# ../../../omlish/lite/check.py
|
232
288
|
"""
|
@@ -670,6 +670,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
|
|
670
670
|
return _AsyncCachedNullary(fn)
|
671
671
|
|
672
672
|
|
673
|
+
##
|
674
|
+
|
675
|
+
|
676
|
+
cached_property = functools.cached_property
|
677
|
+
|
678
|
+
|
679
|
+
class _cached_property: # noqa
|
680
|
+
"""Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
|
681
|
+
|
682
|
+
def __init__(self, func):
|
683
|
+
self.func = func
|
684
|
+
self.attrname = None # noqa
|
685
|
+
self.__doc__ = func.__doc__
|
686
|
+
self.__module__ = func.__module__
|
687
|
+
|
688
|
+
_NOT_FOUND = object()
|
689
|
+
|
690
|
+
def __set_name__(self, owner, name):
|
691
|
+
if self.attrname is None:
|
692
|
+
self.attrname = name # noqa
|
693
|
+
elif name != self.attrname:
|
694
|
+
raise TypeError(
|
695
|
+
f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
|
696
|
+
)
|
697
|
+
|
698
|
+
def __get__(self, instance, owner=None):
|
699
|
+
if instance is None:
|
700
|
+
return self
|
701
|
+
if self.attrname is None:
|
702
|
+
raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
|
703
|
+
|
704
|
+
try:
|
705
|
+
cache = instance.__dict__
|
706
|
+
except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
|
707
|
+
raise TypeError(
|
708
|
+
f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
|
709
|
+
) from None
|
710
|
+
|
711
|
+
val = cache.get(self.attrname, self._NOT_FOUND)
|
712
|
+
|
713
|
+
if val is self._NOT_FOUND:
|
714
|
+
val = self.func(instance)
|
715
|
+
try:
|
716
|
+
cache[self.attrname] = val
|
717
|
+
except TypeError:
|
718
|
+
raise TypeError(
|
719
|
+
f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
|
720
|
+
f"assignment for caching {self.attrname!r} property.",
|
721
|
+
) from None
|
722
|
+
|
723
|
+
return val
|
724
|
+
|
725
|
+
|
726
|
+
globals()['cached_property'] = _cached_property
|
727
|
+
|
728
|
+
|
673
729
|
########################################
|
674
730
|
# ../../../omlish/lite/check.py
|
675
731
|
"""
|
@@ -1366,6 +1422,17 @@ aclosing = AsyncClosingManager
|
|
1366
1422
|
##
|
1367
1423
|
|
1368
1424
|
|
1425
|
+
def dataclass_shallow_astuple(o: ta.Any) -> ta.Tuple[ta.Any, ...]:
|
1426
|
+
return tuple(getattr(o, f.name) for f in dc.fields(o))
|
1427
|
+
|
1428
|
+
|
1429
|
+
def dataclass_shallow_asdict(o: ta.Any) -> ta.Dict[str, ta.Any]:
|
1430
|
+
return {f.name: getattr(o, f.name) for f in dc.fields(o)}
|
1431
|
+
|
1432
|
+
|
1433
|
+
##
|
1434
|
+
|
1435
|
+
|
1369
1436
|
def is_immediate_dataclass(cls: type) -> bool:
|
1370
1437
|
if not isinstance(cls, type):
|
1371
1438
|
raise TypeError(cls)
|
@@ -3254,6 +3321,70 @@ class ArgparseCli:
|
|
3254
3321
|
return fn()
|
3255
3322
|
|
3256
3323
|
|
3324
|
+
########################################
|
3325
|
+
# ../../../omlish/http/coro/io.py
|
3326
|
+
|
3327
|
+
|
3328
|
+
##
|
3329
|
+
|
3330
|
+
|
3331
|
+
class CoroHttpIo:
|
3332
|
+
def __new__(cls, *args, **kwargs): # noqa
|
3333
|
+
raise TypeError
|
3334
|
+
|
3335
|
+
def __init_subclass__(cls, **kwargs): # noqa
|
3336
|
+
raise TypeError
|
3337
|
+
|
3338
|
+
#
|
3339
|
+
|
3340
|
+
MAX_LINE: ta.ClassVar[int] = 65536
|
3341
|
+
|
3342
|
+
#
|
3343
|
+
|
3344
|
+
class Io(Abstract):
|
3345
|
+
pass
|
3346
|
+
|
3347
|
+
#
|
3348
|
+
|
3349
|
+
class AnyLogIo(Io, Abstract):
|
3350
|
+
pass
|
3351
|
+
|
3352
|
+
#
|
3353
|
+
|
3354
|
+
@dc.dataclass(frozen=True)
|
3355
|
+
class ConnectIo(Io):
|
3356
|
+
args: ta.Tuple[ta.Any, ...]
|
3357
|
+
kwargs: ta.Optional[ta.Dict[str, ta.Any]] = None
|
3358
|
+
|
3359
|
+
#
|
3360
|
+
|
3361
|
+
class CloseIo(Io):
|
3362
|
+
pass
|
3363
|
+
|
3364
|
+
#
|
3365
|
+
|
3366
|
+
class AnyReadIo(Io): # noqa
|
3367
|
+
pass
|
3368
|
+
|
3369
|
+
@dc.dataclass(frozen=True)
|
3370
|
+
class ReadIo(AnyReadIo):
|
3371
|
+
sz: ta.Optional[int]
|
3372
|
+
|
3373
|
+
@dc.dataclass(frozen=True)
|
3374
|
+
class ReadLineIo(AnyReadIo):
|
3375
|
+
sz: int
|
3376
|
+
|
3377
|
+
@dc.dataclass(frozen=True)
|
3378
|
+
class PeekIo(AnyReadIo):
|
3379
|
+
sz: int
|
3380
|
+
|
3381
|
+
#
|
3382
|
+
|
3383
|
+
@dc.dataclass(frozen=True)
|
3384
|
+
class WriteIo(Io):
|
3385
|
+
data: bytes
|
3386
|
+
|
3387
|
+
|
3257
3388
|
########################################
|
3258
3389
|
# ../../../omlish/http/parsing.py
|
3259
3390
|
# PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
@@ -9247,48 +9378,21 @@ class CoroHttpServer:
|
|
9247
9378
|
|
9248
9379
|
#
|
9249
9380
|
|
9250
|
-
class Io(Abstract):
|
9251
|
-
pass
|
9252
|
-
|
9253
|
-
#
|
9254
|
-
|
9255
|
-
class AnyLogIo(Io):
|
9256
|
-
pass
|
9257
|
-
|
9258
9381
|
@dc.dataclass(frozen=True)
|
9259
|
-
class ParsedRequestLogIo(AnyLogIo):
|
9382
|
+
class ParsedRequestLogIo(CoroHttpIo.AnyLogIo):
|
9260
9383
|
request: ParsedHttpRequest
|
9261
9384
|
|
9262
9385
|
@dc.dataclass(frozen=True)
|
9263
|
-
class ErrorLogIo(AnyLogIo):
|
9386
|
+
class ErrorLogIo(CoroHttpIo.AnyLogIo):
|
9264
9387
|
error: 'CoroHttpServer.Error'
|
9265
9388
|
|
9266
9389
|
#
|
9267
9390
|
|
9268
|
-
class AnyReadIo(Io): # noqa
|
9269
|
-
pass
|
9270
|
-
|
9271
|
-
@dc.dataclass(frozen=True)
|
9272
|
-
class ReadIo(AnyReadIo):
|
9273
|
-
sz: int
|
9274
|
-
|
9275
|
-
@dc.dataclass(frozen=True)
|
9276
|
-
class ReadLineIo(AnyReadIo):
|
9277
|
-
sz: int
|
9278
|
-
|
9279
|
-
#
|
9280
|
-
|
9281
|
-
@dc.dataclass(frozen=True)
|
9282
|
-
class WriteIo(Io):
|
9283
|
-
data: bytes
|
9284
|
-
|
9285
|
-
#
|
9286
|
-
|
9287
9391
|
@dc.dataclass(frozen=True)
|
9288
9392
|
class CoroHandleResult:
|
9289
9393
|
close_reason: ta.Literal['response', 'internal', None] = None
|
9290
9394
|
|
9291
|
-
def coro_handle(self) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
|
9395
|
+
def coro_handle(self) -> ta.Generator[CoroHttpIo.Io, ta.Optional[bytes], CoroHandleResult]:
|
9292
9396
|
return self._coro_run_handler(self._coro_handle_one())
|
9293
9397
|
|
9294
9398
|
class Close(Exception): # noqa
|
@@ -9297,20 +9401,20 @@ class CoroHttpServer:
|
|
9297
9401
|
def _coro_run_handler(
|
9298
9402
|
self,
|
9299
9403
|
gen: ta.Generator[
|
9300
|
-
ta.Union[AnyLogIo, AnyReadIo, _Response],
|
9404
|
+
ta.Union[CoroHttpIo.AnyLogIo, CoroHttpIo.AnyReadIo, _Response],
|
9301
9405
|
ta.Optional[bytes],
|
9302
9406
|
None,
|
9303
9407
|
],
|
9304
|
-
) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
|
9408
|
+
) -> ta.Generator[CoroHttpIo.Io, ta.Optional[bytes], CoroHandleResult]:
|
9305
9409
|
i: ta.Optional[bytes]
|
9306
9410
|
o: ta.Any = next(gen)
|
9307
9411
|
while True:
|
9308
9412
|
try:
|
9309
|
-
if isinstance(o,
|
9413
|
+
if isinstance(o, CoroHttpIo.AnyLogIo):
|
9310
9414
|
i = None
|
9311
9415
|
yield o
|
9312
9416
|
|
9313
|
-
elif isinstance(o,
|
9417
|
+
elif isinstance(o, CoroHttpIo.AnyReadIo):
|
9314
9418
|
i = check.isinstance((yield o), bytes)
|
9315
9419
|
|
9316
9420
|
elif isinstance(o, self._Response):
|
@@ -9318,10 +9422,10 @@ class CoroHttpServer:
|
|
9318
9422
|
|
9319
9423
|
r = self._preprocess_response(o)
|
9320
9424
|
hb = self._build_response_head_bytes(r)
|
9321
|
-
check.none((yield
|
9425
|
+
check.none((yield CoroHttpIo.WriteIo(hb)))
|
9322
9426
|
|
9323
9427
|
for b in self._yield_response_data(r):
|
9324
|
-
yield
|
9428
|
+
yield CoroHttpIo.WriteIo(b)
|
9325
9429
|
|
9326
9430
|
o.close()
|
9327
9431
|
if o.close_connection:
|
@@ -9349,7 +9453,7 @@ class CoroHttpServer:
|
|
9349
9453
|
raise
|
9350
9454
|
|
9351
9455
|
def _coro_handle_one(self) -> ta.Generator[
|
9352
|
-
ta.Union[AnyLogIo, AnyReadIo, _Response],
|
9456
|
+
ta.Union[CoroHttpIo.AnyLogIo, CoroHttpIo.AnyReadIo, _Response],
|
9353
9457
|
ta.Optional[bytes],
|
9354
9458
|
None,
|
9355
9459
|
]:
|
@@ -9359,7 +9463,7 @@ class CoroHttpServer:
|
|
9359
9463
|
sz = next(gen)
|
9360
9464
|
while True:
|
9361
9465
|
try:
|
9362
|
-
line = check.isinstance((yield
|
9466
|
+
line = check.isinstance((yield CoroHttpIo.ReadLineIo(sz)), bytes)
|
9363
9467
|
sz = gen.send(line)
|
9364
9468
|
except StopIteration as e:
|
9365
9469
|
parsed = e.value
|
@@ -9398,7 +9502,7 @@ class CoroHttpServer:
|
|
9398
9502
|
|
9399
9503
|
request_data: ta.Optional[bytes]
|
9400
9504
|
if (cl := parsed.headers.get('Content-Length')) is not None:
|
9401
|
-
request_data = check.isinstance((yield
|
9505
|
+
request_data = check.isinstance((yield CoroHttpIo.ReadIo(int(cl))), bytes)
|
9402
9506
|
else:
|
9403
9507
|
request_data = None
|
9404
9508
|
|
@@ -11443,7 +11547,7 @@ class CoroHttpServerSocketHandler(SocketHandler_):
|
|
11443
11547
|
server_factory: CoroHttpServerFactory,
|
11444
11548
|
*,
|
11445
11549
|
keep_alive: bool = False,
|
11446
|
-
log_handler: ta.Optional[ta.Callable[[CoroHttpServer,
|
11550
|
+
log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpIo.AnyLogIo], None]] = None,
|
11447
11551
|
) -> None:
|
11448
11552
|
super().__init__()
|
11449
11553
|
|
@@ -11472,18 +11576,18 @@ class CoroHttpServerSocketHandler(SocketHandler_):
|
|
11472
11576
|
|
11473
11577
|
o = next(gen)
|
11474
11578
|
while True:
|
11475
|
-
if isinstance(o,
|
11579
|
+
if isinstance(o, CoroHttpIo.AnyLogIo):
|
11476
11580
|
i = None
|
11477
11581
|
if self._log_handler is not None:
|
11478
11582
|
self._log_handler(server, o)
|
11479
11583
|
|
11480
|
-
elif isinstance(o,
|
11481
|
-
i = fp.r.read(o.sz)
|
11584
|
+
elif isinstance(o, CoroHttpIo.ReadIo):
|
11585
|
+
i = fp.r.read(check.not_none(o.sz))
|
11482
11586
|
|
11483
|
-
elif isinstance(o,
|
11587
|
+
elif isinstance(o, CoroHttpIo.ReadLineIo):
|
11484
11588
|
i = fp.r.readline(o.sz)
|
11485
11589
|
|
11486
|
-
elif isinstance(o,
|
11590
|
+
elif isinstance(o, CoroHttpIo.WriteIo):
|
11487
11591
|
i = None
|
11488
11592
|
fp.w.write(o.data)
|
11489
11593
|
fp.w.flush()
|
@@ -686,6 +686,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
|
|
686
686
|
return _AsyncCachedNullary(fn)
|
687
687
|
|
688
688
|
|
689
|
+
##
|
690
|
+
|
691
|
+
|
692
|
+
cached_property = functools.cached_property
|
693
|
+
|
694
|
+
|
695
|
+
class _cached_property: # noqa
|
696
|
+
"""Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
|
697
|
+
|
698
|
+
def __init__(self, func):
|
699
|
+
self.func = func
|
700
|
+
self.attrname = None # noqa
|
701
|
+
self.__doc__ = func.__doc__
|
702
|
+
self.__module__ = func.__module__
|
703
|
+
|
704
|
+
_NOT_FOUND = object()
|
705
|
+
|
706
|
+
def __set_name__(self, owner, name):
|
707
|
+
if self.attrname is None:
|
708
|
+
self.attrname = name # noqa
|
709
|
+
elif name != self.attrname:
|
710
|
+
raise TypeError(
|
711
|
+
f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
|
712
|
+
)
|
713
|
+
|
714
|
+
def __get__(self, instance, owner=None):
|
715
|
+
if instance is None:
|
716
|
+
return self
|
717
|
+
if self.attrname is None:
|
718
|
+
raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
|
719
|
+
|
720
|
+
try:
|
721
|
+
cache = instance.__dict__
|
722
|
+
except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
|
723
|
+
raise TypeError(
|
724
|
+
f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
|
725
|
+
) from None
|
726
|
+
|
727
|
+
val = cache.get(self.attrname, self._NOT_FOUND)
|
728
|
+
|
729
|
+
if val is self._NOT_FOUND:
|
730
|
+
val = self.func(instance)
|
731
|
+
try:
|
732
|
+
cache[self.attrname] = val
|
733
|
+
except TypeError:
|
734
|
+
raise TypeError(
|
735
|
+
f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
|
736
|
+
f"assignment for caching {self.attrname!r} property.",
|
737
|
+
) from None
|
738
|
+
|
739
|
+
return val
|
740
|
+
|
741
|
+
|
742
|
+
globals()['cached_property'] = _cached_property
|
743
|
+
|
744
|
+
|
689
745
|
########################################
|
690
746
|
# ../../../omlish/lite/check.py
|
691
747
|
"""
|
@@ -2121,6 +2121,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
|
|
2121
2121
|
return _AsyncCachedNullary(fn)
|
2122
2122
|
|
2123
2123
|
|
2124
|
+
##
|
2125
|
+
|
2126
|
+
|
2127
|
+
cached_property = functools.cached_property
|
2128
|
+
|
2129
|
+
|
2130
|
+
class _cached_property: # noqa
|
2131
|
+
"""Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
|
2132
|
+
|
2133
|
+
def __init__(self, func):
|
2134
|
+
self.func = func
|
2135
|
+
self.attrname = None # noqa
|
2136
|
+
self.__doc__ = func.__doc__
|
2137
|
+
self.__module__ = func.__module__
|
2138
|
+
|
2139
|
+
_NOT_FOUND = object()
|
2140
|
+
|
2141
|
+
def __set_name__(self, owner, name):
|
2142
|
+
if self.attrname is None:
|
2143
|
+
self.attrname = name # noqa
|
2144
|
+
elif name != self.attrname:
|
2145
|
+
raise TypeError(
|
2146
|
+
f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
|
2147
|
+
)
|
2148
|
+
|
2149
|
+
def __get__(self, instance, owner=None):
|
2150
|
+
if instance is None:
|
2151
|
+
return self
|
2152
|
+
if self.attrname is None:
|
2153
|
+
raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
|
2154
|
+
|
2155
|
+
try:
|
2156
|
+
cache = instance.__dict__
|
2157
|
+
except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
|
2158
|
+
raise TypeError(
|
2159
|
+
f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
|
2160
|
+
) from None
|
2161
|
+
|
2162
|
+
val = cache.get(self.attrname, self._NOT_FOUND)
|
2163
|
+
|
2164
|
+
if val is self._NOT_FOUND:
|
2165
|
+
val = self.func(instance)
|
2166
|
+
try:
|
2167
|
+
cache[self.attrname] = val
|
2168
|
+
except TypeError:
|
2169
|
+
raise TypeError(
|
2170
|
+
f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
|
2171
|
+
f"assignment for caching {self.attrname!r} property.",
|
2172
|
+
) from None
|
2173
|
+
|
2174
|
+
return val
|
2175
|
+
|
2176
|
+
|
2177
|
+
globals()['cached_property'] = _cached_property
|
2178
|
+
|
2179
|
+
|
2124
2180
|
########################################
|
2125
2181
|
# ../../../omlish/lite/check.py
|
2126
2182
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev441
|
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.dev441
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.23; 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.dev441'
|
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.dev441',
|
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
|