python-clu 0.12.4__tar.gz → 0.12.5__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.4 → python_clu-0.12.5}/.bumpversion.toml +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/CHANGELOG.md +73 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/MANIFEST.in +0 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/Makefile +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/PKG-INFO +149 -86
- {python_clu-0.12.4 → python_clu-0.12.5}/README.md +143 -84
- python_clu-0.12.5/clu/__version__.py +1 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/formats/jsonfile.py +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/formats/picklefile.py +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/formats/tomlfile.py +15 -5
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/formats/yamlfile.py +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/exporting.py +1 -3
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/repl.py +0 -2
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/testing/utils.py +2 -10
- {python_clu-0.12.4 → python_clu-0.12.5}/pyproject.toml +5 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/PKG-INFO +149 -86
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/SOURCES.txt +5 -4
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/requires.txt +3 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/install.txt +3 -1
- python_clu-0.12.5/scratch/images/toml-module-rant.jpg +0 -0
- python_clu-0.12.5/setup.cfg +4 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/setup.py +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_config.py +9 -11
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_importing.py +1 -1
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_repl_modules.py +0 -2
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_scripts_repl.py +1 -2
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_typology.py +2 -2
- python_clu-0.12.5/tests/yodogg/yodogg/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/yodogg/yodogg/config.py +4 -4
- python_clu-0.12.4/clu/__version__.py +0 -1
- python_clu-0.12.4/setup.cfg +0 -31
- {python_clu-0.12.4 → python_clu-0.12.5}/.coveragerc +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/.editorconfig +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/.gitchangelog.rc +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/.gitignore +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/.landscape.yml +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/.travis.yml +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/ABOUT.md +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/CLASSIFIERS.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/CLU_Treatment.md +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/CODE_OF_CONDUCT.md +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/LICENSE.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/appveyor.yml +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/__main__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/abstract.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/all.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/api/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/api/__main__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/application.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/compilation/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/compilation/compiledb.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/compilation/macros.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/abc.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/codecs.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/env.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/filebase.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/formats/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/keymap.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/keymapview.py +0 -0
- {python_clu-0.12.4/clu/repl/cli → python_clu-0.12.5/clu/config/legacy}/__init__.py +0 -0
- {python_clu-0.12.4/clu/config → python_clu-0.12.5/clu/config/legacy}/base.py +0 -0
- {python_clu-0.12.4/clu/config → python_clu-0.12.5/clu/config/legacy}/fieldtypes.py +0 -0
- {python_clu-0.12.4/clu/config → python_clu-0.12.5/clu/config/legacy}/settings.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/ns.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/config/proxy.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/__main__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/consts.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/data.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/enums.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/exceptions.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/constants/polyfills.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/csv.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/dicts.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/dispatch.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/enums.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/extending.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/abc.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/appdirectories.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/filesystem.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/misc.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/pypath.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/fs/sourcetree.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/importing/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/importing/__main__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/importing/base.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/importing/proxy.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/keyvalue.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/mathematics.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/naming.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/predicates.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/ansi.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/banners.py +0 -0
- {python_clu-0.12.4/clu/scripts → python_clu-0.12.5/clu/repl/cli}/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/cli/boilerplate.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/cli/boilerplate_copy.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/cli/print_version.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/columnize.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repl/modules.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/repr.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/sanitizer.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/.gitignore +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/README.md +0 -0
- {python_clu-0.12.4/clu/shelving → python_clu-0.12.5/clu/scripts}/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/ansicolors.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/boilerplate.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/dictroast.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/legacy/forkumask.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/legacy/repl-bpython.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/legacy/repl-ipython.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/legacy/repl-ptpython.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/legacy/repl-pyzo.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/legacy/xdg-runtime.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/prediversus.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/scripts/treeline.py +0 -0
- {python_clu-0.12.4/tests → python_clu-0.12.5/clu/shelving}/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/shelving/redat.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/shelving/redis.conf +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/stdio.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/testing/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/testing/hook.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/testing/obsolete.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/testing/pytest.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/typespace/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/typespace/__main__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/typespace/namespace.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/typology.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/version/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/version/__main__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/version/git_version.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/clu/version/read_version.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/codecov.yml +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/conftest.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/.DS_Store +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/Makefile +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/doctrees/api.doctree +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/doctrees/environment.pickle +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/doctrees/generated/clu.doctree +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/doctrees/index.doctree +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/.buildinfo +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_sources/api.rst.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_sources/index.rst.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/alabaster.css +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/basic.css +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/badge_only.css +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/css/theme.css +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/custom.css +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/doctools.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/documentation_options.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/file.png +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/jquery-3.6.0.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/jquery.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/js/badge_only.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/js/html5shiv.min.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/js/theme.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/language_data.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/minus.png +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/plus.png +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/pygments.css +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/searchtools.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/underscore-1.13.1.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/_static/underscore.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/api.html +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/generated/clu.html +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/genindex.html +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/index.html +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/objects.inv +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/py-modindex.html +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/search.html +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/html/searchindex.js +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/build/man/clu.1 +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/make.bat +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/source/api.rst +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/source/conf.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/source/generated/clu.rst +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/docs/source/index.rst +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/autohook.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/post-push/00-coverage.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/pre-push/00-noop.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/scripts/coverage.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/scripts/display-issues.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/scripts/git-pushex +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/hooks/scripts/noop.sh +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/mypy.ini +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/noxfile.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/pytest.ini +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/dependency_links.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/entry_points.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/top_level.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/python_clu.egg-info/zip-safe +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/pytype.cfg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/changelog.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/dev.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/docs.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/nox/codecov.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/nox/docs.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/nox/manifest.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/nox/pyproject.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/nox/repl.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/nox/tests.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/tox.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/requirements/typecheck.txt +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/direnv_transformed_env.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/clu-module-list-example-small.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/clu-module-list-example.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/clu-module-list-example.pxd +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/clu-testing-time-totals-example-small.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/clu-testing-time-totals-example.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/clu-testing-time-totals-example.pxd +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/construx-and-capsela-small.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/construx-and-capsela.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/images/construx-and-capsela.pxd +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/scratch/nteract.ipynb +0 -0
- {python_clu-0.12.4/tests/yodogg → python_clu-0.12.5/tests}/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/1-58.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/8600JC.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/8ba.png +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/IMG_20180505_205153567.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/cheetah-003.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/config/clu-config.toml +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/config/yodogg.toml +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/shutterstock_90194617.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/data/yodogg/video-pride-serval.jpg +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_abstract.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_all.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_boilerplate.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_config_abc.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_csv.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_dicts.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_dispatch.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_enum_aliases.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_exporting.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_extending.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_fs_abc.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_fs_appdirectories.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_fs_filesystem.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_fs_misc.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_keyvalue.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_mathematics.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_naming.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_predicates.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_repl_columnize.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_repr.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_typespace_namespace.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/test_version.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/yodogg/.tm_properties +0 -0
- {python_clu-0.12.4/tests/yodogg → python_clu-0.12.5/tests}/yodogg/__init__.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/yodogg/yodogg/exporting.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tests/yodogg/yodogg/iheard.py +0 -0
- {python_clu-0.12.4 → python_clu-0.12.5}/tox.ini +0 -0
|
@@ -1,7 +1,75 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
## 0.12.
|
|
4
|
+
## 0.12.4:pre12+g6e128ac [SNAPSHOT]
|
|
5
|
+
|
|
6
|
+
### Add
|
|
7
|
+
|
|
8
|
+
* Adding TOML module discussion screenshot. [Alexander Böhn]
|
|
9
|
+
|
|
10
|
+
### Other
|
|
11
|
+
|
|
12
|
+
* Starting to remove the legacy parts of `clu.config` [Alexander Böhn]
|
|
13
|
+
|
|
14
|
+
… fucking finally. These bits were an early draft of what became
|
|
15
|
+
the KeyMap system – they’ve been removed thoroughly from all the
|
|
16
|
+
farthest and darkest corners CLU has grown over the years. All
|
|
17
|
+
the legacy shit was pretty much only used in testing, and like
|
|
18
|
+
accedentally in some of the config file stuff. Good riddance I
|
|
19
|
+
say – the only thing that broke is a bunch of tests as old as the
|
|
20
|
+
legacy code itself. Yeah!
|
|
21
|
+
|
|
22
|
+
* Updated the TOML file config reader (using native parsers) [Alexander Böhn]
|
|
23
|
+
|
|
24
|
+
… which can I ask, what the fuck is this dog’s breakfast with the
|
|
25
|
+
native TOML modules?! The standard-library pure-python thing is
|
|
26
|
+
just called “toml”. Fine, so far so good. Then, if you want
|
|
27
|
+
native TOML I/O, you have to install *two* native modules. The
|
|
28
|
+
one with “load(…)” and “loads(…)” is called ‘tomli’. Like, it’s
|
|
29
|
+
like “The ‘i’ is for input! Like accelerated input!” Sure. That’s
|
|
30
|
+
somewhat reasonable, it’d be nice if it was all in one module.
|
|
31
|
+
Because the other TOML native module has your “dump(…)” and your
|
|
32
|
+
“dumps(…)”, right, so what’s that one called though? Is it, by any
|
|
33
|
+
chance, ‘tomlo’? as in “The ‘o’ is for output”. Well no, that is
|
|
34
|
+
not the name of this module. In some sort of fit of solidarity
|
|
35
|
+
with ‘tomli’ the author of this shit decided to call it – wait
|
|
36
|
+
for it now…
|
|
37
|
+
|
|
38
|
+
« tomli_w »
|
|
39
|
+
|
|
40
|
+
… yes you read that correctly. Not ‘tomlo’, not ‘tomlw’, none of
|
|
41
|
+
any sort of sense-making moniker, nor any moniker that doesn’t
|
|
42
|
+
make sense but at least was crafted with some sort of follow-able
|
|
43
|
+
logic. Nor, heaven forbid, would these modules be *combined* into
|
|
44
|
+
something sort of like the pure-python TOML thing, only native.
|
|
45
|
+
THAT WOULD BE WAY TOO MUCH TO ASK.
|
|
46
|
+
|
|
47
|
+
… so of course I did what I did in this commit, which was to firstly
|
|
48
|
+
import ‘tomli_w’ (The ‘w’ is for whatever!) as ‘tomlo’. And then
|
|
49
|
+
I stitched them together in a class called “toml” (crazy, right?)
|
|
50
|
+
that just had static alias methods to the native module functions.
|
|
51
|
+
Aesthetics are important, and they ain’t easy, it would seem. Yo.
|
|
52
|
+
|
|
53
|
+
* Sometimes, I prefer to ask permission first. [Alexander Böhn]
|
|
54
|
+
|
|
55
|
+
* Removed `setup.cfg` entry from `MANIFEST.in` [Alexander Böhn]
|
|
56
|
+
|
|
57
|
+
* Minor `README.md` tweak. [Alexander Böhn]
|
|
58
|
+
|
|
59
|
+
* Updated `README.md` with information on `clu.enums` and `clu.all` [Alexander Böhn]
|
|
60
|
+
|
|
61
|
+
* EVEN MORE syntax-highlighted `README.md` code. [Alexander Böhn]
|
|
62
|
+
|
|
63
|
+
* More syntax-highlighted `README.md` code. [Alexander Böhn]
|
|
64
|
+
|
|
65
|
+
* Trying out syntax-highlighted fenced code block in `README.md` [Alexander Böhn]
|
|
66
|
+
|
|
67
|
+
* A few more addenda in `pyproject.toml` [Alexander Böhn]
|
|
68
|
+
|
|
69
|
+
* Removed the old `setup.cfg` file. [Alexander Böhn]
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
## v0.12.4 (2025-05-19)
|
|
5
73
|
|
|
6
74
|
### Add
|
|
7
75
|
|
|
@@ -11,6 +79,10 @@
|
|
|
11
79
|
|
|
12
80
|
### Other
|
|
13
81
|
|
|
82
|
+
* Bumped version: 0.12.3 → 0.12.4. [Alexander Böhn]
|
|
83
|
+
|
|
84
|
+
* [make] New changelog added. [Alexander Böhn]
|
|
85
|
+
|
|
14
86
|
* More refinements to the whole `pyproject.toml` deal. [Alexander Böhn]
|
|
15
87
|
|
|
16
88
|
* Fixed a few `pyproject.toml` build-related things. [Alexander Böhn]
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-clu
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.5
|
|
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
|
|
7
7
|
Author: Alexander Böhn
|
|
8
8
|
Author-email: Alexander Böhn <fish2000@gmail.com>
|
|
9
|
+
Maintainer-email: Alexander Böhn <fish2000@gmail.com>
|
|
10
|
+
License-Expression: LicenseRef-CLU-MIT
|
|
9
11
|
Project-URL: homepage, https://github.com/fish2000/CLU
|
|
10
12
|
Project-URL: repository, https://github.com/fish2000/CLU
|
|
11
13
|
Project-URL: documentation, https://github.com/fish2000/CLU/blob/master/README.md
|
|
@@ -33,7 +35,7 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
|
33
35
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
34
36
|
Description-Content-Type: text/markdown
|
|
35
37
|
License-File: LICENSE.txt
|
|
36
|
-
Requires-Dist: build
|
|
38
|
+
Requires-Dist: build>=1.2.2
|
|
37
39
|
Requires-Dist: Click>=7.0
|
|
38
40
|
Requires-Dist: colorama>=0.4.0
|
|
39
41
|
Requires-Dist: dataclasses>=0.6; python_version < "3.7"
|
|
@@ -52,6 +54,8 @@ Requires-Dist: redis>=3.4.0
|
|
|
52
54
|
Requires-Dist: setuptools>=30.0.0
|
|
53
55
|
Requires-Dist: six>=1.10.0
|
|
54
56
|
Requires-Dist: toml>=0.10.0
|
|
57
|
+
Requires-Dist: tomli>=2.2.0
|
|
58
|
+
Requires-Dist: tomli_w>=1.2.0
|
|
55
59
|
Requires-Dist: wheel>=0.34.0
|
|
56
60
|
Requires-Dist: zict>=0.1.2
|
|
57
61
|
Provides-Extra: all
|
|
@@ -116,20 +120,24 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
116
120
|
around lexically namespaced dictionaries called “KeyMaps”, which basic examples of which can be
|
|
117
121
|
found in [`clu.config.keymap`][clu.config.keymap]. If your nested data looks like:
|
|
118
122
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
```python
|
|
124
|
+
data = {
|
|
125
|
+
'yo' : {
|
|
126
|
+
'dogg' : {
|
|
127
|
+
'i-heard' : {
|
|
128
|
+
'you-like' : "nested data"
|
|
125
129
|
}
|
|
126
130
|
}
|
|
127
131
|
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
128
134
|
|
|
129
135
|
… and you assign it to a keymap, like e.g. `keyed = keymap.Nested(data).flatten()`, then you can
|
|
130
136
|
use `keyed` like so:
|
|
131
137
|
|
|
132
|
-
|
|
138
|
+
```python
|
|
139
|
+
assert keyed["yo:dogg:i-heard:you-like"] == "nested data"
|
|
140
|
+
```
|
|
133
141
|
|
|
134
142
|
… The `Flat` and `Nested` classes are cheap to construct and lightweight, and generally act like most
|
|
135
143
|
[`dict`][dicts] instances in most of the expected ways. There is also an environment-variable [`keymap`][clu.config.keymap]
|
|
@@ -137,10 +145,12 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
137
145
|
`MYAPP_CONFIG_THINGY`, they can be accessed through `env.FrozenEnviron(appname='myapp')` or
|
|
138
146
|
`env.Environ(appname='myapp')` like so:
|
|
139
147
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
```python
|
|
149
|
+
appenv = Environ(appname='myapp')
|
|
150
|
+
assert appenv['config:thingy'] == "some value"
|
|
151
|
+
appenv['config:doohickey'] = "a different value" # sets MYAPP_CONFIG_DOOHICKEY
|
|
152
|
+
# in the current env
|
|
153
|
+
```
|
|
144
154
|
|
|
145
155
|
… and there are plenty of tools for rolling your own `KeyMap`s in [`clu.config`][clu.config]: the
|
|
146
156
|
[`proxy`][clu.config.proxy] subpackage has a `KeyMap` proxy class, [`ns`][clu.config.ns] has utility functions
|
|
@@ -153,6 +163,15 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
153
163
|
[polyfills][clu.constants.polyfills] to allow certain dependencies from the Python standard library to work even
|
|
154
164
|
when some of their moving parts are missing (i.e. Ye Olde Pythone 2.7, various PyPy implementations, etc).
|
|
155
165
|
|
|
166
|
+
* [`all`][clu.all]: Herein you will find some verrrrry interesting “meta” functions for CLU. You have the `import_all_modules(…)`
|
|
167
|
+
function, which when provided your projects’ base path and appname, will return all the package names therein,
|
|
168
|
+
whether class-based modules defined through [`clu.exporting`][clu.exporting] or plain ol’ modules defined by files
|
|
169
|
+
ending in “.py”, basically. It’s awesome.
|
|
170
|
+
|
|
171
|
+
The companion function `import_clu_modules(¬)` is a shortcut just for everything within CLU, and `inline_tests(…)`
|
|
172
|
+
yields an iterator over every CLU module that defines inline tests through [`clu.testing`][clu.testing]. These
|
|
173
|
+
are very useful within CLU; for your own project, write your own functions modeled after these! You can’t go wrong.
|
|
174
|
+
|
|
156
175
|
* [`fs`][clu.fs]: Filesystem-related things. Submodules include:
|
|
157
176
|
|
|
158
177
|
* [`fs.filesystem`][clu.fs.filesystem]: classes representing filesystem primitives like `Directory`,
|
|
@@ -177,28 +196,30 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
177
196
|
|
|
178
197
|
* [`importing`][clu.importing]: a whole class-based-module system! Basically you can do this:
|
|
179
198
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
199
|
+
```python
|
|
200
|
+
class Derived(clu.importing.base.Module):
|
|
201
|
+
|
|
202
|
+
""" I heard you like docstrings """
|
|
203
|
+
|
|
204
|
+
yo = 'dogg'
|
|
205
|
+
|
|
206
|
+
@export
|
|
207
|
+
def yodogg(self):
|
|
208
|
+
return "I heard you like"
|
|
209
|
+
|
|
210
|
+
@export
|
|
211
|
+
def nodogg(self):
|
|
212
|
+
return None
|
|
213
|
+
|
|
214
|
+
export(yo, name='yo')
|
|
215
|
+
|
|
216
|
+
from clu.app import Derived as derived # TAKE NOTE!!!
|
|
217
|
+
|
|
218
|
+
assert isinstance(derived, Module)
|
|
219
|
+
assert derived.yo == 'dogg'
|
|
220
|
+
assert derived.yodogg() == "I heard you like"
|
|
221
|
+
assert derived.nodogg() is None
|
|
222
|
+
```
|
|
202
223
|
|
|
203
224
|
… see that? just by subclassing [`clu.importing.base.Module`][clu.importing.base] you can create something
|
|
204
225
|
instantly importable. Awesome, wouldn’t you say? I would say. We’re working out the best way to create the
|
|
@@ -214,7 +235,9 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
214
235
|
|
|
215
236
|
[`clu.scripts`][clu.scripts] contains a [“repl.py”][clu.scripts.repl] file, which is meant to be loaded into an interactive interpreter like e.g.:
|
|
216
237
|
|
|
217
|
-
|
|
238
|
+
```bash
|
|
239
|
+
$ bpython -i «PATH_TO_CLU»/clu/scripts/repl.py
|
|
240
|
+
```
|
|
218
241
|
|
|
219
242
|
… which will set all of CLU up for you to use interactively. N.B. if you have your own script you want to include
|
|
220
243
|
but stil want to use CLU, you can set the `CLU_USER_SCRIPT` environment variable to the path to your own script,
|
|
@@ -235,6 +258,34 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
235
258
|
there at the end. ALSO, there are additional useful types, from Python’s standard library and common packages,
|
|
236
259
|
in the [`types` namespace][clu.typespace.namespace]. YOU’RE WELCOME!!
|
|
237
260
|
|
|
261
|
+
* [`enums`][clu.enums]: Furnishes `alias(…)` – which, spoiler alert, let you create aliases within your enums!
|
|
262
|
+
Oh yes. Like so:
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
|
|
266
|
+
from clu.enums import alias
|
|
267
|
+
|
|
268
|
+
@unique
|
|
269
|
+
class Numbers(Enum):
|
|
270
|
+
ONE = 1
|
|
271
|
+
TWO = 2
|
|
272
|
+
THREE = 3
|
|
273
|
+
UNO = alias(ONE)
|
|
274
|
+
DOS = alias(TWO)
|
|
275
|
+
TRÉS = alias(THREE)
|
|
276
|
+
|
|
277
|
+
assert Numbers.ONE == Numbers.UNO
|
|
278
|
+
assert Numbers.TWO == Numbers.DOS
|
|
279
|
+
assert Numbers.THREE == Numbers.TRÉS
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
… aaaaand BOOM, there you go! The `alias` members of an enum don’t show up when iterating the
|
|
284
|
+
enum’s members, so they’re for your convenience. For a fantastic CLUish real-life example, have a look at
|
|
285
|
+
the [`clu.repl.ansi`][clu.repl.ansi] module, and [the enums it defines][clu.repl.ansi.enums] – these use a metaclass
|
|
286
|
+
to line the enum’s standard members up with some predefined class attributes defined in a third-party module;
|
|
287
|
+
we use `alias(…)` to provide more obvious lexical aliases of these attributes. Yes!
|
|
288
|
+
|
|
238
289
|
* [`dicts`][clu.dicts]: Functions and classes for wrangling [`dict`s][dicts] (and actually [`Mapping`][collections.abc.Mapping]
|
|
239
290
|
and [`MutableMapping`][collections.abc.MutableMapping] descendants in general). There are ABCs for
|
|
240
291
|
key/value/item views for your own mappings, a much better `ChainMap`, written from scratch and improving
|
|
@@ -244,29 +295,34 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
244
295
|
* [`exporting`][clu.exporting]: This is kind of the heart of CLU. At the beginning of all internal CLU modules, you’ll find something
|
|
245
296
|
using the `Exporter`, like this:
|
|
246
297
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
exporter = Exporter(path=__file__)
|
|
250
|
-
export = exporter.decorator()
|
|
298
|
+
```python
|
|
299
|
+
from clu.exporting import Exporter
|
|
251
300
|
|
|
301
|
+
exporter = Exporter(path=__file__)
|
|
302
|
+
export = exporter.decorator()
|
|
303
|
+
```
|
|
252
304
|
… which I know, I know, the use of `__file__` there is kind of irritating. But that `exporter` instance is now
|
|
253
305
|
registered with CLU, and whenever there’s a class or function you want made available outside the module,
|
|
254
306
|
you can specify it like:
|
|
255
307
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
308
|
+
```python
|
|
309
|
+
@export
|
|
310
|
+
def public_function():
|
|
311
|
+
print("I’m so public")
|
|
312
|
+
|
|
313
|
+
class PrivateAncestor:
|
|
314
|
+
""" I’m more private, don’t play with me """
|
|
315
|
+
|
|
316
|
+
@export
|
|
317
|
+
class PublicThing(PrivateAncestor):
|
|
318
|
+
""" I’m very public, indeed, and available """
|
|
319
|
+
```
|
|
266
320
|
|
|
267
321
|
At the end of the module (but before your CLU tests, q.v. note _sub_.) you put:
|
|
268
322
|
|
|
269
|
-
|
|
323
|
+
```python
|
|
324
|
+
__all__, __dir__ = exporter.all_and_dir()
|
|
325
|
+
```
|
|
270
326
|
|
|
271
327
|
… which makes things clear what is public and what is private to consumers of your code, without messing
|
|
272
328
|
around with underscore prefixes, which I find coarse, and vulgar. You’re not just labeling things for export,
|
|
@@ -277,8 +333,10 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
277
333
|
For your own project, at some part in your code, all you have to do is: `from clu.exporting import ExporterBase`,
|
|
278
334
|
and then subclass `ExporterBase` with your app’s name and base path. Like so:
|
|
279
335
|
|
|
280
|
-
|
|
281
|
-
|
|
336
|
+
```python
|
|
337
|
+
class Exporter(ExporterBase, basepath="/your/project", appname="MyProject"):
|
|
338
|
+
pass
|
|
339
|
+
```
|
|
282
340
|
|
|
283
341
|
… then import your own importer (or call it whatever you want) at the top of your own CLUish modules and
|
|
284
342
|
instantiate per the example _supra_. See also [`clu.scripts.dictroast`][clu.scripts.dictroast] for other tricks your
|
|
@@ -288,38 +346,40 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
288
346
|
[`pytest`][pytest-link] – all you have to do is, after your line assigning `__all__` and `__dir__` at the end
|
|
289
347
|
of the module proper, something like:
|
|
290
348
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
349
|
+
```python
|
|
350
|
+
def test():
|
|
351
|
+
from clu.testing.utils import inline
|
|
352
|
+
|
|
353
|
+
@inline.precheck
|
|
354
|
+
def before_everything_else():
|
|
355
|
+
""" This function runs once before testing """
|
|
356
|
+
# ...
|
|
357
|
+
|
|
358
|
+
@inline
|
|
359
|
+
def first_test():
|
|
360
|
+
""" This test does one thing """
|
|
361
|
+
# ...
|
|
362
|
+
|
|
363
|
+
@inline
|
|
364
|
+
def second_test():
|
|
365
|
+
""" This test does another thing """
|
|
366
|
+
# ...
|
|
367
|
+
|
|
368
|
+
@inline.runif(something == something_else)
|
|
369
|
+
def test_conditionally_run():
|
|
370
|
+
""" This test only does something if `something` == `something_else` """
|
|
371
|
+
# ...
|
|
372
|
+
|
|
373
|
+
@inline.diagnostic
|
|
374
|
+
def apres_testing():
|
|
375
|
+
""" This function runs once after testing """
|
|
376
|
+
# ...
|
|
377
|
+
|
|
378
|
+
return inline.test(100)
|
|
379
|
+
|
|
380
|
+
if __name__ == '__main__':
|
|
381
|
+
sys.exit(test())
|
|
382
|
+
```
|
|
323
383
|
|
|
324
384
|
… running the module (with either `python -m yourapp.yourmodule` or, say, [Nox][nox-link]) will show
|
|
325
385
|
you each tests’ output. But see that `return inline.test(100)` line? That integer argument tells
|
|
@@ -345,7 +405,9 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
345
405
|
“qualified names” – for instance, you can use `naming.qualified_import(…)` to import a class [`CurveSet`][instakit.processors.curves.CurveSet]
|
|
346
406
|
from its package [`instakit.processors.curves`][instakit.processors.curves] by doing:
|
|
347
407
|
|
|
348
|
-
|
|
408
|
+
```python
|
|
409
|
+
CurveSet = qualified_import('instakit.processors.curves.CurveSet')
|
|
410
|
+
```
|
|
349
411
|
|
|
350
412
|
… which that may be handier for you than composing and hard-coding an `import` statement. See also the
|
|
351
413
|
`nameof(…)` and `moduleof(…)` functions, and the utility functions (e.g. `qualified_name(…)`) and
|
|
@@ -456,6 +518,7 @@ So do have a look around. Here’s an abridged breakdown of some things within:
|
|
|
456
518
|
|
|
457
519
|
[clu.repl]: https://github.com/fish2000/CLU/tree/master/clu/repl
|
|
458
520
|
[clu.repl.ansi]: https://github.com/fish2000/CLU/tree/master/clu/repl/ansi.py
|
|
521
|
+
[clu.repl.ansi.enums]: https://github.com/fish2000/CLU/blob/c5be3edcea7774b0d042b13125458fef6bd8a303/clu/repl/ansi.py#L150-L222
|
|
459
522
|
[clu.repl.banners]: https://github.com/fish2000/CLU/tree/master/clu/repl/banners.py
|
|
460
523
|
[clu.repl.columnize]: https://github.com/fish2000/CLU/tree/master/clu/repl/columnize.py
|
|
461
524
|
[clu.repl.modules]: https://github.com/fish2000/CLU/tree/master/clu/repl/modules.py
|