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,708 @@
1
+ from __future__ import annotations
2
+
3
+ import builtins
4
+ import importlib
5
+ import os.path
6
+ import platform
7
+ import shutil
8
+ import stat
9
+ import struct
10
+ import sys
11
+ import sysconfig
12
+ from contextlib import suppress
13
+ from inspect import cleandoc
14
+ from zipfile import ZipFile
15
+
16
+ import jaraco.path
17
+ import pytest
18
+ from packaging import tags
19
+
20
+ import setuptools
21
+ from setuptools.command.bdist_wheel import bdist_wheel, get_abi_tag
22
+ from setuptools.dist import Distribution
23
+ from setuptools.warnings import SetuptoolsDeprecationWarning
24
+
25
+ from distutils.core import run_setup
26
+
27
+ DEFAULT_FILES = {
28
+ "dummy_dist-1.0.dist-info/top_level.txt",
29
+ "dummy_dist-1.0.dist-info/METADATA",
30
+ "dummy_dist-1.0.dist-info/WHEEL",
31
+ "dummy_dist-1.0.dist-info/RECORD",
32
+ }
33
+ DEFAULT_LICENSE_FILES = {
34
+ "LICENSE",
35
+ "LICENSE.txt",
36
+ "LICENCE",
37
+ "LICENCE.txt",
38
+ "COPYING",
39
+ "COPYING.md",
40
+ "NOTICE",
41
+ "NOTICE.rst",
42
+ "AUTHORS",
43
+ "AUTHORS.txt",
44
+ }
45
+ OTHER_IGNORED_FILES = {
46
+ "LICENSE~",
47
+ "AUTHORS~",
48
+ }
49
+ SETUPPY_EXAMPLE = """\
50
+ from setuptools import setup
51
+
52
+ setup(
53
+ name='dummy_dist',
54
+ version='1.0',
55
+ )
56
+ """
57
+
58
+
59
+ EXAMPLES = {
60
+ "dummy-dist": {
61
+ "setup.py": SETUPPY_EXAMPLE,
62
+ "licenses_dir": {"DUMMYFILE": ""},
63
+ **dict.fromkeys(DEFAULT_LICENSE_FILES | OTHER_IGNORED_FILES, ""),
64
+ },
65
+ "simple-dist": {
66
+ "setup.py": cleandoc(
67
+ """
68
+ from setuptools import setup
69
+
70
+ setup(
71
+ name="simple.dist",
72
+ version="0.1",
73
+ description="A testing distribution \N{SNOWMAN}",
74
+ extras_require={"voting": ["beaglevote"]},
75
+ )
76
+ """
77
+ ),
78
+ "simpledist": "",
79
+ },
80
+ "complex-dist": {
81
+ "setup.py": cleandoc(
82
+ """
83
+ from setuptools import setup
84
+
85
+ setup(
86
+ name="complex-dist",
87
+ version="0.1",
88
+ description="Another testing distribution \N{SNOWMAN}",
89
+ long_description="Another testing distribution \N{SNOWMAN}",
90
+ author="Illustrious Author",
91
+ author_email="illustrious@example.org",
92
+ url="http://example.org/exemplary",
93
+ packages=["complexdist"],
94
+ setup_requires=["setuptools"],
95
+ install_requires=["quux", "splort"],
96
+ extras_require={"simple": ["simple.dist"]},
97
+ entry_points={
98
+ "console_scripts": [
99
+ "complex-dist=complexdist:main",
100
+ "complex-dist2=complexdist:main",
101
+ ],
102
+ },
103
+ )
104
+ """
105
+ ),
106
+ "complexdist": {"__init__.py": "def main(): return"},
107
+ },
108
+ "headers-dist": {
109
+ "setup.py": cleandoc(
110
+ """
111
+ from setuptools import setup
112
+
113
+ setup(
114
+ name="headers.dist",
115
+ version="0.1",
116
+ description="A distribution with headers",
117
+ headers=["header.h"],
118
+ )
119
+ """
120
+ ),
121
+ "headersdist.py": "",
122
+ "header.h": "",
123
+ },
124
+ "commasinfilenames-dist": {
125
+ "setup.py": cleandoc(
126
+ """
127
+ from setuptools import setup
128
+
129
+ setup(
130
+ name="testrepo",
131
+ version="0.1",
132
+ packages=["mypackage"],
133
+ description="A test package with commas in file names",
134
+ include_package_data=True,
135
+ package_data={"mypackage.data": ["*"]},
136
+ )
137
+ """
138
+ ),
139
+ "mypackage": {
140
+ "__init__.py": "",
141
+ "data": {"__init__.py": "", "1,2,3.txt": ""},
142
+ },
143
+ "testrepo-0.1.0": {
144
+ "mypackage": {"__init__.py": ""},
145
+ },
146
+ },
147
+ "unicode-dist": {
148
+ "setup.py": cleandoc(
149
+ """
150
+ from setuptools import setup
151
+
152
+ setup(
153
+ name="unicode.dist",
154
+ version="0.1",
155
+ description="A testing distribution \N{SNOWMAN}",
156
+ packages=["unicodedist"],
157
+ zip_safe=True,
158
+ )
159
+ """
160
+ ),
161
+ "unicodedist": {"__init__.py": "", "åäö_日本語.py": ""},
162
+ },
163
+ "utf8-metadata-dist": {
164
+ "setup.cfg": cleandoc(
165
+ """
166
+ [metadata]
167
+ name = utf8-metadata-dist
168
+ version = 42
169
+ author_email = "John X. Ãørçeč" <john@utf8.org>, Γαμα קּ 東 <gama@utf8.org>
170
+ long_description = file: README.rst
171
+ """
172
+ ),
173
+ "README.rst": "UTF-8 描述 説明",
174
+ },
175
+ "licenses-dist": {
176
+ "setup.cfg": cleandoc(
177
+ """
178
+ [metadata]
179
+ name = licenses-dist
180
+ version = 1.0
181
+ license_files = **/LICENSE
182
+ """
183
+ ),
184
+ "LICENSE": "",
185
+ "src": {
186
+ "vendor": {"LICENSE": ""},
187
+ },
188
+ },
189
+ }
190
+
191
+
192
+ if sys.platform != "win32":
193
+ # ABI3 extensions don't really work on Windows
194
+ EXAMPLES["abi3extension-dist"] = {
195
+ "setup.py": cleandoc(
196
+ """
197
+ from setuptools import Extension, setup
198
+
199
+ setup(
200
+ name="extension.dist",
201
+ version="0.1",
202
+ description="A testing distribution \N{SNOWMAN}",
203
+ ext_modules=[
204
+ Extension(
205
+ name="extension", sources=["extension.c"], py_limited_api=True
206
+ )
207
+ ],
208
+ )
209
+ """
210
+ ),
211
+ "setup.cfg": "[bdist_wheel]\npy_limited_api=cp32",
212
+ "extension.c": "#define Py_LIMITED_API 0x03020000\n#include <Python.h>",
213
+ }
214
+
215
+
216
+ def bdist_wheel_cmd(**kwargs):
217
+ """Run command in the same process so that it is easier to collect coverage"""
218
+ dist_obj = (
219
+ run_setup("setup.py", stop_after="init")
220
+ if os.path.exists("setup.py")
221
+ else Distribution({"script_name": "%%build_meta%%"})
222
+ )
223
+ dist_obj.parse_config_files()
224
+ cmd = bdist_wheel(dist_obj)
225
+ for attr, value in kwargs.items():
226
+ setattr(cmd, attr, value)
227
+ cmd.finalize_options()
228
+ return cmd
229
+
230
+
231
+ def mkexample(tmp_path_factory, name):
232
+ basedir = tmp_path_factory.mktemp(name)
233
+ jaraco.path.build(EXAMPLES[name], prefix=str(basedir))
234
+ return basedir
235
+
236
+
237
+ @pytest.fixture(scope="session")
238
+ def wheel_paths(tmp_path_factory):
239
+ build_base = tmp_path_factory.mktemp("build")
240
+ dist_dir = tmp_path_factory.mktemp("dist")
241
+ for name in EXAMPLES:
242
+ example_dir = mkexample(tmp_path_factory, name)
243
+ build_dir = build_base / name
244
+ with jaraco.path.DirectoryStack().context(example_dir):
245
+ bdist_wheel_cmd(bdist_dir=str(build_dir), dist_dir=str(dist_dir)).run()
246
+
247
+ return sorted(str(fname) for fname in dist_dir.glob("*.whl"))
248
+
249
+
250
+ @pytest.fixture
251
+ def dummy_dist(tmp_path_factory):
252
+ return mkexample(tmp_path_factory, "dummy-dist")
253
+
254
+
255
+ @pytest.fixture
256
+ def licenses_dist(tmp_path_factory):
257
+ return mkexample(tmp_path_factory, "licenses-dist")
258
+
259
+
260
+ def test_no_scripts(wheel_paths):
261
+ """Make sure entry point scripts are not generated."""
262
+ path = next(path for path in wheel_paths if "complex_dist" in path)
263
+ for entry in ZipFile(path).infolist():
264
+ assert ".data/scripts/" not in entry.filename
265
+
266
+
267
+ def test_unicode_record(wheel_paths):
268
+ path = next(path for path in wheel_paths if "unicode_dist" in path)
269
+ with ZipFile(path) as zf:
270
+ record = zf.read("unicode_dist-0.1.dist-info/RECORD")
271
+
272
+ assert "åäö_日本語.py".encode() in record
273
+
274
+
275
+ UTF8_PKG_INFO = """\
276
+ Metadata-Version: 2.1
277
+ Name: helloworld
278
+ Version: 42
279
+ Author-email: "John X. Ãørçeč" <john@utf8.org>, Γαμα קּ 東 <gama@utf8.org>
280
+
281
+
282
+ UTF-8 描述 説明
283
+ """
284
+
285
+
286
+ def test_preserve_unicode_metadata(monkeypatch, tmp_path):
287
+ monkeypatch.chdir(tmp_path)
288
+ egginfo = tmp_path / "dummy_dist.egg-info"
289
+ distinfo = tmp_path / "dummy_dist.dist-info"
290
+
291
+ egginfo.mkdir()
292
+ (egginfo / "PKG-INFO").write_text(UTF8_PKG_INFO, encoding="utf-8")
293
+ (egginfo / "dependency_links.txt").touch()
294
+
295
+ class simpler_bdist_wheel(bdist_wheel):
296
+ """Avoid messing with setuptools/distutils internals"""
297
+
298
+ def __init__(self):
299
+ pass
300
+
301
+ @property
302
+ def license_paths(self):
303
+ return []
304
+
305
+ cmd_obj = simpler_bdist_wheel()
306
+ cmd_obj.egg2dist(egginfo, distinfo)
307
+
308
+ metadata = (distinfo / "METADATA").read_text(encoding="utf-8")
309
+ assert 'Author-email: "John X. Ãørçeč"' in metadata
310
+ assert "Γαμα קּ 東 " in metadata
311
+ assert "UTF-8 描述 説明" in metadata
312
+
313
+
314
+ def test_licenses_default(dummy_dist, monkeypatch, tmp_path):
315
+ monkeypatch.chdir(dummy_dist)
316
+ bdist_wheel_cmd(bdist_dir=str(tmp_path)).run()
317
+ with ZipFile("dist/dummy_dist-1.0-py3-none-any.whl") as wf:
318
+ license_files = {
319
+ "dummy_dist-1.0.dist-info/licenses/" + fname
320
+ for fname in DEFAULT_LICENSE_FILES
321
+ }
322
+ assert set(wf.namelist()) == DEFAULT_FILES | license_files
323
+
324
+
325
+ def test_licenses_deprecated(dummy_dist, monkeypatch, tmp_path):
326
+ dummy_dist.joinpath("setup.cfg").write_text(
327
+ "[metadata]\nlicense_file=licenses_dir/DUMMYFILE", encoding="utf-8"
328
+ )
329
+ monkeypatch.chdir(dummy_dist)
330
+
331
+ bdist_wheel_cmd(bdist_dir=str(tmp_path)).run()
332
+
333
+ with ZipFile("dist/dummy_dist-1.0-py3-none-any.whl") as wf:
334
+ license_files = {"dummy_dist-1.0.dist-info/licenses/licenses_dir/DUMMYFILE"}
335
+ assert set(wf.namelist()) == DEFAULT_FILES | license_files
336
+
337
+
338
+ @pytest.mark.parametrize(
339
+ ("config_file", "config"),
340
+ [
341
+ ("setup.cfg", "[metadata]\nlicense_files=licenses_dir/*\n LICENSE"),
342
+ ("setup.cfg", "[metadata]\nlicense_files=licenses_dir/*, LICENSE"),
343
+ (
344
+ "setup.py",
345
+ SETUPPY_EXAMPLE.replace(
346
+ ")", " license_files=['licenses_dir/DUMMYFILE', 'LICENSE'])"
347
+ ),
348
+ ),
349
+ ],
350
+ )
351
+ def test_licenses_override(dummy_dist, monkeypatch, tmp_path, config_file, config):
352
+ dummy_dist.joinpath(config_file).write_text(config, encoding="utf-8")
353
+ monkeypatch.chdir(dummy_dist)
354
+ bdist_wheel_cmd(bdist_dir=str(tmp_path)).run()
355
+ with ZipFile("dist/dummy_dist-1.0-py3-none-any.whl") as wf:
356
+ license_files = {
357
+ "dummy_dist-1.0.dist-info/licenses/" + fname
358
+ for fname in {"licenses_dir/DUMMYFILE", "LICENSE"}
359
+ }
360
+ assert set(wf.namelist()) == DEFAULT_FILES | license_files
361
+ metadata = wf.read("dummy_dist-1.0.dist-info/METADATA").decode("utf8")
362
+ assert "License-File: licenses_dir/DUMMYFILE" in metadata
363
+ assert "License-File: LICENSE" in metadata
364
+
365
+
366
+ def test_licenses_preserve_folder_structure(licenses_dist, monkeypatch, tmp_path):
367
+ monkeypatch.chdir(licenses_dist)
368
+ bdist_wheel_cmd(bdist_dir=str(tmp_path)).run()
369
+ print(os.listdir("dist"))
370
+ with ZipFile("dist/licenses_dist-1.0-py3-none-any.whl") as wf:
371
+ default_files = {name.replace("dummy_", "licenses_") for name in DEFAULT_FILES}
372
+ license_files = {
373
+ "licenses_dist-1.0.dist-info/licenses/LICENSE",
374
+ "licenses_dist-1.0.dist-info/licenses/src/vendor/LICENSE",
375
+ }
376
+ assert set(wf.namelist()) == default_files | license_files
377
+ metadata = wf.read("licenses_dist-1.0.dist-info/METADATA").decode("utf8")
378
+ assert "License-File: src/vendor/LICENSE" in metadata
379
+ assert "License-File: LICENSE" in metadata
380
+
381
+
382
+ def test_licenses_disabled(dummy_dist, monkeypatch, tmp_path):
383
+ dummy_dist.joinpath("setup.cfg").write_text(
384
+ "[metadata]\nlicense_files=\n", encoding="utf-8"
385
+ )
386
+ monkeypatch.chdir(dummy_dist)
387
+ bdist_wheel_cmd(bdist_dir=str(tmp_path)).run()
388
+ with ZipFile("dist/dummy_dist-1.0-py3-none-any.whl") as wf:
389
+ assert set(wf.namelist()) == DEFAULT_FILES
390
+
391
+
392
+ def test_build_number(dummy_dist, monkeypatch, tmp_path):
393
+ monkeypatch.chdir(dummy_dist)
394
+ bdist_wheel_cmd(bdist_dir=str(tmp_path), build_number="2").run()
395
+ with ZipFile("dist/dummy_dist-1.0-2-py3-none-any.whl") as wf:
396
+ filenames = set(wf.namelist())
397
+ assert "dummy_dist-1.0.dist-info/RECORD" in filenames
398
+ assert "dummy_dist-1.0.dist-info/METADATA" in filenames
399
+
400
+
401
+ def test_universal_deprecated(dummy_dist, monkeypatch, tmp_path):
402
+ monkeypatch.chdir(dummy_dist)
403
+ with pytest.warns(SetuptoolsDeprecationWarning, match=".*universal is deprecated"):
404
+ bdist_wheel_cmd(bdist_dir=str(tmp_path), universal=True).run()
405
+
406
+ # For now we still respect the option
407
+ assert os.path.exists("dist/dummy_dist-1.0-py2.py3-none-any.whl")
408
+
409
+
410
+ EXTENSION_EXAMPLE = """\
411
+ #include <Python.h>
412
+
413
+ static PyMethodDef methods[] = {
414
+ { NULL, NULL, 0, NULL }
415
+ };
416
+
417
+ static struct PyModuleDef module_def = {
418
+ PyModuleDef_HEAD_INIT,
419
+ "extension",
420
+ "Dummy extension module",
421
+ -1,
422
+ methods
423
+ };
424
+
425
+ PyMODINIT_FUNC PyInit_extension(void) {
426
+ return PyModule_Create(&module_def);
427
+ }
428
+ """
429
+ EXTENSION_SETUPPY = """\
430
+ from __future__ import annotations
431
+
432
+ from setuptools import Extension, setup
433
+
434
+ setup(
435
+ name="extension.dist",
436
+ version="0.1",
437
+ description="A testing distribution \N{SNOWMAN}",
438
+ ext_modules=[Extension(name="extension", sources=["extension.c"])],
439
+ )
440
+ """
441
+
442
+
443
+ @pytest.mark.filterwarnings(
444
+ "once:Config variable '.*' is unset.*, Python ABI tag may be incorrect"
445
+ )
446
+ def test_limited_abi(monkeypatch, tmp_path, tmp_path_factory):
447
+ """Test that building a binary wheel with the limited ABI works."""
448
+ source_dir = tmp_path_factory.mktemp("extension_dist")
449
+ (source_dir / "setup.py").write_text(EXTENSION_SETUPPY, encoding="utf-8")
450
+ (source_dir / "extension.c").write_text(EXTENSION_EXAMPLE, encoding="utf-8")
451
+ build_dir = tmp_path.joinpath("build")
452
+ dist_dir = tmp_path.joinpath("dist")
453
+ monkeypatch.chdir(source_dir)
454
+ bdist_wheel_cmd(bdist_dir=str(build_dir), dist_dir=str(dist_dir)).run()
455
+
456
+
457
+ def test_build_from_readonly_tree(dummy_dist, monkeypatch, tmp_path):
458
+ basedir = str(tmp_path.joinpath("dummy"))
459
+ shutil.copytree(str(dummy_dist), basedir)
460
+ monkeypatch.chdir(basedir)
461
+
462
+ # Make the tree read-only
463
+ for root, _dirs, files in os.walk(basedir):
464
+ for fname in files:
465
+ os.chmod(os.path.join(root, fname), stat.S_IREAD)
466
+
467
+ bdist_wheel_cmd().run()
468
+
469
+
470
+ @pytest.mark.parametrize(
471
+ ("option", "compress_type"),
472
+ list(bdist_wheel.supported_compressions.items()),
473
+ ids=list(bdist_wheel.supported_compressions),
474
+ )
475
+ def test_compression(dummy_dist, monkeypatch, tmp_path, option, compress_type):
476
+ monkeypatch.chdir(dummy_dist)
477
+ bdist_wheel_cmd(bdist_dir=str(tmp_path), compression=option).run()
478
+ with ZipFile("dist/dummy_dist-1.0-py3-none-any.whl") as wf:
479
+ filenames = set(wf.namelist())
480
+ assert "dummy_dist-1.0.dist-info/RECORD" in filenames
481
+ assert "dummy_dist-1.0.dist-info/METADATA" in filenames
482
+ for zinfo in wf.filelist:
483
+ assert zinfo.compress_type == compress_type
484
+
485
+
486
+ def test_wheelfile_line_endings(wheel_paths):
487
+ for path in wheel_paths:
488
+ with ZipFile(path) as wf:
489
+ wheelfile = next(fn for fn in wf.filelist if fn.filename.endswith("WHEEL"))
490
+ wheelfile_contents = wf.read(wheelfile)
491
+ assert b"\r" not in wheelfile_contents
492
+
493
+
494
+ def test_unix_epoch_timestamps(dummy_dist, monkeypatch, tmp_path):
495
+ monkeypatch.setenv("SOURCE_DATE_EPOCH", "0")
496
+ monkeypatch.chdir(dummy_dist)
497
+ bdist_wheel_cmd(bdist_dir=str(tmp_path), build_number="2a").run()
498
+ with ZipFile("dist/dummy_dist-1.0-2a-py3-none-any.whl") as wf:
499
+ for zinfo in wf.filelist:
500
+ assert zinfo.date_time >= (1980, 1, 1, 0, 0, 0) # min epoch is used
501
+
502
+
503
+ def test_get_abi_tag_windows(monkeypatch):
504
+ monkeypatch.setattr(tags, "interpreter_name", lambda: "cp")
505
+ monkeypatch.setattr(sysconfig, "get_config_var", lambda x: "cp313-win_amd64")
506
+ assert get_abi_tag() == "cp313"
507
+ monkeypatch.setattr(sys, "gettotalrefcount", lambda: 1, False)
508
+ assert get_abi_tag() == "cp313d"
509
+ monkeypatch.setattr(sysconfig, "get_config_var", lambda x: "cp313t-win_amd64")
510
+ assert get_abi_tag() == "cp313td"
511
+ monkeypatch.delattr(sys, "gettotalrefcount")
512
+ assert get_abi_tag() == "cp313t"
513
+
514
+
515
+ def test_get_abi_tag_pypy_old(monkeypatch):
516
+ monkeypatch.setattr(tags, "interpreter_name", lambda: "pp")
517
+ monkeypatch.setattr(sysconfig, "get_config_var", lambda x: "pypy36-pp73")
518
+ assert get_abi_tag() == "pypy36_pp73"
519
+
520
+
521
+ def test_get_abi_tag_pypy_new(monkeypatch):
522
+ monkeypatch.setattr(sysconfig, "get_config_var", lambda x: "pypy37-pp73-darwin")
523
+ monkeypatch.setattr(tags, "interpreter_name", lambda: "pp")
524
+ assert get_abi_tag() == "pypy37_pp73"
525
+
526
+
527
+ def test_get_abi_tag_graalpy(monkeypatch):
528
+ monkeypatch.setattr(
529
+ sysconfig, "get_config_var", lambda x: "graalpy231-310-native-x86_64-linux"
530
+ )
531
+ monkeypatch.setattr(tags, "interpreter_name", lambda: "graalpy")
532
+ assert get_abi_tag() == "graalpy231_310_native"
533
+
534
+
535
+ def test_get_abi_tag_fallback(monkeypatch):
536
+ monkeypatch.setattr(sysconfig, "get_config_var", lambda x: "unknown-python-310")
537
+ monkeypatch.setattr(tags, "interpreter_name", lambda: "unknown-python")
538
+ assert get_abi_tag() == "unknown_python_310"
539
+
540
+
541
+ def test_platform_with_space(dummy_dist, monkeypatch):
542
+ """Ensure building on platforms with a space in the name succeed."""
543
+ monkeypatch.chdir(dummy_dist)
544
+ bdist_wheel_cmd(plat_name="isilon onefs").run()
545
+
546
+
547
+ def test_data_dir_with_tag_build(monkeypatch, tmp_path):
548
+ """
549
+ Setuptools allow authors to set PEP 440's local version segments
550
+ using ``egg_info.tag_build``. This should be reflected not only in the
551
+ ``.whl`` file name, but also in the ``.dist-info`` and ``.data`` dirs.
552
+ See pypa/setuptools#3997.
553
+ """
554
+ monkeypatch.chdir(tmp_path)
555
+ files = {
556
+ "setup.py": """
557
+ from setuptools import setup
558
+ setup(headers=["hello.h"])
559
+ """,
560
+ "setup.cfg": """
561
+ [metadata]
562
+ name = test
563
+ version = 1.0
564
+
565
+ [options.data_files]
566
+ hello/world = file.txt
567
+
568
+ [egg_info]
569
+ tag_build = +what
570
+ tag_date = 0
571
+ """,
572
+ "file.txt": "",
573
+ "hello.h": "",
574
+ }
575
+ for file, content in files.items():
576
+ with open(file, "w", encoding="utf-8") as fh:
577
+ fh.write(cleandoc(content))
578
+
579
+ bdist_wheel_cmd().run()
580
+
581
+ # Ensure .whl, .dist-info and .data contain the local segment
582
+ wheel_path = "dist/test-1.0+what-py3-none-any.whl"
583
+ assert os.path.exists(wheel_path)
584
+ entries = set(ZipFile(wheel_path).namelist())
585
+ for expected in (
586
+ "test-1.0+what.data/headers/hello.h",
587
+ "test-1.0+what.data/data/hello/world/file.txt",
588
+ "test-1.0+what.dist-info/METADATA",
589
+ "test-1.0+what.dist-info/WHEEL",
590
+ ):
591
+ assert expected in entries
592
+
593
+ for not_expected in (
594
+ "test.data/headers/hello.h",
595
+ "test-1.0.data/data/hello/world/file.txt",
596
+ "test.dist-info/METADATA",
597
+ "test-1.0.dist-info/WHEEL",
598
+ ):
599
+ assert not_expected not in entries
600
+
601
+
602
+ @pytest.mark.parametrize(
603
+ ("reported", "expected"),
604
+ [("linux-x86_64", "linux_i686"), ("linux-aarch64", "linux_armv7l")],
605
+ )
606
+ @pytest.mark.skipif(
607
+ platform.system() != "Linux", reason="Only makes sense to test on Linux"
608
+ )
609
+ def test_platform_linux32(reported, expected, monkeypatch):
610
+ monkeypatch.setattr(struct, "calcsize", lambda x: 4)
611
+ dist = setuptools.Distribution()
612
+ cmd = bdist_wheel(dist)
613
+ cmd.plat_name = reported
614
+ cmd.root_is_pure = False
615
+ _, _, actual = cmd.get_tag()
616
+ assert actual == expected
617
+
618
+
619
+ def test_no_ctypes(monkeypatch) -> None:
620
+ def _fake_import(name: str, *args, **kwargs):
621
+ if name == "ctypes":
622
+ raise ModuleNotFoundError(f"No module named {name}")
623
+
624
+ return importlib.__import__(name, *args, **kwargs)
625
+
626
+ with suppress(KeyError):
627
+ monkeypatch.delitem(sys.modules, "wheel.macosx_libfile")
628
+
629
+ # Install an importer shim that refuses to load ctypes
630
+ monkeypatch.setattr(builtins, "__import__", _fake_import)
631
+ with pytest.raises(ModuleNotFoundError, match="No module named ctypes"):
632
+ import wheel.macosx_libfile # noqa: F401
633
+
634
+ # Unload and reimport the bdist_wheel command module to make sure it won't try to
635
+ # import ctypes
636
+ monkeypatch.delitem(sys.modules, "setuptools.command.bdist_wheel")
637
+
638
+ import setuptools.command.bdist_wheel # noqa: F401
639
+
640
+
641
+ def test_dist_info_provided(dummy_dist, monkeypatch, tmp_path):
642
+ monkeypatch.chdir(dummy_dist)
643
+ distinfo = tmp_path / "dummy_dist.dist-info"
644
+
645
+ distinfo.mkdir()
646
+ (distinfo / "METADATA").write_text("name: helloworld", encoding="utf-8")
647
+
648
+ # We don't control the metadata. According to PEP-517, "The hook MAY also
649
+ # create other files inside this directory, and a build frontend MUST
650
+ # preserve".
651
+ (distinfo / "FOO").write_text("bar", encoding="utf-8")
652
+
653
+ bdist_wheel_cmd(bdist_dir=str(tmp_path), dist_info_dir=str(distinfo)).run()
654
+ expected = {
655
+ "dummy_dist-1.0.dist-info/FOO",
656
+ "dummy_dist-1.0.dist-info/RECORD",
657
+ }
658
+ with ZipFile("dist/dummy_dist-1.0-py3-none-any.whl") as wf:
659
+ files_found = set(wf.namelist())
660
+ # Check that all expected files are there.
661
+ assert expected - files_found == set()
662
+ # Make sure there is no accidental egg-info bleeding into the wheel.
663
+ assert not [path for path in files_found if 'egg-info' in str(path)]
664
+
665
+
666
+ def test_allow_grace_period_parent_directory_license(monkeypatch, tmp_path):
667
+ # Motivation: https://github.com/pypa/setuptools/issues/4892
668
+ # TODO: Remove this test after deprecation period is over
669
+ files = {
670
+ "LICENSE.txt": "parent license", # <---- the license files are outside
671
+ "NOTICE.txt": "parent notice",
672
+ "python": {
673
+ "pyproject.toml": cleandoc(
674
+ """
675
+ [project]
676
+ name = "test-proj"
677
+ dynamic = ["version"] # <---- testing dynamic will not break
678
+ [tool.setuptools.dynamic]
679
+ version.file = "VERSION"
680
+ """
681
+ ),
682
+ "setup.cfg": cleandoc(
683
+ """
684
+ [metadata]
685
+ license_files =
686
+ ../LICENSE.txt
687
+ ../NOTICE.txt
688
+ """
689
+ ),
690
+ "VERSION": "42",
691
+ },
692
+ }
693
+ jaraco.path.build(files, prefix=str(tmp_path))
694
+ monkeypatch.chdir(tmp_path / "python")
695
+ msg = "Pattern '../.*.txt' cannot contain '..'"
696
+ with pytest.warns(SetuptoolsDeprecationWarning, match=msg):
697
+ bdist_wheel_cmd().run()
698
+ with ZipFile("dist/test_proj-42-py3-none-any.whl") as wf:
699
+ files_found = set(wf.namelist())
700
+ expected_files = {
701
+ "test_proj-42.dist-info/licenses/LICENSE.txt",
702
+ "test_proj-42.dist-info/licenses/NOTICE.txt",
703
+ }
704
+ assert expected_files <= files_found
705
+
706
+ metadata = wf.read("test_proj-42.dist-info/METADATA").decode("utf8")
707
+ assert "License-File: LICENSE.txt" in metadata
708
+ assert "License-File: NOTICE.txt" in metadata