python-clu 0.11.1__tar.gz → 0.11.3__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.
- {python_clu-0.11.1 → python_clu-0.11.3}/.bumpversion.toml +1 -1
- {python_clu-0.11.1 → python_clu-0.11.3}/PKG-INFO +1 -1
- {python_clu-0.11.1 → python_clu-0.11.3}/README.md +3 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/__init__.py +2 -2
- python_clu-0.11.3/clu/__version__.py +1 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/abstract.py +22 -22
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/keymapview.py +5 -16
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/filesystem.py +9 -9
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/pypath.py +1 -1
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/importing/base.py +14 -15
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/importing/proxy.py +2 -2
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/repl.py +21 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/treeline.py +1 -1
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/PKG-INFO +1 -1
- {python_clu-0.11.1 → python_clu-0.11.3}/setup.py +2 -2
- python_clu-0.11.1/clu/__version__.py +0 -1
- {python_clu-0.11.1 → python_clu-0.11.3}/.coveragerc +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/.editorconfig +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/.gitchangelog.rc +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/.gitignore +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/.landscape.yml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/.travis.yml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/ABOUT.md +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/CHANGELOG.md +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/CLASSIFIERS.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/CODE_OF_CONDUCT.md +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/COPYING.md +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/LICENSE.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/MANIFEST.in +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/Makefile +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/appveyor.yml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/__main__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/all.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/api/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/api/__main__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/application.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/compilation/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/compilation/compiledb.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/compilation/macros.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/abc.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/base.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/codecs.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/env.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/fieldtypes.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/filebase.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/formats/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/formats/jsonfile.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/formats/picklefile.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/formats/tomlfile.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/formats/yamlfile.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/keymap.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/ns.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/proxy.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/config/settings.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/__main__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/consts.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/data.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/enums.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/exceptions.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/constants/polyfills.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/csv.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/dicts.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/dispatch.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/enums.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/exporting.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/extending.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/abc.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/appdirectories.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/misc.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/fs/sourcetree.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/importing/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/importing/__main__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/keyvalue.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/mathematics.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/naming.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/predicates.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/ansi.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/banners.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/cli/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/cli/boilerplate.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/cli/boilerplate_copy.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/cli/print_version.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/columnize.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repl/modules.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/repr.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/sanitizer.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/.gitignore +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/README.md +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/ansicolors.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/boilerplate.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/dictroast.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/legacy/forkumask.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/legacy/repl-bpython.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/legacy/repl-ipython.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/legacy/repl-ptpython.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/legacy/repl-pyzo.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/legacy/xdg-runtime.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/scripts/prediversus.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/shelving/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/shelving/redat.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/shelving/redis.conf +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/stdio.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/testing/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/testing/hook.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/testing/obsolete.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/testing/pytest.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/testing/utils.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/typespace/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/typespace/__main__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/typespace/namespace.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/typology.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/version/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/version/__main__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/version/git_version.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/clu/version/read_version.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/codecov.yml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/conftest.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/Makefile +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/doctrees/api.doctree +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/doctrees/environment.pickle +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/doctrees/generated/clu.doctree +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/doctrees/index.doctree +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/.buildinfo +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_sources/api.rst.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_sources/index.rst.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/alabaster.css +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/basic.css +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/badge_only.css +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/css/theme.css +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/custom.css +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/doctools.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/documentation_options.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/file.png +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/jquery-3.6.0.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/jquery.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/js/badge_only.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/js/html5shiv.min.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/js/theme.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/language_data.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/minus.png +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/plus.png +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/pygments.css +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/searchtools.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/underscore-1.13.1.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/_static/underscore.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/api.html +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/generated/clu.html +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/genindex.html +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/index.html +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/objects.inv +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/py-modindex.html +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/search.html +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/html/searchindex.js +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/build/man/clu.1 +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/make.bat +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/source/api.rst +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/source/conf.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/source/generated/clu.rst +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/docs/source/index.rst +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/autohook.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/post-push/00-coverage.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/pre-push/00-noop.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/scripts/coverage.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/scripts/display-issues.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/scripts/git-pushex +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/hooks/scripts/noop.sh +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/mypy.ini +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/noxfile.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/pyproject.toml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/pytest.ini +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/SOURCES.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/dependency_links.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/entry_points.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/requires.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/top_level.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/python_clu.egg-info/zip-safe +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/pytype.cfg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/changelog.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/dev.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/docs.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/install.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/nox/codecov.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/nox/docs.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/nox/manifest.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/nox/repl.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/nox/tests.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/tox.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/requirements/typecheck.txt +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/scratch/direnv_transformed_env.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/scratch/nteract.ipynb +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/setup.cfg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/1-58.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/8600JC.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/8ba.png +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/IMG_20180505_205153567.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/cheetah-003.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/config/clu-config.toml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/config/yodogg.toml +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/shutterstock_90194617.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/data/yodogg/video-pride-serval.jpg +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_abstract.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_all.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_boilerplate.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_config.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_config_abc.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_csv.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_dicts.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_dispatch.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_enum_aliases.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_exporting.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_extending.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_fs_abc.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_fs_appdirectories.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_fs_filesystem.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_fs_misc.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_importing.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_keyvalue.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_mathematics.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_naming.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_predicates.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_repl_columnize.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_repl_modules.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_repr.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_scripts_repl.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_typespace_namespace.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_typology.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/test_version.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/yodogg/.tm_properties +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/yodogg/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/yodogg/yodogg/__init__.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/yodogg/yodogg/config.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/yodogg/yodogg/exporting.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tests/yodogg/yodogg/iheard.py +0 -0
- {python_clu-0.11.1 → python_clu-0.11.3}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.3
|
|
4
4
|
Summary: CLU - Common Lightweight Utilities, or Command-Line Utilities (your pick)
|
|
5
5
|
Home-page: https://github.com/fish2000/clu
|
|
6
6
|
Download-URL: https://github.com/fish2000/clu/zipball/master
|
|
@@ -3,6 +3,9 @@ CLU – Common Lightweight Utilities (née Command-Line Utilities)
|
|
|
3
3
|
|
|
4
4
|
[](https://codecov.io/gh/fish2000/CLU)
|
|
5
5
|
|
|
6
|
+
Install it right now! Type: `$ pip install -U python-clu`
|
|
7
|
+
---------------------------------------------------------
|
|
8
|
+
|
|
6
9
|
This is a packaged-up and sanely version-controlled version of [the Python tools I wrote for my REPLs](https://github.com/fish2000/homage/blob/master/.script-bin/replutilities.py), divided up into
|
|
7
10
|
a bunch of subordinate packages:
|
|
8
11
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# CLU -- Common Lightweight Utilities
|
|
5
5
|
#
|
|
6
|
-
# Copyright © 2012-
|
|
6
|
+
# Copyright © 2012-2035 Alexander Böhn
|
|
7
7
|
#
|
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
9
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -47,7 +47,7 @@ __title__ = 'clu'
|
|
|
47
47
|
__author__ = 'Alexander Böhn'
|
|
48
48
|
__maintainer__ = __author__
|
|
49
49
|
__license__ = 'MIT'
|
|
50
|
-
__copyright__ = f'{__title__} © 2012-
|
|
50
|
+
__copyright__ = f'{__title__} © 2012-2035 {__author__}'
|
|
51
51
|
|
|
52
52
|
# The CLU project version:
|
|
53
53
|
version_info = VersionInfo(__version__)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.11.3'
|
|
@@ -25,10 +25,10 @@ class Slotted(abc.ABCMeta):
|
|
|
25
25
|
if '__slots__' not in attributes:
|
|
26
26
|
attributes['__slots__'] = tuple()
|
|
27
27
|
|
|
28
|
-
return super(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
return super().__new__(metacls, name, # type: ignore
|
|
29
|
+
bases,
|
|
30
|
+
attributes,
|
|
31
|
+
**kwargs)
|
|
32
32
|
|
|
33
33
|
class SlotMatch(Slotted):
|
|
34
34
|
|
|
@@ -48,10 +48,10 @@ class SlotMatch(Slotted):
|
|
|
48
48
|
attributes['__match_args__'] = tuple()
|
|
49
49
|
|
|
50
50
|
# Create the new class via “super(…)” – calling “Slotted.__new__(…)”
|
|
51
|
-
cls = super(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
cls = super().__new__(metacls, name, # type: ignore
|
|
52
|
+
bases,
|
|
53
|
+
attributes,
|
|
54
|
+
**kwargs)
|
|
55
55
|
|
|
56
56
|
# Set “__match_args__” using “slots_for(…)” and return
|
|
57
57
|
cls.__match_args__ = slots_for(cls)
|
|
@@ -70,10 +70,10 @@ class NonSlotted(abc.ABCMeta):
|
|
|
70
70
|
if '__slots__' in attributes:
|
|
71
71
|
attributes.pop('__slots__')
|
|
72
72
|
|
|
73
|
-
return super(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
return super().__new__(metacls, name,
|
|
74
|
+
bases,
|
|
75
|
+
attributes,
|
|
76
|
+
**kwargs)
|
|
77
77
|
|
|
78
78
|
class UnhashableMeta(Slotted):
|
|
79
79
|
|
|
@@ -89,10 +89,10 @@ class UnhashableMeta(Slotted):
|
|
|
89
89
|
attributes.pop('__hash__')
|
|
90
90
|
attributes['__hash__'] = None
|
|
91
91
|
|
|
92
|
-
return super(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
return super().__new__(metacls, name,
|
|
93
|
+
bases,
|
|
94
|
+
attributes,
|
|
95
|
+
**kwargs)
|
|
96
96
|
|
|
97
97
|
class Unhashable(abc.ABC, metaclass=UnhashableMeta):
|
|
98
98
|
|
|
@@ -344,7 +344,7 @@ class BasePath(Slotted):
|
|
|
344
344
|
@classmethod
|
|
345
345
|
def __prepare__(metacls, name, bases, basepath="/", **kwargs):
|
|
346
346
|
""" Remove the “basepath” class keyword before calling up """
|
|
347
|
-
return super(
|
|
347
|
+
return super().__prepare__(name, bases, **kwargs)
|
|
348
348
|
|
|
349
349
|
def __new__(metacls, name, bases, attributes, basepath="/", **kwargs):
|
|
350
350
|
""" Override for `Slotted.__new__(…)` setting up a
|
|
@@ -356,10 +356,10 @@ class BasePath(Slotted):
|
|
|
356
356
|
and os.fspath(basepath) \
|
|
357
357
|
or basepath)
|
|
358
358
|
|
|
359
|
-
return super(
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
359
|
+
return super().__new__(metacls, name,
|
|
360
|
+
bases,
|
|
361
|
+
attributes,
|
|
362
|
+
**kwargs)
|
|
363
363
|
|
|
364
364
|
class AppName(abc.ABC):
|
|
365
365
|
|
|
@@ -373,7 +373,7 @@ class AppName(abc.ABC):
|
|
|
373
373
|
from clu.predicates import mro, attr_search
|
|
374
374
|
if 'appspace' in kwargs:
|
|
375
375
|
del kwargs['appspace']
|
|
376
|
-
super(
|
|
376
|
+
super().__init_subclass__(**kwargs)
|
|
377
377
|
cls.appname = ValueDescriptor(appname or attr_search('appname', *mro(cls)))
|
|
378
378
|
|
|
379
379
|
def __init__(self, *args, **kwargs):
|
|
@@ -22,6 +22,7 @@ exporter = Exporter(path=__file__)
|
|
|
22
22
|
export = exporter.decorator()
|
|
23
23
|
|
|
24
24
|
typename = lambda thing: type(thing).__name__
|
|
25
|
+
set_returner = lambda self, iterable: set(iterable)
|
|
25
26
|
|
|
26
27
|
@export
|
|
27
28
|
class KeyMapViewBase(collections.abc.Sequence,
|
|
@@ -88,10 +89,7 @@ class KeyMapKeysView(KeyMapViewBase,
|
|
|
88
89
|
|
|
89
90
|
""" A KeyMap key view. """
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
def _from_iterable(cls, iterable): # pragma: no cover
|
|
93
|
-
# Required by the “collections.abc.Set” API:
|
|
94
|
-
return set(iterable)
|
|
92
|
+
_from_iterable = classmethod(set_returner)
|
|
95
93
|
|
|
96
94
|
def __contains__(self, nskey):
|
|
97
95
|
return nskey in self.mapping.submap(*self.namespaces)
|
|
@@ -108,10 +106,7 @@ class KeyMapItemsView(KeyMapViewBase,
|
|
|
108
106
|
|
|
109
107
|
""" A KeyMap items view. """
|
|
110
108
|
|
|
111
|
-
|
|
112
|
-
def _from_iterable(cls, iterable): # pragma: no cover
|
|
113
|
-
# Required by the “collections.abc.Set” API:
|
|
114
|
-
return set(iterable)
|
|
109
|
+
_from_iterable = classmethod(set_returner)
|
|
115
110
|
|
|
116
111
|
def __contains__(self, item):
|
|
117
112
|
nskey, value = item
|
|
@@ -170,10 +165,7 @@ class NamespaceWalkerKeysView(NamespaceWalkerViewBase,
|
|
|
170
165
|
|
|
171
166
|
""" A keys view specifically tailored to NamespaceWalker types. """
|
|
172
167
|
|
|
173
|
-
|
|
174
|
-
def _from_iterable(cls, iterable): # pragma: no cover
|
|
175
|
-
# Required by the “collections.abc.Set” API:
|
|
176
|
-
return set(iterable)
|
|
168
|
+
_from_iterable = classmethod(set_returner)
|
|
177
169
|
|
|
178
170
|
def __contains__(self, nskey):
|
|
179
171
|
for *namespaces, key, value in self.mapping.walk():
|
|
@@ -194,10 +186,7 @@ class NamespaceWalkerItemsView(NamespaceWalkerViewBase,
|
|
|
194
186
|
|
|
195
187
|
""" An items view specifically tailored to NamespaceWalker types. """
|
|
196
188
|
|
|
197
|
-
|
|
198
|
-
def _from_iterable(cls, iterable): # pragma: no cover
|
|
199
|
-
# Required by the “collections.abc.Set” API:
|
|
200
|
-
return set(iterable)
|
|
189
|
+
_from_iterable = classmethod(set_returner)
|
|
201
190
|
|
|
202
191
|
def __contains__(self, item):
|
|
203
192
|
nskey, putative = item
|
|
@@ -1057,7 +1057,7 @@ class cd(Directory):
|
|
|
1057
1057
|
def __init__(self, pth):
|
|
1058
1058
|
""" Change to a new directory (the target path `pth` must be specified).
|
|
1059
1059
|
"""
|
|
1060
|
-
super(
|
|
1060
|
+
super().__init__(pth)
|
|
1061
1061
|
|
|
1062
1062
|
@export
|
|
1063
1063
|
class wd(Directory):
|
|
@@ -1065,7 +1065,7 @@ class wd(Directory):
|
|
|
1065
1065
|
def __init__(self):
|
|
1066
1066
|
""" Initialize a Directory instance for the current working directory.
|
|
1067
1067
|
"""
|
|
1068
|
-
super(
|
|
1068
|
+
super().__init__(pth=None)
|
|
1069
1069
|
|
|
1070
1070
|
@export
|
|
1071
1071
|
class td(Directory):
|
|
@@ -1074,7 +1074,7 @@ class td(Directory):
|
|
|
1074
1074
|
""" Initialize a Directory instance for the current temporary directory.
|
|
1075
1075
|
"""
|
|
1076
1076
|
from tempfile import gettempdir
|
|
1077
|
-
super(
|
|
1077
|
+
super().__init__(pth=gettempdir())
|
|
1078
1078
|
|
|
1079
1079
|
@export
|
|
1080
1080
|
class hd(Directory):
|
|
@@ -1082,7 +1082,7 @@ class hd(Directory):
|
|
|
1082
1082
|
def __init__(self):
|
|
1083
1083
|
""" Initialize a Directory instance for the current user’s home directory.
|
|
1084
1084
|
"""
|
|
1085
|
-
super(
|
|
1085
|
+
super().__init__(pth=gethomedir())
|
|
1086
1086
|
|
|
1087
1087
|
@export
|
|
1088
1088
|
class TemporaryDirectory(Directory):
|
|
@@ -1128,7 +1128,7 @@ class TemporaryDirectory(Directory):
|
|
|
1128
1128
|
self.prefix = prefix
|
|
1129
1129
|
self.suffix = suffix
|
|
1130
1130
|
self.change = change
|
|
1131
|
-
super(
|
|
1131
|
+
super().__init__(self._name)
|
|
1132
1132
|
|
|
1133
1133
|
@property
|
|
1134
1134
|
def name(self):
|
|
@@ -1150,7 +1150,7 @@ class TemporaryDirectory(Directory):
|
|
|
1150
1150
|
|
|
1151
1151
|
@wraps(Directory.ctx_prepare)
|
|
1152
1152
|
def ctx_prepare(self):
|
|
1153
|
-
change = super(
|
|
1153
|
+
change = super().ctx_prepare().change
|
|
1154
1154
|
self.will_change = self.will_change_back = bool(self.will_change and change)
|
|
1155
1155
|
return self
|
|
1156
1156
|
|
|
@@ -1166,7 +1166,7 @@ class TemporaryDirectory(Directory):
|
|
|
1166
1166
|
""" Delete the directory pointed to by the TemporaryDirectory
|
|
1167
1167
|
instance, and everything it contains. USE WITH CAUTION.
|
|
1168
1168
|
"""
|
|
1169
|
-
out = super(
|
|
1169
|
+
out = super().close()
|
|
1170
1170
|
if self.exists:
|
|
1171
1171
|
return rm_rf(self.name) and out
|
|
1172
1172
|
return False
|
|
@@ -1184,11 +1184,11 @@ class TemporaryDirectory(Directory):
|
|
|
1184
1184
|
def __enter__(self):
|
|
1185
1185
|
if not self.exists:
|
|
1186
1186
|
self.makedirs()
|
|
1187
|
-
super(
|
|
1187
|
+
super().__enter__()
|
|
1188
1188
|
return self
|
|
1189
1189
|
|
|
1190
1190
|
def __exit__(self, exc_type=None, exc_val=None, exc_tb=None):
|
|
1191
|
-
out = super(
|
|
1191
|
+
out = super().__exit__(exc_type, exc_val, exc_tb)
|
|
1192
1192
|
if self.destroy:
|
|
1193
1193
|
out &= self.close()
|
|
1194
1194
|
return out
|
|
@@ -186,7 +186,7 @@ class Registry(abc.ABC, metaclass=MetaRegistry):
|
|
|
186
186
|
dictionary, indexed by the qualified name.
|
|
187
187
|
"""
|
|
188
188
|
# Call up:
|
|
189
|
-
super(
|
|
189
|
+
super().__init_subclass__(**kwargs)
|
|
190
190
|
|
|
191
191
|
# We were called with a class for which the values
|
|
192
192
|
# of appname, appspace, and __name__ have been assigned –
|
|
@@ -216,8 +216,8 @@ class ModuleSpec(importlib.machinery.ModuleSpec):
|
|
|
216
216
|
are required arguments).
|
|
217
217
|
"""
|
|
218
218
|
_, packagename = dotpath_split(name)
|
|
219
|
-
super(
|
|
220
|
-
|
|
219
|
+
super().__init__(name, loader,
|
|
220
|
+
origin=packagename)
|
|
221
221
|
|
|
222
222
|
def __hash__(self):
|
|
223
223
|
return hash(self.loader) \
|
|
@@ -234,7 +234,7 @@ class Package(types.Module):
|
|
|
234
234
|
"""
|
|
235
235
|
|
|
236
236
|
def __init__(self, name, doc=None, path=None):
|
|
237
|
-
super(
|
|
237
|
+
super().__init__(name, doc)
|
|
238
238
|
self.__path__ = path or []
|
|
239
239
|
|
|
240
240
|
def __repr__(self):
|
|
@@ -593,9 +593,9 @@ class MetaModule(MetaRegistry):
|
|
|
593
593
|
deferred_export.__doc__ = inspect.getdoc(ExporterBase.export)
|
|
594
594
|
|
|
595
595
|
# Call up:
|
|
596
|
-
attributes = super(
|
|
597
|
-
|
|
598
|
-
|
|
596
|
+
attributes = super().__prepare__(name,
|
|
597
|
+
bases,
|
|
598
|
+
**kwargs)
|
|
599
599
|
|
|
600
600
|
# Return a new Namespace with the deferred export function
|
|
601
601
|
# defined as “export”:
|
|
@@ -610,10 +610,10 @@ class MetaModule(MetaRegistry):
|
|
|
610
610
|
deferred_export = attributes.pop('export', None)
|
|
611
611
|
|
|
612
612
|
# Call up, creating and initializing the module class:
|
|
613
|
-
cls = super(
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
613
|
+
cls = super().__new__(metacls, name,
|
|
614
|
+
bases,
|
|
615
|
+
dict(attributes),
|
|
616
|
+
**kwargs)
|
|
617
617
|
|
|
618
618
|
# If an appname is defined, try to install
|
|
619
619
|
# an instance of the appropriate Exporter:
|
|
@@ -749,7 +749,7 @@ class ModuleBase(Package, Registry, metaclass=MetaModule):
|
|
|
749
749
|
cls.appname = appname or attr_search('appname', *ancestors)
|
|
750
750
|
cls.appspace = appspace or attr_search('appspace', *ancestors)
|
|
751
751
|
cls.__loader__ = linkages.get(cls.appname, none_function)()
|
|
752
|
-
super(
|
|
752
|
+
super().__init_subclass__(**kwargs)
|
|
753
753
|
|
|
754
754
|
@classmethod
|
|
755
755
|
def __class_getitem__(cls, key):
|
|
@@ -767,7 +767,7 @@ class ModuleBase(Package, Registry, metaclass=MetaModule):
|
|
|
767
767
|
qualified_name = None
|
|
768
768
|
if self.prefix:
|
|
769
769
|
qualified_name = dotpath_join(self.prefix, name)
|
|
770
|
-
super(
|
|
770
|
+
super().__init__(qualified_name or name, doc)
|
|
771
771
|
|
|
772
772
|
def __execute__(self):
|
|
773
773
|
""" The “__execute__()” class-based module instance method is called
|
|
@@ -813,8 +813,7 @@ class ModuleBase(Package, Registry, metaclass=MetaModule):
|
|
|
813
813
|
cls = type(self)
|
|
814
814
|
if hasattr(cls, consts.EXPORTER_NAME):
|
|
815
815
|
return getattr(cls, consts.EXPORTER_NAME).dir_function()()
|
|
816
|
-
names = chain(cls.__dict__.keys(),
|
|
817
|
-
super(ModuleBase, self).__dir__())
|
|
816
|
+
names = chain(cls.__dict__.keys(), super().__dir__())
|
|
818
817
|
return sorted(frozenset(names) - DO_NOT_INCLUDE)
|
|
819
818
|
|
|
820
819
|
@dataclass
|
|
@@ -201,7 +201,7 @@ class ProxyModule(ModuleBase):
|
|
|
201
201
|
See the main class docstring for the deets.
|
|
202
202
|
"""
|
|
203
203
|
# Call up, creating the instance:
|
|
204
|
-
instance = super(
|
|
204
|
+
instance = super().__new__(cls)
|
|
205
205
|
|
|
206
206
|
# Fill in our “slots” with empty structs:
|
|
207
207
|
instance.__filters__ = []
|
|
@@ -238,7 +238,7 @@ class ProxyModule(ModuleBase):
|
|
|
238
238
|
mappings.
|
|
239
239
|
"""
|
|
240
240
|
# Super-initialize:
|
|
241
|
-
super(
|
|
241
|
+
super().__init__(name, doc=doc)
|
|
242
242
|
|
|
243
243
|
# Get a reference to the module class:
|
|
244
244
|
cls = type(self)
|
|
@@ -27,10 +27,16 @@ repl.py – THE RUBRICK:
|
|
|
27
27
|
from __future__ import print_function
|
|
28
28
|
|
|
29
29
|
import importlib
|
|
30
|
+
import os.path
|
|
31
|
+
import runpy
|
|
32
|
+
import warnings
|
|
30
33
|
|
|
31
34
|
from clu.all import import_clu_modules
|
|
35
|
+
from clu.config.env import Environ
|
|
36
|
+
from clu.constants import consts
|
|
32
37
|
from clu.naming import nameof, qualified_import
|
|
33
38
|
from clu.predicates import ispublic
|
|
39
|
+
from clu.repl import columnize
|
|
34
40
|
|
|
35
41
|
# MODULE EXPORT FUNCTIONS: given a module name, export
|
|
36
42
|
# either the module or its contents into a given namespace:
|
|
@@ -190,6 +196,21 @@ else:
|
|
|
190
196
|
# I do this practically every time, so I might as well do it here:
|
|
191
197
|
catimage = Image.open(image_paths[0])
|
|
192
198
|
|
|
199
|
+
# Access CLU app environment variables:
|
|
200
|
+
cluenv = Environ(appname='clu')
|
|
201
|
+
|
|
202
|
+
# If you, the user, set up a CLU_USER_SCRIPT environment variable
|
|
203
|
+
# before running this repl script, you can have it executed herein:
|
|
204
|
+
if 'user:script' in cluenv:
|
|
205
|
+
user_script_path = cluenv['user:script']
|
|
206
|
+
if os.path.exists(user_script_path):
|
|
207
|
+
user_script_globals = runpy.run_path(user_script_path)
|
|
208
|
+
GLOBALS.update(user_script_globals)
|
|
209
|
+
else:
|
|
210
|
+
message = "CLU_USER_SCRIPT needs to point to a Python file"
|
|
211
|
+
warnings.simplefilter('always')
|
|
212
|
+
warnings.warn(stacklevel=2, message=message)
|
|
213
|
+
|
|
193
214
|
# Remove duplicate and invalid sys.paths:
|
|
194
215
|
|
|
195
216
|
pypath.remove_invalid_paths()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.3
|
|
4
4
|
Summary: CLU - Common Lightweight Utilities, or Command-Line Utilities (your pick)
|
|
5
5
|
Home-page: https://github.com/fish2000/clu
|
|
6
6
|
Download-URL: https://github.com/fish2000/clu/zipball/master
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# CLU -- Common Lightweight Utilities
|
|
5
5
|
#
|
|
6
|
-
# Copyright © 2012-
|
|
6
|
+
# Copyright © 2012-2035 Alexander Böhn
|
|
7
7
|
#
|
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
9
|
# of this software and associated documentation files (the "Software"), to deal
|
|
@@ -91,7 +91,7 @@ try:
|
|
|
91
91
|
'__version__.py')).read(),
|
|
92
92
|
'__version__.py', 'exec'))
|
|
93
93
|
except:
|
|
94
|
-
__version__ = '0.11.
|
|
94
|
+
__version__ = '0.11.3'
|
|
95
95
|
|
|
96
96
|
# PROJECT DESCRIPTION
|
|
97
97
|
LONG_DESCRIPTION = project_content('ABOUT.md')
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '0.11.1'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|