omdev 0.0.0.dev285__tar.gz → 0.0.0.dev287__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.dev285/omdev.egg-info → omdev-0.0.0.dev287}/PKG-INFO +2 -2
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/.manifests.json +19 -7
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/attrdocs.py +34 -15
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/findimports.py +2 -0
- omdev-0.0.0.dev287/omdev/py/scripts/execstat.py +80 -0
- omdev-0.0.0.dev287/omdev/py/srcheaders.py +98 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/scripts/ci.py +16 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/scripts/interp.py +16 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/scripts/pyproject.py +16 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tokens/all.py +1 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tokens/tokenizert.py +9 -8
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev.egg-info/SOURCES.txt +2 -1
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/pyproject.toml +2 -2
- omdev-0.0.0.dev285/omdev/py/scripts/execrss.py +0 -37
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/LICENSE +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/README.rst +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/antlr/consts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/antlr/gen.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/api.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/client.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/scripts/exectime.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/intellij.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev285 → omdev-0.0.0.dev287}/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.dev287
|
4
4
|
Summary: omdev
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.12
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev287
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -123,7 +123,7 @@
|
|
123
123
|
"module": ".py.attrdocs",
|
124
124
|
"attr": "_CLI_MODULE",
|
125
125
|
"file": "omdev/py/attrdocs.py",
|
126
|
-
"line":
|
126
|
+
"line": 155,
|
127
127
|
"value": {
|
128
128
|
"$.cli.types.CliModule": {
|
129
129
|
"cmd_name": "py/attrdocs",
|
@@ -159,7 +159,7 @@
|
|
159
159
|
"module": ".py.findimports",
|
160
160
|
"attr": "_CLI_MODULE",
|
161
161
|
"file": "omdev/py/findimports.py",
|
162
|
-
"line":
|
162
|
+
"line": 89,
|
163
163
|
"value": {
|
164
164
|
"$.cli.types.CliModule": {
|
165
165
|
"cmd_name": "py/findimports",
|
@@ -168,14 +168,14 @@
|
|
168
168
|
}
|
169
169
|
},
|
170
170
|
{
|
171
|
-
"module": ".py.scripts.
|
171
|
+
"module": ".py.scripts.execstat",
|
172
172
|
"attr": "_CLI_MODULE",
|
173
|
-
"file": "omdev/py/scripts/
|
174
|
-
"line":
|
173
|
+
"file": "omdev/py/scripts/execstat.py",
|
174
|
+
"line": 49,
|
175
175
|
"value": {
|
176
176
|
"$.cli.types.CliModule": {
|
177
|
-
"cmd_name": "py/
|
178
|
-
"mod_name": "omdev.py.scripts.
|
177
|
+
"cmd_name": "py/execstat",
|
178
|
+
"mod_name": "omdev.py.scripts.execstat"
|
179
179
|
}
|
180
180
|
}
|
181
181
|
},
|
@@ -203,6 +203,18 @@
|
|
203
203
|
}
|
204
204
|
}
|
205
205
|
},
|
206
|
+
{
|
207
|
+
"module": ".py.srcheaders",
|
208
|
+
"attr": "_CLI_MODULE",
|
209
|
+
"file": "omdev/py/srcheaders.py",
|
210
|
+
"line": 65,
|
211
|
+
"value": {
|
212
|
+
"$.cli.types.CliModule": {
|
213
|
+
"cmd_name": "py/srcheaders",
|
214
|
+
"mod_name": "omdev.py.srcheaders"
|
215
|
+
}
|
216
|
+
}
|
217
|
+
},
|
206
218
|
{
|
207
219
|
"module": ".py.tools.importscan",
|
208
220
|
"attr": "_CLI_MODULE",
|
@@ -44,7 +44,8 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
|
|
44
44
|
self._tok_lines = tok_lines
|
45
45
|
|
46
46
|
self._attr_docs: dict[str, AttrDoc] = {}
|
47
|
-
self.
|
47
|
+
self._class_stack: list[str] = []
|
48
|
+
self._attr_target: str | None = None
|
48
49
|
self._prev_node_type: type[ast.AST] | None = None
|
49
50
|
|
50
51
|
@property
|
@@ -63,6 +64,13 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
|
|
63
64
|
|
64
65
|
#
|
65
66
|
|
67
|
+
def visit_ClassDef(self, node: ast.ClassDef) -> ta.Any:
|
68
|
+
self._class_stack.append(node.name)
|
69
|
+
self.generic_visit(node)
|
70
|
+
check.equal(self._class_stack.pop(), node.name)
|
71
|
+
|
72
|
+
#
|
73
|
+
|
66
74
|
@staticmethod
|
67
75
|
def _comment_tok_src(tok: tks.Token) -> str:
|
68
76
|
check.state(tok.name == 'COMMENT')
|
@@ -70,8 +78,8 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
|
|
70
78
|
check.state(tc[0] == '#')
|
71
79
|
return tc[1:].lstrip()
|
72
80
|
|
73
|
-
def
|
74
|
-
self.
|
81
|
+
def _set_attr_target(self, node: ast.Name) -> None:
|
82
|
+
self._attr_target = '.'.join([*self._class_stack, node.id])
|
75
83
|
|
76
84
|
ad = _EMPTY_ATTR_DOC
|
77
85
|
|
@@ -97,15 +105,15 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
|
|
97
105
|
ad = dc.replace(ad, preceding_comment='\n'.join(reversed(pll)))
|
98
106
|
|
99
107
|
if ad is not _EMPTY_ATTR_DOC:
|
100
|
-
self._attr_docs[
|
108
|
+
self._attr_docs[self._attr_target] = ad
|
101
109
|
|
102
110
|
def visit_AnnAssign(self, node: ast.AnnAssign) -> ta.Any:
|
103
111
|
if isinstance(target := node.target, ast.Name):
|
104
|
-
self.
|
112
|
+
self._set_attr_target(target)
|
105
113
|
|
106
114
|
def visit_Assign(self, node: ast.Assign) -> ta.Any:
|
107
115
|
if len(node.targets) == 1 and isinstance(target := node.targets[0], ast.Name):
|
108
|
-
self.
|
116
|
+
self._set_attr_target(target) # noqa
|
109
117
|
|
110
118
|
#
|
111
119
|
|
@@ -115,12 +123,13 @@ class _AttrDocAstVisitor(ast.NodeVisitor):
|
|
115
123
|
isinstance(node.value.value, str) and
|
116
124
|
self._prev_node_type in (ast.Assign, ast.AnnAssign)
|
117
125
|
):
|
118
|
-
|
119
|
-
|
120
|
-
ex = self._attr_docs.get(self.
|
126
|
+
if self._attr_target:
|
127
|
+
docstring = inspect.cleandoc(node.value.value)
|
128
|
+
ex = self._attr_docs.get(self._attr_target, _EMPTY_ATTR_DOC)
|
121
129
|
check.none(ex.docstring)
|
122
|
-
self._attr_docs[self.
|
123
|
-
|
130
|
+
self._attr_docs[self._attr_target] = dc.replace(ex, docstring=docstring)
|
131
|
+
|
132
|
+
self._attr_target = None
|
124
133
|
|
125
134
|
|
126
135
|
def extract_attr_docs(src: str) -> ta.Mapping[str, AttrDoc]:
|
@@ -163,15 +172,25 @@ if __name__ == '__main__':
|
|
163
172
|
with open(args.file) as f:
|
164
173
|
src = f.read()
|
165
174
|
|
175
|
+
#
|
176
|
+
|
166
177
|
attr_docs = extract_attr_docs(src)
|
167
178
|
|
168
179
|
#
|
169
180
|
|
181
|
+
nested_attr_docs: dict = {}
|
182
|
+
for k, v in attr_docs.items():
|
183
|
+
cur = nested_attr_docs
|
184
|
+
*kps, ekp = [f'.{kp}' for kp in k.split('.')]
|
185
|
+
for kp in kps:
|
186
|
+
cur = cur.setdefault(kp, {})
|
187
|
+
check.not_in(ekp, cur)
|
188
|
+
cur[ekp] = {k: v for k, v in dc.asdict(v).items() if v}
|
189
|
+
|
190
|
+
#
|
191
|
+
|
170
192
|
import json
|
171
193
|
|
172
|
-
print(json.dumps(
|
173
|
-
a: {k: v for k, v in dc.asdict(ad).items() if v}
|
174
|
-
for a, ad in sorted(attr_docs.items(), key=lambda t: t[0])
|
175
|
-
}))
|
194
|
+
print(json.dumps(nested_attr_docs, indent=2))
|
176
195
|
|
177
196
|
_main()
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# @omlish-script
|
3
|
+
import inspect
|
4
|
+
import json
|
5
|
+
import subprocess
|
6
|
+
import sys
|
7
|
+
|
8
|
+
|
9
|
+
##
|
10
|
+
|
11
|
+
|
12
|
+
def _run(
|
13
|
+
src: str,
|
14
|
+
*,
|
15
|
+
pre: str | None = None,
|
16
|
+
) -> dict:
|
17
|
+
import resource # noqa
|
18
|
+
import sys # noqa
|
19
|
+
import time # noqa
|
20
|
+
|
21
|
+
def get_rss() -> int:
|
22
|
+
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
|
23
|
+
|
24
|
+
if pre:
|
25
|
+
exec(pre)
|
26
|
+
|
27
|
+
start_modules = set(sys.modules)
|
28
|
+
start_rss = get_rss()
|
29
|
+
start_time = time.time()
|
30
|
+
|
31
|
+
exec(src)
|
32
|
+
|
33
|
+
end_time = time.time()
|
34
|
+
end_rss = get_rss()
|
35
|
+
end_modules = set(sys.modules)
|
36
|
+
|
37
|
+
return {
|
38
|
+
'time_ms': (time_ms := round((end_time - start_time) * 1000., 6)),
|
39
|
+
'time_ms_s': f'{time_ms:_}',
|
40
|
+
'rss': (rss := (end_rss - start_rss)),
|
41
|
+
'rss_s': f'{rss:_}',
|
42
|
+
'modules': sorted(end_modules - start_modules),
|
43
|
+
}
|
44
|
+
|
45
|
+
|
46
|
+
#
|
47
|
+
|
48
|
+
|
49
|
+
# @omlish-manifest
|
50
|
+
_CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
51
|
+
'cmd_name': 'py/execstat',
|
52
|
+
'mod_name': __name__,
|
53
|
+
}}
|
54
|
+
|
55
|
+
|
56
|
+
def _main() -> None:
|
57
|
+
if len(sys.argv) == 2:
|
58
|
+
pre = None
|
59
|
+
[src] = sys.argv[1:]
|
60
|
+
elif len(sys.argv) == 3:
|
61
|
+
[pre, src] = sys.argv[1:]
|
62
|
+
else:
|
63
|
+
raise Exception('Invalid arguments')
|
64
|
+
|
65
|
+
payload = '\n'.join([
|
66
|
+
inspect.getsource(_run),
|
67
|
+
f'dct = _run({src!r}, pre={pre!r})',
|
68
|
+
'import json',
|
69
|
+
'print(json.dumps(dct))',
|
70
|
+
])
|
71
|
+
|
72
|
+
out_json = subprocess.check_output([sys.executable, '-c', payload])
|
73
|
+
|
74
|
+
dct = json.loads(out_json)
|
75
|
+
|
76
|
+
print(json.dumps(dct, indent=2))
|
77
|
+
|
78
|
+
|
79
|
+
if __name__ == '__main__':
|
80
|
+
_main()
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import ast
|
2
|
+
import dataclasses as dc
|
3
|
+
import typing as ta
|
4
|
+
|
5
|
+
from omlish.lite.check import check
|
6
|
+
|
7
|
+
from ..tokens import all as tks
|
8
|
+
|
9
|
+
|
10
|
+
##
|
11
|
+
|
12
|
+
|
13
|
+
@dc.dataclass(frozen=True)
|
14
|
+
class PyHeaderLine:
|
15
|
+
kind: ta.Literal['comment', 'string']
|
16
|
+
src: str
|
17
|
+
content: str
|
18
|
+
line: int
|
19
|
+
col: int
|
20
|
+
|
21
|
+
|
22
|
+
def get_py_header_lines(src: str) -> list[PyHeaderLine]:
|
23
|
+
ret: list[PyHeaderLine] = []
|
24
|
+
|
25
|
+
src_toks = tks.iter_src_to_tokens(src)
|
26
|
+
hdr_toks = (
|
27
|
+
tok
|
28
|
+
for tok in src_toks
|
29
|
+
if tok.name == 'COMMENT' or
|
30
|
+
(tok.name not in tks.WS_NAMES and tok.name != 'NL')
|
31
|
+
)
|
32
|
+
|
33
|
+
for tok in hdr_toks:
|
34
|
+
if tok.name == 'COMMENT':
|
35
|
+
cs = tok.src.lstrip()
|
36
|
+
check.state(cs.startswith('#'))
|
37
|
+
cs = cs[1:].lstrip()
|
38
|
+
ret.append(PyHeaderLine(
|
39
|
+
kind='comment',
|
40
|
+
src=tok.src,
|
41
|
+
content=cs,
|
42
|
+
line=check.isinstance(tok.line, int),
|
43
|
+
col=check.isinstance(tok.utf8_byte_offset, int),
|
44
|
+
))
|
45
|
+
|
46
|
+
elif tok.name == 'STRING':
|
47
|
+
ss = ast.literal_eval(tok.src)
|
48
|
+
ret.append(PyHeaderLine(
|
49
|
+
kind='string',
|
50
|
+
src=tok.src,
|
51
|
+
content=ss,
|
52
|
+
line=check.isinstance(tok.line, int),
|
53
|
+
col=check.isinstance(tok.utf8_byte_offset, int),
|
54
|
+
))
|
55
|
+
|
56
|
+
else:
|
57
|
+
break
|
58
|
+
|
59
|
+
return ret
|
60
|
+
|
61
|
+
|
62
|
+
##
|
63
|
+
|
64
|
+
|
65
|
+
# @omlish-manifest
|
66
|
+
_CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
67
|
+
'cmd_name': 'py/srcheaders',
|
68
|
+
'mod_name': __name__,
|
69
|
+
}}
|
70
|
+
|
71
|
+
|
72
|
+
if __name__ == '__main__':
|
73
|
+
def _main() -> None:
|
74
|
+
import argparse
|
75
|
+
|
76
|
+
parser = argparse.ArgumentParser()
|
77
|
+
parser.add_argument('file')
|
78
|
+
args = parser.parse_args()
|
79
|
+
|
80
|
+
#
|
81
|
+
|
82
|
+
with open(args.file) as f:
|
83
|
+
src = f.read()
|
84
|
+
|
85
|
+
#
|
86
|
+
|
87
|
+
hls = get_py_header_lines(src)
|
88
|
+
|
89
|
+
#
|
90
|
+
|
91
|
+
import json
|
92
|
+
|
93
|
+
print(json.dumps(
|
94
|
+
[dc.asdict(hl) for hl in hls],
|
95
|
+
indent=2,
|
96
|
+
))
|
97
|
+
|
98
|
+
_main()
|
@@ -1096,6 +1096,9 @@ log = logging.getLogger(__name__)
|
|
1096
1096
|
# ../../../omlish/lite/maybes.py
|
1097
1097
|
|
1098
1098
|
|
1099
|
+
##
|
1100
|
+
|
1101
|
+
|
1099
1102
|
class Maybe(ta.Generic[T]):
|
1100
1103
|
@property
|
1101
1104
|
@abc.abstractmethod
|
@@ -1136,6 +1139,19 @@ class _Maybe(Maybe[T], tuple):
|
|
1136
1139
|
Maybe._empty = tuple.__new__(_Maybe, ()) # noqa
|
1137
1140
|
|
1138
1141
|
|
1142
|
+
##
|
1143
|
+
|
1144
|
+
|
1145
|
+
@functools.singledispatch
|
1146
|
+
def as_maybe(obj: ta.Any) -> Maybe:
|
1147
|
+
raise TypeError(obj)
|
1148
|
+
|
1149
|
+
|
1150
|
+
@as_maybe.register
|
1151
|
+
def _(obj: Maybe) -> Maybe:
|
1152
|
+
return obj
|
1153
|
+
|
1154
|
+
|
1139
1155
|
########################################
|
1140
1156
|
# ../../../omlish/lite/reflect.py
|
1141
1157
|
|
@@ -1069,6 +1069,9 @@ json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON
|
|
1069
1069
|
# ../../../omlish/lite/maybes.py
|
1070
1070
|
|
1071
1071
|
|
1072
|
+
##
|
1073
|
+
|
1074
|
+
|
1072
1075
|
class Maybe(ta.Generic[T]):
|
1073
1076
|
@property
|
1074
1077
|
@abc.abstractmethod
|
@@ -1109,6 +1112,19 @@ class _Maybe(Maybe[T], tuple):
|
|
1109
1112
|
Maybe._empty = tuple.__new__(_Maybe, ()) # noqa
|
1110
1113
|
|
1111
1114
|
|
1115
|
+
##
|
1116
|
+
|
1117
|
+
|
1118
|
+
@functools.singledispatch
|
1119
|
+
def as_maybe(obj: ta.Any) -> Maybe:
|
1120
|
+
raise TypeError(obj)
|
1121
|
+
|
1122
|
+
|
1123
|
+
@as_maybe.register
|
1124
|
+
def _(obj: Maybe) -> Maybe:
|
1125
|
+
return obj
|
1126
|
+
|
1127
|
+
|
1112
1128
|
########################################
|
1113
1129
|
# ../../../omlish/lite/reflect.py
|
1114
1130
|
|
@@ -2376,6 +2376,9 @@ log = logging.getLogger(__name__)
|
|
2376
2376
|
# ../../../omlish/lite/maybes.py
|
2377
2377
|
|
2378
2378
|
|
2379
|
+
##
|
2380
|
+
|
2381
|
+
|
2379
2382
|
class Maybe(ta.Generic[T]):
|
2380
2383
|
@property
|
2381
2384
|
@abc.abstractmethod
|
@@ -2416,6 +2419,19 @@ class _Maybe(Maybe[T], tuple):
|
|
2416
2419
|
Maybe._empty = tuple.__new__(_Maybe, ()) # noqa
|
2417
2420
|
|
2418
2421
|
|
2422
|
+
##
|
2423
|
+
|
2424
|
+
|
2425
|
+
@functools.singledispatch
|
2426
|
+
def as_maybe(obj: ta.Any) -> Maybe:
|
2427
|
+
raise TypeError(obj)
|
2428
|
+
|
2429
|
+
|
2430
|
+
@as_maybe.register
|
2431
|
+
def _(obj: Maybe) -> Maybe:
|
2432
|
+
return obj
|
2433
|
+
|
2434
|
+
|
2419
2435
|
########################################
|
2420
2436
|
# ../../../omlish/lite/reflect.py
|
2421
2437
|
|
@@ -30,6 +30,7 @@ UNIMPORTANT_WS = TokenNames.UNIMPORTANT_WS # noqa
|
|
30
30
|
NON_CODING_TOKENS = TokenNames.NON_CODING_TOKENS # noqa
|
31
31
|
|
32
32
|
curly_escape = Tokenization.curly_escape # noqa
|
33
|
+
iter_src_to_tokens = Tokenization.iter_src_to_tokens # noqa
|
33
34
|
src_to_tokens = Tokenization.src_to_tokens # noqa
|
34
35
|
parse_string_literal = Tokenization.parse_string_literal # noqa
|
35
36
|
tokens_to_src = Tokenization.tokens_to_src # noqa
|
@@ -82,13 +82,12 @@ class Tokenization:
|
|
82
82
|
return (s, '', '')
|
83
83
|
|
84
84
|
@classmethod
|
85
|
-
def
|
85
|
+
def iter_src_to_tokens(cls, src: str) -> ta.Iterator[Token]:
|
86
86
|
tokenize_target = io.StringIO(src)
|
87
87
|
lines = ('', *tokenize_target)
|
88
88
|
|
89
89
|
tokenize_target.seek(0)
|
90
90
|
|
91
|
-
tokens = []
|
92
91
|
last_line = 1
|
93
92
|
last_col = 0
|
94
93
|
end_offset = 0
|
@@ -106,20 +105,20 @@ class Tokenization:
|
|
106
105
|
while cls._ESCAPED_NL_RE.search(newtok):
|
107
106
|
ws, nl, newtok = cls._re_partition(cls._ESCAPED_NL_RE, newtok)
|
108
107
|
if ws:
|
109
|
-
|
108
|
+
yield Token(TokenNames.UNIMPORTANT_WS, ws, last_line, end_offset)
|
110
109
|
end_offset += len(ws.encode())
|
111
|
-
|
110
|
+
yield Token(TokenNames.ESCAPED_NL, nl, last_line, end_offset)
|
112
111
|
end_offset = 0
|
113
112
|
last_line += 1
|
114
113
|
if newtok:
|
115
|
-
|
114
|
+
yield Token(TokenNames.UNIMPORTANT_WS, newtok, sline, 0)
|
116
115
|
end_offset = len(newtok.encode())
|
117
116
|
else:
|
118
117
|
end_offset = 0
|
119
118
|
|
120
119
|
elif scol > last_col:
|
121
120
|
newtok = line[last_col:scol]
|
122
|
-
|
121
|
+
yield Token(TokenNames.UNIMPORTANT_WS, newtok, sline, end_offset)
|
123
122
|
end_offset += len(newtok.encode())
|
124
123
|
|
125
124
|
tok_name = tokenize.tok_name[tok_type]
|
@@ -130,14 +129,16 @@ class Tokenization:
|
|
130
129
|
ecol += len(new_tok_text) - len(tok_text)
|
131
130
|
tok_text = new_tok_text
|
132
131
|
|
133
|
-
|
132
|
+
yield Token(tok_name, tok_text, sline, end_offset)
|
134
133
|
last_line, last_col = eline, ecol
|
135
134
|
if sline != eline:
|
136
135
|
end_offset = len(lines[last_line][:last_col].encode())
|
137
136
|
else:
|
138
137
|
end_offset += len(tok_text.encode())
|
139
138
|
|
140
|
-
|
139
|
+
@classmethod
|
140
|
+
def src_to_tokens(cls, src: str) -> ta.List[Token]:
|
141
|
+
return list(cls.iter_src_to_tokens(src))
|
141
142
|
|
142
143
|
@classmethod
|
143
144
|
def parse_string_literal(cls, src: str) -> ta.Tuple[str, str]:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev287
|
4
4
|
Summary: omdev
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.12
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev287
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -208,9 +208,10 @@ omdev/py/attrdocs.py
|
|
208
208
|
omdev/py/bracepy.py
|
209
209
|
omdev/py/classdot.py
|
210
210
|
omdev/py/findimports.py
|
211
|
+
omdev/py/srcheaders.py
|
211
212
|
omdev/py/scripts/__init__.py
|
212
213
|
omdev/py/scripts/bumpversion.py
|
213
|
-
omdev/py/scripts/
|
214
|
+
omdev/py/scripts/execstat.py
|
214
215
|
omdev/py/scripts/exectime.py
|
215
216
|
omdev/py/scripts/importtrace.py
|
216
217
|
omdev/py/tools/__init__.py
|
@@ -12,7 +12,7 @@ authors = [
|
|
12
12
|
urls = {source = 'https://github.com/wrmsr/omlish'}
|
13
13
|
license = {text = 'BSD-3-Clause'}
|
14
14
|
requires-python = '>=3.12'
|
15
|
-
version = '0.0.0.
|
15
|
+
version = '0.0.0.dev287'
|
16
16
|
classifiers = [
|
17
17
|
'License :: OSI Approved :: BSD License',
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
@@ -22,7 +22,7 @@ classifiers = [
|
|
22
22
|
]
|
23
23
|
description = 'omdev'
|
24
24
|
dependencies = [
|
25
|
-
'omlish == 0.0.0.
|
25
|
+
'omlish == 0.0.0.dev287',
|
26
26
|
]
|
27
27
|
|
28
28
|
[project.optional-dependencies]
|
@@ -1,37 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
# @omlish-script
|
3
|
-
import resource
|
4
|
-
import sys
|
5
|
-
|
6
|
-
|
7
|
-
def _get_rss() -> int:
|
8
|
-
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
|
9
|
-
|
10
|
-
|
11
|
-
# @omlish-manifest
|
12
|
-
_CLI_MODULE = {'$omdev.cli.types.CliModule': {
|
13
|
-
'cmd_name': 'py/execrss',
|
14
|
-
'mod_name': __name__,
|
15
|
-
}}
|
16
|
-
|
17
|
-
|
18
|
-
def _main() -> None:
|
19
|
-
if len(sys.argv) == 2:
|
20
|
-
pre = None
|
21
|
-
[src] = sys.argv[1:]
|
22
|
-
elif len(sys.argv) == 3:
|
23
|
-
[pre, src] = sys.argv[1:]
|
24
|
-
else:
|
25
|
-
raise Exception('Invalid arguments')
|
26
|
-
|
27
|
-
if pre:
|
28
|
-
exec(pre)
|
29
|
-
|
30
|
-
start = _get_rss()
|
31
|
-
exec(src)
|
32
|
-
end = _get_rss()
|
33
|
-
print(end - start)
|
34
|
-
|
35
|
-
|
36
|
-
if __name__ == '__main__':
|
37
|
-
_main()
|
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
|