python-clu 0.12.15__tar.gz → 0.12.16__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 (286) hide show
  1. {python_clu-0.12.15 → python_clu-0.12.16}/.bumpversion.toml +1 -1
  2. {python_clu-0.12.15 → python_clu-0.12.16}/CHANGELOG.md +63 -1
  3. {python_clu-0.12.15 → python_clu-0.12.16}/PKG-INFO +1 -4
  4. python_clu-0.12.16/clu/__version__.py +1 -0
  5. {python_clu-0.12.15 → python_clu-0.12.16}/clu/abstract.py +11 -1
  6. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/abc.py +25 -9
  7. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/env.py +5 -11
  8. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/filebase.py +2 -4
  9. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/keymap.py +8 -18
  10. {python_clu-0.12.15 → python_clu-0.12.16}/clu/dicts.py +1 -4
  11. {python_clu-0.12.15 → python_clu-0.12.16}/clu/enums.py +3 -1
  12. {python_clu-0.12.15 → python_clu-0.12.16}/clu/exporting.py +2 -4
  13. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/sourcetree.py +2 -4
  14. {python_clu-0.12.15 → python_clu-0.12.16}/clu/importing/base.py +1 -4
  15. {python_clu-0.12.15 → python_clu-0.12.16}/clu/predicates.py +1 -4
  16. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/ansi.py +9 -7
  17. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/cli/ansidocs.py +0 -1
  18. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/legacy/repl-bpython.py +0 -10
  19. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/repl.py +1 -1
  20. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/treeline.py +8 -11
  21. {python_clu-0.12.15 → python_clu-0.12.16}/clu/typespace/namespace.py +2 -4
  22. {python_clu-0.12.15 → python_clu-0.12.16}/clu/typology.py +1 -5
  23. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/PKG-INFO +1 -4
  24. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/requires.txt +0 -3
  25. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/install.txt +0 -2
  26. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/nox/tests.txt +0 -1
  27. {python_clu-0.12.15 → python_clu-0.12.16}/setup.py +1 -1
  28. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_config.py +1 -1
  29. python_clu-0.12.15/clu/__version__.py +0 -1
  30. {python_clu-0.12.15 → python_clu-0.12.16}/.coveragerc +0 -0
  31. {python_clu-0.12.15 → python_clu-0.12.16}/.editorconfig +0 -0
  32. {python_clu-0.12.15 → python_clu-0.12.16}/.gitchangelog.rc +0 -0
  33. {python_clu-0.12.15 → python_clu-0.12.16}/.gitignore +0 -0
  34. {python_clu-0.12.15 → python_clu-0.12.16}/.landscape.yml +0 -0
  35. {python_clu-0.12.15 → python_clu-0.12.16}/.travis.yml +0 -0
  36. {python_clu-0.12.15 → python_clu-0.12.16}/ABOUT.md +0 -0
  37. {python_clu-0.12.15 → python_clu-0.12.16}/CLASSIFIERS.txt +0 -0
  38. {python_clu-0.12.15 → python_clu-0.12.16}/CLU_Treatment.md +0 -0
  39. {python_clu-0.12.15 → python_clu-0.12.16}/CODE_OF_CONDUCT.md +0 -0
  40. {python_clu-0.12.15 → python_clu-0.12.16}/LICENSE.txt +0 -0
  41. {python_clu-0.12.15 → python_clu-0.12.16}/MANIFEST.in +0 -0
  42. {python_clu-0.12.15 → python_clu-0.12.16}/Makefile +0 -0
  43. {python_clu-0.12.15 → python_clu-0.12.16}/README.md +0 -0
  44. {python_clu-0.12.15 → python_clu-0.12.16}/appveyor.yml +0 -0
  45. {python_clu-0.12.15 → python_clu-0.12.16}/clu/__init__.py +0 -0
  46. {python_clu-0.12.15 → python_clu-0.12.16}/clu/__main__.py +0 -0
  47. {python_clu-0.12.15 → python_clu-0.12.16}/clu/all.py +0 -0
  48. {python_clu-0.12.15 → python_clu-0.12.16}/clu/api/__init__.py +0 -0
  49. {python_clu-0.12.15 → python_clu-0.12.16}/clu/api/__main__.py +0 -0
  50. {python_clu-0.12.15 → python_clu-0.12.16}/clu/application.py +0 -0
  51. {python_clu-0.12.15 → python_clu-0.12.16}/clu/compilation/__init__.py +0 -0
  52. {python_clu-0.12.15 → python_clu-0.12.16}/clu/compilation/compiledb.py +0 -0
  53. {python_clu-0.12.15 → python_clu-0.12.16}/clu/compilation/macros.py +0 -0
  54. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/__init__.py +0 -0
  55. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/codecs.py +0 -0
  56. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/formats/__init__.py +0 -0
  57. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/formats/jsonfile.py +0 -0
  58. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/formats/picklefile.py +0 -0
  59. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/formats/tomlfile.py +0 -0
  60. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/formats/yamlfile.py +0 -0
  61. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/keymaputils.py +0 -0
  62. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/keymapview.py +0 -0
  63. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/legacy/__init__.py +0 -0
  64. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/legacy/base.py +0 -0
  65. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/legacy/fieldtypes.py +0 -0
  66. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/legacy/settings.py +0 -0
  67. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/ns.py +0 -0
  68. {python_clu-0.12.15 → python_clu-0.12.16}/clu/config/proxy.py +0 -0
  69. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/__init__.py +0 -0
  70. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/__main__.py +0 -0
  71. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/consts.py +0 -0
  72. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/data.py +0 -0
  73. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/enums.py +0 -0
  74. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/exceptions.py +0 -0
  75. {python_clu-0.12.15 → python_clu-0.12.16}/clu/constants/polyfills.py +0 -0
  76. {python_clu-0.12.15 → python_clu-0.12.16}/clu/csv.py +0 -0
  77. {python_clu-0.12.15 → python_clu-0.12.16}/clu/dispatch.py +0 -0
  78. {python_clu-0.12.15 → python_clu-0.12.16}/clu/extending.py +0 -0
  79. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/__init__.py +0 -0
  80. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/abc.py +0 -0
  81. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/appdirectories.py +0 -0
  82. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/filesystem.py +0 -0
  83. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/misc.py +0 -0
  84. {python_clu-0.12.15 → python_clu-0.12.16}/clu/fs/pypath.py +0 -0
  85. {python_clu-0.12.15 → python_clu-0.12.16}/clu/importing/__init__.py +0 -0
  86. {python_clu-0.12.15 → python_clu-0.12.16}/clu/importing/__main__.py +0 -0
  87. {python_clu-0.12.15 → python_clu-0.12.16}/clu/importing/proxy.py +0 -0
  88. {python_clu-0.12.15 → python_clu-0.12.16}/clu/keyvalue.py +0 -0
  89. {python_clu-0.12.15 → python_clu-0.12.16}/clu/mathematics.py +0 -0
  90. {python_clu-0.12.15 → python_clu-0.12.16}/clu/naming.py +0 -0
  91. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/__init__.py +0 -0
  92. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/banners.py +0 -0
  93. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/cli/__init__.py +0 -0
  94. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/cli/boilerplate.py +0 -0
  95. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/cli/boilerplate_copy.py +0 -0
  96. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/cli/print_version.py +0 -0
  97. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/columnize.py +0 -0
  98. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repl/modules.py +0 -0
  99. {python_clu-0.12.15 → python_clu-0.12.16}/clu/repr.py +0 -0
  100. {python_clu-0.12.15 → python_clu-0.12.16}/clu/sanitizer.py +0 -0
  101. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/.gitignore +0 -0
  102. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/README.md +0 -0
  103. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/__init__.py +0 -0
  104. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/ansicolors.py +0 -0
  105. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/boilerplate.py +0 -0
  106. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/dictroast.py +0 -0
  107. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/legacy/forkumask.py +0 -0
  108. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/legacy/repl-ipython.py +0 -0
  109. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/legacy/repl-ptpython.py +0 -0
  110. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/legacy/repl-pyzo.py +0 -0
  111. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/legacy/xdg-runtime.py +0 -0
  112. {python_clu-0.12.15 → python_clu-0.12.16}/clu/scripts/prediversus.py +0 -0
  113. {python_clu-0.12.15 → python_clu-0.12.16}/clu/shelving/__init__.py +0 -0
  114. {python_clu-0.12.15 → python_clu-0.12.16}/clu/shelving/redat.py +0 -0
  115. {python_clu-0.12.15 → python_clu-0.12.16}/clu/shelving/redis.conf +0 -0
  116. {python_clu-0.12.15 → python_clu-0.12.16}/clu/stdio.py +0 -0
  117. {python_clu-0.12.15 → python_clu-0.12.16}/clu/testing/__init__.py +0 -0
  118. {python_clu-0.12.15 → python_clu-0.12.16}/clu/testing/hook.py +0 -0
  119. {python_clu-0.12.15 → python_clu-0.12.16}/clu/testing/obsolete.py +0 -0
  120. {python_clu-0.12.15 → python_clu-0.12.16}/clu/testing/pytest.py +0 -0
  121. {python_clu-0.12.15 → python_clu-0.12.16}/clu/testing/utils.py +0 -0
  122. {python_clu-0.12.15 → python_clu-0.12.16}/clu/trie.py +0 -0
  123. {python_clu-0.12.15 → python_clu-0.12.16}/clu/typespace/__init__.py +0 -0
  124. {python_clu-0.12.15 → python_clu-0.12.16}/clu/typespace/__main__.py +0 -0
  125. {python_clu-0.12.15 → python_clu-0.12.16}/clu/version/__init__.py +0 -0
  126. {python_clu-0.12.15 → python_clu-0.12.16}/clu/version/__main__.py +0 -0
  127. {python_clu-0.12.15 → python_clu-0.12.16}/clu/version/git_version.py +0 -0
  128. {python_clu-0.12.15 → python_clu-0.12.16}/clu/version/read_version.py +0 -0
  129. {python_clu-0.12.15 → python_clu-0.12.16}/codecov.yml +0 -0
  130. {python_clu-0.12.15 → python_clu-0.12.16}/conftest.py +0 -0
  131. {python_clu-0.12.15 → python_clu-0.12.16}/docs/.DS_Store +0 -0
  132. {python_clu-0.12.15 → python_clu-0.12.16}/docs/Makefile +0 -0
  133. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/doctrees/api.doctree +0 -0
  134. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/doctrees/environment.pickle +0 -0
  135. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/doctrees/generated/clu.doctree +0 -0
  136. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/doctrees/index.doctree +0 -0
  137. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/.buildinfo +0 -0
  138. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_sources/api.rst.txt +0 -0
  139. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
  140. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_sources/index.rst.txt +0 -0
  141. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  142. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/alabaster.css +0 -0
  143. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/basic.css +0 -0
  144. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/badge_only.css +0 -0
  145. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  146. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  147. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  148. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  149. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  150. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  151. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  152. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  153. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  154. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  155. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  156. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  157. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  158. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  159. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  160. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  161. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  162. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/css/theme.css +0 -0
  163. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/custom.css +0 -0
  164. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/doctools.js +0 -0
  165. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/documentation_options.js +0 -0
  166. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/file.png +0 -0
  167. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  168. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/jquery.js +0 -0
  169. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/js/badge_only.js +0 -0
  170. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  171. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  172. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/js/theme.js +0 -0
  173. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/language_data.js +0 -0
  174. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/minus.png +0 -0
  175. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/plus.png +0 -0
  176. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/pygments.css +0 -0
  177. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/searchtools.js +0 -0
  178. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  179. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/_static/underscore.js +0 -0
  180. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/api.html +0 -0
  181. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/generated/clu.html +0 -0
  182. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/genindex.html +0 -0
  183. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/index.html +0 -0
  184. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/objects.inv +0 -0
  185. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/py-modindex.html +0 -0
  186. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/search.html +0 -0
  187. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/html/searchindex.js +0 -0
  188. {python_clu-0.12.15 → python_clu-0.12.16}/docs/build/man/clu.1 +0 -0
  189. {python_clu-0.12.15 → python_clu-0.12.16}/docs/make.bat +0 -0
  190. {python_clu-0.12.15 → python_clu-0.12.16}/docs/source/api.rst +0 -0
  191. {python_clu-0.12.15 → python_clu-0.12.16}/docs/source/conf.py +0 -0
  192. {python_clu-0.12.15 → python_clu-0.12.16}/docs/source/generated/clu.rst +0 -0
  193. {python_clu-0.12.15 → python_clu-0.12.16}/docs/source/index.rst +0 -0
  194. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/autohook.sh +0 -0
  195. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/post-push/00-coverage.sh +0 -0
  196. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/pre-push/00-noop.sh +0 -0
  197. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
  198. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/scripts/coverage.sh +0 -0
  199. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/scripts/display-issues.sh +0 -0
  200. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/scripts/git-pushex +0 -0
  201. {python_clu-0.12.15 → python_clu-0.12.16}/hooks/scripts/noop.sh +0 -0
  202. {python_clu-0.12.15 → python_clu-0.12.16}/mypy.ini +0 -0
  203. {python_clu-0.12.15 → python_clu-0.12.16}/noxfile.py +0 -0
  204. {python_clu-0.12.15 → python_clu-0.12.16}/pyproject.toml +0 -0
  205. {python_clu-0.12.15 → python_clu-0.12.16}/pytest.ini +0 -0
  206. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/SOURCES.txt +0 -0
  207. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/dependency_links.txt +0 -0
  208. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/entry_points.txt +0 -0
  209. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/top_level.txt +0 -0
  210. {python_clu-0.12.15 → python_clu-0.12.16}/python_clu.egg-info/zip-safe +0 -0
  211. {python_clu-0.12.15 → python_clu-0.12.16}/pytype.cfg +0 -0
  212. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/changelog.txt +0 -0
  213. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/dev.txt +0 -0
  214. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/docs.txt +0 -0
  215. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/nox/codecov.txt +0 -0
  216. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/nox/docs.txt +0 -0
  217. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/nox/manifest.txt +0 -0
  218. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/nox/pyproject.txt +0 -0
  219. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/nox/repl.txt +0 -0
  220. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/tox.txt +0 -0
  221. {python_clu-0.12.15 → python_clu-0.12.16}/requirements/typecheck.txt +0 -0
  222. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/direnv_transformed_env.py +0 -0
  223. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/clu-module-list-example-small.jpg +0 -0
  224. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/clu-module-list-example.jpg +0 -0
  225. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/clu-module-list-example.pxd +0 -0
  226. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/clu-testing-time-totals-example-small.jpg +0 -0
  227. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/clu-testing-time-totals-example.jpg +0 -0
  228. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/clu-testing-time-totals-example.pxd +0 -0
  229. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/construx-and-capsela-small.jpg +0 -0
  230. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/construx-and-capsela.jpg +0 -0
  231. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/construx-and-capsela.pxd +0 -0
  232. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/moira.png +0 -0
  233. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/images/toml-module-rant.jpg +0 -0
  234. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
  235. {python_clu-0.12.15 → python_clu-0.12.16}/scratch/nteract.ipynb +0 -0
  236. {python_clu-0.12.15 → python_clu-0.12.16}/setup.cfg +0 -0
  237. {python_clu-0.12.15 → python_clu-0.12.16}/tests/__init__.py +0 -0
  238. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/1-58.jpg +0 -0
  239. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
  240. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
  241. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/8600JC.jpg +0 -0
  242. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/8ba.png +0 -0
  243. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/IMG_20180505_205153567.jpg +0 -0
  244. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/cheetah-003.jpg +0 -0
  245. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/config/clu-config.toml +0 -0
  246. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/config/yodogg.toml +0 -0
  247. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/shutterstock_90194617.jpg +0 -0
  248. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
  249. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
  250. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
  251. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
  252. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
  253. {python_clu-0.12.15 → python_clu-0.12.16}/tests/data/yodogg/video-pride-serval.jpg +0 -0
  254. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_abstract.py +0 -0
  255. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_all.py +0 -0
  256. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_boilerplate.py +0 -0
  257. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_config_abc.py +0 -0
  258. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_csv.py +0 -0
  259. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_dicts.py +0 -0
  260. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_dispatch.py +0 -0
  261. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_enum_aliases.py +0 -0
  262. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_exporting.py +0 -0
  263. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_extending.py +0 -0
  264. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_fs_abc.py +0 -0
  265. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_fs_appdirectories.py +0 -0
  266. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_fs_filesystem.py +0 -0
  267. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_fs_misc.py +0 -0
  268. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_importing.py +0 -0
  269. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_keyvalue.py +0 -0
  270. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_mathematics.py +0 -0
  271. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_naming.py +0 -0
  272. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_predicates.py +0 -0
  273. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_repl_columnize.py +0 -0
  274. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_repl_modules.py +0 -0
  275. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_repr.py +0 -0
  276. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_scripts_repl.py +0 -0
  277. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_typespace_namespace.py +0 -0
  278. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_typology.py +0 -0
  279. {python_clu-0.12.15 → python_clu-0.12.16}/tests/test_version.py +0 -0
  280. {python_clu-0.12.15 → python_clu-0.12.16}/tests/yodogg/.tm_properties +0 -0
  281. {python_clu-0.12.15 → python_clu-0.12.16}/tests/yodogg/__init__.py +0 -0
  282. {python_clu-0.12.15 → python_clu-0.12.16}/tests/yodogg/yodogg/__init__.py +0 -0
  283. {python_clu-0.12.15 → python_clu-0.12.16}/tests/yodogg/yodogg/config.py +0 -0
  284. {python_clu-0.12.15 → python_clu-0.12.16}/tests/yodogg/yodogg/exporting.py +0 -0
  285. {python_clu-0.12.15 → python_clu-0.12.16}/tests/yodogg/yodogg/iheard.py +0 -0
  286. {python_clu-0.12.15 → python_clu-0.12.16}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  [tool.bumpversion]
