python-clu 0.11.4__tar.gz → 0.11.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. {python_clu-0.11.4 → python_clu-0.11.5}/.bumpversion.toml +1 -1
  2. {python_clu-0.11.4 → python_clu-0.11.5}/PKG-INFO +1 -1
  3. python_clu-0.11.5/clu/__version__.py +1 -0
  4. {python_clu-0.11.4 → python_clu-0.11.5}/clu/abstract.py +1 -1
  5. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/abc.py +3 -2
  6. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/filesystem.py +6 -8
  7. {python_clu-0.11.4 → python_clu-0.11.5}/clu/predicates.py +10 -8
  8. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/modules.py +42 -22
  9. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/repl.py +7 -4
  10. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/PKG-INFO +1 -1
  11. {python_clu-0.11.4 → python_clu-0.11.5}/setup.py +1 -1
  12. python_clu-0.11.4/clu/__version__.py +0 -1
  13. {python_clu-0.11.4 → python_clu-0.11.5}/.coveragerc +0 -0
  14. {python_clu-0.11.4 → python_clu-0.11.5}/.editorconfig +0 -0
  15. {python_clu-0.11.4 → python_clu-0.11.5}/.gitchangelog.rc +0 -0
  16. {python_clu-0.11.4 → python_clu-0.11.5}/.gitignore +0 -0
  17. {python_clu-0.11.4 → python_clu-0.11.5}/.landscape.yml +0 -0
  18. {python_clu-0.11.4 → python_clu-0.11.5}/.travis.yml +0 -0
  19. {python_clu-0.11.4 → python_clu-0.11.5}/ABOUT.md +0 -0
  20. {python_clu-0.11.4 → python_clu-0.11.5}/CHANGELOG.md +0 -0
  21. {python_clu-0.11.4 → python_clu-0.11.5}/CLASSIFIERS.txt +0 -0
  22. {python_clu-0.11.4 → python_clu-0.11.5}/CODE_OF_CONDUCT.md +0 -0
  23. {python_clu-0.11.4 → python_clu-0.11.5}/COPYING.md +0 -0
  24. {python_clu-0.11.4 → python_clu-0.11.5}/LICENSE.txt +0 -0
  25. {python_clu-0.11.4 → python_clu-0.11.5}/MANIFEST.in +0 -0
  26. {python_clu-0.11.4 → python_clu-0.11.5}/Makefile +0 -0
  27. {python_clu-0.11.4 → python_clu-0.11.5}/README.md +0 -0
  28. {python_clu-0.11.4 → python_clu-0.11.5}/appveyor.yml +0 -0
  29. {python_clu-0.11.4 → python_clu-0.11.5}/clu/__init__.py +0 -0
  30. {python_clu-0.11.4 → python_clu-0.11.5}/clu/__main__.py +0 -0
  31. {python_clu-0.11.4 → python_clu-0.11.5}/clu/all.py +0 -0
  32. {python_clu-0.11.4 → python_clu-0.11.5}/clu/api/__init__.py +0 -0
  33. {python_clu-0.11.4 → python_clu-0.11.5}/clu/api/__main__.py +0 -0
  34. {python_clu-0.11.4 → python_clu-0.11.5}/clu/application.py +0 -0
  35. {python_clu-0.11.4 → python_clu-0.11.5}/clu/compilation/__init__.py +0 -0
  36. {python_clu-0.11.4 → python_clu-0.11.5}/clu/compilation/compiledb.py +0 -0
  37. {python_clu-0.11.4 → python_clu-0.11.5}/clu/compilation/macros.py +0 -0
  38. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/__init__.py +0 -0
  39. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/abc.py +0 -0
  40. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/base.py +0 -0
  41. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/codecs.py +0 -0
  42. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/env.py +0 -0
  43. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/fieldtypes.py +0 -0
  44. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/filebase.py +0 -0
  45. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/formats/__init__.py +0 -0
  46. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/formats/jsonfile.py +0 -0
  47. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/formats/picklefile.py +0 -0
  48. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/formats/tomlfile.py +0 -0
  49. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/formats/yamlfile.py +0 -0
  50. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/keymap.py +0 -0
  51. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/keymapview.py +0 -0
  52. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/ns.py +0 -0
  53. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/proxy.py +0 -0
  54. {python_clu-0.11.4 → python_clu-0.11.5}/clu/config/settings.py +0 -0
  55. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/__init__.py +0 -0
  56. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/__main__.py +0 -0
  57. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/consts.py +0 -0
  58. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/data.py +0 -0
  59. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/enums.py +0 -0
  60. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/exceptions.py +0 -0
  61. {python_clu-0.11.4 → python_clu-0.11.5}/clu/constants/polyfills.py +0 -0
  62. {python_clu-0.11.4 → python_clu-0.11.5}/clu/csv.py +0 -0
  63. {python_clu-0.11.4 → python_clu-0.11.5}/clu/dicts.py +0 -0
  64. {python_clu-0.11.4 → python_clu-0.11.5}/clu/dispatch.py +0 -0
  65. {python_clu-0.11.4 → python_clu-0.11.5}/clu/enums.py +0 -0
  66. {python_clu-0.11.4 → python_clu-0.11.5}/clu/exporting.py +0 -0
  67. {python_clu-0.11.4 → python_clu-0.11.5}/clu/extending.py +0 -0
  68. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/__init__.py +0 -0
  69. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/appdirectories.py +0 -0
  70. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/misc.py +0 -0
  71. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/pypath.py +0 -0
  72. {python_clu-0.11.4 → python_clu-0.11.5}/clu/fs/sourcetree.py +0 -0
  73. {python_clu-0.11.4 → python_clu-0.11.5}/clu/importing/__init__.py +0 -0
  74. {python_clu-0.11.4 → python_clu-0.11.5}/clu/importing/__main__.py +0 -0
  75. {python_clu-0.11.4 → python_clu-0.11.5}/clu/importing/base.py +0 -0
  76. {python_clu-0.11.4 → python_clu-0.11.5}/clu/importing/proxy.py +0 -0
  77. {python_clu-0.11.4 → python_clu-0.11.5}/clu/keyvalue.py +0 -0
  78. {python_clu-0.11.4 → python_clu-0.11.5}/clu/mathematics.py +0 -0
  79. {python_clu-0.11.4 → python_clu-0.11.5}/clu/naming.py +0 -0
  80. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/__init__.py +0 -0
  81. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/ansi.py +0 -0
  82. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/banners.py +0 -0
  83. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/cli/__init__.py +0 -0
  84. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/cli/boilerplate.py +0 -0
  85. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/cli/boilerplate_copy.py +0 -0
  86. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/cli/print_version.py +0 -0
  87. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repl/columnize.py +0 -0
  88. {python_clu-0.11.4 → python_clu-0.11.5}/clu/repr.py +0 -0
  89. {python_clu-0.11.4 → python_clu-0.11.5}/clu/sanitizer.py +0 -0
  90. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/.gitignore +0 -0
  91. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/README.md +0 -0
  92. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/__init__.py +0 -0
  93. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/ansicolors.py +0 -0
  94. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/boilerplate.py +0 -0
  95. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/dictroast.py +0 -0
  96. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/legacy/forkumask.py +0 -0
  97. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/legacy/repl-bpython.py +0 -0
  98. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/legacy/repl-ipython.py +0 -0
  99. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/legacy/repl-ptpython.py +0 -0
  100. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/legacy/repl-pyzo.py +0 -0
  101. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/legacy/xdg-runtime.py +0 -0
  102. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/prediversus.py +0 -0
  103. {python_clu-0.11.4 → python_clu-0.11.5}/clu/scripts/treeline.py +0 -0
  104. {python_clu-0.11.4 → python_clu-0.11.5}/clu/shelving/__init__.py +0 -0
  105. {python_clu-0.11.4 → python_clu-0.11.5}/clu/shelving/redat.py +0 -0
  106. {python_clu-0.11.4 → python_clu-0.11.5}/clu/shelving/redis.conf +0 -0
  107. {python_clu-0.11.4 → python_clu-0.11.5}/clu/stdio.py +0 -0
  108. {python_clu-0.11.4 → python_clu-0.11.5}/clu/testing/__init__.py +0 -0
  109. {python_clu-0.11.4 → python_clu-0.11.5}/clu/testing/hook.py +0 -0
  110. {python_clu-0.11.4 → python_clu-0.11.5}/clu/testing/obsolete.py +0 -0
  111. {python_clu-0.11.4 → python_clu-0.11.5}/clu/testing/pytest.py +0 -0
  112. {python_clu-0.11.4 → python_clu-0.11.5}/clu/testing/utils.py +0 -0
  113. {python_clu-0.11.4 → python_clu-0.11.5}/clu/typespace/__init__.py +0 -0
  114. {python_clu-0.11.4 → python_clu-0.11.5}/clu/typespace/__main__.py +0 -0
  115. {python_clu-0.11.4 → python_clu-0.11.5}/clu/typespace/namespace.py +0 -0
  116. {python_clu-0.11.4 → python_clu-0.11.5}/clu/typology.py +0 -0
  117. {python_clu-0.11.4 → python_clu-0.11.5}/clu/version/__init__.py +0 -0
  118. {python_clu-0.11.4 → python_clu-0.11.5}/clu/version/__main__.py +0 -0
  119. {python_clu-0.11.4 → python_clu-0.11.5}/clu/version/git_version.py +0 -0
  120. {python_clu-0.11.4 → python_clu-0.11.5}/clu/version/read_version.py +0 -0
  121. {python_clu-0.11.4 → python_clu-0.11.5}/codecov.yml +0 -0
  122. {python_clu-0.11.4 → python_clu-0.11.5}/conftest.py +0 -0
  123. {python_clu-0.11.4 → python_clu-0.11.5}/docs/Makefile +0 -0
  124. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/doctrees/api.doctree +0 -0
  125. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/doctrees/environment.pickle +0 -0
  126. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/doctrees/generated/clu.doctree +0 -0
  127. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/doctrees/index.doctree +0 -0
  128. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/.buildinfo +0 -0
  129. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_sources/api.rst.txt +0 -0
  130. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_sources/generated/clu.rst.txt +0 -0
  131. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_sources/index.rst.txt +0 -0
  132. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  133. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/alabaster.css +0 -0
  134. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/basic.css +0 -0
  135. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/badge_only.css +0 -0
  136. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  137. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  138. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  139. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  140. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  141. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  142. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  143. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  144. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  145. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  146. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  147. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  148. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  149. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  150. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  151. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  152. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  153. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/css/theme.css +0 -0
  154. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/custom.css +0 -0
  155. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/doctools.js +0 -0
  156. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/documentation_options.js +0 -0
  157. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/file.png +0 -0
  158. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  159. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/jquery.js +0 -0
  160. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/js/badge_only.js +0 -0
  161. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  162. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  163. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/js/theme.js +0 -0
  164. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/language_data.js +0 -0
  165. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/minus.png +0 -0
  166. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/plus.png +0 -0
  167. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/pygments.css +0 -0
  168. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/searchtools.js +0 -0
  169. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  170. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/_static/underscore.js +0 -0
  171. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/api.html +0 -0
  172. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/generated/clu.html +0 -0
  173. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/genindex.html +0 -0
  174. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/index.html +0 -0
  175. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/objects.inv +0 -0
  176. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/py-modindex.html +0 -0
  177. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/search.html +0 -0
  178. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/html/searchindex.js +0 -0
  179. {python_clu-0.11.4 → python_clu-0.11.5}/docs/build/man/clu.1 +0 -0
  180. {python_clu-0.11.4 → python_clu-0.11.5}/docs/make.bat +0 -0
  181. {python_clu-0.11.4 → python_clu-0.11.5}/docs/source/api.rst +0 -0
  182. {python_clu-0.11.4 → python_clu-0.11.5}/docs/source/conf.py +0 -0
  183. {python_clu-0.11.4 → python_clu-0.11.5}/docs/source/generated/clu.rst +0 -0
  184. {python_clu-0.11.4 → python_clu-0.11.5}/docs/source/index.rst +0 -0
  185. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/autohook.sh +0 -0
  186. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/post-push/00-coverage.sh +0 -0
  187. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/pre-push/00-noop.sh +0 -0
  188. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/pre-push/01-direnv-stdlib.sh +0 -0
  189. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/scripts/coverage.sh +0 -0
  190. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/scripts/display-issues.sh +0 -0
  191. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/scripts/git-pushex +0 -0
  192. {python_clu-0.11.4 → python_clu-0.11.5}/hooks/scripts/noop.sh +0 -0
  193. {python_clu-0.11.4 → python_clu-0.11.5}/mypy.ini +0 -0
  194. {python_clu-0.11.4 → python_clu-0.11.5}/noxfile.py +0 -0
  195. {python_clu-0.11.4 → python_clu-0.11.5}/pyproject.toml +0 -0
  196. {python_clu-0.11.4 → python_clu-0.11.5}/pytest.ini +0 -0
  197. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/SOURCES.txt +0 -0
  198. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/dependency_links.txt +0 -0
  199. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/entry_points.txt +0 -0
  200. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/requires.txt +0 -0
  201. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/top_level.txt +0 -0
  202. {python_clu-0.11.4 → python_clu-0.11.5}/python_clu.egg-info/zip-safe +0 -0
  203. {python_clu-0.11.4 → python_clu-0.11.5}/pytype.cfg +0 -0
  204. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/changelog.txt +0 -0
  205. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/dev.txt +0 -0
  206. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/docs.txt +0 -0
  207. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/install.txt +0 -0
  208. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/nox/codecov.txt +0 -0
  209. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/nox/docs.txt +0 -0
  210. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/nox/manifest.txt +0 -0
  211. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/nox/repl.txt +0 -0
  212. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/nox/tests.txt +0 -0
  213. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/tox.txt +0 -0
  214. {python_clu-0.11.4 → python_clu-0.11.5}/requirements/typecheck.txt +0 -0
  215. {python_clu-0.11.4 → python_clu-0.11.5}/scratch/direnv_transformed_env.py +0 -0
  216. {python_clu-0.11.4 → python_clu-0.11.5}/scratch/inline-tests-ImportError-uggggh.ipynb +0 -0
  217. {python_clu-0.11.4 → python_clu-0.11.5}/scratch/nteract.ipynb +0 -0
  218. {python_clu-0.11.4 → python_clu-0.11.5}/setup.cfg +0 -0
  219. {python_clu-0.11.4 → python_clu-0.11.5}/tests/__init__.py +0 -0
  220. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/1-58.jpg +0 -0
  221. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/3471426989_aa8e83cac5_o.jpg +0 -0
  222. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/3472236406_1fbf1a567d_o.jpg +0 -0
  223. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/8600JC.jpg +0 -0
  224. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/8ba.png +0 -0
  225. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/IMG_20180505_205153567.jpg +0 -0
  226. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/cheetah-003.jpg +0 -0
  227. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/config/clu-config.toml +0 -0
  228. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/config/yodogg.toml +0 -0
  229. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/shutterstock_90194617.jpg +0 -0
  230. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/yodata/09163d51421853.5608b3c2a1be0.jpg +0 -0
  231. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/yodata/5d0227342500004e12e3506d.jpg +0 -0
  232. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/yodata/BlackCat2_large-22.jpg +0 -0
  233. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/yodogg/Serval_Cat_Kitten-706.jpg +0 -0
  234. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/yodogg/Servals_Thoiry_19801.jpg +0 -0
  235. {python_clu-0.11.4 → python_clu-0.11.5}/tests/data/yodogg/video-pride-serval.jpg +0 -0
  236. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_abstract.py +0 -0
  237. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_all.py +0 -0
  238. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_boilerplate.py +0 -0
  239. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_config.py +0 -0
  240. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_config_abc.py +0 -0
  241. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_csv.py +0 -0
  242. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_dicts.py +0 -0
  243. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_dispatch.py +0 -0
  244. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_enum_aliases.py +0 -0
  245. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_exporting.py +0 -0
  246. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_extending.py +0 -0
  247. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_fs_abc.py +0 -0
  248. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_fs_appdirectories.py +0 -0
  249. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_fs_filesystem.py +0 -0
  250. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_fs_misc.py +0 -0
  251. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_importing.py +0 -0
  252. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_keyvalue.py +0 -0
  253. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_mathematics.py +0 -0
  254. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_naming.py +0 -0
  255. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_predicates.py +0 -0
  256. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_repl_columnize.py +0 -0
  257. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_repl_modules.py +0 -0
  258. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_repr.py +0 -0
  259. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_scripts_repl.py +0 -0
  260. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_typespace_namespace.py +0 -0
  261. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_typology.py +0 -0
  262. {python_clu-0.11.4 → python_clu-0.11.5}/tests/test_version.py +0 -0
  263. {python_clu-0.11.4 → python_clu-0.11.5}/tests/yodogg/.tm_properties +0 -0
  264. {python_clu-0.11.4 → python_clu-0.11.5}/tests/yodogg/__init__.py +0 -0
  265. {python_clu-0.11.4 → python_clu-0.11.5}/tests/yodogg/yodogg/__init__.py +0 -0
  266. {python_clu-0.11.4 → python_clu-0.11.5}/tests/yodogg/yodogg/config.py +0 -0
  267. {python_clu-0.11.4 → python_clu-0.11.5}/tests/yodogg/yodogg/exporting.py +0 -0
  268. {python_clu-0.11.4 → python_clu-0.11.5}/tests/yodogg/yodogg/iheard.py +0 -0
  269. {python_clu-0.11.4 → python_clu-0.11.5}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  [tool.bumpversion]
