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
File without changes
File without changes
@@ -0,0 +1,7 @@
1
+ import setuptools
2
+
3
+ setuptools.setup(
4
+ name="my-test-package",
5
+ version="1.0",
6
+ zip_safe=True,
7
+ )
@@ -0,0 +1,56 @@
1
+ import shutil
2
+ from pathlib import Path
3
+
4
+ import pytest
5
+
6
+ import pkg_resources
7
+
8
+ TESTS_DATA_DIR = Path(__file__).parent / 'data'
9
+
10
+
11
+ class TestFindDistributions:
12
+ @pytest.fixture
13
+ def target_dir(self, tmpdir):
14
+ target_dir = tmpdir.mkdir('target')
15
+ # place a .egg named directory in the target that is not an egg:
16
+ target_dir.mkdir('not.an.egg')
17
+ return target_dir
18
+
19
+ def test_non_egg_dir_named_egg(self, target_dir):
20
+ dists = pkg_resources.find_distributions(str(target_dir))
21
+ assert not list(dists)
22
+
23
+ def test_standalone_egg_directory(self, target_dir):
24
+ shutil.copytree(
25
+ TESTS_DATA_DIR / 'my-test-package_unpacked-egg',
26
+ target_dir,
27
+ dirs_exist_ok=True,
28
+ )
29
+ dists = pkg_resources.find_distributions(str(target_dir))
30
+ assert [dist.project_name for dist in dists] == ['my-test-package']
31
+ dists = pkg_resources.find_distributions(str(target_dir), only=True)
32
+ assert not list(dists)
33
+
34
+ def test_zipped_egg(self, target_dir):
35
+ shutil.copytree(
36
+ TESTS_DATA_DIR / 'my-test-package_zipped-egg',
37
+ target_dir,
38
+ dirs_exist_ok=True,
39
+ )
40
+ dists = pkg_resources.find_distributions(str(target_dir))
41
+ assert [dist.project_name for dist in dists] == ['my-test-package']
42
+ dists = pkg_resources.find_distributions(str(target_dir), only=True)
43
+ assert not list(dists)
44
+
45
+ def test_zipped_sdist_one_level_removed(self, target_dir):
46
+ shutil.copytree(
47
+ TESTS_DATA_DIR / 'my-test-package-zip', target_dir, dirs_exist_ok=True
48
+ )
49
+ dists = pkg_resources.find_distributions(
50
+ str(target_dir / "my-test-package.zip")
51
+ )
52
+ assert [dist.project_name for dist in dists] == ['my-test-package']
53
+ dists = pkg_resources.find_distributions(
54
+ str(target_dir / "my-test-package.zip"), only=True
55
+ )
56
+ assert not list(dists)
@@ -0,0 +1,54 @@
1
+ import platform
2
+ from inspect import cleandoc
3
+
4
+ import jaraco.path
5
+ import pytest
6
+
7
+ pytestmark = pytest.mark.integration
8
+
9
+
10
+ # For the sake of simplicity this test uses fixtures defined in
11
+ # `setuptools.test.fixtures`,
12
+ # and it also exercise conditions considered deprecated...
13
+ # So if needed this test can be deleted.
14
+ @pytest.mark.skipif(
15
+ platform.system() != "Linux",
16
+ reason="only demonstrated to fail on Linux in #4399",
17
+ )
18
+ def test_interop_pkg_resources_iter_entry_points(tmp_path, venv):
19
+ """
20
+ Importing pkg_resources.iter_entry_points on console_scripts
21
+ seems to cause trouble with zope-interface, when deprecates installation method
22
+ is used. See #4399.
23
+ """
24
+ project = {
25
+ "pkg": {
26
+ "foo.py": cleandoc(
27
+ """
28
+ from pkg_resources import iter_entry_points
29
+
30
+ def bar():
31
+ print("Print me if you can")
32
+ """
33
+ ),
34
+ "setup.py": cleandoc(
35
+ """
36
+ from setuptools import setup, find_packages
37
+
38
+ setup(
39
+ install_requires=["zope-interface==6.4.post2"],
40
+ entry_points={
41
+ "console_scripts": [
42
+ "foo=foo:bar",
43
+ ],
44
+ },
45
+ )
46
+ """
47
+ ),
48
+ }
49
+ }
50
+ jaraco.path.build(project, prefix=tmp_path)
51
+ cmd = ["pip", "install", "-e", ".", "--no-use-pep517"]
52
+ venv.run(cmd, cwd=tmp_path / "pkg") # Needs this version of pkg_resources installed
53
+ out = venv.run(["foo"])
54
+ assert "Print me if you can" in out
@@ -0,0 +1,8 @@
1
+ from unittest import mock
2
+
3
+ from pkg_resources import evaluate_marker
4
+
5
+
6
+ @mock.patch('platform.python_version', return_value='2.7.10')
7
+ def test_ordering(python_version_mock):
8
+ assert evaluate_marker("python_full_version > '2.7.3'") is True
@@ -0,0 +1,485 @@
1
+ from __future__ import annotations
2
+
3
+ import builtins
4
+ import datetime
5
+ import inspect
6
+ import os
7
+ import plistlib
8
+ import stat
9
+ import subprocess
10
+ import sys
11
+ import tempfile
12
+ import zipfile
13
+ from unittest import mock
14
+
15
+ import pytest
16
+
17
+ import pkg_resources
18
+ from pkg_resources import DistInfoDistribution, Distribution, EggInfoDistribution
19
+
20
+ import distutils.command.install_egg_info
21
+ import distutils.dist
22
+
23
+
24
+ class EggRemover(str):
25
+ def __call__(self):
26
+ if self in sys.path:
27
+ sys.path.remove(self)
28
+ if os.path.exists(self):
29
+ os.remove(self)
30
+
31
+
32
+ class TestZipProvider:
33
+ finalizers: list[EggRemover] = []
34
+
35
+ ref_time = datetime.datetime(2013, 5, 12, 13, 25, 0)
36
+ "A reference time for a file modification"
37
+
38
+ @classmethod
39
+ def setup_class(cls):
40
+ "create a zip egg and add it to sys.path"
41
+ egg = tempfile.NamedTemporaryFile(suffix='.egg', delete=False)
42
+ zip_egg = zipfile.ZipFile(egg, 'w')
43
+ zip_info = zipfile.ZipInfo()
44
+ zip_info.filename = 'mod.py'
45
+ zip_info.date_time = cls.ref_time.timetuple()
46
+ zip_egg.writestr(zip_info, 'x = 3\n')
47
+ zip_info = zipfile.ZipInfo()
48
+ zip_info.filename = 'data.dat'
49
+ zip_info.date_time = cls.ref_time.timetuple()
50
+ zip_egg.writestr(zip_info, 'hello, world!')
51
+ zip_info = zipfile.ZipInfo()
52
+ zip_info.filename = 'subdir/mod2.py'
53
+ zip_info.date_time = cls.ref_time.timetuple()
54
+ zip_egg.writestr(zip_info, 'x = 6\n')
55
+ zip_info = zipfile.ZipInfo()
56
+ zip_info.filename = 'subdir/data2.dat'
57
+ zip_info.date_time = cls.ref_time.timetuple()
58
+ zip_egg.writestr(zip_info, 'goodbye, world!')
59
+ zip_egg.close()
60
+ egg.close()
61
+
62
+ sys.path.append(egg.name)
63
+ subdir = os.path.join(egg.name, 'subdir')
64
+ sys.path.append(subdir)
65
+ cls.finalizers.append(EggRemover(subdir))
66
+ cls.finalizers.append(EggRemover(egg.name))
67
+
68
+ @classmethod
69
+ def teardown_class(cls):
70
+ for finalizer in cls.finalizers:
71
+ finalizer()
72
+
73
+ def test_resource_listdir(self):
74
+ import mod # pyright: ignore[reportMissingImports] # Temporary package for test
75
+
76
+ zp = pkg_resources.ZipProvider(mod)
77
+
78
+ expected_root = ['data.dat', 'mod.py', 'subdir']
79
+ assert sorted(zp.resource_listdir('')) == expected_root
80
+
81
+ expected_subdir = ['data2.dat', 'mod2.py']
82
+ assert sorted(zp.resource_listdir('subdir')) == expected_subdir
83
+ assert sorted(zp.resource_listdir('subdir/')) == expected_subdir
84
+
85
+ assert zp.resource_listdir('nonexistent') == []
86
+ assert zp.resource_listdir('nonexistent/') == []
87
+
88
+ import mod2 # pyright: ignore[reportMissingImports] # Temporary package for test
89
+
90
+ zp2 = pkg_resources.ZipProvider(mod2)
91
+
92
+ assert sorted(zp2.resource_listdir('')) == expected_subdir
93
+
94
+ assert zp2.resource_listdir('subdir') == []
95
+ assert zp2.resource_listdir('subdir/') == []
96
+
97
+ def test_resource_filename_rewrites_on_change(self):
98
+ """
99
+ If a previous call to get_resource_filename has saved the file, but
100
+ the file has been subsequently mutated with different file of the
101
+ same size and modification time, it should not be overwritten on a
102
+ subsequent call to get_resource_filename.
103
+ """
104
+ import mod # pyright: ignore[reportMissingImports] # Temporary package for test
105
+
106
+ manager = pkg_resources.ResourceManager()
107
+ zp = pkg_resources.ZipProvider(mod)
108
+ filename = zp.get_resource_filename(manager, 'data.dat')
109
+ actual = datetime.datetime.fromtimestamp(os.stat(filename).st_mtime)
110
+ assert actual == self.ref_time
111
+ f = open(filename, 'w', encoding="utf-8")
112
+ f.write('hello, world?')
113
+ f.close()
114
+ ts = self.ref_time.timestamp()
115
+ os.utime(filename, (ts, ts))
116
+ filename = zp.get_resource_filename(manager, 'data.dat')
117
+ with open(filename, encoding="utf-8") as f:
118
+ assert f.read() == 'hello, world!'
119
+ manager.cleanup_resources()
120
+
121
+
122
+ class TestResourceManager:
123
+ def test_get_cache_path(self):
124
+ mgr = pkg_resources.ResourceManager()
125
+ path = mgr.get_cache_path('foo')
126
+ type_ = str(type(path))
127
+ message = "Unexpected type from get_cache_path: " + type_
128
+ assert isinstance(path, str), message
129
+
130
+ def test_get_cache_path_race(self, tmpdir):
131
+ # Patch to os.path.isdir to create a race condition
132
+ def patched_isdir(dirname, unpatched_isdir=pkg_resources.isdir):
133
+ patched_isdir.dirnames.append(dirname)
134
+
135
+ was_dir = unpatched_isdir(dirname)
136
+ if not was_dir:
137
+ os.makedirs(dirname)
138
+ return was_dir
139
+
140
+ patched_isdir.dirnames = []
141
+
142
+ # Get a cache path with a "race condition"
143
+ mgr = pkg_resources.ResourceManager()
144
+ mgr.set_extraction_path(str(tmpdir))
145
+
146
+ archive_name = os.sep.join(('foo', 'bar', 'baz'))
147
+ with mock.patch.object(pkg_resources, 'isdir', new=patched_isdir):
148
+ mgr.get_cache_path(archive_name)
149
+
150
+ # Because this test relies on the implementation details of this
151
+ # function, these assertions are a sentinel to ensure that the
152
+ # test suite will not fail silently if the implementation changes.
153
+ called_dirnames = patched_isdir.dirnames
154
+ assert len(called_dirnames) == 2
155
+ assert called_dirnames[0].split(os.sep)[-2:] == ['foo', 'bar']
156
+ assert called_dirnames[1].split(os.sep)[-1:] == ['foo']
157
+
158
+ """
159
+ Tests to ensure that pkg_resources runs independently from setuptools.
160
+ """
161
+
162
+ def test_setuptools_not_imported(self):
163
+ """
164
+ In a separate Python environment, import pkg_resources and assert
165
+ that action doesn't cause setuptools to be imported.
166
+ """
167
+ lines = (
168
+ 'import pkg_resources',
169
+ 'import sys',
170
+ ('assert "setuptools" not in sys.modules, "setuptools was imported"'),
171
+ )
172
+ cmd = [sys.executable, '-c', '; '.join(lines)]
173
+ subprocess.check_call(cmd)
174
+
175
+
176
+ def make_test_distribution(metadata_path, metadata):
177
+ """
178
+ Make a test Distribution object, and return it.
179
+
180
+ :param metadata_path: the path to the metadata file that should be
181
+ created. This should be inside a distribution directory that should
182
+ also be created. For example, an argument value might end with
183
+ "<project>.dist-info/METADATA".
184
+ :param metadata: the desired contents of the metadata file, as bytes.
185
+ """
186
+ dist_dir = os.path.dirname(metadata_path)
187
+ os.mkdir(dist_dir)
188
+ with open(metadata_path, 'wb') as f:
189
+ f.write(metadata)
190
+ dists = list(pkg_resources.distributions_from_metadata(dist_dir))
191
+ (dist,) = dists
192
+
193
+ return dist
194
+
195
+
196
+ def test_get_metadata__bad_utf8(tmpdir):
197
+ """
198
+ Test a metadata file with bytes that can't be decoded as utf-8.
199
+ """
200
+ filename = 'METADATA'
201
+ # Convert the tmpdir LocalPath object to a string before joining.
202
+ metadata_path = os.path.join(str(tmpdir), 'foo.dist-info', filename)
203
+ # Encode a non-ascii string with the wrong encoding (not utf-8).
204
+ metadata = 'née'.encode('iso-8859-1')
205
+ dist = make_test_distribution(metadata_path, metadata=metadata)
206
+
207
+ with pytest.raises(UnicodeDecodeError) as excinfo:
208
+ dist.get_metadata(filename)
209
+
210
+ exc = excinfo.value
211
+ actual = str(exc)
212
+ expected = (
213
+ # The error message starts with "'utf-8' codec ..." However, the
214
+ # spelling of "utf-8" can vary (e.g. "utf8") so we don't include it
215
+ "codec can't decode byte 0xe9 in position 1: "
216
+ 'invalid continuation byte in METADATA file at path: '
217
+ )
218
+ assert expected in actual, f'actual: {actual}'
219
+ assert actual.endswith(metadata_path), f'actual: {actual}'
220
+
221
+
222
+ def make_distribution_no_version(tmpdir, basename):
223
+ """
224
+ Create a distribution directory with no file containing the version.
225
+ """
226
+ dist_dir = tmpdir / basename
227
+ dist_dir.ensure_dir()
228
+ # Make the directory non-empty so distributions_from_metadata()
229
+ # will detect it and yield it.
230
+ dist_dir.join('temp.txt').ensure()
231
+
232
+ dists = list(pkg_resources.distributions_from_metadata(dist_dir))
233
+ assert len(dists) == 1
234
+ (dist,) = dists
235
+
236
+ return dist, dist_dir
237
+
238
+
239
+ @pytest.mark.parametrize(
240
+ ("suffix", "expected_filename", "expected_dist_type"),
241
+ [
242
+ ('egg-info', 'PKG-INFO', EggInfoDistribution),
243
+ ('dist-info', 'METADATA', DistInfoDistribution),
244
+ ],
245
+ )
246
+ @pytest.mark.xfail(
247
+ sys.version_info[:2] == (3, 12) and sys.version_info.releaselevel != 'final',
248
+ reason="https://github.com/python/cpython/issues/103632",
249
+ )
250
+ def test_distribution_version_missing(
251
+ tmpdir, suffix, expected_filename, expected_dist_type
252
+ ):
253
+ """
254
+ Test Distribution.version when the "Version" header is missing.
255
+ """
256
+ basename = f'foo.{suffix}'
257
+ dist, dist_dir = make_distribution_no_version(tmpdir, basename)
258
+
259
+ expected_text = (
260
+ f"Missing 'Version:' header and/or {expected_filename} file at path: "
261
+ )
262
+ metadata_path = os.path.join(dist_dir, expected_filename)
263
+
264
+ # Now check the exception raised when the "version" attribute is accessed.
265
+ with pytest.raises(ValueError) as excinfo:
266
+ dist.version
267
+
268
+ err = str(excinfo.value)
269
+ # Include a string expression after the assert so the full strings
270
+ # will be visible for inspection on failure.
271
+ assert expected_text in err, str((expected_text, err))
272
+
273
+ # Also check the args passed to the ValueError.
274
+ msg, dist = excinfo.value.args
275
+ assert expected_text in msg
276
+ # Check that the message portion contains the path.
277
+ assert metadata_path in msg, str((metadata_path, msg))
278
+ assert type(dist) is expected_dist_type
279
+
280
+
281
+ @pytest.mark.xfail(
282
+ sys.version_info[:2] == (3, 12) and sys.version_info.releaselevel != 'final',
283
+ reason="https://github.com/python/cpython/issues/103632",
284
+ )
285
+ def test_distribution_version_missing_undetected_path():
286
+ """
287
+ Test Distribution.version when the "Version" header is missing and
288
+ the path can't be detected.
289
+ """
290
+ # Create a Distribution object with no metadata argument, which results
291
+ # in an empty metadata provider.
292
+ dist = Distribution('/foo')
293
+ with pytest.raises(ValueError) as excinfo:
294
+ dist.version
295
+
296
+ msg, dist = excinfo.value.args
297
+ expected = (
298
+ "Missing 'Version:' header and/or PKG-INFO file at path: [could not detect]"
299
+ )
300
+ assert msg == expected
301
+
302
+
303
+ @pytest.mark.parametrize('only', [False, True])
304
+ def test_dist_info_is_not_dir(tmp_path, only):
305
+ """Test path containing a file with dist-info extension."""
306
+ dist_info = tmp_path / 'foobar.dist-info'
307
+ dist_info.touch()
308
+ assert not pkg_resources.dist_factory(str(tmp_path), str(dist_info), only)
309
+
310
+
311
+ def test_macos_vers_fallback(monkeypatch, tmp_path):
312
+ """Regression test for pkg_resources._macos_vers"""
313
+ orig_open = builtins.open
314
+
315
+ # Pretend we need to use the plist file
316
+ monkeypatch.setattr('platform.mac_ver', mock.Mock(return_value=('', (), '')))
317
+
318
+ # Create fake content for the fake plist file
319
+ with open(tmp_path / 'fake.plist', 'wb') as fake_file:
320
+ plistlib.dump({"ProductVersion": "11.4"}, fake_file)
321
+
322
+ # Pretend the fake file exists
323
+ monkeypatch.setattr('os.path.exists', mock.Mock(return_value=True))
324
+
325
+ def fake_open(file, *args, **kwargs):
326
+ return orig_open(tmp_path / 'fake.plist', *args, **kwargs)
327
+
328
+ # Ensure that the _macos_vers works correctly
329
+ with mock.patch('builtins.open', mock.Mock(side_effect=fake_open)) as m:
330
+ pkg_resources._macos_vers.cache_clear()
331
+ assert pkg_resources._macos_vers() == ["11", "4"]
332
+ pkg_resources._macos_vers.cache_clear()
333
+
334
+ m.assert_called()
335
+
336
+
337
+ class TestDeepVersionLookupDistutils:
338
+ @pytest.fixture
339
+ def env(self, tmpdir):
340
+ """
341
+ Create a package environment, similar to a virtualenv,
342
+ in which packages are installed.
343
+ """
344
+
345
+ class Environment(str):
346
+ pass
347
+
348
+ env = Environment(tmpdir)
349
+ tmpdir.chmod(stat.S_IRWXU)
350
+ subs = 'home', 'lib', 'scripts', 'data', 'egg-base'
351
+ env.paths = dict((dirname, str(tmpdir / dirname)) for dirname in subs)
352
+ list(map(os.mkdir, env.paths.values()))
353
+ return env
354
+
355
+ def create_foo_pkg(self, env, version):
356
+ """
357
+ Create a foo package installed (distutils-style) to env.paths['lib']
358
+ as version.
359
+ """
360
+ ld = "This package has unicode metadata! ❄"
361
+ attrs = dict(name='foo', version=version, long_description=ld)
362
+ dist = distutils.dist.Distribution(attrs)
363
+ iei_cmd = distutils.command.install_egg_info.install_egg_info(dist)
364
+ iei_cmd.initialize_options()
365
+ iei_cmd.install_dir = env.paths['lib']
366
+ iei_cmd.finalize_options()
367
+ iei_cmd.run()
368
+
369
+ def test_version_resolved_from_egg_info(self, env):
370
+ version = '1.11.0.dev0+2329eae'
371
+ self.create_foo_pkg(env, version)
372
+
373
+ # this requirement parsing will raise a VersionConflict unless the
374
+ # .egg-info file is parsed (see #419 on BitBucket)
375
+ req = pkg_resources.Requirement.parse('foo>=1.9')
376
+ dist = pkg_resources.WorkingSet([env.paths['lib']]).find(req)
377
+ assert dist.version == version
378
+
379
+ @pytest.mark.parametrize(
380
+ ("unnormalized", "normalized"),
381
+ [
382
+ ('foo', 'foo'),
383
+ ('foo/', 'foo'),
384
+ ('foo/bar', 'foo/bar'),
385
+ ('foo/bar/', 'foo/bar'),
386
+ ],
387
+ )
388
+ def test_normalize_path_trailing_sep(self, unnormalized, normalized):
389
+ """Ensure the trailing slash is cleaned for path comparison.
390
+
391
+ See pypa/setuptools#1519.
392
+ """
393
+ result_from_unnormalized = pkg_resources.normalize_path(unnormalized)
394
+ result_from_normalized = pkg_resources.normalize_path(normalized)
395
+ assert result_from_unnormalized == result_from_normalized
396
+
397
+ @pytest.mark.skipif(
398
+ os.path.normcase('A') != os.path.normcase('a'),
399
+ reason='Testing case-insensitive filesystems.',
400
+ )
401
+ @pytest.mark.parametrize(
402
+ ("unnormalized", "normalized"),
403
+ [
404
+ ('MiXeD/CasE', 'mixed/case'),
405
+ ],
406
+ )
407
+ def test_normalize_path_normcase(self, unnormalized, normalized):
408
+ """Ensure mixed case is normalized on case-insensitive filesystems."""
409
+ result_from_unnormalized = pkg_resources.normalize_path(unnormalized)
410
+ result_from_normalized = pkg_resources.normalize_path(normalized)
411
+ assert result_from_unnormalized == result_from_normalized
412
+
413
+ @pytest.mark.skipif(
414
+ os.path.sep != '\\',
415
+ reason='Testing systems using backslashes as path separators.',
416
+ )
417
+ @pytest.mark.parametrize(
418
+ ("unnormalized", "expected"),
419
+ [
420
+ ('forward/slash', 'forward\\slash'),
421
+ ('forward/slash/', 'forward\\slash'),
422
+ ('backward\\slash\\', 'backward\\slash'),
423
+ ],
424
+ )
425
+ def test_normalize_path_backslash_sep(self, unnormalized, expected):
426
+ """Ensure path seps are cleaned on backslash path sep systems."""
427
+ result = pkg_resources.normalize_path(unnormalized)
428
+ assert result.endswith(expected)
429
+
430
+
431
+ class TestWorkdirRequire:
432
+ def fake_site_packages(self, tmp_path, monkeypatch, dist_files):
433
+ site_packages = tmp_path / "site-packages"
434
+ site_packages.mkdir()
435
+ for file, content in self.FILES.items():
436
+ path = site_packages / file
437
+ path.parent.mkdir(exist_ok=True, parents=True)
438
+ path.write_text(inspect.cleandoc(content), encoding="utf-8")
439
+
440
+ monkeypatch.setattr(sys, "path", [site_packages])
441
+ return os.fspath(site_packages)
442
+
443
+ FILES = {
444
+ "pkg1_mod-1.2.3.dist-info/METADATA": """
445
+ Metadata-Version: 2.4
446
+ Name: pkg1.mod
447
+ Version: 1.2.3
448
+ """,
449
+ "pkg2.mod-0.42.dist-info/METADATA": """
450
+ Metadata-Version: 2.1
451
+ Name: pkg2.mod
452
+ Version: 0.42
453
+ """,
454
+ "pkg3_mod.egg-info/PKG-INFO": """
455
+ Name: pkg3.mod
456
+ Version: 1.2.3.4
457
+ """,
458
+ "pkg4.mod.egg-info/PKG-INFO": """
459
+ Name: pkg4.mod
460
+ Version: 0.42.1
461
+ """,
462
+ }
463
+
464
+ @pytest.mark.parametrize(
465
+ ("version", "requirement"),
466
+ [
467
+ ("1.2.3", "pkg1.mod>=1"),
468
+ ("0.42", "pkg2.mod>=0.4"),
469
+ ("1.2.3.4", "pkg3.mod<=2"),
470
+ ("0.42.1", "pkg4.mod>0.2,<1"),
471
+ ],
472
+ )
473
+ def test_require_non_normalised_name(
474
+ self, tmp_path, monkeypatch, version, requirement
475
+ ):
476
+ # https://github.com/pypa/setuptools/issues/4853
477
+ site_packages = self.fake_site_packages(tmp_path, monkeypatch, self.FILES)
478
+ ws = pkg_resources.WorkingSet([site_packages])
479
+
480
+ for req in [requirement, requirement.replace(".", "-")]:
481
+ [dist] = ws.require(req)
482
+ assert dist.version == version
483
+ assert os.path.samefile(
484
+ os.path.commonpath([dist.location, site_packages]), site_packages
485
+ )