3
- current_version = "0.12.15"
3
+ current_version = "0.12.16"
4
4
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
5
5
  serialize = ["{major}.{minor}.{patch}"]
6
6
  search = "{current_version}"
@@ -1,7 +1,65 @@
1
1
  # Changelog
2
2
 
3
3
 
4
- ## 0.12.14:pre29+g3c4002c [SNAPSHOT]
4
+ ## 0.12.15:pre12+g3ba5ee3 [SNAPSHOT]
5
+
6
+ ### Tweaks
7
+
8
+ * Tweaked many things, in the name of speeeeeed. [Alexander Böhn]
9
+
10
+ ### Add
11
+
12
+ * Added a missing __slots__ attribute to some abstract classes. [Alexander Böhn]
13
+
14
+ … dunno if that was possibly causing issues, but you never know
15
+
16
+ ### Remove
17
+
18
+ * Removed several more gratuitous error-checks on initialization. [Alexander Böhn]
19
+
20
+ … these are all those that look for TypeErrors in “__init__(…)” or
21
+ “__new__(…)” methods. Best to do without, so far, yes.
22
+
23
+ * Removed the vestigial “more-itertools” package requirement. [Alexander Böhn]
24
+
25
+ * Removed the “six” package requirement. [Alexander Böhn]
26
+
27
+ … yaaaaaay!
28
+
29
+ ### Other
30
+
31
+ * Miscellany. [Alexander Böhn]
32
+
33
+ … some kwarg-passing here, some import-trimming there. NBD.
34
+
35
+ * This should be the last of the problematic initializer error-checks. [Alexander Böhn]
36
+
37
+ * Killed dead code. [Alexander Böhn]
38
+
39
+ * Simplified more initializers. [Alexander Böhn]
40
+
41
+ * Simplified `clu.config.keymap.FrozenFlat.__init__(…)`’s `super()` call. [Alexander Böhn]
42
+
43
+ … I have this weird habit of catchint TypeErrors whenever I do a
44
+ “super().__init__(…)” call, because I originally wanted to work
45
+ around some fucked-up PyPy3 bug that necessitated doing that,
46
+ basically. But it’s dumb and probably hiding real problems, so
47
+ let’s no longer do that. Yes.
48
+
49
+ * Updated the `clu.repl.ansi` enums to use `clu.abstract.Appreciative` [Alexander Böhn]
50
+
51
+ … The base type was using a really clumsy “is_ansi(…)” class method
52
+ to do this – that exact same clumsy function is now an offical
53
+ “appreciates(…)” method (see the ABC in question!) and the call
54
+ sites have been updated accordingly too. Now all that needs to
55
+ happen is the method itself has to get totally rewritten. Yes!
56
+
57
+ * A very small update. [Alexander Böhn]
58
+
59
+ … allegedly, “{}” creates an empty dict faster than “dict()” does
60
+
61
+
62
+ ## v0.12.15 (2025-07-06)
5
63
 
