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,984 @@
1
+ """sdist tests"""
2
+
3
+ import contextlib
4
+ import io
5
+ import logging
6
+ import os
7
+ import pathlib
8
+ import sys
9
+ import tarfile
10
+ import tempfile
11
+ import unicodedata
12
+ from inspect import cleandoc
13
+ from pathlib import Path
14
+ from unittest import mock
15
+
16
+ import jaraco.path
17
+ import pytest
18
+
19
+ from setuptools import Command, SetuptoolsDeprecationWarning
20
+ from setuptools._importlib import metadata
21
+ from setuptools.command.egg_info import manifest_maker
22
+ from setuptools.command.sdist import sdist
23
+ from setuptools.dist import Distribution
24
+ from setuptools.extension import Extension
25
+ from setuptools.tests import fail_on_ascii
26
+
27
+ from .text import Filenames
28
+
29
+ import distutils
30
+ from distutils.core import run_setup
31
+
32
+ SETUP_ATTRS = {
33
+ 'name': 'sdist_test',
34
+ 'version': '0.0',
35
+ 'packages': ['sdist_test'],
36
+ 'package_data': {'sdist_test': ['*.txt']},
37
+ 'data_files': [("data", [os.path.join("d", "e.dat")])],
38
+ }
39
+
40
+ SETUP_PY = f"""\
41
+ from setuptools import setup
42
+
43
+ setup(**{SETUP_ATTRS!r})
44
+ """
45
+
46
+ EXTENSION = Extension(
47
+ name="sdist_test.f",
48
+ sources=[os.path.join("sdist_test", "f.c")],
49
+ depends=[os.path.join("sdist_test", "f.h")],
50
+ )
51
+ EXTENSION_SOURCES = EXTENSION.sources + EXTENSION.depends
52
+
53
+
54
+ @contextlib.contextmanager
55
+ def quiet():
56
+ old_stdout, old_stderr = sys.stdout, sys.stderr
57
+ sys.stdout, sys.stderr = io.StringIO(), io.StringIO()
58
+ try:
59
+ yield
60
+ finally:
61
+ sys.stdout, sys.stderr = old_stdout, old_stderr
62
+
63
+
64
+ # Convert to POSIX path
65
+ def posix(path):
66
+ if not isinstance(path, str):
67
+ return path.replace(os.sep.encode('ascii'), b'/')
68
+ else:
69
+ return path.replace(os.sep, '/')
70
+
71
+
72
+ # HFS Plus uses decomposed UTF-8
73
+ def decompose(path):
74
+ if isinstance(path, str):
75
+ return unicodedata.normalize('NFD', path)
76
+ try:
77
+ path = path.decode('utf-8')
78
+ path = unicodedata.normalize('NFD', path)
79
+ path = path.encode('utf-8')
80
+ except UnicodeError:
81
+ pass # Not UTF-8
82
+ return path
83
+
84
+
85
+ def read_all_bytes(filename):
86
+ with open(filename, 'rb') as fp:
87
+ return fp.read()
88
+
89
+
90
+ def latin1_fail():
91
+ try:
92
+ desc, filename = tempfile.mkstemp(suffix=Filenames.latin_1)
93
+ os.close(desc)
94
+ os.remove(filename)
95
+ except Exception:
96
+ return True
97
+
98
+
99
+ fail_on_latin1_encoded_filenames = pytest.mark.xfail(
100
+ latin1_fail(),
101
+ reason="System does not support latin-1 filenames",
102
+ )
103
+
104
+
105
+ skip_under_xdist = pytest.mark.skipif(
106
+ "os.environ.get('PYTEST_XDIST_WORKER')",
107
+ reason="pytest-dev/pytest-xdist#843",
108
+ )
109
+ skip_under_stdlib_distutils = pytest.mark.skipif(
110
+ not distutils.__package__.startswith('setuptools'),
111
+ reason="the test is not supported with stdlib distutils",
112
+ )
113
+
114
+
115
+ def touch(path):
116
+ open(path, 'wb').close()
117
+ return path
118
+
119
+
120
+ def symlink_or_skip_test(src, dst):
121
+ try:
122
+ os.symlink(src, dst)
123
+ except (OSError, NotImplementedError):
124
+ pytest.skip("symlink not supported in OS")
125
+ return None
126
+ return dst
127
+
128
+
129
+ class TestSdistTest:
130
+ @pytest.fixture(autouse=True)
131
+ def source_dir(self, tmpdir):
132
+ tmpdir = tmpdir / "project_root"
133
+ tmpdir.mkdir()
134
+
135
+ (tmpdir / 'setup.py').write_text(SETUP_PY, encoding='utf-8')
136
+
137
+ # Set up the rest of the test package
138
+ test_pkg = tmpdir / 'sdist_test'
139
+ test_pkg.mkdir()
140
+ data_folder = tmpdir / 'd'
141
+ data_folder.mkdir()
142
+ # *.rst was not included in package_data, so c.rst should not be
143
+ # automatically added to the manifest when not under version control
144
+ for fname in ['__init__.py', 'a.txt', 'b.txt', 'c.rst']:
145
+ touch(test_pkg / fname)
146
+ touch(data_folder / 'e.dat')
147
+ # C sources are not included by default, but they will be,
148
+ # if an extension module uses them as sources or depends
149
+ for fname in EXTENSION_SOURCES:
150
+ touch(tmpdir / fname)
151
+
152
+ with tmpdir.as_cwd():
153
+ yield tmpdir
154
+
155
+ def assert_package_data_in_manifest(self, cmd):
156
+ manifest = cmd.filelist.files
157
+ assert os.path.join('sdist_test', 'a.txt') in manifest
158
+ assert os.path.join('sdist_test', 'b.txt') in manifest
159
+ assert os.path.join('sdist_test', 'c.rst') not in manifest
160
+ assert os.path.join('d', 'e.dat') in manifest
161
+
162
+ def setup_with_extension(self):
163
+ setup_attrs = {**SETUP_ATTRS, 'ext_modules': [EXTENSION]}
164
+
165
+ dist = Distribution(setup_attrs)
166
+ dist.script_name = 'setup.py'
167
+ cmd = sdist(dist)
168
+ cmd.ensure_finalized()
169
+
170
+ with quiet():
171
+ cmd.run()
172
+
173
+ return cmd
174
+
175
+ def test_package_data_in_sdist(self):
176
+ """Regression test for pull request #4: ensures that files listed in
177
+ package_data are included in the manifest even if they're not added to
178
+ version control.
179
+ """
180
+
181
+ dist = Distribution(SETUP_ATTRS)
182
+ dist.script_name = 'setup.py'
183
+ cmd = sdist(dist)
184
+ cmd.ensure_finalized()
185
+
186
+ with quiet():
187
+ cmd.run()
188
+
189
+ self.assert_package_data_in_manifest(cmd)
190
+
191
+ def test_package_data_and_include_package_data_in_sdist(self):
192
+ """
193
+ Ensure package_data and include_package_data work
194
+ together.
195
+ """
196
+ setup_attrs = {**SETUP_ATTRS, 'include_package_data': True}
197
+ assert setup_attrs['package_data']
198
+
199
+ dist = Distribution(setup_attrs)
200
+ dist.script_name = 'setup.py'
201
+ cmd = sdist(dist)
202
+ cmd.ensure_finalized()
203
+
204
+ with quiet():
205
+ cmd.run()
206
+
207
+ self.assert_package_data_in_manifest(cmd)
208
+
209
+ def test_extension_sources_in_sdist(self):
210
+ """
211
+ Ensure that the files listed in Extension.sources and Extension.depends
212
+ are automatically included in the manifest.
213
+ """
214
+ cmd = self.setup_with_extension()
215
+ self.assert_package_data_in_manifest(cmd)
216
+ manifest = cmd.filelist.files
217
+ for path in EXTENSION_SOURCES:
218
+ assert path in manifest
219
+
220
+ def test_missing_extension_sources(self):
221
+ """
222
+ Similar to test_extension_sources_in_sdist but the referenced files don't exist.
223
+ Missing files should not be included in distribution (with no error raised).
224
+ """
225
+ for path in EXTENSION_SOURCES:
226
+ os.remove(path)
227
+
228
+ cmd = self.setup_with_extension()
229
+ self.assert_package_data_in_manifest(cmd)
230
+ manifest = cmd.filelist.files
231
+ for path in EXTENSION_SOURCES:
232
+ assert path not in manifest
233
+
234
+ def test_symlinked_extension_sources(self):
235
+ """
236
+ Similar to test_extension_sources_in_sdist but the referenced files are
237
+ instead symbolic links to project-local files. Referenced file paths
238
+ should be included. Symlink targets themselves should NOT be included.
239
+ """
240
+ symlinked = []
241
+ for path in EXTENSION_SOURCES:
242
+ base, ext = os.path.splitext(path)
243
+ target = base + "_target." + ext
244
+
245
+ os.rename(path, target)
246
+ symlink_or_skip_test(os.path.basename(target), path)
247
+ symlinked.append(target)
248
+
249
+ cmd = self.setup_with_extension()
250
+ self.assert_package_data_in_manifest(cmd)
251
+ manifest = cmd.filelist.files
252
+ for path in EXTENSION_SOURCES:
253
+ assert path in manifest
254
+ for path in symlinked:
255
+ assert path not in manifest
256
+
257
+ _INVALID_PATHS = {
258
+ "must be relative": lambda: (
259
+ os.path.abspath(os.path.join("sdist_test", "f.h"))
260
+ ),
261
+ "can't have `..` segments": lambda: (
262
+ os.path.join("sdist_test", "..", "sdist_test", "f.h")
263
+ ),
264
+ "doesn't exist": lambda: (
265
+ os.path.join("sdist_test", "this_file_does_not_exist.h")
266
+ ),
267
+ "must be inside the project root": lambda: (
268
+ symlink_or_skip_test(
269
+ touch(os.path.join("..", "outside_of_project_root.h")),
270
+ "symlink.h",
271
+ )
272
+ ),
273
+ }
274
+
275
+ @skip_under_stdlib_distutils
276
+ @pytest.mark.parametrize("reason", _INVALID_PATHS.keys())
277
+ def test_invalid_extension_depends(self, reason, caplog):
278
+ """
279
+ Due to backwards compatibility reasons, `Extension.depends` should accept
280
+ invalid/weird paths, but then ignore them when building a sdist.
281
+
282
+ This test verifies that the source distribution is still built
283
+ successfully with such paths, but that instead of adding these paths to
284
+ the manifest, we emit an informational message, notifying the user that
285
+ the invalid path won't be automatically included.
286
+ """
287
+ invalid_path = self._INVALID_PATHS[reason]()
288
+ extension = Extension(
289
+ name="sdist_test.f",
290
+ sources=[],
291
+ depends=[invalid_path],
292
+ )
293
+ setup_attrs = {**SETUP_ATTRS, 'ext_modules': [extension]}
294
+
295
+ dist = Distribution(setup_attrs)
296
+ dist.script_name = 'setup.py'
297
+ cmd = sdist(dist)
298
+ cmd.ensure_finalized()
299
+
300
+ with quiet(), caplog.at_level(logging.INFO):
301
+ cmd.run()
302
+
303
+ self.assert_package_data_in_manifest(cmd)
304
+ manifest = cmd.filelist.files
305
+ assert invalid_path not in manifest
306
+
307
+ expected_message = [
308
+ message
309
+ for (logger, level, message) in caplog.record_tuples
310
+ if (
311
+ logger == "root" #
312
+ and level == logging.INFO #
313
+ and invalid_path in message #
314
+ )
315
+ ]
316
+ assert len(expected_message) == 1
317
+ (expected_message,) = expected_message
318
+ assert reason in expected_message
319
+
320
+ def test_custom_build_py(self):
321
+ """
322
+ Ensure projects defining custom build_py don't break
323
+ when creating sdists (issue #2849)
324
+ """
325
+ from distutils.command.build_py import build_py as OrigBuildPy
326
+
327
+ using_custom_command_guard = mock.Mock()
328
+
329
+ class CustomBuildPy(OrigBuildPy):
330
+ """
331
+ Some projects have custom commands inheriting from `distutils`
332
+ """
333
+
334
+ def get_data_files(self):
335
+ using_custom_command_guard()
336
+ return super().get_data_files()
337
+
338
+ setup_attrs = {**SETUP_ATTRS, 'include_package_data': True}
339
+ assert setup_attrs['package_data']
340
+
341
+ dist = Distribution(setup_attrs)
342
+ dist.script_name = 'setup.py'
343
+ cmd = sdist(dist)
344
+ cmd.ensure_finalized()
345
+
346
+ # Make sure we use the custom command
347
+ cmd.cmdclass = {'build_py': CustomBuildPy}
348
+ cmd.distribution.cmdclass = {'build_py': CustomBuildPy}
349
+ assert cmd.distribution.get_command_class('build_py') == CustomBuildPy
350
+
351
+ msg = "setuptools instead of distutils"
352
+ with quiet(), pytest.warns(SetuptoolsDeprecationWarning, match=msg):
353
+ cmd.run()
354
+
355
+ using_custom_command_guard.assert_called()
356
+ self.assert_package_data_in_manifest(cmd)
357
+
358
+ def test_setup_py_exists(self):
359
+ dist = Distribution(SETUP_ATTRS)
360
+ dist.script_name = 'foo.py'
361
+ cmd = sdist(dist)
362
+ cmd.ensure_finalized()
363
+
364
+ with quiet():
365
+ cmd.run()
366
+
367
+ manifest = cmd.filelist.files
368
+ assert 'setup.py' in manifest
369
+
370
+ def test_setup_py_missing(self):
371
+ dist = Distribution(SETUP_ATTRS)
372
+ dist.script_name = 'foo.py'
373
+ cmd = sdist(dist)
374
+ cmd.ensure_finalized()
375
+
376
+ if os.path.exists("setup.py"):
377
+ os.remove("setup.py")
378
+ with quiet():
379
+ cmd.run()
380
+
381
+ manifest = cmd.filelist.files
382
+ assert 'setup.py' not in manifest
383
+
384
+ def test_setup_py_excluded(self):
385
+ with open("MANIFEST.in", "w", encoding="utf-8") as manifest_file:
386
+ manifest_file.write("exclude setup.py")
387
+
388
+ dist = Distribution(SETUP_ATTRS)
389
+ dist.script_name = 'foo.py'
390
+ cmd = sdist(dist)
391
+ cmd.ensure_finalized()
392
+
393
+ with quiet():
394
+ cmd.run()
395
+
396
+ manifest = cmd.filelist.files
397
+ assert 'setup.py' not in manifest
398
+
399
+ def test_defaults_case_sensitivity(self, source_dir):
400
+ """
401
+ Make sure default files (README.*, etc.) are added in a case-sensitive
402
+ way to avoid problems with packages built on Windows.
403
+ """
404
+
405
+ touch(source_dir / 'readme.rst')
406
+ touch(source_dir / 'SETUP.cfg')
407
+
408
+ dist = Distribution(SETUP_ATTRS)
409
+ # the extension deliberately capitalized for this test
410
+ # to make sure the actual filename (not capitalized) gets added
411
+ # to the manifest
412
+ dist.script_name = 'setup.PY'
413
+ cmd = sdist(dist)
414
+ cmd.ensure_finalized()
415
+
416
+ with quiet():
417
+ cmd.run()
418
+
419
+ # lowercase all names so we can test in a
420
+ # case-insensitive way to make sure the files
421
+ # are not included.
422
+ manifest = map(lambda x: x.lower(), cmd.filelist.files)
423
+ assert 'readme.rst' not in manifest, manifest
424
+ assert 'setup.py' not in manifest, manifest
425
+ assert 'setup.cfg' not in manifest, manifest
426
+
427
+ def test_exclude_dev_only_cache_folders(self, source_dir):
428
+ included = {
429
+ # Emulate problem in https://github.com/pypa/setuptools/issues/4601
430
+ "MANIFEST.in": (
431
+ "global-include LICEN[CS]E* COPYING* NOTICE* AUTHORS*\n"
432
+ "global-include *.txt\n"
433
+ ),
434
+ # For the sake of being conservative and limiting unforeseen side-effects
435
+ # we just exclude dev-only cache folders at the root of the repository:
436
+ "test/.venv/lib/python3.9/site-packages/bar-2.dist-info/AUTHORS.rst": "",
437
+ "src/.nox/py/lib/python3.12/site-packages/bar-2.dist-info/COPYING.txt": "",
438
+ "doc/.tox/default/lib/python3.11/site-packages/foo-4.dist-info/LICENSE": "",
439
+ # Let's test against false positives with similarly named files:
440
+ ".venv-requirements.txt": "",
441
+ ".tox-coveragerc.txt": "",
442
+ ".noxy/coveragerc.txt": "",
443
+ }
444
+
445
+ excluded = {
446
+ # .tox/.nox/.venv are well-know folders present at the root of Python repos
447
+ # and therefore should be excluded
448
+ ".tox/release/lib/python3.11/site-packages/foo-4.dist-info/LICENSE": "",
449
+ ".nox/py/lib/python3.12/site-packages/bar-2.dist-info/COPYING.txt": "",
450
+ ".venv/lib/python3.9/site-packages/bar-2.dist-info/AUTHORS.rst": "",
451
+ }
452
+
453
+ for file, content in {**excluded, **included}.items():
454
+ Path(source_dir, file).parent.mkdir(parents=True, exist_ok=True)
455
+ Path(source_dir, file).write_text(content, encoding="utf-8")
456
+
457
+ cmd = self.setup_with_extension()
458
+ self.assert_package_data_in_manifest(cmd)
459
+ manifest = {f.replace(os.sep, '/') for f in cmd.filelist.files}
460
+ for path in excluded:
461
+ assert os.path.exists(path)
462
+ assert path not in manifest, (path, manifest)
463
+ for path in included:
464
+ assert os.path.exists(path)
465
+ assert path in manifest, (path, manifest)
466
+
467
+ @fail_on_ascii
468
+ def test_manifest_is_written_with_utf8_encoding(self):
469
+ # Test for #303.
470
+ dist = Distribution(SETUP_ATTRS)
471
+ dist.script_name = 'setup.py'
472
+ mm = manifest_maker(dist)
473
+ mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt')
474
+ os.mkdir('sdist_test.egg-info')
475
+
476
+ # UTF-8 filename
477
+ filename = os.path.join('sdist_test', 'smörbröd.py')
478
+
479
+ # Must create the file or it will get stripped.
480
+ touch(filename)
481
+
482
+ # Add UTF-8 filename and write manifest
483
+ with quiet():
484
+ mm.run()
485
+ mm.filelist.append(filename)
486
+ mm.write_manifest()
487
+
488
+ contents = read_all_bytes(mm.manifest)
489
+
490
+ # The manifest should be UTF-8 encoded
491
+ u_contents = contents.decode('UTF-8')
492
+
493
+ # The manifest should contain the UTF-8 filename
494
+ assert posix(filename) in u_contents
495
+
496
+ @fail_on_ascii
497
+ def test_write_manifest_allows_utf8_filenames(self):
498
+ # Test for #303.
499
+ dist = Distribution(SETUP_ATTRS)
500
+ dist.script_name = 'setup.py'
501
+ mm = manifest_maker(dist)
502
+ mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt')
503
+ os.mkdir('sdist_test.egg-info')
504
+
505
+ filename = os.path.join(b'sdist_test', Filenames.utf_8)
506
+
507
+ # Must touch the file or risk removal
508
+ touch(filename)
509
+
510
+ # Add filename and write manifest
511
+ with quiet():
512
+ mm.run()
513
+ u_filename = filename.decode('utf-8')
514
+ mm.filelist.files.append(u_filename)
515
+ # Re-write manifest
516
+ mm.write_manifest()
517
+
518
+ contents = read_all_bytes(mm.manifest)
519
+
520
+ # The manifest should be UTF-8 encoded
521
+ contents.decode('UTF-8')
522
+
523
+ # The manifest should contain the UTF-8 filename
524
+ assert posix(filename) in contents
525
+
526
+ # The filelist should have been updated as well
527
+ assert u_filename in mm.filelist.files
528
+
529
+ @skip_under_xdist
530
+ def test_write_manifest_skips_non_utf8_filenames(self):
531
+ """
532
+ Files that cannot be encoded to UTF-8 (specifically, those that
533
+ weren't originally successfully decoded and have surrogate
534
+ escapes) should be omitted from the manifest.
535
+ See https://bitbucket.org/tarek/distribute/issue/303 for history.
536
+ """
537
+ dist = Distribution(SETUP_ATTRS)
538
+ dist.script_name = 'setup.py'
539
+ mm = manifest_maker(dist)
540
+ mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt')
541
+ os.mkdir('sdist_test.egg-info')
542
+
543
+ # Latin-1 filename
544
+ filename = os.path.join(b'sdist_test', Filenames.latin_1)
545
+
546
+ # Add filename with surrogates and write manifest
547
+ with quiet():
548
+ mm.run()
549
+ u_filename = filename.decode('utf-8', 'surrogateescape')
550
+ mm.filelist.append(u_filename)
551
+ # Re-write manifest
552
+ mm.write_manifest()
553
+
554
+ contents = read_all_bytes(mm.manifest)
555
+
556
+ # The manifest should be UTF-8 encoded
557
+ contents.decode('UTF-8')
558
+
559
+ # The Latin-1 filename should have been skipped
560
+ assert posix(filename) not in contents
561
+
562
+ # The filelist should have been updated as well
563
+ assert u_filename not in mm.filelist.files
564
+
565
+ @fail_on_ascii
566
+ def test_manifest_is_read_with_utf8_encoding(self):
567
+ # Test for #303.
568
+ dist = Distribution(SETUP_ATTRS)
569
+ dist.script_name = 'setup.py'
570
+ cmd = sdist(dist)
571
+ cmd.ensure_finalized()
572
+
573
+ # Create manifest
574
+ with quiet():
575
+ cmd.run()
576
+
577
+ # Add UTF-8 filename to manifest
578
+ filename = os.path.join(b'sdist_test', Filenames.utf_8)
579
+ cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt')
580
+ manifest = open(cmd.manifest, 'ab')
581
+ manifest.write(b'\n' + filename)
582
+ manifest.close()
583
+
584
+ # The file must exist to be included in the filelist
585
+ touch(filename)
586
+
587
+ # Re-read manifest
588
+ cmd.filelist.files = []
589
+ with quiet():
590
+ cmd.read_manifest()
591
+
592
+ # The filelist should contain the UTF-8 filename
593
+ filename = filename.decode('utf-8')
594
+ assert filename in cmd.filelist.files
595
+
596
+ @fail_on_latin1_encoded_filenames
597
+ def test_read_manifest_skips_non_utf8_filenames(self):
598
+ # Test for #303.
599
+ dist = Distribution(SETUP_ATTRS)
600
+ dist.script_name = 'setup.py'
601
+ cmd = sdist(dist)
602
+ cmd.ensure_finalized()
603
+
604
+ # Create manifest
605
+ with quiet():
606
+ cmd.run()
607
+
608
+ # Add Latin-1 filename to manifest
609
+ filename = os.path.join(b'sdist_test', Filenames.latin_1)
610
+ cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt')
611
+ manifest = open(cmd.manifest, 'ab')
612
+ manifest.write(b'\n' + filename)
613
+ manifest.close()
614
+
615
+ # The file must exist to be included in the filelist
616
+ touch(filename)
617
+
618
+ # Re-read manifest
619
+ cmd.filelist.files = []
620
+ with quiet():
621
+ cmd.read_manifest()
622
+
623
+ # The Latin-1 filename should have been skipped
624
+ filename = filename.decode('latin-1')
625
+ assert filename not in cmd.filelist.files
626
+
627
+ @fail_on_ascii
628
+ @fail_on_latin1_encoded_filenames
629
+ def test_sdist_with_utf8_encoded_filename(self):
630
+ # Test for #303.
631
+ dist = Distribution(self.make_strings(SETUP_ATTRS))
632
+ dist.script_name = 'setup.py'
633
+ cmd = sdist(dist)
634
+ cmd.ensure_finalized()
635
+
636
+ filename = os.path.join(b'sdist_test', Filenames.utf_8)
637
+ touch(filename)
638
+
639
+ with quiet():
640
+ cmd.run()
641
+
642
+ if sys.platform == 'darwin':
643
+ filename = decompose(filename)
644
+
645
+ fs_enc = sys.getfilesystemencoding()
646
+
647
+ if sys.platform == 'win32':
648
+ if fs_enc == 'cp1252':
649
+ # Python mangles the UTF-8 filename
650
+ filename = filename.decode('cp1252')
651
+ assert filename in cmd.filelist.files
652
+ else:
653
+ filename = filename.decode('mbcs')
654
+ assert filename in cmd.filelist.files
655
+ else:
656
+ filename = filename.decode('utf-8')
657
+ assert filename in cmd.filelist.files
658
+
659
+ @classmethod
660
+ def make_strings(cls, item):
661
+ if isinstance(item, dict):
662
+ return {key: cls.make_strings(value) for key, value in item.items()}
663
+ if isinstance(item, list):
664
+ return list(map(cls.make_strings, item))
665
+ return str(item)
666
+
667
+ @fail_on_latin1_encoded_filenames
668
+ @skip_under_xdist
669
+ def test_sdist_with_latin1_encoded_filename(self):
670
+ # Test for #303.
671
+ dist = Distribution(self.make_strings(SETUP_ATTRS))
672
+ dist.script_name = 'setup.py'
673
+ cmd = sdist(dist)
674
+ cmd.ensure_finalized()
675
+
676
+ # Latin-1 filename
677
+ filename = os.path.join(b'sdist_test', Filenames.latin_1)
678
+ touch(filename)
679
+ assert os.path.isfile(filename)
680
+
681
+ with quiet():
682
+ cmd.run()
683
+
684
+ # not all windows systems have a default FS encoding of cp1252
685
+ if sys.platform == 'win32':
686
+ # Latin-1 is similar to Windows-1252 however
687
+ # on mbcs filesys it is not in latin-1 encoding
688
+ fs_enc = sys.getfilesystemencoding()
689
+ if fs_enc != 'mbcs':
690
+ fs_enc = 'latin-1'
691
+ filename = filename.decode(fs_enc)
692
+
693
+ assert filename in cmd.filelist.files
694
+ else:
695
+ # The Latin-1 filename should have been skipped
696
+ filename = filename.decode('latin-1')
697
+ assert filename not in cmd.filelist.files
698
+
699
+ _EXAMPLE_DIRECTIVES = {
700
+ "setup.cfg - long_description and version": """
701
+ [metadata]
702
+ name = testing
703
+ version = file: src/VERSION.txt
704
+ license_files = DOWHATYOUWANT
705
+ long_description = file: README.rst, USAGE.rst
706
+ """,
707
+ "pyproject.toml - static readme/license files and dynamic version": """
708
+ [project]
709
+ name = "testing"
710
+ readme = "USAGE.rst"
711
+ license-files = ["DOWHATYOUWANT"]
712
+ dynamic = ["version"]
713
+ [tool.setuptools.dynamic]
714
+ version = {file = ["src/VERSION.txt"]}
715
+ """,
716
+ "pyproject.toml - directive with str instead of list": """
717
+ [project]
718
+ name = "testing"
719
+ readme = "USAGE.rst"
720
+ license-files = ["DOWHATYOUWANT"]
721
+ dynamic = ["version"]
722
+ [tool.setuptools.dynamic]
723
+ version = {file = "src/VERSION.txt"}
724
+ """,
725
+ "pyproject.toml - deprecated license table with file entry": """
726
+ [project]
727
+ name = "testing"
728
+ readme = "USAGE.rst"
729
+ license = {file = "DOWHATYOUWANT"}
730
+ dynamic = ["version"]
731
+ [tool.setuptools.dynamic]
732
+ version = {file = "src/VERSION.txt"}
733
+ """,
734
+ }
735
+
736
+ @pytest.mark.parametrize("config", _EXAMPLE_DIRECTIVES.keys())
737
+ @pytest.mark.filterwarnings(
738
+ "ignore:.project.license. as a TOML table is deprecated"
739
+ )
740
+ def test_add_files_referenced_by_config_directives(self, source_dir, config):
741
+ config_file, _, _ = config.partition(" - ")
742
+ config_text = self._EXAMPLE_DIRECTIVES[config]
743
+ (source_dir / 'src').mkdir()
744
+ (source_dir / 'src/VERSION.txt').write_text("0.42", encoding="utf-8")
745
+ (source_dir / 'README.rst').write_text("hello world!", encoding="utf-8")
746
+ (source_dir / 'USAGE.rst').write_text("hello world!", encoding="utf-8")
747
+ (source_dir / 'DOWHATYOUWANT').write_text("hello world!", encoding="utf-8")
748
+ (source_dir / config_file).write_text(config_text, encoding="utf-8")
749
+
750
+ dist = Distribution({"packages": []})
751
+ dist.script_name = 'setup.py'
752
+ dist.parse_config_files()
753
+
754
+ cmd = sdist(dist)
755
+ cmd.ensure_finalized()
756
+ with quiet():
757
+ cmd.run()
758
+
759
+ assert (
760
+ 'src/VERSION.txt' in cmd.filelist.files
761
+ or 'src\\VERSION.txt' in cmd.filelist.files
762
+ )
763
+ assert 'USAGE.rst' in cmd.filelist.files
764
+ assert 'DOWHATYOUWANT' in cmd.filelist.files
765
+ assert '/' not in cmd.filelist.files
766
+ assert '\\' not in cmd.filelist.files
767
+
768
+ def test_pyproject_toml_in_sdist(self, source_dir):
769
+ """
770
+ Check if pyproject.toml is included in source distribution if present
771
+ """
772
+ touch(source_dir / 'pyproject.toml')
773
+ dist = Distribution(SETUP_ATTRS)
774
+ dist.script_name = 'setup.py'
775
+ cmd = sdist(dist)
776
+ cmd.ensure_finalized()
777
+ with quiet():
778
+ cmd.run()
779
+ manifest = cmd.filelist.files
780
+ assert 'pyproject.toml' in manifest
781
+
782
+ def test_pyproject_toml_excluded(self, source_dir):
783
+ """
784
+ Check that pyproject.toml can excluded even if present
785
+ """
786
+ touch(source_dir / 'pyproject.toml')
787
+ with open('MANIFEST.in', 'w', encoding="utf-8") as mts:
788
+ print('exclude pyproject.toml', file=mts)
789
+ dist = Distribution(SETUP_ATTRS)
790
+ dist.script_name = 'setup.py'
791
+ cmd = sdist(dist)
792
+ cmd.ensure_finalized()
793
+ with quiet():
794
+ cmd.run()
795
+ manifest = cmd.filelist.files
796
+ assert 'pyproject.toml' not in manifest
797
+
798
+ def test_build_subcommand_source_files(self, source_dir):
799
+ touch(source_dir / '.myfile~')
800
+
801
+ # Sanity check: without custom commands file list should not be affected
802
+ dist = Distribution({**SETUP_ATTRS, "script_name": "setup.py"})
803
+ cmd = sdist(dist)
804
+ cmd.ensure_finalized()
805
+ with quiet():
806
+ cmd.run()
807
+ manifest = cmd.filelist.files
808
+ assert '.myfile~' not in manifest
809
+
810
+ # Test: custom command should be able to augment file list
811
+ dist = Distribution({**SETUP_ATTRS, "script_name": "setup.py"})
812
+ build = dist.get_command_obj("build")
813
+ build.sub_commands = [*build.sub_commands, ("build_custom", None)]
814
+
815
+ class build_custom(Command):
816
+ def initialize_options(self): ...
817
+
818
+ def finalize_options(self): ...
819
+
820
+ def run(self): ...
821
+
822
+ def get_source_files(self):
823
+ return ['.myfile~']
824
+
825
+ dist.cmdclass.update(build_custom=build_custom)
826
+
827
+ cmd = sdist(dist)
828
+ cmd.use_defaults = True
829
+ cmd.ensure_finalized()
830
+ with quiet():
831
+ cmd.run()
832
+ manifest = cmd.filelist.files
833
+ assert '.myfile~' in manifest
834
+
835
+ @pytest.mark.skipif("os.environ.get('SETUPTOOLS_USE_DISTUTILS') == 'stdlib'")
836
+ def test_build_base_pathlib(self, source_dir):
837
+ """
838
+ Ensure if build_base is a pathlib.Path, the build still succeeds.
839
+ """
840
+ dist = Distribution({
841
+ **SETUP_ATTRS,
842
+ "script_name": "setup.py",
843
+ "options": {"build": {"build_base": pathlib.Path('build')}},
844
+ })
845
+ cmd = sdist(dist)
846
+ cmd.ensure_finalized()
847
+ with quiet():
848
+ cmd.run()
849
+
850
+
851
+ def test_default_revctrl():
852
+ """
853
+ When _default_revctrl was removed from the `setuptools.command.sdist`
854
+ module in 10.0, it broke some systems which keep an old install of
855
+ setuptools (Distribute) around. Those old versions require that the
856
+ setuptools package continue to implement that interface, so this
857
+ function provides that interface, stubbed. See #320 for details.
858
+
859
+ This interface must be maintained until Ubuntu 12.04 is no longer
860
+ supported (by Setuptools).
861
+ """
862
+ (ep,) = metadata.EntryPoints._from_text(
863
+ """
864
+ [setuptools.file_finders]
865
+ svn_cvs = setuptools.command.sdist:_default_revctrl
866
+ """
867
+ )
868
+ res = ep.load()
869
+ assert hasattr(res, '__iter__')
870
+
871
+
872
+ class TestRegressions:
873
+ """
874
+ Can be removed/changed if the project decides to change how it handles symlinks
875
+ or external files.
876
+ """
877
+
878
+ @staticmethod
879
+ def files_for_symlink_in_extension_depends(tmp_path, dep_path):
880
+ return {
881
+ "external": {
882
+ "dir": {"file.h": ""},
883
+ },
884
+ "project": {
885
+ "setup.py": cleandoc(
886
+ f"""
887
+ from setuptools import Extension, setup
888
+ setup(
889
+ name="myproj",
890
+ version="42",
891
+ ext_modules=[
892
+ Extension(
893
+ "hello", sources=["hello.pyx"],
894
+ depends=[{dep_path!r}]
895
+ )
896
+ ],
897
+ )
898
+ """
899
+ ),
900
+ "hello.pyx": "",
901
+ "MANIFEST.in": "global-include *.h",
902
+ },
903
+ }
904
+
905
+ @pytest.mark.parametrize(
906
+ "dep_path", ("myheaders/dir/file.h", "myheaders/dir/../dir/file.h")
907
+ )
908
+ def test_symlink_in_extension_depends(self, monkeypatch, tmp_path, dep_path):
909
+ # Given a project with a symlinked dir and a "depends" targeting that dir
910
+ files = self.files_for_symlink_in_extension_depends(tmp_path, dep_path)
911
+ jaraco.path.build(files, prefix=str(tmp_path))
912
+ symlink_or_skip_test(tmp_path / "external", tmp_path / "project/myheaders")
913
+
914
+ # When `sdist` runs, there should be no error
915
+ members = run_sdist(monkeypatch, tmp_path / "project")
916
+ # and the sdist should contain the symlinked files
917
+ for expected in (
918
+ "myproj-42/hello.pyx",
919
+ "myproj-42/myheaders/dir/file.h",
920
+ ):
921
+ assert expected in members
922
+
923
+ @staticmethod
924
+ def files_for_external_path_in_extension_depends(tmp_path, dep_path):
925
+ head, _, tail = dep_path.partition("$tmp_path$/")
926
+ dep_path = tmp_path / tail if tail else head
927
+
928
+ return {
929
+ "external": {
930
+ "dir": {"file.h": ""},
931
+ },
932
+ "project": {
933
+ "setup.py": cleandoc(
934
+ f"""
935
+ from setuptools import Extension, setup
936
+ setup(
937
+ name="myproj",
938
+ version="42",
939
+ ext_modules=[
940
+ Extension(
941
+ "hello", sources=["hello.pyx"],
942
+ depends=[{str(dep_path)!r}]
943
+ )
944
+ ],
945
+ )
946
+ """
947
+ ),
948
+ "hello.pyx": "",
949
+ "MANIFEST.in": "global-include *.h",
950
+ },
951
+ }
952
+
953
+ @pytest.mark.parametrize(
954
+ "dep_path", ("$tmp_path$/external/dir/file.h", "../external/dir/file.h")
955
+ )
956
+ def test_external_path_in_extension_depends(self, monkeypatch, tmp_path, dep_path):
957
+ # Given a project with a "depends" targeting an external dir
958
+ files = self.files_for_external_path_in_extension_depends(tmp_path, dep_path)
959
+ jaraco.path.build(files, prefix=str(tmp_path))
960
+ # When `sdist` runs, there should be no error
961
+ members = run_sdist(monkeypatch, tmp_path / "project")
962
+ # and the sdist should not contain the external file
963
+ for name in members:
964
+ assert "file.h" not in name
965
+
966
+
967
+ def run_sdist(monkeypatch, project):
968
+ """Given a project directory, run the sdist and return its contents"""
969
+ monkeypatch.chdir(project)
970
+ with quiet():
971
+ run_setup("setup.py", ["sdist"])
972
+
973
+ archive = next((project / "dist").glob("*.tar.gz"))
974
+ with tarfile.open(str(archive)) as tar:
975
+ return set(tar.getnames())
976
+
977
+
978
+ def test_sanity_check_setuptools_own_sdist(setuptools_sdist):
979
+ with tarfile.open(setuptools_sdist) as tar:
980
+ files = tar.getnames()
981
+
982
+ # setuptools sdist should not include the .tox folder
983
+ tox_files = [name for name in files if ".tox" in name]
984
+ assert len(tox_files) == 0, f"not empty {tox_files}"