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,95 @@
1
+ """Tests for distutils.file_util."""
2
+
3
+ import errno
4
+ import os
5
+ import unittest.mock as mock
6
+ from distutils.errors import DistutilsFileError
7
+ from distutils.file_util import copy_file, move_file
8
+
9
+ import jaraco.path
10
+ import pytest
11
+
12
+
13
+ @pytest.fixture(autouse=True)
14
+ def stuff(request, tmp_path):
15
+ self = request.instance
16
+ self.source = tmp_path / 'f1'
17
+ self.target = tmp_path / 'f2'
18
+ self.target_dir = tmp_path / 'd1'
19
+
20
+
21
+ class TestFileUtil:
22
+ def test_move_file_verbosity(self, caplog):
23
+ jaraco.path.build({self.source: 'some content'})
24
+
25
+ move_file(self.source, self.target, verbose=False)
26
+ assert not caplog.messages
27
+
28
+ # back to original state
29
+ move_file(self.target, self.source, verbose=False)
30
+
31
+ move_file(self.source, self.target, verbose=True)
32
+ wanted = [f'moving {self.source} -> {self.target}']
33
+ assert caplog.messages == wanted
34
+
35
+ # back to original state
36
+ move_file(self.target, self.source, verbose=False)
37
+
38
+ caplog.clear()
39
+ # now the target is a dir
40
+ os.mkdir(self.target_dir)
41
+ move_file(self.source, self.target_dir, verbose=True)
42
+ wanted = [f'moving {self.source} -> {self.target_dir}']
43
+ assert caplog.messages == wanted
44
+
45
+ def test_move_file_exception_unpacking_rename(self):
46
+ # see issue 22182
47
+ with (
48
+ mock.patch("os.rename", side_effect=OSError("wrong", 1)),
49
+ pytest.raises(DistutilsFileError),
50
+ ):
51
+ jaraco.path.build({self.source: 'spam eggs'})
52
+ move_file(self.source, self.target, verbose=False)
53
+
54
+ def test_move_file_exception_unpacking_unlink(self):
55
+ # see issue 22182
56
+ with (
57
+ mock.patch("os.rename", side_effect=OSError(errno.EXDEV, "wrong")),
58
+ mock.patch("os.unlink", side_effect=OSError("wrong", 1)),
59
+ pytest.raises(DistutilsFileError),
60
+ ):
61
+ jaraco.path.build({self.source: 'spam eggs'})
62
+ move_file(self.source, self.target, verbose=False)
63
+
64
+ def test_copy_file_hard_link(self):
65
+ jaraco.path.build({self.source: 'some content'})
66
+ # Check first that copy_file() will not fall back on copying the file
67
+ # instead of creating the hard link.
68
+ try:
69
+ os.link(self.source, self.target)
70
+ except OSError as e:
71
+ self.skipTest(f'os.link: {e}')
72
+ else:
73
+ self.target.unlink()
74
+ st = os.stat(self.source)
75
+ copy_file(self.source, self.target, link='hard')
76
+ st2 = os.stat(self.source)
77
+ st3 = os.stat(self.target)
78
+ assert os.path.samestat(st, st2), (st, st2)
79
+ assert os.path.samestat(st2, st3), (st2, st3)
80
+ assert self.source.read_text(encoding='utf-8') == 'some content'
81
+
82
+ def test_copy_file_hard_link_failure(self):
83
+ # If hard linking fails, copy_file() falls back on copying file
84
+ # (some special filesystems don't support hard linking even under
85
+ # Unix, see issue #8876).
86
+ jaraco.path.build({self.source: 'some content'})
87
+ st = os.stat(self.source)
88
+ with mock.patch("os.link", side_effect=OSError(0, "linking unsupported")):
89
+ copy_file(self.source, self.target, link='hard')
90
+ st2 = os.stat(self.source)
91
+ st3 = os.stat(self.target)
92
+ assert os.path.samestat(st, st2), (st, st2)
93
+ assert not os.path.samestat(st2, st3), (st2, st3)
94
+ for fn in (self.source, self.target):
95
+ assert fn.read_text(encoding='utf-8') == 'some content'
@@ -0,0 +1,336 @@
1
+ """Tests for distutils.filelist."""
2
+
3
+ import logging
4
+ import os
5
+ import re
6
+ from distutils import debug, filelist
7
+ from distutils.errors import DistutilsTemplateError
8
+ from distutils.filelist import FileList, glob_to_re, translate_pattern
9
+
10
+ import jaraco.path
11
+ import pytest
12
+
13
+ from .compat import py39 as os_helper
14
+
15
+ MANIFEST_IN = """\
16
+ include ok
17
+ include xo
18
+ exclude xo
19
+ include foo.tmp
20
+ include buildout.cfg
21
+ global-include *.x
22
+ global-include *.txt
23
+ global-exclude *.tmp
24
+ recursive-include f *.oo
25
+ recursive-exclude global *.x
26
+ graft dir
27
+ prune dir3
28
+ """
29
+
30
+
31
+ def make_local_path(s):
32
+ """Converts '/' in a string to os.sep"""
33
+ return s.replace('/', os.sep)
34
+
35
+
36
+ class TestFileList:
37
+ def assertNoWarnings(self, caplog):
38
+ warnings = [rec for rec in caplog.records if rec.levelno == logging.WARNING]
39
+ assert not warnings
40
+ caplog.clear()
41
+
42
+ def assertWarnings(self, caplog):
43
+ warnings = [rec for rec in caplog.records if rec.levelno == logging.WARNING]
44
+ assert warnings
45
+ caplog.clear()
46
+
47
+ def test_glob_to_re(self):
48
+ sep = os.sep
49
+ if os.sep == '\\':
50
+ sep = re.escape(os.sep)
51
+
52
+ for glob, regex in (
53
+ # simple cases
54
+ ('foo*', r'(?s:foo[^%(sep)s]*)\Z'),
55
+ ('foo?', r'(?s:foo[^%(sep)s])\Z'),
56
+ ('foo??', r'(?s:foo[^%(sep)s][^%(sep)s])\Z'),
57
+ # special cases
58
+ (r'foo\\*', r'(?s:foo\\\\[^%(sep)s]*)\Z'),
59
+ (r'foo\\\*', r'(?s:foo\\\\\\[^%(sep)s]*)\Z'),
60
+ ('foo????', r'(?s:foo[^%(sep)s][^%(sep)s][^%(sep)s][^%(sep)s])\Z'),
61
+ (r'foo\\??', r'(?s:foo\\\\[^%(sep)s][^%(sep)s])\Z'),
62
+ ):
63
+ regex = regex % {'sep': sep}
64
+ assert glob_to_re(glob) == regex
65
+
66
+ def test_process_template_line(self):
67
+ # testing all MANIFEST.in template patterns
68
+ file_list = FileList()
69
+ mlp = make_local_path
70
+
71
+ # simulated file list
72
+ file_list.allfiles = [
73
+ 'foo.tmp',
74
+ 'ok',
75
+ 'xo',
76
+ 'four.txt',
77
+ 'buildout.cfg',
78
+ # filelist does not filter out VCS directories,
79
+ # it's sdist that does
80
+ mlp('.hg/last-message.txt'),
81
+ mlp('global/one.txt'),
82
+ mlp('global/two.txt'),
83
+ mlp('global/files.x'),
84
+ mlp('global/here.tmp'),
85
+ mlp('f/o/f.oo'),
86
+ mlp('dir/graft-one'),
87
+ mlp('dir/dir2/graft2'),
88
+ mlp('dir3/ok'),
89
+ mlp('dir3/sub/ok.txt'),
90
+ ]
91
+
92
+ for line in MANIFEST_IN.split('\n'):
93
+ if line.strip() == '':
94
+ continue
95
+ file_list.process_template_line(line)
96
+
97
+ wanted = [
98
+ 'ok',
99
+ 'buildout.cfg',
100
+ 'four.txt',
101
+ mlp('.hg/last-message.txt'),
102
+ mlp('global/one.txt'),
103
+ mlp('global/two.txt'),
104
+ mlp('f/o/f.oo'),
105
+ mlp('dir/graft-one'),
106
+ mlp('dir/dir2/graft2'),
107
+ ]
108
+
109
+ assert file_list.files == wanted
110
+
111
+ def test_debug_print(self, capsys, monkeypatch):
112
+ file_list = FileList()
113
+ file_list.debug_print('xxx')
114
+ assert capsys.readouterr().out == ''
115
+
116
+ monkeypatch.setattr(debug, 'DEBUG', True)
117
+ file_list.debug_print('xxx')
118
+ assert capsys.readouterr().out == 'xxx\n'
119
+
120
+ def test_set_allfiles(self):
121
+ file_list = FileList()
122
+ files = ['a', 'b', 'c']
123
+ file_list.set_allfiles(files)
124
+ assert file_list.allfiles == files
125
+
126
+ def test_remove_duplicates(self):
127
+ file_list = FileList()
128
+ file_list.files = ['a', 'b', 'a', 'g', 'c', 'g']
129
+ # files must be sorted beforehand (sdist does it)
130
+ file_list.sort()
131
+ file_list.remove_duplicates()
132
+ assert file_list.files == ['a', 'b', 'c', 'g']
133
+
134
+ def test_translate_pattern(self):
135
+ # not regex
136
+ assert hasattr(translate_pattern('a', anchor=True, is_regex=False), 'search')
137
+
138
+ # is a regex
139
+ regex = re.compile('a')
140
+ assert translate_pattern(regex, anchor=True, is_regex=True) == regex
141
+
142
+ # plain string flagged as regex
143
+ assert hasattr(translate_pattern('a', anchor=True, is_regex=True), 'search')
144
+
145
+ # glob support
146
+ assert translate_pattern('*.py', anchor=True, is_regex=False).search(
147
+ 'filelist.py'
148
+ )
149
+
150
+ def test_exclude_pattern(self):
151
+ # return False if no match
152
+ file_list = FileList()
153
+ assert not file_list.exclude_pattern('*.py')
154
+
155
+ # return True if files match
156
+ file_list = FileList()
157
+ file_list.files = ['a.py', 'b.py']
158
+ assert file_list.exclude_pattern('*.py')
159
+
160
+ # test excludes
161
+ file_list = FileList()
162
+ file_list.files = ['a.py', 'a.txt']
163
+ file_list.exclude_pattern('*.py')
164
+ assert file_list.files == ['a.txt']
165
+
166
+ def test_include_pattern(self):
167
+ # return False if no match
168
+ file_list = FileList()
169
+ file_list.set_allfiles([])
170
+ assert not file_list.include_pattern('*.py')
171
+
172
+ # return True if files match
173
+ file_list = FileList()
174
+ file_list.set_allfiles(['a.py', 'b.txt'])
175
+ assert file_list.include_pattern('*.py')
176
+
177
+ # test * matches all files
178
+ file_list = FileList()
179
+ assert file_list.allfiles is None
180
+ file_list.set_allfiles(['a.py', 'b.txt'])
181
+ file_list.include_pattern('*')
182
+ assert file_list.allfiles == ['a.py', 'b.txt']
183
+
184
+ def test_process_template(self, caplog):
185
+ mlp = make_local_path
186
+ # invalid lines
187
+ file_list = FileList()
188
+ for action in (
189
+ 'include',
190
+ 'exclude',
191
+ 'global-include',
192
+ 'global-exclude',
193
+ 'recursive-include',
194
+ 'recursive-exclude',
195
+ 'graft',
196
+ 'prune',
197
+ 'blarg',
198
+ ):
199
+ with pytest.raises(DistutilsTemplateError):
200
+ file_list.process_template_line(action)
201
+
202
+ # include
203
+ file_list = FileList()
204
+ file_list.set_allfiles(['a.py', 'b.txt', mlp('d/c.py')])
205
+
206
+ file_list.process_template_line('include *.py')
207
+ assert file_list.files == ['a.py']
208
+ self.assertNoWarnings(caplog)
209
+
210
+ file_list.process_template_line('include *.rb')
211
+ assert file_list.files == ['a.py']
212
+ self.assertWarnings(caplog)
213
+
214
+ # exclude
215
+ file_list = FileList()
216
+ file_list.files = ['a.py', 'b.txt', mlp('d/c.py')]
217
+
218
+ file_list.process_template_line('exclude *.py')
219
+ assert file_list.files == ['b.txt', mlp('d/c.py')]
220
+ self.assertNoWarnings(caplog)
221
+
222
+ file_list.process_template_line('exclude *.rb')
223
+ assert file_list.files == ['b.txt', mlp('d/c.py')]
224
+ self.assertWarnings(caplog)
225
+
226
+ # global-include
227
+ file_list = FileList()
228
+ file_list.set_allfiles(['a.py', 'b.txt', mlp('d/c.py')])
229
+
230
+ file_list.process_template_line('global-include *.py')
231
+ assert file_list.files == ['a.py', mlp('d/c.py')]
232
+ self.assertNoWarnings(caplog)
233
+
234
+ file_list.process_template_line('global-include *.rb')
235
+ assert file_list.files == ['a.py', mlp('d/c.py')]
236
+ self.assertWarnings(caplog)
237
+
238
+ # global-exclude
239
+ file_list = FileList()
240
+ file_list.files = ['a.py', 'b.txt', mlp('d/c.py')]
241
+
242
+ file_list.process_template_line('global-exclude *.py')
243
+ assert file_list.files == ['b.txt']
244
+ self.assertNoWarnings(caplog)
245
+
246
+ file_list.process_template_line('global-exclude *.rb')
247
+ assert file_list.files == ['b.txt']
248
+ self.assertWarnings(caplog)
249
+
250
+ # recursive-include
251
+ file_list = FileList()
252
+ file_list.set_allfiles(['a.py', mlp('d/b.py'), mlp('d/c.txt'), mlp('d/d/e.py')])
253
+
254
+ file_list.process_template_line('recursive-include d *.py')
255
+ assert file_list.files == [mlp('d/b.py'), mlp('d/d/e.py')]
256
+ self.assertNoWarnings(caplog)
257
+
258
+ file_list.process_template_line('recursive-include e *.py')
259
+ assert file_list.files == [mlp('d/b.py'), mlp('d/d/e.py')]
260
+ self.assertWarnings(caplog)
261
+
262
+ # recursive-exclude
263
+ file_list = FileList()
264
+ file_list.files = ['a.py', mlp('d/b.py'), mlp('d/c.txt'), mlp('d/d/e.py')]
265
+
266
+ file_list.process_template_line('recursive-exclude d *.py')
267
+ assert file_list.files == ['a.py', mlp('d/c.txt')]
268
+ self.assertNoWarnings(caplog)
269
+
270
+ file_list.process_template_line('recursive-exclude e *.py')
271
+ assert file_list.files == ['a.py', mlp('d/c.txt')]
272
+ self.assertWarnings(caplog)
273
+
274
+ # graft
275
+ file_list = FileList()
276
+ file_list.set_allfiles(['a.py', mlp('d/b.py'), mlp('d/d/e.py'), mlp('f/f.py')])
277
+
278
+ file_list.process_template_line('graft d')
279
+ assert file_list.files == [mlp('d/b.py'), mlp('d/d/e.py')]
280
+ self.assertNoWarnings(caplog)
281
+
282
+ file_list.process_template_line('graft e')
283
+ assert file_list.files == [mlp('d/b.py'), mlp('d/d/e.py')]
284
+ self.assertWarnings(caplog)
285
+
286
+ # prune
287
+ file_list = FileList()
288
+ file_list.files = ['a.py', mlp('d/b.py'), mlp('d/d/e.py'), mlp('f/f.py')]
289
+
290
+ file_list.process_template_line('prune d')
291
+ assert file_list.files == ['a.py', mlp('f/f.py')]
292
+ self.assertNoWarnings(caplog)
293
+
294
+ file_list.process_template_line('prune e')
295
+ assert file_list.files == ['a.py', mlp('f/f.py')]
296
+ self.assertWarnings(caplog)
297
+
298
+
299
+ class TestFindAll:
300
+ @os_helper.skip_unless_symlink
301
+ def test_missing_symlink(self, temp_cwd):
302
+ os.symlink('foo', 'bar')
303
+ assert filelist.findall() == []
304
+
305
+ def test_basic_discovery(self, temp_cwd):
306
+ """
307
+ When findall is called with no parameters or with
308
+ '.' as the parameter, the dot should be omitted from
309
+ the results.
310
+ """
311
+ jaraco.path.build({'foo': {'file1.txt': ''}, 'bar': {'file2.txt': ''}})
312
+ file1 = os.path.join('foo', 'file1.txt')
313
+ file2 = os.path.join('bar', 'file2.txt')
314
+ expected = [file2, file1]
315
+ assert sorted(filelist.findall()) == expected
316
+
317
+ def test_non_local_discovery(self, tmp_path):
318
+ """
319
+ When findall is called with another path, the full
320
+ path name should be returned.
321
+ """
322
+ jaraco.path.build({'file1.txt': ''}, tmp_path)
323
+ expected = [str(tmp_path / 'file1.txt')]
324
+ assert filelist.findall(tmp_path) == expected
325
+
326
+ @os_helper.skip_unless_symlink
327
+ def test_symlink_loop(self, tmp_path):
328
+ jaraco.path.build(
329
+ {
330
+ 'link-to-parent': jaraco.path.Symlink('.'),
331
+ 'somefile': '',
332
+ },
333
+ tmp_path,
334
+ )
335
+ files = filelist.findall(tmp_path)
336
+ assert len(files) == 1
@@ -0,0 +1,245 @@
1
+ """Tests for distutils.command.install."""
2
+
3
+ import logging
4
+ import os
5
+ import pathlib
6
+ import site
7
+ import sys
8
+ from distutils import sysconfig
9
+ from distutils.command import install as install_module
10
+ from distutils.command.build_ext import build_ext
11
+ from distutils.command.install import INSTALL_SCHEMES, install
12
+ from distutils.core import Distribution
13
+ from distutils.errors import DistutilsOptionError
14
+ from distutils.extension import Extension
15
+ from distutils.tests import missing_compiler_executable, support
16
+ from distutils.util import is_mingw
17
+
18
+ import pytest
19
+
20
+
21
+ def _make_ext_name(modname):
22
+ return modname + sysconfig.get_config_var('EXT_SUFFIX')
23
+
24
+
25
+ @support.combine_markers
26
+ @pytest.mark.usefixtures('save_env')
27
+ class TestInstall(
28
+ support.TempdirManager,
29
+ ):
30
+ @pytest.mark.xfail(
31
+ 'platform.system() == "Windows" and sys.version_info > (3, 11)',
32
+ reason="pypa/distutils#148",
33
+ )
34
+ def test_home_installation_scheme(self):
35
+ # This ensure two things:
36
+ # - that --home generates the desired set of directory names
37
+ # - test --home is supported on all platforms
38
+ builddir = self.mkdtemp()
39
+ destination = os.path.join(builddir, "installation")
40
+
41
+ dist = Distribution({"name": "foopkg"})
42
+ # script_name need not exist, it just need to be initialized
43
+ dist.script_name = os.path.join(builddir, "setup.py")
44
+ dist.command_obj["build"] = support.DummyCommand(
45
+ build_base=builddir,
46
+ build_lib=os.path.join(builddir, "lib"),
47
+ )
48
+
49
+ cmd = install(dist)
50
+ cmd.home = destination
51
+ cmd.ensure_finalized()
52
+
53
+ assert cmd.install_base == destination
54
+ assert cmd.install_platbase == destination
55
+
56
+ def check_path(got, expected):
57
+ got = os.path.normpath(got)
58
+ expected = os.path.normpath(expected)
59
+ assert got == expected
60
+
61
+ impl_name = sys.implementation.name.replace("cpython", "python")
62
+ libdir = os.path.join(destination, "lib", impl_name)
63
+ check_path(cmd.install_lib, libdir)
64
+ _platlibdir = getattr(sys, "platlibdir", "lib")
65
+ platlibdir = os.path.join(destination, _platlibdir, impl_name)
66
+ check_path(cmd.install_platlib, platlibdir)
67
+ check_path(cmd.install_purelib, libdir)
68
+ check_path(
69
+ cmd.install_headers,
70
+ os.path.join(destination, "include", impl_name, "foopkg"),
71
+ )
72
+ check_path(cmd.install_scripts, os.path.join(destination, "bin"))
73
+ check_path(cmd.install_data, destination)
74
+
75
+ def test_user_site(self, monkeypatch):
76
+ # test install with --user
77
+ # preparing the environment for the test
78
+ self.tmpdir = self.mkdtemp()
79
+ orig_site = site.USER_SITE
80
+ orig_base = site.USER_BASE
81
+ monkeypatch.setattr(site, 'USER_BASE', os.path.join(self.tmpdir, 'B'))
82
+ monkeypatch.setattr(site, 'USER_SITE', os.path.join(self.tmpdir, 'S'))
83
+ monkeypatch.setattr(install_module, 'USER_BASE', site.USER_BASE)
84
+ monkeypatch.setattr(install_module, 'USER_SITE', site.USER_SITE)
85
+
86
+ def _expanduser(path):
87
+ if path.startswith('~'):
88
+ return os.path.normpath(self.tmpdir + path[1:])
89
+ return path
90
+
91
+ monkeypatch.setattr(os.path, 'expanduser', _expanduser)
92
+
93
+ for key in ('nt_user', 'posix_user'):
94
+ assert key in INSTALL_SCHEMES
95
+
96
+ dist = Distribution({'name': 'xx'})
97
+ cmd = install(dist)
98
+
99
+ # making sure the user option is there
100
+ options = [name for name, short, label in cmd.user_options]
101
+ assert 'user' in options
102
+
103
+ # setting a value
104
+ cmd.user = True
105
+
106
+ # user base and site shouldn't be created yet
107
+ assert not os.path.exists(site.USER_BASE)
108
+ assert not os.path.exists(site.USER_SITE)
109
+
110
+ # let's run finalize
111
+ cmd.ensure_finalized()
112
+
113
+ # now they should
114
+ assert os.path.exists(site.USER_BASE)
115
+ assert os.path.exists(site.USER_SITE)
116
+
117
+ assert 'userbase' in cmd.config_vars
118
+ assert 'usersite' in cmd.config_vars
119
+
120
+ actual_headers = os.path.relpath(cmd.install_headers, site.USER_BASE)
121
+ if os.name == 'nt' and not is_mingw():
122
+ site_path = os.path.relpath(os.path.dirname(orig_site), orig_base)
123
+ include = os.path.join(site_path, 'Include')
124
+ else:
125
+ include = sysconfig.get_python_inc(0, '')
126
+ expect_headers = os.path.join(include, 'xx')
127
+
128
+ assert os.path.normcase(actual_headers) == os.path.normcase(expect_headers)
129
+
130
+ def test_handle_extra_path(self):
131
+ dist = Distribution({'name': 'xx', 'extra_path': 'path,dirs'})
132
+ cmd = install(dist)
133
+
134
+ # two elements
135
+ cmd.handle_extra_path()
136
+ assert cmd.extra_path == ['path', 'dirs']
137
+ assert cmd.extra_dirs == 'dirs'
138
+ assert cmd.path_file == 'path'
139
+
140
+ # one element
141
+ cmd.extra_path = ['path']
142
+ cmd.handle_extra_path()
143
+ assert cmd.extra_path == ['path']
144
+ assert cmd.extra_dirs == 'path'
145
+ assert cmd.path_file == 'path'
146
+
147
+ # none
148
+ dist.extra_path = cmd.extra_path = None
149
+ cmd.handle_extra_path()
150
+ assert cmd.extra_path is None
151
+ assert cmd.extra_dirs == ''
152
+ assert cmd.path_file is None
153
+
154
+ # three elements (no way !)
155
+ cmd.extra_path = 'path,dirs,again'
156
+ with pytest.raises(DistutilsOptionError):
157
+ cmd.handle_extra_path()
158
+
159
+ def test_finalize_options(self):
160
+ dist = Distribution({'name': 'xx'})
161
+ cmd = install(dist)
162
+
163
+ # must supply either prefix/exec-prefix/home or
164
+ # install-base/install-platbase -- not both
165
+ cmd.prefix = 'prefix'
166
+ cmd.install_base = 'base'
167
+ with pytest.raises(DistutilsOptionError):
168
+ cmd.finalize_options()
169
+
170
+ # must supply either home or prefix/exec-prefix -- not both
171
+ cmd.install_base = None
172
+ cmd.home = 'home'
173
+ with pytest.raises(DistutilsOptionError):
174
+ cmd.finalize_options()
175
+
176
+ # can't combine user with prefix/exec_prefix/home or
177
+ # install_(plat)base
178
+ cmd.prefix = None
179
+ cmd.user = 'user'
180
+ with pytest.raises(DistutilsOptionError):
181
+ cmd.finalize_options()
182
+
183
+ def test_record(self):
184
+ install_dir = self.mkdtemp()
185
+ project_dir, dist = self.create_dist(py_modules=['hello'], scripts=['sayhi'])
186
+ os.chdir(project_dir)
187
+ self.write_file('hello.py', "def main(): print('o hai')")
188
+ self.write_file('sayhi', 'from hello import main; main()')
189
+
190
+ cmd = install(dist)
191
+ dist.command_obj['install'] = cmd
192
+ cmd.root = install_dir
193
+ cmd.record = os.path.join(project_dir, 'filelist')
194
+ cmd.ensure_finalized()
195
+ cmd.run()
196
+
197
+ content = pathlib.Path(cmd.record).read_text(encoding='utf-8')
198
+
199
+ found = [pathlib.Path(line).name for line in content.splitlines()]
200
+ expected = [
201
+ 'hello.py',
202
+ f'hello.{sys.implementation.cache_tag}.pyc',
203
+ 'sayhi',
204
+ 'UNKNOWN-0.0.0-py{}.{}.egg-info'.format(*sys.version_info[:2]),
205
+ ]
206
+ assert found == expected
207
+
208
+ def test_record_extensions(self):
209
+ cmd = missing_compiler_executable()
210
+ if cmd is not None:
211
+ pytest.skip(f'The {cmd!r} command is not found')
212
+ install_dir = self.mkdtemp()
213
+ project_dir, dist = self.create_dist(
214
+ ext_modules=[Extension('xx', ['xxmodule.c'])]
215
+ )
216
+ os.chdir(project_dir)
217
+ support.copy_xxmodule_c(project_dir)
218
+
219
+ buildextcmd = build_ext(dist)
220
+ support.fixup_build_ext(buildextcmd)
221
+ buildextcmd.ensure_finalized()
222
+
223
+ cmd = install(dist)
224
+ dist.command_obj['install'] = cmd
225
+ dist.command_obj['build_ext'] = buildextcmd
226
+ cmd.root = install_dir
227
+ cmd.record = os.path.join(project_dir, 'filelist')
228
+ cmd.ensure_finalized()
229
+ cmd.run()
230
+
231
+ content = pathlib.Path(cmd.record).read_text(encoding='utf-8')
232
+
233
+ found = [pathlib.Path(line).name for line in content.splitlines()]
234
+ expected = [
235
+ _make_ext_name('xx'),
236
+ 'UNKNOWN-0.0.0-py{}.{}.egg-info'.format(*sys.version_info[:2]),
237
+ ]
238
+ assert found == expected
239
+
240
+ def test_debug_mode(self, caplog, monkeypatch):
241
+ # this covers the code called when DEBUG is set
242
+ monkeypatch.setattr(install_module, 'DEBUG', True)
243
+ caplog.set_level(logging.DEBUG)
244
+ self.test_record()
245
+ assert any(rec for rec in caplog.records if rec.levelno == logging.DEBUG)