6
64
  ### New
7
65
 
@@ -48,6 +106,10 @@
48
106
 
49
107
  ### Other
50
108
 
109
+ * Bumped version: 0.12.14 → 0.12.15. [Alexander Böhn]
110
+
111
+ * [make] Changelog updated @ 3c4002c. [Alexander Böhn]
112
+
51
113
  * That inline test was better as a precheck function. [Alexander Böhn]
52
114
 
53
115
  * Got `clu.config.codecs` working with annotated dicts. [Alexander Böhn]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.12.15
3
+ Version: 0.12.16
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
@@ -42,7 +42,6 @@ Requires-Dist: enum34>=1.1.0; python_version < "3.4"
42
42
  Requires-Dist: humanize>=1.0.0
43
43
  Requires-Dist: importlib-metadata>=1.4.0; python_version < "3.8"
44
44
  Requires-Dist: mock>=4.0.0
45
- Requires-Dist: more_itertools>=8.0.0
46
45
  Requires-Dist: multidict>=4.7.0
47
46
  Requires-Dist: packaging
48
47
  Requires-Dist: pout>=0.8.13
@@ -50,14 +49,12 @@ Requires-Dist: pygments>=2.0.0
50
49
  Requires-Dist: PyYAML>=5.3.0
51
50
  Requires-Dist: redis>=3.4.0
