omdev 0.0.0.dev372__tar.gz → 0.0.0.dev373__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.dev372/omdev.egg-info → omdev-0.0.0.dev373}/PKG-INFO +2 -2
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/.manifests.json +15 -15
- omdev-0.0.0.dev373/omdev/intellij/__init__.py +11 -0
- omdev-0.0.0.dev373/omdev/intellij/cli.py +86 -0
- omdev-0.0.0.dev373/omdev/intellij/ides.py +85 -0
- omdev-0.0.0.dev373/omdev/intellij/open.py +113 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/scripts/ci.py +63 -3
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/scripts/pyproject.py +63 -3
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev.egg-info/SOURCES.txt +4 -1
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/pyproject.toml +2 -2
- omdev-0.0.0.dev372/omdev/tools/intellij.py +0 -253
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/LICENSE +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/README.md +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/confirm.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/LICENSE +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/border.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/markdown.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/parser.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/styles.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/tags.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/ptk/markdown/utils.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/scripts/interp.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/antlr/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/antlr/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/antlr/consts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/antlr/gen.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/git/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/jsonview/resources/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev372 → omdev-0.0.0.dev373}/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.dev373
|
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.13
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev373
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -71,6 +71,21 @@
|
|
71
71
|
}
|
72
72
|
}
|
73
73
|
},
|
74
|
+
{
|
75
|
+
"module": ".intellij.cli",
|
76
|
+
"attr": "_CLI_MODULE",
|
77
|
+
"file": "omdev/intellij/cli.py",
|
78
|
+
"line": 81,
|
79
|
+
"value": {
|
80
|
+
"$.cli.types.CliModule": {
|
81
|
+
"cmd_name": [
|
82
|
+
"intellij",
|
83
|
+
"ij"
|
84
|
+
],
|
85
|
+
"mod_name": "omdev.intellij.cli"
|
86
|
+
}
|
87
|
+
}
|
88
|
+
},
|
74
89
|
{
|
75
90
|
"module": ".interp.__main__",
|
76
91
|
"attr": "_CLI_MODULE",
|
@@ -378,21 +393,6 @@
|
|
378
393
|
}
|
379
394
|
}
|
380
395
|
},
|
381
|
-
{
|
382
|
-
"module": ".tools.intellij",
|
383
|
-
"attr": "_CLI_MODULE",
|
384
|
-
"file": "omdev/tools/intellij.py",
|
385
|
-
"line": 248,
|
386
|
-
"value": {
|
387
|
-
"$.cli.types.CliModule": {
|
388
|
-
"cmd_name": [
|
389
|
-
"intellij",
|
390
|
-
"ij"
|
391
|
-
],
|
392
|
-
"mod_name": "omdev.tools.intellij"
|
393
|
-
}
|
394
|
-
}
|
395
|
-
},
|
396
396
|
{
|
397
397
|
"module": ".tools.json.__main__",
|
398
398
|
"attr": "_CLI_MODULE",
|
@@ -0,0 +1,86 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- PyCharm.app/Contents/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_constants.py -> USE_LOW_IMPACT_MONITORING
|
4
|
+
- DISPLAY=":1" - ls /tmp/.X11-unix/X1 ?
|
5
|
+
- https://unix.stackexchange.com/questions/17255/is-there-a-command-to-list-all-open-displays-on-a-machine
|
6
|
+
- w -oush
|
7
|
+
"""
|
8
|
+
import inspect
|
9
|
+
import os.path
|
10
|
+
import subprocess
|
11
|
+
import tempfile
|
12
|
+
|
13
|
+
from omlish.argparse import all as ap
|
14
|
+
|
15
|
+
from ..cli import CliModule
|
16
|
+
from .ides import Ide
|
17
|
+
from .ides import get_ide_version
|
18
|
+
from .ides import infer_directory_ide
|
19
|
+
from .open import open_ide
|
20
|
+
|
21
|
+
|
22
|
+
##
|
23
|
+
|
24
|
+
|
25
|
+
class IntellijCli(ap.Cli):
|
26
|
+
@ap.cmd(
|
27
|
+
ap.arg('python-exe'),
|
28
|
+
ap.arg('args', nargs=ap.REMAINDER),
|
29
|
+
)
|
30
|
+
def pycharm_runhack(self) -> int:
|
31
|
+
if not os.path.isfile(exe := self.args.python_exe):
|
32
|
+
raise FileNotFoundError(exe)
|
33
|
+
|
34
|
+
from omlish.diag._pycharm import runhack # noqa
|
35
|
+
src = inspect.getsource(runhack)
|
36
|
+
|
37
|
+
src_file = tempfile.mktemp(__package__ + '-runhack') # noqa
|
38
|
+
with open(src_file, 'w') as f:
|
39
|
+
f.write(src)
|
40
|
+
|
41
|
+
proc = subprocess.run([exe, src_file, *self.args.args], check=False)
|
42
|
+
return proc.returncode
|
43
|
+
|
44
|
+
#
|
45
|
+
|
46
|
+
def _get_ide(
|
47
|
+
self,
|
48
|
+
*,
|
49
|
+
cwd: str | None = None,
|
50
|
+
) -> Ide: # noqa
|
51
|
+
if (ai := self.args.ide) is not None:
|
52
|
+
return Ide[ai.upper()] # noqa
|
53
|
+
|
54
|
+
if (ii := infer_directory_ide(cwd)) is not None:
|
55
|
+
return ii
|
56
|
+
|
57
|
+
return Ide.PYCHARM
|
58
|
+
|
59
|
+
@ap.cmd(
|
60
|
+
ap.arg('-e', '--ide'),
|
61
|
+
)
|
62
|
+
def version(self) -> None:
|
63
|
+
i = self._get_ide()
|
64
|
+
v = get_ide_version(i)
|
65
|
+
print(v)
|
66
|
+
|
67
|
+
@ap.cmd(
|
68
|
+
ap.arg('dir', nargs='?'),
|
69
|
+
ap.arg('-e', '--ide'),
|
70
|
+
)
|
71
|
+
def open(self) -> None:
|
72
|
+
dir = os.path.abspath(self.args.dir or '.') # noqa
|
73
|
+
ide = self._get_ide(cwd=dir)
|
74
|
+
open_ide(dir, ide=ide)
|
75
|
+
|
76
|
+
|
77
|
+
def _main() -> None:
|
78
|
+
IntellijCli()(exit=True)
|
79
|
+
|
80
|
+
|
81
|
+
# @omlish-manifest
|
82
|
+
_CLI_MODULE = CliModule(['intellij', 'ij'], __name__)
|
83
|
+
|
84
|
+
|
85
|
+
if __name__ == '__main__':
|
86
|
+
_main()
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- read .idea/ for inference?
|
4
|
+
"""
|
5
|
+
import enum
|
6
|
+
import os.path
|
7
|
+
import typing as ta
|
8
|
+
|
9
|
+
from omlish.diag.pycharm import get_pycharm_version
|
10
|
+
|
11
|
+
|
12
|
+
##
|
13
|
+
|
14
|
+
|
15
|
+
class Ide(enum.Enum):
|
16
|
+
PYCHARM = enum.auto()
|
17
|
+
IDEA = enum.auto()
|
18
|
+
CLION = enum.auto()
|
19
|
+
WEBSTORM = enum.auto()
|
20
|
+
GOLAND = enum.auto()
|
21
|
+
|
22
|
+
|
23
|
+
##
|
24
|
+
|
25
|
+
|
26
|
+
_INFER_FILE_NAME_SETS_BY_IDE: ta.Mapping[Ide, ta.AbstractSet[str]] = {
|
27
|
+
Ide.PYCHARM: frozenset([
|
28
|
+
'setup.py',
|
29
|
+
'setup.cfg',
|
30
|
+
'pyproject.toml',
|
31
|
+
'requirements.txt',
|
32
|
+
'Pipfile',
|
33
|
+
'poetry.lock',
|
34
|
+
'.python-version',
|
35
|
+
'wsgi.py',
|
36
|
+
'asgi.py',
|
37
|
+
'manage.py',
|
38
|
+
]),
|
39
|
+
Ide.IDEA: frozenset([
|
40
|
+
'pom.xml',
|
41
|
+
'mvnw',
|
42
|
+
'build.gradle',
|
43
|
+
'build.gradle.kts',
|
44
|
+
'gradlew',
|
45
|
+
'module-info.java',
|
46
|
+
'.java-version',
|
47
|
+
]),
|
48
|
+
Ide.CLION: frozenset([
|
49
|
+
'CMakeLists.txt',
|
50
|
+
'configure.ac',
|
51
|
+
'configure.in',
|
52
|
+
'config.h.in',
|
53
|
+
'vcpkg.json',
|
54
|
+
]),
|
55
|
+
Ide.WEBSTORM: frozenset([
|
56
|
+
'package.json',
|
57
|
+
'package-lock.json',
|
58
|
+
]),
|
59
|
+
Ide.GOLAND: frozenset([
|
60
|
+
'go.mod',
|
61
|
+
'go.sum',
|
62
|
+
]),
|
63
|
+
}
|
64
|
+
|
65
|
+
|
66
|
+
def infer_directory_ide(cwd: str | None) -> Ide | None:
|
67
|
+
if cwd is None:
|
68
|
+
cwd = os.getcwd()
|
69
|
+
|
70
|
+
for i, fs in _INFER_FILE_NAME_SETS_BY_IDE.items():
|
71
|
+
for f in fs:
|
72
|
+
if os.path.exists(os.path.join(cwd, f)):
|
73
|
+
return i
|
74
|
+
|
75
|
+
return None
|
76
|
+
|
77
|
+
|
78
|
+
##
|
79
|
+
|
80
|
+
|
81
|
+
def get_ide_version(ide: Ide) -> str:
|
82
|
+
if ide is Ide.PYCHARM:
|
83
|
+
return get_pycharm_version()
|
84
|
+
else:
|
85
|
+
raise ValueError(ide)
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import dataclasses as dc
|
2
|
+
import os.path
|
3
|
+
import shlex
|
4
|
+
import subprocess
|
5
|
+
import sys
|
6
|
+
import tempfile
|
7
|
+
import typing as ta
|
8
|
+
|
9
|
+
from .ides import Ide
|
10
|
+
from .ides import infer_directory_ide
|
11
|
+
|
12
|
+
|
13
|
+
##
|
14
|
+
|
15
|
+
|
16
|
+
_DARWIN_OPEN_SCRIPT_APP_BY_IDE: ta.Mapping[Ide, str] = {
|
17
|
+
Ide.PYCHARM: 'PyCharm',
|
18
|
+
Ide.CLION: 'CLion',
|
19
|
+
Ide.IDEA: 'IntelliJ IDEA',
|
20
|
+
Ide.WEBSTORM: 'WebStorm',
|
21
|
+
Ide.GOLAND: 'GoLand',
|
22
|
+
}
|
23
|
+
|
24
|
+
_DARWIN_OPEN_SCRIPT = """
|
25
|
+
tell application "{app}"
|
26
|
+
activate
|
27
|
+
open "{dir}"
|
28
|
+
end tell
|
29
|
+
return
|
30
|
+
"""
|
31
|
+
|
32
|
+
|
33
|
+
#
|
34
|
+
|
35
|
+
|
36
|
+
_LINUX_WM_CLASS_BY_IDE: ta.Mapping[Ide, str] = {
|
37
|
+
Ide.PYCHARM: 'jetbrains-pycharm.jetbrains-pycharm',
|
38
|
+
Ide.CLION: 'jetbrains-clion.jetbrains-clion',
|
39
|
+
Ide.IDEA: 'jetbrains-idea.jetbrains-idea',
|
40
|
+
Ide.WEBSTORM: 'jetbrains-webstorm.jetbrains-webstorm',
|
41
|
+
Ide.GOLAND: 'jetbrains-goland.jetbrains-goland',
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
# sudo apt install xdotool wmctrl
|
46
|
+
# TODO: nohup pycharm.sh "$PROJECT_PATH" > /dev/null 2>&1 & ?
|
47
|
+
_LINUX_OPEN_SCRIPT = """
|
48
|
+
xdotool key --delay 1000 alt+f alt+o
|
49
|
+
xdotool type --delay 1000 {dir}
|
50
|
+
xdotool key Return
|
51
|
+
"""
|
52
|
+
|
53
|
+
|
54
|
+
@dc.dataclass(frozen=True)
|
55
|
+
class _WmctrlLine:
|
56
|
+
window_id: str
|
57
|
+
desktop_id: str
|
58
|
+
pid: str
|
59
|
+
wm_class: str
|
60
|
+
user: str
|
61
|
+
title: str
|
62
|
+
|
63
|
+
|
64
|
+
# TODO: https://stackoverflow.com/a/79016360
|
65
|
+
def _parse_wmctrl_lxp_line(l: str) -> _WmctrlLine:
|
66
|
+
return _WmctrlLine(*l.strip().split(maxsplit=5))
|
67
|
+
|
68
|
+
|
69
|
+
#
|
70
|
+
|
71
|
+
|
72
|
+
def open_ide(
|
73
|
+
dir: str, # noqa
|
74
|
+
*,
|
75
|
+
ide: Ide | None = None,
|
76
|
+
default_ide: Ide = Ide.PYCHARM,
|
77
|
+
) -> None:
|
78
|
+
if ide is None:
|
79
|
+
if (ide := infer_directory_ide(dir)) is None:
|
80
|
+
ide = default_ide
|
81
|
+
|
82
|
+
if (plat := sys.platform) == 'darwin':
|
83
|
+
if '"' in dir:
|
84
|
+
raise ValueError(dir)
|
85
|
+
|
86
|
+
scpt_src = _DARWIN_OPEN_SCRIPT.format(
|
87
|
+
app=_DARWIN_OPEN_SCRIPT_APP_BY_IDE[ide],
|
88
|
+
dir=dir,
|
89
|
+
)
|
90
|
+
|
91
|
+
scpt_file = tempfile.mktemp(__package__ + '-intellij-open') # noqa
|
92
|
+
with open(scpt_file, 'w') as f:
|
93
|
+
f.write(scpt_src)
|
94
|
+
|
95
|
+
subprocess.check_call(['osascript', scpt_file])
|
96
|
+
|
97
|
+
elif plat == 'linux':
|
98
|
+
env = os.environ
|
99
|
+
env.setdefault('DISPLAY', ':1')
|
100
|
+
|
101
|
+
wmc_out = subprocess.check_output(['wmctrl', '-lxp'], env=env).decode()
|
102
|
+
wls = [_parse_wmctrl_lxp_line(l) for l in wmc_out.splitlines()]
|
103
|
+
tgt_wmc = _LINUX_WM_CLASS_BY_IDE[ide]
|
104
|
+
tgt_wl = next(wl for wl in wls if wl.wm_class == tgt_wmc)
|
105
|
+
subprocess.check_call(['wmctrl', '-ia', tgt_wl.window_id], env=env)
|
106
|
+
|
107
|
+
scpt = _LINUX_OPEN_SCRIPT.format(dir=shlex.quote(os.path.expanduser(dir)))
|
108
|
+
print(scpt)
|
109
|
+
# subprocess.check_call(scpt, shell=True, env=env) # noqa
|
110
|
+
raise NotImplementedError
|
111
|
+
|
112
|
+
else:
|
113
|
+
raise OSError(plat)
|
@@ -4753,7 +4753,6 @@ inj = InjectionApi()
|
|
4753
4753
|
"""
|
4754
4754
|
TODO:
|
4755
4755
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
4756
|
-
- literals
|
4757
4756
|
- Options.sequence_cls = list, mapping_cls = dict, ... - def with_mutable_containers() -> Options
|
4758
4757
|
"""
|
4759
4758
|
|
@@ -4867,6 +4866,28 @@ class OptionalObjMarshaler(ObjMarshaler):
|
|
4867
4866
|
return self.item.unmarshal(o, ctx)
|
4868
4867
|
|
4869
4868
|
|
4869
|
+
@dc.dataclass(frozen=True)
|
4870
|
+
class PrimitiveUnionObjMarshaler(ObjMarshaler):
|
4871
|
+
pt: ta.Tuple[type, ...]
|
4872
|
+
x: ta.Optional[ObjMarshaler] = None
|
4873
|
+
|
4874
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
4875
|
+
if isinstance(o, self.pt):
|
4876
|
+
return o
|
4877
|
+
elif self.x is not None:
|
4878
|
+
return self.x.marshal(o, ctx)
|
4879
|
+
else:
|
4880
|
+
raise TypeError(o)
|
4881
|
+
|
4882
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
4883
|
+
if isinstance(o, self.pt):
|
4884
|
+
return o
|
4885
|
+
elif self.x is not None:
|
4886
|
+
return self.x.unmarshal(o, ctx)
|
4887
|
+
else:
|
4888
|
+
raise TypeError(o)
|
4889
|
+
|
4890
|
+
|
4870
4891
|
@dc.dataclass(frozen=True)
|
4871
4892
|
class LiteralObjMarshaler(ObjMarshaler):
|
4872
4893
|
item: ObjMarshaler
|
@@ -5065,6 +5086,13 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
|
|
5065
5086
|
collections.abc.MutableSequence: list,
|
5066
5087
|
}
|
5067
5088
|
|
5089
|
+
_OBJ_MARSHALER_PRIMITIVE_TYPES: ta.Set[type] = {
|
5090
|
+
int,
|
5091
|
+
float,
|
5092
|
+
bool,
|
5093
|
+
str,
|
5094
|
+
}
|
5095
|
+
|
5068
5096
|
|
5069
5097
|
##
|
5070
5098
|
|
@@ -5213,8 +5241,16 @@ class ObjMarshalerManager:
|
|
5213
5241
|
|
5214
5242
|
if is_literal_type(ty):
|
5215
5243
|
lvs = frozenset(get_literal_type_args(ty))
|
5244
|
+
if None in lvs:
|
5245
|
+
is_opt = True
|
5246
|
+
lvs -= frozenset([None])
|
5247
|
+
else:
|
5248
|
+
is_opt = False
|
5216
5249
|
lty = check.single(set(map(type, lvs)))
|
5217
|
-
|
5250
|
+
lm: ObjMarshaler = LiteralObjMarshaler(rec(lty), lvs)
|
5251
|
+
if is_opt:
|
5252
|
+
lm = OptionalObjMarshaler(lm)
|
5253
|
+
return lm
|
5218
5254
|
|
5219
5255
|
if is_generic_alias(ty):
|
5220
5256
|
try:
|
@@ -5234,7 +5270,31 @@ class ObjMarshalerManager:
|
|
5234
5270
|
return IterableObjMarshaler(st, rec(e))
|
5235
5271
|
|
5236
5272
|
if is_union_alias(ty):
|
5237
|
-
|
5273
|
+
uts = frozenset(ta.get_args(ty))
|
5274
|
+
if None in uts or type(None) in uts:
|
5275
|
+
is_opt = True
|
5276
|
+
uts = frozenset(ut for ut in uts if ut not in (None, type(None)))
|
5277
|
+
else:
|
5278
|
+
is_opt = False
|
5279
|
+
|
5280
|
+
um: ObjMarshaler
|
5281
|
+
if not uts:
|
5282
|
+
raise TypeError(ty)
|
5283
|
+
elif len(uts) == 1:
|
5284
|
+
um = rec(check.single(uts))
|
5285
|
+
else:
|
5286
|
+
pt = tuple({ut for ut in uts if ut in _OBJ_MARSHALER_PRIMITIVE_TYPES})
|
5287
|
+
np_uts = {ut for ut in uts if ut not in _OBJ_MARSHALER_PRIMITIVE_TYPES}
|
5288
|
+
if not np_uts:
|
5289
|
+
um = PrimitiveUnionObjMarshaler(pt)
|
5290
|
+
elif len(np_uts) == 1:
|
5291
|
+
um = PrimitiveUnionObjMarshaler(pt, x=rec(check.single(np_uts)))
|
5292
|
+
else:
|
5293
|
+
raise TypeError(ty)
|
5294
|
+
|
5295
|
+
if is_opt:
|
5296
|
+
um = OptionalObjMarshaler(um)
|
5297
|
+
return um
|
5238
5298
|
|
5239
5299
|
raise TypeError(ty)
|
5240
5300
|
|
@@ -5508,7 +5508,6 @@ inj = InjectionApi()
|
|
5508
5508
|
"""
|
5509
5509
|
TODO:
|
5510
5510
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
5511
|
-
- literals
|
5512
5511
|
- Options.sequence_cls = list, mapping_cls = dict, ... - def with_mutable_containers() -> Options
|
5513
5512
|
"""
|
5514
5513
|
|
@@ -5622,6 +5621,28 @@ class OptionalObjMarshaler(ObjMarshaler):
|
|
5622
5621
|
return self.item.unmarshal(o, ctx)
|
5623
5622
|
|
5624
5623
|
|
5624
|
+
@dc.dataclass(frozen=True)
|
5625
|
+
class PrimitiveUnionObjMarshaler(ObjMarshaler):
|
5626
|
+
pt: ta.Tuple[type, ...]
|
5627
|
+
x: ta.Optional[ObjMarshaler] = None
|
5628
|
+
|
5629
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
5630
|
+
if isinstance(o, self.pt):
|
5631
|
+
return o
|
5632
|
+
elif self.x is not None:
|
5633
|
+
return self.x.marshal(o, ctx)
|
5634
|
+
else:
|
5635
|
+
raise TypeError(o)
|
5636
|
+
|
5637
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
5638
|
+
if isinstance(o, self.pt):
|
5639
|
+
return o
|
5640
|
+
elif self.x is not None:
|
5641
|
+
return self.x.unmarshal(o, ctx)
|
5642
|
+
else:
|
5643
|
+
raise TypeError(o)
|
5644
|
+
|
5645
|
+
|
5625
5646
|
@dc.dataclass(frozen=True)
|
5626
5647
|
class LiteralObjMarshaler(ObjMarshaler):
|
5627
5648
|
item: ObjMarshaler
|
@@ -5820,6 +5841,13 @@ _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
|
|
5820
5841
|
collections.abc.MutableSequence: list,
|
5821
5842
|
}
|
5822
5843
|
|
5844
|
+
_OBJ_MARSHALER_PRIMITIVE_TYPES: ta.Set[type] = {
|
5845
|
+
int,
|
5846
|
+
float,
|
5847
|
+
bool,
|
5848
|
+
str,
|
5849
|
+
}
|
5850
|
+
|
5823
5851
|
|
5824
5852
|
##
|
5825
5853
|
|
@@ -5968,8 +5996,16 @@ class ObjMarshalerManager:
|
|
5968
5996
|
|
5969
5997
|
if is_literal_type(ty):
|
5970
5998
|
lvs = frozenset(get_literal_type_args(ty))
|
5999
|
+
if None in lvs:
|
6000
|
+
is_opt = True
|
6001
|
+
lvs -= frozenset([None])
|
6002
|
+
else:
|
6003
|
+
is_opt = False
|
5971
6004
|
lty = check.single(set(map(type, lvs)))
|
5972
|
-
|
6005
|
+
lm: ObjMarshaler = LiteralObjMarshaler(rec(lty), lvs)
|
6006
|
+
if is_opt:
|
6007
|
+
lm = OptionalObjMarshaler(lm)
|
6008
|
+
return lm
|
5973
6009
|
|
5974
6010
|
if is_generic_alias(ty):
|
5975
6011
|
try:
|
@@ -5989,7 +6025,31 @@ class ObjMarshalerManager:
|
|
5989
6025
|
return IterableObjMarshaler(st, rec(e))
|
5990
6026
|
|
5991
6027
|
if is_union_alias(ty):
|
5992
|
-
|
6028
|
+
uts = frozenset(ta.get_args(ty))
|
6029
|
+
if None in uts or type(None) in uts:
|
6030
|
+
is_opt = True
|
6031
|
+
uts = frozenset(ut for ut in uts if ut not in (None, type(None)))
|
6032
|
+
else:
|
6033
|
+
is_opt = False
|
6034
|
+
|
6035
|
+
um: ObjMarshaler
|
6036
|
+
if not uts:
|
6037
|
+
raise TypeError(ty)
|
6038
|
+
elif len(uts) == 1:
|
6039
|
+
um = rec(check.single(uts))
|
6040
|
+
else:
|
6041
|
+
pt = tuple({ut for ut in uts if ut in _OBJ_MARSHALER_PRIMITIVE_TYPES})
|
6042
|
+
np_uts = {ut for ut in uts if ut not in _OBJ_MARSHALER_PRIMITIVE_TYPES}
|
6043
|
+
if not np_uts:
|
6044
|
+
um = PrimitiveUnionObjMarshaler(pt)
|
6045
|
+
elif len(np_uts) == 1:
|
6046
|
+
um = PrimitiveUnionObjMarshaler(pt, x=rec(check.single(np_uts)))
|
6047
|
+
else:
|
6048
|
+
raise TypeError(ty)
|
6049
|
+
|
6050
|
+
if is_opt:
|
6051
|
+
um = OptionalObjMarshaler(um)
|
6052
|
+
return um
|
5993
6053
|
|
5994
6054
|
raise TypeError(ty)
|
5995
6055
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev373
|
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.13
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev373
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -142,6 +142,10 @@ omdev/home/__init__.py
|
|
142
142
|
omdev/home/paths.py
|
143
143
|
omdev/home/secrets.py
|
144
144
|
omdev/home/shadow.py
|
145
|
+
omdev/intellij/__init__.py
|
146
|
+
omdev/intellij/cli.py
|
147
|
+
omdev/intellij/ides.py
|
148
|
+
omdev/intellij/open.py
|
145
149
|
omdev/interp/__init__.py
|
146
150
|
omdev/interp/__main__.py
|
147
151
|
omdev/interp/cli.py
|
@@ -277,7 +281,6 @@ omdev/tools/cloc.py
|
|
277
281
|
omdev/tools/diff.py
|
278
282
|
omdev/tools/doc.py
|
279
283
|
omdev/tools/docker.py
|
280
|
-
omdev/tools/intellij.py
|
281
284
|
omdev/tools/linehisto.py
|
282
285
|
omdev/tools/mkenv.py
|
283
286
|
omdev/tools/notebook.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.13'
|
15
|
-
version = '0.0.0.
|
15
|
+
version = '0.0.0.dev373'
|
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.dev373',
|
26
26
|
]
|
27
27
|
|
28
28
|
[project.optional-dependencies]
|