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,131 @@
1
+ import contextlib
2
+ import io
3
+ import os
4
+ import shutil
5
+ import site
6
+ import sys
7
+ import tempfile
8
+
9
+ from filelock import FileLock
10
+
11
+
12
+ @contextlib.contextmanager
13
+ def tempdir(cd=lambda dir: None, **kwargs):
14
+ temp_dir = tempfile.mkdtemp(**kwargs)
15
+ orig_dir = os.getcwd()
16
+ try:
17
+ cd(temp_dir)
18
+ yield temp_dir
19
+ finally:
20
+ cd(orig_dir)
21
+ shutil.rmtree(temp_dir)
22
+
23
+
24
+ @contextlib.contextmanager
25
+ def environment(**replacements):
26
+ """
27
+ In a context, patch the environment with replacements. Pass None values
28
+ to clear the values.
29
+ """
30
+ saved = dict((key, os.environ[key]) for key in replacements if key in os.environ)
31
+
32
+ # remove values that are null
33
+ remove = (key for (key, value) in replacements.items() if value is None)
34
+ for key in list(remove):
35
+ os.environ.pop(key, None)
36
+ replacements.pop(key)
37
+
38
+ os.environ.update(replacements)
39
+
40
+ try:
41
+ yield saved
42
+ finally:
43
+ for key in replacements:
44
+ os.environ.pop(key, None)
45
+ os.environ.update(saved)
46
+
47
+
48
+ @contextlib.contextmanager
49
+ def quiet():
50
+ """
51
+ Redirect stdout/stderr to StringIO objects to prevent console output from
52
+ distutils commands.
53
+ """
54
+
55
+ old_stdout = sys.stdout
56
+ old_stderr = sys.stderr
57
+ new_stdout = sys.stdout = io.StringIO()
58
+ new_stderr = sys.stderr = io.StringIO()
59
+ try:
60
+ yield new_stdout, new_stderr
61
+ finally:
62
+ new_stdout.seek(0)
63
+ new_stderr.seek(0)
64
+ sys.stdout = old_stdout
65
+ sys.stderr = old_stderr
66
+
67
+
68
+ @contextlib.contextmanager
69
+ def save_user_site_setting():
70
+ saved = site.ENABLE_USER_SITE
71
+ try:
72
+ yield saved
73
+ finally:
74
+ site.ENABLE_USER_SITE = saved
75
+
76
+
77
+ @contextlib.contextmanager
78
+ def suppress_exceptions(*excs):
79
+ try:
80
+ yield
81
+ except excs:
82
+ pass
83
+
84
+
85
+ def multiproc(request):
86
+ """
87
+ Return True if running under xdist and multiple
88
+ workers are used.
89
+ """
90
+ try:
91
+ worker_id = request.getfixturevalue('worker_id')
92
+ except Exception:
93
+ return False
94
+ return worker_id != 'master'
95
+
96
+
97
+ @contextlib.contextmanager
98
+ def session_locked_tmp_dir(request, tmp_path_factory, name):
99
+ """Uses a file lock to guarantee only one worker can access a temp dir"""
100
+ # get the temp directory shared by all workers
101
+ base = tmp_path_factory.getbasetemp()
102
+ shared_dir = base.parent if multiproc(request) else base
103
+
104
+ locked_dir = shared_dir / name
105
+ with FileLock(locked_dir.with_suffix(".lock")):
106
+ # ^-- prevent multiple workers to access the directory at once
107
+ locked_dir.mkdir(exist_ok=True, parents=True)
108
+ yield locked_dir
109
+
110
+
111
+ @contextlib.contextmanager
112
+ def save_paths():
113
+ """Make sure ``sys.path``, ``sys.meta_path`` and ``sys.path_hooks`` are preserved"""
114
+ prev = sys.path[:], sys.meta_path[:], sys.path_hooks[:]
115
+
116
+ try:
117
+ yield
118
+ finally:
119
+ sys.path, sys.meta_path, sys.path_hooks = prev
120
+
121
+
122
+ @contextlib.contextmanager
123
+ def save_sys_modules():
124
+ """Make sure initial ``sys.modules`` is preserved"""
125
+ prev_modules = sys.modules
126
+
127
+ try:
128
+ sys.modules = sys.modules.copy()
129
+ yield
130
+ finally:
131
+ sys.modules = prev_modules
@@ -0,0 +1,95 @@
1
+ import os
2
+ import subprocess
3
+ import sys
4
+ import unicodedata
5
+ from subprocess import PIPE as _PIPE, Popen as _Popen
6
+
7
+ import jaraco.envs
8
+
9
+
10
+ class VirtualEnv(jaraco.envs.VirtualEnv):
11
+ name = '.env'
12
+ # Some version of PyPy will import distutils on startup, implicitly
13
+ # importing setuptools, and thus leading to BackendInvalid errors
14
+ # when upgrading Setuptools. Bypass this behavior by avoiding the
15
+ # early availability and need to upgrade.
16
+ create_opts = ['--no-setuptools']
17
+
18
+ def run(self, cmd, *args, **kwargs):
19
+ cmd = [self.exe(cmd[0])] + cmd[1:]
20
+ kwargs = {"cwd": self.root, "encoding": "utf-8", **kwargs} # Allow overriding
21
+ # In some environments (eg. downstream distro packaging), where:
22
+ # - tox isn't used to run tests and
23
+ # - PYTHONPATH is set to point to a specific setuptools codebase and
24
+ # - no custom env is explicitly set by a test
25
+ # PYTHONPATH will leak into the spawned processes.
26
+ # In that case tests look for module in the wrong place (on PYTHONPATH).
27
+ # Unless the test sets its own special env, pass a copy of the existing
28
+ # environment with removed PYTHONPATH to the subprocesses.
29
+ if "env" not in kwargs:
30
+ env = dict(os.environ)
31
+ if "PYTHONPATH" in env:
32
+ del env["PYTHONPATH"]
33
+ kwargs["env"] = env
34
+ return subprocess.check_output(cmd, *args, **kwargs)
35
+
36
+
37
+ def _which_dirs(cmd):
38
+ result = set()
39
+ for path in os.environ.get('PATH', '').split(os.pathsep):
40
+ filename = os.path.join(path, cmd)
41
+ if os.access(filename, os.X_OK):
42
+ result.add(path)
43
+ return result
44
+
45
+
46
+ def run_setup_py(cmd, pypath=None, path=None, data_stream=0, env=None):
47
+ """
48
+ Execution command for tests, separate from those used by the
49
+ code directly to prevent accidental behavior issues
50
+ """
51
+ if env is None:
52
+ env = dict()
53
+ for envname in os.environ:
54
+ env[envname] = os.environ[envname]
55
+
56
+ # override the python path if needed
57
+ if pypath is not None:
58
+ env["PYTHONPATH"] = pypath
59
+
60
+ # override the execution path if needed
61
+ if path is not None:
62
+ env["PATH"] = path
63
+ if not env.get("PATH", ""):
64
+ env["PATH"] = _which_dirs("tar").union(_which_dirs("gzip"))
65
+ env["PATH"] = os.pathsep.join(env["PATH"])
66
+
67
+ cmd = [sys.executable, "setup.py"] + list(cmd)
68
+
69
+ # https://bugs.python.org/issue8557
70
+ shell = sys.platform == 'win32'
71
+
72
+ try:
73
+ proc = _Popen(
74
+ cmd,
75
+ stdout=_PIPE,
76
+ stderr=_PIPE,
77
+ shell=shell,
78
+ env=env,
79
+ encoding="utf-8",
80
+ )
81
+
82
+ if isinstance(data_stream, tuple):
83
+ data_stream = slice(*data_stream)
84
+ data = proc.communicate()[data_stream]
85
+ except OSError:
86
+ return 1, ''
87
+
88
+ # decode the console string if needed
89
+ if hasattr(data, "decode"):
90
+ # use the default encoding
91
+ data = data.decode()
92
+ data = unicodedata.normalize('NFC', data)
93
+
94
+ # communicate calls wait()
95
+ return proc.returncode, data
@@ -0,0 +1,392 @@
1
+ import contextlib
2
+ import io
3
+ import os
4
+ import subprocess
5
+ import sys
6
+ import tarfile
7
+ import time
8
+ from pathlib import Path
9
+
10
+ import jaraco.path
11
+ import path
12
+ import pytest
13
+
14
+ from setuptools._normalization import safer_name
15
+
16
+ from . import contexts, environment
17
+ from .textwrap import DALS
18
+
19
+
20
+ @pytest.fixture
21
+ def user_override(monkeypatch):
22
+ """
23
+ Override site.USER_BASE and site.USER_SITE with temporary directories in
24
+ a context.
25
+ """
26
+ with contexts.tempdir() as user_base:
27
+ monkeypatch.setattr('site.USER_BASE', user_base)
28
+ with contexts.tempdir() as user_site:
29
+ monkeypatch.setattr('site.USER_SITE', user_site)
30
+ with contexts.save_user_site_setting():
31
+ yield
32
+
33
+
34
+ @pytest.fixture
35
+ def tmpdir_cwd(tmpdir):
36
+ with tmpdir.as_cwd() as orig:
37
+ yield orig
38
+
39
+
40
+ @pytest.fixture(autouse=True, scope="session")
41
+ def workaround_xdist_376(request):
42
+ """
43
+ Workaround pytest-dev/pytest-xdist#376
44
+
45
+ ``pytest-xdist`` tends to inject '' into ``sys.path``,
46
+ which may break certain isolation expectations.
47
+ Remove the entry so the import
48
+ machinery behaves the same irrespective of xdist.
49
+ """
50
+ if not request.config.pluginmanager.has_plugin('xdist'):
51
+ return
52
+
53
+ with contextlib.suppress(ValueError):
54
+ sys.path.remove('')
55
+
56
+
57
+ @pytest.fixture
58
+ def sample_project(tmp_path):
59
+ """
60
+ Clone the 'sampleproject' and return a path to it.
61
+ """
62
+ cmd = ['git', 'clone', 'https://github.com/pypa/sampleproject']
63
+ try:
64
+ subprocess.check_call(cmd, cwd=str(tmp_path))
65
+ except Exception:
66
+ pytest.skip("Unable to clone sampleproject")
67
+ return tmp_path / 'sampleproject'
68
+
69
+
70
+ @pytest.fixture
71
+ def sample_project_cwd(sample_project):
72
+ with path.Path(sample_project):
73
+ yield
74
+
75
+
76
+ # sdist and wheel artifacts should be stable across a round of tests
77
+ # so we can build them once per session and use the files as "readonly"
78
+
79
+ # In the case of setuptools, building the wheel without sdist may cause
80
+ # it to contain the `build` directory, and therefore create situations with
81
+ # `setuptools/build/lib/build/lib/...`. To avoid that, build both artifacts at once.
82
+
83
+
84
+ def _build_distributions(tmp_path_factory, request):
85
+ with contexts.session_locked_tmp_dir(
86
+ request, tmp_path_factory, "dist_build"
87
+ ) as tmp: # pragma: no cover
88
+ sdist = next(tmp.glob("*.tar.gz"), None)
89
+ wheel = next(tmp.glob("*.whl"), None)
90
+ if sdist and wheel:
91
+ return (sdist, wheel)
92
+
93
+ # Sanity check: should not create recursive setuptools/build/lib/build/lib/...
94
+ assert not Path(request.config.rootdir, "build/lib/build").exists()
95
+
96
+ subprocess.check_output([
97
+ sys.executable,
98
+ "-m",
99
+ "build",
100
+ "--outdir",
101
+ str(tmp),
102
+ str(request.config.rootdir),
103
+ ])
104
+
105
+ # Sanity check: should not create recursive setuptools/build/lib/build/lib/...
106
+ assert not Path(request.config.rootdir, "build/lib/build").exists()
107
+
108
+ return next(tmp.glob("*.tar.gz")), next(tmp.glob("*.whl"))
109
+
110
+
111
+ @pytest.fixture(scope="session")
112
+ def setuptools_sdist(tmp_path_factory, request):
113
+ prebuilt = os.getenv("PRE_BUILT_SETUPTOOLS_SDIST")
114
+ if prebuilt and os.path.exists(prebuilt): # pragma: no cover
115
+ return Path(prebuilt).resolve()
116
+
117
+ sdist, _ = _build_distributions(tmp_path_factory, request)
118
+ return sdist
119
+
120
+
121
+ @pytest.fixture(scope="session")
122
+ def setuptools_wheel(tmp_path_factory, request):
123
+ prebuilt = os.getenv("PRE_BUILT_SETUPTOOLS_WHEEL")
124
+ if prebuilt and os.path.exists(prebuilt): # pragma: no cover
125
+ return Path(prebuilt).resolve()
126
+
127
+ _, wheel = _build_distributions(tmp_path_factory, request)
128
+ return wheel
129
+
130
+
131
+ @pytest.fixture
132
+ def venv(tmp_path, setuptools_wheel):
133
+ """Virtual env with the version of setuptools under test installed"""
134
+ env = environment.VirtualEnv()
135
+ env.root = path.Path(tmp_path / 'venv')
136
+ env.create_opts = ['--no-setuptools', '--wheel=bundle']
137
+ # TODO: Use `--no-wheel` when setuptools implements its own bdist_wheel
138
+ env.req = str(setuptools_wheel)
139
+ # In some environments (eg. downstream distro packaging),
140
+ # where tox isn't used to run tests and PYTHONPATH is set to point to
141
+ # a specific setuptools codebase, PYTHONPATH will leak into the spawned
142
+ # processes.
143
+ # env.create() should install the just created setuptools
144
+ # wheel, but it doesn't if it finds another existing matching setuptools
145
+ # installation present on PYTHONPATH:
146
+ # `setuptools is already installed with the same version as the provided
147
+ # wheel. Use --force-reinstall to force an installation of the wheel.`
148
+ # This prevents leaking PYTHONPATH to the created environment.
149
+ with contexts.environment(PYTHONPATH=None):
150
+ return env.create()
151
+
152
+
153
+ @pytest.fixture
154
+ def venv_without_setuptools(tmp_path):
155
+ """Virtual env without any version of setuptools installed"""
156
+ env = environment.VirtualEnv()
157
+ env.root = path.Path(tmp_path / 'venv_without_setuptools')
158
+ env.create_opts = ['--no-setuptools', '--no-wheel']
159
+ env.ensure_env()
160
+ return env
161
+
162
+
163
+ @pytest.fixture
164
+ def bare_venv(tmp_path):
165
+ """Virtual env without any common packages installed"""
166
+ env = environment.VirtualEnv()
167
+ env.root = path.Path(tmp_path / 'bare_venv')
168
+ env.create_opts = ['--no-setuptools', '--no-pip', '--no-wheel', '--no-seed']
169
+ env.ensure_env()
170
+ return env
171
+
172
+
173
+ def make_sdist(dist_path, files):
174
+ """
175
+ Create a simple sdist tarball at dist_path, containing the files
176
+ listed in ``files`` as ``(filename, content)`` tuples.
177
+ """
178
+
179
+ # Distributions with only one file don't play well with pip.
180
+ assert len(files) > 1
181
+ with tarfile.open(dist_path, 'w:gz') as dist:
182
+ for filename, content in files:
183
+ file_bytes = io.BytesIO(content.encode('utf-8'))
184
+ file_info = tarfile.TarInfo(name=filename)
185
+ file_info.size = len(file_bytes.getvalue())
186
+ file_info.mtime = int(time.time())
187
+ dist.addfile(file_info, fileobj=file_bytes)
188
+
189
+
190
+ def make_trivial_sdist(dist_path, distname, version):
191
+ """
192
+ Create a simple sdist tarball at dist_path, containing just a simple
193
+ setup.py.
194
+ """
195
+
196
+ make_sdist(
197
+ dist_path,
198
+ [
199
+ (
200
+ 'setup.py',
201
+ DALS(
202
+ f"""\
203
+ import setuptools
204
+ setuptools.setup(
205
+ name={distname!r},
206
+ version={version!r}
207
+ )
208
+ """
209
+ ),
210
+ ),
211
+ ('setup.cfg', ''),
212
+ ],
213
+ )
214
+
215
+
216
+ def make_nspkg_sdist(dist_path, distname, version):
217
+ """
218
+ Make an sdist tarball with distname and version which also contains one
219
+ package with the same name as distname. The top-level package is
220
+ designated a namespace package).
221
+ """
222
+ # Assert that the distname contains at least one period
223
+ assert '.' in distname
224
+
225
+ parts = distname.split('.')
226
+ nspackage = parts[0]
227
+
228
+ packages = ['.'.join(parts[:idx]) for idx in range(1, len(parts) + 1)]
229
+
230
+ setup_py = DALS(
231
+ f"""\
232
+ import setuptools
233
+ setuptools.setup(
234
+ name={distname!r},
235
+ version={version!r},
236
+ packages={packages!r},
237
+ namespace_packages=[{nspackage!r}]
238
+ )
239
+ """
240
+ )
241
+
242
+ init = "__import__('pkg_resources').declare_namespace(__name__)"
243
+
244
+ files = [('setup.py', setup_py), (os.path.join(nspackage, '__init__.py'), init)]
245
+ for package in packages[1:]:
246
+ filename = os.path.join(*(package.split('.') + ['__init__.py']))
247
+ files.append((filename, ''))
248
+
249
+ make_sdist(dist_path, files)
250
+
251
+
252
+ def make_python_requires_sdist(dist_path, distname, version, python_requires):
253
+ make_sdist(
254
+ dist_path,
255
+ [
256
+ (
257
+ 'setup.py',
258
+ DALS(
259
+ """\
260
+ import setuptools
261
+ setuptools.setup(
262
+ name={name!r},
263
+ version={version!r},
264
+ python_requires={python_requires!r},
265
+ )
266
+ """
267
+ ).format(
268
+ name=distname, version=version, python_requires=python_requires
269
+ ),
270
+ ),
271
+ ('setup.cfg', ''),
272
+ ],
273
+ )
274
+
275
+
276
+ def create_setup_requires_package(
277
+ path,
278
+ distname='foobar',
279
+ version='0.1',
280
+ make_package=make_trivial_sdist,
281
+ setup_py_template=None,
282
+ setup_attrs=None,
283
+ use_setup_cfg=(),
284
+ ):
285
+ """Creates a source tree under path for a trivial test package that has a
286
+ single requirement in setup_requires--a tarball for that requirement is
287
+ also created and added to the dependency_links argument.
288
+
289
+ ``distname`` and ``version`` refer to the name/version of the package that
290
+ the test package requires via ``setup_requires``. The name of the test
291
+ package itself is just 'test_pkg'.
292
+ """
293
+
294
+ normalized_distname = safer_name(distname)
295
+ test_setup_attrs = {
296
+ 'name': 'test_pkg',
297
+ 'version': '0.0',
298
+ 'setup_requires': [f'{normalized_distname}=={version}'],
299
+ 'dependency_links': [os.path.abspath(path)],
300
+ }
301
+ if setup_attrs:
302
+ test_setup_attrs.update(setup_attrs)
303
+
304
+ test_pkg = os.path.join(path, 'test_pkg')
305
+ os.mkdir(test_pkg)
306
+
307
+ # setup.cfg
308
+ if use_setup_cfg:
309
+ options = []
310
+ metadata = []
311
+ for name in use_setup_cfg:
312
+ value = test_setup_attrs.pop(name)
313
+ if name in 'name version'.split():
314
+ section = metadata
315
+ else:
316
+ section = options
317
+ if isinstance(value, (tuple, list)):
318
+ value = ';'.join(value)
319
+ section.append(f'{name}: {value}')
320
+ test_setup_cfg_contents = DALS(
321
+ """
322
+ [metadata]
323
+ {metadata}
324
+ [options]
325
+ {options}
326
+ """
327
+ ).format(
328
+ options='\n'.join(options),
329
+ metadata='\n'.join(metadata),
330
+ )
331
+ else:
332
+ test_setup_cfg_contents = ''
333
+ with open(os.path.join(test_pkg, 'setup.cfg'), 'w', encoding="utf-8") as f:
334
+ f.write(test_setup_cfg_contents)
335
+
336
+ # setup.py
337
+ if setup_py_template is None:
338
+ setup_py_template = DALS(
339
+ """\
340
+ import setuptools
341
+ setuptools.setup(**%r)
342
+ """
343
+ )
344
+ with open(os.path.join(test_pkg, 'setup.py'), 'w', encoding="utf-8") as f:
345
+ f.write(setup_py_template % test_setup_attrs)
346
+
347
+ foobar_path = os.path.join(path, f'{normalized_distname}-{version}.tar.gz')
348
+ make_package(foobar_path, distname, version)
349
+
350
+ return test_pkg
351
+
352
+
353
+ @pytest.fixture
354
+ def pbr_package(tmp_path, monkeypatch, venv):
355
+ files = {
356
+ "pyproject.toml": DALS(
357
+ """
358
+ [build-system]
359
+ requires = ["setuptools"]
360
+ build-backend = "setuptools.build_meta"
361
+ """
362
+ ),
363
+ "setup.py": DALS(
364
+ """
365
+ __import__('setuptools').setup(
366
+ pbr=True,
367
+ setup_requires=["pbr"],
368
+ )
369
+ """
370
+ ),
371
+ "setup.cfg": DALS(
372
+ """
373
+ [metadata]
374
+ name = mypkg
375
+
376
+ [files]
377
+ packages =
378
+ mypkg
379
+ """
380
+ ),
381
+ "mypkg": {
382
+ "__init__.py": "",
383
+ "hello.py": "print('Hello world!')",
384
+ },
385
+ "other": {"test.txt": "Another file in here."},
386
+ }
387
+ venv.run(["python", "-m", "pip", "install", "pbr"])
388
+ prefix = tmp_path / 'mypkg'
389
+ prefix.mkdir()
390
+ jaraco.path.build(files, prefix=prefix)
391
+ monkeypatch.setenv('PBR_VERSION', "0.42")
392
+ return prefix
@@ -0,0 +1,77 @@
1
+ """Reusable functions and classes for different types of integration tests.
2
+
3
+ For example ``Archive`` can be used to check the contents of distribution built
4
+ with setuptools, and ``run`` will always try to be as verbose as possible to
5
+ facilitate debugging.
6
+ """
7
+
8
+ import os
9
+ import subprocess
10
+ import tarfile
11
+ from pathlib import Path
12
+ from zipfile import ZipFile
13
+
14
+
15
+ def run(cmd, env=None):
16
+ r = subprocess.run(
17
+ cmd,
18
+ capture_output=True,
19
+ text=True,
20
+ encoding="utf-8",
21
+ env={**os.environ, **(env or {})},
22
+ # ^-- allow overwriting instead of discarding the current env
23
+ )
24
+
25
+ out = r.stdout + "\n" + r.stderr
26
+ # pytest omits stdout/err by default, if the test fails they help debugging
27
+ print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
28
+ print(f"Command: {cmd}\nreturn code: {r.returncode}\n\n{out}")
29
+
30
+ if r.returncode == 0:
31
+ return out
32
+ raise subprocess.CalledProcessError(r.returncode, cmd, r.stdout, r.stderr)
33
+
34
+
35
+ class Archive:
36
+ """Compatibility layer for ZipFile/Info and TarFile/Info"""
37
+
38
+ def __init__(self, filename):
39
+ self._filename = filename
40
+ if filename.endswith("tar.gz"):
41
+ self._obj = tarfile.open(filename, "r:gz")
42
+ elif filename.endswith("zip"):
43
+ self._obj = ZipFile(filename)
44
+ else:
45
+ raise ValueError(f"{filename} doesn't seem to be a zip or tar.gz")
46
+
47
+ def __iter__(self):
48
+ if hasattr(self._obj, "infolist"):
49
+ return iter(self._obj.infolist())
50
+ return iter(self._obj)
51
+
52
+ def get_name(self, zip_or_tar_info):
53
+ if hasattr(zip_or_tar_info, "filename"):
54
+ return zip_or_tar_info.filename
55
+ return zip_or_tar_info.name
56
+
57
+ def get_content(self, zip_or_tar_info):
58
+ if hasattr(self._obj, "extractfile"):
59
+ content = self._obj.extractfile(zip_or_tar_info)
60
+ if content is None:
61
+ msg = f"Invalid {zip_or_tar_info.name} in {self._filename}"
62
+ raise ValueError(msg)
63
+ return str(content.read(), "utf-8")
64
+ return str(self._obj.read(zip_or_tar_info), "utf-8")
65
+
66
+
67
+ def get_sdist_members(sdist_path):
68
+ with tarfile.open(sdist_path, "r:gz") as tar:
69
+ files = [Path(f) for f in tar.getnames()]
70
+ # remove root folder
71
+ relative_files = ("/".join(f.parts[1:]) for f in files)
72
+ return {f for f in relative_files if f}
73
+
74
+
75
+ def get_wheel_members(wheel_path):
76
+ with ZipFile(wheel_path) as zipfile:
77
+ return set(zipfile.namelist())