python-clu 0.12.7__tar.gz → 0.12.9__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.7 → python_clu-0.12.9}/.bumpversion.toml +1 -1
- {python_clu-0.12.7 → python_clu-0.12.9}/CHANGELOG.md +73 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/PKG-INFO +1 -2
- python_clu-0.12.9/clu/__version__.py +1 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/api/__init__.py +1 -21
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/enums.py +14 -12
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/naming.py +39 -13
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/predicates.py +5 -3
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/ansi.py +5 -6
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/ansidocs.py +9 -4
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/print_version.py +0 -1
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/PKG-INFO +1 -2
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/requires.txt +0 -1
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/install.txt +0 -1
- {python_clu-0.12.7 → python_clu-0.12.9}/setup.py +1 -1
- python_clu-0.12.7/clu/__version__.py +0 -1
- {python_clu-0.12.7 → python_clu-0.12.9}/.coveragerc +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/.editorconfig +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/.gitchangelog.rc +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/.gitignore +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/.landscape.yml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/.travis.yml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/ABOUT.md +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/CLASSIFIERS.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/CLU_Treatment.md +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/CODE_OF_CONDUCT.md +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/LICENSE.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/MANIFEST.in +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/Makefile +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/README.md +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/appveyor.yml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/__main__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/abstract.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/all.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/api/__main__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/application.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/compilation/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/compilation/compiledb.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/compilation/macros.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/abc.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/codecs.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/env.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/filebase.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/jsonfile.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/picklefile.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/tomlfile.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/yamlfile.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/keymap.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/keymapview.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/base.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/fieldtypes.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/settings.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/ns.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/proxy.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/__main__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/consts.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/data.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/enums.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/exceptions.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/polyfills.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/csv.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/dicts.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/dispatch.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/exporting.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/extending.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/abc.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/appdirectories.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/filesystem.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/misc.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/pypath.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/sourcetree.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/__main__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/base.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/proxy.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/keyvalue.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/mathematics.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/banners.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/boilerplate.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/boilerplate_copy.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/columnize.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/modules.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/repr.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/sanitizer.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/.gitignore +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/README.md +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/ansicolors.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/boilerplate.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/dictroast.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/forkumask.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-bpython.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-ipython.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-ptpython.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-pyzo.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/xdg-runtime.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/prediversus.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/repl.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/treeline.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/shelving/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/shelving/redat.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/shelving/redis.conf +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/stdio.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/hook.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/obsolete.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/pytest.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/utils.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/typespace/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/typespace/__main__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/typespace/namespace.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/typology.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/__main__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/git_version.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/read_version.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/codecov.yml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/conftest.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/.DS_Store +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/Makefile +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/api.doctree +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/environment.pickle +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/generated/clu.doctree +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/index.doctree +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/.buildinfo +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_sources/api.rst.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_sources/index.rst.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/alabaster.css +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/basic.css +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/badge_only.css +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/theme.css +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/custom.css +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/doctools.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/documentation_options.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/file.png +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/jquery-3.6.0.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/jquery.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/badge_only.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/html5shiv.min.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/theme.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/language_data.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/minus.png +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/plus.png +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/pygments.css +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/searchtools.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/underscore-1.13.1.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/underscore.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/api.html +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/generated/clu.html +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/genindex.html +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/index.html +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/objects.inv +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/py-modindex.html +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/search.html +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/searchindex.js +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/man/clu.1 +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/make.bat +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/api.rst +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/conf.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/generated/clu.rst +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/index.rst +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/autohook.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/post-push/00-coverage.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/pre-push/00-noop.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/coverage.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/display-issues.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/git-pushex +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/noop.sh +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/mypy.ini +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/noxfile.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/pyproject.toml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/pytest.ini +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/SOURCES.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/dependency_links.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/entry_points.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/top_level.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/zip-safe +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/pytype.cfg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/changelog.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/dev.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/docs.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/codecov.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/docs.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/manifest.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/pyproject.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/repl.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/tests.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/tox.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/requirements/typecheck.txt +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/direnv_transformed_env.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-module-list-example-small.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-module-list-example.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-module-list-example.pxd +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-testing-time-totals-example-small.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-testing-time-totals-example.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-testing-time-totals-example.pxd +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/construx-and-capsela-small.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/construx-and-capsela.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/construx-and-capsela.pxd +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/toml-module-rant.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/scratch/nteract.ipynb +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/setup.cfg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/1-58.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/8600JC.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/8ba.png +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/IMG_20180505_205153567.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/cheetah-003.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/config/clu-config.toml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/config/yodogg.toml +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/shutterstock_90194617.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodogg/video-pride-serval.jpg +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_abstract.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_all.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_boilerplate.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_config.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_config_abc.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_csv.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_dicts.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_dispatch.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_enum_aliases.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_exporting.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_extending.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_abc.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_appdirectories.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_filesystem.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_misc.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_importing.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_keyvalue.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_mathematics.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_naming.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_predicates.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_repl_columnize.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_repl_modules.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_repr.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_scripts_repl.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_typespace_namespace.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_typology.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_version.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/.tm_properties +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/__init__.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/config.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/exporting.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/iheard.py +0 -0
- {python_clu-0.12.7 → python_clu-0.12.9}/tox.ini +0 -0
|
@@ -1,6 +1,79 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## 0.12.8:pre8+g4f192b8 [SNAPSHOT]
|
|
5
|
+
|
|
6
|
+
### Add
|
|
7
|
+
|
|
8
|
+
* Added a `clu.predicates.pyqualname(…)` function. [Alexander Böhn]
|
|
9
|
+
|
|
10
|
+
… which of course does exactly what you think it does, in that it
|
|
11
|
+
privliges the “__qualname__” with what it returns for whatever
|
|
12
|
+
argument thing it is passed. Have fun you guys
|
|
13
|
+
|
|
14
|
+
### Other
|
|
15
|
+
|
|
16
|
+
* Removed (fortunately vestigial) Click package dependency. [Alexander Böhn]
|
|
17
|
+
|
|
18
|
+
* Expanded “getdoc” codepath in `clu.repl.ansi.signature(…)` [Alexander Böhn]
|
|
19
|
+
|
|
20
|
+
* Using new `clu.predicates.pyqualname(…)` in `clu.naming.qualified_name(…)` [Alexander Böhn]
|
|
21
|
+
|
|
22
|
+
… this closes Issue #14! Q.v. https://github.com/fish2000/CLU/issues/14
|
|
23
|
+
… An upcoming release will demonstrate this through the “clu-ansidocs”
|
|
24
|
+
command
|
|
25
|
+
|
|
26
|
+
* Special-cased `filter(…)` call should be fastest. [Alexander Böhn]
|
|
27
|
+
|
|
28
|
+
… tests do indicate as such, it appears, actually, now that you mention
|
|
29
|
+
|
|
30
|
+
* More updates, cleanup, and addenda in `clu.enums` [Alexander Böhn]
|
|
31
|
+
|
|
32
|
+
* The `clu.enums.alias(…)` class is now itself `clu.abstract.Slotted` [Alexander Böhn]
|
|
33
|
+
|
|
34
|
+
… as in, that is now its metaclass. This makes probably such zero
|
|
35
|
+
difference in anything in the universe it shames me to have even
|
|
36
|
+
brought this much attention to it here and now, and I really do
|
|
37
|
+
apologize, I do, yes.
|
|
38
|
+
|
|
39
|
+
* Refactored `clu.naming.isnative(…)` around an edge case. [Alexander Böhn]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## v0.12.8 (2025-05-24)
|
|
43
|
+
|
|
44
|
+
### Other
|
|
45
|
+
|
|
46
|
+
* Bumped version: 0.12.7 → 0.12.8. [Alexander Böhn]
|
|
47
|
+
|
|
48
|
+
* [make] New changelog added. [Alexander Böhn]
|
|
49
|
+
|
|
50
|
+
* Fixes in `clu.naming.{qualified_import,main_module_mame}(…)` [Alexander Böhn]
|
|
51
|
+
|
|
52
|
+
… “main_module_name(…)” was failing when called within bpython; now,
|
|
53
|
+
it’s cool
|
|
54
|
+
… “qualified_import(…)” calls itself recursively when an exception
|
|
55
|
+
is raised during an internal import call – this should mean its
|
|
56
|
+
own error-handling should keep runtime import errors from reaching
|
|
57
|
+
a user when it’s being called correctly (!)
|
|
58
|
+
|
|
59
|
+
* Very slight, and likely premature, optimization. [Alexander Böhn]
|
|
60
|
+
|
|
61
|
+
* Dead code cleanup. [Alexander Böhn]
|
|
62
|
+
|
|
63
|
+
* Don’t want to leave that test-ish line in there. [Alexander Böhn]
|
|
64
|
+
|
|
65
|
+
* A wee bit of error-handling in “clu-ansidocs” [Alexander Böhn]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## v0.12.7 (2025-05-19)
|
|
69
|
+
|
|
70
|
+
### Other
|
|
71
|
+
|
|
72
|
+
* Bumped version: 0.12.6 → 0.12.7. [Alexander Böhn]
|
|
73
|
+
|
|
74
|
+
* [make] New changelog added. [Alexander Böhn]
|
|
75
|
+
|
|
76
|
+
|
|
4
77
|
## v0.12.6 (2025-05-19)
|
|
5
78
|
|
|
6
79
|
### Other
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.9
|
|
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
|
|
@@ -36,7 +36,6 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
37
37
|
License-File: LICENSE.txt
|
|
38
38
|
Requires-Dist: build>=1.2.2
|
|
39
|
-
Requires-Dist: Click>=7.0
|
|
40
39
|
Requires-Dist: colorama>=0.4.0
|
|
41
40
|
Requires-Dist: dataclasses>=0.6; python_version < "3.7"
|
|
42
41
|
Requires-Dist: dbx-stopwatch>=1.6
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.12.9'
|
|
@@ -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')
|
|
@@ -76,10 +76,20 @@ indication that you need to change something, dogg.
|
|
|
76
76
|
|
|
77
77
|
@export
|
|
78
78
|
def main_module_name(basepath=None):
|
|
79
|
+
""" Get the name of the current __main__ module (which may
|
|
80
|
+
very well just be “__main__”), but still.
|
|
81
|
+
"""
|
|
79
82
|
import __main__
|
|
80
|
-
|
|
83
|
+
from clu.predicates import attr
|
|
84
|
+
|
|
85
|
+
# Default:
|
|
86
|
+
if not basepath:
|
|
81
87
|
basepath = BASEPATH
|
|
82
|
-
|
|
88
|
+
|
|
89
|
+
# In some REPLs “__main__.__file__” is not set:
|
|
90
|
+
attribute_name = attr(__main__, '__file__',
|
|
91
|
+
'__spec__.name')
|
|
92
|
+
return path_to_dotpath(attribute_name,
|
|
83
93
|
relative_to=basepath)
|
|
84
94
|
|
|
85
95
|
@export
|
|
@@ -167,12 +177,26 @@ def isnative(thing):
|
|
|
167
177
|
""" isnative(thing) → boolean predicate, True if `thing`
|
|
168
178
|
comes from a native-compiled (“extension”) module.
|
|
169
179
|
"""
|
|
170
|
-
module
|
|
171
|
-
|
|
180
|
+
# Grab the name of the module of the thing:
|
|
181
|
+
module_name = moduleof(thing)
|
|
182
|
+
|
|
183
|
+
# Not native:
|
|
184
|
+
if module_name == 'builtins':
|
|
172
185
|
return False
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
|
176
200
|
|
|
177
201
|
@export
|
|
178
202
|
def isinspectable(thing):
|
|
@@ -225,7 +249,7 @@ def dotpath_split(dotpath):
|
|
|
225
249
|
|
|
226
250
|
@export
|
|
227
251
|
def qualified_import(qualified):
|
|
228
|
-
""" Import a
|
|
252
|
+
""" Import a thing based on its full thing-name.
|
|
229
253
|
e.g. 'instakit.processors.halftone.FloydSteinberg'
|
|
230
254
|
"""
|
|
231
255
|
if QUALIFIER not in qualified:
|
|
@@ -234,7 +258,7 @@ def qualified_import(qualified):
|
|
|
234
258
|
imported = importlib.import_module(qualified)
|
|
235
259
|
except ModuleNotFoundError:
|
|
236
260
|
head, tail = dotpath_split(qualified)
|
|
237
|
-
module =
|
|
261
|
+
module = qualified_import(tail)
|
|
238
262
|
imported = getattr(module, head)
|
|
239
263
|
return imported
|
|
240
264
|
|
|
@@ -243,16 +267,18 @@ def qualified_name_tuple(thing):
|
|
|
243
267
|
""" Get the thing-name and module/package name for a class or module.
|
|
244
268
|
e.g. ('FloydSteinberg', 'instakit.processors.halftone')
|
|
245
269
|
"""
|
|
246
|
-
|
|
270
|
+
from clu.predicates import pyqualname
|
|
271
|
+
return pyqualname(thing) or nameof(thing), \
|
|
272
|
+
moduleof(thing)
|
|
247
273
|
|
|
248
274
|
@export
|
|
249
275
|
def qualified_name(thing):
|
|
250
|
-
""" Get a
|
|
276
|
+
""" Get a full thing-name for a thing.
|
|
251
277
|
e.g. 'instakit.processors.halftone.FloydSteinberg'
|
|
252
278
|
"""
|
|
253
279
|
thing_name, module_name = qualified_name_tuple(thing)
|
|
254
|
-
|
|
255
|
-
return
|
|
280
|
+
fullname = dotpath_join(module_name, thing_name)
|
|
281
|
+
return fullname
|
|
256
282
|
|
|
257
283
|
@export
|
|
258
284
|
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
|
|
@@ -6,12 +6,14 @@ import os
|
|
|
6
6
|
import sys
|
|
7
7
|
import shlex
|
|
8
8
|
|
|
9
|
+
from clu.repl.ansi import DocFormat
|
|
10
|
+
ansidocs = DocFormat()
|
|
11
|
+
|
|
9
12
|
def actually_print_ansidocs(dotpath):
|
|
10
13
|
""" This function prints the ANSI docs directly to standard output,
|
|
11
14
|
formatting accordingly (as in, no ANSI if we can’t ANSI)
|
|
12
15
|
"""
|
|
13
16
|
from clu.naming import qualified_import
|
|
14
|
-
from clu.repl.ansi import DocFormat
|
|
15
17
|
from importlib import import_module
|
|
16
18
|
|
|
17
19
|
# Attempt to import it:
|
|
@@ -19,8 +21,12 @@ def actually_print_ansidocs(dotpath):
|
|
|
19
21
|
thing = qualified_import(dotpath)
|
|
20
22
|
except ValueError:
|
|
21
23
|
thing = import_module(dotpath)
|
|
24
|
+
except AttributeError as error:
|
|
25
|
+
error_string = str(error)
|
|
26
|
+
print(f"[ERROR] {error_string}", file=ansidocs.iohandle)
|
|
27
|
+
sys.exit(os.EX_CONFIG)
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
# This goes directly to stdout:
|
|
24
30
|
ansidocs(thing)
|
|
25
31
|
|
|
26
32
|
def ansidocs_command():
|
|
@@ -35,6 +41,7 @@ def ansidocs_command():
|
|
|
35
41
|
alldotpaths = " ".join(dotpaths)
|
|
36
42
|
print(f"EXECUTABLE: {executable}")
|
|
37
43
|
print(f"DOTPATHS: {alldotpaths}")
|
|
44
|
+
print()
|
|
38
45
|
|
|
39
46
|
# The actual dirty work
|
|
40
47
|
for dotpath in dotpaths:
|
|
@@ -44,6 +51,4 @@ def ansidocs_command():
|
|
|
44
51
|
return os.EX_OK
|
|
45
52
|
|
|
46
53
|
if __name__ == '__main__':
|
|
47
|
-
# sys.argv.append('clu.exporting.Exporter')
|
|
48
|
-
# sys.argv.append('clu.repl.ansi.Text')
|
|
49
54
|
sys.exit(ansidocs_command())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.9
|
|
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
|
|
@@ -36,7 +36,6 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
37
37
|
License-File: LICENSE.txt
|
|
38
38
|
Requires-Dist: build>=1.2.2
|
|
39
|
-
Requires-Dist: Click>=7.0
|
|
40
39
|
Requires-Dist: colorama>=0.4.0
|
|
41
40
|
Requires-Dist: dataclasses>=0.6; python_version < "3.7"
|
|
42
41
|
Requires-Dist: dbx-stopwatch>=1.6
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '0.12.7'
|
|
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
|
|
File without changes
|