omdev 0.0.29__tar.gz → 0.0.30__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.29/omdev.egg-info → omdev-0.0.30}/PKG-INFO +6 -6
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/_dumping.py +69 -18
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/codegen.py +0 -5
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/config.toml +7 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/gen.py +1 -1
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/.python-versions.json +4 -4
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/depsets/python.toml +5 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/manifests/_dumping.py +72 -19
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/ci.py +781 -216
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/interp.py +47 -19
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/formats/goyaml.py +557 -122
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/inject.py +29 -7
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/io/pipelines.py +3 -3
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/io/streambufs.py +3 -3
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/marshal.py +69 -18
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/pidfiles.py +111 -32
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/pyproject.py +137 -37
- {omdev-0.0.29 → omdev-0.0.30/omdev.egg-info}/PKG-INFO +6 -6
- {omdev-0.0.29 → omdev-0.0.30}/omdev.egg-info/requires.txt +5 -5
- {omdev-0.0.29 → omdev-0.0.30}/pyproject.toml +6 -6
- {omdev-0.0.29 → omdev-0.0.30}/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/MANIFEST.in +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/README.md +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/.om-manifests.json +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/README.md +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/__about__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/cli/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/cli/main.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/gen.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/imports.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/manifests.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/resources.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/srcfiles.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/strip.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/gen/typing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/info.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/amalg/sources.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cc/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/build.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/cache.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/ci.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/compose.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/consts.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/shell.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/ci/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/install.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/main.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/managers.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cli/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/capi/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/capi/darwin_cf.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/capi/linux_x11.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/commands.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/platform.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/clipboard/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cmake.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/_template.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataclasses/dumping.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/diffs/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/diffs/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/diffs/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/diffs/parsing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/diffs/rendering.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/diffs/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/build.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/config.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/content.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/helpers.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/ops.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/rendering.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.vimrc +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/depsets/system.toml +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/go.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/man.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/user.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/install-claude +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/install-codex +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/install-pi +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/resources/shift-uid.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/run.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/dockerdev/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/git/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/git/magic.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/git/revisions.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/git/shallow.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/git/status.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/home/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/home/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/home/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/home/paths.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/home/secrets.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/home/shadow.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/imgur.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/intellij/open.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/default.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/java/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/java/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/java/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/java/pomgen.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/java/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/java/xml.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/find.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/magic.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/magic/styles.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/manifests/building.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/manifests/main.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/markdown/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/markdown/incparse.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/markdown/tokens.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/mypy/report.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/names.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pip.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/base.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/blanklines.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/git.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/main.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/asts/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/asts/parents.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/asts/toplevel.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/asts/visitors.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/classdot.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/findimports.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/reprs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tokens/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tokens/all.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tokens/tokenizert.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tokens/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tools/fixdocstrings.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py/tools/pipdepup.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/py.typed +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/resources/dockerdev.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/tools/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/tools/aboutdeps.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/tools/buildrs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/tools/pyversions.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/pyproject/versions.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/rs/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/formats/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/io/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/lib/logs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/messages/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/messages/base.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/messages/formats.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/messages/messages.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/messages/parsing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/numerics/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/numerics/formats.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/numerics/numerics.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/numerics/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/consts.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/errors.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/message.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/nuh.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/parsing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/rendering.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/tags.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/irc/protocol/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/config.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/errors.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/generator.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/ir.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/names.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/typing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/building.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/compression.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/data.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/datarefs.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/dataserver.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/loading.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/media.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/pack/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/pack/packing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/pack/repositories.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/pack/unpacking.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/repositories.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/specs/oci/tars.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tagstrings.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/diff.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/doc.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/docker.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/ocr.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/pawk/README.md +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/pip.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/prof.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/qr.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/shell.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/edit/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/edit/main.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/irc/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/irc/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/irc/app.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/irc/client.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/irc/commands.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/irc/main.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/app.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/utils.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/jtree/widgets.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/markdown/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/markdown/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/apps/markdown/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/console2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/__main__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/_compat.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/cli.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/renderables.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/rendering.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/diff/underlinebar.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/markdown2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/textual/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/textual/dark.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/textual/dump.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/textual/themes.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/rich/trirule.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/actionmenu.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/client.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/borders.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/colors.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/colors.tcss +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/easing.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/easing.tcss +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/keys.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/protocol.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/redirect_output.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/renderables.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/server.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/service.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/altdevtools/tools/diagnose.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/app2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/autocomplete/LICENSE +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/autocomplete/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/autocomplete/matching.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/autocomplete/paths.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/autocomplete/widget.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/binding2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/clipboard.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/debug/__init__.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/debug/dominfo.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/debug/screen.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/devtools.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/dom2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/drivers2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/logging2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/render2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/screen2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/types.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev/tui/textual/widgets2.py +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev.egg-info/SOURCES.txt +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.29 → omdev-0.0.30}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.30
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -13,10 +13,10 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
13
13
|
Requires-Python: >=3.14
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
License-File: LICENSE
|
|
16
|
-
Requires-Dist: omcore==0.0.
|
|
16
|
+
Requires-Dist: omcore==0.0.30
|
|
17
17
|
Provides-Extra: all
|
|
18
|
-
Requires-Dist: ominfra==0.0.
|
|
19
|
-
Requires-Dist: omllm==0.0.
|
|
18
|
+
Requires-Dist: ominfra==0.0.30; extra == "all"
|
|
19
|
+
Requires-Dist: omllm==0.0.30; extra == "all"
|
|
20
20
|
Requires-Dist: black~=26.5; extra == "all"
|
|
21
21
|
Requires-Dist: pycparser~=3.0; extra == "all"
|
|
22
22
|
Requires-Dist: pcpp~=1.30; extra == "all"
|
|
@@ -35,9 +35,9 @@ Requires-Dist: textual~=8.2; extra == "all"
|
|
|
35
35
|
Requires-Dist: textual-dev~=1.8; extra == "all"
|
|
36
36
|
Requires-Dist: textual-speedups~=0.2; extra == "all"
|
|
37
37
|
Provides-Extra: ominfra
|
|
38
|
-
Requires-Dist: ominfra==0.0.
|
|
38
|
+
Requires-Dist: ominfra==0.0.30; extra == "ominfra"
|
|
39
39
|
Provides-Extra: omllm
|
|
40
|
-
Requires-Dist: omllm==0.0.
|
|
40
|
+
Requires-Dist: omllm==0.0.30; extra == "omllm"
|
|
41
41
|
Provides-Extra: black
|
|
42
42
|
Requires-Dist: black~=26.5; extra == "black"
|
|
43
43
|
Provides-Extra: c
|
|
@@ -42,10 +42,10 @@ def __om_amalg__(): # noqa
|
|
|
42
42
|
dict(path='../../omcore/lite/check.py', sha1='62b9ccea94c4f7bcef97e7adae8674b8cb11d4af'),
|
|
43
43
|
dict(path='../../omcore/lite/io.py', sha1='a60d94f0bdbb2b1541d363c301314682d1686240'),
|
|
44
44
|
dict(path='../../omcore/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
|
|
45
|
-
dict(path='../../omcore/lite/reflect.py', sha1='
|
|
46
|
-
dict(path='../../omcore/lite/strings.py', sha1='
|
|
45
|
+
dict(path='../../omcore/lite/reflect.py', sha1='fab4ef6f45f278ce7bffcd811cd170b40db107a8'),
|
|
46
|
+
dict(path='../../omcore/lite/strings.py', sha1='b31b8e4b0e4fec4562ea3fa602e4ef2475e5fe7c'),
|
|
47
47
|
dict(path='../../omcore/lite/json.py', sha1='01124e62093ebd4078602f16df0ec04cb724a612'),
|
|
48
|
-
dict(path='../../omcore/lite/marshal.py', sha1='
|
|
48
|
+
dict(path='../../omcore/lite/marshal.py', sha1='9b3f4ff802344313147f412f8f028922afc52b2f'),
|
|
49
49
|
dict(path='dumping.py', sha1='f385a4502d279cf76e4a2bd69efac82881117e57'),
|
|
50
50
|
],
|
|
51
51
|
)
|
|
@@ -911,7 +911,8 @@ def is_generic_alias(obj: ta.Any, *, origin: ta.Any = None) -> bool:
|
|
|
911
911
|
)
|
|
912
912
|
|
|
913
913
|
|
|
914
|
-
|
|
914
|
+
# ta.get_origin returns the collections.abc class, never the typing alias.
|
|
915
|
+
is_callable_alias = functools.partial(is_generic_alias, origin=ta.get_origin(ta.Callable[..., ta.Any]))
|
|
915
916
|
|
|
916
917
|
|
|
917
918
|
##
|
|
@@ -1015,10 +1016,10 @@ def is_dunder(name: str) -> bool:
|
|
|
1015
1016
|
|
|
1016
1017
|
def is_sunder(name: str) -> bool:
|
|
1017
1018
|
return (
|
|
1019
|
+
len(name) > 2 and
|
|
1018
1020
|
name[0] == name[-1] == '_' and
|
|
1019
1021
|
name[1:2] != '_' and
|
|
1020
|
-
name[-2:-1] != '_'
|
|
1021
|
-
len(name) > 2
|
|
1022
|
+
name[-2:-1] != '_'
|
|
1022
1023
|
)
|
|
1023
1024
|
|
|
1024
1025
|
|
|
@@ -1032,22 +1033,25 @@ def strip_with_newline(s: str) -> str:
|
|
|
1032
1033
|
|
|
1033
1034
|
|
|
1034
1035
|
@ta.overload
|
|
1035
|
-
def split_keep_delimiter(s: str, d: str) -> str: ...
|
|
1036
|
+
def split_keep_delimiter(s: str, d: str) -> ta.List[str]: ...
|
|
1036
1037
|
|
|
1037
1038
|
|
|
1038
1039
|
@ta.overload
|
|
1039
|
-
def split_keep_delimiter(s: bytes, d: bytes) -> bytes: ...
|
|
1040
|
+
def split_keep_delimiter(s: bytes, d: bytes) -> ta.List[bytes]: ...
|
|
1040
1041
|
|
|
1041
1042
|
|
|
1042
1043
|
def split_keep_delimiter(s, d):
|
|
1044
|
+
if not d:
|
|
1045
|
+
raise ValueError(d)
|
|
1046
|
+
dl = len(d)
|
|
1043
1047
|
ps = []
|
|
1044
1048
|
i = 0
|
|
1045
1049
|
while i < len(s):
|
|
1046
1050
|
if (n := s.find(d, i)) < i:
|
|
1047
1051
|
ps.append(s[i:])
|
|
1048
1052
|
break
|
|
1049
|
-
ps.append(s[i:n +
|
|
1050
|
-
i = n +
|
|
1053
|
+
ps.append(s[i:n + dl])
|
|
1054
|
+
i = n + dl
|
|
1051
1055
|
return ps
|
|
1052
1056
|
|
|
1053
1057
|
|
|
@@ -1312,12 +1316,27 @@ class PrimitiveUnionObjMarshaler(ObjMarshaler):
|
|
|
1312
1316
|
raise TypeError(o)
|
|
1313
1317
|
|
|
1314
1318
|
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
1319
|
+
if self._x is not None:
|
|
1320
|
+
# The non-primitive member must be tried first - its marshaled form may itself be one of the union's
|
|
1321
|
+
# primitive types (e.g. Union[str, Decimal] wires Decimal as a str), which primitive-first dispatch would
|
|
1322
|
+
# shadow entirely. Such wire values are inherently ambiguous - the non-primitive parse is accepted only
|
|
1323
|
+
# when it faithfully round-trips back to the wire value, so lenient member unmarshalers (e.g. a Sequence
|
|
1324
|
+
# member iterating a str) don't capture values belonging to a primitive member.
|
|
1325
|
+
try:
|
|
1326
|
+
v = self._x.unmarshal(o, ctx)
|
|
1327
|
+
except Exception: # noqa
|
|
1328
|
+
pass
|
|
1329
|
+
else:
|
|
1330
|
+
if not isinstance(o, self._pt):
|
|
1331
|
+
return v
|
|
1332
|
+
try:
|
|
1333
|
+
if self._x.marshal(v, ctx) == o:
|
|
1334
|
+
return v
|
|
1335
|
+
except Exception: # noqa
|
|
1336
|
+
pass
|
|
1315
1337
|
if isinstance(o, self._pt):
|
|
1316
1338
|
return o
|
|
1317
|
-
|
|
1318
|
-
return self._x.unmarshal(o, ctx)
|
|
1319
|
-
else:
|
|
1320
|
-
raise TypeError(o)
|
|
1339
|
+
raise TypeError(o)
|
|
1321
1340
|
|
|
1322
1341
|
|
|
1323
1342
|
class LiteralObjMarshaler(ObjMarshaler):
|
|
@@ -1704,7 +1723,7 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1704
1723
|
self._registered_obj_marshalers = registered_obj_marshalers
|
|
1705
1724
|
|
|
1706
1725
|
self._lock = threading.RLock()
|
|
1707
|
-
self.
|
|
1726
|
+
self._derived_obj_marshalers: ta.Dict[ta.Any, ObjMarshaler] = {}
|
|
1708
1727
|
self._proxies: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
|
|
1709
1728
|
|
|
1710
1729
|
#
|
|
@@ -1713,6 +1732,20 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1713
1732
|
def _is_abstract(cls, ty: type) -> bool:
|
|
1714
1733
|
return abc.ABC in ty.__bases__ or Abstract in ty.__bases__
|
|
1715
1734
|
|
|
1735
|
+
@classmethod
|
|
1736
|
+
def _get_field_type_hints(cls, ty: type) -> ta.Optional[ta.Mapping[str, ta.Any]]:
|
|
1737
|
+
"""
|
|
1738
|
+
Best-effort resolution of string / forward-ref field annotations (`from __future__ import annotations` modules,
|
|
1739
|
+
self-referential fields) against their defining modules' namespaces, mro-aware. Returns None on failure (e.g.
|
|
1740
|
+
TYPE_CHECKING-only names, classes exec'd into namespaces absent from sys.modules) - callers fall back to the
|
|
1741
|
+
raw annotations, preserving behavior for already-evaluated ones.
|
|
1742
|
+
"""
|
|
1743
|
+
|
|
1744
|
+
try:
|
|
1745
|
+
return ta.get_type_hints(ty)
|
|
1746
|
+
except Exception: # noqa
|
|
1747
|
+
return None
|
|
1748
|
+
|
|
1716
1749
|
#
|
|
1717
1750
|
|
|
1718
1751
|
def make_obj_marshaler(
|
|
@@ -1761,29 +1794,38 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1761
1794
|
return EnumObjMarshaler(ty)
|
|
1762
1795
|
|
|
1763
1796
|
if dc.is_dataclass(ty):
|
|
1797
|
+
hints = self._get_field_type_hints(ty) or {}
|
|
1764
1798
|
return FieldsObjMarshaler(
|
|
1765
1799
|
ty,
|
|
1766
1800
|
[
|
|
1767
1801
|
FieldsObjMarshaler.Field(
|
|
1768
1802
|
att=f.name,
|
|
1769
1803
|
key=check.non_empty_str(fk),
|
|
1770
|
-
m=rec(f.type),
|
|
1804
|
+
m=rec(hints.get(f.name, f.type)),
|
|
1771
1805
|
omit_if_none=check.isinstance(f.metadata.get(OBJ_MARSHALER_OMIT_IF_NONE, False), bool),
|
|
1772
1806
|
)
|
|
1773
1807
|
for f in dc.fields(ty)
|
|
1808
|
+
# init=False fields are excluded from both directions - unmarshal passes every key as a ctor
|
|
1809
|
+
# kwarg, so marshaling them would produce round-trip-asymmetric output.
|
|
1810
|
+
if f.init
|
|
1774
1811
|
if (fk := f.metadata.get(OBJ_MARSHALER_FIELD_KEY, f.name)) is not None
|
|
1775
1812
|
],
|
|
1776
1813
|
non_strict=non_strict_fields,
|
|
1777
1814
|
)
|
|
1778
1815
|
|
|
1779
1816
|
if issubclass(ty, tuple) and hasattr(ty, '_fields'):
|
|
1817
|
+
hints = self._get_field_type_hints(ty) or {}
|
|
1780
1818
|
return FieldsObjMarshaler(
|
|
1781
1819
|
ty,
|
|
1782
1820
|
[
|
|
1783
1821
|
FieldsObjMarshaler.Field(
|
|
1784
1822
|
att=p.name,
|
|
1785
1823
|
key=p.name,
|
|
1786
|
-
|
|
1824
|
+
# Untyped collections.namedtuple fields have empty annotations - marshal them dynamically.
|
|
1825
|
+
m=rec(hints.get(
|
|
1826
|
+
p.name,
|
|
1827
|
+
p.annotation if p.annotation is not inspect.Parameter.empty else ta.Any,
|
|
1828
|
+
)),
|
|
1787
1829
|
)
|
|
1788
1830
|
for p in inspect.signature(ty).parameters.values()
|
|
1789
1831
|
],
|
|
@@ -1874,12 +1916,21 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1874
1916
|
**kwargs: ta.Any,
|
|
1875
1917
|
) -> ObjMarshaler:
|
|
1876
1918
|
with self._lock:
|
|
1919
|
+
ck = (ty, tuple(sorted(kwargs.items())))
|
|
1877
1920
|
if not no_cache:
|
|
1921
|
+
# Explicitly set marshalers (and the defaults) are authoritative regardless of construction kwargs.
|
|
1878
1922
|
try:
|
|
1879
1923
|
return self._obj_marshalers[ty]
|
|
1880
1924
|
except KeyError:
|
|
1881
1925
|
pass
|
|
1882
1926
|
|
|
1927
|
+
# Derived marshalers are cached under their construction kwargs - a strict marshaler must not be
|
|
1928
|
+
# returned for a non-strict request, nor vice versa.
|
|
1929
|
+
try:
|
|
1930
|
+
return self._derived_obj_marshalers[ck]
|
|
1931
|
+
except KeyError:
|
|
1932
|
+
pass
|
|
1933
|
+
|
|
1883
1934
|
try:
|
|
1884
1935
|
return self._proxies[ty]
|
|
1885
1936
|
except KeyError:
|
|
@@ -1900,7 +1951,7 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1900
1951
|
p._m = m # noqa
|
|
1901
1952
|
|
|
1902
1953
|
if not no_cache:
|
|
1903
|
-
self.
|
|
1954
|
+
self._derived_obj_marshalers[ck] = m
|
|
1904
1955
|
return m
|
|
1905
1956
|
|
|
1906
1957
|
def make_context(self, opts: ta.Optional[ObjMarshalOptions]) -> 'ObjMarshalContext':
|
|
@@ -245,11 +245,6 @@ class DataclassCodeGen:
|
|
|
245
245
|
if not _is_generated_py_file(gen_file_path):
|
|
246
246
|
raise RuntimeError(f'Refusing to overwrite non-generated file: {gen_file_path!r}')
|
|
247
247
|
|
|
248
|
-
if not output.dumped:
|
|
249
|
-
if not self._dry_run:
|
|
250
|
-
os.unlink(gen_file_path)
|
|
251
|
-
return
|
|
252
|
-
|
|
253
248
|
#
|
|
254
249
|
|
|
255
250
|
lines = [
|
|
@@ -3,18 +3,23 @@ deps = [
|
|
|
3
3
|
'gdb',
|
|
4
4
|
'lcov',
|
|
5
5
|
'libbz2-dev',
|
|
6
|
+
'libexpat1-dev',
|
|
6
7
|
'libffi-dev',
|
|
7
8
|
'libgdbm-compat-dev',
|
|
8
9
|
'libgdbm-dev',
|
|
9
10
|
'liblzma-dev',
|
|
10
11
|
'libncurses5-dev',
|
|
12
|
+
'libnsl-dev',
|
|
13
|
+
'libreadline-dev',
|
|
11
14
|
'libreadline6-dev',
|
|
12
15
|
'libsqlite3-dev',
|
|
13
16
|
'libssl-dev',
|
|
17
|
+
'libzstd-dev',
|
|
14
18
|
'lzma',
|
|
15
19
|
'lzma-dev',
|
|
16
20
|
'pkg-config',
|
|
17
21
|
'tk-dev',
|
|
18
22
|
'uuid-dev',
|
|
23
|
+
'xz-utils',
|
|
19
24
|
'zlib1g-dev',
|
|
20
25
|
]
|
|
@@ -38,12 +38,12 @@ def __om_amalg__(): # noqa
|
|
|
38
38
|
return dict(
|
|
39
39
|
src_files=[
|
|
40
40
|
dict(path='../../omcore/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
|
|
41
|
-
dict(path='../../omcore/lite/cached.py', sha1='
|
|
41
|
+
dict(path='../../omcore/lite/cached.py', sha1='4f5466ce20a485428519e284b2a388a9ef8e4786'),
|
|
42
42
|
dict(path='../../omcore/lite/check.py', sha1='62b9ccea94c4f7bcef97e7adae8674b8cb11d4af'),
|
|
43
43
|
dict(path='../../omcore/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
|
|
44
|
-
dict(path='../../omcore/lite/reflect.py', sha1='
|
|
45
|
-
dict(path='../../omcore/lite/strings.py', sha1='
|
|
46
|
-
dict(path='../../omcore/lite/marshal.py', sha1='
|
|
44
|
+
dict(path='../../omcore/lite/reflect.py', sha1='fab4ef6f45f278ce7bffcd811cd170b40db107a8'),
|
|
45
|
+
dict(path='../../omcore/lite/strings.py', sha1='b31b8e4b0e4fec4562ea3fa602e4ef2475e5fe7c'),
|
|
46
|
+
dict(path='../../omcore/lite/marshal.py', sha1='9b3f4ff802344313147f412f8f028922afc52b2f'),
|
|
47
47
|
dict(path='dumping.py', sha1='4837c54c1019dcb85fbfaa8086f5efb98025358a'),
|
|
48
48
|
],
|
|
49
49
|
)
|
|
@@ -233,6 +233,8 @@ class _AbstractCachedNullary:
|
|
|
233
233
|
raise TypeError
|
|
234
234
|
|
|
235
235
|
def __get__(self, instance, owner=None): # noqa
|
|
236
|
+
if instance is None:
|
|
237
|
+
return self
|
|
236
238
|
bound = instance.__dict__[self._fn.__name__] = self.__class__(self._fn.__get__(instance, owner))
|
|
237
239
|
return bound
|
|
238
240
|
|
|
@@ -1007,7 +1009,8 @@ def is_generic_alias(obj: ta.Any, *, origin: ta.Any = None) -> bool:
|
|
|
1007
1009
|
)
|
|
1008
1010
|
|
|
1009
1011
|
|
|
1010
|
-
|
|
1012
|
+
# ta.get_origin returns the collections.abc class, never the typing alias.
|
|
1013
|
+
is_callable_alias = functools.partial(is_generic_alias, origin=ta.get_origin(ta.Callable[..., ta.Any]))
|
|
1011
1014
|
|
|
1012
1015
|
|
|
1013
1016
|
##
|
|
@@ -1111,10 +1114,10 @@ def is_dunder(name: str) -> bool:
|
|
|
1111
1114
|
|
|
1112
1115
|
def is_sunder(name: str) -> bool:
|
|
1113
1116
|
return (
|
|
1117
|
+
len(name) > 2 and
|
|
1114
1118
|
name[0] == name[-1] == '_' and
|
|
1115
1119
|
name[1:2] != '_' and
|
|
1116
|
-
name[-2:-1] != '_'
|
|
1117
|
-
len(name) > 2
|
|
1120
|
+
name[-2:-1] != '_'
|
|
1118
1121
|
)
|
|
1119
1122
|
|
|
1120
1123
|
|
|
@@ -1128,22 +1131,25 @@ def strip_with_newline(s: str) -> str:
|
|
|
1128
1131
|
|
|
1129
1132
|
|
|
1130
1133
|
@ta.overload
|
|
1131
|
-
def split_keep_delimiter(s: str, d: str) -> str: ...
|
|
1134
|
+
def split_keep_delimiter(s: str, d: str) -> ta.List[str]: ...
|
|
1132
1135
|
|
|
1133
1136
|
|
|
1134
1137
|
@ta.overload
|
|
1135
|
-
def split_keep_delimiter(s: bytes, d: bytes) -> bytes: ...
|
|
1138
|
+
def split_keep_delimiter(s: bytes, d: bytes) -> ta.List[bytes]: ...
|
|
1136
1139
|
|
|
1137
1140
|
|
|
1138
1141
|
def split_keep_delimiter(s, d):
|
|
1142
|
+
if not d:
|
|
1143
|
+
raise ValueError(d)
|
|
1144
|
+
dl = len(d)
|
|
1139
1145
|
ps = []
|
|
1140
1146
|
i = 0
|
|
1141
1147
|
while i < len(s):
|
|
1142
1148
|
if (n := s.find(d, i)) < i:
|
|
1143
1149
|
ps.append(s[i:])
|
|
1144
1150
|
break
|
|
1145
|
-
ps.append(s[i:n +
|
|
1146
|
-
i = n +
|
|
1151
|
+
ps.append(s[i:n + dl])
|
|
1152
|
+
i = n + dl
|
|
1147
1153
|
return ps
|
|
1148
1154
|
|
|
1149
1155
|
|
|
@@ -1315,12 +1321,27 @@ class PrimitiveUnionObjMarshaler(ObjMarshaler):
|
|
|
1315
1321
|
raise TypeError(o)
|
|
1316
1322
|
|
|
1317
1323
|
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
1324
|
+
if self._x is not None:
|
|
1325
|
+
# The non-primitive member must be tried first - its marshaled form may itself be one of the union's
|
|
1326
|
+
# primitive types (e.g. Union[str, Decimal] wires Decimal as a str), which primitive-first dispatch would
|
|
1327
|
+
# shadow entirely. Such wire values are inherently ambiguous - the non-primitive parse is accepted only
|
|
1328
|
+
# when it faithfully round-trips back to the wire value, so lenient member unmarshalers (e.g. a Sequence
|
|
1329
|
+
# member iterating a str) don't capture values belonging to a primitive member.
|
|
1330
|
+
try:
|
|
1331
|
+
v = self._x.unmarshal(o, ctx)
|
|
1332
|
+
except Exception: # noqa
|
|
1333
|
+
pass
|
|
1334
|
+
else:
|
|
1335
|
+
if not isinstance(o, self._pt):
|
|
1336
|
+
return v
|
|
1337
|
+
try:
|
|
1338
|
+
if self._x.marshal(v, ctx) == o:
|
|
1339
|
+
return v
|
|
1340
|
+
except Exception: # noqa
|
|
1341
|
+
pass
|
|
1318
1342
|
if isinstance(o, self._pt):
|
|
1319
1343
|
return o
|
|
1320
|
-
|
|
1321
|
-
return self._x.unmarshal(o, ctx)
|
|
1322
|
-
else:
|
|
1323
|
-
raise TypeError(o)
|
|
1344
|
+
raise TypeError(o)
|
|
1324
1345
|
|
|
1325
1346
|
|
|
1326
1347
|
class LiteralObjMarshaler(ObjMarshaler):
|
|
@@ -1707,7 +1728,7 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1707
1728
|
self._registered_obj_marshalers = registered_obj_marshalers
|
|
1708
1729
|
|
|
1709
1730
|
self._lock = threading.RLock()
|
|
1710
|
-
self.
|
|
1731
|
+
self._derived_obj_marshalers: ta.Dict[ta.Any, ObjMarshaler] = {}
|
|
1711
1732
|
self._proxies: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
|
|
1712
1733
|
|
|
1713
1734
|
#
|
|
@@ -1716,6 +1737,20 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1716
1737
|
def _is_abstract(cls, ty: type) -> bool:
|
|
1717
1738
|
return abc.ABC in ty.__bases__ or Abstract in ty.__bases__
|
|
1718
1739
|
|
|
1740
|
+
@classmethod
|
|
1741
|
+
def _get_field_type_hints(cls, ty: type) -> ta.Optional[ta.Mapping[str, ta.Any]]:
|
|
1742
|
+
"""
|
|
1743
|
+
Best-effort resolution of string / forward-ref field annotations (`from __future__ import annotations` modules,
|
|
1744
|
+
self-referential fields) against their defining modules' namespaces, mro-aware. Returns None on failure (e.g.
|
|
1745
|
+
TYPE_CHECKING-only names, classes exec'd into namespaces absent from sys.modules) - callers fall back to the
|
|
1746
|
+
raw annotations, preserving behavior for already-evaluated ones.
|
|
1747
|
+
"""
|
|
1748
|
+
|
|
1749
|
+
try:
|
|
1750
|
+
return ta.get_type_hints(ty)
|
|
1751
|
+
except Exception: # noqa
|
|
1752
|
+
return None
|
|
1753
|
+
|
|
1719
1754
|
#
|
|
1720
1755
|
|
|
1721
1756
|
def make_obj_marshaler(
|
|
@@ -1764,29 +1799,38 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1764
1799
|
return EnumObjMarshaler(ty)
|
|
1765
1800
|
|
|
1766
1801
|
if dc.is_dataclass(ty):
|
|
1802
|
+
hints = self._get_field_type_hints(ty) or {}
|
|
1767
1803
|
return FieldsObjMarshaler(
|
|
1768
1804
|
ty,
|
|
1769
1805
|
[
|
|
1770
1806
|
FieldsObjMarshaler.Field(
|
|
1771
1807
|
att=f.name,
|
|
1772
1808
|
key=check.non_empty_str(fk),
|
|
1773
|
-
m=rec(f.type),
|
|
1809
|
+
m=rec(hints.get(f.name, f.type)),
|
|
1774
1810
|
omit_if_none=check.isinstance(f.metadata.get(OBJ_MARSHALER_OMIT_IF_NONE, False), bool),
|
|
1775
1811
|
)
|
|
1776
1812
|
for f in dc.fields(ty)
|
|
1813
|
+
# init=False fields are excluded from both directions - unmarshal passes every key as a ctor
|
|
1814
|
+
# kwarg, so marshaling them would produce round-trip-asymmetric output.
|
|
1815
|
+
if f.init
|
|
1777
1816
|
if (fk := f.metadata.get(OBJ_MARSHALER_FIELD_KEY, f.name)) is not None
|
|
1778
1817
|
],
|
|
1779
1818
|
non_strict=non_strict_fields,
|
|
1780
1819
|
)
|
|
1781
1820
|
|
|
1782
1821
|
if issubclass(ty, tuple) and hasattr(ty, '_fields'):
|
|
1822
|
+
hints = self._get_field_type_hints(ty) or {}
|
|
1783
1823
|
return FieldsObjMarshaler(
|
|
1784
1824
|
ty,
|
|
1785
1825
|
[
|
|
1786
1826
|
FieldsObjMarshaler.Field(
|
|
1787
1827
|
att=p.name,
|
|
1788
1828
|
key=p.name,
|
|
1789
|
-
|
|
1829
|
+
# Untyped collections.namedtuple fields have empty annotations - marshal them dynamically.
|
|
1830
|
+
m=rec(hints.get(
|
|
1831
|
+
p.name,
|
|
1832
|
+
p.annotation if p.annotation is not inspect.Parameter.empty else ta.Any,
|
|
1833
|
+
)),
|
|
1790
1834
|
)
|
|
1791
1835
|
for p in inspect.signature(ty).parameters.values()
|
|
1792
1836
|
],
|
|
@@ -1877,12 +1921,21 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1877
1921
|
**kwargs: ta.Any,
|
|
1878
1922
|
) -> ObjMarshaler:
|
|
1879
1923
|
with self._lock:
|
|
1924
|
+
ck = (ty, tuple(sorted(kwargs.items())))
|
|
1880
1925
|
if not no_cache:
|
|
1926
|
+
# Explicitly set marshalers (and the defaults) are authoritative regardless of construction kwargs.
|
|
1881
1927
|
try:
|
|
1882
1928
|
return self._obj_marshalers[ty]
|
|
1883
1929
|
except KeyError:
|
|
1884
1930
|
pass
|
|
1885
1931
|
|
|
1932
|
+
# Derived marshalers are cached under their construction kwargs - a strict marshaler must not be
|
|
1933
|
+
# returned for a non-strict request, nor vice versa.
|
|
1934
|
+
try:
|
|
1935
|
+
return self._derived_obj_marshalers[ck]
|
|
1936
|
+
except KeyError:
|
|
1937
|
+
pass
|
|
1938
|
+
|
|
1886
1939
|
try:
|
|
1887
1940
|
return self._proxies[ty]
|
|
1888
1941
|
except KeyError:
|
|
@@ -1903,7 +1956,7 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
|
|
|
1903
1956
|
p._m = m # noqa
|
|
1904
1957
|
|
|
1905
1958
|
if not no_cache:
|
|
1906
|
-
self.
|
|
1959
|
+
self._derived_obj_marshalers[ck] = m
|
|
1907
1960
|
return m
|
|
1908
1961
|
|
|
1909
1962
|
def make_context(self, opts: ta.Optional[ObjMarshalOptions]) -> 'ObjMarshalContext':
|