52
51
  Requires-Dist: setuptools>=30.0.0
53
- Requires-Dist: six>=1.10.0
54
52
  Requires-Dist: toml>=0.10.0
55
53
  Requires-Dist: tomli>=2.2.0
56
54
  Requires-Dist: tomli_w>=1.2.0
57
55
  Requires-Dist: wheel>=0.34.0
58
56
  Requires-Dist: zict>=0.1.2
59
57
  Provides-Extra: all
60
- Requires-Dist: more_itertools>=8.0.0; extra == "all"
61
58
  Requires-Dist: numpy>=1.17.0; extra == "all"
62
59
  Requires-Dist: Pillow>=7.1.0; extra == "all"
63
60
  Requires-Dist: pytest>=5.4.0; extra == "all"
@@ -0,0 +1 @@
1
+ __version__ = '0.12.16'
@@ -118,7 +118,6 @@ class Appreciative(abc.ABC):
118
118
  class will assume that classes will appreciate… something
119
119
  like that. OK? OK.
120
120
  """
121
-
122
121
  __slots__ = tuple()
123
122
 
124
123
  @classmethod
@@ -126,6 +125,13 @@ class Appreciative(abc.ABC):
126
125
  def appreciates(cls, instance):
127
126
  """ Boolean, tests if the class “appreciates” an instance """
128
127
  ...
128
+
129
+ @classmethod
130
+ def __subclasshook__(cls, subcls):
131
+ if cls is Appreciative:
132
+ appreciates = getattr(subcls, 'appreciates', None)
133
+ return callable(appreciates)
134
+ return NotImplemented
129
135
 
130
136
  class Format(collections.abc.Callable, metaclass=Slotted):
131
137
 
@@ -179,6 +185,7 @@ class Serializable(abc.ABC):
179
185
  class. This dict is based on the class, and contains whatever the
180
186
  “from_dict(…)” method expects.
181
187
  """
188
+ __slots__ = tuple()
182
189
 
183
190
  @classmethod
184
191
  def from_dict(cls, instance_dict):
@@ -262,6 +269,7 @@ class SlottedRepr(ReprWrapper, metaclass=Slotted):
262
269
  inheritance chain’s value for “__slots__” to build the repr
263
270
  string for its instances
264
271
  """
272
+ __slots__ = tuple()
265
273
 
266
274
  def inner_repr(self):
267
275
  """ Use the union of __slots__, defined across this classes’
@@ -278,6 +286,7 @@ class MappingViewRepr(ReprWrapper):
278
286
  """ A ReprWrapper class that simply returns the repr for a
279
287
  “self._mapping” value – of which most MappingView types make use.
280
288
  """
289
+ __slots__ = tuple()
281
290
 
282
291
  def inner_repr(self): # pragma: no cover
283
292
  """ Return the repr string for “self._mapping” """
@@ -364,6 +373,7 @@ class ValueDescriptor(Descriptor):
364
373
  """ A descriptor whose repr-string tries to be a literal reflection
365
374
  of its wrapped value
366
375
  """
376
+ __slots__ = tuple()
367
377
 
368
378
  def __repr__(self):
369
379
  """ A custom repr for the ValueDescriptor’s literal value """
@@ -164,14 +164,26 @@ class FrozenKeyMap(FrozenKeyMapBase):
164
164
 
165
165
  def submap(self, *namespaces, unprefixed=False):
166
166
  """ Return a flattened dict containing only the namespaced items. """
167
+ # Get the frozen version of this class:
167
168
  cls = freeze_class(type(self))
169
+
170
+ # Shortcut for unprefixed keys:
168
171
  if unprefixed:
169
- return cls({ nskey : self[nskey] for nskey in self if NAMESPACE_SEP not in nskey })
172
+ return cls({ nskey : self[nskey] \
173
+ for nskey in self \
174
+ if NAMESPACE_SEP not in nskey })
175
+
176
+ # Shortcut for a lack of namespaces:
170
177
  if not namespaces:
171
178
  return cls(self)
172
- out = dict()
179
+
180
+ # Iterate namespaces, taking those matching our namespaces
181
+ # for a new instance:
182
+ out = {}
173
183
  for namespace in namespaces:
174
- out.update({ nskey : self[nskey] for nskey in self if nskey.startswith(namespace) })
184
+ out.update({ nskey : self[nskey] \
185
+ for nskey in self \
186
+ if nskey.startswith(namespace) })
175
187
  return cls(out)
176
188
 
177
189
  def keys(self, *namespaces, unprefixed=False):
@@ -205,7 +217,9 @@ class FrozenKeyMap(FrozenKeyMapBase):
205
217
  return hash(tuple(self.keys())) ^ len(self)
206
218
 
207
219
  def _get_namespace_foset(self):
208
- return FlatOrderedSet(get_ns(nskey) for nskey in sorted(self) if NAMESPACE_SEP in nskey)
220
+ return FlatOrderedSet(get_ns(nskey) \
221
+ for nskey in self \
222
+ if NAMESPACE_SEP in nskey)
209
223
 
210
224
  def namespaces(self):
211
225
  yield from self._get_namespace_foset()
@@ -374,10 +388,12 @@ class NamespaceWalker(FrozenKeyMap):
374
388
  if cls is None:
375
389
  from clu.config.keymap import FrozenFlat
376
390
  cls = FrozenFlat
377
- return cls({ pack_ns(key, *fragments) : value for *fragments, key, value in self.walk() })
391
+ return cls({ pack_ns(key, *fragments) : value \
392
+ for *fragments, key, value in self.walk() })
378
393
 
379
394
  def _get_namespace_foset(self):
380
- return FlatOrderedSet(concatenate_ns(*fragments) for *fragments, _, _ in self.walk() if fragments)
395
+ return FlatOrderedSet(concatenate_ns(*fragments) \
396
+ for *fragments, _, _ in self.walk() if fragments)
381
397
 
382
398
  def keys(self, *namespaces, unprefixed=False):
383
399
  """ Return a namespaced view over either all keys in the mapping,
@@ -479,9 +495,8 @@ class FlatOrderedSet(collections.abc.Set,
479
495
  """ Used by `clu.config.codecs` to deserialize FlatOrderedSets """
480
496
  out = cls()
481
497
  out.things = tuple(instance_dict['things'])
498
+ out.predicate = qualified_import(instance_dict['predicate'])
482
499
  return out
483
- # return cls(*instance_dict['things'],
484
- # predicate=qualified_import(instance_dict['predicate']))
485
500
 
486
501
  @classmethod
487
502
  def appreciates(cls, instance):
@@ -618,7 +633,8 @@ class FlatOrderedSet(collections.abc.Set,
618
633
  def clone(self, deep=False, memo=None):
619
634
  copier = getattr(copy, deep and 'deepcopy' or 'copy')
620
635
  out = type(self)()
621
- out.things = tuple(map(copier, self.things))
636
+ out.things = copier(self.things)
637
+ out.predicate = self.predicate
622
638
  return out
623
639
 
624
640
  def inner_repr(self):
@@ -72,10 +72,7 @@ class FrozenEnviron(NamespaceWalker, clu.abstract.ReprWrapper,
72
72
  """ Initialize a FrozenKeyMap instance wrapping an environment-variable
73
73
  dictionary from a target dictionary, with a supplied appname.
74
74
  """
75
- try:
76
- super().__init__(**updates)
77
- except TypeError:
78
- super().__init__()
75
+ super().__init__()
79
76
  self.appname = appname or APPNAME
80
77
  self.environment = environment is None \
81
78
  and os.environ.copy() \
@@ -142,13 +139,10 @@ class Environ(FrozenEnviron, KeyMap, contextlib.AbstractContextManager):
142
139
  """
143
140
  if environment is None:
144
141
  environment = os.environ
145
- try:
146
- super().__init__(environment=environment,
147
- appname=appname,
148
- **updates)
149
- except TypeError:
150
- super().__init__(environment=environment,
151
- appname=appname)
142
+
143
+ super().__init__(environment=environment,
144
+ appname=appname,
145
+ **updates)
152
146
  self.stash = None
153
147
 
154
148
  def freeze(self):
@@ -177,10 +177,8 @@ class FileBase(Nested, FileName): # type: ignore
177
177
  extra_user_dirs = kwargs.pop('extra_user_dirs', None)
178
178
  search_sys_path = kwargs.pop('search_sys_path', False)
179
179
 
180
- try:
181
- super(FileBase, self).__init__(*args, **kwargs)
182
- except TypeError:
183
- super(FileBase, self).__init__()
180
+ # Call super:
181
+ super(FileBase, self).__init__(*args, **kwargs)
184
182
 
185
183
  if isvalidpath(filepath):
186
184
  self.filepath = filepath
