python-clu 0.12.8__tar.gz → 0.12.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. {python_clu-0.12.8 → python_clu-0.12.11}/.bumpversion.toml +1 -1
  2. {python_clu-0.12.8 → python_clu-0.12.11}/CHANGELOG.md +79 -1
  3. {python_clu-0.12.8 → python_clu-0.12.11}/CLASSIFIERS.txt +0 -1
  4. {python_clu-0.12.8 → python_clu-0.12.11}/CODE_OF_CONDUCT.md +7 -0
  5. {python_clu-0.12.8 → python_clu-0.12.11}/PKG-INFO +1 -3
  6. python_clu-0.12.11/clu/__version__.py +1 -0
  7. {python_clu-0.12.8 → python_clu-0.12.11}/clu/api/__init__.py +1 -21
  8. {python_clu-0.12.8 → python_clu-0.12.11}/clu/enums.py +14 -12
  9. {python_clu-0.12.8 → python_clu-0.12.11}/clu/naming.py +38 -11
  10. {python_clu-0.12.8 → python_clu-0.12.11}/clu/predicates.py +5 -3
  11. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/ansi.py +5 -6
  12. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/repl.py +8 -6
  13. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/PKG-INFO +1 -3
  14. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/requires.txt +0 -1
  15. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/dev.txt +0 -1
  16. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/install.txt +0 -1
  17. {python_clu-0.12.8 → python_clu-0.12.11}/setup.py +8 -12
  18. python_clu-0.12.8/clu/__version__.py +0 -1
  19. {python_clu-0.12.8 → python_clu-0.12.11}/.coveragerc +0 -0
  20. {python_clu-0.12.8 → python_clu-0.12.11}/.editorconfig +0 -0
  21. {python_clu-0.12.8 → python_clu-0.12.11}/.gitchangelog.rc +0 -0
  22. {python_clu-0.12.8 → python_clu-0.12.11}/.gitignore +0 -0
  23. {python_clu-0.12.8 → python_clu-0.12.11}/.landscape.yml +0 -0
  24. {python_clu-0.12.8 → python_clu-0.12.11}/.travis.yml +0 -0
  25. {python_clu-0.12.8 → python_clu-0.12.11}/ABOUT.md +0 -0
  26. {python_clu-0.12.8 → python_clu-0.12.11}/CLU_Treatment.md +0 -0
  27. {python_clu-0.12.8 → python_clu-0.12.11}/LICENSE.txt +0 -0
  28. {python_clu-0.12.8 → python_clu-0.12.11}/MANIFEST.in +0 -0
  29. {python_clu-0.12.8 → python_clu-0.12.11}/Makefile +0 -0
  30. {python_clu-0.12.8 → python_clu-0.12.11}/README.md +0 -0
  31. {python_clu-0.12.8 → python_clu-0.12.11}/appveyor.yml +0 -0
  32. {python_clu-0.12.8 → python_clu-0.12.11}/clu/__init__.py +0 -0
  33. {python_clu-0.12.8 → python_clu-0.12.11}/clu/__main__.py +0 -0
  34. {python_clu-0.12.8 → python_clu-0.12.11}/clu/abstract.py +0 -0
  35. {python_clu-0.12.8 → python_clu-0.12.11}/clu/all.py +0 -0
  36. {python_clu-0.12.8 → python_clu-0.12.11}/clu/api/__main__.py +0 -0
  37. {python_clu-0.12.8 → python_clu-0.12.11}/clu/application.py +0 -0
  38. {python_clu-0.12.8 → python_clu-0.12.11}/clu/compilation/__init__.py +0 -0
  39. {python_clu-0.12.8 → python_clu-0.12.11}/clu/compilation/compiledb.py +0 -0
  40. {python_clu-0.12.8 → python_clu-0.12.11}/clu/compilation/macros.py +0 -0
  41. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/__init__.py +0 -0
  42. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/abc.py +0 -0
  43. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/codecs.py +0 -0
  44. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/env.py +0 -0
  45. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/filebase.py +0 -0
  46. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/__init__.py +0 -0
  47. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/jsonfile.py +0 -0
  48. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/picklefile.py +0 -0
  49. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/tomlfile.py +0 -0
  50. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/formats/yamlfile.py +0 -0
  51. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/keymap.py +0 -0
  52. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/keymapview.py +0 -0
  53. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/__init__.py +0 -0
  54. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/base.py +0 -0
  55. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/fieldtypes.py +0 -0
  56. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/legacy/settings.py +0 -0
  57. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/ns.py +0 -0
  58. {python_clu-0.12.8 → python_clu-0.12.11}/clu/config/proxy.py +0 -0
  59. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/__init__.py +0 -0
  60. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/__main__.py +0 -0
  61. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/consts.py +0 -0
  62. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/data.py +0 -0
  63. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/enums.py +0 -0
  64. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/exceptions.py +0 -0
  65. {python_clu-0.12.8 → python_clu-0.12.11}/clu/constants/polyfills.py +0 -0
  66. {python_clu-0.12.8 → python_clu-0.12.11}/clu/csv.py +0 -0
  67. {python_clu-0.12.8 → python_clu-0.12.11}/clu/dicts.py +0 -0
  68. {python_clu-0.12.8 → python_clu-0.12.11}/clu/dispatch.py +0 -0
  69. {python_clu-0.12.8 → python_clu-0.12.11}/clu/exporting.py +0 -0
  70. {python_clu-0.12.8 → python_clu-0.12.11}/clu/extending.py +0 -0
  71. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/__init__.py +0 -0
  72. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/abc.py +0 -0
  73. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/appdirectories.py +0 -0
  74. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/filesystem.py +0 -0
  75. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/misc.py +0 -0
  76. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/pypath.py +0 -0
  77. {python_clu-0.12.8 → python_clu-0.12.11}/clu/fs/sourcetree.py +0 -0
  78. {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/__init__.py +0 -0
  79. {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/__main__.py +0 -0
  80. {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/base.py +0 -0
  81. {python_clu-0.12.8 → python_clu-0.12.11}/clu/importing/proxy.py +0 -0
  82. {python_clu-0.12.8 → python_clu-0.12.11}/clu/keyvalue.py +0 -0
  83. {python_clu-0.12.8 → python_clu-0.12.11}/clu/mathematics.py +0 -0
  84. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/__init__.py +0 -0
  85. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/banners.py +0 -0
  86. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/__init__.py +0 -0
  87. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/ansidocs.py +0 -0
  88. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/boilerplate.py +0 -0
  89. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/boilerplate_copy.py +0 -0
  90. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/cli/print_version.py +0 -0
  91. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/columnize.py +0 -0
  92. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repl/modules.py +0 -0
  93. {python_clu-0.12.8 → python_clu-0.12.11}/clu/repr.py +0 -0
  94. {python_clu-0.12.8 → python_clu-0.12.11}/clu/sanitizer.py +0 -0
  95. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/.gitignore +0 -0
  96. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/README.md +0 -0
  97. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/__init__.py +0 -0
  98. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/ansicolors.py +0 -0
  99. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/boilerplate.py +0 -0
  100. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/dictroast.py +0 -0
  101. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/forkumask.py +0 -0
  102. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-bpython.py +0 -0
  103. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-ipython.py +0 -0
  104. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-ptpython.py +0 -0
  105. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/repl-pyzo.py +0 -0
  106. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/legacy/xdg-runtime.py +0 -0
  107. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/prediversus.py +0 -0
  108. {python_clu-0.12.8 → python_clu-0.12.11}/clu/scripts/treeline.py +0 -0
  109. {python_clu-0.12.8 → python_clu-0.12.11}/clu/shelving/__init__.py +0 -0
  110. {python_clu-0.12.8 → python_clu-0.12.11}/clu/shelving/redat.py +0 -0
  111. {python_clu-0.12.8 → python_clu-0.12.11}/clu/shelving/redis.conf +0 -0
  112. {python_clu-0.12.8 → python_clu-0.12.11}/clu/stdio.py +0 -0
  113. {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/__init__.py +0 -0
  114. {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/hook.py +0 -0
  115. {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/obsolete.py +0 -0
  116. {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/pytest.py +0 -0
  117. {python_clu-0.12.8 → python_clu-0.12.11}/clu/testing/utils.py +0 -0
  118. {python_clu-0.12.8 → python_clu-0.12.11}/clu/typespace/__init__.py +0 -0
  119. {python_clu-0.12.8 → python_clu-0.12.11}/clu/typespace/__main__.py +0 -0
  120. {python_clu-0.12.8 → python_clu-0.12.11}/clu/typespace/namespace.py +0 -0
  121. {python_clu-0.12.8 → python_clu-0.12.11}/clu/typology.py +0 -0
  122. {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/__init__.py +0 -0
  123. {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/__main__.py +0 -0
  124. {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/git_version.py +0 -0
  125. {python_clu-0.12.8 → python_clu-0.12.11}/clu/version/read_version.py +0 -0
  126. {python_clu-0.12.8 → python_clu-0.12.11}/codecov.yml +0 -0
  127. {python_clu-0.12.8 → python_clu-0.12.11}/conftest.py +0 -0
  128. {python_clu-0.12.8 → python_clu-0.12.11}/docs/.DS_Store +0 -0
  129. {python_clu-0.12.8 → python_clu-0.12.11}/docs/Makefile +0 -0
  130. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/api.doctree +0 -0
  131. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/environment.pickle +0 -0
  132. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/generated/clu.doctree +0 -0
  133. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/doctrees/index.doctree +0 -0
  134. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/.buildinfo +0 -0
  135. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_sources/api.rst.txt +0 -0
  136. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
  137. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_sources/index.rst.txt +0 -0
  138. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  139. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/alabaster.css +0 -0
  140. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/basic.css +0 -0
  141. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/badge_only.css +0 -0
  142. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  143. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  144. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  145. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  146. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  147. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  148. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  149. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  150. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  151. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  152. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  153. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  154. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  155. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  156. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  157. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  158. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  159. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/css/theme.css +0 -0
  160. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/custom.css +0 -0
  161. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/doctools.js +0 -0
  162. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/documentation_options.js +0 -0
  163. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/file.png +0 -0
  164. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  165. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/jquery.js +0 -0
  166. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/badge_only.js +0 -0
  167. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  168. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  169. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/js/theme.js +0 -0
  170. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/language_data.js +0 -0
  171. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/minus.png +0 -0
  172. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/plus.png +0 -0
  173. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/pygments.css +0 -0
  174. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/searchtools.js +0 -0
  175. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  176. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/_static/underscore.js +0 -0
  177. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/api.html +0 -0
  178. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/generated/clu.html +0 -0
  179. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/genindex.html +0 -0
  180. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/index.html +0 -0
  181. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/objects.inv +0 -0
  182. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/py-modindex.html +0 -0
  183. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/search.html +0 -0
  184. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/html/searchindex.js +0 -0
  185. {python_clu-0.12.8 → python_clu-0.12.11}/docs/build/man/clu.1 +0 -0
  186. {python_clu-0.12.8 → python_clu-0.12.11}/docs/make.bat +0 -0
  187. {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/api.rst +0 -0
  188. {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/conf.py +0 -0
  189. {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/generated/clu.rst +0 -0
  190. {python_clu-0.12.8 → python_clu-0.12.11}/docs/source/index.rst +0 -0
  191. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/autohook.sh +0 -0
  192. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/post-push/00-coverage.sh +0 -0
  193. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/pre-push/00-noop.sh +0 -0
  194. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
  195. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/coverage.sh +0 -0
  196. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/display-issues.sh +0 -0
  197. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/git-pushex +0 -0
  198. {python_clu-0.12.8 → python_clu-0.12.11}/hooks/scripts/noop.sh +0 -0
  199. {python_clu-0.12.8 → python_clu-0.12.11}/mypy.ini +0 -0
  200. {python_clu-0.12.8 → python_clu-0.12.11}/noxfile.py +0 -0
  201. {python_clu-0.12.8 → python_clu-0.12.11}/pyproject.toml +0 -0
  202. {python_clu-0.12.8 → python_clu-0.12.11}/pytest.ini +0 -0
  203. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/SOURCES.txt +0 -0
  204. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/dependency_links.txt +0 -0
  205. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/entry_points.txt +0 -0
  206. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/top_level.txt +0 -0
  207. {python_clu-0.12.8 → python_clu-0.12.11}/python_clu.egg-info/zip-safe +0 -0
  208. {python_clu-0.12.8 → python_clu-0.12.11}/pytype.cfg +0 -0
  209. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/changelog.txt +0 -0
  210. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/docs.txt +0 -0
  211. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/codecov.txt +0 -0
  212. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/docs.txt +0 -0
  213. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/manifest.txt +0 -0
  214. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/pyproject.txt +0 -0
  215. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/repl.txt +0 -0
  216. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/nox/tests.txt +0 -0
  217. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/tox.txt +0 -0
  218. {python_clu-0.12.8 → python_clu-0.12.11}/requirements/typecheck.txt +0 -0
  219. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/direnv_transformed_env.py +0 -0
  220. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-module-list-example-small.jpg +0 -0
  221. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-module-list-example.jpg +0 -0
  222. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-module-list-example.pxd +0 -0
  223. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-testing-time-totals-example-small.jpg +0 -0
  224. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-testing-time-totals-example.jpg +0 -0
  225. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/clu-testing-time-totals-example.pxd +0 -0
  226. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/construx-and-capsela-small.jpg +0 -0
  227. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/construx-and-capsela.jpg +0 -0
  228. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/construx-and-capsela.pxd +0 -0
  229. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/images/toml-module-rant.jpg +0 -0
  230. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
  231. {python_clu-0.12.8 → python_clu-0.12.11}/scratch/nteract.ipynb +0 -0
  232. {python_clu-0.12.8 → python_clu-0.12.11}/setup.cfg +0 -0
  233. {python_clu-0.12.8 → python_clu-0.12.11}/tests/__init__.py +0 -0
  234. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/1-58.jpg +0 -0
  235. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
  236. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
  237. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/8600JC.jpg +0 -0
  238. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/8ba.png +0 -0
  239. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/IMG_20180505_205153567.jpg +0 -0
  240. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/cheetah-003.jpg +0 -0
  241. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/config/clu-config.toml +0 -0
  242. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/config/yodogg.toml +0 -0
  243. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/shutterstock_90194617.jpg +0 -0
  244. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
  245. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
  246. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
  247. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
  248. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
  249. {python_clu-0.12.8 → python_clu-0.12.11}/tests/data/yodogg/video-pride-serval.jpg +0 -0
  250. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_abstract.py +0 -0
  251. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_all.py +0 -0
  252. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_boilerplate.py +0 -0
  253. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_config.py +0 -0
  254. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_config_abc.py +0 -0
  255. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_csv.py +0 -0
  256. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_dicts.py +0 -0
  257. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_dispatch.py +0 -0
  258. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_enum_aliases.py +0 -0
  259. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_exporting.py +0 -0
  260. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_extending.py +0 -0
  261. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_abc.py +0 -0
  262. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_appdirectories.py +0 -0
  263. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_filesystem.py +0 -0
  264. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_fs_misc.py +0 -0
  265. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_importing.py +0 -0
  266. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_keyvalue.py +0 -0
  267. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_mathematics.py +0 -0
  268. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_naming.py +0 -0
  269. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_predicates.py +0 -0
  270. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_repl_columnize.py +0 -0
  271. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_repl_modules.py +0 -0
  272. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_repr.py +0 -0
  273. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_scripts_repl.py +0 -0
  274. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_typespace_namespace.py +0 -0
  275. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_typology.py +0 -0
  276. {python_clu-0.12.8 → python_clu-0.12.11}/tests/test_version.py +0 -0
  277. {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/.tm_properties +0 -0
  278. {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/__init__.py +0 -0
  279. {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/__init__.py +0 -0
  280. {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/config.py +0 -0
  281. {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/exporting.py +0 -0
  282. {python_clu-0.12.8 → python_clu-0.12.11}/tests/yodogg/yodogg/iheard.py +0 -0
  283. {python_clu-0.12.8 → python_clu-0.12.11}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  [tool.bumpversion]
3
- current_version = "0.12.8"
3
+ current_version = "0.12.11"
4
4
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
5
5
  serialize = ["{major}.{minor}.{patch}"]
6
6
  search = "{current_version}"
@@ -1,10 +1,88 @@
1
1
  # Changelog
2
2
 
3
3
 
4
- ## 0.12.7:pre5+gf7f3ce2 [SNAPSHOT]
4
+ ## 0.12.10:pre1+g4e2fdbd [SNAPSHOT]
5
5
 
6
6
  ### Other
7
7
 
8
+ * Ahhhh my home-brewed classifier didn’t work, booooo. [Alexander Böhn]
9
+
10
+
11
+ ## v0.12.10 (2025-05-25)
12
+
13
+ ### Other
14
+
15
+ * Bumped version: 0.12.9 → 0.12.10. [Alexander Böhn]
16
+
17
+ * [make] New changelog added. [Alexander Böhn]
18
+
19
+ * Fixed `clu.naming.qualified_name_tuple(…)` to work for module objects. [Alexander Böhn]
20
+
21
+ … this involved special-casing the whole thing, but it was worth it,
22
+ as it just wasn’t fucking working for this entire case this whole
23
+ time, which is fucking embarrasing. Yes!
24
+
25
+ * More requirement/REPL-import adjustments. [Alexander Böhn]
26
+
27
+ * Code of Conduct clarification. [Alexander Böhn]
28
+
29
+ * Classifier tidy-up. [Alexander Böhn]
30
+
31
+ * Gentlemen prefer f-strings. [Alexander Böhn]
32
+
33
+ * Updating straggling little info corners that didn’t get the memo. [Alexander Böhn]
34
+
35
+
36
+ ## v0.12.9 (2025-05-24)
37
+
38
+ ### Add
39
+
40
+ * Added a `clu.predicates.pyqualname(…)` function. [Alexander Böhn]
41
+
42
+ … which of course does exactly what you think it does, in that it
43
+ privliges the “__qualname__” with what it returns for whatever
44
+ argument thing it is passed. Have fun you guys
45
+
46
+ ### Other
47
+
48
+ * Bumped version: 0.12.8 → 0.12.9. [Alexander Böhn]
49
+
50
+ * [make] New changelog added. [Alexander Böhn]
51
+
52
+ * Removed (fortunately vestigial) Click package dependency. [Alexander Böhn]
53
+
54
+ * Expanded “getdoc” codepath in `clu.repl.ansi.signature(…)` [Alexander Böhn]
55
+
56
+ * Using new `clu.predicates.pyqualname(…)` in `clu.naming.qualified_name(…)` [Alexander Böhn]
57
+
58
+ … this closes Issue #14! Q.v. https://github.com/fish2000/CLU/issues/14
59
+ … An upcoming release will demonstrate this through the “clu-ansidocs”
60
+ command
61
+
62
+ * Special-cased `filter(…)` call should be fastest. [Alexander Böhn]
63
+
64
+ … tests do indicate as such, it appears, actually, now that you mention
65
+
66
+ * More updates, cleanup, and addenda in `clu.enums` [Alexander Böhn]
67
+
68
+ * The `clu.enums.alias(…)` class is now itself `clu.abstract.Slotted` [Alexander Böhn]
69
+
70
+ … as in, that is now its metaclass. This makes probably such zero
71
+ difference in anything in the universe it shames me to have even
72
+ brought this much attention to it here and now, and I really do
73
+ apologize, I do, yes.
74
+
75
+ * Refactored `clu.naming.isnative(…)` around an edge case. [Alexander Böhn]
76
+
77
+
78
+ ## v0.12.8 (2025-05-24)
79
+
80
+ ### Other
81
+
82
+ * Bumped version: 0.12.7 → 0.12.8. [Alexander Böhn]
83
+
84
+ * [make] New changelog added. [Alexander Böhn]
85
+
8
86
  * Fixes in `clu.naming.{qualified_import,main_module_mame}(…)` [Alexander Böhn]
9
87
 
10
88
  … “main_module_name(…)” was failing when called within bpython; now,
@@ -5,7 +5,6 @@ Topic :: Software Development
5
5
  Topic :: Software Development :: Testing
6
6
  Topic :: Utilities
7
7
  Operating System :: MacOS
8
- Operating System :: Microsoft :: Windows
9
8
  Operating System :: OS Independent
10
9
  Operating System :: POSIX
11
10
  Operating System :: Unix
@@ -74,3 +74,10 @@ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.ht
74
74
 
75
75
  For answers to common questions about this code of conduct, see
76
76
  https://www.contributor-covenant.org/faq
77
+
78
+ ## The Main Thing
79
+
80
+ Do not be dicks. If you or people you happen to like are dicks, they will have to go
81
+ be dickish elsewhere, and in exrtreme cases you’ll be reported to the FBI or perhaps
82
+ shot at dawn through the lungs, to prevent you from being such dickhead morons.
83
+ OK? OK.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.12.8
3
+ Version: 0.12.11
4
4
  Summary: Python-CLU: Common Lightweight Utilities
5
5
  Home-page: https://github.com/fish2000/clu
6
6
  Download-URL: https://github.com/fish2000/clu/zipball/master
@@ -24,7 +24,6 @@ Classifier: Topic :: Software Development
24
24
  Classifier: Topic :: Software Development :: Testing
25
25
  Classifier: Topic :: Utilities
26
26
  Classifier: Operating System :: MacOS
27
- Classifier: Operating System :: Microsoft :: Windows
28
27
  Classifier: Operating System :: OS Independent
29
28
  Classifier: Operating System :: POSIX
30
29
  Classifier: Operating System :: Unix
@@ -36,7 +35,6 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
36
35
  Description-Content-Type: text/markdown
37
36
  License-File: LICENSE.txt
38
37
  Requires-Dist: build>=1.2.2
39
- Requires-Dist: Click>=7.0
40
38
  Requires-Dist: colorama>=0.4.0
41
39
  Requires-Dist: dataclasses>=0.6; python_version < "3.7"
42
40
  Requires-Dist: dbx-stopwatch>=1.6
@@ -0,0 +1 @@
1
+ __version__ = '0.12.11'
@@ -2,7 +2,6 @@
2
2
  from __future__ import print_function
3
3
 
4
4
  import abc
5
- import click
6
5
  import sys
7
6
 
8
7
  abstract = abc.abstractmethod
@@ -39,19 +38,6 @@ class CommandBase(ModuleBase):
39
38
  class Command(CommandBase[Module]):
40
39
  commandstr = "command" # …a reserved word?
41
40
 
42
- class CLUI(click.MultiCommand):
43
-
44
- def iter_commands(self, context):
45
- modules = modules_for_appname_and_appspace(consts.APPNAME, API_APPSPACE)
46
- yield from (module.commandname for module in modules)
47
-
48
- def list_commands(self, context):
49
- return list(self.iter_commands(context))
50
-
51
- def get_command(self, context, key):
52
- dotpath = dotpath_join(consts.APPNAME, API_APPSPACE, key)
53
- return dotpath
54
-
55
41
  # Assign the modules’ `__all__` and `__dir__` using the exporter:
56
42
  __all__, __dir__ = exporter.all_and_dir()
57
43
 
@@ -60,17 +46,11 @@ def test():
60
46
  from clu.testing.utils import inline
61
47
 
62
48
  @inline
63
- def 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')
@@ -32,7 +32,7 @@ def determine_module(thing, name=None):
32
32
  import pickle
33
33
  return pickle.whichmodule(thing, name) # type: ignore
34
34
 
35
- """
35
+ __doc__ = """
36
36
  NAME AND MODULE SEARCH FUNCTIONS: the “nameof(…)” and “moduleof(…)”
37
37
  functions each search through, in order:
38
38
 
@@ -177,12 +177,26 @@ def isnative(thing):
177
177
  """ isnative(thing) → boolean predicate, True if `thing`
178
178
  comes from a native-compiled (“extension”) module.
179
179
  """
180
- module = moduleof(thing)
181
- 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':
182
185
  return False
183
- return isnativemodule(
184
- importlib.import_module(
185
- 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
186
200
 
187
201
  @export
188
202
  def isinspectable(thing):
@@ -235,7 +249,7 @@ def dotpath_split(dotpath):
235
249
 
236
250
  @export
237
251
  def qualified_import(qualified):
238
- """ Import a qualified thing-name.
252
+ """ Import a thing based on its full thing-name.
239
253
  e.g. 'instakit.processors.halftone.FloydSteinberg'
240
254
  """
241
255
  if QUALIFIER not in qualified:
@@ -253,16 +267,29 @@ def qualified_name_tuple(thing):
253
267
  """ Get the thing-name and module/package name for a class or module.
254
268
  e.g. ('FloydSteinberg', 'instakit.processors.halftone')
255
269
  """
256
- return nameof(thing), moduleof(thing)
270
+ from clu.predicates import pyqualname, pyname
271
+ from clu.typology import ismodule
272
+
273
+ # Special case for figuring out module names:
274
+ if ismodule(thing):
275
+ putative = pyname(thing)
276
+ if QUALIFIER in putative:
277
+ partition = putative.rpartition(QUALIFIER)
278
+ return partition[-1:][0], partition[:-1][0]
279
+ else:
280
+ return putative, ''
281
+
282
+ return pyqualname(thing) or nameof(thing), \
283
+ moduleof(thing)
257
284
 
258
285
  @export
259
286
  def qualified_name(thing):
260
- """ Get a qualified thing-name for a thing.
287
+ """ Get a full thing-name for a thing.
261
288
  e.g. 'instakit.processors.halftone.FloydSteinberg'
262
289
  """
263
290
  thing_name, module_name = qualified_name_tuple(thing)
264
- qualname = dotpath_join(module_name, thing_name)
265
- return qualname
291
+ fullname = dotpath_join(module_name, thing_name)
292
+ return fullname
266
293
 
267
294
  @export
268
295
  def dotpath_to_prefix(dotpath, sep='-', end='-'):
@@ -292,6 +292,7 @@ uncallable = negate(callable) # type: ignore
292
292
  hoist = lambda thing: uncallable(thing) and wrap_value(thing) or thing
293
293
 
294
294
  pyname = lambda thing: pyattr(thing, 'name', 'qualname')
295
+ pyqualname = lambda thing: pyattr(thing, 'qualname', 'name')
295
296
  pymodule = lambda thing: pyattr(thing, 'module', 'package')
296
297
 
297
298
  the_expandables = (tuple, list, set, frozenset,
@@ -435,7 +436,7 @@ def tuplize(*items):
435
436
  def uniquify(*items):
436
437
  """ uniquify(*items) → Return a generator yielding a unique set of all non-`None` arguments """
437
438
  seen = set() # type: set
438
- for item in filter(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
@@ -76,16 +76,13 @@ GLOBALS = globals()
76
76
  starmods = ('clu.repl.ansi',
77
77
  'clu.repl.columnize',
78
78
  'clu.repl.modules',
79
- 'clu.constants.enums',
80
- 'clu.constants.data',
81
- 'clu.application',
82
79
  'clu.config.abc',
83
80
  'clu.config.env',
84
81
  'clu.config.keymap',
85
82
  'clu.config.proxy',
86
- 'clu.dicts', 'clu.enums', 'clu.exporting',
83
+ 'clu.dicts', 'clu.exporting',
87
84
  'clu.importing', 'clu.naming', 'clu.predicates', 'clu.typology',
88
- 'clu.fs.abc', 'clu.fs.filesystem', 'clu.fs.misc', 'clu.repr',
85
+ 'clu.fs.filesystem', 'clu.fs.misc',
89
86
  'clu.scripts.treeline',
90
87
  'clu.typespace.namespace',
91
88
  'clu.testing.utils')
@@ -94,15 +91,20 @@ mods = ('clu',
94
91
  'clu.all',
95
92
  'clu.abstract',
96
93
  'clu.constants.consts',
94
+ 'clu.constants.data',
95
+ 'clu.constants.enums',
97
96
  'clu.constants.polyfills',
98
97
  'clu.config.codecs',
99
98
  'clu.config.ns',
100
99
  'clu.csv',
100
+ 'clu.enums',
101
+ 'clu.fs.abc',
101
102
  'clu.fs.appdirectories',
102
103
  'clu.keyvalue',
103
104
  'clu.mathematics',
104
105
  'clu.dispatch', 'clu.sanitizer', 'clu.fs.pypath',
105
106
  'clu.extending', 'clu.shelving.redat',
107
+ 'clu.repr',
106
108
  'clu.scripts.ansicolors',
107
109
  'clu.scripts.treeline',
108
110
  'clu.stdio',
@@ -113,7 +115,7 @@ mods = ('clu',
113
115
  'datetime', 'functools', 'importlib', 'inspect',
114
116
  'itertools', 'math', 'operator', 'pathlib',
115
117
  'pickle', 'six', 'shutil', 'sysconfig', 'weakref',
116
- 'numpy', 'more_itertools', 'colorama',
118
+ 'numpy', 'colorama',
117
119
  'xerox', 'zict')
118
120
 
119
121
  # “Star-import” all starmods – this is equivalent to doing:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.12.8
3
+ Version: 0.12.11
4
4
  Summary: Python-CLU: Common Lightweight Utilities
5
5
  Home-page: https://github.com/fish2000/clu
6
6
  Download-URL: https://github.com/fish2000/clu/zipball/master
@@ -24,7 +24,6 @@ Classifier: Topic :: Software Development
24
24
  Classifier: Topic :: Software Development :: Testing
25
25
  Classifier: Topic :: Utilities
26
26
  Classifier: Operating System :: MacOS
27
- Classifier: Operating System :: Microsoft :: Windows
28
27
  Classifier: Operating System :: OS Independent
29
28
  Classifier: Operating System :: POSIX
30
29
  Classifier: Operating System :: Unix
@@ -36,7 +35,6 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
36
35
  Description-Content-Type: text/markdown
37
36
  License-File: LICENSE.txt
38
37
  Requires-Dist: build>=1.2.2
39
- Requires-Dist: Click>=7.0
40
38
  Requires-Dist: colorama>=0.4.0
41
39
  Requires-Dist: dataclasses>=0.6; python_version < "3.7"
42
40
  Requires-Dist: dbx-stopwatch>=1.6
@@ -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
@@ -11,7 +11,6 @@ coverage>=5.0.0
11
11
  curtsies>=0.3.1
12
12
  cython>=0.29.14
13
13
  gfm>=0.0.2
14
- greenlet>=0.4.0
15
14
  ipython>=7.10.0
16
15
  jedi>=0.16.0
17
16
  lmdb>=0.8.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
@@ -23,13 +23,12 @@
23
23
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
24
  # SOFTWARE.
25
25
  #
26
- ''' CLU - Common Lightweight Utilities, or Command-Line Utilities (your pick) '''
26
+ ''' CLU - Common Lightweight Utilities '''
27
27
 
28
28
  from __future__ import print_function
29
29
  from setuptools import setup, find_packages
30
30
 
31
- import os
32
- import sys
31
+ import sys, os, io
33
32
  import sysconfig
34
33
 
35
34
  # CONSTANTS
@@ -40,11 +39,9 @@ AUTHOR_USER = 'fish2000'
40
39
  GITHUB = 'github.com'
41
40
  GMAIL = 'gmail.com'
42
41
 
43
- AUTHOR_EMAIL = '%s@%s' % (AUTHOR_USER, GMAIL)
44
- PROJECT_GH_URL = 'https://%s/%s/%s' % (GITHUB,
45
- AUTHOR_USER,
46
- PROJECT_NAME)
47
- PROJECT_DL_URL = '%s/zipball/master' % PROJECT_GH_URL
42
+ AUTHOR_EMAIL = f'{AUTHOR_USER}@{GMAIL}'
43
+ PROJECT_GH_URL = f'https://{GITHUB}/{AUTHOR_USER}/{PROJECT_NAME}'
44
+ PROJECT_DL_URL = f'{PROJECT_GH_URL}/zipball/master'
48
45
 
49
46
  KEYWORDS = ('command',
50
47
  'utilities', PROJECT_NAME,
@@ -69,15 +66,14 @@ ENTRY_POINTS = {
69
66
  }
70
67
 
71
68
  def project_content(*filenames):
72
- import io
73
69
  filepath = os.path.join(CWD, *filenames)
74
70
  if not os.path.isfile(filepath):
75
- raise IOError("""File %s doesn't exist""" % filepath)
71
+ raise IOError(f"File {filepath} doesn't exist")
76
72
  out = ''
77
73
  with io.open(filepath, 'r') as handle:
78
74
  out += handle.read()
79
75
  if not out:
80
- raise ValueError("""File %s couldn't be read""" % os.path.sep.join(filenames))
76
+ raise ValueError(f"File {filepath} couldn't be read")
81
77
  return out.strip()
82
78
 
83
79
  # PROJECT VERSION & METADATA
@@ -88,7 +84,7 @@ try:
88
84
  '__version__.py')).read(),
89
85
  '__version__.py', 'exec'))
90
86
  except:
91
- __version__ = '0.12.8'
87
+ __version__ = '0.12.11'
92
88
 
93
89
  # PROJECT DESCRIPTION
94
90
  LONG_DESCRIPTION = project_content('ABOUT.md')
@@ -1 +0,0 @@
1
- __version__ = '0.12.8'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes