python-clu 0.12.8__tar.gz → 0.12.11__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.12.8 → python_clu-0.12.11}/.bumpversion.toml +1 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/CHANGELOG.md +79 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/CLASSIFIERS.txt +0 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/CODE_OF_CONDUCT.md +7 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/PKG-INFO +1 -3
- python_clu-0.12.11/clu/__version__.py +1 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/api/__init__.py +1 -21
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/enums.py +14 -12
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/naming.py +38 -11
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/predicates.py +5 -3
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/ansi.py +5 -6
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/repl.py +8 -6
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/PKG-INFO +1 -3
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/requires.txt +0 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/dev.txt +0 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/install.txt +0 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/setup.py +8 -12
- python_clu-0.12.8/clu/__version__.py +0 -1
- {python_clu-0.12.8 → python_clu-0.12.11}/.coveragerc +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/.editorconfig +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/.gitchangelog.rc +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/.gitignore +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/.landscape.yml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/.travis.yml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/ABOUT.md +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/CLU_Treatment.md +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/LICENSE.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/MANIFEST.in +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/Makefile +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/README.md +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/appveyor.yml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/__main__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/abstract.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/all.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/api/__main__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/application.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/compilation/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/compilation/compiledb.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/compilation/macros.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/abc.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/codecs.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/env.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/filebase.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/jsonfile.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/picklefile.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/tomlfile.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/yamlfile.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/keymap.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/keymapview.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/base.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/fieldtypes.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/settings.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/ns.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/proxy.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/__main__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/consts.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/data.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/enums.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/exceptions.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/polyfills.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/csv.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/dicts.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/dispatch.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/exporting.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/extending.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/abc.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/appdirectories.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/filesystem.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/misc.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/pypath.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/sourcetree.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/__main__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/base.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/proxy.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/keyvalue.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/mathematics.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/banners.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/ansidocs.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/boilerplate.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/boilerplate_copy.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/print_version.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/columnize.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/modules.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/repr.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/sanitizer.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/.gitignore +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/README.md +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/ansicolors.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/boilerplate.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/dictroast.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/forkumask.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-bpython.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-ipython.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-ptpython.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-pyzo.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/xdg-runtime.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/prediversus.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/treeline.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/shelving/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/shelving/redat.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/shelving/redis.conf +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/stdio.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/hook.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/obsolete.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/pytest.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/utils.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/typespace/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/typespace/__main__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/typespace/namespace.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/typology.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/__main__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/git_version.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/read_version.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/codecov.yml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/conftest.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/.DS_Store +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/Makefile +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/api.doctree +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/environment.pickle +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/generated/clu.doctree +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/index.doctree +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/.buildinfo +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_sources/api.rst.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_sources/index.rst.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/alabaster.css +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/basic.css +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/badge_only.css +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/theme.css +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/custom.css +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/doctools.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/documentation_options.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/file.png +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/jquery-3.6.0.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/jquery.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/badge_only.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/html5shiv.min.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/theme.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/language_data.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/minus.png +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/plus.png +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/pygments.css +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/searchtools.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/underscore-1.13.1.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/underscore.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/api.html +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/generated/clu.html +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/genindex.html +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/index.html +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/objects.inv +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/py-modindex.html +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/search.html +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/searchindex.js +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/man/clu.1 +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/make.bat +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/api.rst +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/conf.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/generated/clu.rst +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/index.rst +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/autohook.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/post-push/00-coverage.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/pre-push/00-noop.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/coverage.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/display-issues.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/git-pushex +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/noop.sh +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/mypy.ini +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/noxfile.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/pyproject.toml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/pytest.ini +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/SOURCES.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/dependency_links.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/entry_points.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/top_level.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/zip-safe +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/pytype.cfg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/changelog.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/docs.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/codecov.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/docs.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/manifest.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/pyproject.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/repl.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/tests.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/tox.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/requirements/typecheck.txt +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/direnv_transformed_env.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-module-list-example-small.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-module-list-example.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-module-list-example.pxd +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-testing-time-totals-example-small.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-testing-time-totals-example.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-testing-time-totals-example.pxd +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/construx-and-capsela-small.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/construx-and-capsela.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/construx-and-capsela.pxd +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/toml-module-rant.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/scratch/nteract.ipynb +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/setup.cfg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/1-58.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/8600JC.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/8ba.png +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/IMG_20180505_205153567.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/cheetah-003.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/config/clu-config.toml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/config/yodogg.toml +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/shutterstock_90194617.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodogg/video-pride-serval.jpg +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_abstract.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_all.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_boilerplate.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_config.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_config_abc.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_csv.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_dicts.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_dispatch.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_enum_aliases.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_exporting.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_extending.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_abc.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_appdirectories.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_filesystem.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_misc.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_importing.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_keyvalue.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_mathematics.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_naming.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_predicates.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_repl_columnize.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_repl_modules.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_repr.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_scripts_repl.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_typespace_namespace.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_typology.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_version.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/.tm_properties +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/__init__.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/config.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/exporting.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/iheard.py +0 -0
- {python_clu-0.12.8 → python_clu-0.12.11}/tox.ini +0 -0
|
@@ -1,10 +1,88 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
## 0.12.
|
|
4
|
+
## 0.12.10:pre1+g4e2fdbd [SNAPSHOT]
|
|
5
5
|
|
|
6
6
|
### Other
|
|
7
7
|
|
|
8
|
+
* Ahhhh my home-brewed classifier didn’t work, booooo. [Alexander Böhn]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## v0.12.10 (2025-05-25)
|
|
12
|
+
|
|
13
|
+
### Other
|
|
14
|
+
|
|
15
|
+
* Bumped version: 0.12.9 → 0.12.10. [Alexander Böhn]
|
|
16
|
+
|
|
17
|
+
* [make] New changelog added. [Alexander Böhn]
|
|
18
|
+
|
|
19
|
+
* Fixed `clu.naming.qualified_name_tuple(…)` to work for module objects. [Alexander Böhn]
|
|
20
|
+
|
|
21
|
+
… this involved special-casing the whole thing, but it was worth it,
|
|
22
|
+
as it just wasn’t fucking working for this entire case this whole
|
|
23
|
+
time, which is fucking embarrasing. Yes!
|
|
24
|
+
|
|
25
|
+
* More requirement/REPL-import adjustments. [Alexander Böhn]
|
|
26
|
+
|
|
27
|
+
* Code of Conduct clarification. [Alexander Böhn]
|
|
28
|
+
|
|
29
|
+
* Classifier tidy-up. [Alexander Böhn]
|
|
30
|
+
|
|
31
|
+
* Gentlemen prefer f-strings. [Alexander Böhn]
|
|
32
|
+
|
|
33
|
+
* Updating straggling little info corners that didn’t get the memo. [Alexander Böhn]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## v0.12.9 (2025-05-24)
|
|
37
|
+
|
|
38
|
+
### Add
|
|
39
|
+
|
|
40
|
+
* Added a `clu.predicates.pyqualname(…)` function. [Alexander Böhn]
|
|
41
|
+
|
|
42
|
+
… which of course does exactly what you think it does, in that it
|
|
43
|
+
privliges the “__qualname__” with what it returns for whatever
|
|
44
|
+
argument thing it is passed. Have fun you guys
|
|
45
|
+
|
|
46
|
+
### Other
|
|
47
|
+
|
|
48
|
+
* Bumped version: 0.12.8 → 0.12.9. [Alexander Böhn]
|
|
49
|
+
|
|
50
|
+
* [make] New changelog added. [Alexander Böhn]
|
|
51
|
+
|
|
52
|
+
* Removed (fortunately vestigial) Click package dependency. [Alexander Böhn]
|
|
53
|
+
|
|
54
|
+
* Expanded “getdoc” codepath in `clu.repl.ansi.signature(…)` [Alexander Böhn]
|
|
55
|
+
|
|
56
|
+
* Using new `clu.predicates.pyqualname(…)` in `clu.naming.qualified_name(…)` [Alexander Böhn]
|
|
57
|
+
|
|
58
|
+
… this closes Issue #14! Q.v. https://github.com/fish2000/CLU/issues/14
|
|
59
|
+
… An upcoming release will demonstrate this through the “clu-ansidocs”
|
|
60
|
+
command
|
|
61
|
+
|
|
62
|
+
* Special-cased `filter(…)` call should be fastest. [Alexander Böhn]
|
|
63
|
+
|
|
64
|
+
… tests do indicate as such, it appears, actually, now that you mention
|
|
65
|
+
|
|
66
|
+
* More updates, cleanup, and addenda in `clu.enums` [Alexander Böhn]
|
|
67
|
+
|
|
68
|
+
* The `clu.enums.alias(…)` class is now itself `clu.abstract.Slotted` [Alexander Böhn]
|
|
69
|
+
|
|
70
|
+
… as in, that is now its metaclass. This makes probably such zero
|
|
71
|
+
difference in anything in the universe it shames me to have even
|
|
72
|
+
brought this much attention to it here and now, and I really do
|
|
73
|
+
apologize, I do, yes.
|
|
74
|
+
|
|
75
|
+
* Refactored `clu.naming.isnative(…)` around an edge case. [Alexander Böhn]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
## v0.12.8 (2025-05-24)
|
|
79
|
+
|
|
80
|
+
### Other
|
|
81
|
+
|
|
82
|
+
* Bumped version: 0.12.7 → 0.12.8. [Alexander Böhn]
|
|
83
|
+
|
|
84
|
+
* [make] New changelog added. [Alexander Böhn]
|
|
85
|
+
|
|
8
86
|
* Fixes in `clu.naming.{qualified_import,main_module_mame}(…)` [Alexander Böhn]
|
|
9
87
|
|
|
10
88
|
… “main_module_name(…)” was failing when called within bpython; now,
|
|
@@ -74,3 +74,10 @@ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.ht
|
|
|
74
74
|
|
|
75
75
|
For answers to common questions about this code of conduct, see
|
|
76
76
|
https://www.contributor-covenant.org/faq
|
|
77
|
+
|
|
78
|
+
## The Main Thing
|
|
79
|
+
|
|
80
|
+
Do not be dicks. If you or people you happen to like are dicks, they will have to go
|
|
81
|
+
be dickish elsewhere, and in exrtreme cases you’ll be reported to the FBI or perhaps
|
|
82
|
+
shot at dawn through the lungs, to prevent you from being such dickhead morons.
|
|
83
|
+
OK? OK.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.11
|
|
4
4
|
Summary: Python-CLU: Common Lightweight Utilities
|
|
5
5
|
Home-page: https://github.com/fish2000/clu
|
|
6
6
|
Download-URL: https://github.com/fish2000/clu/zipball/master
|
|
@@ -24,7 +24,6 @@ Classifier: Topic :: Software Development
|
|
|
24
24
|
Classifier: Topic :: Software Development :: Testing
|
|
25
25
|
Classifier: Topic :: Utilities
|
|
26
26
|
Classifier: Operating System :: MacOS
|
|
27
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
28
27
|
Classifier: Operating System :: OS Independent
|
|
29
28
|
Classifier: Operating System :: POSIX
|
|
30
29
|
Classifier: Operating System :: Unix
|
|
@@ -36,7 +35,6 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
36
35
|
Description-Content-Type: text/markdown
|
|
37
36
|
License-File: LICENSE.txt
|
|
38
37
|
Requires-Dist: build>=1.2.2
|
|
39
|
-
Requires-Dist: Click>=7.0
|
|
40
38
|
Requires-Dist: colorama>=0.4.0
|
|
41
39
|
Requires-Dist: dataclasses>=0.6; python_version < "3.7"
|
|
42
40
|
Requires-Dist: dbx-stopwatch>=1.6
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.12.11'
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
from __future__ import print_function
|
|
3
3
|
|
|
4
4
|
import abc
|
|
5
|
-
import click
|
|
6
5
|
import sys
|
|
7
6
|
|
|
8
7
|
abstract = abc.abstractmethod
|
|
@@ -39,19 +38,6 @@ class CommandBase(ModuleBase):
|
|
|
39
38
|
class Command(CommandBase[Module]):
|
|
40
39
|
commandstr = "command" # …a reserved word?
|
|
41
40
|
|
|
42
|
-
class CLUI(click.MultiCommand):
|
|
43
|
-
|
|
44
|
-
def iter_commands(self, context):
|
|
45
|
-
modules = modules_for_appname_and_appspace(consts.APPNAME, API_APPSPACE)
|
|
46
|
-
yield from (module.commandname for module in modules)
|
|
47
|
-
|
|
48
|
-
def list_commands(self, context):
|
|
49
|
-
return list(self.iter_commands(context))
|
|
50
|
-
|
|
51
|
-
def get_command(self, context, key):
|
|
52
|
-
dotpath = dotpath_join(consts.APPNAME, API_APPSPACE, key)
|
|
53
|
-
return dotpath
|
|
54
|
-
|
|
55
41
|
# Assign the modules’ `__all__` and `__dir__` using the exporter:
|
|
56
42
|
__all__, __dir__ = exporter.all_and_dir()
|
|
57
43
|
|
|
@@ -60,17 +46,11 @@ def test():
|
|
|
60
46
|
from clu.testing.utils import inline
|
|
61
47
|
|
|
62
48
|
@inline
|
|
63
|
-
def
|
|
49
|
+
def test_command_imports():
|
|
64
50
|
""" Command import test """
|
|
65
51
|
from clu.commands import Command as command
|
|
66
52
|
assert command
|
|
67
53
|
|
|
68
|
-
@inline
|
|
69
|
-
def test_two():
|
|
70
|
-
""" Sanity-check CLUI """
|
|
71
|
-
clui = CLUI()
|
|
72
|
-
assert clui
|
|
73
|
-
|
|
74
54
|
return inline.test(100)
|
|
75
55
|
|
|
76
56
|
if __name__ == '__main__':
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
from __future__ import print_function
|
|
3
3
|
|
|
4
|
+
import clu.abstract
|
|
5
|
+
|
|
4
6
|
from clu.constants.polyfills import Enum, EnumMeta # type: ignore
|
|
5
7
|
from clu.exporting import Exporter
|
|
6
8
|
|
|
@@ -9,10 +11,10 @@ export = exporter.decorator()
|
|
|
9
11
|
|
|
10
12
|
# Dunder and sunder name constants for the alias dict:
|
|
11
13
|
DUNDER = '__aliases__'
|
|
12
|
-
SUNDER = '_aliases_'
|
|
14
|
+
MIFFLIN = SUNDER = '_aliases_'
|
|
13
15
|
|
|
14
16
|
@export
|
|
15
|
-
class alias(
|
|
17
|
+
class alias(clu.abstract.BaseDescriptor, metaclass=clu.abstract.Slotted):
|
|
16
18
|
|
|
17
19
|
__slots__ = ('name', 'aliased')
|
|
18
20
|
|
|
@@ -65,7 +67,7 @@ class alias(object):
|
|
|
65
67
|
return self.member_for_value(cls, self.aliased)
|
|
66
68
|
|
|
67
69
|
def __set_name__(self, cls, name):
|
|
68
|
-
""" Register the alias within the __aliases__ dict in
|
|
70
|
+
""" Register the alias within the `__aliases__` dict in
|
|
69
71
|
the class (if it has one).
|
|
70
72
|
|
|
71
73
|
N.B. This only gets called on Python 3.6+
|
|
@@ -102,26 +104,26 @@ class alias(object):
|
|
|
102
104
|
class AliasingEnumMeta(EnumMeta):
|
|
103
105
|
|
|
104
106
|
def __new__(metacls, name, bases, attributes, **kwargs):
|
|
105
|
-
""" Ensure __aliases__ is a dictionary attribute on the new class.
|
|
107
|
+
""" Ensure `__aliases__` is a dictionary attribute on the new class.
|
|
106
108
|
|
|
107
109
|
It is not strictly necessary to make this class an ancestor to
|
|
108
110
|
your enums in order to use the `alias(…)` descriptor function,
|
|
109
111
|
as defined above – if you do, the enums you define with it will
|
|
110
|
-
conveniently furnish the __aliases__ dictionary, which is like
|
|
111
|
-
the normal enum __members__ directory only with aliases. Yes.
|
|
112
|
+
conveniently furnish the `__aliases__` dictionary, which is like
|
|
113
|
+
the normal enum `__members__` directory only with aliases. Yes.
|
|
112
114
|
"""
|
|
113
115
|
|
|
114
116
|
if '__aliases__' not in attributes:
|
|
115
117
|
attributes['__aliases__'] = {}
|
|
116
118
|
|
|
117
|
-
return super(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
return super().__new__(metacls, name,
|
|
120
|
+
bases,
|
|
121
|
+
attributes,
|
|
122
|
+
**kwargs)
|
|
121
123
|
|
|
122
124
|
@export
|
|
123
125
|
class AliasingEnum(Enum, metaclass=AliasingEnumMeta):
|
|
124
|
-
""" An Enum subclass intermediate, suitable for subclassing
|
|
126
|
+
""" An `Enum` subclass intermediate, suitable for subclassing
|
|
125
127
|
itself, that uses `AliasingEnumMeta` as its metaclass.
|
|
126
128
|
|
|
127
129
|
…Thus, any member aliases that one makes in concrete
|
|
@@ -132,4 +134,4 @@ class AliasingEnum(Enum, metaclass=AliasingEnumMeta):
|
|
|
132
134
|
pass
|
|
133
135
|
|
|
134
136
|
# Assign the modules’ `__all__` and `__dir__` using the exporter:
|
|
135
|
-
__all__, __dir__ = exporter.all_and_dir()
|
|
137
|
+
__all__, __dir__ = exporter.all_and_dir('DUNDER', 'MIFFLIN', 'SUNDER')
|
|
@@ -32,7 +32,7 @@ def determine_module(thing, name=None):
|
|
|
32
32
|
import pickle
|
|
33
33
|
return pickle.whichmodule(thing, name) # type: ignore
|
|
34
34
|
|
|
35
|
-
"""
|
|
35
|
+
__doc__ = """
|
|
36
36
|
NAME AND MODULE SEARCH FUNCTIONS: the “nameof(…)” and “moduleof(…)”
|
|
37
37
|
functions each search through, in order:
|
|
38
38
|
|
|
@@ -177,12 +177,26 @@ def isnative(thing):
|
|
|
177
177
|
""" isnative(thing) → boolean predicate, True if `thing`
|
|
178
178
|
comes from a native-compiled (“extension”) module.
|
|
179
179
|
"""
|
|
180
|
-
module
|
|
181
|
-
|
|
180
|
+
# Grab the name of the module of the thing:
|
|
181
|
+
module_name = moduleof(thing)
|
|
182
|
+
|
|
183
|
+
# Not native:
|
|
184
|
+
if module_name == 'builtins':
|
|
182
185
|
return False
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
+
|
|
187
|
+
try:
|
|
188
|
+
# 99.99999999% of the time this should work
|
|
189
|
+
module = importlib.import_module(module_name)
|
|
190
|
+
except ModuleNotFoundError as error:
|
|
191
|
+
# This error indicates a native module, strangely:
|
|
192
|
+
if """named 'bin'""" in str(error):
|
|
193
|
+
return True
|
|
194
|
+
else:
|
|
195
|
+
# Delegate deciding about the module:
|
|
196
|
+
return isnativemodule(module)
|
|
197
|
+
|
|
198
|
+
# We couldn’t figure this one out – so no false positives:
|
|
199
|
+
return False
|
|
186
200
|
|
|
187
201
|
@export
|
|
188
202
|
def isinspectable(thing):
|
|
@@ -235,7 +249,7 @@ def dotpath_split(dotpath):
|
|
|
235
249
|
|
|
236
250
|
@export
|
|
237
251
|
def qualified_import(qualified):
|
|
238
|
-
""" Import a
|
|
252
|
+
""" Import a thing based on its full thing-name.
|
|
239
253
|
e.g. 'instakit.processors.halftone.FloydSteinberg'
|
|
240
254
|
"""
|
|
241
255
|
if QUALIFIER not in qualified:
|
|
@@ -253,16 +267,29 @@ def qualified_name_tuple(thing):
|
|
|
253
267
|
""" Get the thing-name and module/package name for a class or module.
|
|
254
268
|
e.g. ('FloydSteinberg', 'instakit.processors.halftone')
|
|
255
269
|
"""
|
|
256
|
-
|
|
270
|
+
from clu.predicates import pyqualname, pyname
|
|
271
|
+
from clu.typology import ismodule
|
|
272
|
+
|
|
273
|
+
# Special case for figuring out module names:
|
|
274
|
+
if ismodule(thing):
|
|
275
|
+
putative = pyname(thing)
|
|
276
|
+
if QUALIFIER in putative:
|
|
277
|
+
partition = putative.rpartition(QUALIFIER)
|
|
278
|
+
return partition[-1:][0], partition[:-1][0]
|
|
279
|
+
else:
|
|
280
|
+
return putative, ''
|
|
281
|
+
|
|
282
|
+
return pyqualname(thing) or nameof(thing), \
|
|
283
|
+
moduleof(thing)
|
|
257
284
|
|
|
258
285
|
@export
|
|
259
286
|
def qualified_name(thing):
|
|
260
|
-
""" Get a
|
|
287
|
+
""" Get a full thing-name for a thing.
|
|
261
288
|
e.g. 'instakit.processors.halftone.FloydSteinberg'
|
|
262
289
|
"""
|
|
263
290
|
thing_name, module_name = qualified_name_tuple(thing)
|
|
264
|
-
|
|
265
|
-
return
|
|
291
|
+
fullname = dotpath_join(module_name, thing_name)
|
|
292
|
+
return fullname
|
|
266
293
|
|
|
267
294
|
@export
|
|
268
295
|
def dotpath_to_prefix(dotpath, sep='-', end='-'):
|
|
@@ -292,6 +292,7 @@ uncallable = negate(callable) # type: ignore
|
|
|
292
292
|
hoist = lambda thing: uncallable(thing) and wrap_value(thing) or thing
|
|
293
293
|
|
|
294
294
|
pyname = lambda thing: pyattr(thing, 'name', 'qualname')
|
|
295
|
+
pyqualname = lambda thing: pyattr(thing, 'qualname', 'name')
|
|
295
296
|
pymodule = lambda thing: pyattr(thing, 'module', 'package')
|
|
296
297
|
|
|
297
298
|
the_expandables = (tuple, list, set, frozenset,
|
|
@@ -435,7 +436,7 @@ def tuplize(*items):
|
|
|
435
436
|
def uniquify(*items):
|
|
436
437
|
""" uniquify(*items) → Return a generator yielding a unique set of all non-`None` arguments """
|
|
437
438
|
seen = set() # type: set
|
|
438
|
-
for item in filter(
|
|
439
|
+
for item in filter(None, items):
|
|
439
440
|
if item not in seen:
|
|
440
441
|
seen.add(item)
|
|
441
442
|
yield item
|
|
@@ -583,8 +584,9 @@ export(true_function, name='true_function', doc="true_function() → A funct
|
|
|
583
584
|
export(false_function, name='false_function', doc="false_function() → A function that always returns False")
|
|
584
585
|
export(uncallable, name='uncallable', doc="uncallable(thing) → boolean predicate, shortcut for `not callable(thing)`")
|
|
585
586
|
export(hoist, name='hoist', doc="hoist(thing) → if “thing” isn’t already callable, turn it into a lambda that returns it as a value (using “wrap_value(…)”).")
|
|
586
|
-
export(pyname, name='pyname', doc="pyname(thing) → Return either `__qualname__` or `__name__` from a given `thing`")
|
|
587
|
-
export(
|
|
587
|
+
export(pyname, name='pyname', doc="pyname(thing) → Return either `__qualname__` or `__name__` (in that order) from a given `thing`")
|
|
588
|
+
export(pyqualname, name='pyqualname', doc="pyqualname(thing) → Return either `__name__` or `__qualname__` (in that order) from a given `thing`")
|
|
589
|
+
export(pymodule, name='pymodule', doc="pymodule(thing) → Return either `__module__` or `__package__` (in that order) from a given `thing`")
|
|
588
590
|
|
|
589
591
|
export(isexpandable, name='isexpandable', doc="isexpandable(thing) → boolean predicate, True if `thing` can be `*expanded`")
|
|
590
592
|
export(isnormative, name='isnormative', doc="isnormative(thing) → boolean predicate, True if `thing` is a string-like or bytes-like iterable")
|
|
@@ -493,12 +493,11 @@ def signature(thing):
|
|
|
493
493
|
"""
|
|
494
494
|
try:
|
|
495
495
|
return nameof(thing) + str(inspect.signature(thing))
|
|
496
|
-
except ValueError
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
doc.splitlines()[0].strip())
|
|
496
|
+
except (TypeError, ValueError):
|
|
497
|
+
doc = inspect.getdoc(thing)
|
|
498
|
+
if doc:
|
|
499
|
+
return arrow_re.sub(arrow_sb,
|
|
500
|
+
doc.splitlines()[0].strip())
|
|
502
501
|
return None
|
|
503
502
|
|
|
504
503
|
@export
|
|
@@ -76,16 +76,13 @@ GLOBALS = globals()
|
|
|
76
76
|
starmods = ('clu.repl.ansi',
|
|
77
77
|
'clu.repl.columnize',
|
|
78
78
|
'clu.repl.modules',
|
|
79
|
-
'clu.constants.enums',
|
|
80
|
-
'clu.constants.data',
|
|
81
|
-
'clu.application',
|
|
82
79
|
'clu.config.abc',
|
|
83
80
|
'clu.config.env',
|
|
84
81
|
'clu.config.keymap',
|
|
85
82
|
'clu.config.proxy',
|
|
86
|
-
'clu.dicts', 'clu.
|
|
83
|
+
'clu.dicts', 'clu.exporting',
|
|
87
84
|
'clu.importing', 'clu.naming', 'clu.predicates', 'clu.typology',
|
|
88
|
-
'clu.fs.
|
|
85
|
+
'clu.fs.filesystem', 'clu.fs.misc',
|
|
89
86
|
'clu.scripts.treeline',
|
|
90
87
|
'clu.typespace.namespace',
|
|
91
88
|
'clu.testing.utils')
|
|
@@ -94,15 +91,20 @@ mods = ('clu',
|
|
|
94
91
|
'clu.all',
|
|
95
92
|
'clu.abstract',
|
|
96
93
|
'clu.constants.consts',
|
|
94
|
+
'clu.constants.data',
|
|
95
|
+
'clu.constants.enums',
|
|
97
96
|
'clu.constants.polyfills',
|
|
98
97
|
'clu.config.codecs',
|
|
99
98
|
'clu.config.ns',
|
|
100
99
|
'clu.csv',
|
|
100
|
+
'clu.enums',
|
|
101
|
+
'clu.fs.abc',
|
|
101
102
|
'clu.fs.appdirectories',
|
|
102
103
|
'clu.keyvalue',
|
|
103
104
|
'clu.mathematics',
|
|
104
105
|
'clu.dispatch', 'clu.sanitizer', 'clu.fs.pypath',
|
|
105
106
|
'clu.extending', 'clu.shelving.redat',
|
|
107
|
+
'clu.repr',
|
|
106
108
|
'clu.scripts.ansicolors',
|
|
107
109
|
'clu.scripts.treeline',
|
|
108
110
|
'clu.stdio',
|
|
@@ -113,7 +115,7 @@ mods = ('clu',
|
|
|
113
115
|
'datetime', 'functools', 'importlib', 'inspect',
|
|
114
116
|
'itertools', 'math', 'operator', 'pathlib',
|
|
115
117
|
'pickle', 'six', 'shutil', 'sysconfig', 'weakref',
|
|
116
|
-
'numpy', '
|
|
118
|
+
'numpy', 'colorama',
|
|
117
119
|
'xerox', 'zict')
|
|
118
120
|
|
|
119
121
|
# “Star-import” all starmods – this is equivalent to doing:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.11
|
|
4
4
|
Summary: Python-CLU: Common Lightweight Utilities
|
|
5
5
|
Home-page: https://github.com/fish2000/clu
|
|
6
6
|
Download-URL: https://github.com/fish2000/clu/zipball/master
|
|
@@ -24,7 +24,6 @@ Classifier: Topic :: Software Development
|
|
|
24
24
|
Classifier: Topic :: Software Development :: Testing
|
|
25
25
|
Classifier: Topic :: Utilities
|
|
26
26
|
Classifier: Operating System :: MacOS
|
|
27
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
28
27
|
Classifier: Operating System :: OS Independent
|
|
29
28
|
Classifier: Operating System :: POSIX
|
|
30
29
|
Classifier: Operating System :: Unix
|
|
@@ -36,7 +35,6 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
36
35
|
Description-Content-Type: text/markdown
|
|
37
36
|
License-File: LICENSE.txt
|
|
38
37
|
Requires-Dist: build>=1.2.2
|
|
39
|
-
Requires-Dist: Click>=7.0
|
|
40
38
|
Requires-Dist: colorama>=0.4.0
|
|
41
39
|
Requires-Dist: dataclasses>=0.6; python_version < "3.7"
|
|
42
40
|
Requires-Dist: dbx-stopwatch>=1.6
|
|
@@ -23,13 +23,12 @@
|
|
|
23
23
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
24
|
# SOFTWARE.
|
|
25
25
|
#
|
|
26
|
-
''' CLU - Common Lightweight Utilities
|
|
26
|
+
''' CLU - Common Lightweight Utilities '''
|
|
27
27
|
|
|
28
28
|
from __future__ import print_function
|
|
29
29
|
from setuptools import setup, find_packages
|
|
30
30
|
|
|
31
|
-
import os
|
|
32
|
-
import sys
|
|
31
|
+
import sys, os, io
|
|
33
32
|
import sysconfig
|
|
34
33
|
|
|
35
34
|
# CONSTANTS
|
|
@@ -40,11 +39,9 @@ AUTHOR_USER = 'fish2000'
|
|
|
40
39
|
GITHUB = 'github.com'
|
|
41
40
|
GMAIL = 'gmail.com'
|
|
42
41
|
|
|
43
|
-
AUTHOR_EMAIL = '
|
|
44
|
-
PROJECT_GH_URL = 'https
|
|
45
|
-
|
|
46
|
-
PROJECT_NAME)
|
|
47
|
-
PROJECT_DL_URL = '%s/zipball/master' % PROJECT_GH_URL
|
|
42
|
+
AUTHOR_EMAIL = f'{AUTHOR_USER}@{GMAIL}'
|
|
43
|
+
PROJECT_GH_URL = f'https://{GITHUB}/{AUTHOR_USER}/{PROJECT_NAME}'
|
|
44
|
+
PROJECT_DL_URL = f'{PROJECT_GH_URL}/zipball/master'
|
|
48
45
|
|
|
49
46
|
KEYWORDS = ('command',
|
|
50
47
|
'utilities', PROJECT_NAME,
|
|
@@ -69,15 +66,14 @@ ENTRY_POINTS = {
|
|
|
69
66
|
}
|
|
70
67
|
|
|
71
68
|
def project_content(*filenames):
|
|
72
|
-
import io
|
|
73
69
|
filepath = os.path.join(CWD, *filenames)
|
|
74
70
|
if not os.path.isfile(filepath):
|
|
75
|
-
raise IOError("
|
|
71
|
+
raise IOError(f"File {filepath} doesn't exist")
|
|
76
72
|
out = ''
|
|
77
73
|
with io.open(filepath, 'r') as handle:
|
|
78
74
|
out += handle.read()
|
|
79
75
|
if not out:
|
|
80
|
-
raise ValueError("
|
|
76
|
+
raise ValueError(f"File {filepath} couldn't be read")
|
|
81
77
|
return out.strip()
|
|
82
78
|
|
|
83
79
|
# PROJECT VERSION & METADATA
|
|
@@ -88,7 +84,7 @@ try:
|
|
|
88
84
|
'__version__.py')).read(),
|
|
89
85
|
'__version__.py', 'exec'))
|
|
90
86
|
except:
|
|
91
|
-
__version__ = '0.12.
|
|
87
|
+
__version__ = '0.12.11'
|
|
92
88
|
|
|
93
89
|
# PROJECT DESCRIPTION
|
|
94
90
|
LONG_DESCRIPTION = project_content('ABOUT.md')
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '0.12.8'
|
|
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
|