android-notify 1.60.0__py3-none-any.whl → 1.60.2__py3-none-any.whl

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.

Potentially problematic release.


This version of android-notify might be problematic. Click here for more details.

Files changed (375) hide show
  1. android_notify/config.py +1 -1
  2. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/METADATA +4 -4
  3. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/RECORD +375 -6
  4. venv/Lib/site-packages/_distutils_hack/__init__.py +239 -0
  5. venv/Lib/site-packages/_distutils_hack/override.py +1 -0
  6. venv/Lib/site-packages/pkg_resources/__init__.py +3713 -0
  7. venv/Lib/site-packages/pkg_resources/py.typed +0 -0
  8. venv/Lib/site-packages/pkg_resources/tests/__init__.py +0 -0
  9. venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +7 -0
  10. venv/Lib/site-packages/pkg_resources/tests/test_find_distributions.py +56 -0
  11. venv/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py +54 -0
  12. venv/Lib/site-packages/pkg_resources/tests/test_markers.py +8 -0
  13. venv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +485 -0
  14. venv/Lib/site-packages/pkg_resources/tests/test_resources.py +869 -0
  15. venv/Lib/site-packages/pkg_resources/tests/test_working_set.py +505 -0
  16. venv/Lib/site-packages/setuptools/__init__.py +248 -0
  17. venv/Lib/site-packages/setuptools/_core_metadata.py +337 -0
  18. venv/Lib/site-packages/setuptools/_discovery.py +33 -0
  19. venv/Lib/site-packages/setuptools/_distutils/__init__.py +14 -0
  20. venv/Lib/site-packages/setuptools/_distutils/_log.py +3 -0
  21. venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
  22. venv/Lib/site-packages/setuptools/_distutils/_modified.py +95 -0
  23. venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +16 -0
  24. venv/Lib/site-packages/setuptools/_distutils/archive_util.py +294 -0
  25. venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +26 -0
  26. venv/Lib/site-packages/setuptools/_distutils/cmd.py +554 -0
  27. venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +23 -0
  28. venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +54 -0
  29. venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +167 -0
  30. venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +141 -0
  31. venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +598 -0
  32. venv/Lib/site-packages/setuptools/_distutils/command/build.py +156 -0
  33. venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +201 -0
  34. venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +812 -0
  35. venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
  36. venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +160 -0
  37. venv/Lib/site-packages/setuptools/_distutils/command/check.py +152 -0
  38. venv/Lib/site-packages/setuptools/_distutils/command/clean.py +77 -0
  39. venv/Lib/site-packages/setuptools/_distutils/command/config.py +358 -0
  40. venv/Lib/site-packages/setuptools/_distutils/command/install.py +805 -0
  41. venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +94 -0
  42. venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
  43. venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +46 -0
  44. venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
  45. venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +62 -0
  46. venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +521 -0
  47. venv/Lib/site-packages/setuptools/_distutils/compat/__init__.py +18 -0
  48. venv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  49. venv/Lib/site-packages/setuptools/_distutils/compat/py39.py +66 -0
  50. venv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1394 -0
  51. venv/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
  52. venv/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
  53. venv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
  54. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_base.py +83 -0
  55. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py +76 -0
  56. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_mingw.py +48 -0
  57. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py +136 -0
  58. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +413 -0
  59. venv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +422 -0
  60. venv/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
  61. venv/Lib/site-packages/setuptools/_distutils/core.py +289 -0
  62. venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +31 -0
  63. venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
  64. venv/Lib/site-packages/setuptools/_distutils/dep_util.py +14 -0
  65. venv/Lib/site-packages/setuptools/_distutils/dir_util.py +244 -0
  66. venv/Lib/site-packages/setuptools/_distutils/dist.py +1386 -0
  67. venv/Lib/site-packages/setuptools/_distutils/errors.py +108 -0
  68. venv/Lib/site-packages/setuptools/_distutils/extension.py +258 -0
  69. venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +471 -0
  70. venv/Lib/site-packages/setuptools/_distutils/file_util.py +236 -0
  71. venv/Lib/site-packages/setuptools/_distutils/filelist.py +431 -0
  72. venv/Lib/site-packages/setuptools/_distutils/log.py +56 -0
  73. venv/Lib/site-packages/setuptools/_distutils/spawn.py +134 -0
  74. venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +598 -0
  75. venv/Lib/site-packages/setuptools/_distutils/tests/__init__.py +42 -0
  76. venv/Lib/site-packages/setuptools/_distutils/tests/compat/__init__.py +0 -0
  77. venv/Lib/site-packages/setuptools/_distutils/tests/compat/py39.py +40 -0
  78. venv/Lib/site-packages/setuptools/_distutils/tests/support.py +134 -0
  79. venv/Lib/site-packages/setuptools/_distutils/tests/test_archive_util.py +353 -0
  80. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist.py +47 -0
  81. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_dumb.py +78 -0
  82. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_rpm.py +127 -0
  83. venv/Lib/site-packages/setuptools/_distutils/tests/test_build.py +49 -0
  84. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_clib.py +134 -0
  85. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +628 -0
  86. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_py.py +196 -0
  87. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_scripts.py +96 -0
  88. venv/Lib/site-packages/setuptools/_distutils/tests/test_check.py +194 -0
  89. venv/Lib/site-packages/setuptools/_distutils/tests/test_clean.py +45 -0
  90. venv/Lib/site-packages/setuptools/_distutils/tests/test_cmd.py +107 -0
  91. venv/Lib/site-packages/setuptools/_distutils/tests/test_config_cmd.py +87 -0
  92. venv/Lib/site-packages/setuptools/_distutils/tests/test_core.py +130 -0
  93. venv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +139 -0
  94. venv/Lib/site-packages/setuptools/_distutils/tests/test_dist.py +552 -0
  95. venv/Lib/site-packages/setuptools/_distutils/tests/test_extension.py +117 -0
  96. venv/Lib/site-packages/setuptools/_distutils/tests/test_file_util.py +95 -0
  97. venv/Lib/site-packages/setuptools/_distutils/tests/test_filelist.py +336 -0
  98. venv/Lib/site-packages/setuptools/_distutils/tests/test_install.py +245 -0
  99. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_data.py +74 -0
  100. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_headers.py +33 -0
  101. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_lib.py +110 -0
  102. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_scripts.py +52 -0
  103. venv/Lib/site-packages/setuptools/_distutils/tests/test_log.py +12 -0
  104. venv/Lib/site-packages/setuptools/_distutils/tests/test_modified.py +126 -0
  105. venv/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +470 -0
  106. venv/Lib/site-packages/setuptools/_distutils/tests/test_spawn.py +141 -0
  107. venv/Lib/site-packages/setuptools/_distutils/tests/test_sysconfig.py +319 -0
  108. venv/Lib/site-packages/setuptools/_distutils/tests/test_text_file.py +127 -0
  109. venv/Lib/site-packages/setuptools/_distutils/tests/test_util.py +243 -0
  110. venv/Lib/site-packages/setuptools/_distutils/tests/test_version.py +80 -0
  111. venv/Lib/site-packages/setuptools/_distutils/tests/test_versionpredicate.py +0 -0
  112. venv/Lib/site-packages/setuptools/_distutils/tests/unix_compat.py +17 -0
  113. venv/Lib/site-packages/setuptools/_distutils/text_file.py +286 -0
  114. venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +9 -0
  115. venv/Lib/site-packages/setuptools/_distutils/util.py +518 -0
  116. venv/Lib/site-packages/setuptools/_distutils/version.py +348 -0
  117. venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
  118. venv/Lib/site-packages/setuptools/_distutils/zosccompiler.py +3 -0
  119. venv/Lib/site-packages/setuptools/_entry_points.py +94 -0
  120. venv/Lib/site-packages/setuptools/_imp.py +87 -0
  121. venv/Lib/site-packages/setuptools/_importlib.py +9 -0
  122. venv/Lib/site-packages/setuptools/_itertools.py +23 -0
  123. venv/Lib/site-packages/setuptools/_normalization.py +177 -0
  124. venv/Lib/site-packages/setuptools/_path.py +93 -0
  125. venv/Lib/site-packages/setuptools/_reqs.py +42 -0
  126. venv/Lib/site-packages/setuptools/_scripts.py +361 -0
  127. venv/Lib/site-packages/setuptools/_shutil.py +59 -0
  128. venv/Lib/site-packages/setuptools/_static.py +188 -0
  129. venv/Lib/site-packages/setuptools/_vendor/autocommand/__init__.py +27 -0
  130. venv/Lib/site-packages/setuptools/_vendor/autocommand/autoasync.py +142 -0
  131. venv/Lib/site-packages/setuptools/_vendor/autocommand/autocommand.py +70 -0
  132. venv/Lib/site-packages/setuptools/_vendor/autocommand/automain.py +59 -0
  133. venv/Lib/site-packages/setuptools/_vendor/autocommand/autoparse.py +333 -0
  134. venv/Lib/site-packages/setuptools/_vendor/autocommand/errors.py +23 -0
  135. venv/Lib/site-packages/setuptools/_vendor/backports/__init__.py +1 -0
  136. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__init__.py +2937 -0
  137. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__main__.py +5 -0
  138. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py +0 -0
  139. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py +24 -0
  140. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1083 -0
  141. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +83 -0
  142. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
  143. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +57 -0
  144. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
  145. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
  146. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +67 -0
  147. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
  148. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py +0 -0
  149. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py +22 -0
  150. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py +36 -0
  151. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/diagnose.py +21 -0
  152. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
  153. venv/Lib/site-packages/setuptools/_vendor/inflect/__init__.py +3986 -0
  154. venv/Lib/site-packages/setuptools/_vendor/inflect/compat/__init__.py +0 -0
  155. venv/Lib/site-packages/setuptools/_vendor/inflect/compat/py38.py +7 -0
  156. venv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
  157. venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/__init__.py +1091 -0
  158. venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
  159. venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +361 -0
  160. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.py +633 -0
  161. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
  162. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
  163. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +624 -0
  164. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/layouts.py +25 -0
  165. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/show-newlines.py +33 -0
  166. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/strip-prefix.py +21 -0
  167. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-dvorak.py +6 -0
  168. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-qwerty.py +6 -0
  169. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +6 -0
  170. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
  171. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +4806 -0
  172. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
  173. venv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
  174. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +1046 -0
  175. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
  176. venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +15 -0
  177. venv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +110 -0
  178. venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +263 -0
  179. venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +85 -0
  180. venv/Lib/site-packages/setuptools/_vendor/packaging/_parser.py +354 -0
  181. venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
  182. venv/Lib/site-packages/setuptools/_vendor/packaging/_tokenizer.py +194 -0
  183. venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  184. venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  185. venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +331 -0
  186. venv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +863 -0
  187. venv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
  188. venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +91 -0
  189. venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +1020 -0
  190. venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +617 -0
  191. venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +163 -0
  192. venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +582 -0
  193. venv/Lib/site-packages/setuptools/_vendor/platformdirs/__init__.py +627 -0
  194. venv/Lib/site-packages/setuptools/_vendor/platformdirs/__main__.py +55 -0
  195. venv/Lib/site-packages/setuptools/_vendor/platformdirs/android.py +249 -0
  196. venv/Lib/site-packages/setuptools/_vendor/platformdirs/api.py +292 -0
  197. venv/Lib/site-packages/setuptools/_vendor/platformdirs/macos.py +130 -0
  198. venv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
  199. venv/Lib/site-packages/setuptools/_vendor/platformdirs/unix.py +275 -0
  200. venv/Lib/site-packages/setuptools/_vendor/platformdirs/version.py +16 -0
  201. venv/Lib/site-packages/setuptools/_vendor/platformdirs/windows.py +272 -0
  202. venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
  203. venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
  204. venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
  205. venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
  206. venv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
  207. venv/Lib/site-packages/setuptools/_vendor/typeguard/__init__.py +48 -0
  208. venv/Lib/site-packages/setuptools/_vendor/typeguard/_checkers.py +993 -0
  209. venv/Lib/site-packages/setuptools/_vendor/typeguard/_config.py +108 -0
  210. venv/Lib/site-packages/setuptools/_vendor/typeguard/_decorators.py +235 -0
  211. venv/Lib/site-packages/setuptools/_vendor/typeguard/_exceptions.py +42 -0
  212. venv/Lib/site-packages/setuptools/_vendor/typeguard/_functions.py +308 -0
  213. venv/Lib/site-packages/setuptools/_vendor/typeguard/_importhook.py +213 -0
  214. venv/Lib/site-packages/setuptools/_vendor/typeguard/_memo.py +48 -0
  215. venv/Lib/site-packages/setuptools/_vendor/typeguard/_pytest_plugin.py +127 -0
  216. venv/Lib/site-packages/setuptools/_vendor/typeguard/_suppression.py +86 -0
  217. venv/Lib/site-packages/setuptools/_vendor/typeguard/_transformer.py +1229 -0
  218. venv/Lib/site-packages/setuptools/_vendor/typeguard/_union_transformer.py +55 -0
  219. venv/Lib/site-packages/setuptools/_vendor/typeguard/_utils.py +173 -0
  220. venv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
  221. venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +3641 -0
  222. venv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +3 -0
  223. venv/Lib/site-packages/setuptools/_vendor/wheel/__main__.py +23 -0
  224. venv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  225. venv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +26 -0
  226. venv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +26 -0
  227. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +155 -0
  228. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +332 -0
  229. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/pack.py +85 -0
  230. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/tags.py +139 -0
  231. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/unpack.py +30 -0
  232. venv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +482 -0
  233. venv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +183 -0
  234. venv/Lib/site-packages/setuptools/_vendor/wheel/util.py +17 -0
  235. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/__init__.py +0 -0
  236. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/__init__.py +0 -0
  237. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_elffile.py +108 -0
  238. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py +260 -0
  239. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py +83 -0
  240. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_parser.py +356 -0
  241. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_structures.py +61 -0
  242. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py +192 -0
  243. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/markers.py +253 -0
  244. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/requirements.py +90 -0
  245. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/specifiers.py +1011 -0
  246. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/tags.py +571 -0
  247. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/utils.py +172 -0
  248. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/version.py +561 -0
  249. venv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +227 -0
  250. venv/Lib/site-packages/setuptools/_vendor/zipp/__init__.py +501 -0
  251. venv/Lib/site-packages/setuptools/_vendor/zipp/compat/__init__.py +0 -0
  252. venv/Lib/site-packages/setuptools/_vendor/zipp/compat/py310.py +11 -0
  253. venv/Lib/site-packages/setuptools/_vendor/zipp/glob.py +106 -0
  254. venv/Lib/site-packages/setuptools/archive_util.py +219 -0
  255. venv/Lib/site-packages/setuptools/build_meta.py +548 -0
  256. venv/Lib/site-packages/setuptools/command/__init__.py +21 -0
  257. venv/Lib/site-packages/setuptools/command/_requirestxt.py +131 -0
  258. venv/Lib/site-packages/setuptools/command/alias.py +77 -0
  259. venv/Lib/site-packages/setuptools/command/bdist_egg.py +477 -0
  260. venv/Lib/site-packages/setuptools/command/bdist_rpm.py +42 -0
  261. venv/Lib/site-packages/setuptools/command/bdist_wheel.py +604 -0
  262. venv/Lib/site-packages/setuptools/command/build.py +135 -0
  263. venv/Lib/site-packages/setuptools/command/build_clib.py +103 -0
  264. venv/Lib/site-packages/setuptools/command/build_ext.py +470 -0
  265. venv/Lib/site-packages/setuptools/command/build_py.py +400 -0
  266. venv/Lib/site-packages/setuptools/command/develop.py +55 -0
  267. venv/Lib/site-packages/setuptools/command/dist_info.py +103 -0
  268. venv/Lib/site-packages/setuptools/command/easy_install.py +30 -0
  269. venv/Lib/site-packages/setuptools/command/editable_wheel.py +908 -0
  270. venv/Lib/site-packages/setuptools/command/egg_info.py +718 -0
  271. venv/Lib/site-packages/setuptools/command/install.py +131 -0
  272. venv/Lib/site-packages/setuptools/command/install_egg_info.py +58 -0
  273. venv/Lib/site-packages/setuptools/command/install_lib.py +137 -0
  274. venv/Lib/site-packages/setuptools/command/install_scripts.py +67 -0
  275. venv/Lib/site-packages/setuptools/command/rotate.py +65 -0
  276. venv/Lib/site-packages/setuptools/command/saveopts.py +21 -0
  277. venv/Lib/site-packages/setuptools/command/sdist.py +217 -0
  278. venv/Lib/site-packages/setuptools/command/setopt.py +141 -0
  279. venv/Lib/site-packages/setuptools/command/test.py +45 -0
  280. venv/Lib/site-packages/setuptools/compat/__init__.py +0 -0
  281. venv/Lib/site-packages/setuptools/compat/py310.py +20 -0
  282. venv/Lib/site-packages/setuptools/compat/py311.py +27 -0
  283. venv/Lib/site-packages/setuptools/compat/py312.py +13 -0
  284. venv/Lib/site-packages/setuptools/compat/py39.py +9 -0
  285. venv/Lib/site-packages/setuptools/config/__init__.py +43 -0
  286. venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +526 -0
  287. venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
  288. venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +336 -0
  289. venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +82 -0
  290. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
  291. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1412 -0
  292. venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +402 -0
  293. venv/Lib/site-packages/setuptools/config/expand.py +452 -0
  294. venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +468 -0
  295. venv/Lib/site-packages/setuptools/config/setupcfg.py +780 -0
  296. venv/Lib/site-packages/setuptools/depends.py +185 -0
  297. venv/Lib/site-packages/setuptools/discovery.py +614 -0
  298. venv/Lib/site-packages/setuptools/dist.py +1119 -0
  299. venv/Lib/site-packages/setuptools/errors.py +67 -0
  300. venv/Lib/site-packages/setuptools/extension.py +177 -0
  301. venv/Lib/site-packages/setuptools/glob.py +185 -0
  302. venv/Lib/site-packages/setuptools/installer.py +155 -0
  303. venv/Lib/site-packages/setuptools/launch.py +36 -0
  304. venv/Lib/site-packages/setuptools/logging.py +40 -0
  305. venv/Lib/site-packages/setuptools/modified.py +18 -0
  306. venv/Lib/site-packages/setuptools/monkey.py +126 -0
  307. venv/Lib/site-packages/setuptools/msvc.py +1536 -0
  308. venv/Lib/site-packages/setuptools/namespaces.py +106 -0
  309. venv/Lib/site-packages/setuptools/tests/__init__.py +13 -0
  310. venv/Lib/site-packages/setuptools/tests/compat/__init__.py +0 -0
  311. venv/Lib/site-packages/setuptools/tests/compat/py39.py +3 -0
  312. venv/Lib/site-packages/setuptools/tests/config/__init__.py +0 -0
  313. venv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +59 -0
  314. venv/Lib/site-packages/setuptools/tests/config/downloads/preload.py +18 -0
  315. venv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +772 -0
  316. venv/Lib/site-packages/setuptools/tests/config/test_expand.py +247 -0
  317. venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +396 -0
  318. venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +109 -0
  319. venv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +980 -0
  320. venv/Lib/site-packages/setuptools/tests/contexts.py +131 -0
  321. venv/Lib/site-packages/setuptools/tests/environment.py +95 -0
  322. venv/Lib/site-packages/setuptools/tests/fixtures.py +392 -0
  323. venv/Lib/site-packages/setuptools/tests/integration/__init__.py +0 -0
  324. venv/Lib/site-packages/setuptools/tests/integration/helpers.py +77 -0
  325. venv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
  326. venv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +223 -0
  327. venv/Lib/site-packages/setuptools/tests/mod_with_constant.py +1 -0
  328. venv/Lib/site-packages/setuptools/tests/namespaces.py +90 -0
  329. venv/Lib/site-packages/setuptools/tests/script-with-bom.py +1 -0
  330. venv/Lib/site-packages/setuptools/tests/test_archive_util.py +36 -0
  331. venv/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py +28 -0
  332. venv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +73 -0
  333. venv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +708 -0
  334. venv/Lib/site-packages/setuptools/tests/test_build.py +33 -0
  335. venv/Lib/site-packages/setuptools/tests/test_build_clib.py +84 -0
  336. venv/Lib/site-packages/setuptools/tests/test_build_ext.py +293 -0
  337. venv/Lib/site-packages/setuptools/tests/test_build_meta.py +959 -0
  338. venv/Lib/site-packages/setuptools/tests/test_build_py.py +480 -0
  339. venv/Lib/site-packages/setuptools/tests/test_config_discovery.py +647 -0
  340. venv/Lib/site-packages/setuptools/tests/test_core_metadata.py +622 -0
  341. venv/Lib/site-packages/setuptools/tests/test_depends.py +15 -0
  342. venv/Lib/site-packages/setuptools/tests/test_develop.py +112 -0
  343. venv/Lib/site-packages/setuptools/tests/test_dist.py +278 -0
  344. venv/Lib/site-packages/setuptools/tests/test_dist_info.py +147 -0
  345. venv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +198 -0
  346. venv/Lib/site-packages/setuptools/tests/test_editable_install.py +1263 -0
  347. venv/Lib/site-packages/setuptools/tests/test_egg_info.py +1306 -0
  348. venv/Lib/site-packages/setuptools/tests/test_extern.py +15 -0
  349. venv/Lib/site-packages/setuptools/tests/test_find_packages.py +218 -0
  350. venv/Lib/site-packages/setuptools/tests/test_find_py_modules.py +73 -0
  351. venv/Lib/site-packages/setuptools/tests/test_glob.py +45 -0
  352. venv/Lib/site-packages/setuptools/tests/test_install_scripts.py +89 -0
  353. venv/Lib/site-packages/setuptools/tests/test_logging.py +76 -0
  354. venv/Lib/site-packages/setuptools/tests/test_manifest.py +622 -0
  355. venv/Lib/site-packages/setuptools/tests/test_namespaces.py +138 -0
  356. venv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
  357. venv/Lib/site-packages/setuptools/tests/test_sdist.py +984 -0
  358. venv/Lib/site-packages/setuptools/tests/test_setopt.py +40 -0
  359. venv/Lib/site-packages/setuptools/tests/test_setuptools.py +290 -0
  360. venv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  361. venv/Lib/site-packages/setuptools/tests/test_unicode_utils.py +10 -0
  362. venv/Lib/site-packages/setuptools/tests/test_virtualenv.py +113 -0
  363. venv/Lib/site-packages/setuptools/tests/test_warnings.py +106 -0
  364. venv/Lib/site-packages/setuptools/tests/test_wheel.py +690 -0
  365. venv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +258 -0
  366. venv/Lib/site-packages/setuptools/tests/text.py +4 -0
  367. venv/Lib/site-packages/setuptools/tests/textwrap.py +6 -0
  368. venv/Lib/site-packages/setuptools/unicode_utils.py +102 -0
  369. venv/Lib/site-packages/setuptools/version.py +6 -0
  370. venv/Lib/site-packages/setuptools/warnings.py +110 -0
  371. venv/Lib/site-packages/setuptools/wheel.py +261 -0
  372. venv/Lib/site-packages/setuptools/windows_support.py +30 -0
  373. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/WHEEL +0 -0
  374. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/entry_points.txt +0 -0
  375. {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,869 @@
1
+ import itertools
2
+ import os
3
+ import platform
4
+ import string
5
+ import sys
6
+
7
+ import pytest
8
+ from packaging.specifiers import SpecifierSet
9
+
10
+ import pkg_resources
11
+ from pkg_resources import (
12
+ Distribution,
13
+ EntryPoint,
14
+ Requirement,
15
+ VersionConflict,
16
+ WorkingSet,
17
+ parse_requirements,
18
+ parse_version,
19
+ safe_name,
20
+ safe_version,
21
+ )
22
+
23
+
24
+ # from Python 3.6 docs. Available from itertools on Python 3.10
25
+ def pairwise(iterable):
26
+ "s -> (s0,s1), (s1,s2), (s2, s3), ..."
27
+ a, b = itertools.tee(iterable)
28
+ next(b, None)
29
+ return zip(a, b)
30
+
31
+
32
+ class Metadata(pkg_resources.EmptyProvider):
33
+ """Mock object to return metadata as if from an on-disk distribution"""
34
+
35
+ def __init__(self, *pairs) -> None:
36
+ self.metadata = dict(pairs)
37
+
38
+ def has_metadata(self, name) -> bool:
39
+ return name in self.metadata
40
+
41
+ def get_metadata(self, name):
42
+ return self.metadata[name]
43
+
44
+ def get_metadata_lines(self, name):
45
+ return pkg_resources.yield_lines(self.get_metadata(name))
46
+
47
+
48
+ dist_from_fn = pkg_resources.Distribution.from_filename
49
+
50
+
51
+ class TestDistro:
52
+ def testCollection(self):
53
+ # empty path should produce no distributions
54
+ ad = pkg_resources.Environment([], platform=None, python=None)
55
+ assert list(ad) == []
56
+ assert ad['FooPkg'] == []
57
+ ad.add(dist_from_fn("FooPkg-1.3_1.egg"))
58
+ ad.add(dist_from_fn("FooPkg-1.4-py2.4-win32.egg"))
59
+ ad.add(dist_from_fn("FooPkg-1.2-py2.4.egg"))
60
+
61
+ # Name is in there now
62
+ assert ad['FooPkg']
63
+ # But only 1 package
64
+ assert list(ad) == ['foopkg']
65
+
66
+ # Distributions sort by version
67
+ expected = ['1.4', '1.3-1', '1.2']
68
+ assert [dist.version for dist in ad['FooPkg']] == expected
69
+
70
+ # Removing a distribution leaves sequence alone
71
+ ad.remove(ad['FooPkg'][1])
72
+ assert [dist.version for dist in ad['FooPkg']] == ['1.4', '1.2']
73
+
74
+ # And inserting adds them in order
75
+ ad.add(dist_from_fn("FooPkg-1.9.egg"))
76
+ assert [dist.version for dist in ad['FooPkg']] == ['1.9', '1.4', '1.2']
77
+
78
+ ws = WorkingSet([])
79
+ foo12 = dist_from_fn("FooPkg-1.2-py2.4.egg")
80
+ foo14 = dist_from_fn("FooPkg-1.4-py2.4-win32.egg")
81
+ (req,) = parse_requirements("FooPkg>=1.3")
82
+
83
+ # Nominal case: no distros on path, should yield all applicable
84
+ assert ad.best_match(req, ws).version == '1.9'
85
+ # If a matching distro is already installed, should return only that
86
+ ws.add(foo14)
87
+ assert ad.best_match(req, ws).version == '1.4'
88
+
89
+ # If the first matching distro is unsuitable, it's a version conflict
90
+ ws = WorkingSet([])
91
+ ws.add(foo12)
92
+ ws.add(foo14)
93
+ with pytest.raises(VersionConflict):
94
+ ad.best_match(req, ws)
95
+
96
+ # If more than one match on the path, the first one takes precedence
97
+ ws = WorkingSet([])
98
+ ws.add(foo14)
99
+ ws.add(foo12)
100
+ ws.add(foo14)
101
+ assert ad.best_match(req, ws).version == '1.4'
102
+
103
+ def checkFooPkg(self, d):
104
+ assert d.project_name == "FooPkg"
105
+ assert d.key == "foopkg"
106
+ assert d.version == "1.3.post1"
107
+ assert d.py_version == "2.4"
108
+ assert d.platform == "win32"
109
+ assert d.parsed_version == parse_version("1.3-1")
110
+
111
+ def testDistroBasics(self):
112
+ d = Distribution(
113
+ "/some/path",
114
+ project_name="FooPkg",
115
+ version="1.3-1",
116
+ py_version="2.4",
117
+ platform="win32",
118
+ )
119
+ self.checkFooPkg(d)
120
+
121
+ d = Distribution("/some/path")
122
+ assert d.py_version == f'{sys.version_info.major}.{sys.version_info.minor}'
123
+ assert d.platform is None
124
+
125
+ def testDistroParse(self):
126
+ d = dist_from_fn("FooPkg-1.3.post1-py2.4-win32.egg")
127
+ self.checkFooPkg(d)
128
+ d = dist_from_fn("FooPkg-1.3.post1-py2.4-win32.egg-info")
129
+ self.checkFooPkg(d)
130
+
131
+ def testDistroMetadata(self):
132
+ d = Distribution(
133
+ "/some/path",
134
+ project_name="FooPkg",
135
+ py_version="2.4",
136
+ platform="win32",
137
+ metadata=Metadata(('PKG-INFO', "Metadata-Version: 1.0\nVersion: 1.3-1\n")),
138
+ )
139
+ self.checkFooPkg(d)
140
+
141
+ def distRequires(self, txt):
142
+ return Distribution("/foo", metadata=Metadata(('depends.txt', txt)))
143
+
144
+ def checkRequires(self, dist, txt, extras=()):
145
+ assert list(dist.requires(extras)) == list(parse_requirements(txt))
146
+
147
+ def testDistroDependsSimple(self):
148
+ for v in "Twisted>=1.5", "Twisted>=1.5\nZConfig>=2.0":
149
+ self.checkRequires(self.distRequires(v), v)
150
+
151
+ needs_object_dir = pytest.mark.skipif(
152
+ not hasattr(object, '__dir__'),
153
+ reason='object.__dir__ necessary for self.__dir__ implementation',
154
+ )
155
+
156
+ def test_distribution_dir(self):
157
+ d = pkg_resources.Distribution()
158
+ dir(d)
159
+
160
+ @needs_object_dir
161
+ def test_distribution_dir_includes_provider_dir(self):
162
+ d = pkg_resources.Distribution()
163
+ before = d.__dir__()
164
+ assert 'test_attr' not in before
165
+ d._provider.test_attr = None
166
+ after = d.__dir__()
167
+ assert len(after) == len(before) + 1
168
+ assert 'test_attr' in after
169
+
170
+ @needs_object_dir
171
+ def test_distribution_dir_ignores_provider_dir_leading_underscore(self):
172
+ d = pkg_resources.Distribution()
173
+ before = d.__dir__()
174
+ assert '_test_attr' not in before
175
+ d._provider._test_attr = None
176
+ after = d.__dir__()
177
+ assert len(after) == len(before)
178
+ assert '_test_attr' not in after
179
+
180
+ def testResolve(self):
181
+ ad = pkg_resources.Environment([])
182
+ ws = WorkingSet([])
183
+ # Resolving no requirements -> nothing to install
184
+ assert list(ws.resolve([], ad)) == []
185
+ # Request something not in the collection -> DistributionNotFound
186
+ with pytest.raises(pkg_resources.DistributionNotFound):
187
+ ws.resolve(parse_requirements("Foo"), ad)
188
+
189
+ Foo = Distribution.from_filename(
190
+ "/foo_dir/Foo-1.2.egg",
191
+ metadata=Metadata(('depends.txt', "[bar]\nBaz>=2.0")),
192
+ )
193
+ ad.add(Foo)
194
+ ad.add(Distribution.from_filename("Foo-0.9.egg"))
195
+
196
+ # Request thing(s) that are available -> list to activate
197
+ for i in range(3):
198
+ targets = list(ws.resolve(parse_requirements("Foo"), ad))
199
+ assert targets == [Foo]
200
+ list(map(ws.add, targets))
201
+ with pytest.raises(VersionConflict):
202
+ ws.resolve(parse_requirements("Foo==0.9"), ad)
203
+ ws = WorkingSet([]) # reset
204
+
205
+ # Request an extra that causes an unresolved dependency for "Baz"
206
+ with pytest.raises(pkg_resources.DistributionNotFound):
207
+ ws.resolve(parse_requirements("Foo[bar]"), ad)
208
+ Baz = Distribution.from_filename(
209
+ "/foo_dir/Baz-2.1.egg", metadata=Metadata(('depends.txt', "Foo"))
210
+ )
211
+ ad.add(Baz)
212
+
213
+ # Activation list now includes resolved dependency
214
+ assert list(ws.resolve(parse_requirements("Foo[bar]"), ad)) == [Foo, Baz]
215
+ # Requests for conflicting versions produce VersionConflict
216
+ with pytest.raises(VersionConflict) as vc:
217
+ ws.resolve(parse_requirements("Foo==1.2\nFoo!=1.2"), ad)
218
+
219
+ msg = 'Foo 0.9 is installed but Foo==1.2 is required'
220
+ assert vc.value.report() == msg
221
+
222
+ def test_environment_marker_evaluation_negative(self):
223
+ """Environment markers are evaluated at resolution time."""
224
+ ad = pkg_resources.Environment([])
225
+ ws = WorkingSet([])
226
+ res = ws.resolve(parse_requirements("Foo;python_version<'2'"), ad)
227
+ assert list(res) == []
228
+
229
+ def test_environment_marker_evaluation_positive(self):
230
+ ad = pkg_resources.Environment([])
231
+ ws = WorkingSet([])
232
+ Foo = Distribution.from_filename("/foo_dir/Foo-1.2.dist-info")
233
+ ad.add(Foo)
234
+ res = ws.resolve(parse_requirements("Foo;python_version>='2'"), ad)
235
+ assert list(res) == [Foo]
236
+
237
+ def test_environment_marker_evaluation_called(self):
238
+ """
239
+ If one package foo requires bar without any extras,
240
+ markers should pass for bar without extras.
241
+ """
242
+ (parent_req,) = parse_requirements("foo")
243
+ (req,) = parse_requirements("bar;python_version>='2'")
244
+ req_extras = pkg_resources._ReqExtras({req: parent_req.extras})
245
+ assert req_extras.markers_pass(req)
246
+
247
+ (parent_req,) = parse_requirements("foo[]")
248
+ (req,) = parse_requirements("bar;python_version>='2'")
249
+ req_extras = pkg_resources._ReqExtras({req: parent_req.extras})
250
+ assert req_extras.markers_pass(req)
251
+
252
+ def test_marker_evaluation_with_extras(self):
253
+ """Extras are also evaluated as markers at resolution time."""
254
+ ad = pkg_resources.Environment([])
255
+ ws = WorkingSet([])
256
+ Foo = Distribution.from_filename(
257
+ "/foo_dir/Foo-1.2.dist-info",
258
+ metadata=Metadata((
259
+ "METADATA",
260
+ "Provides-Extra: baz\nRequires-Dist: quux; extra=='baz'",
261
+ )),
262
+ )
263
+ ad.add(Foo)
264
+ assert list(ws.resolve(parse_requirements("Foo"), ad)) == [Foo]
265
+ quux = Distribution.from_filename("/foo_dir/quux-1.0.dist-info")
266
+ ad.add(quux)
267
+ res = list(ws.resolve(parse_requirements("Foo[baz]"), ad))
268
+ assert res == [Foo, quux]
269
+
270
+ def test_marker_evaluation_with_extras_normlized(self):
271
+ """Extras are also evaluated as markers at resolution time."""
272
+ ad = pkg_resources.Environment([])
273
+ ws = WorkingSet([])
274
+ Foo = Distribution.from_filename(
275
+ "/foo_dir/Foo-1.2.dist-info",
276
+ metadata=Metadata((
277
+ "METADATA",
278
+ "Provides-Extra: baz-lightyear\n"
279
+ "Requires-Dist: quux; extra=='baz-lightyear'",
280
+ )),
281
+ )
282
+ ad.add(Foo)
283
+ assert list(ws.resolve(parse_requirements("Foo"), ad)) == [Foo]
284
+ quux = Distribution.from_filename("/foo_dir/quux-1.0.dist-info")
285
+ ad.add(quux)
286
+ res = list(ws.resolve(parse_requirements("Foo[baz-lightyear]"), ad))
287
+ assert res == [Foo, quux]
288
+
289
+ def test_marker_evaluation_with_multiple_extras(self):
290
+ ad = pkg_resources.Environment([])
291
+ ws = WorkingSet([])
292
+ Foo = Distribution.from_filename(
293
+ "/foo_dir/Foo-1.2.dist-info",
294
+ metadata=Metadata((
295
+ "METADATA",
296
+ "Provides-Extra: baz\n"
297
+ "Requires-Dist: quux; extra=='baz'\n"
298
+ "Provides-Extra: bar\n"
299
+ "Requires-Dist: fred; extra=='bar'\n",
300
+ )),
301
+ )
302
+ ad.add(Foo)
303
+ quux = Distribution.from_filename("/foo_dir/quux-1.0.dist-info")
304
+ ad.add(quux)
305
+ fred = Distribution.from_filename("/foo_dir/fred-0.1.dist-info")
306
+ ad.add(fred)
307
+ res = list(ws.resolve(parse_requirements("Foo[baz,bar]"), ad))
308
+ assert sorted(res) == [fred, quux, Foo]
309
+
310
+ def test_marker_evaluation_with_extras_loop(self):
311
+ ad = pkg_resources.Environment([])
312
+ ws = WorkingSet([])
313
+ a = Distribution.from_filename(
314
+ "/foo_dir/a-0.2.dist-info",
315
+ metadata=Metadata(("METADATA", "Requires-Dist: c[a]")),
316
+ )
317
+ b = Distribution.from_filename(
318
+ "/foo_dir/b-0.3.dist-info",
319
+ metadata=Metadata(("METADATA", "Requires-Dist: c[b]")),
320
+ )
321
+ c = Distribution.from_filename(
322
+ "/foo_dir/c-1.0.dist-info",
323
+ metadata=Metadata((
324
+ "METADATA",
325
+ "Provides-Extra: a\n"
326
+ "Requires-Dist: b;extra=='a'\n"
327
+ "Provides-Extra: b\n"
328
+ "Requires-Dist: foo;extra=='b'",
329
+ )),
330
+ )
331
+ foo = Distribution.from_filename("/foo_dir/foo-0.1.dist-info")
332
+ for dist in (a, b, c, foo):
333
+ ad.add(dist)
334
+ res = list(ws.resolve(parse_requirements("a"), ad))
335
+ assert res == [a, c, b, foo]
336
+
337
+ @pytest.mark.xfail(
338
+ sys.version_info[:2] == (3, 12) and sys.version_info.releaselevel != 'final',
339
+ reason="https://github.com/python/cpython/issues/103632",
340
+ )
341
+ def testDistroDependsOptions(self):
342
+ d = self.distRequires(
343
+ """
344
+ Twisted>=1.5
345
+ [docgen]
346
+ ZConfig>=2.0
347
+ docutils>=0.3
348
+ [fastcgi]
349
+ fcgiapp>=0.1"""
350
+ )
351
+ self.checkRequires(d, "Twisted>=1.5")
352
+ self.checkRequires(
353
+ d, "Twisted>=1.5 ZConfig>=2.0 docutils>=0.3".split(), ["docgen"]
354
+ )
355
+ self.checkRequires(d, "Twisted>=1.5 fcgiapp>=0.1".split(), ["fastcgi"])
356
+ self.checkRequires(
357
+ d,
358
+ "Twisted>=1.5 ZConfig>=2.0 docutils>=0.3 fcgiapp>=0.1".split(),
359
+ ["docgen", "fastcgi"],
360
+ )
361
+ self.checkRequires(
362
+ d,
363
+ "Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3".split(),
364
+ ["fastcgi", "docgen"],
365
+ )
366
+ with pytest.raises(pkg_resources.UnknownExtra):
367
+ d.requires(["foo"])
368
+
369
+
370
+ class TestWorkingSet:
371
+ def test_find_conflicting(self):
372
+ ws = WorkingSet([])
373
+ Foo = Distribution.from_filename("/foo_dir/Foo-1.2.egg")
374
+ ws.add(Foo)
375
+
376
+ # create a requirement that conflicts with Foo 1.2
377
+ req = next(parse_requirements("Foo<1.2"))
378
+
379
+ with pytest.raises(VersionConflict) as vc:
380
+ ws.find(req)
381
+
382
+ msg = 'Foo 1.2 is installed but Foo<1.2 is required'
383
+ assert vc.value.report() == msg
384
+
385
+ def test_resolve_conflicts_with_prior(self):
386
+ """
387
+ A ContextualVersionConflict should be raised when a requirement
388
+ conflicts with a prior requirement for a different package.
389
+ """
390
+ # Create installation where Foo depends on Baz 1.0 and Bar depends on
391
+ # Baz 2.0.
392
+ ws = WorkingSet([])
393
+ md = Metadata(('depends.txt', "Baz==1.0"))
394
+ Foo = Distribution.from_filename("/foo_dir/Foo-1.0.egg", metadata=md)
395
+ ws.add(Foo)
396
+ md = Metadata(('depends.txt', "Baz==2.0"))
397
+ Bar = Distribution.from_filename("/foo_dir/Bar-1.0.egg", metadata=md)
398
+ ws.add(Bar)
399
+ Baz = Distribution.from_filename("/foo_dir/Baz-1.0.egg")
400
+ ws.add(Baz)
401
+ Baz = Distribution.from_filename("/foo_dir/Baz-2.0.egg")
402
+ ws.add(Baz)
403
+
404
+ with pytest.raises(VersionConflict) as vc:
405
+ ws.resolve(parse_requirements("Foo\nBar\n"))
406
+
407
+ msg = "Baz 1.0 is installed but Baz==2.0 is required by "
408
+ msg += repr(set(['Bar']))
409
+ assert vc.value.report() == msg
410
+
411
+
412
+ class TestEntryPoints:
413
+ def assertfields(self, ep):
414
+ assert ep.name == "foo"
415
+ assert ep.module_name == "pkg_resources.tests.test_resources"
416
+ assert ep.attrs == ("TestEntryPoints",)
417
+ assert ep.extras == ("x",)
418
+ assert ep.load() is TestEntryPoints
419
+ expect = "foo = pkg_resources.tests.test_resources:TestEntryPoints [x]"
420
+ assert str(ep) == expect
421
+
422
+ def setup_method(self, method):
423
+ self.dist = Distribution.from_filename(
424
+ "FooPkg-1.2-py2.4.egg", metadata=Metadata(('requires.txt', '[x]'))
425
+ )
426
+
427
+ def testBasics(self):
428
+ ep = EntryPoint(
429
+ "foo",
430
+ "pkg_resources.tests.test_resources",
431
+ ["TestEntryPoints"],
432
+ ["x"],
433
+ self.dist,
434
+ )
435
+ self.assertfields(ep)
436
+
437
+ def testParse(self):
438
+ s = "foo = pkg_resources.tests.test_resources:TestEntryPoints [x]"
439
+ ep = EntryPoint.parse(s, self.dist)
440
+ self.assertfields(ep)
441
+
442
+ ep = EntryPoint.parse("bar baz= spammity[PING]")
443
+ assert ep.name == "bar baz"
444
+ assert ep.module_name == "spammity"
445
+ assert ep.attrs == ()
446
+ assert ep.extras == ("ping",)
447
+
448
+ ep = EntryPoint.parse(" fizzly = wocka:foo")
449
+ assert ep.name == "fizzly"
450
+ assert ep.module_name == "wocka"
451
+ assert ep.attrs == ("foo",)
452
+ assert ep.extras == ()
453
+
454
+ # plus in the name
455
+ spec = "html+mako = mako.ext.pygmentplugin:MakoHtmlLexer"
456
+ ep = EntryPoint.parse(spec)
457
+ assert ep.name == 'html+mako'
458
+
459
+ reject_specs = "foo", "x=a:b:c", "q=x/na", "fez=pish:tush-z", "x=f[a]>2"
460
+
461
+ @pytest.mark.parametrize("reject_spec", reject_specs)
462
+ def test_reject_spec(self, reject_spec):
463
+ with pytest.raises(ValueError):
464
+ EntryPoint.parse(reject_spec)
465
+
466
+ def test_printable_name(self):
467
+ """
468
+ Allow any printable character in the name.
469
+ """
470
+ # Create a name with all printable characters; strip the whitespace.
471
+ name = string.printable.strip()
472
+ spec = "{name} = module:attr".format(**locals())
473
+ ep = EntryPoint.parse(spec)
474
+ assert ep.name == name
475
+
476
+ def checkSubMap(self, m):
477
+ assert len(m) == len(self.submap_expect)
478
+ for key, ep in self.submap_expect.items():
479
+ assert m.get(key).name == ep.name
480
+ assert m.get(key).module_name == ep.module_name
481
+ assert sorted(m.get(key).attrs) == sorted(ep.attrs)
482
+ assert sorted(m.get(key).extras) == sorted(ep.extras)
483
+
484
+ submap_expect = dict(
485
+ feature1=EntryPoint('feature1', 'somemodule', ['somefunction']),
486
+ feature2=EntryPoint(
487
+ 'feature2', 'another.module', ['SomeClass'], ['extra1', 'extra2']
488
+ ),
489
+ feature3=EntryPoint('feature3', 'this.module', extras=['something']),
490
+ )
491
+ submap_str = """
492
+ # define features for blah blah
493
+ feature1 = somemodule:somefunction
494
+ feature2 = another.module:SomeClass [extra1,extra2]
495
+ feature3 = this.module [something]
496
+ """
497
+
498
+ def testParseList(self):
499
+ self.checkSubMap(EntryPoint.parse_group("xyz", self.submap_str))
500
+ with pytest.raises(ValueError):
501
+ EntryPoint.parse_group("x a", "foo=bar")
502
+ with pytest.raises(ValueError):
503
+ EntryPoint.parse_group("x", ["foo=baz", "foo=bar"])
504
+
505
+ def testParseMap(self):
506
+ m = EntryPoint.parse_map({'xyz': self.submap_str})
507
+ self.checkSubMap(m['xyz'])
508
+ assert list(m.keys()) == ['xyz']
509
+ m = EntryPoint.parse_map("[xyz]\n" + self.submap_str)
510
+ self.checkSubMap(m['xyz'])
511
+ assert list(m.keys()) == ['xyz']
512
+ with pytest.raises(ValueError):
513
+ EntryPoint.parse_map(["[xyz]", "[xyz]"])
514
+ with pytest.raises(ValueError):
515
+ EntryPoint.parse_map(self.submap_str)
516
+
517
+ def testDeprecationWarnings(self):
518
+ ep = EntryPoint(
519
+ "foo", "pkg_resources.tests.test_resources", ["TestEntryPoints"], ["x"]
520
+ )
521
+ with pytest.warns(pkg_resources.PkgResourcesDeprecationWarning):
522
+ ep.load(require=False)
523
+
524
+
525
+ class TestRequirements:
526
+ def testBasics(self):
527
+ r = Requirement.parse("Twisted>=1.2")
528
+ assert str(r) == "Twisted>=1.2"
529
+ assert repr(r) == "Requirement.parse('Twisted>=1.2')"
530
+ assert r == Requirement("Twisted>=1.2")
531
+ assert r == Requirement("twisTed>=1.2")
532
+ assert r != Requirement("Twisted>=2.0")
533
+ assert r != Requirement("Zope>=1.2")
534
+ assert r != Requirement("Zope>=3.0")
535
+ assert r != Requirement("Twisted[extras]>=1.2")
536
+
537
+ def testOrdering(self):
538
+ r1 = Requirement("Twisted==1.2c1,>=1.2")
539
+ r2 = Requirement("Twisted>=1.2,==1.2c1")
540
+ assert r1 == r2
541
+ assert str(r1) == str(r2)
542
+ assert str(r2) == "Twisted==1.2c1,>=1.2"
543
+ assert Requirement("Twisted") != Requirement(
544
+ "Twisted @ https://localhost/twisted.zip"
545
+ )
546
+
547
+ def testBasicContains(self):
548
+ r = Requirement("Twisted>=1.2")
549
+ foo_dist = Distribution.from_filename("FooPkg-1.3_1.egg")
550
+ twist11 = Distribution.from_filename("Twisted-1.1.egg")
551
+ twist12 = Distribution.from_filename("Twisted-1.2.egg")
552
+ assert parse_version('1.2') in r
553
+ assert parse_version('1.1') not in r
554
+ assert '1.2' in r
555
+ assert '1.1' not in r
556
+ assert foo_dist not in r
557
+ assert twist11 not in r
558
+ assert twist12 in r
559
+
560
+ def testOptionsAndHashing(self):
561
+ r1 = Requirement.parse("Twisted[foo,bar]>=1.2")
562
+ r2 = Requirement.parse("Twisted[bar,FOO]>=1.2")
563
+ assert r1 == r2
564
+ assert set(r1.extras) == set(("foo", "bar"))
565
+ assert set(r2.extras) == set(("foo", "bar"))
566
+ assert hash(r1) == hash(r2)
567
+ assert hash(r1) == hash((
568
+ "twisted",
569
+ None,
570
+ SpecifierSet(">=1.2"),
571
+ frozenset(["foo", "bar"]),
572
+ None,
573
+ ))
574
+ assert hash(
575
+ Requirement.parse("Twisted @ https://localhost/twisted.zip")
576
+ ) == hash((
577
+ "twisted",
578
+ "https://localhost/twisted.zip",
579
+ SpecifierSet(),
580
+ frozenset(),
581
+ None,
582
+ ))
583
+
584
+ def testVersionEquality(self):
585
+ r1 = Requirement.parse("foo==0.3a2")
586
+ r2 = Requirement.parse("foo!=0.3a4")
587
+ d = Distribution.from_filename
588
+
589
+ assert d("foo-0.3a4.egg") not in r1
590
+ assert d("foo-0.3a1.egg") not in r1
591
+ assert d("foo-0.3a4.egg") not in r2
592
+
593
+ assert d("foo-0.3a2.egg") in r1
594
+ assert d("foo-0.3a2.egg") in r2
595
+ assert d("foo-0.3a3.egg") in r2
596
+ assert d("foo-0.3a5.egg") in r2
597
+
598
+ def testSetuptoolsProjectName(self):
599
+ """
600
+ The setuptools project should implement the setuptools package.
601
+ """
602
+
603
+ assert Requirement.parse('setuptools').project_name == 'setuptools'
604
+ # setuptools 0.7 and higher means setuptools.
605
+ assert Requirement.parse('setuptools == 0.7').project_name == 'setuptools'
606
+ assert Requirement.parse('setuptools == 0.7a1').project_name == 'setuptools'
607
+ assert Requirement.parse('setuptools >= 0.7').project_name == 'setuptools'
608
+
609
+
610
+ class TestParsing:
611
+ def testEmptyParse(self):
612
+ assert list(parse_requirements('')) == []
613
+
614
+ def testYielding(self):
615
+ for inp, out in [
616
+ ([], []),
617
+ ('x', ['x']),
618
+ ([[]], []),
619
+ (' x\n y', ['x', 'y']),
620
+ (['x\n\n', 'y'], ['x', 'y']),
621
+ ]:
622
+ assert list(pkg_resources.yield_lines(inp)) == out
623
+
624
+ def testSplitting(self):
625
+ sample = """
626
+ x
627
+ [Y]
628
+ z
629
+
630
+ a
631
+ [b ]
632
+ # foo
633
+ c
634
+ [ d]
635
+ [q]
636
+ v
637
+ """
638
+ assert list(pkg_resources.split_sections(sample)) == [
639
+ (None, ["x"]),
640
+ ("Y", ["z", "a"]),
641
+ ("b", ["c"]),
642
+ ("d", []),
643
+ ("q", ["v"]),
644
+ ]
645
+ with pytest.raises(ValueError):
646
+ list(pkg_resources.split_sections("[foo"))
647
+
648
+ def testSafeName(self):
649
+ assert safe_name("adns-python") == "adns-python"
650
+ assert safe_name("WSGI Utils") == "WSGI-Utils"
651
+ assert safe_name("WSGI Utils") == "WSGI-Utils"
652
+ assert safe_name("Money$$$Maker") == "Money-Maker"
653
+ assert safe_name("peak.web") != "peak-web"
654
+
655
+ def testSafeVersion(self):
656
+ assert safe_version("1.2-1") == "1.2.post1"
657
+ assert safe_version("1.2 alpha") == "1.2.alpha"
658
+ assert safe_version("2.3.4 20050521") == "2.3.4.20050521"
659
+ assert safe_version("Money$$$Maker") == "Money-Maker"
660
+ assert safe_version("peak.web") == "peak.web"
661
+
662
+ def testSimpleRequirements(self):
663
+ assert list(parse_requirements('Twis-Ted>=1.2-1')) == [
664
+ Requirement('Twis-Ted>=1.2-1')
665
+ ]
666
+ assert list(parse_requirements('Twisted >=1.2, \\ # more\n<2.0')) == [
667
+ Requirement('Twisted>=1.2,<2.0')
668
+ ]
669
+ assert Requirement.parse("FooBar==1.99a3") == Requirement("FooBar==1.99a3")
670
+ with pytest.raises(ValueError):
671
+ Requirement.parse(">=2.3")
672
+ with pytest.raises(ValueError):
673
+ Requirement.parse("x\\")
674
+ with pytest.raises(ValueError):
675
+ Requirement.parse("x==2 q")
676
+ with pytest.raises(ValueError):
677
+ Requirement.parse("X==1\nY==2")
678
+ with pytest.raises(ValueError):
679
+ Requirement.parse("#")
680
+
681
+ def test_requirements_with_markers(self):
682
+ assert Requirement.parse("foobar;os_name=='a'") == Requirement.parse(
683
+ "foobar;os_name=='a'"
684
+ )
685
+ assert Requirement.parse(
686
+ "name==1.1;python_version=='2.7'"
687
+ ) != Requirement.parse("name==1.1;python_version=='3.6'")
688
+ assert Requirement.parse(
689
+ "name==1.0;python_version=='2.7'"
690
+ ) != Requirement.parse("name==1.2;python_version=='2.7'")
691
+ assert Requirement.parse(
692
+ "name[foo]==1.0;python_version=='3.6'"
693
+ ) != Requirement.parse("name[foo,bar]==1.0;python_version=='3.6'")
694
+
695
+ def test_local_version(self):
696
+ parse_requirements('foo==1.0+org1')
697
+
698
+ def test_spaces_between_multiple_versions(self):
699
+ parse_requirements('foo>=1.0, <3')
700
+ parse_requirements('foo >= 1.0, < 3')
701
+
702
+ @pytest.mark.parametrize(
703
+ ("lower", "upper"),
704
+ [
705
+ ('1.2-rc1', '1.2rc1'),
706
+ ('0.4', '0.4.0'),
707
+ ('0.4.0.0', '0.4.0'),
708
+ ('0.4.0-0', '0.4-0'),
709
+ ('0post1', '0.0post1'),
710
+ ('0pre1', '0.0c1'),
711
+ ('0.0.0preview1', '0c1'),
712
+ ('0.0c1', '0-rc1'),
713
+ ('1.2a1', '1.2.a.1'),
714
+ ('1.2.a', '1.2a'),
715
+ ],
716
+ )
717
+ def testVersionEquality(self, lower, upper):
718
+ assert parse_version(lower) == parse_version(upper)
719
+
720
+ torture = """
721
+ 0.80.1-3 0.80.1-2 0.80.1-1 0.79.9999+0.80.0pre4-1
722
+ 0.79.9999+0.80.0pre2-3 0.79.9999+0.80.0pre2-2
723
+ 0.77.2-1 0.77.1-1 0.77.0-1
724
+ """
725
+
726
+ @pytest.mark.parametrize(
727
+ ("lower", "upper"),
728
+ [
729
+ ('2.1', '2.1.1'),
730
+ ('2a1', '2b0'),
731
+ ('2a1', '2.1'),
732
+ ('2.3a1', '2.3'),
733
+ ('2.1-1', '2.1-2'),
734
+ ('2.1-1', '2.1.1'),
735
+ ('2.1', '2.1post4'),
736
+ ('2.1a0-20040501', '2.1'),
737
+ ('1.1', '02.1'),
738
+ ('3.2', '3.2.post0'),
739
+ ('3.2post1', '3.2post2'),
740
+ ('0.4', '4.0'),
741
+ ('0.0.4', '0.4.0'),
742
+ ('0post1', '0.4post1'),
743
+ ('2.1.0-rc1', '2.1.0'),
744
+ ('2.1dev', '2.1a0'),
745
+ ]
746
+ + list(pairwise(reversed(torture.split()))),
747
+ )
748
+ def testVersionOrdering(self, lower, upper):
749
+ assert parse_version(lower) < parse_version(upper)
750
+
751
+ def testVersionHashable(self):
752
+ """
753
+ Ensure that our versions stay hashable even though we've subclassed
754
+ them and added some shim code to them.
755
+ """
756
+ assert hash(parse_version("1.0")) == hash(parse_version("1.0"))
757
+
758
+
759
+ class TestNamespaces:
760
+ ns_str = "__import__('pkg_resources').declare_namespace(__name__)\n"
761
+
762
+ @pytest.fixture
763
+ def symlinked_tmpdir(self, tmpdir):
764
+ """
765
+ Where available, return the tempdir as a symlink,
766
+ which as revealed in #231 is more fragile than
767
+ a natural tempdir.
768
+ """
769
+ if not hasattr(os, 'symlink'):
770
+ yield str(tmpdir)
771
+ return
772
+
773
+ link_name = str(tmpdir) + '-linked'
774
+ os.symlink(str(tmpdir), link_name)
775
+ try:
776
+ yield type(tmpdir)(link_name)
777
+ finally:
778
+ os.unlink(link_name)
779
+
780
+ @pytest.fixture(autouse=True)
781
+ def patched_path(self, tmpdir):
782
+ """
783
+ Patch sys.path to include the 'site-pkgs' dir. Also
784
+ restore pkg_resources._namespace_packages to its
785
+ former state.
786
+ """
787
+ saved_ns_pkgs = pkg_resources._namespace_packages.copy()
788
+ saved_sys_path = sys.path[:]
789
+ site_pkgs = tmpdir.mkdir('site-pkgs')
790
+ sys.path.append(str(site_pkgs))
791
+ try:
792
+ yield
793
+ finally:
794
+ pkg_resources._namespace_packages = saved_ns_pkgs
795
+ sys.path = saved_sys_path
796
+
797
+ issue591 = pytest.mark.xfail(platform.system() == 'Windows', reason="#591")
798
+
799
+ @issue591
800
+ def test_two_levels_deep(self, symlinked_tmpdir):
801
+ """
802
+ Test nested namespace packages
803
+ Create namespace packages in the following tree :
804
+ site-packages-1/pkg1/pkg2
805
+ site-packages-2/pkg1/pkg2
806
+ Check both are in the _namespace_packages dict and that their __path__
807
+ is correct
808
+ """
809
+ real_tmpdir = symlinked_tmpdir.realpath()
810
+ tmpdir = symlinked_tmpdir
811
+ sys.path.append(str(tmpdir / 'site-pkgs2'))
812
+ site_dirs = tmpdir / 'site-pkgs', tmpdir / 'site-pkgs2'
813
+ for site in site_dirs:
814
+ pkg1 = site / 'pkg1'
815
+ pkg2 = pkg1 / 'pkg2'
816
+ pkg2.ensure_dir()
817
+ (pkg1 / '__init__.py').write_text(self.ns_str, encoding='utf-8')
818
+ (pkg2 / '__init__.py').write_text(self.ns_str, encoding='utf-8')
819
+ with pytest.warns(DeprecationWarning, match="pkg_resources.declare_namespace"):
820
+ import pkg1 # pyright: ignore[reportMissingImports] # Temporary package for test
821
+ assert "pkg1" in pkg_resources._namespace_packages
822
+ # attempt to import pkg2 from site-pkgs2
823
+ with pytest.warns(DeprecationWarning, match="pkg_resources.declare_namespace"):
824
+ import pkg1.pkg2 # pyright: ignore[reportMissingImports] # Temporary package for test
825
+ # check the _namespace_packages dict
826
+ assert "pkg1.pkg2" in pkg_resources._namespace_packages
827
+ assert pkg_resources._namespace_packages["pkg1"] == ["pkg1.pkg2"]
828
+ # check the __path__ attribute contains both paths
829
+ expected = [
830
+ str(real_tmpdir / "site-pkgs" / "pkg1" / "pkg2"),
831
+ str(real_tmpdir / "site-pkgs2" / "pkg1" / "pkg2"),
832
+ ]
833
+ assert pkg1.pkg2.__path__ == expected
834
+
835
+ @issue591
836
+ def test_path_order(self, symlinked_tmpdir):
837
+ """
838
+ Test that if multiple versions of the same namespace package subpackage
839
+ are on different sys.path entries, that only the one earliest on
840
+ sys.path is imported, and that the namespace package's __path__ is in
841
+ the correct order.
842
+
843
+ Regression test for https://github.com/pypa/setuptools/issues/207
844
+ """
845
+
846
+ tmpdir = symlinked_tmpdir
847
+ site_dirs = (
848
+ tmpdir / "site-pkgs",
849
+ tmpdir / "site-pkgs2",
850
+ tmpdir / "site-pkgs3",
851
+ )
852
+
853
+ vers_str = "__version__ = %r"
854
+
855
+ for number, site in enumerate(site_dirs, 1):
856
+ if number > 1:
857
+ sys.path.append(str(site))
858
+ nspkg = site / 'nspkg'
859
+ subpkg = nspkg / 'subpkg'
860
+ subpkg.ensure_dir()
861
+ (nspkg / '__init__.py').write_text(self.ns_str, encoding='utf-8')
862
+ (subpkg / '__init__.py').write_text(vers_str % number, encoding='utf-8')
863
+
864
+ with pytest.warns(DeprecationWarning, match="pkg_resources.declare_namespace"):
865
+ import nspkg # pyright: ignore[reportMissingImports] # Temporary package for test
866
+ import nspkg.subpkg # pyright: ignore[reportMissingImports] # Temporary package for test
867
+ expected = [str(site.realpath() / 'nspkg') for site in site_dirs]
868
+ assert nspkg.__path__ == expected
869
+ assert nspkg.subpkg.__version__ == 1