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,361 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import re
5
+ import shlex
6
+ import shutil
7
+ import struct
8
+ import subprocess
9
+ import sys
10
+ import textwrap
11
+ from collections.abc import Iterable
12
+ from typing import TYPE_CHECKING, TypedDict
13
+
14
+ from ._importlib import metadata, resources
15
+
16
+ if TYPE_CHECKING:
17
+ from typing_extensions import Self
18
+
19
+ from .warnings import SetuptoolsWarning
20
+
21
+ from distutils.command.build_scripts import first_line_re
22
+ from distutils.util import get_platform
23
+
24
+
25
+ class _SplitArgs(TypedDict, total=False):
26
+ comments: bool
27
+ posix: bool
28
+
29
+
30
+ class CommandSpec(list):
31
+ """
32
+ A command spec for a #! header, specified as a list of arguments akin to
33
+ those passed to Popen.
34
+ """
35
+
36
+ options: list[str] = []
37
+ split_args = _SplitArgs()
38
+
39
+ @classmethod
40
+ def best(cls):
41
+ """
42
+ Choose the best CommandSpec class based on environmental conditions.
43
+ """
44
+ return cls
45
+
46
+ @classmethod
47
+ def _sys_executable(cls):
48
+ _default = os.path.normpath(sys.executable)
49
+ return os.environ.get('__PYVENV_LAUNCHER__', _default)
50
+
51
+ @classmethod
52
+ def from_param(cls, param: Self | str | Iterable[str] | None) -> Self:
53
+ """
54
+ Construct a CommandSpec from a parameter to build_scripts, which may
55
+ be None.
56
+ """
57
+ if isinstance(param, cls):
58
+ return param
59
+ if isinstance(param, str):
60
+ return cls.from_string(param)
61
+ if isinstance(param, Iterable):
62
+ return cls(param)
63
+ if param is None:
64
+ return cls.from_environment()
65
+ raise TypeError(f"Argument has an unsupported type {type(param)}")
66
+
67
+ @classmethod
68
+ def from_environment(cls):
69
+ return cls([cls._sys_executable()])
70
+
71
+ @classmethod
72
+ def from_string(cls, string: str) -> Self:
73
+ """
74
+ Construct a command spec from a simple string representing a command
75
+ line parseable by shlex.split.
76
+ """
77
+ items = shlex.split(string, **cls.split_args)
78
+ return cls(items)
79
+
80
+ def install_options(self, script_text: str):
81
+ self.options = shlex.split(self._extract_options(script_text))
82
+ cmdline = subprocess.list2cmdline(self)
83
+ if not isascii(cmdline):
84
+ self.options[:0] = ['-x']
85
+
86
+ @staticmethod
87
+ def _extract_options(orig_script):
88
+ """
89
+ Extract any options from the first line of the script.
90
+ """
91
+ first = (orig_script + '\n').splitlines()[0]
92
+ match = _first_line_re().match(first)
93
+ options = match.group(1) or '' if match else ''
94
+ return options.strip()
95
+
96
+ def as_header(self):
97
+ return self._render(self + list(self.options))
98
+
99
+ @staticmethod
100
+ def _strip_quotes(item):
101
+ _QUOTES = '"\''
102
+ for q in _QUOTES:
103
+ if item.startswith(q) and item.endswith(q):
104
+ return item[1:-1]
105
+ return item
106
+
107
+ @staticmethod
108
+ def _render(items):
109
+ cmdline = subprocess.list2cmdline(
110
+ CommandSpec._strip_quotes(item.strip()) for item in items
111
+ )
112
+ return '#!' + cmdline + '\n'
113
+
114
+
115
+ class WindowsCommandSpec(CommandSpec):
116
+ split_args = _SplitArgs(posix=False)
117
+
118
+
119
+ class ScriptWriter:
120
+ """
121
+ Encapsulates behavior around writing entry point scripts for console and
122
+ gui apps.
123
+ """
124
+
125
+ template = textwrap.dedent(
126
+ r"""
127
+ # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
128
+ import re
129
+ import sys
130
+
131
+ # for compatibility with easy_install; see #2198
132
+ __requires__ = %(spec)r
133
+
134
+ try:
135
+ from importlib.metadata import distribution
136
+ except ImportError:
137
+ try:
138
+ from importlib_metadata import distribution
139
+ except ImportError:
140
+ from pkg_resources import load_entry_point
141
+
142
+
143
+ def importlib_load_entry_point(spec, group, name):
144
+ dist_name, _, _ = spec.partition('==')
145
+ matches = (
146
+ entry_point
147
+ for entry_point in distribution(dist_name).entry_points
148
+ if entry_point.group == group and entry_point.name == name
149
+ )
150
+ return next(matches).load()
151
+
152
+
153
+ globals().setdefault('load_entry_point', importlib_load_entry_point)
154
+
155
+
156
+ if __name__ == '__main__':
157
+ sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
158
+ sys.exit(load_entry_point(%(spec)r, %(group)r, %(name)r)())
159
+ """
160
+ ).lstrip()
161
+
162
+ command_spec_class = CommandSpec
163
+
164
+ @classmethod
165
+ def get_args(cls, dist, header=None):
166
+ """
167
+ Yield write_script() argument tuples for a distribution's
168
+ console_scripts and gui_scripts entry points.
169
+ """
170
+
171
+ # If distribution is not an importlib.metadata.Distribution, assume
172
+ # it's a pkg_resources.Distribution and transform it.
173
+ if not hasattr(dist, 'entry_points'):
174
+ SetuptoolsWarning.emit("Unsupported distribution encountered.")
175
+ dist = metadata.Distribution.at(dist.egg_info)
176
+
177
+ if header is None:
178
+ header = cls.get_header()
179
+ spec = f'{dist.name}=={dist.version}'
180
+ for type_ in 'console', 'gui':
181
+ group = f'{type_}_scripts'
182
+ for ep in dist.entry_points.select(group=group):
183
+ name = ep.name
184
+ cls._ensure_safe_name(ep.name)
185
+ script_text = cls.template % locals()
186
+ args = cls._get_script_args(type_, ep.name, header, script_text)
187
+ yield from args
188
+
189
+ @staticmethod
190
+ def _ensure_safe_name(name):
191
+ """
192
+ Prevent paths in *_scripts entry point names.
193
+ """
194
+ has_path_sep = re.search(r'[\\/]', name)
195
+ if has_path_sep:
196
+ raise ValueError("Path separators not allowed in script names")
197
+
198
+ @classmethod
199
+ def best(cls):
200
+ """
201
+ Select the best ScriptWriter for this environment.
202
+ """
203
+ if sys.platform == 'win32' or (os.name == 'java' and os._name == 'nt'):
204
+ return WindowsScriptWriter.best()
205
+ else:
206
+ return cls
207
+
208
+ @classmethod
209
+ def _get_script_args(cls, type_, name, header, script_text):
210
+ # Simply write the stub with no extension.
211
+ yield (name, header + script_text)
212
+
213
+ @classmethod
214
+ def get_header(
215
+ cls,
216
+ script_text: str = "",
217
+ executable: str | CommandSpec | Iterable[str] | None = None,
218
+ ) -> str:
219
+ """Create a #! line, getting options (if any) from script_text"""
220
+ cmd = cls.command_spec_class.best().from_param(executable)
221
+ cmd.install_options(script_text)
222
+ return cmd.as_header()
223
+
224
+
225
+ class WindowsScriptWriter(ScriptWriter):
226
+ command_spec_class = WindowsCommandSpec
227
+
228
+ @classmethod
229
+ def best(cls):
230
+ """
231
+ Select the best ScriptWriter suitable for Windows
232
+ """
233
+ writer_lookup = dict(
234
+ executable=WindowsExecutableLauncherWriter,
235
+ natural=cls,
236
+ )
237
+ # for compatibility, use the executable launcher by default
238
+ launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable')
239
+ return writer_lookup[launcher]
240
+
241
+ @classmethod
242
+ def _get_script_args(cls, type_, name, header, script_text):
243
+ "For Windows, add a .py extension"
244
+ ext = dict(console='.pya', gui='.pyw')[type_]
245
+ if ext not in os.environ['PATHEXT'].lower().split(';'):
246
+ msg = (
247
+ "{ext} not listed in PATHEXT; scripts will not be "
248
+ "recognized as executables."
249
+ ).format(**locals())
250
+ SetuptoolsWarning.emit(msg)
251
+ old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe']
252
+ old.remove(ext)
253
+ header = cls._adjust_header(type_, header)
254
+ blockers = [name + x for x in old]
255
+ yield name + ext, header + script_text, 't', blockers
256
+
257
+ @classmethod
258
+ def _adjust_header(cls, type_, orig_header):
259
+ """
260
+ Make sure 'pythonw' is used for gui and 'python' is used for
261
+ console (regardless of what sys.executable is).
262
+ """
263
+ pattern = 'pythonw.exe'
264
+ repl = 'python.exe'
265
+ if type_ == 'gui':
266
+ pattern, repl = repl, pattern
267
+ pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE)
268
+ new_header = pattern_ob.sub(string=orig_header, repl=repl)
269
+ return new_header if cls._use_header(new_header) else orig_header
270
+
271
+ @staticmethod
272
+ def _use_header(new_header):
273
+ """
274
+ Should _adjust_header use the replaced header?
275
+
276
+ On non-windows systems, always use. On
277
+ Windows systems, only use the replaced header if it resolves
278
+ to an executable on the system.
279
+ """
280
+ clean_header = new_header[2:-1].strip('"')
281
+ return sys.platform != 'win32' or shutil.which(clean_header)
282
+
283
+
284
+ class WindowsExecutableLauncherWriter(WindowsScriptWriter):
285
+ @classmethod
286
+ def _get_script_args(cls, type_, name, header, script_text):
287
+ """
288
+ For Windows, add a .py extension and an .exe launcher
289
+ """
290
+ if type_ == 'gui':
291
+ launcher_type = 'gui'
292
+ ext = '-script.pyw'
293
+ old = ['.pyw']
294
+ else:
295
+ launcher_type = 'cli'
296
+ ext = '-script.py'
297
+ old = ['.py', '.pyc', '.pyo']
298
+ hdr = cls._adjust_header(type_, header)
299
+ blockers = [name + x for x in old]
300
+ yield (name + ext, hdr + script_text, 't', blockers)
301
+ yield (
302
+ name + '.exe',
303
+ get_win_launcher(launcher_type),
304
+ 'b', # write in binary mode
305
+ )
306
+ if not is_64bit():
307
+ # install a manifest for the launcher to prevent Windows
308
+ # from detecting it as an installer (which it will for
309
+ # launchers like easy_install.exe). Consider only
310
+ # adding a manifest for launchers detected as installers.
311
+ # See Distribute #143 for details.
312
+ m_name = name + '.exe.manifest'
313
+ yield (m_name, load_launcher_manifest(name), 't')
314
+
315
+
316
+ def get_win_launcher(type):
317
+ """
318
+ Load the Windows launcher (executable) suitable for launching a script.
319
+
320
+ `type` should be either 'cli' or 'gui'
321
+
322
+ Returns the executable as a byte string.
323
+ """
324
+ launcher_fn = f'{type}.exe'
325
+ if is_64bit():
326
+ if get_platform() == "win-arm64":
327
+ launcher_fn = launcher_fn.replace(".", "-arm64.")
328
+ else:
329
+ launcher_fn = launcher_fn.replace(".", "-64.")
330
+ else:
331
+ launcher_fn = launcher_fn.replace(".", "-32.")
332
+ return resources.files('setuptools').joinpath(launcher_fn).read_bytes()
333
+
334
+
335
+ def load_launcher_manifest(name):
336
+ res = resources.files(__name__).joinpath('launcher manifest.xml')
337
+ return res.read_text(encoding='utf-8') % vars()
338
+
339
+
340
+ def _first_line_re():
341
+ """
342
+ Return a regular expression based on first_line_re suitable for matching
343
+ strings.
344
+ """
345
+ if isinstance(first_line_re.pattern, str):
346
+ return first_line_re
347
+
348
+ # first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern.
349
+ return re.compile(first_line_re.pattern.decode())
350
+
351
+
352
+ def is_64bit():
353
+ return struct.calcsize("P") == 8
354
+
355
+
356
+ def isascii(s):
357
+ try:
358
+ s.encode('ascii')
359
+ except UnicodeError:
360
+ return False
361
+ return True
@@ -0,0 +1,59 @@
1
+ """Convenience layer on top of stdlib's shutil and os"""
2
+
3
+ import os
4
+ import stat
5
+ from typing import Callable, TypeVar
6
+
7
+ from .compat import py311
8
+
9
+ from distutils import log
10
+
11
+ try:
12
+ from os import chmod # pyright: ignore[reportAssignmentType]
13
+ # Losing type-safety w/ pyright, but that's ok
14
+ except ImportError: # pragma: no cover
15
+ # Jython compatibility
16
+ def chmod(*args: object, **kwargs: object) -> None: # type: ignore[misc] # Mypy reuses the imported definition anyway
17
+ pass
18
+
19
+
20
+ _T = TypeVar("_T")
21
+
22
+
23
+ def attempt_chmod_verbose(path, mode):
24
+ log.debug("changing mode of %s to %o", path, mode)
25
+ try:
26
+ chmod(path, mode)
27
+ except OSError as e: # pragma: no cover
28
+ log.debug("chmod failed: %s", e)
29
+
30
+
31
+ # Must match shutil._OnExcCallback
32
+ def _auto_chmod(
33
+ func: Callable[..., _T], arg: str, exc: BaseException
34
+ ) -> _T: # pragma: no cover
35
+ """shutils onexc callback to automatically call chmod for certain functions."""
36
+ # Only retry for scenarios known to have an issue
37
+ if func in [os.unlink, os.remove] and os.name == 'nt':
38
+ attempt_chmod_verbose(arg, stat.S_IWRITE)
39
+ return func(arg)
40
+ raise exc
41
+
42
+
43
+ def rmtree(path, ignore_errors=False, onexc=_auto_chmod):
44
+ """
45
+ Similar to ``shutil.rmtree`` but automatically executes ``chmod``
46
+ for well know Windows failure scenarios.
47
+ """
48
+ return py311.shutil_rmtree(path, ignore_errors, onexc)
49
+
50
+
51
+ def rmdir(path, **opts):
52
+ if os.path.isdir(path):
53
+ rmtree(path, **opts)
54
+
55
+
56
+ def current_umask():
57
+ tmp = os.umask(0o022)
58
+ os.umask(tmp)
59
+ return tmp
@@ -0,0 +1,188 @@
1
+ from functools import wraps
2
+ from typing import TypeVar
3
+
4
+ import packaging.specifiers
5
+
6
+ from .warnings import SetuptoolsDeprecationWarning
7
+
8
+
9
+ class Static:
10
+ """
11
+ Wrapper for built-in object types that are allow setuptools to identify
12
+ static core metadata (in opposition to ``Dynamic``, as defined :pep:`643`).
13
+
14
+ The trick is to mark values with :class:`Static` when they come from
15
+ ``pyproject.toml`` or ``setup.cfg``, so if any plugin overwrite the value
16
+ with a built-in, setuptools will be able to recognise the change.
17
+
18
+ We inherit from built-in classes, so that we don't need to change the existing
19
+ code base to deal with the new types.
20
+ We also should strive for immutability objects to avoid changes after the
21
+ initial parsing.
22
+ """
23
+
24
+ _mutated_: bool = False # TODO: Remove after deprecation warning is solved
25
+
26
+
27
+ def _prevent_modification(target: type, method: str, copying: str) -> None:
28
+ """
29
+ Because setuptools is very flexible we cannot fully prevent
30
+ plugins and user customizations from modifying static values that were
31
+ parsed from config files.
32
+ But we can attempt to block "in-place" mutations and identify when they
33
+ were done.
34
+ """
35
+ fn = getattr(target, method, None)
36
+ if fn is None:
37
+ return
38
+
39
+ @wraps(fn)
40
+ def _replacement(self: Static, *args, **kwargs):
41
+ # TODO: After deprecation period raise NotImplementedError instead of warning
42
+ # which obviated the existence and checks of the `_mutated_` attribute.
43
+ self._mutated_ = True
44
+ SetuptoolsDeprecationWarning.emit(
45
+ "Direct modification of value will be disallowed",
46
+ f"""
47
+ In an effort to implement PEP 643, direct/in-place changes of static values
48
+ that come from configuration files are deprecated.
49
+ If you need to modify this value, please first create a copy with {copying}
50
+ and make sure conform to all relevant standards when overriding setuptools
51
+ functionality (https://packaging.python.org/en/latest/specifications/).
52
+ """,
53
+ due_date=(2025, 10, 10), # Initially introduced in 2024-09-06
54
+ )
55
+ return fn(self, *args, **kwargs)
56
+
57
+ _replacement.__doc__ = "" # otherwise doctest may fail.
58
+ setattr(target, method, _replacement)
59
+
60
+
61
+ class Str(str, Static):
62
+ pass
63
+
64
+
65
+ class Tuple(tuple, Static):
66
+ pass
67
+
68
+
69
+ class List(list, Static):
70
+ """
71
+ :meta private:
72
+ >>> x = List([1, 2, 3])
73
+ >>> is_static(x)
74
+ True
75
+ >>> x += [0] # doctest: +IGNORE_EXCEPTION_DETAIL
76
+ Traceback (most recent call last):
77
+ SetuptoolsDeprecationWarning: Direct modification ...
78
+ >>> is_static(x) # no longer static after modification
79
+ False
80
+ >>> y = list(x)
81
+ >>> y.clear()
82
+ >>> y
83
+ []
84
+ >>> y == x
85
+ False
86
+ >>> is_static(List(y))
87
+ True
88
+ """
89
+
90
+
91
+ # Make `List` immutable-ish
92
+ # (certain places of setuptools/distutils issue a warn if we use tuple instead of list)
93
+ for _method in (
94
+ '__delitem__',
95
+ '__iadd__',
96
+ '__setitem__',
97
+ 'append',
98
+ 'clear',
99
+ 'extend',
100
+ 'insert',
101
+ 'remove',
102
+ 'reverse',
103
+ 'pop',
104
+ ):
105
+ _prevent_modification(List, _method, "`list(value)`")
106
+
107
+
108
+ class Dict(dict, Static):
109
+ """
110
+ :meta private:
111
+ >>> x = Dict({'a': 1, 'b': 2})
112
+ >>> is_static(x)
113
+ True
114
+ >>> x['c'] = 0 # doctest: +IGNORE_EXCEPTION_DETAIL
115
+ Traceback (most recent call last):
116
+ SetuptoolsDeprecationWarning: Direct modification ...
117
+ >>> x._mutated_
118
+ True
119
+ >>> is_static(x) # no longer static after modification
120
+ False
121
+ >>> y = dict(x)
122
+ >>> y.popitem()
123
+ ('b', 2)
124
+ >>> y == x
125
+ False
126
+ >>> is_static(Dict(y))
127
+ True
128
+ """
129
+
130
+
131
+ # Make `Dict` immutable-ish (we cannot inherit from types.MappingProxyType):
132
+ for _method in (
133
+ '__delitem__',
134
+ '__ior__',
135
+ '__setitem__',
136
+ 'clear',
137
+ 'pop',
138
+ 'popitem',
139
+ 'setdefault',
140
+ 'update',
141
+ ):
142
+ _prevent_modification(Dict, _method, "`dict(value)`")
143
+
144
+
145
+ class SpecifierSet(packaging.specifiers.SpecifierSet, Static):
146
+ """Not exactly a built-in type but useful for ``requires-python``"""
147
+
148
+
149
+ T = TypeVar("T")
150
+
151
+
152
+ def noop(value: T) -> T:
153
+ """
154
+ >>> noop(42)
155
+ 42
156
+ """
157
+ return value
158
+
159
+
160
+ _CONVERSIONS = {str: Str, tuple: Tuple, list: List, dict: Dict}
161
+
162
+
163
+ def attempt_conversion(value: T) -> T:
164
+ """
165
+ >>> is_static(attempt_conversion("hello"))
166
+ True
167
+ >>> is_static(object())
168
+ False
169
+ """
170
+ return _CONVERSIONS.get(type(value), noop)(value) # type: ignore[call-overload]
171
+
172
+
173
+ def is_static(value: object) -> bool:
174
+ """
175
+ >>> is_static(a := Dict({'a': 1}))
176
+ True
177
+ >>> is_static(dict(a))
178
+ False
179
+ >>> is_static(b := List([1, 2, 3]))
180
+ True
181
+ >>> is_static(list(b))
182
+ False
183
+ """
184
+ return isinstance(value, Static) and not value._mutated_
185
+
186
+
187
+ EMPTY_LIST = List()
188
+ EMPTY_DICT = Dict()
@@ -0,0 +1,27 @@
1
+ # Copyright 2014-2016 Nathan West
2
+ #
3
+ # This file is part of autocommand.
4
+ #
5
+ # autocommand is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # autocommand is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with autocommand. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ # flake8 flags all these imports as unused, hence the NOQAs everywhere.
19
+
20
+ from .automain import automain # NOQA
21
+ from .autoparse import autoparse, smart_open # NOQA
22
+ from .autocommand import autocommand # NOQA
23
+
24
+ try:
25
+ from .autoasync import autoasync # NOQA
26
+ except ImportError: # pragma: no cover
27
+ pass