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,319 @@
1
+ """Tests for distutils.sysconfig."""
2
+
3
+ import contextlib
4
+ import distutils
5
+ import os
6
+ import pathlib
7
+ import subprocess
8
+ import sys
9
+ from distutils import sysconfig
10
+ from distutils.ccompiler import new_compiler # noqa: F401
11
+ from distutils.unixccompiler import UnixCCompiler
12
+
13
+ import jaraco.envs
14
+ import path
15
+ import pytest
16
+ from jaraco.text import trim
17
+ from test.support import swap_item
18
+
19
+
20
+ def _gen_makefile(root, contents):
21
+ jaraco.path.build({'Makefile': trim(contents)}, root)
22
+ return root / 'Makefile'
23
+
24
+
25
+ @pytest.mark.usefixtures('save_env')
26
+ class TestSysconfig:
27
+ def test_get_config_h_filename(self):
28
+ config_h = sysconfig.get_config_h_filename()
29
+ assert os.path.isfile(config_h)
30
+
31
+ @pytest.mark.skipif("platform.system() == 'Windows'")
32
+ @pytest.mark.skipif("sys.implementation.name != 'cpython'")
33
+ def test_get_makefile_filename(self):
34
+ makefile = sysconfig.get_makefile_filename()
35
+ assert os.path.isfile(makefile)
36
+
37
+ def test_get_python_lib(self, tmp_path):
38
+ assert sysconfig.get_python_lib() != sysconfig.get_python_lib(prefix=tmp_path)
39
+
40
+ def test_get_config_vars(self):
41
+ cvars = sysconfig.get_config_vars()
42
+ assert isinstance(cvars, dict)
43
+ assert cvars
44
+
45
+ @pytest.mark.skipif('sysconfig.IS_PYPY')
46
+ @pytest.mark.skipif('sysconfig.python_build')
47
+ @pytest.mark.xfail('platform.system() == "Windows"')
48
+ def test_srcdir_simple(self):
49
+ # See #15364.
50
+ srcdir = pathlib.Path(sysconfig.get_config_var('srcdir'))
51
+
52
+ assert srcdir.absolute()
53
+ assert srcdir.is_dir()
54
+
55
+ makefile = pathlib.Path(sysconfig.get_makefile_filename())
56
+ assert makefile.parent.samefile(srcdir)
57
+
58
+ @pytest.mark.skipif('sysconfig.IS_PYPY')
59
+ @pytest.mark.skipif('not sysconfig.python_build')
60
+ def test_srcdir_python_build(self):
61
+ # See #15364.
62
+ srcdir = pathlib.Path(sysconfig.get_config_var('srcdir'))
63
+
64
+ # The python executable has not been installed so srcdir
65
+ # should be a full source checkout.
66
+ Python_h = srcdir.joinpath('Include', 'Python.h')
67
+ assert Python_h.is_file()
68
+ assert sysconfig._is_python_source_dir(srcdir)
69
+ assert sysconfig._is_python_source_dir(str(srcdir))
70
+
71
+ def test_srcdir_independent_of_cwd(self):
72
+ """
73
+ srcdir should be independent of the current working directory
74
+ """
75
+ # See #15364.
76
+ srcdir = sysconfig.get_config_var('srcdir')
77
+ with path.Path('..'):
78
+ srcdir2 = sysconfig.get_config_var('srcdir')
79
+ assert srcdir == srcdir2
80
+
81
+ def customize_compiler(self):
82
+ # make sure AR gets caught
83
+ class compiler:
84
+ compiler_type = 'unix'
85
+ executables = UnixCCompiler.executables
86
+
87
+ def __init__(self):
88
+ self.exes = {}
89
+
90
+ def set_executables(self, **kw):
91
+ for k, v in kw.items():
92
+ self.exes[k] = v
93
+
94
+ sysconfig_vars = {
95
+ 'AR': 'sc_ar',
96
+ 'CC': 'sc_cc',
97
+ 'CXX': 'sc_cxx',
98
+ 'ARFLAGS': '--sc-arflags',
99
+ 'CFLAGS': '--sc-cflags',
100
+ 'CCSHARED': '--sc-ccshared',
101
+ 'LDSHARED': 'sc_ldshared',
102
+ 'SHLIB_SUFFIX': 'sc_shutil_suffix',
103
+ }
104
+
105
+ comp = compiler()
106
+ with contextlib.ExitStack() as cm:
107
+ for key, value in sysconfig_vars.items():
108
+ cm.enter_context(swap_item(sysconfig._config_vars, key, value))
109
+ sysconfig.customize_compiler(comp)
110
+
111
+ return comp
112
+
113
+ @pytest.mark.skipif("not isinstance(new_compiler(), UnixCCompiler)")
114
+ @pytest.mark.usefixtures('disable_macos_customization')
115
+ def test_customize_compiler(self):
116
+ # Make sure that sysconfig._config_vars is initialized
117
+ sysconfig.get_config_vars()
118
+
119
+ os.environ['AR'] = 'env_ar'
120
+ os.environ['CC'] = 'env_cc'
121
+ os.environ['CPP'] = 'env_cpp'
122
+ os.environ['CXX'] = 'env_cxx --env-cxx-flags'
123
+ os.environ['LDSHARED'] = 'env_ldshared'
124
+ os.environ['LDFLAGS'] = '--env-ldflags'
125
+ os.environ['ARFLAGS'] = '--env-arflags'
126
+ os.environ['CFLAGS'] = '--env-cflags'
127
+ os.environ['CPPFLAGS'] = '--env-cppflags'
128
+ os.environ['RANLIB'] = 'env_ranlib'
129
+
130
+ comp = self.customize_compiler()
131
+ assert comp.exes['archiver'] == 'env_ar --env-arflags'
132
+ assert comp.exes['preprocessor'] == 'env_cpp --env-cppflags'
133
+ assert comp.exes['compiler'] == 'env_cc --env-cflags --env-cppflags'
134
+ assert comp.exes['compiler_so'] == (
135
+ 'env_cc --env-cflags --env-cppflags --sc-ccshared'
136
+ )
137
+ assert (
138
+ comp.exes['compiler_cxx']
139
+ == 'env_cxx --env-cxx-flags --sc-cflags --env-cppflags'
140
+ )
141
+ assert comp.exes['linker_exe'] == 'env_cc'
142
+ assert comp.exes['linker_so'] == (
143
+ 'env_ldshared --env-ldflags --env-cflags --env-cppflags'
144
+ )
145
+ assert comp.shared_lib_extension == 'sc_shutil_suffix'
146
+
147
+ if sys.platform == "darwin":
148
+ assert comp.exes['ranlib'] == 'env_ranlib'
149
+ else:
150
+ assert 'ranlib' not in comp.exes
151
+
152
+ del os.environ['AR']
153
+ del os.environ['CC']
154
+ del os.environ['CPP']
155
+ del os.environ['CXX']
156
+ del os.environ['LDSHARED']
157
+ del os.environ['LDFLAGS']
158
+ del os.environ['ARFLAGS']
159
+ del os.environ['CFLAGS']
160
+ del os.environ['CPPFLAGS']
161
+ del os.environ['RANLIB']
162
+
163
+ comp = self.customize_compiler()
164
+ assert comp.exes['archiver'] == 'sc_ar --sc-arflags'
165
+ assert comp.exes['preprocessor'] == 'sc_cc -E'
166
+ assert comp.exes['compiler'] == 'sc_cc --sc-cflags'
167
+ assert comp.exes['compiler_so'] == 'sc_cc --sc-cflags --sc-ccshared'
168
+ assert comp.exes['compiler_cxx'] == 'sc_cxx --sc-cflags'
169
+ assert comp.exes['linker_exe'] == 'sc_cc'
170
+ assert comp.exes['linker_so'] == 'sc_ldshared'
171
+ assert comp.shared_lib_extension == 'sc_shutil_suffix'
172
+ assert 'ranlib' not in comp.exes
173
+
174
+ def test_parse_makefile_base(self, tmp_path):
175
+ makefile = _gen_makefile(
176
+ tmp_path,
177
+ """
178
+ CONFIG_ARGS= '--arg1=optarg1' 'ENV=LIB'
179
+ VAR=$OTHER
180
+ OTHER=foo
181
+ """,
182
+ )
183
+ d = sysconfig.parse_makefile(makefile)
184
+ assert d == {'CONFIG_ARGS': "'--arg1=optarg1' 'ENV=LIB'", 'OTHER': 'foo'}
185
+
186
+ def test_parse_makefile_literal_dollar(self, tmp_path):
187
+ makefile = _gen_makefile(
188
+ tmp_path,
189
+ """
190
+ CONFIG_ARGS= '--arg1=optarg1' 'ENV=\\$$LIB'
191
+ VAR=$OTHER
192
+ OTHER=foo
193
+ """,
194
+ )
195
+ d = sysconfig.parse_makefile(makefile)
196
+ assert d == {'CONFIG_ARGS': r"'--arg1=optarg1' 'ENV=\$LIB'", 'OTHER': 'foo'}
197
+
198
+ def test_sysconfig_module(self):
199
+ import sysconfig as global_sysconfig
200
+
201
+ assert global_sysconfig.get_config_var('CFLAGS') == sysconfig.get_config_var(
202
+ 'CFLAGS'
203
+ )
204
+ assert global_sysconfig.get_config_var('LDFLAGS') == sysconfig.get_config_var(
205
+ 'LDFLAGS'
206
+ )
207
+
208
+ # On macOS, binary installers support extension module building on
209
+ # various levels of the operating system with differing Xcode
210
+ # configurations, requiring customization of some of the
211
+ # compiler configuration directives to suit the environment on
212
+ # the installed machine. Some of these customizations may require
213
+ # running external programs and are thus deferred until needed by
214
+ # the first extension module build. Only
215
+ # the Distutils version of sysconfig is used for extension module
216
+ # builds, which happens earlier in the Distutils tests. This may
217
+ # cause the following tests to fail since no tests have caused
218
+ # the global version of sysconfig to call the customization yet.
219
+ # The solution for now is to simply skip this test in this case.
220
+ # The longer-term solution is to only have one version of sysconfig.
221
+ @pytest.mark.skipif("sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER')")
222
+ def test_sysconfig_compiler_vars(self):
223
+ import sysconfig as global_sysconfig
224
+
225
+ if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'):
226
+ pytest.skip('compiler flags customized')
227
+ assert global_sysconfig.get_config_var('LDSHARED') == sysconfig.get_config_var(
228
+ 'LDSHARED'
229
+ )
230
+ assert global_sysconfig.get_config_var('CC') == sysconfig.get_config_var('CC')
231
+
232
+ @pytest.mark.skipif("not sysconfig.get_config_var('EXT_SUFFIX')")
233
+ def test_SO_deprecation(self):
234
+ with pytest.warns(DeprecationWarning):
235
+ sysconfig.get_config_var('SO')
236
+
237
+ def test_customize_compiler_before_get_config_vars(self, tmp_path):
238
+ # Issue #21923: test that a Distribution compiler
239
+ # instance can be called without an explicit call to
240
+ # get_config_vars().
241
+ jaraco.path.build(
242
+ {
243
+ 'file': trim("""
244
+ from distutils.core import Distribution
245
+ config = Distribution().get_command_obj('config')
246
+ # try_compile may pass or it may fail if no compiler
247
+ # is found but it should not raise an exception.
248
+ rc = config.try_compile('int x;')
249
+ """)
250
+ },
251
+ tmp_path,
252
+ )
253
+ p = subprocess.Popen(
254
+ [sys.executable, tmp_path / 'file'],
255
+ stdout=subprocess.PIPE,
256
+ stderr=subprocess.STDOUT,
257
+ universal_newlines=True,
258
+ encoding='utf-8',
259
+ )
260
+ outs, errs = p.communicate()
261
+ assert 0 == p.returncode, "Subprocess failed: " + outs
262
+
263
+ def test_parse_config_h(self):
264
+ config_h = sysconfig.get_config_h_filename()
265
+ input = {}
266
+ with open(config_h, encoding="utf-8") as f:
267
+ result = sysconfig.parse_config_h(f, g=input)
268
+ assert input is result
269
+ with open(config_h, encoding="utf-8") as f:
270
+ result = sysconfig.parse_config_h(f)
271
+ assert isinstance(result, dict)
272
+
273
+ @pytest.mark.skipif("platform.system() != 'Windows'")
274
+ @pytest.mark.skipif("sys.implementation.name != 'cpython'")
275
+ def test_win_ext_suffix(self):
276
+ assert sysconfig.get_config_var("EXT_SUFFIX").endswith(".pyd")
277
+ assert sysconfig.get_config_var("EXT_SUFFIX") != ".pyd"
278
+
279
+ @pytest.mark.skipif("platform.system() != 'Windows'")
280
+ @pytest.mark.skipif("sys.implementation.name != 'cpython'")
281
+ @pytest.mark.skipif(
282
+ '\\PCbuild\\'.casefold() not in sys.executable.casefold(),
283
+ reason='Need sys.executable to be in a source tree',
284
+ )
285
+ def test_win_build_venv_from_source_tree(self, tmp_path):
286
+ """Ensure distutils.sysconfig detects venvs from source tree builds."""
287
+ env = jaraco.envs.VEnv()
288
+ env.create_opts = env.clean_opts
289
+ env.root = tmp_path
290
+ env.ensure_env()
291
+ cmd = [
292
+ env.exe(),
293
+ "-c",
294
+ "import distutils.sysconfig; print(distutils.sysconfig.python_build)",
295
+ ]
296
+ distutils_path = os.path.dirname(os.path.dirname(distutils.__file__))
297
+ out = subprocess.check_output(
298
+ cmd, env={**os.environ, "PYTHONPATH": distutils_path}
299
+ )
300
+ assert out == "True"
301
+
302
+ def test_get_python_inc_missing_config_dir(self, monkeypatch):
303
+ """
304
+ In portable Python installations, the sysconfig will be broken,
305
+ pointing to the directories where the installation was built and
306
+ not where it currently is. In this case, ensure that the missing
307
+ directory isn't used for get_python_inc.
308
+
309
+ See pypa/distutils#178.
310
+ """
311
+
312
+ def override(name):
313
+ if name == 'INCLUDEPY':
314
+ return '/does-not-exist'
315
+ return sysconfig.get_config_var(name)
316
+
317
+ monkeypatch.setattr(sysconfig, 'get_config_var', override)
318
+
319
+ assert os.path.exists(sysconfig.get_python_inc())
@@ -0,0 +1,127 @@
1
+ """Tests for distutils.text_file."""
2
+
3
+ from distutils.tests import support
4
+ from distutils.text_file import TextFile
5
+
6
+ import jaraco.path
7
+ import path
8
+
9
+ TEST_DATA = """# test file
10
+
11
+ line 3 \\
12
+ # intervening comment
13
+ continues on next line
14
+ """
15
+
16
+
17
+ class TestTextFile(support.TempdirManager):
18
+ def test_class(self):
19
+ # old tests moved from text_file.__main__
20
+ # so they are really called by the buildbots
21
+
22
+ # result 1: no fancy options
23
+ result1 = [
24
+ '# test file\n',
25
+ '\n',
26
+ 'line 3 \\\n',
27
+ '# intervening comment\n',
28
+ ' continues on next line\n',
29
+ ]
30
+
31
+ # result 2: just strip comments
32
+ result2 = ["\n", "line 3 \\\n", " continues on next line\n"]
33
+
34
+ # result 3: just strip blank lines
35
+ result3 = [
36
+ "# test file\n",
37
+ "line 3 \\\n",
38
+ "# intervening comment\n",
39
+ " continues on next line\n",
40
+ ]
41
+
42
+ # result 4: default, strip comments, blank lines,
43
+ # and trailing whitespace
44
+ result4 = ["line 3 \\", " continues on next line"]
45
+
46
+ # result 5: strip comments and blanks, plus join lines (but don't
47
+ # "collapse" joined lines
48
+ result5 = ["line 3 continues on next line"]
49
+
50
+ # result 6: strip comments and blanks, plus join lines (and
51
+ # "collapse" joined lines
52
+ result6 = ["line 3 continues on next line"]
53
+
54
+ def test_input(count, description, file, expected_result):
55
+ result = file.readlines()
56
+ assert result == expected_result
57
+
58
+ tmp_path = path.Path(self.mkdtemp())
59
+ filename = tmp_path / 'test.txt'
60
+ jaraco.path.build({filename.name: TEST_DATA}, tmp_path)
61
+
62
+ in_file = TextFile(
63
+ filename,
64
+ strip_comments=False,
65
+ skip_blanks=False,
66
+ lstrip_ws=False,
67
+ rstrip_ws=False,
68
+ )
69
+ try:
70
+ test_input(1, "no processing", in_file, result1)
71
+ finally:
72
+ in_file.close()
73
+
74
+ in_file = TextFile(
75
+ filename,
76
+ strip_comments=True,
77
+ skip_blanks=False,
78
+ lstrip_ws=False,
79
+ rstrip_ws=False,
80
+ )
81
+ try:
82
+ test_input(2, "strip comments", in_file, result2)
83
+ finally:
84
+ in_file.close()
85
+
86
+ in_file = TextFile(
87
+ filename,
88
+ strip_comments=False,
89
+ skip_blanks=True,
90
+ lstrip_ws=False,
91
+ rstrip_ws=False,
92
+ )
93
+ try:
94
+ test_input(3, "strip blanks", in_file, result3)
95
+ finally:
96
+ in_file.close()
97
+
98
+ in_file = TextFile(filename)
99
+ try:
100
+ test_input(4, "default processing", in_file, result4)
101
+ finally:
102
+ in_file.close()
103
+
104
+ in_file = TextFile(
105
+ filename,
106
+ strip_comments=True,
107
+ skip_blanks=True,
108
+ join_lines=True,
109
+ rstrip_ws=True,
110
+ )
111
+ try:
112
+ test_input(5, "join lines without collapsing", in_file, result5)
113
+ finally:
114
+ in_file.close()
115
+
116
+ in_file = TextFile(
117
+ filename,
118
+ strip_comments=True,
119
+ skip_blanks=True,
120
+ join_lines=True,
121
+ rstrip_ws=True,
122
+ collapse_join=True,
123
+ )
124
+ try:
125
+ test_input(6, "join lines with collapsing", in_file, result6)
126
+ finally:
127
+ in_file.close()
@@ -0,0 +1,243 @@
1
+ """Tests for distutils.util."""
2
+
3
+ import email
4
+ import email.generator
5
+ import email.policy
6
+ import io
7
+ import os
8
+ import pathlib
9
+ import sys
10
+ import sysconfig as stdlib_sysconfig
11
+ import unittest.mock as mock
12
+ from copy import copy
13
+ from distutils import sysconfig, util
14
+ from distutils.errors import DistutilsByteCompileError, DistutilsPlatformError
15
+ from distutils.util import (
16
+ byte_compile,
17
+ change_root,
18
+ check_environ,
19
+ convert_path,
20
+ get_host_platform,
21
+ get_platform,
22
+ grok_environment_error,
23
+ rfc822_escape,
24
+ split_quoted,
25
+ strtobool,
26
+ )
27
+
28
+ import pytest
29
+
30
+
31
+ @pytest.fixture(autouse=True)
32
+ def environment(monkeypatch):
33
+ monkeypatch.setattr(os, 'name', os.name)
34
+ monkeypatch.setattr(sys, 'platform', sys.platform)
35
+ monkeypatch.setattr(sys, 'version', sys.version)
36
+ monkeypatch.setattr(os, 'sep', os.sep)
37
+ monkeypatch.setattr(os.path, 'join', os.path.join)
38
+ monkeypatch.setattr(os.path, 'isabs', os.path.isabs)
39
+ monkeypatch.setattr(os.path, 'splitdrive', os.path.splitdrive)
40
+ monkeypatch.setattr(sysconfig, '_config_vars', copy(sysconfig._config_vars))
41
+
42
+
43
+ @pytest.mark.usefixtures('save_env')
44
+ class TestUtil:
45
+ def test_get_host_platform(self):
46
+ with mock.patch('os.name', 'nt'):
47
+ with mock.patch('sys.version', '... [... (ARM64)]'):
48
+ assert get_host_platform() == 'win-arm64'
49
+ with mock.patch('sys.version', '... [... (ARM)]'):
50
+ assert get_host_platform() == 'win-arm32'
51
+
52
+ with mock.patch('sys.version_info', (3, 9, 0, 'final', 0)):
53
+ assert get_host_platform() == stdlib_sysconfig.get_platform()
54
+
55
+ def test_get_platform(self):
56
+ with mock.patch('os.name', 'nt'):
57
+ with mock.patch.dict('os.environ', {'VSCMD_ARG_TGT_ARCH': 'x86'}):
58
+ assert get_platform() == 'win32'
59
+ with mock.patch.dict('os.environ', {'VSCMD_ARG_TGT_ARCH': 'x64'}):
60
+ assert get_platform() == 'win-amd64'
61
+ with mock.patch.dict('os.environ', {'VSCMD_ARG_TGT_ARCH': 'arm'}):
62
+ assert get_platform() == 'win-arm32'
63
+ with mock.patch.dict('os.environ', {'VSCMD_ARG_TGT_ARCH': 'arm64'}):
64
+ assert get_platform() == 'win-arm64'
65
+
66
+ def test_convert_path(self):
67
+ expected = os.sep.join(('', 'home', 'to', 'my', 'stuff'))
68
+ assert convert_path('/home/to/my/stuff') == expected
69
+ assert convert_path(pathlib.Path('/home/to/my/stuff')) == expected
70
+ assert convert_path('.') == os.curdir
71
+
72
+ def test_change_root(self):
73
+ # linux/mac
74
+ os.name = 'posix'
75
+
76
+ def _isabs(path):
77
+ return path[0] == '/'
78
+
79
+ os.path.isabs = _isabs
80
+
81
+ def _join(*path):
82
+ return '/'.join(path)
83
+
84
+ os.path.join = _join
85
+
86
+ assert change_root('/root', '/old/its/here') == '/root/old/its/here'
87
+ assert change_root('/root', 'its/here') == '/root/its/here'
88
+
89
+ # windows
90
+ os.name = 'nt'
91
+ os.sep = '\\'
92
+
93
+ def _isabs(path):
94
+ return path.startswith('c:\\')
95
+
96
+ os.path.isabs = _isabs
97
+
98
+ def _splitdrive(path):
99
+ if path.startswith('c:'):
100
+ return ('', path.replace('c:', ''))
101
+ return ('', path)
102
+
103
+ os.path.splitdrive = _splitdrive
104
+
105
+ def _join(*path):
106
+ return '\\'.join(path)
107
+
108
+ os.path.join = _join
109
+
110
+ assert (
111
+ change_root('c:\\root', 'c:\\old\\its\\here') == 'c:\\root\\old\\its\\here'
112
+ )
113
+ assert change_root('c:\\root', 'its\\here') == 'c:\\root\\its\\here'
114
+
115
+ # BugsBunny os (it's a great os)
116
+ os.name = 'BugsBunny'
117
+ with pytest.raises(DistutilsPlatformError):
118
+ change_root('c:\\root', 'its\\here')
119
+
120
+ # XXX platforms to be covered: mac
121
+
122
+ def test_check_environ(self):
123
+ util.check_environ.cache_clear()
124
+ os.environ.pop('HOME', None)
125
+
126
+ check_environ()
127
+
128
+ assert os.environ['PLAT'] == get_platform()
129
+
130
+ @pytest.mark.skipif("os.name != 'posix'")
131
+ def test_check_environ_getpwuid(self):
132
+ util.check_environ.cache_clear()
133
+ os.environ.pop('HOME', None)
134
+
135
+ import pwd
136
+
137
+ # only set pw_dir field, other fields are not used
138
+ result = pwd.struct_passwd((
139
+ None,
140
+ None,
141
+ None,
142
+ None,
143
+ None,
144
+ '/home/distutils',
145
+ None,
146
+ ))
147
+ with mock.patch.object(pwd, 'getpwuid', return_value=result):
148
+ check_environ()
149
+ assert os.environ['HOME'] == '/home/distutils'
150
+
151
+ util.check_environ.cache_clear()
152
+ os.environ.pop('HOME', None)
153
+
154
+ # bpo-10496: Catch pwd.getpwuid() error
155
+ with mock.patch.object(pwd, 'getpwuid', side_effect=KeyError):
156
+ check_environ()
157
+ assert 'HOME' not in os.environ
158
+
159
+ def test_split_quoted(self):
160
+ assert split_quoted('""one"" "two" \'three\' \\four') == [
161
+ 'one',
162
+ 'two',
163
+ 'three',
164
+ 'four',
165
+ ]
166
+
167
+ def test_strtobool(self):
168
+ yes = ('y', 'Y', 'yes', 'True', 't', 'true', 'True', 'On', 'on', '1')
169
+ no = ('n', 'no', 'f', 'false', 'off', '0', 'Off', 'No', 'N')
170
+
171
+ for y in yes:
172
+ assert strtobool(y)
173
+
174
+ for n in no:
175
+ assert not strtobool(n)
176
+
177
+ indent = 8 * ' '
178
+
179
+ @pytest.mark.parametrize(
180
+ "given,wanted",
181
+ [
182
+ # 0x0b, 0x0c, ..., etc are also considered a line break by Python
183
+ ("hello\x0b\nworld\n", f"hello\x0b{indent}\n{indent}world\n{indent}"),
184
+ ("hello\x1eworld", f"hello\x1e{indent}world"),
185
+ ("", ""),
186
+ (
187
+ "I am a\npoor\nlonesome\nheader\n",
188
+ f"I am a\n{indent}poor\n{indent}lonesome\n{indent}header\n{indent}",
189
+ ),
190
+ ],
191
+ )
192
+ def test_rfc822_escape(self, given, wanted):
193
+ """
194
+ We want to ensure a multi-line header parses correctly.
195
+
196
+ For interoperability, the escaped value should also "round-trip" over
197
+ `email.generator.Generator.flatten` and `email.message_from_*`
198
+ (see pypa/setuptools#4033).
199
+
200
+ The main issue is that internally `email.policy.EmailPolicy` uses
201
+ `splitlines` which will split on some control chars. If all the new lines
202
+ are not prefixed with spaces, the parser will interrupt reading
203
+ the current header and produce an incomplete value, while
204
+ incorrectly interpreting the rest of the headers as part of the payload.
205
+ """
206
+ res = rfc822_escape(given)
207
+
208
+ policy = email.policy.EmailPolicy(
209
+ utf8=True,
210
+ mangle_from_=False,
211
+ max_line_length=0,
212
+ )
213
+ with io.StringIO() as buffer:
214
+ raw = f"header: {res}\nother-header: 42\n\npayload\n"
215
+ orig = email.message_from_string(raw)
216
+ email.generator.Generator(buffer, policy=policy).flatten(orig)
217
+ buffer.seek(0)
218
+ regen = email.message_from_file(buffer)
219
+
220
+ for msg in (orig, regen):
221
+ assert msg.get_payload() == "payload\n"
222
+ assert msg["other-header"] == "42"
223
+ # Generator may replace control chars with `\n`
224
+ assert set(msg["header"].splitlines()) == set(res.splitlines())
225
+
226
+ assert res == wanted
227
+
228
+ def test_dont_write_bytecode(self):
229
+ # makes sure byte_compile raise a DistutilsError
230
+ # if sys.dont_write_bytecode is True
231
+ old_dont_write_bytecode = sys.dont_write_bytecode
232
+ sys.dont_write_bytecode = True
233
+ try:
234
+ with pytest.raises(DistutilsByteCompileError):
235
+ byte_compile([])
236
+ finally:
237
+ sys.dont_write_bytecode = old_dont_write_bytecode
238
+
239
+ def test_grok_environment_error(self):
240
+ # test obsolete function to ensure backward compat (#4931)
241
+ exc = OSError("Unable to find batch file")
242
+ msg = grok_environment_error(exc)
243
+ assert msg == "error: Unable to find batch file"