@@ -62,10 +62,7 @@ class FrozenFlat(abc.FrozenKeyMap, clu.abstract.ReprWrapper,
62
62
  output of ‘pack_ns(…)’ (q.v. function definition supra.)
63
63
  """
64
64
  # Call up:
65
- try:
66
- super().__init__(**updates)
67
- except TypeError:
68
- super().__init__()
65
+ super().__init__(**updates)
69
66
 
70
67
  # Sort out our passed-in dictionary:
71
68
  if hasattr(dictionary, 'dictionary'):
@@ -170,9 +167,8 @@ class FrozenNested(abc.NamespaceWalker, clu.abstract.ReprWrapper,
170
167
  @classmethod
171
168
  def from_dict(cls, instance_dict):
172
169
  """ Used by `clu.config.codecs` to deserialize keymaps """
173
- out = cls()
170
+ out = cls(nskeyset=instance_dict.get('nskeyset', None))
174
171
  out.tree = instance_dict['tree']
175
- out.nskeys = instance_dict['nskeyset']
176
172
  return out
177
173
 
178
174
  def __init__(self, tree=None, *, nskeyset=None, **updates):
@@ -180,10 +176,7 @@ class FrozenNested(abc.NamespaceWalker, clu.abstract.ReprWrapper,
180
176
  target nested dictionary (or a “tree” of dicts).
181
177
  """
182
178
  # Call up:
183
- try:
184
- super().__init__(**updates)
185
- except TypeError:
186
- super().__init__()
179
+ super().__init__()
187
180
 
188
181
  # Sort out the nature of the input:
189
182
  if hasattr(tree, 'tree'):
@@ -192,7 +185,7 @@ class FrozenNested(abc.NamespaceWalker, clu.abstract.ReprWrapper,
192
185
  tree = getattr(tree.nestify(), 'tree')
193
186
 
194
187
  # Assign, and deal with updates:
195
- self.tree = dictify(tree or {}, cls=dict)
188
+ self.tree = dictify(tree or {})
196
189
  if updates:
197
190
  for nskey, value in updates.items():
198
191
  key, fragments = ns.unpack_ns(nskey)
@@ -206,7 +199,7 @@ class FrozenNested(abc.NamespaceWalker, clu.abstract.ReprWrapper,
206
199
  d[key] = value
207
200
 
208
201
  # Keep the keyset we got:
209
- self.nskeys = nskeyset
202
+ self.nskeys = nskeyset and frozenset(nskeyset) or None
210
203
 
211
204
  def walk(self):
212
205
  """ Iteratively walk the nested KeyMap’s tree of dicts. """
@@ -222,7 +215,7 @@ class FrozenNested(abc.NamespaceWalker, clu.abstract.ReprWrapper,
222
215
  return thaw_class(type(self))(tree=copy.copy(self.tree),
223
216
  nskeyset=copy.copy(self.nskeys))
224
217
 
225
- def submap(self, *namespaces, unprefixed=False, cls=False):
218
+ def submap(self, *namespaces, unprefixed=False, cls=None):
226
219
  """ Return a flattened mapping, if possible a mutable one,
227
220
  containing only items with keys matching the specified
228
221
  namespaces (as namespaced:key:paths).
@@ -233,7 +226,7 @@ class FrozenNested(abc.NamespaceWalker, clu.abstract.ReprWrapper,
233
226
 
234
227
  # Short-circuit for returning unprefixed top-level items:
235
228
  if unprefixed:
236
- return cls({ key : value \
229
+ return cls({ key: value \
237
230
  for key, value in self.tree.items() \
238
231
  if not ismapping(value) })
239
232
 
@@ -298,10 +291,7 @@ class Nested(FrozenNested, abc.KeyMap):
298
291
  target nested dictionary (or a “tree” of dicts).
299
292
  """
300
293
  # Call up, without passing nskeyset:
301
- try:
302
- super().__init__(tree=tree, nskeyset=None, **updates)
303
- except TypeError:
304
- super().__init__()
294
+ super().__init__(tree=tree, nskeyset=None, **updates)
305
295
 
306
296
  # Mutable-ize the keyset:
307
297
  self.nskeys = nskeyset and set(nskeyset) or set(self.nskeyset())
@@ -108,10 +108,7 @@ class ChainRepr(Repr):
108
108
  """ Initialize a ChainRepr, with default params
109
109
  for ‘maxlevel’, ‘maxstring’, and ‘maxother’.
110
110
  """
111
- try:
112
- super().__init__(*args, **kwargs)
113
- except TypeError:
114
- super().__init__()
111
+ super().__init__(*args, **kwargs)
115
112
  self.maxlevel = maxlevel
116
113
  self.maxstring = maxstring
117
114
  self.maxother = maxother
@@ -1,7 +1,9 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  from __future__ import print_function
3
3
 
4
+ import abc
4
5
  import clu.abstract
6
+ import collections.abc
5
7
 
6
8
  from clu.constants.polyfills import Enum, EnumMeta # type: ignore
7
9
  from clu.exporting import Exporter
@@ -101,7 +103,7 @@ class alias(clu.abstract.BaseDescriptor, metaclass=clu.abstract.Slotted):
101
103
  cls.__aliases__[self.name] = self.member_for_value(cls, self.aliased)
102
104
 
103
105
  @export
104
- class AliasingEnumMeta(EnumMeta):
106
+ class AliasingEnumMeta(EnumMeta, abc.ABCMeta):
105
107
 
106
108
  def __new__(metacls, name, bases, attributes, **kwargs):
107
109
  """ Ensure `__aliases__` is a dictionary attribute on the new class.
@@ -434,10 +434,8 @@ class ExporterBase(collections.abc.MutableMapping,
434
434
  if putative in cls.instances:
435
435
  return cls.instances[putative]
436
436
 
437
- try:
438
- instance = super().__new__(cls, *args, **kwargs) # type: ignore
439
- except TypeError:
440
- instance = super().__new__(cls)
437
+ # Call super:
438
+ instance = super().__new__(cls) # type: ignore
441
439
 
442
440
  instance.__exports__ = {}
443
441
  instance.path = path
@@ -23,10 +23,8 @@ class SourceTree(abc.ABC, metaclass=Slotted):
23
23
  __slots__ = ('directory', 'header_lines', 'filepath')
24
24
 
25
25
  def __init__(self, filepath, path=None, **kwargs):
26
- try:
27
- super(SourceTree, self).__init__(**kwargs)
28
- except TypeError:
29
- super(SourceTree, self).__init__()
26
+ # Call super:
27
+ super(SourceTree, self).__init__(**kwargs)
30
28
 
31
29
  # Check the “srctree” file:
32
30
  if not os.path.isfile(filepath):
@@ -374,10 +374,7 @@ class LoaderBase(clu.abstract.AppName,
374
374
  # Create and register a new loader, as per the
375
375
  # arguments with which to initialize this new
376
376
  # loader instance:
377
- try:
378
- cls.instances[key] = instance = super().__new__(cls, *args, **kwargs)
379
- except TypeError:
380
- cls.instances[key] = instance = super().__new__(cls)
377
+ cls.instances[key] = instance = super().__new__(cls, *args, **kwargs)
381
378
 
382
379
  # Return the newly created instance:
383
380
  return instance
@@ -275,10 +275,7 @@ class Partial(partial):
275
275
  def __init__(self, *args, **kwargs):
276
276
  """ Initialize a new Partial object, with a predicate and a function """
277
277
  # N.B. The real action seems to happen in partial.__new__(…)
278
- try:
279
- super().__init__(*args, **kwargs)
280
- except:
281
- super().__init__() # type: ignore
278
+ super().__init__()
282
279
 
283
280
  # Name the Partial instance, as if it’s a phi-type:
284
281
  self.__name__ = self.__qualname__ = φ
@@ -18,7 +18,7 @@ from clu.predicates import mro, or_none
18
18
  from clu.typology import dict_types, isstring, isbytes
19
19
  from clu.fs.misc import re_matcher
20
20
  from clu.naming import nameof, qualified_name, isinspectable
21
- from clu.enums import alias, AliasingEnumMeta
21
+ from clu.enums import alias, AliasingEnum, AliasingEnumMeta
22
22
  from clu.stdio import std, linebreak, flush_all
23
23
  from clu.exporting import Exporter
24
24
 
@@ -28,12 +28,14 @@ export = exporter.decorator()
28
28
  print_separator = lambda filler='-': print(filler * SEPARATOR_WIDTH)
29
29
 
30
30
  @export
31
- class ANSIBase(Enum):
31
+ class ANSIBase(clu.abstract.Appreciative, AliasingEnum):
32
32
 
33
33
  """ Root ancestor class for all ANSI-code enums """
34
34
 
35
35
  @classmethod
36
- def is_ansi(cls, instance):
36
+ def appreciates(cls, instance):
37
+ """ Boolean, tests if the class “appreciates” an instance """
38
+ # N.B. This is far too ripe for false positives
37
39
  return cls in mro(instance)
38
40
 
39
41
  @export
@@ -133,7 +135,7 @@ class ANSI(AliasingEnumMeta):
133
135
  """ Convert a specifier of unknown type to an enum or alias member """
134
136
  if specifier is None:
135
137
  return cls.NOTHING
136
- elif cls.is_ansi(specifier):
138
+ elif cls.appreciates(specifier):
137
139
  return specifier # Already an ANSI type, return it
138
140
  if isstring(specifier):
139
141
  return cls.for_name(specifier) # Match by name, decoding if necessary
@@ -325,7 +327,7 @@ class ANSIFormat(clu.abstract.Format,
325
327
  text = from_value
326
328
  elif isbytes(from_value):
327
329
  text = str(from_value, encoding=ENCODING)
328
- elif ANSIBase.is_ansi(from_value):
330
+ elif ANSIBase.appreciates(from_value):
329
331
  text = from_value
330
332
  instance = cls.get_or_create(Text.convert(text),
331
333
  Background.convert(background),
@@ -583,8 +585,8 @@ wrapper_kws = lambda **kwargs: { **BASE_KWARGS, **kwargs }
583
585
  @export
584
586
  class HighlighterWrapper(TextWrapper):
585
587
 
586
- def __init__(self):
587
- super().__init__(**wrapper_kws())
588
+ def __init__(self, **kwargs):
589
+ super().__init__(**wrapper_kws(**kwargs))
588
590
 
589
591
  @export
590
592
  class DualOptionWrapper(clu.abstract.Format):
@@ -14,7 +14,6 @@ def actually_print_ansidocs(dotpath):
14
14
  formatting accordingly (as in, no ANSI if we can’t ANSI)
15
15
  """
16
16
  from clu.naming import qualified_import
17
- from importlib import import_module
18
17
 
19
18
  # Attempt to import it:
20
19
  try:
@@ -164,7 +164,6 @@ import math
164
164
  import operator
165
165
  import pickle
166
166
  import shutil
167
- import six
168
167
  import sysconfig
169
168
  import weakref
170
169
 
@@ -231,7 +230,6 @@ __all__ = ('Image',
231
230
  'pickle',
232
231
  'reduce',
233
232
  'shutil',
234
- 'six',
235
233
  'sysconfig',
236
234
  'types',
237
235
  'weakref',
@@ -380,14 +378,6 @@ else:
380
378
  # Extend `__all__`:
381
379
  __all__ += ('numpy',)
382
380
 
383
- try:
384
- import more_itertools
385
- except (ImportError, SyntaxError):
386
- pass
387
- else:
388
- # Extend `__all__`:
389
- __all__ += ('more_itertools',)
390
-
391
381
  try:
392
382
  import colorama
393
383
  import termcolor
@@ -116,7 +116,7 @@ mods = ('clu',
116
116
  'argparse', 'collections', 'contextlib', 'copy',
117
117
  'datetime', 'functools', 'importlib', 'inspect',
118
118
  'itertools', 'math', 'operator', 'pathlib',
119
- 'pickle', 'six', 'shutil', 'sysconfig', 'weakref',
119
+ 'pickle', 'shutil', 'sysconfig', 'weakref',
120
120
  'numpy', 'colorama',
121
121
  'xerox', 'zict')
122
122
 
@@ -100,13 +100,8 @@ class NodeBase(collections.abc.Hashable,
100
100
 
101
101
  def __new__(cls, parent, name, *children, value=None):
102
102
 
103
- try:
104
- instance = super().__new__(cls, parent,
105
- name,
106
- *children,
107
- value=value) # type: ignore
108
- except TypeError:
109
- instance = super().__new__(cls)
103
+ # Call super:
104
+ instance = super().__new__(cls) # type: ignore
110
105
 
111
106
  instance.node_name = str(name)
112
107
  instance.node_value = value
@@ -489,17 +484,19 @@ class NodeTreeMap(NamespaceWalker, clu.abstract.ReprWrapper,
489
484
 
490
485
  def __init__(self, tree=None, **updates):
491
486
  """ Initialize a NodeTreeMap, hosting a given node tree """
492
- try:
493
- super().__init__(**updates)
494
- except TypeError:
495
- super().__init__()
487
+ # Call super:
488
+ super().__init__(**updates)
496
489
  tree = getattr(tree, 'tree', tree)
490
+
497
491
  # “mnq gvfc” – Nellie
498
492
  if tree is not None:
499
493
  if type(tree) not in acceptable_types:
500
494
  badtype = nameof(typeof(tree))
501
495
  raise TypeError(f"NodeTreeMap requires a Node instance, not type {badtype}")
496
+
497
+ # Assign tree:
502
498
  self.tree = tree
499
+
503
500
  # N.B. – assume updates is a basic KeyMap:
504
501
  if updates:
505
502
  for nskey, value in updates.items():
@@ -31,10 +31,8 @@ class NamespaceRepr(Repr):
31
31
  """ Initialize a NamespaceRepr, with default params
32
32
  for ‘maxlevel’, ‘maxstring’, and ‘maxother’.
33
33
  """
34
- try:
35
- super().__init__(*args, **kwargs)
36
- except TypeError:
37
- super().__init__()
34
+ # Call super:
35
+ super().__init__(*args, **kwargs)
38
36
  self.maxlevel = maxlevel
39
37
  self.maxstring = maxstring
40
38
  self.maxother = maxother
@@ -135,11 +135,7 @@ array_types += attrs(numpy, 'ndarray',
135
135
  scalar_types = frozenset(getattr(numpy, 'ScalarType',
136
136
  set(numeric_types) - { decimal.Decimal }))
137
137
 
138
- try:
139
- from six import string_types
140
- except (ImportError, SyntaxError): # pragma: no cover
141
- string_types = tuple(uniquify(str, unicode))
142
-
138
+ string_types = tuple(uniquify(str, unicode))
143
139
  bytes_types = (bytes, bytearray)
144
140
  path_classes = tuplize(argparse.FileType, or_none(os, 'PathLike'), Path) # Path may be “None” in disguise
145
141
  path_types = string_types + bytes_types + path_classes # type: ignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.12.15
3
+ Version: 0.12.16
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
@@ -42,7 +42,6 @@ Requires-Dist: enum34>=1.1.0; python_version < "3.4"
42
42
  Requires-Dist: humanize>=1.0.0
43
43
  Requires-Dist: importlib-metadata>=1.4.0; python_version < "3.8"
44
44
  Requires-Dist: mock>=4.0.0
45
- Requires-Dist: more_itertools>=8.0.0
46
45
  Requires-Dist: multidict>=4.7.0
47
46
  Requires-Dist: packaging
48
47
  Requires-Dist: pout>=0.8.13
@@ -50,14 +49,12 @@ Requires-Dist: pygments>=2.0.0
50
49
  Requires-Dist: PyYAML>=5.3.0
51
50
  Requires-Dist: redis>=3.4.0
52
51
  Requires-Dist: setuptools>=30.0.0
53
- Requires-Dist: six>=1.10.0
54
52
  Requires-Dist: toml>=0.10.0
55
53
  Requires-Dist: tomli>=2.2.0
56
54
  Requires-Dist: tomli_w>=1.2.0
57
55
  Requires-Dist: wheel>=0.34.0
58
56
  Requires-Dist: zict>=0.1.2
59
57
  Provides-Extra: all
60
- Requires-Dist: more_itertools>=8.0.0; extra == "all"
61
58
  Requires-Dist: numpy>=1.17.0; extra == "all"
62
59
  Requires-Dist: Pillow>=7.1.0; extra == "all"
63
60
  Requires-Dist: pytest>=5.4.0; extra == "all"