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,959 @@
1
+ import contextlib
2
+ import importlib
3
+ import os
4
+ import re
5
+ import shutil
6
+ import signal
7
+ import sys
8
+ import tarfile
9
+ import warnings
10
+ from concurrent import futures
11
+ from pathlib import Path
12
+ from typing import Any, Callable
13
+ from zipfile import ZipFile
14
+
15
+ import pytest
16
+ from jaraco import path
17
+ from packaging.requirements import Requirement
18
+
19
+ from setuptools.warnings import SetuptoolsDeprecationWarning
20
+
21
+ from .textwrap import DALS
22
+
23
+ SETUP_SCRIPT_STUB = "__import__('setuptools').setup()"
24
+
25
+
26
+ TIMEOUT = int(os.getenv("TIMEOUT_BACKEND_TEST", "180")) # in seconds
27
+ IS_PYPY = '__pypy__' in sys.builtin_module_names
28
+
29
+
30
+ pytestmark = pytest.mark.skipif(
31
+ sys.platform == "win32" and IS_PYPY,
32
+ reason="The combination of PyPy + Windows + pytest-xdist + ProcessPoolExecutor "
33
+ "is flaky and problematic",
34
+ )
35
+
36
+
37
+ class BuildBackendBase:
38
+ def __init__(self, cwd='.', env=None, backend_name='setuptools.build_meta'):
39
+ self.cwd = cwd
40
+ self.env = env or {}
41
+ self.backend_name = backend_name
42
+
43
+
44
+ class BuildBackend(BuildBackendBase):
45
+ """PEP 517 Build Backend"""
46
+
47
+ def __init__(self, *args, **kwargs):
48
+ super().__init__(*args, **kwargs)
49
+ self.pool = futures.ProcessPoolExecutor(max_workers=1)
50
+
51
+ def __getattr__(self, name: str) -> Callable[..., Any]:
52
+ """Handles arbitrary function invocations on the build backend."""
53
+
54
+ def method(*args, **kw):
55
+ root = os.path.abspath(self.cwd)
56
+ caller = BuildBackendCaller(root, self.env, self.backend_name)
57
+ pid = None
58
+ try:
59
+ pid = self.pool.submit(os.getpid).result(TIMEOUT)
60
+ return self.pool.submit(caller, name, *args, **kw).result(TIMEOUT)
61
+ except futures.TimeoutError:
62
+ self.pool.shutdown(wait=False) # doesn't stop already running processes
63
+ self._kill(pid)
64
+ pytest.xfail(f"Backend did not respond before timeout ({TIMEOUT} s)")
65
+ except (futures.process.BrokenProcessPool, MemoryError, OSError):
66
+ if IS_PYPY:
67
+ pytest.xfail("PyPy frequently fails tests with ProcessPoolExector")
68
+ raise
69
+
70
+ return method
71
+
72
+ def _kill(self, pid):
73
+ if pid is None:
74
+ return
75
+ with contextlib.suppress(ProcessLookupError, OSError):
76
+ os.kill(pid, signal.SIGTERM if os.name == "nt" else signal.SIGKILL)
77
+
78
+
79
+ class BuildBackendCaller(BuildBackendBase):
80
+ def __init__(self, *args, **kwargs):
81
+ super().__init__(*args, **kwargs)
82
+
83
+ (self.backend_name, _, self.backend_obj) = self.backend_name.partition(':')
84
+
85
+ def __call__(self, name, *args, **kw):
86
+ """Handles arbitrary function invocations on the build backend."""
87
+ os.chdir(self.cwd)
88
+ os.environ.update(self.env)
89
+ mod = importlib.import_module(self.backend_name)
90
+
91
+ if self.backend_obj:
92
+ backend = getattr(mod, self.backend_obj)
93
+ else:
94
+ backend = mod
95
+
96
+ return getattr(backend, name)(*args, **kw)
97
+
98
+
99
+ defns = [
100
+ { # simple setup.py script
101
+ 'setup.py': DALS(
102
+ """
103
+ __import__('setuptools').setup(
104
+ name='foo',
105
+ version='0.0.0',
106
+ py_modules=['hello'],
107
+ setup_requires=['six'],
108
+ )
109
+ """
110
+ ),
111
+ 'hello.py': DALS(
112
+ """
113
+ def run():
114
+ print('hello')
115
+ """
116
+ ),
117
+ },
118
+ { # setup.py that relies on __name__
119
+ 'setup.py': DALS(
120
+ """
121
+ assert __name__ == '__main__'
122
+ __import__('setuptools').setup(
123
+ name='foo',
124
+ version='0.0.0',
125
+ py_modules=['hello'],
126
+ setup_requires=['six'],
127
+ )
128
+ """
129
+ ),
130
+ 'hello.py': DALS(
131
+ """
132
+ def run():
133
+ print('hello')
134
+ """
135
+ ),
136
+ },
137
+ { # setup.py script that runs arbitrary code
138
+ 'setup.py': DALS(
139
+ """
140
+ variable = True
141
+ def function():
142
+ return variable
143
+ assert variable
144
+ __import__('setuptools').setup(
145
+ name='foo',
146
+ version='0.0.0',
147
+ py_modules=['hello'],
148
+ setup_requires=['six'],
149
+ )
150
+ """
151
+ ),
152
+ 'hello.py': DALS(
153
+ """
154
+ def run():
155
+ print('hello')
156
+ """
157
+ ),
158
+ },
159
+ { # setup.py script that constructs temp files to be included in the distribution
160
+ 'setup.py': DALS(
161
+ """
162
+ # Some packages construct files on the fly, include them in the package,
163
+ # and immediately remove them after `setup()` (e.g. pybind11==2.9.1).
164
+ # Therefore, we cannot use `distutils.core.run_setup(..., stop_after=...)`
165
+ # to obtain a distribution object first, and then run the distutils
166
+ # commands later, because these files will be removed in the meantime.
167
+
168
+ with open('world.py', 'w', encoding="utf-8") as f:
169
+ f.write('x = 42')
170
+
171
+ try:
172
+ __import__('setuptools').setup(
173
+ name='foo',
174
+ version='0.0.0',
175
+ py_modules=['world'],
176
+ setup_requires=['six'],
177
+ )
178
+ finally:
179
+ # Some packages will clean temporary files
180
+ __import__('os').unlink('world.py')
181
+ """
182
+ ),
183
+ },
184
+ { # setup.cfg only
185
+ 'setup.cfg': DALS(
186
+ """
187
+ [metadata]
188
+ name = foo
189
+ version = 0.0.0
190
+
191
+ [options]
192
+ py_modules=hello
193
+ setup_requires=six
194
+ """
195
+ ),
196
+ 'hello.py': DALS(
197
+ """
198
+ def run():
199
+ print('hello')
200
+ """
201
+ ),
202
+ },
203
+ { # setup.cfg and setup.py
204
+ 'setup.cfg': DALS(
205
+ """
206
+ [metadata]
207
+ name = foo
208
+ version = 0.0.0
209
+
210
+ [options]
211
+ py_modules=hello
212
+ setup_requires=six
213
+ """
214
+ ),
215
+ 'setup.py': "__import__('setuptools').setup()",
216
+ 'hello.py': DALS(
217
+ """
218
+ def run():
219
+ print('hello')
220
+ """
221
+ ),
222
+ },
223
+ ]
224
+
225
+
226
+ class TestBuildMetaBackend:
227
+ backend_name = 'setuptools.build_meta'
228
+
229
+ def get_build_backend(self):
230
+ return BuildBackend(backend_name=self.backend_name)
231
+
232
+ @pytest.fixture(params=defns)
233
+ def build_backend(self, tmpdir, request):
234
+ path.build(request.param, prefix=str(tmpdir))
235
+ with tmpdir.as_cwd():
236
+ yield self.get_build_backend()
237
+
238
+ def test_get_requires_for_build_wheel(self, build_backend):
239
+ actual = build_backend.get_requires_for_build_wheel()
240
+ expected = ['six']
241
+ assert sorted(actual) == sorted(expected)
242
+
243
+ def test_get_requires_for_build_sdist(self, build_backend):
244
+ actual = build_backend.get_requires_for_build_sdist()
245
+ expected = ['six']
246
+ assert sorted(actual) == sorted(expected)
247
+
248
+ def test_build_wheel(self, build_backend):
249
+ dist_dir = os.path.abspath('pip-wheel')
250
+ os.makedirs(dist_dir)
251
+ wheel_name = build_backend.build_wheel(dist_dir)
252
+
253
+ wheel_file = os.path.join(dist_dir, wheel_name)
254
+ assert os.path.isfile(wheel_file)
255
+
256
+ # Temporary files should be removed
257
+ assert not os.path.isfile('world.py')
258
+
259
+ with ZipFile(wheel_file) as zipfile:
260
+ wheel_contents = set(zipfile.namelist())
261
+
262
+ # Each one of the examples have a single module
263
+ # that should be included in the distribution
264
+ python_scripts = (f for f in wheel_contents if f.endswith('.py'))
265
+ modules = [f for f in python_scripts if not f.endswith('setup.py')]
266
+ assert len(modules) == 1
267
+
268
+ @pytest.mark.parametrize('build_type', ('wheel', 'sdist'))
269
+ def test_build_with_existing_file_present(self, build_type, tmpdir_cwd):
270
+ # Building a sdist/wheel should still succeed if there's
271
+ # already a sdist/wheel in the destination directory.
272
+ files = {
273
+ 'setup.py': "from setuptools import setup\nsetup()",
274
+ 'VERSION': "0.0.1",
275
+ 'setup.cfg': DALS(
276
+ """
277
+ [metadata]
278
+ name = foo
279
+ version = file: VERSION
280
+ """
281
+ ),
282
+ 'pyproject.toml': DALS(
283
+ """
284
+ [build-system]
285
+ requires = ["setuptools", "wheel"]
286
+ build-backend = "setuptools.build_meta"
287
+ """
288
+ ),
289
+ }
290
+
291
+ path.build(files)
292
+
293
+ dist_dir = os.path.abspath('preexisting-' + build_type)
294
+
295
+ build_backend = self.get_build_backend()
296
+ build_method = getattr(build_backend, 'build_' + build_type)
297
+
298
+ # Build a first sdist/wheel.
299
+ # Note: this also check the destination directory is
300
+ # successfully created if it does not exist already.
301
+ first_result = build_method(dist_dir)
302
+
303
+ # Change version.
304
+ with open("VERSION", "wt", encoding="utf-8") as version_file:
305
+ version_file.write("0.0.2")
306
+
307
+ # Build a *second* sdist/wheel.
308
+ second_result = build_method(dist_dir)
309
+
310
+ assert os.path.isfile(os.path.join(dist_dir, first_result))
311
+ assert first_result != second_result
312
+
313
+ # And if rebuilding the exact same sdist/wheel?
314
+ open(os.path.join(dist_dir, second_result), 'wb').close()
315
+ third_result = build_method(dist_dir)
316
+ assert third_result == second_result
317
+ assert os.path.getsize(os.path.join(dist_dir, third_result)) > 0
318
+
319
+ @pytest.mark.parametrize("setup_script", [None, SETUP_SCRIPT_STUB])
320
+ def test_build_with_pyproject_config(self, tmpdir, setup_script):
321
+ files = {
322
+ 'pyproject.toml': DALS(
323
+ """
324
+ [build-system]
325
+ requires = ["setuptools", "wheel"]
326
+ build-backend = "setuptools.build_meta"
327
+
328
+ [project]
329
+ name = "foo"
330
+ license = {text = "MIT"}
331
+ description = "This is a Python package"
332
+ dynamic = ["version", "readme"]
333
+ classifiers = [
334
+ "Development Status :: 5 - Production/Stable",
335
+ "Intended Audience :: Developers"
336
+ ]
337
+ urls = {Homepage = "http://github.com"}
338
+ dependencies = [
339
+ "appdirs",
340
+ ]
341
+
342
+ [project.optional-dependencies]
343
+ all = [
344
+ "tomli>=1",
345
+ "pyscaffold>=4,<5",
346
+ 'importlib; python_version == "2.6"',
347
+ ]
348
+
349
+ [project.scripts]
350
+ foo = "foo.cli:main"
351
+
352
+ [tool.setuptools]
353
+ zip-safe = false
354
+ package-dir = {"" = "src"}
355
+ packages = {find = {where = ["src"]}}
356
+ license-files = ["LICENSE*"]
357
+
358
+ [tool.setuptools.dynamic]
359
+ version = {attr = "foo.__version__"}
360
+ readme = {file = "README.rst"}
361
+
362
+ [tool.distutils.sdist]
363
+ formats = "gztar"
364
+ """
365
+ ),
366
+ "MANIFEST.in": DALS(
367
+ """
368
+ global-include *.py *.txt
369
+ global-exclude *.py[cod]
370
+ """
371
+ ),
372
+ "README.rst": "This is a ``README``",
373
+ "LICENSE.txt": "---- placeholder MIT license ----",
374
+ "src": {
375
+ "foo": {
376
+ "__init__.py": "__version__ = '0.1'",
377
+ "__init__.pyi": "__version__: str",
378
+ "cli.py": "def main(): print('hello world')",
379
+ "data.txt": "def main(): print('hello world')",
380
+ "py.typed": "",
381
+ }
382
+ },
383
+ }
384
+ if setup_script:
385
+ files["setup.py"] = setup_script
386
+
387
+ build_backend = self.get_build_backend()
388
+ with tmpdir.as_cwd():
389
+ path.build(files)
390
+ msgs = [
391
+ "'tool.setuptools.license-files' is deprecated in favor of 'project.license-files'",
392
+ "`project.license` as a TOML table is deprecated",
393
+ ]
394
+ with warnings.catch_warnings():
395
+ for msg in msgs:
396
+ warnings.filterwarnings("ignore", msg, SetuptoolsDeprecationWarning)
397
+ sdist_path = build_backend.build_sdist("temp")
398
+ wheel_file = build_backend.build_wheel("temp")
399
+
400
+ with tarfile.open(os.path.join(tmpdir, "temp", sdist_path)) as tar:
401
+ sdist_contents = set(tar.getnames())
402
+
403
+ with ZipFile(os.path.join(tmpdir, "temp", wheel_file)) as zipfile:
404
+ wheel_contents = set(zipfile.namelist())
405
+ metadata = str(zipfile.read("foo-0.1.dist-info/METADATA"), "utf-8")
406
+ license = str(
407
+ zipfile.read("foo-0.1.dist-info/licenses/LICENSE.txt"), "utf-8"
408
+ )
409
+ epoints = str(zipfile.read("foo-0.1.dist-info/entry_points.txt"), "utf-8")
410
+
411
+ assert sdist_contents - {"foo-0.1/setup.py"} == {
412
+ 'foo-0.1',
413
+ 'foo-0.1/LICENSE.txt',
414
+ 'foo-0.1/MANIFEST.in',
415
+ 'foo-0.1/PKG-INFO',
416
+ 'foo-0.1/README.rst',
417
+ 'foo-0.1/pyproject.toml',
418
+ 'foo-0.1/setup.cfg',
419
+ 'foo-0.1/src',
420
+ 'foo-0.1/src/foo',
421
+ 'foo-0.1/src/foo/__init__.py',
422
+ 'foo-0.1/src/foo/__init__.pyi',
423
+ 'foo-0.1/src/foo/cli.py',
424
+ 'foo-0.1/src/foo/data.txt',
425
+ 'foo-0.1/src/foo/py.typed',
426
+ 'foo-0.1/src/foo.egg-info',
427
+ 'foo-0.1/src/foo.egg-info/PKG-INFO',
428
+ 'foo-0.1/src/foo.egg-info/SOURCES.txt',
429
+ 'foo-0.1/src/foo.egg-info/dependency_links.txt',
430
+ 'foo-0.1/src/foo.egg-info/entry_points.txt',
431
+ 'foo-0.1/src/foo.egg-info/requires.txt',
432
+ 'foo-0.1/src/foo.egg-info/top_level.txt',
433
+ 'foo-0.1/src/foo.egg-info/not-zip-safe',
434
+ }
435
+ assert wheel_contents == {
436
+ "foo/__init__.py",
437
+ "foo/__init__.pyi", # include type information by default
438
+ "foo/cli.py",
439
+ "foo/data.txt", # include_package_data defaults to True
440
+ "foo/py.typed", # include type information by default
441
+ "foo-0.1.dist-info/licenses/LICENSE.txt",
442
+ "foo-0.1.dist-info/METADATA",
443
+ "foo-0.1.dist-info/WHEEL",
444
+ "foo-0.1.dist-info/entry_points.txt",
445
+ "foo-0.1.dist-info/top_level.txt",
446
+ "foo-0.1.dist-info/RECORD",
447
+ }
448
+ assert license == "---- placeholder MIT license ----"
449
+
450
+ for line in (
451
+ "Summary: This is a Python package",
452
+ "License: MIT",
453
+ "License-File: LICENSE.txt",
454
+ "Classifier: Intended Audience :: Developers",
455
+ "Requires-Dist: appdirs",
456
+ "Requires-Dist: " + str(Requirement('tomli>=1 ; extra == "all"')),
457
+ "Requires-Dist: "
458
+ + str(Requirement('importlib; python_version=="2.6" and extra =="all"')),
459
+ ):
460
+ assert line in metadata, (line, metadata)
461
+
462
+ assert metadata.strip().endswith("This is a ``README``")
463
+ assert epoints.strip() == "[console_scripts]\nfoo = foo.cli:main"
464
+
465
+ def test_static_metadata_in_pyproject_config(self, tmpdir):
466
+ # Make sure static metadata in pyproject.toml is not overwritten by setup.py
467
+ # as required by PEP 621
468
+ files = {
469
+ 'pyproject.toml': DALS(
470
+ """
471
+ [build-system]
472
+ requires = ["setuptools", "wheel"]
473
+ build-backend = "setuptools.build_meta"
474
+
475
+ [project]
476
+ name = "foo"
477
+ description = "This is a Python package"
478
+ version = "42"
479
+ dependencies = ["six"]
480
+ """
481
+ ),
482
+ 'hello.py': DALS(
483
+ """
484
+ def run():
485
+ print('hello')
486
+ """
487
+ ),
488
+ 'setup.py': DALS(
489
+ """
490
+ __import__('setuptools').setup(
491
+ name='bar',
492
+ version='13',
493
+ )
494
+ """
495
+ ),
496
+ }
497
+ build_backend = self.get_build_backend()
498
+ with tmpdir.as_cwd():
499
+ path.build(files)
500
+ sdist_path = build_backend.build_sdist("temp")
501
+ wheel_file = build_backend.build_wheel("temp")
502
+
503
+ assert (tmpdir / "temp/foo-42.tar.gz").exists()
504
+ assert (tmpdir / "temp/foo-42-py3-none-any.whl").exists()
505
+ assert not (tmpdir / "temp/bar-13.tar.gz").exists()
506
+ assert not (tmpdir / "temp/bar-42.tar.gz").exists()
507
+ assert not (tmpdir / "temp/foo-13.tar.gz").exists()
508
+ assert not (tmpdir / "temp/bar-13-py3-none-any.whl").exists()
509
+ assert not (tmpdir / "temp/bar-42-py3-none-any.whl").exists()
510
+ assert not (tmpdir / "temp/foo-13-py3-none-any.whl").exists()
511
+
512
+ with tarfile.open(os.path.join(tmpdir, "temp", sdist_path)) as tar:
513
+ pkg_info = str(tar.extractfile('foo-42/PKG-INFO').read(), "utf-8")
514
+ members = tar.getnames()
515
+ assert "bar-13/PKG-INFO" not in members
516
+
517
+ with ZipFile(os.path.join(tmpdir, "temp", wheel_file)) as zipfile:
518
+ metadata = str(zipfile.read("foo-42.dist-info/METADATA"), "utf-8")
519
+ members = zipfile.namelist()
520
+ assert "bar-13.dist-info/METADATA" not in members
521
+
522
+ for file in pkg_info, metadata:
523
+ for line in ("Name: foo", "Version: 42"):
524
+ assert line in file
525
+ for line in ("Name: bar", "Version: 13"):
526
+ assert line not in file
527
+
528
+ def test_build_sdist(self, build_backend):
529
+ dist_dir = os.path.abspath('pip-sdist')
530
+ os.makedirs(dist_dir)
531
+ sdist_name = build_backend.build_sdist(dist_dir)
532
+
533
+ assert os.path.isfile(os.path.join(dist_dir, sdist_name))
534
+
535
+ def test_prepare_metadata_for_build_wheel(self, build_backend):
536
+ dist_dir = os.path.abspath('pip-dist-info')
537
+ os.makedirs(dist_dir)
538
+
539
+ dist_info = build_backend.prepare_metadata_for_build_wheel(dist_dir)
540
+
541
+ assert os.path.isfile(os.path.join(dist_dir, dist_info, 'METADATA'))
542
+
543
+ def test_prepare_metadata_inplace(self, build_backend):
544
+ """
545
+ Some users might pass metadata_directory pre-populated with `.tox` or `.venv`.
546
+ See issue #3523.
547
+ """
548
+ for pre_existing in [
549
+ ".tox/python/lib/python3.10/site-packages/attrs-22.1.0.dist-info",
550
+ ".tox/python/lib/python3.10/site-packages/autocommand-2.2.1.dist-info",
551
+ ".nox/python/lib/python3.10/site-packages/build-0.8.0.dist-info",
552
+ ".venv/python3.10/site-packages/click-8.1.3.dist-info",
553
+ "venv/python3.10/site-packages/distlib-0.3.5.dist-info",
554
+ "env/python3.10/site-packages/docutils-0.19.dist-info",
555
+ ]:
556
+ os.makedirs(pre_existing, exist_ok=True)
557
+ dist_info = build_backend.prepare_metadata_for_build_wheel(".")
558
+ assert os.path.isfile(os.path.join(dist_info, 'METADATA'))
559
+
560
+ def test_build_sdist_explicit_dist(self, build_backend):
561
+ # explicitly specifying the dist folder should work
562
+ # the folder sdist_directory and the ``--dist-dir`` can be the same
563
+ dist_dir = os.path.abspath('dist')
564
+ sdist_name = build_backend.build_sdist(dist_dir)
565
+ assert os.path.isfile(os.path.join(dist_dir, sdist_name))
566
+
567
+ def test_build_sdist_version_change(self, build_backend):
568
+ sdist_into_directory = os.path.abspath("out_sdist")
569
+ os.makedirs(sdist_into_directory)
570
+
571
+ sdist_name = build_backend.build_sdist(sdist_into_directory)
572
+ assert os.path.isfile(os.path.join(sdist_into_directory, sdist_name))
573
+
574
+ # if the setup.py changes subsequent call of the build meta
575
+ # should still succeed, given the
576
+ # sdist_directory the frontend specifies is empty
577
+ setup_loc = os.path.abspath("setup.py")
578
+ if not os.path.exists(setup_loc):
579
+ setup_loc = os.path.abspath("setup.cfg")
580
+
581
+ with open(setup_loc, 'rt', encoding="utf-8") as file_handler:
582
+ content = file_handler.read()
583
+ with open(setup_loc, 'wt', encoding="utf-8") as file_handler:
584
+ file_handler.write(content.replace("version='0.0.0'", "version='0.0.1'"))
585
+
586
+ shutil.rmtree(sdist_into_directory)
587
+ os.makedirs(sdist_into_directory)
588
+
589
+ sdist_name = build_backend.build_sdist("out_sdist")
590
+ assert os.path.isfile(os.path.join(os.path.abspath("out_sdist"), sdist_name))
591
+
592
+ def test_build_sdist_pyproject_toml_exists(self, tmpdir_cwd):
593
+ files = {
594
+ 'setup.py': DALS(
595
+ """
596
+ __import__('setuptools').setup(
597
+ name='foo',
598
+ version='0.0.0',
599
+ py_modules=['hello']
600
+ )"""
601
+ ),
602
+ 'hello.py': '',
603
+ 'pyproject.toml': DALS(
604
+ """
605
+ [build-system]
606
+ requires = ["setuptools", "wheel"]
607
+ build-backend = "setuptools.build_meta"
608
+ """
609
+ ),
610
+ }
611
+ path.build(files)
612
+ build_backend = self.get_build_backend()
613
+ targz_path = build_backend.build_sdist("temp")
614
+ with tarfile.open(os.path.join("temp", targz_path)) as tar:
615
+ assert any('pyproject.toml' in name for name in tar.getnames())
616
+
617
+ def test_build_sdist_setup_py_exists(self, tmpdir_cwd):
618
+ # If build_sdist is called from a script other than setup.py,
619
+ # ensure setup.py is included
620
+ path.build(defns[0])
621
+
622
+ build_backend = self.get_build_backend()
623
+ targz_path = build_backend.build_sdist("temp")
624
+ with tarfile.open(os.path.join("temp", targz_path)) as tar:
625
+ assert any('setup.py' in name for name in tar.getnames())
626
+
627
+ def test_build_sdist_setup_py_manifest_excluded(self, tmpdir_cwd):
628
+ # Ensure that MANIFEST.in can exclude setup.py
629
+ files = {
630
+ 'setup.py': DALS(
631
+ """
632
+ __import__('setuptools').setup(
633
+ name='foo',
634
+ version='0.0.0',
635
+ py_modules=['hello']
636
+ )"""
637
+ ),
638
+ 'hello.py': '',
639
+ 'MANIFEST.in': DALS(
640
+ """
641
+ exclude setup.py
642
+ """
643
+ ),
644
+ }
645
+
646
+ path.build(files)
647
+
648
+ build_backend = self.get_build_backend()
649
+ targz_path = build_backend.build_sdist("temp")
650
+ with tarfile.open(os.path.join("temp", targz_path)) as tar:
651
+ assert not any('setup.py' in name for name in tar.getnames())
652
+
653
+ def test_build_sdist_builds_targz_even_if_zip_indicated(self, tmpdir_cwd):
654
+ files = {
655
+ 'setup.py': DALS(
656
+ """
657
+ __import__('setuptools').setup(
658
+ name='foo',
659
+ version='0.0.0',
660
+ py_modules=['hello']
661
+ )"""
662
+ ),
663
+ 'hello.py': '',
664
+ 'setup.cfg': DALS(
665
+ """
666
+ [sdist]
667
+ formats=zip
668
+ """
669
+ ),
670
+ }
671
+
672
+ path.build(files)
673
+
674
+ build_backend = self.get_build_backend()
675
+ build_backend.build_sdist("temp")
676
+
677
+ _relative_path_import_files = {
678
+ 'setup.py': DALS(
679
+ """
680
+ __import__('setuptools').setup(
681
+ name='foo',
682
+ version=__import__('hello').__version__,
683
+ py_modules=['hello']
684
+ )"""
685
+ ),
686
+ 'hello.py': '__version__ = "0.0.0"',
687
+ 'setup.cfg': DALS(
688
+ """
689
+ [sdist]
690
+ formats=zip
691
+ """
692
+ ),
693
+ }
694
+
695
+ def test_build_sdist_relative_path_import(self, tmpdir_cwd):
696
+ path.build(self._relative_path_import_files)
697
+ build_backend = self.get_build_backend()
698
+ with pytest.raises(ImportError, match="^No module named 'hello'$"):
699
+ build_backend.build_sdist("temp")
700
+
701
+ _simple_pyproject_example = {
702
+ "pyproject.toml": DALS(
703
+ """
704
+ [project]
705
+ name = "proj"
706
+ version = "42"
707
+ """
708
+ ),
709
+ "src": {"proj": {"__init__.py": ""}},
710
+ }
711
+
712
+ def _assert_link_tree(self, parent_dir):
713
+ """All files in the directory should be either links or hard links"""
714
+ files = list(Path(parent_dir).glob("**/*"))
715
+ assert files # Should not be empty
716
+ for file in files:
717
+ assert file.is_symlink() or os.stat(file).st_nlink > 0
718
+
719
+ def test_editable_without_config_settings(self, tmpdir_cwd):
720
+ """
721
+ Sanity check to ensure tests with --mode=strict are different from the ones
722
+ without --mode.
723
+
724
+ --mode=strict should create a local directory with a package tree.
725
+ The directory should not get created otherwise.
726
+ """
727
+ path.build(self._simple_pyproject_example)
728
+ build_backend = self.get_build_backend()
729
+ assert not Path("build").exists()
730
+ build_backend.build_editable("temp")
731
+ assert not Path("build").exists()
732
+
733
+ def test_build_wheel_inplace(self, tmpdir_cwd):
734
+ config_settings = {"--build-option": ["build_ext", "--inplace"]}
735
+ path.build(self._simple_pyproject_example)
736
+ build_backend = self.get_build_backend()
737
+ assert not Path("build").exists()
738
+ Path("build").mkdir()
739
+ build_backend.prepare_metadata_for_build_wheel("build", config_settings)
740
+ build_backend.build_wheel("build", config_settings)
741
+ assert Path("build/proj-42-py3-none-any.whl").exists()
742
+
743
+ @pytest.mark.parametrize("config_settings", [{"editable-mode": "strict"}])
744
+ def test_editable_with_config_settings(self, tmpdir_cwd, config_settings):
745
+ path.build({**self._simple_pyproject_example, '_meta': {}})
746
+ assert not Path("build").exists()
747
+ build_backend = self.get_build_backend()
748
+ build_backend.prepare_metadata_for_build_editable("_meta", config_settings)
749
+ build_backend.build_editable("temp", config_settings, "_meta")
750
+ self._assert_link_tree(next(Path("build").glob("__editable__.*")))
751
+
752
+ @pytest.mark.parametrize(
753
+ ("setup_literal", "requirements"),
754
+ [
755
+ ("'foo'", ['foo']),
756
+ ("['foo']", ['foo']),
757
+ (r"'foo\n'", ['foo']),
758
+ (r"'foo\n\n'", ['foo']),
759
+ ("['foo', 'bar']", ['foo', 'bar']),
760
+ (r"'# Has a comment line\nfoo'", ['foo']),
761
+ (r"'foo # Has an inline comment'", ['foo']),
762
+ (r"'foo \\\n >=3.0'", ['foo>=3.0']),
763
+ (r"'foo\nbar'", ['foo', 'bar']),
764
+ (r"'foo\nbar\n'", ['foo', 'bar']),
765
+ (r"['foo\n', 'bar\n']", ['foo', 'bar']),
766
+ ],
767
+ )
768
+ @pytest.mark.parametrize('use_wheel', [True, False])
769
+ def test_setup_requires(self, setup_literal, requirements, use_wheel, tmpdir_cwd):
770
+ files = {
771
+ 'setup.py': DALS(
772
+ """
773
+ from setuptools import setup
774
+
775
+ setup(
776
+ name="qux",
777
+ version="0.0.0",
778
+ py_modules=["hello"],
779
+ setup_requires={setup_literal},
780
+ )
781
+ """
782
+ ).format(setup_literal=setup_literal),
783
+ 'hello.py': DALS(
784
+ """
785
+ def run():
786
+ print('hello')
787
+ """
788
+ ),
789
+ }
790
+
791
+ path.build(files)
792
+
793
+ build_backend = self.get_build_backend()
794
+
795
+ if use_wheel:
796
+ get_requires = build_backend.get_requires_for_build_wheel
797
+ else:
798
+ get_requires = build_backend.get_requires_for_build_sdist
799
+
800
+ # Ensure that the build requirements are properly parsed
801
+ expected = sorted(requirements)
802
+ actual = get_requires()
803
+
804
+ assert expected == sorted(actual)
805
+
806
+ def test_setup_requires_with_auto_discovery(self, tmpdir_cwd):
807
+ # Make sure patches introduced to retrieve setup_requires don't accidentally
808
+ # activate auto-discovery and cause problems due to the incomplete set of
809
+ # attributes passed to MinimalDistribution
810
+ files = {
811
+ 'pyproject.toml': DALS(
812
+ """
813
+ [project]
814
+ name = "proj"
815
+ version = "42"
816
+ """
817
+ ),
818
+ "setup.py": DALS(
819
+ """
820
+ __import__('setuptools').setup(
821
+ setup_requires=["foo"],
822
+ py_modules = ["hello", "world"]
823
+ )
824
+ """
825
+ ),
826
+ 'hello.py': "'hello'",
827
+ 'world.py': "'world'",
828
+ }
829
+ path.build(files)
830
+ build_backend = self.get_build_backend()
831
+ setup_requires = build_backend.get_requires_for_build_wheel()
832
+ assert setup_requires == ["foo"]
833
+
834
+ def test_dont_install_setup_requires(self, tmpdir_cwd):
835
+ files = {
836
+ 'setup.py': DALS(
837
+ """
838
+ from setuptools import setup
839
+
840
+ setup(
841
+ name="qux",
842
+ version="0.0.0",
843
+ py_modules=["hello"],
844
+ setup_requires=["does-not-exist >99"],
845
+ )
846
+ """
847
+ ),
848
+ 'hello.py': DALS(
849
+ """
850
+ def run():
851
+ print('hello')
852
+ """
853
+ ),
854
+ }
855
+
856
+ path.build(files)
857
+
858
+ build_backend = self.get_build_backend()
859
+
860
+ dist_dir = os.path.abspath('pip-dist-info')
861
+ os.makedirs(dist_dir)
862
+
863
+ # does-not-exist can't be satisfied, so if it attempts to install
864
+ # setup_requires, it will fail.
865
+ build_backend.prepare_metadata_for_build_wheel(dist_dir)
866
+
867
+ _sys_argv_0_passthrough = {
868
+ 'setup.py': DALS(
869
+ """
870
+ import os
871
+ import sys
872
+
873
+ __import__('setuptools').setup(
874
+ name='foo',
875
+ version='0.0.0',
876
+ )
877
+
878
+ sys_argv = os.path.abspath(sys.argv[0])
879
+ file_path = os.path.abspath('setup.py')
880
+ assert sys_argv == file_path
881
+ """
882
+ )
883
+ }
884
+
885
+ def test_sys_argv_passthrough(self, tmpdir_cwd):
886
+ path.build(self._sys_argv_0_passthrough)
887
+ build_backend = self.get_build_backend()
888
+ with pytest.raises(AssertionError):
889
+ build_backend.build_sdist("temp")
890
+
891
+ _setup_py_file_abspath = {
892
+ 'setup.py': DALS(
893
+ """
894
+ import os
895
+ assert os.path.isabs(__file__)
896
+ __import__('setuptools').setup(
897
+ name='foo',
898
+ version='0.0.0',
899
+ py_modules=['hello'],
900
+ setup_requires=['six'],
901
+ )
902
+ """
903
+ )
904
+ }
905
+
906
+ def test_setup_py_file_abspath(self, tmpdir_cwd):
907
+ path.build(self._setup_py_file_abspath)
908
+ build_backend = self.get_build_backend()
909
+ build_backend.build_sdist("temp")
910
+
911
+ @pytest.mark.parametrize('build_hook', ('build_sdist', 'build_wheel'))
912
+ def test_build_with_empty_setuppy(self, build_backend, build_hook):
913
+ files = {'setup.py': ''}
914
+ path.build(files)
915
+
916
+ msg = re.escape('No distribution was found.')
917
+ with pytest.raises(ValueError, match=msg):
918
+ getattr(build_backend, build_hook)("temp")
919
+
920
+
921
+ class TestBuildMetaLegacyBackend(TestBuildMetaBackend):
922
+ backend_name = 'setuptools.build_meta:__legacy__'
923
+
924
+ # build_meta_legacy-specific tests
925
+ def test_build_sdist_relative_path_import(self, tmpdir_cwd):
926
+ # This must fail in build_meta, but must pass in build_meta_legacy
927
+ path.build(self._relative_path_import_files)
928
+
929
+ build_backend = self.get_build_backend()
930
+ build_backend.build_sdist("temp")
931
+
932
+ def test_sys_argv_passthrough(self, tmpdir_cwd):
933
+ path.build(self._sys_argv_0_passthrough)
934
+
935
+ build_backend = self.get_build_backend()
936
+ build_backend.build_sdist("temp")
937
+
938
+
939
+ @pytest.mark.filterwarnings("ignore::setuptools.SetuptoolsDeprecationWarning")
940
+ def test_sys_exit_0_in_setuppy(monkeypatch, tmp_path):
941
+ """Setuptools should be resilient to setup.py with ``sys.exit(0)`` (#3973)."""
942
+ monkeypatch.chdir(tmp_path)
943
+ setuppy = """
944
+ import sys, setuptools
945
+ setuptools.setup(name='foo', version='0.0.0')
946
+ sys.exit(0)
947
+ """
948
+ (tmp_path / "setup.py").write_text(DALS(setuppy), encoding="utf-8")
949
+ backend = BuildBackend(backend_name="setuptools.build_meta")
950
+ assert backend.get_requires_for_build_wheel() == []
951
+
952
+
953
+ def test_system_exit_in_setuppy(monkeypatch, tmp_path):
954
+ monkeypatch.chdir(tmp_path)
955
+ setuppy = "import sys; sys.exit('some error')"
956
+ (tmp_path / "setup.py").write_text(setuppy, encoding="utf-8")
957
+ with pytest.raises(SystemExit, match="some error"):
958
+ backend = BuildBackend(backend_name="setuptools.build_meta")
959
+ backend.get_requires_for_build_wheel()