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,470 @@
1
+ """Tests for distutils.command.sdist."""
2
+
3
+ import os
4
+ import pathlib
5
+ import shutil # noqa: F401
6
+ import tarfile
7
+ import zipfile
8
+ from distutils.archive_util import ARCHIVE_FORMATS
9
+ from distutils.command.sdist import sdist, show_formats
10
+ from distutils.core import Distribution
11
+ from distutils.errors import DistutilsOptionError
12
+ from distutils.filelist import FileList
13
+ from os.path import join
14
+ from textwrap import dedent
15
+
16
+ import jaraco.path
17
+ import path
18
+ import pytest
19
+ from more_itertools import ilen
20
+
21
+ from . import support
22
+ from .unix_compat import grp, pwd, require_uid_0, require_unix_id
23
+
24
+ SETUP_PY = """
25
+ from distutils.core import setup
26
+ import somecode
27
+
28
+ setup(name='fake')
29
+ """
30
+
31
+ MANIFEST = """\
32
+ # file GENERATED by distutils, do NOT edit
33
+ README
34
+ buildout.cfg
35
+ inroot.txt
36
+ setup.py
37
+ data%(sep)sdata.dt
38
+ scripts%(sep)sscript.py
39
+ some%(sep)sfile.txt
40
+ some%(sep)sother_file.txt
41
+ somecode%(sep)s__init__.py
42
+ somecode%(sep)sdoc.dat
43
+ somecode%(sep)sdoc.txt
44
+ """
45
+
46
+
47
+ @pytest.fixture(autouse=True)
48
+ def project_dir(request, distutils_managed_tempdir):
49
+ self = request.instance
50
+ self.tmp_dir = self.mkdtemp()
51
+ jaraco.path.build(
52
+ {
53
+ 'somecode': {
54
+ '__init__.py': '#',
55
+ },
56
+ 'README': 'xxx',
57
+ 'setup.py': SETUP_PY,
58
+ },
59
+ self.tmp_dir,
60
+ )
61
+ with path.Path(self.tmp_dir):
62
+ yield
63
+
64
+
65
+ def clean_lines(filepath):
66
+ with pathlib.Path(filepath).open(encoding='utf-8') as f:
67
+ yield from filter(None, map(str.strip, f))
68
+
69
+
70
+ class TestSDist(support.TempdirManager):
71
+ def get_cmd(self, metadata=None):
72
+ """Returns a cmd"""
73
+ if metadata is None:
74
+ metadata = {
75
+ 'name': 'ns.fake--pkg',
76
+ 'version': '1.0',
77
+ 'url': 'xxx',
78
+ 'author': 'xxx',
79
+ 'author_email': 'xxx',
80
+ }
81
+ dist = Distribution(metadata)
82
+ dist.script_name = 'setup.py'
83
+ dist.packages = ['somecode']
84
+ dist.include_package_data = True
85
+ cmd = sdist(dist)
86
+ cmd.dist_dir = 'dist'
87
+ return dist, cmd
88
+
89
+ @pytest.mark.usefixtures('needs_zlib')
90
+ def test_prune_file_list(self):
91
+ # this test creates a project with some VCS dirs and an NFS rename
92
+ # file, then launches sdist to check they get pruned on all systems
93
+
94
+ # creating VCS directories with some files in them
95
+ os.mkdir(join(self.tmp_dir, 'somecode', '.svn'))
96
+ self.write_file((self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx')
97
+
98
+ os.mkdir(join(self.tmp_dir, 'somecode', '.hg'))
99
+ self.write_file((self.tmp_dir, 'somecode', '.hg', 'ok'), 'xxx')
100
+
101
+ os.mkdir(join(self.tmp_dir, 'somecode', '.git'))
102
+ self.write_file((self.tmp_dir, 'somecode', '.git', 'ok'), 'xxx')
103
+
104
+ self.write_file((self.tmp_dir, 'somecode', '.nfs0001'), 'xxx')
105
+
106
+ # now building a sdist
107
+ dist, cmd = self.get_cmd()
108
+
109
+ # zip is available universally
110
+ # (tar might not be installed under win32)
111
+ cmd.formats = ['zip']
112
+
113
+ cmd.ensure_finalized()
114
+ cmd.run()
115
+
116
+ # now let's check what we have
117
+ dist_folder = join(self.tmp_dir, 'dist')
118
+ files = os.listdir(dist_folder)
119
+ assert files == ['ns_fake_pkg-1.0.zip']
120
+
121
+ zip_file = zipfile.ZipFile(join(dist_folder, 'ns_fake_pkg-1.0.zip'))
122
+ try:
123
+ content = zip_file.namelist()
124
+ finally:
125
+ zip_file.close()
126
+
127
+ # making sure everything has been pruned correctly
128
+ expected = [
129
+ '',
130
+ 'PKG-INFO',
131
+ 'README',
132
+ 'setup.py',
133
+ 'somecode/',
134
+ 'somecode/__init__.py',
135
+ ]
136
+ assert sorted(content) == ['ns_fake_pkg-1.0/' + x for x in expected]
137
+
138
+ @pytest.mark.usefixtures('needs_zlib')
139
+ @pytest.mark.skipif("not shutil.which('tar')")
140
+ @pytest.mark.skipif("not shutil.which('gzip')")
141
+ def test_make_distribution(self):
142
+ # now building a sdist
143
+ dist, cmd = self.get_cmd()
144
+
145
+ # creating a gztar then a tar
146
+ cmd.formats = ['gztar', 'tar']
147
+ cmd.ensure_finalized()
148
+ cmd.run()
149
+
150
+ # making sure we have two files
151
+ dist_folder = join(self.tmp_dir, 'dist')
152
+ result = os.listdir(dist_folder)
153
+ result.sort()
154
+ assert result == ['ns_fake_pkg-1.0.tar', 'ns_fake_pkg-1.0.tar.gz']
155
+
156
+ os.remove(join(dist_folder, 'ns_fake_pkg-1.0.tar'))
157
+ os.remove(join(dist_folder, 'ns_fake_pkg-1.0.tar.gz'))
158
+
159
+ # now trying a tar then a gztar
160
+ cmd.formats = ['tar', 'gztar']
161
+
162
+ cmd.ensure_finalized()
163
+ cmd.run()
164
+
165
+ result = os.listdir(dist_folder)
166
+ result.sort()
167
+ assert result == ['ns_fake_pkg-1.0.tar', 'ns_fake_pkg-1.0.tar.gz']
168
+
169
+ @pytest.mark.usefixtures('needs_zlib')
170
+ def test_add_defaults(self):
171
+ # https://bugs.python.org/issue2279
172
+
173
+ # add_default should also include
174
+ # data_files and package_data
175
+ dist, cmd = self.get_cmd()
176
+
177
+ # filling data_files by pointing files
178
+ # in package_data
179
+ dist.package_data = {'': ['*.cfg', '*.dat'], 'somecode': ['*.txt']}
180
+ self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
181
+ self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#')
182
+
183
+ # adding some data in data_files
184
+ data_dir = join(self.tmp_dir, 'data')
185
+ os.mkdir(data_dir)
186
+ self.write_file((data_dir, 'data.dt'), '#')
187
+ some_dir = join(self.tmp_dir, 'some')
188
+ os.mkdir(some_dir)
189
+ # make sure VCS directories are pruned (#14004)
190
+ hg_dir = join(self.tmp_dir, '.hg')
191
+ os.mkdir(hg_dir)
192
+ self.write_file((hg_dir, 'last-message.txt'), '#')
193
+ # a buggy regex used to prevent this from working on windows (#6884)
194
+ self.write_file((self.tmp_dir, 'buildout.cfg'), '#')
195
+ self.write_file((self.tmp_dir, 'inroot.txt'), '#')
196
+ self.write_file((some_dir, 'file.txt'), '#')
197
+ self.write_file((some_dir, 'other_file.txt'), '#')
198
+
199
+ dist.data_files = [
200
+ ('data', ['data/data.dt', 'buildout.cfg', 'inroot.txt', 'notexisting']),
201
+ 'some/file.txt',
202
+ 'some/other_file.txt',
203
+ ]
204
+
205
+ # adding a script
206
+ script_dir = join(self.tmp_dir, 'scripts')
207
+ os.mkdir(script_dir)
208
+ self.write_file((script_dir, 'script.py'), '#')
209
+ dist.scripts = [join('scripts', 'script.py')]
210
+
211
+ cmd.formats = ['zip']
212
+ cmd.use_defaults = True
213
+
214
+ cmd.ensure_finalized()
215
+ cmd.run()
216
+
217
+ # now let's check what we have
218
+ dist_folder = join(self.tmp_dir, 'dist')
219
+ files = os.listdir(dist_folder)
220
+ assert files == ['ns_fake_pkg-1.0.zip']
221
+
222
+ zip_file = zipfile.ZipFile(join(dist_folder, 'ns_fake_pkg-1.0.zip'))
223
+ try:
224
+ content = zip_file.namelist()
225
+ finally:
226
+ zip_file.close()
227
+
228
+ # making sure everything was added
229
+ expected = [
230
+ '',
231
+ 'PKG-INFO',
232
+ 'README',
233
+ 'buildout.cfg',
234
+ 'data/',
235
+ 'data/data.dt',
236
+ 'inroot.txt',
237
+ 'scripts/',
238
+ 'scripts/script.py',
239
+ 'setup.py',
240
+ 'some/',
241
+ 'some/file.txt',
242
+ 'some/other_file.txt',
243
+ 'somecode/',
244
+ 'somecode/__init__.py',
245
+ 'somecode/doc.dat',
246
+ 'somecode/doc.txt',
247
+ ]
248
+ assert sorted(content) == ['ns_fake_pkg-1.0/' + x for x in expected]
249
+
250
+ # checking the MANIFEST
251
+ manifest = pathlib.Path(self.tmp_dir, 'MANIFEST').read_text(encoding='utf-8')
252
+ assert manifest == MANIFEST % {'sep': os.sep}
253
+
254
+ @staticmethod
255
+ def warnings(messages, prefix='warning: '):
256
+ return [msg for msg in messages if msg.startswith(prefix)]
257
+
258
+ @pytest.mark.usefixtures('needs_zlib')
259
+ def test_metadata_check_option(self, caplog):
260
+ # testing the `medata-check` option
261
+ dist, cmd = self.get_cmd(metadata={})
262
+
263
+ # this should raise some warnings !
264
+ # with the `check` subcommand
265
+ cmd.ensure_finalized()
266
+ cmd.run()
267
+ assert len(self.warnings(caplog.messages, 'warning: check: ')) == 1
268
+
269
+ # trying with a complete set of metadata
270
+ caplog.clear()
271
+ dist, cmd = self.get_cmd()
272
+ cmd.ensure_finalized()
273
+ cmd.metadata_check = False
274
+ cmd.run()
275
+ assert len(self.warnings(caplog.messages, 'warning: check: ')) == 0
276
+
277
+ def test_show_formats(self, capsys):
278
+ show_formats()
279
+
280
+ # the output should be a header line + one line per format
281
+ num_formats = len(ARCHIVE_FORMATS.keys())
282
+ output = [
283
+ line
284
+ for line in capsys.readouterr().out.split('\n')
285
+ if line.strip().startswith('--formats=')
286
+ ]
287
+ assert len(output) == num_formats
288
+
289
+ def test_finalize_options(self):
290
+ dist, cmd = self.get_cmd()
291
+ cmd.finalize_options()
292
+
293
+ # default options set by finalize
294
+ assert cmd.manifest == 'MANIFEST'
295
+ assert cmd.template == 'MANIFEST.in'
296
+ assert cmd.dist_dir == 'dist'
297
+
298
+ # formats has to be a string splitable on (' ', ',') or
299
+ # a stringlist
300
+ cmd.formats = 1
301
+ with pytest.raises(DistutilsOptionError):
302
+ cmd.finalize_options()
303
+ cmd.formats = ['zip']
304
+ cmd.finalize_options()
305
+
306
+ # formats has to be known
307
+ cmd.formats = 'supazipa'
308
+ with pytest.raises(DistutilsOptionError):
309
+ cmd.finalize_options()
310
+
311
+ # the following tests make sure there is a nice error message instead
312
+ # of a traceback when parsing an invalid manifest template
313
+
314
+ def _check_template(self, content, caplog):
315
+ dist, cmd = self.get_cmd()
316
+ os.chdir(self.tmp_dir)
317
+ self.write_file('MANIFEST.in', content)
318
+ cmd.ensure_finalized()
319
+ cmd.filelist = FileList()
320
+ cmd.read_template()
321
+ assert len(self.warnings(caplog.messages)) == 1
322
+
323
+ def test_invalid_template_unknown_command(self, caplog):
324
+ self._check_template('taunt knights *', caplog)
325
+
326
+ def test_invalid_template_wrong_arguments(self, caplog):
327
+ # this manifest command takes one argument
328
+ self._check_template('prune', caplog)
329
+
330
+ @pytest.mark.skipif("platform.system() != 'Windows'")
331
+ def test_invalid_template_wrong_path(self, caplog):
332
+ # on Windows, trailing slashes are not allowed
333
+ # this used to crash instead of raising a warning: #8286
334
+ self._check_template('include examples/', caplog)
335
+
336
+ @pytest.mark.usefixtures('needs_zlib')
337
+ def test_get_file_list(self):
338
+ # make sure MANIFEST is recalculated
339
+ dist, cmd = self.get_cmd()
340
+
341
+ # filling data_files by pointing files in package_data
342
+ dist.package_data = {'somecode': ['*.txt']}
343
+ self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
344
+ cmd.formats = ['gztar']
345
+ cmd.ensure_finalized()
346
+ cmd.run()
347
+
348
+ assert ilen(clean_lines(cmd.manifest)) == 5
349
+
350
+ # adding a file
351
+ self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#')
352
+
353
+ # make sure build_py is reinitialized, like a fresh run
354
+ build_py = dist.get_command_obj('build_py')
355
+ build_py.finalized = False
356
+ build_py.ensure_finalized()
357
+
358
+ cmd.run()
359
+
360
+ manifest2 = list(clean_lines(cmd.manifest))
361
+
362
+ # do we have the new file in MANIFEST ?
363
+ assert len(manifest2) == 6
364
+ assert 'doc2.txt' in manifest2[-1]
365
+
366
+ @pytest.mark.usefixtures('needs_zlib')
367
+ def test_manifest_marker(self):
368
+ # check that autogenerated MANIFESTs have a marker
369
+ dist, cmd = self.get_cmd()
370
+ cmd.ensure_finalized()
371
+ cmd.run()
372
+
373
+ assert (
374
+ next(clean_lines(cmd.manifest))
375
+ == '# file GENERATED by distutils, do NOT edit'
376
+ )
377
+
378
+ @pytest.mark.usefixtures('needs_zlib')
379
+ def test_manifest_comments(self):
380
+ # make sure comments don't cause exceptions or wrong includes
381
+ contents = dedent(
382
+ """\
383
+ # bad.py
384
+ #bad.py
385
+ good.py
386
+ """
387
+ )
388
+ dist, cmd = self.get_cmd()
389
+ cmd.ensure_finalized()
390
+ self.write_file((self.tmp_dir, cmd.manifest), contents)
391
+ self.write_file((self.tmp_dir, 'good.py'), '# pick me!')
392
+ self.write_file((self.tmp_dir, 'bad.py'), "# don't pick me!")
393
+ self.write_file((self.tmp_dir, '#bad.py'), "# don't pick me!")
394
+ cmd.run()
395
+ assert cmd.filelist.files == ['good.py']
396
+
397
+ @pytest.mark.usefixtures('needs_zlib')
398
+ def test_manual_manifest(self):
399
+ # check that a MANIFEST without a marker is left alone
400
+ dist, cmd = self.get_cmd()
401
+ cmd.formats = ['gztar']
402
+ cmd.ensure_finalized()
403
+ self.write_file((self.tmp_dir, cmd.manifest), 'README.manual')
404
+ self.write_file(
405
+ (self.tmp_dir, 'README.manual'),
406
+ 'This project maintains its MANIFEST file itself.',
407
+ )
408
+ cmd.run()
409
+ assert cmd.filelist.files == ['README.manual']
410
+
411
+ assert list(clean_lines(cmd.manifest)) == ['README.manual']
412
+
413
+ archive_name = join(self.tmp_dir, 'dist', 'ns_fake_pkg-1.0.tar.gz')
414
+ archive = tarfile.open(archive_name)
415
+ try:
416
+ filenames = [tarinfo.name for tarinfo in archive]
417
+ finally:
418
+ archive.close()
419
+ assert sorted(filenames) == [
420
+ 'ns_fake_pkg-1.0',
421
+ 'ns_fake_pkg-1.0/PKG-INFO',
422
+ 'ns_fake_pkg-1.0/README.manual',
423
+ ]
424
+
425
+ @pytest.mark.usefixtures('needs_zlib')
426
+ @require_unix_id
427
+ @require_uid_0
428
+ @pytest.mark.skipif("not shutil.which('tar')")
429
+ @pytest.mark.skipif("not shutil.which('gzip')")
430
+ def test_make_distribution_owner_group(self):
431
+ # now building a sdist
432
+ dist, cmd = self.get_cmd()
433
+
434
+ # creating a gztar and specifying the owner+group
435
+ cmd.formats = ['gztar']
436
+ cmd.owner = pwd.getpwuid(0)[0]
437
+ cmd.group = grp.getgrgid(0)[0]
438
+ cmd.ensure_finalized()
439
+ cmd.run()
440
+
441
+ # making sure we have the good rights
442
+ archive_name = join(self.tmp_dir, 'dist', 'ns_fake_pkg-1.0.tar.gz')
443
+ archive = tarfile.open(archive_name)
444
+ try:
445
+ for member in archive.getmembers():
446
+ assert member.uid == 0
447
+ assert member.gid == 0
448
+ finally:
449
+ archive.close()
450
+
451
+ # building a sdist again
452
+ dist, cmd = self.get_cmd()
453
+
454
+ # creating a gztar
455
+ cmd.formats = ['gztar']
456
+ cmd.ensure_finalized()
457
+ cmd.run()
458
+
459
+ # making sure we have the good rights
460
+ archive_name = join(self.tmp_dir, 'dist', 'ns_fake_pkg-1.0.tar.gz')
461
+ archive = tarfile.open(archive_name)
462
+
463
+ # note that we are not testing the group ownership here
464
+ # because, depending on the platforms and the container
465
+ # rights (see #7408)
466
+ try:
467
+ for member in archive.getmembers():
468
+ assert member.uid == os.getuid()
469
+ finally:
470
+ archive.close()
@@ -0,0 +1,141 @@
1
+ """Tests for distutils.spawn."""
2
+
3
+ import os
4
+ import stat
5
+ import sys
6
+ import unittest.mock as mock
7
+ from distutils.errors import DistutilsExecError
8
+ from distutils.spawn import find_executable, spawn
9
+ from distutils.tests import support
10
+
11
+ import path
12
+ import pytest
13
+ from test.support import unix_shell
14
+
15
+ from .compat import py39 as os_helper
16
+
17
+
18
+ class TestSpawn(support.TempdirManager):
19
+ @pytest.mark.skipif("os.name not in ('nt', 'posix')")
20
+ def test_spawn(self):
21
+ tmpdir = self.mkdtemp()
22
+
23
+ # creating something executable
24
+ # through the shell that returns 1
25
+ if sys.platform != 'win32':
26
+ exe = os.path.join(tmpdir, 'foo.sh')
27
+ self.write_file(exe, f'#!{unix_shell}\nexit 1')
28
+ else:
29
+ exe = os.path.join(tmpdir, 'foo.bat')
30
+ self.write_file(exe, 'exit 1')
31
+
32
+ os.chmod(exe, 0o777)
33
+ with pytest.raises(DistutilsExecError):
34
+ spawn([exe])
35
+
36
+ # now something that works
37
+ if sys.platform != 'win32':
38
+ exe = os.path.join(tmpdir, 'foo.sh')
39
+ self.write_file(exe, f'#!{unix_shell}\nexit 0')
40
+ else:
41
+ exe = os.path.join(tmpdir, 'foo.bat')
42
+ self.write_file(exe, 'exit 0')
43
+
44
+ os.chmod(exe, 0o777)
45
+ spawn([exe]) # should work without any error
46
+
47
+ def test_find_executable(self, tmp_path):
48
+ program_path = self._make_executable(tmp_path, '.exe')
49
+ program = program_path.name
50
+ program_noeext = program_path.with_suffix('').name
51
+ filename = str(program_path)
52
+ tmp_dir = path.Path(tmp_path)
53
+
54
+ # test path parameter
55
+ rv = find_executable(program, path=tmp_dir)
56
+ assert rv == filename
57
+
58
+ if sys.platform == 'win32':
59
+ # test without ".exe" extension
60
+ rv = find_executable(program_noeext, path=tmp_dir)
61
+ assert rv == filename
62
+
63
+ # test find in the current directory
64
+ with tmp_dir:
65
+ rv = find_executable(program)
66
+ assert rv == program
67
+
68
+ # test non-existent program
69
+ dont_exist_program = "dontexist_" + program
70
+ rv = find_executable(dont_exist_program, path=tmp_dir)
71
+ assert rv is None
72
+
73
+ # PATH='': no match, except in the current directory
74
+ with os_helper.EnvironmentVarGuard() as env:
75
+ env['PATH'] = ''
76
+ with (
77
+ mock.patch(
78
+ 'distutils.spawn.os.confstr', return_value=tmp_dir, create=True
79
+ ),
80
+ mock.patch('distutils.spawn.os.defpath', tmp_dir),
81
+ ):
82
+ rv = find_executable(program)
83
+ assert rv is None
84
+
85
+ # look in current directory
86
+ with tmp_dir:
87
+ rv = find_executable(program)
88
+ assert rv == program
89
+
90
+ # PATH=':': explicitly looks in the current directory
91
+ with os_helper.EnvironmentVarGuard() as env:
92
+ env['PATH'] = os.pathsep
93
+ with (
94
+ mock.patch('distutils.spawn.os.confstr', return_value='', create=True),
95
+ mock.patch('distutils.spawn.os.defpath', ''),
96
+ ):
97
+ rv = find_executable(program)
98
+ assert rv is None
99
+
100
+ # look in current directory
101
+ with tmp_dir:
102
+ rv = find_executable(program)
103
+ assert rv == program
104
+
105
+ # missing PATH: test os.confstr("CS_PATH") and os.defpath
106
+ with os_helper.EnvironmentVarGuard() as env:
107
+ env.pop('PATH', None)
108
+
109
+ # without confstr
110
+ with (
111
+ mock.patch(
112
+ 'distutils.spawn.os.confstr', side_effect=ValueError, create=True
113
+ ),
114
+ mock.patch('distutils.spawn.os.defpath', tmp_dir),
115
+ ):
116
+ rv = find_executable(program)
117
+ assert rv == filename
118
+
119
+ # with confstr
120
+ with (
121
+ mock.patch(
122
+ 'distutils.spawn.os.confstr', return_value=tmp_dir, create=True
123
+ ),
124
+ mock.patch('distutils.spawn.os.defpath', ''),
125
+ ):
126
+ rv = find_executable(program)
127
+ assert rv == filename
128
+
129
+ @staticmethod
130
+ def _make_executable(tmp_path, ext):
131
+ # Give the temporary program a suffix regardless of platform.
132
+ # It's needed on Windows and not harmful on others.
133
+ program = tmp_path.joinpath('program').with_suffix(ext)
134
+ program.write_text("", encoding='utf-8')
135
+ program.chmod(stat.S_IXUSR)
136
+ return program
137
+
138
+ def test_spawn_missing_exe(self):
139
+ with pytest.raises(DistutilsExecError) as ctx:
140
+ spawn(['does-not-exist'])
141
+ assert "command 'does-not-exist' failed" in str(ctx.value)