3
- current_version = "0.11.4"
3
+ current_version = "0.11.5"
4
4
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
5
5
  serialize = ["{major}.{minor}.{patch}"]
6
6
  search = "{current_version}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.11.4
3
+ Version: 0.11.5
4
4
  Summary: CLU - Common Lightweight Utilities, or Command-Line Utilities (your pick)
5
5
  Home-page: https://github.com/fish2000/clu
6
6
  Download-URL: https://github.com/fish2000/clu/zipball/master
@@ -0,0 +1 @@
1
+ __version__ = '0.11.5'
@@ -408,7 +408,7 @@ class ManagedContext(contextlib.AbstractContextManager):
408
408
  __all__ = ('Slotted', 'SlotMatch', 'NonSlotted',
409
409
  'UnhashableMeta', 'Unhashable',
410
410
  'Format', 'NonFormat', 'SlottedFormat', 'Sanitizer',
411
- 'Cloneable',
411
+ 'Serializable', 'Cloneable',
412
412
  'ReprWrapper', 'SlottedRepr', 'MappingViewRepr',
413
413
  'evict_announcer',
414
414
  'BaseDescriptor', 'DataDescriptor', 'NamedDescriptor',
@@ -136,12 +136,13 @@ class BaseFSName(collections.abc.Hashable,
136
136
  os.path.realpath(
137
137
  os.fspath(source or self.name)))
138
138
 
139
- def parent(self):
139
+ def parent(self, followlinks=True):
140
140
  """ Sugar for `self.directory(os.path.abspath(os.path.dirname(self.name)))`
141
141
  …which, if you are curious, gets you the parent directory of the target
142
142
  instance, wrapped in a new `Directory` instance.
143
143
  """
144
- return self.directory(os.path.abspath(os.path.dirname(self.name)))
144
+ realifier = followlinks and os.path.realpath or os.path.abspath
145
+ return self.directory(realifier(os.path.dirname(self.name)))
145
146
 
146
147
  def relparent(self, path):
147
148
  """ Relativize a path, relative to its directory parent, and return it
@@ -759,11 +759,8 @@ class Directory(BaseFSName,
759
759
  yield from os.walk(self.name, followlinks=followlinks)
760
760
 
761
761
  def walkback(self, followlinks=True):
762
- """ Iterator over reverse-walked directories and files.
763
-
764
- N.B. Since I had to implement this myself, “followlinks”
765
- doesn’t do anything yet. This is because I am lazy and
766
- I lack intellectual rigor.
762
+ """ Iterator over reverse-walked directories and files. Use
763
+ the `followlinks=True` flag to do what you think it does.
767
764
 
768
765
  The return triple resembles that yielded by “os.walk(…)” –
769
766
  but unlike that function, modifying the directory listing
@@ -787,7 +784,7 @@ class Directory(BaseFSName,
787
784
  yield directory, dirs, files
788
785
  if directory.name == ROOT_PATH:
789
786
  break
790
- directory = directory.parent()
787
+ directory = directory.parent(followlinks=followlinks)
791
788
 
792
789
  def flatten(self, destination, suffix=None, new_suffix=None):
793
790
  """ Copy the entire directory tree, all contents included, to a new
@@ -937,8 +934,9 @@ class Directory(BaseFSName,
937
934
  dirs[:] = list(filter(excluder, dirs))
938
935
  filenames = filter(excluder,
939
936
  filter(searcher, files))
940
- dotpaths.update(path_to_dotpath(os.path.join(root, filename),
941
- relative_to=self.name)
937
+ dotpaths.update(path_to_dotpath(
938
+ os.path.join(root, filename),
939
+ relative_to=self.name)
942
940
  for filename in filenames)
943
941
  yield from sorted(dotpaths)
944
942
 
@@ -195,17 +195,18 @@ def try_items(itx, *things, default=NoDefault):
195
195
 
196
196
  # SOME COMMON SHORTCUTS:
197
197
 
198
- dunder_or = lambda thing, atx: getpyattr(thing, atx, thing)
198
+ dunder_or = lambda thing, atx: getpyattr(thing, atx, thing)
199
199
 
200
- mro = lambda thing: getpyattr(typeof(thing), 'mro')
201
- unwrap = lambda thing: dunder_or(thing, 'wrapped')
202
- origin = lambda thing: typeof(dunder_or(thing, 'origin'))
203
- rmro = reverse(mro)
200
+ mro = lambda thing: getpyattr(typeof(thing), 'mro')
201
+ unwrap = lambda thing: dunder_or(thing, 'wrapped')
202
+ origin = lambda thing: typeof(dunder_or(thing, 'origin'))
203
+ rmro = reverse(mro)
204
204
 
205
- isancestor = lambda cls, ancestor=object: ancestor in mro(cls)
206
- isorigin = lambda cls, originator=object: isancestor(origin(cls), ancestor=typeof(originator))
205
+ isancestor = lambda cls, ancestor=object: ancestor in mro(cls)
206
+ isorigin = lambda cls, originator=object: isancestor(origin(cls), ancestor=typeof(originator))
207
207
 
208
- ispublic = lambda string: not ispyname(string) and not ismifflin(string)
208
+ ismarkedprivate = lambda string: string.startswith('_')
209
+ ispublic = lambda string: not ispyname(string) and not ismifflin(string)
209
210
 
210
211
  @export
211
212
  class Base(object):
@@ -566,6 +567,7 @@ export(unwrap, name='unwrap', doc="unwrap(thing) → Return ei
566
567
  export(origin, name='origin', doc="origin(thing) → Return either `typeof(thing).__origin__` or `typeof(thing)` for a given `thing`")
567
568
  export(isancestor, name='isancestor', doc="isancestor(thing, ancestor=object) → boolean predicate, True if `ancestor` is found in “mro(thing)”")
568
569
  export(isorigin, name='isorigin', doc="isorigin(thing, original=object) → boolean predicate, True if `original` is an ancestor of “origin(thing)”")
570
+ export(ismarkedprivate, name='ismarkedprivate', doc="ismarkedprivate(string)) → boolean predicate, True if `string` doesn’t begin with an _underscore")
569
571
  export(ispublic, name='ispublic', doc="ispublic(string) → boolean predicate, True if `string` is neither in __dunder__ or _sunder_ (née “_mifflin_”) form")
570
572
 
571
573
  export(predicate_nop, name='predicate_nop', doc="predicate_nop(thing) → boolean predicate that always returns `None`")
@@ -7,6 +7,7 @@ import collections.abc
7
7
  import clu.abstract
8
8
  import clu.dicts
9
9
  import clu.all
10
+ import importlib
10
11
  import pickle
11
12
  import sys
12
13
 
@@ -65,7 +66,7 @@ class ModuleMap(collections.abc.Mapping,
65
66
  if not isinstance(module, (type(self), types.Module)):
66
67
  raise TypeError("module instance required")
67
68
  self.module = getattr(module, 'module', module)
68
- self.reload()
69
+ self.reload(reload_module=False)
69
70
 
70
71
  def __iter__(self):
71
72
  yield from self.dir
@@ -97,7 +98,9 @@ class ModuleMap(collections.abc.Mapping,
97
98
  def items(self):
98
99
  return clu.dicts.OrderedItemsView(self)
99
100
 
100
- def reload(self):
101
+ def reload(self, reload_module=True):
102
+ if reload_module:
103
+ self.module = importlib.reload(self.module)
101
104
  self.dir = tuple(sorted(filter(notpyname, dir(self.module)), key=lowers))
102
105
  length = len(self.dir)
103
106
  if length < 1:
@@ -117,8 +120,12 @@ class ModuleMap(collections.abc.Mapping,
117
120
  def inner_repr(self):
118
121
  return repr(dict(self))
119
122
 
123
+ clu_importall = clu.all.import_all_modules
124
+
120
125
  @cache
121
- def compare_module_lookups_for_all_things(*modules, **options):
126
+ def compare_module_lookups_for_all_things(*modules,
127
+ module_function=clu_importall,
128
+ **options):
122
129
  """ Iterate through each exported item, for each exported module,
123
130
  and look up the original module of the exported item with both:
124
131
 
@@ -139,23 +146,24 @@ def compare_module_lookups_for_all_things(*modules, **options):
139
146
  appname = options.get('appname', consts.APPNAME)
140
147
  exporter_name = options.get('exporter_name', consts.EXPORTER_NAME)
141
148
 
142
- idx = 0
143
149
  total = 0
144
- mismatch_count = 0
150
+ item_idx = 0
151
+ module_idx = 0
152
+ mismatch_idx = 0
145
153
  mismatches = []
146
154
  results = []
147
155
 
148
- clumodules = clu.all.import_all_modules(basepath,
149
- appname,
150
- exporter_name)
151
- assert clumodules
156
+ loaded_modules = module_function(basepath, appname, exporter_name)
157
+ assert loaded_modules
152
158
 
153
159
  modulenames = tuple(modules or Exporter.modulenames())
154
160
 
155
161
  for modulename in modulenames:
156
162
  exports = Exporter[modulename].exports()
157
163
  total += len(exports)
158
- results.append(Result(modulename, tuple(exports.keys()), idx))
164
+ results.append(Result(modulename,
165
+ tuple(exports.keys()),
166
+ module_idx))
159
167
 
160
168
  for name, thing in exports.items():
161
169
  whichmodule = pickle.whichmodule(thing, None)
@@ -167,17 +175,18 @@ def compare_module_lookups_for_all_things(*modules, **options):
167
175
  determination,
168
176
  modulename,
169
177
  nameof(thing),
170
- mismatch_count))
171
- mismatch_count += 1
172
- idx += 1
178
+ mismatch_idx))
179
+ mismatch_idx += 1
180
+ item_idx += 1
181
+ module_idx += 1
173
182
 
174
183
  # In practice the failure rate seemed to be around 7.65 %
175
- failure_rate = 100 * (float(mismatch_count) / float(total))
184
+ failure_rate = 100 * (float(mismatch_idx) / float(total))
176
185
  assert failure_rate < 10.0 # percent
177
186
 
178
- return Results(idx, modulenames, tuple(results)), \
179
- Mismatches(mismatch_count, tuple(mismatches),
180
- failure_rate)
187
+ return Results(item_idx, modulenames, tuple(results)), \
188
+ Mismatches(mismatch_idx, tuple(mismatches),
189
+ failure_rate)
181
190
 
182
191
  export(notpyname, name='notpyname', doc="notpyname(string) → boolean predicate, returns True unless string is a __dunder__ name, when it returns False")
183
192
  export(isplural, name='isplural', doc="isplural(integer) → returns an 's' unless the integer argument is 1, in which case it returns an empty string")
@@ -196,31 +205,38 @@ def test():
196
205
 
197
206
  @inline.fixture
198
207
  def predicate_modules():
199
- modules = ('predicates', 'typology', 'mathematics', 'naming')
208
+ modules = ('predicates', 'typology', 'mathematics', 'naming',
209
+ 'exporting', 'extending', 'all', 'enums')
200
210
  prefixd = tuple(f"clu.{nm}" for nm in modules)
201
211
  return prefixd
202
212
 
203
213
  @inline
204
- def test_one():
214
+ def test_compare_all():
205
215
  """ Basic checks for compare_module_lookups_for_all_things(…) """
206
216
  results, mismatches = compare_module_lookups_for_all_things()
207
217
 
218
+ for idx, result in enumerate(results.result_records):
219
+ assert result.idx == idx
220
+
208
221
  assert results.total > 100
209
222
  assert mismatches.total > 0
210
223
  assert mismatches.failure_rate < 10.0
211
224
 
212
225
  @inline
213
- def test_two():
226
+ def test_compare_all_with_varargs():
214
227
  """ With-vararg checks for compare_module_lookups_for_all_things(…) """
215
228
  results, mismatches = compare_module_lookups_for_all_things(
216
229
  *predicate_modules())
217
230
 
231
+ for idx, result in enumerate(results.result_records):
232
+ assert result.idx == idx
233
+
218
234
  assert results.total > 100
219
235
  assert mismatches.total > 0
220
236
  assert mismatches.failure_rate < 10.0
221
237
 
222
238
  @inline
223
- def test_three():
239
+ def test_modulemap_with_clu_consts():
224
240
  """ Basic checks for ModuleMap adapter """
225
241
  constmap = ModuleMap(consts)
226
242
 
@@ -240,8 +256,12 @@ def test():
240
256
  # doesn’t export any dunder-named things:
241
257
  assert frozenconsts.issuperset(constmap.keys())
242
258
  assert frozenconsts.issubset(constmap.keys())
259
+
260
+ # Try reloading:
261
+ constmap.reload()
262
+ assert constmap.reload() == len(constmap)
243
263
 
244
- return inline.test(50)
264
+ return inline.test(100)
245
265
 
246
266
  if __name__ == '__main__':
247
267
  sys.exit(test())
@@ -35,12 +35,15 @@ from clu.all import import_clu_modules
35
35
  from clu.config.env import Environ
36
36
  from clu.constants import consts
37
37
  from clu.naming import nameof, qualified_import
38
- from clu.predicates import ispublic, listify
38
+ from clu.predicates import ispublic, ismarkedprivate, listify
39
39
  from clu.repl import columnize
40
40
 
41
41
  # Set up the __all__ tuple:
42
42
  __all__ = list()
43
43
 
44
+ # predicate for star-importing:
45
+ ok_for_star_import = lambda name: ispublic(name) and not ismarkedprivate(name)
46
+
44
47
  # MODULE EXPORT FUNCTIONS: given a module name, export
45
48
  # either the module or its contents into a given namespace:
46
49
  def star_export(modulename, namespace, alltuple=__all__):
@@ -50,7 +53,7 @@ def star_export(modulename, namespace, alltuple=__all__):
50
53
  except ValueError:
51
54
  module = importlib.import_module(modulename)
52
55
  for name in dir(module):
53
- if ispublic(name):
56
+ if ok_for_star_import(name):
54
57
  namespace[name] = getattr(module, name)
55
58
  alltuple += listify(name)
56
59
 
@@ -134,7 +137,6 @@ for mod in mods:
134
137
  # Additionals and corner-cases – imports requiring their own
135
138
  # bespoke import-statement forms:
136
139
  import collections.abc
137
- from PIL import Image
138
140
  from pprint import pprint, pformat
139
141
 
140
142
  pp = pprint
@@ -184,6 +186,7 @@ def explain(thing, width=None):
184
186
  ljust=True))
185
187
 
186
188
  try:
189
+ from PIL import Image
187
190
  from instakit.utils.static import asset
188
191
  except (ImportError, SyntaxError, TypeError): # pragma: no cover
189
192
  pass
@@ -207,7 +210,7 @@ if 'user:script' in cluenv:
207
210
  if os.path.exists(user_script_path):
208
211
  user_script_globals = runpy.run_path(user_script_path)
209
212
  GLOBALS.update(user_script_globals)
210
- __all__ += list(filter(ispublic, user_script_globals.keys()))
213
+ __all__ += list(filter(ok_for_star_import, user_script_globals.keys()))
211
214
  else:
212
215
  message = "CLU_USER_SCRIPT needs to point to a Python file"
213
216
  warnings.simplefilter('always')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-clu
3
- Version: 0.11.4
3
+ Version: 0.11.5
4
4
  Summary: CLU - Common Lightweight Utilities, or Command-Line Utilities (your pick)
5
5
  Home-page: https://github.com/fish2000/clu
6
6
  Download-URL: https://github.com/fish2000/clu/zipball/master
@@ -91,7 +91,7 @@ try:
91
91
  '__version__.py')).read(),
92
92
  '__version__.py', 'exec'))
93
93
  except:
94
- __version__ = '0.11.4'
94
+ __version__ = '0.11.5'
95
95
 
96
96
  # PROJECT DESCRIPTION
97
97
  LONG_DESCRIPTION = project_content('ABOUT.md')
@@ -1 +0,0 @@
1
- __version__ = '0.11.4'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes