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.
Files changed (283) hide show
  1. {python_clu-0.12.7 → python_clu-0.12.9}/.bumpversion.toml +1 -1
  2. {python_clu-0.12.7 → python_clu-0.12.9}/CHANGELOG.md +73 -0
  3. {python_clu-0.12.7 → python_clu-0.12.9}/PKG-INFO +1 -2
  4. python_clu-0.12.9/clu/__version__.py +1 -0
  5. {python_clu-0.12.7 → python_clu-0.12.9}/clu/api/__init__.py +1 -21
  6. {python_clu-0.12.7 → python_clu-0.12.9}/clu/enums.py +14 -12
  7. {python_clu-0.12.7 → python_clu-0.12.9}/clu/naming.py +39 -13
  8. {python_clu-0.12.7 → python_clu-0.12.9}/clu/predicates.py +5 -3
  9. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/ansi.py +5 -6
  10. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/ansidocs.py +9 -4
  11. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/print_version.py +0 -1
  12. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/PKG-INFO +1 -2
  13. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/requires.txt +0 -1
  14. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/install.txt +0 -1
  15. {python_clu-0.12.7 → python_clu-0.12.9}/setup.py +1 -1
  16. python_clu-0.12.7/clu/__version__.py +0 -1
  17. {python_clu-0.12.7 → python_clu-0.12.9}/.coveragerc +0 -0
  18. {python_clu-0.12.7 → python_clu-0.12.9}/.editorconfig +0 -0
  19. {python_clu-0.12.7 → python_clu-0.12.9}/.gitchangelog.rc +0 -0
  20. {python_clu-0.12.7 → python_clu-0.12.9}/.gitignore +0 -0
  21. {python_clu-0.12.7 → python_clu-0.12.9}/.landscape.yml +0 -0
  22. {python_clu-0.12.7 → python_clu-0.12.9}/.travis.yml +0 -0
  23. {python_clu-0.12.7 → python_clu-0.12.9}/ABOUT.md +0 -0
  24. {python_clu-0.12.7 → python_clu-0.12.9}/CLASSIFIERS.txt +0 -0
  25. {python_clu-0.12.7 → python_clu-0.12.9}/CLU_Treatment.md +0 -0
  26. {python_clu-0.12.7 → python_clu-0.12.9}/CODE_OF_CONDUCT.md +0 -0
  27. {python_clu-0.12.7 → python_clu-0.12.9}/LICENSE.txt +0 -0
  28. {python_clu-0.12.7 → python_clu-0.12.9}/MANIFEST.in +0 -0
  29. {python_clu-0.12.7 → python_clu-0.12.9}/Makefile +0 -0
  30. {python_clu-0.12.7 → python_clu-0.12.9}/README.md +0 -0
  31. {python_clu-0.12.7 → python_clu-0.12.9}/appveyor.yml +0 -0
  32. {python_clu-0.12.7 → python_clu-0.12.9}/clu/__init__.py +0 -0
  33. {python_clu-0.12.7 → python_clu-0.12.9}/clu/__main__.py +0 -0
  34. {python_clu-0.12.7 → python_clu-0.12.9}/clu/abstract.py +0 -0
  35. {python_clu-0.12.7 → python_clu-0.12.9}/clu/all.py +0 -0
  36. {python_clu-0.12.7 → python_clu-0.12.9}/clu/api/__main__.py +0 -0
  37. {python_clu-0.12.7 → python_clu-0.12.9}/clu/application.py +0 -0
  38. {python_clu-0.12.7 → python_clu-0.12.9}/clu/compilation/__init__.py +0 -0
  39. {python_clu-0.12.7 → python_clu-0.12.9}/clu/compilation/compiledb.py +0 -0
  40. {python_clu-0.12.7 → python_clu-0.12.9}/clu/compilation/macros.py +0 -0
  41. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/__init__.py +0 -0
  42. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/abc.py +0 -0
  43. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/codecs.py +0 -0
  44. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/env.py +0 -0
  45. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/filebase.py +0 -0
  46. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/__init__.py +0 -0
  47. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/jsonfile.py +0 -0
  48. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/picklefile.py +0 -0
  49. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/tomlfile.py +0 -0
  50. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/formats/yamlfile.py +0 -0
  51. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/keymap.py +0 -0
  52. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/keymapview.py +0 -0
  53. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/__init__.py +0 -0
  54. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/base.py +0 -0
  55. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/fieldtypes.py +0 -0
  56. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/legacy/settings.py +0 -0
  57. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/ns.py +0 -0
  58. {python_clu-0.12.7 → python_clu-0.12.9}/clu/config/proxy.py +0 -0
  59. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/__init__.py +0 -0
  60. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/__main__.py +0 -0
  61. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/consts.py +0 -0
  62. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/data.py +0 -0
  63. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/enums.py +0 -0
  64. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/exceptions.py +0 -0
  65. {python_clu-0.12.7 → python_clu-0.12.9}/clu/constants/polyfills.py +0 -0
  66. {python_clu-0.12.7 → python_clu-0.12.9}/clu/csv.py +0 -0
  67. {python_clu-0.12.7 → python_clu-0.12.9}/clu/dicts.py +0 -0
  68. {python_clu-0.12.7 → python_clu-0.12.9}/clu/dispatch.py +0 -0
  69. {python_clu-0.12.7 → python_clu-0.12.9}/clu/exporting.py +0 -0
  70. {python_clu-0.12.7 → python_clu-0.12.9}/clu/extending.py +0 -0
  71. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/__init__.py +0 -0
  72. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/abc.py +0 -0
  73. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/appdirectories.py +0 -0
  74. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/filesystem.py +0 -0
  75. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/misc.py +0 -0
  76. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/pypath.py +0 -0
  77. {python_clu-0.12.7 → python_clu-0.12.9}/clu/fs/sourcetree.py +0 -0
  78. {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/__init__.py +0 -0
  79. {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/__main__.py +0 -0
  80. {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/base.py +0 -0
  81. {python_clu-0.12.7 → python_clu-0.12.9}/clu/importing/proxy.py +0 -0
  82. {python_clu-0.12.7 → python_clu-0.12.9}/clu/keyvalue.py +0 -0
  83. {python_clu-0.12.7 → python_clu-0.12.9}/clu/mathematics.py +0 -0
  84. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/__init__.py +0 -0
  85. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/banners.py +0 -0
  86. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/__init__.py +0 -0
  87. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/boilerplate.py +0 -0
  88. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/cli/boilerplate_copy.py +0 -0
  89. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/columnize.py +0 -0
  90. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repl/modules.py +0 -0
  91. {python_clu-0.12.7 → python_clu-0.12.9}/clu/repr.py +0 -0
  92. {python_clu-0.12.7 → python_clu-0.12.9}/clu/sanitizer.py +0 -0
  93. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/.gitignore +0 -0
  94. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/README.md +0 -0
  95. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/__init__.py +0 -0
  96. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/ansicolors.py +0 -0
  97. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/boilerplate.py +0 -0
  98. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/dictroast.py +0 -0
  99. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/forkumask.py +0 -0
  100. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-bpython.py +0 -0
  101. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-ipython.py +0 -0
  102. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-ptpython.py +0 -0
  103. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/repl-pyzo.py +0 -0
  104. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/legacy/xdg-runtime.py +0 -0
  105. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/prediversus.py +0 -0
  106. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/repl.py +0 -0
  107. {python_clu-0.12.7 → python_clu-0.12.9}/clu/scripts/treeline.py +0 -0
  108. {python_clu-0.12.7 → python_clu-0.12.9}/clu/shelving/__init__.py +0 -0
  109. {python_clu-0.12.7 → python_clu-0.12.9}/clu/shelving/redat.py +0 -0
  110. {python_clu-0.12.7 → python_clu-0.12.9}/clu/shelving/redis.conf +0 -0
  111. {python_clu-0.12.7 → python_clu-0.12.9}/clu/stdio.py +0 -0
  112. {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/__init__.py +0 -0
  113. {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/hook.py +0 -0
  114. {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/obsolete.py +0 -0
  115. {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/pytest.py +0 -0
  116. {python_clu-0.12.7 → python_clu-0.12.9}/clu/testing/utils.py +0 -0
  117. {python_clu-0.12.7 → python_clu-0.12.9}/clu/typespace/__init__.py +0 -0
  118. {python_clu-0.12.7 → python_clu-0.12.9}/clu/typespace/__main__.py +0 -0
  119. {python_clu-0.12.7 → python_clu-0.12.9}/clu/typespace/namespace.py +0 -0
  120. {python_clu-0.12.7 → python_clu-0.12.9}/clu/typology.py +0 -0
  121. {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/__init__.py +0 -0
  122. {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/__main__.py +0 -0
  123. {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/git_version.py +0 -0
  124. {python_clu-0.12.7 → python_clu-0.12.9}/clu/version/read_version.py +0 -0
  125. {python_clu-0.12.7 → python_clu-0.12.9}/codecov.yml +0 -0
  126. {python_clu-0.12.7 → python_clu-0.12.9}/conftest.py +0 -0
  127. {python_clu-0.12.7 → python_clu-0.12.9}/docs/.DS_Store +0 -0
  128. {python_clu-0.12.7 → python_clu-0.12.9}/docs/Makefile +0 -0
  129. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/api.doctree +0 -0
  130. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/environment.pickle +0 -0
  131. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/generated/clu.doctree +0 -0
  132. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/doctrees/index.doctree +0 -0
  133. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/.buildinfo +0 -0
  134. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_sources/api.rst.txt +0 -0
  135. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
  136. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_sources/index.rst.txt +0 -0
  137. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  138. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/alabaster.css +0 -0
  139. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/basic.css +0 -0
  140. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/badge_only.css +0 -0
  141. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  142. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  143. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  144. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  145. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  146. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  147. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  148. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  149. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  150. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  151. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  152. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  153. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  154. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  155. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  156. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  157. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  158. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/css/theme.css +0 -0
  159. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/custom.css +0 -0
  160. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/doctools.js +0 -0
  161. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/documentation_options.js +0 -0
  162. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/file.png +0 -0
  163. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  164. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/jquery.js +0 -0
  165. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/badge_only.js +0 -0
  166. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  167. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  168. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/js/theme.js +0 -0
  169. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/language_data.js +0 -0
  170. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/minus.png +0 -0
  171. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/plus.png +0 -0
  172. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/pygments.css +0 -0
  173. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/searchtools.js +0 -0
  174. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  175. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/_static/underscore.js +0 -0
  176. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/api.html +0 -0
  177. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/generated/clu.html +0 -0
  178. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/genindex.html +0 -0
  179. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/index.html +0 -0
  180. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/objects.inv +0 -0
  181. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/py-modindex.html +0 -0
  182. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/search.html +0 -0
  183. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/html/searchindex.js +0 -0
  184. {python_clu-0.12.7 → python_clu-0.12.9}/docs/build/man/clu.1 +0 -0
  185. {python_clu-0.12.7 → python_clu-0.12.9}/docs/make.bat +0 -0
  186. {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/api.rst +0 -0
  187. {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/conf.py +0 -0
  188. {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/generated/clu.rst +0 -0
  189. {python_clu-0.12.7 → python_clu-0.12.9}/docs/source/index.rst +0 -0
  190. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/autohook.sh +0 -0
  191. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/post-push/00-coverage.sh +0 -0
  192. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/pre-push/00-noop.sh +0 -0
  193. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
  194. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/coverage.sh +0 -0
  195. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/display-issues.sh +0 -0
  196. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/git-pushex +0 -0
  197. {python_clu-0.12.7 → python_clu-0.12.9}/hooks/scripts/noop.sh +0 -0
  198. {python_clu-0.12.7 → python_clu-0.12.9}/mypy.ini +0 -0
  199. {python_clu-0.12.7 → python_clu-0.12.9}/noxfile.py +0 -0
  200. {python_clu-0.12.7 → python_clu-0.12.9}/pyproject.toml +0 -0
  201. {python_clu-0.12.7 → python_clu-0.12.9}/pytest.ini +0 -0
  202. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/SOURCES.txt +0 -0
  203. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/dependency_links.txt +0 -0
  204. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/entry_points.txt +0 -0
  205. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/top_level.txt +0 -0
  206. {python_clu-0.12.7 → python_clu-0.12.9}/python_clu.egg-info/zip-safe +0 -0
  207. {python_clu-0.12.7 → python_clu-0.12.9}/pytype.cfg +0 -0
  208. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/changelog.txt +0 -0
  209. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/dev.txt +0 -0
  210. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/docs.txt +0 -0
  211. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/codecov.txt +0 -0
  212. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/docs.txt +0 -0
  213. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/manifest.txt +0 -0
  214. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/pyproject.txt +0 -0
  215. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/repl.txt +0 -0
  216. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/nox/tests.txt +0 -0
  217. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/tox.txt +0 -0
  218. {python_clu-0.12.7 → python_clu-0.12.9}/requirements/typecheck.txt +0 -0
  219. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/direnv_transformed_env.py +0 -0
  220. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-module-list-example-small.jpg +0 -0
  221. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-module-list-example.jpg +0 -0
  222. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-module-list-example.pxd +0 -0
  223. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-testing-time-totals-example-small.jpg +0 -0
  224. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-testing-time-totals-example.jpg +0 -0
  225. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/clu-testing-time-totals-example.pxd +0 -0
  226. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/construx-and-capsela-small.jpg +0 -0
  227. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/construx-and-capsela.jpg +0 -0
  228. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/construx-and-capsela.pxd +0 -0
  229. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/images/toml-module-rant.jpg +0 -0
  230. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
  231. {python_clu-0.12.7 → python_clu-0.12.9}/scratch/nteract.ipynb +0 -0
  232. {python_clu-0.12.7 → python_clu-0.12.9}/setup.cfg +0 -0
  233. {python_clu-0.12.7 → python_clu-0.12.9}/tests/__init__.py +0 -0
  234. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/1-58.jpg +0 -0
  235. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
  236. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
  237. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/8600JC.jpg +0 -0
  238. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/8ba.png +0 -0
  239. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/IMG_20180505_205153567.jpg +0 -0
  240. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/cheetah-003.jpg +0 -0
  241. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/config/clu-config.toml +0 -0
  242. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/config/yodogg.toml +0 -0
  243. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/shutterstock_90194617.jpg +0 -0
  244. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
  245. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
  246. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
  247. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
  248. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
  249. {python_clu-0.12.7 → python_clu-0.12.9}/tests/data/yodogg/video-pride-serval.jpg +0 -0
  250. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_abstract.py +0 -0
  251. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_all.py +0 -0
  252. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_boilerplate.py +0 -0
  253. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_config.py +0 -0
  254. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_config_abc.py +0 -0
  255. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_csv.py +0 -0
  256. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_dicts.py +0 -0
  257. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_dispatch.py +0 -0
  258. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_enum_aliases.py +0 -0
  259. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_exporting.py +0 -0
  260. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_extending.py +0 -0
  261. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_abc.py +0 -0
  262. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_appdirectories.py +0 -0
  263. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_filesystem.py +0 -0
  264. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_fs_misc.py +0 -0
  265. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_importing.py +0 -0
  266. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_keyvalue.py +0 -0
  267. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_mathematics.py +0 -0
  268. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_naming.py +0 -0
  269. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_predicates.py +0 -0
  270. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_repl_columnize.py +0 -0
  271. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_repl_modules.py +0 -0
  272. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_repr.py +0 -0
  273. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_scripts_repl.py +0 -0
  274. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_typespace_namespace.py +0 -0
  275. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_typology.py +0 -0
  276. {python_clu-0.12.7 → python_clu-0.12.9}/tests/test_version.py +0 -0
  277. {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/.tm_properties +0 -0
  278. {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/__init__.py +0 -0
  279. {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/__init__.py +0 -0
  280. {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/config.py +0 -0
  281. {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/exporting.py +0 -0
  282. {python_clu-0.12.7 → python_clu-0.12.9}/tests/yodogg/yodogg/iheard.py +0 -0
  283. {python_clu-0.12.7 → python_clu-0.12.9}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  [tool.bumpversion]
3
- current_version = "0.12.7"
3
+ current_version = "0.12.9"
4
4
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
5
5
  serialize = ["{major}.{minor}.{patch}"]
6
6
  search = "{current_version}"
@@ -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.7
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 test_one():
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(object):
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(AliasingEnumMeta, metacls).__new__(metacls, name,
118
- bases,
119
- attributes,
120
- **kwargs)
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
- if basepath is None:
83
+ from clu.predicates import attr
84
+
85
+ # Default:
86
+ if not basepath:
81
87
  basepath = BASEPATH
82
- return path_to_dotpath(__main__.__file__,
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 = moduleof(thing)
171
- if module == 'builtins':
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
- return isnativemodule(
174
- importlib.import_module(
175
- module))
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 qualified thing-name.
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 = importlib.import_module(tail)
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
- return nameof(thing), moduleof(thing)
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 qualified thing-name for a thing.
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
- qualname = dotpath_join(module_name, thing_name)
255
- return qualname
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(isnotnone, items):
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(pymodule, name='pymodule', doc="pymodule(thing) → Return either `__module__` or `__package__` from a given `thing`")
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 as exc:
497
- if 'no signature found' in str(exc):
498
- doc = inspect.getdoc(thing)
499
- if doc:
500
- return arrow_re.sub(arrow_sb,
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
- ansidocs = DocFormat()
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())
@@ -46,5 +46,4 @@ def print_version_command():
46
46
  return os.EX_OK
47
47
 
48
48
  if __name__ == '__main__':
49
- # sys.argv += ['--version-only']
50
49
  sys.exit(print_version_command())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.12.7
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,5 +1,4 @@
1
1
  build>=1.2.2
2
- Click>=7.0
3
2
  colorama>=0.4.0
4
3
  dbx-stopwatch>=1.6
5
4
  humanize>=1.0.0
@@ -1,5 +1,4 @@
1
1
  build>=1.2.2
2
- Click>=7.0
3
2
  colorama>=0.4.0
4
3
  dataclasses>=0.6; python_version < '3.7'
5
4
  dbx-stopwatch>=1.6
@@ -88,7 +88,7 @@ try:
88
88
  '__version__.py')).read(),
89
89
  '__version__.py', 'exec'))
90
90
  except:
91
- __version__ = '0.12.7'
91
+ __version__ = '0.12.9'
92
92
 
93
93
  # PROJECT DESCRIPTION
94
94
  LONG_DESCRIPTION = project_content('ABOUT.md')
@@ -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