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,247 @@
1
+ import os
2
+ import sys
3
+ from pathlib import Path
4
+
5
+ import pytest
6
+
7
+ from setuptools._static import is_static
8
+ from setuptools.config import expand
9
+ from setuptools.discovery import find_package_path
10
+
11
+ from distutils.errors import DistutilsOptionError
12
+
13
+
14
+ def write_files(files, root_dir):
15
+ for file, content in files.items():
16
+ path = root_dir / file
17
+ path.parent.mkdir(exist_ok=True, parents=True)
18
+ path.write_text(content, encoding="utf-8")
19
+
20
+
21
+ def test_glob_relative(tmp_path, monkeypatch):
22
+ files = {
23
+ "dir1/dir2/dir3/file1.txt",
24
+ "dir1/dir2/file2.txt",
25
+ "dir1/file3.txt",
26
+ "a.ini",
27
+ "b.ini",
28
+ "dir1/c.ini",
29
+ "dir1/dir2/a.ini",
30
+ }
31
+
32
+ write_files({k: "" for k in files}, tmp_path)
33
+ patterns = ["**/*.txt", "[ab].*", "**/[ac].ini"]
34
+ monkeypatch.chdir(tmp_path)
35
+ assert set(expand.glob_relative(patterns)) == files
36
+ # Make sure the same APIs work outside cwd
37
+ assert set(expand.glob_relative(patterns, tmp_path)) == files
38
+
39
+
40
+ def test_read_files(tmp_path, monkeypatch):
41
+ dir_ = tmp_path / "dir_"
42
+ (tmp_path / "_dir").mkdir(exist_ok=True)
43
+ (tmp_path / "a.txt").touch()
44
+ files = {"a.txt": "a", "dir1/b.txt": "b", "dir1/dir2/c.txt": "c"}
45
+ write_files(files, dir_)
46
+
47
+ secrets = Path(str(dir_) + "secrets")
48
+ secrets.mkdir(exist_ok=True)
49
+ write_files({"secrets.txt": "secret keys"}, secrets)
50
+
51
+ with monkeypatch.context() as m:
52
+ m.chdir(dir_)
53
+ assert expand.read_files(list(files)) == "a\nb\nc"
54
+
55
+ cannot_access_msg = r"Cannot access '.*\.\..a\.txt'"
56
+ with pytest.raises(DistutilsOptionError, match=cannot_access_msg):
57
+ expand.read_files(["../a.txt"])
58
+
59
+ cannot_access_secrets_msg = r"Cannot access '.*secrets\.txt'"
60
+ with pytest.raises(DistutilsOptionError, match=cannot_access_secrets_msg):
61
+ expand.read_files(["../dir_secrets/secrets.txt"])
62
+
63
+ # Make sure the same APIs work outside cwd
64
+ assert expand.read_files(list(files), dir_) == "a\nb\nc"
65
+ with pytest.raises(DistutilsOptionError, match=cannot_access_msg):
66
+ expand.read_files(["../a.txt"], dir_)
67
+
68
+
69
+ class TestReadAttr:
70
+ @pytest.mark.parametrize(
71
+ "example",
72
+ [
73
+ # No cookie means UTF-8:
74
+ b"__version__ = '\xc3\xa9'\nraise SystemExit(1)\n",
75
+ # If a cookie is present, honor it:
76
+ b"# -*- coding: utf-8 -*-\n__version__ = '\xc3\xa9'\nraise SystemExit(1)\n",
77
+ b"# -*- coding: latin1 -*-\n__version__ = '\xe9'\nraise SystemExit(1)\n",
78
+ ],
79
+ )
80
+ def test_read_attr_encoding_cookie(self, example, tmp_path):
81
+ (tmp_path / "mod.py").write_bytes(example)
82
+ assert expand.read_attr('mod.__version__', root_dir=tmp_path) == 'é'
83
+
84
+ def test_read_attr(self, tmp_path, monkeypatch):
85
+ files = {
86
+ "pkg/__init__.py": "",
87
+ "pkg/sub/__init__.py": "VERSION = '0.1.1'",
88
+ "pkg/sub/mod.py": (
89
+ "VALUES = {'a': 0, 'b': {42}, 'c': (0, 1, 1)}\nraise SystemExit(1)"
90
+ ),
91
+ }
92
+ write_files(files, tmp_path)
93
+
94
+ with monkeypatch.context() as m:
95
+ m.chdir(tmp_path)
96
+ # Make sure it can read the attr statically without evaluating the module
97
+ version = expand.read_attr('pkg.sub.VERSION')
98
+ values = expand.read_attr('lib.mod.VALUES', {'lib': 'pkg/sub'})
99
+
100
+ assert version == '0.1.1'
101
+ assert is_static(values)
102
+
103
+ assert values['a'] == 0
104
+ assert values['b'] == {42}
105
+ assert is_static(values)
106
+
107
+ # Make sure the same APIs work outside cwd
108
+ assert expand.read_attr('pkg.sub.VERSION', root_dir=tmp_path) == '0.1.1'
109
+ values = expand.read_attr('lib.mod.VALUES', {'lib': 'pkg/sub'}, tmp_path)
110
+ assert values['c'] == (0, 1, 1)
111
+
112
+ @pytest.mark.parametrize(
113
+ "example",
114
+ [
115
+ "VERSION: str\nVERSION = '0.1.1'\nraise SystemExit(1)\n",
116
+ "VERSION: str = '0.1.1'\nraise SystemExit(1)\n",
117
+ ],
118
+ )
119
+ def test_read_annotated_attr(self, tmp_path, example):
120
+ files = {
121
+ "pkg/__init__.py": "",
122
+ "pkg/sub/__init__.py": example,
123
+ }
124
+ write_files(files, tmp_path)
125
+ # Make sure this attribute can be read statically
126
+ version = expand.read_attr('pkg.sub.VERSION', root_dir=tmp_path)
127
+ assert version == '0.1.1'
128
+ assert is_static(version)
129
+
130
+ @pytest.mark.parametrize(
131
+ "example",
132
+ [
133
+ "VERSION = (lambda: '0.1.1')()\n",
134
+ "def fn(): return '0.1.1'\nVERSION = fn()\n",
135
+ "VERSION: str = (lambda: '0.1.1')()\n",
136
+ ],
137
+ )
138
+ def test_read_dynamic_attr(self, tmp_path, monkeypatch, example):
139
+ files = {
140
+ "pkg/__init__.py": "",
141
+ "pkg/sub/__init__.py": example,
142
+ }
143
+ write_files(files, tmp_path)
144
+ monkeypatch.chdir(tmp_path)
145
+ version = expand.read_attr('pkg.sub.VERSION')
146
+ assert version == '0.1.1'
147
+ assert not is_static(version)
148
+
149
+ def test_import_order(self, tmp_path):
150
+ """
151
+ Sometimes the import machinery will import the parent package of a nested
152
+ module, which triggers side-effects and might create problems (see issue #3176)
153
+
154
+ ``read_attr`` should bypass these limitations by resolving modules statically
155
+ (via ast.literal_eval).
156
+ """
157
+ files = {
158
+ "src/pkg/__init__.py": "from .main import func\nfrom .about import version",
159
+ "src/pkg/main.py": "import super_complicated_dep\ndef func(): return 42",
160
+ "src/pkg/about.py": "version = '42'",
161
+ }
162
+ write_files(files, tmp_path)
163
+ attr_desc = "pkg.about.version"
164
+ package_dir = {"": "src"}
165
+ # `import super_complicated_dep` should not run, otherwise the build fails
166
+ assert expand.read_attr(attr_desc, package_dir, tmp_path) == "42"
167
+
168
+
169
+ @pytest.mark.parametrize(
170
+ ("package_dir", "file", "module", "return_value"),
171
+ [
172
+ ({"": "src"}, "src/pkg/main.py", "pkg.main", 42),
173
+ ({"pkg": "lib"}, "lib/main.py", "pkg.main", 13),
174
+ ({}, "single_module.py", "single_module", 70),
175
+ ({}, "flat_layout/pkg.py", "flat_layout.pkg", 836),
176
+ ],
177
+ )
178
+ def test_resolve_class(monkeypatch, tmp_path, package_dir, file, module, return_value):
179
+ monkeypatch.setattr(sys, "modules", {}) # reproducibility
180
+ files = {file: f"class Custom:\n def testing(self): return {return_value}"}
181
+ write_files(files, tmp_path)
182
+ cls = expand.resolve_class(f"{module}.Custom", package_dir, tmp_path)
183
+ assert cls().testing() == return_value
184
+
185
+
186
+ @pytest.mark.parametrize(
187
+ ("args", "pkgs"),
188
+ [
189
+ ({"where": ["."], "namespaces": False}, {"pkg", "other"}),
190
+ ({"where": [".", "dir1"], "namespaces": False}, {"pkg", "other", "dir2"}),
191
+ ({"namespaces": True}, {"pkg", "other", "dir1", "dir1.dir2"}),
192
+ ({}, {"pkg", "other", "dir1", "dir1.dir2"}), # default value for `namespaces`
193
+ ],
194
+ )
195
+ def test_find_packages(tmp_path, args, pkgs):
196
+ files = {
197
+ "pkg/__init__.py",
198
+ "other/__init__.py",
199
+ "dir1/dir2/__init__.py",
200
+ }
201
+ write_files({k: "" for k in files}, tmp_path)
202
+
203
+ package_dir = {}
204
+ kwargs = {"root_dir": tmp_path, "fill_package_dir": package_dir, **args}
205
+ where = kwargs.get("where", ["."])
206
+ assert set(expand.find_packages(**kwargs)) == pkgs
207
+ for pkg in pkgs:
208
+ pkg_path = find_package_path(pkg, package_dir, tmp_path)
209
+ assert os.path.exists(pkg_path)
210
+
211
+ # Make sure the same APIs work outside cwd
212
+ where = [
213
+ str((tmp_path / p).resolve()).replace(os.sep, "/") # ensure posix-style paths
214
+ for p in args.pop("where", ["."])
215
+ ]
216
+
217
+ assert set(expand.find_packages(where=where, **args)) == pkgs
218
+
219
+
220
+ @pytest.mark.parametrize(
221
+ ("files", "where", "expected_package_dir"),
222
+ [
223
+ (["pkg1/__init__.py", "pkg1/other.py"], ["."], {}),
224
+ (["pkg1/__init__.py", "pkg2/__init__.py"], ["."], {}),
225
+ (["src/pkg1/__init__.py", "src/pkg1/other.py"], ["src"], {"": "src"}),
226
+ (["src/pkg1/__init__.py", "src/pkg2/__init__.py"], ["src"], {"": "src"}),
227
+ (
228
+ ["src1/pkg1/__init__.py", "src2/pkg2/__init__.py"],
229
+ ["src1", "src2"],
230
+ {"pkg1": "src1/pkg1", "pkg2": "src2/pkg2"},
231
+ ),
232
+ (
233
+ ["src/pkg1/__init__.py", "pkg2/__init__.py"],
234
+ ["src", "."],
235
+ {"pkg1": "src/pkg1"},
236
+ ),
237
+ ],
238
+ )
239
+ def test_fill_package_dir(tmp_path, files, where, expected_package_dir):
240
+ write_files({k: "" for k in files}, tmp_path)
241
+ pkg_dir = {}
242
+ kwargs = {"root_dir": tmp_path, "fill_package_dir": pkg_dir, "namespaces": False}
243
+ pkgs = expand.find_packages(where=where, **kwargs)
244
+ assert set(pkg_dir.items()) == set(expected_package_dir.items())
245
+ for pkg in pkgs:
246
+ pkg_path = find_package_path(pkg, pkg_dir, tmp_path)
247
+ assert os.path.exists(pkg_path)
@@ -0,0 +1,396 @@
1
+ import re
2
+ from configparser import ConfigParser
3
+ from inspect import cleandoc
4
+
5
+ import jaraco.path
6
+ import pytest
7
+ import tomli_w
8
+ from path import Path
9
+
10
+ import setuptools # noqa: F401 # force distutils.core to be patched
11
+ from setuptools.config.pyprojecttoml import (
12
+ _ToolsTypoInMetadata,
13
+ apply_configuration,
14
+ expand_configuration,
15
+ read_configuration,
16
+ validate,
17
+ )
18
+ from setuptools.dist import Distribution
19
+ from setuptools.errors import OptionError
20
+
21
+ import distutils.core
22
+
23
+ EXAMPLE = """
24
+ [project]
25
+ name = "myproj"
26
+ keywords = ["some", "key", "words"]
27
+ dynamic = ["version", "readme"]
28
+ requires-python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
29
+ dependencies = [
30
+ 'importlib-metadata>=0.12;python_version<"3.8"',
31
+ 'importlib-resources>=1.0;python_version<"3.7"',
32
+ 'pathlib2>=2.3.3,<3;python_version < "3.4" and sys.platform != "win32"',
33
+ ]
34
+
35
+ [project.optional-dependencies]
36
+ docs = [
37
+ "sphinx>=3",
38
+ "sphinx-argparse>=0.2.5",
39
+ "sphinx-rtd-theme>=0.4.3",
40
+ ]
41
+ testing = [
42
+ "pytest>=1",
43
+ "coverage>=3,<5",
44
+ ]
45
+
46
+ [project.scripts]
47
+ exec = "pkg.__main__:exec"
48
+
49
+ [build-system]
50
+ requires = ["setuptools", "wheel"]
51
+ build-backend = "setuptools.build_meta"
52
+
53
+ [tool.setuptools]
54
+ package-dir = {"" = "src"}
55
+ zip-safe = true
56
+ platforms = ["any"]
57
+
58
+ [tool.setuptools.packages.find]
59
+ where = ["src"]
60
+
61
+ [tool.setuptools.cmdclass]
62
+ sdist = "pkg.mod.CustomSdist"
63
+
64
+ [tool.setuptools.dynamic.version]
65
+ attr = "pkg.__version__.VERSION"
66
+
67
+ [tool.setuptools.dynamic.readme]
68
+ file = ["README.md"]
69
+ content-type = "text/markdown"
70
+
71
+ [tool.setuptools.package-data]
72
+ "*" = ["*.txt"]
73
+
74
+ [tool.setuptools.data-files]
75
+ "data" = ["_files/*.txt"]
76
+
77
+ [tool.distutils.sdist]
78
+ formats = "gztar"
79
+
80
+ [tool.distutils.bdist_wheel]
81
+ universal = true
82
+ """
83
+
84
+
85
+ def create_example(path, pkg_root):
86
+ files = {
87
+ "pyproject.toml": EXAMPLE,
88
+ "README.md": "hello world",
89
+ "_files": {
90
+ "file.txt": "",
91
+ },
92
+ }
93
+ packages = {
94
+ "pkg": {
95
+ "__init__.py": "",
96
+ "mod.py": "class CustomSdist: pass",
97
+ "__version__.py": "VERSION = (3, 10)",
98
+ "__main__.py": "def exec(): print('hello')",
99
+ },
100
+ }
101
+
102
+ assert pkg_root # Meta-test: cannot be empty string.
103
+
104
+ if pkg_root == ".":
105
+ files = {**files, **packages}
106
+ # skip other files: flat-layout will raise error for multi-package dist
107
+ else:
108
+ # Use this opportunity to ensure namespaces are discovered
109
+ files[pkg_root] = {**packages, "other": {"nested": {"__init__.py": ""}}}
110
+
111
+ jaraco.path.build(files, prefix=path)
112
+
113
+
114
+ def verify_example(config, path, pkg_root):
115
+ pyproject = path / "pyproject.toml"
116
+ pyproject.write_text(tomli_w.dumps(config), encoding="utf-8")
117
+ expanded = expand_configuration(config, path)
118
+ expanded_project = expanded["project"]
119
+ assert read_configuration(pyproject, expand=True) == expanded
120
+ assert expanded_project["version"] == "3.10"
121
+ assert expanded_project["readme"]["text"] == "hello world"
122
+ assert "packages" in expanded["tool"]["setuptools"]
123
+ if pkg_root == ".":
124
+ # Auto-discovery will raise error for multi-package dist
125
+ assert set(expanded["tool"]["setuptools"]["packages"]) == {"pkg"}
126
+ else:
127
+ assert set(expanded["tool"]["setuptools"]["packages"]) == {
128
+ "pkg",
129
+ "other",
130
+ "other.nested",
131
+ }
132
+ assert expanded["tool"]["setuptools"]["include-package-data"] is True
133
+ assert "" in expanded["tool"]["setuptools"]["package-data"]
134
+ assert "*" not in expanded["tool"]["setuptools"]["package-data"]
135
+ assert expanded["tool"]["setuptools"]["data-files"] == [
136
+ ("data", ["_files/file.txt"])
137
+ ]
138
+
139
+
140
+ def test_read_configuration(tmp_path):
141
+ create_example(tmp_path, "src")
142
+ pyproject = tmp_path / "pyproject.toml"
143
+
144
+ config = read_configuration(pyproject, expand=False)
145
+ assert config["project"].get("version") is None
146
+ assert config["project"].get("readme") is None
147
+
148
+ verify_example(config, tmp_path, "src")
149
+
150
+
151
+ @pytest.mark.parametrize(
152
+ ("pkg_root", "opts"),
153
+ [
154
+ (".", {}),
155
+ ("src", {}),
156
+ ("lib", {"packages": {"find": {"where": ["lib"]}}}),
157
+ ],
158
+ )
159
+ def test_discovered_package_dir_with_attr_directive_in_config(tmp_path, pkg_root, opts):
160
+ create_example(tmp_path, pkg_root)
161
+
162
+ pyproject = tmp_path / "pyproject.toml"
163
+
164
+ config = read_configuration(pyproject, expand=False)
165
+ assert config["project"].get("version") is None
166
+ assert config["project"].get("readme") is None
167
+ config["tool"]["setuptools"].pop("packages", None)
168
+ config["tool"]["setuptools"].pop("package-dir", None)
169
+
170
+ config["tool"]["setuptools"].update(opts)
171
+ verify_example(config, tmp_path, pkg_root)
172
+
173
+
174
+ ENTRY_POINTS = {
175
+ "console_scripts": {"a": "mod.a:func"},
176
+ "gui_scripts": {"b": "mod.b:func"},
177
+ "other": {"c": "mod.c:func [extra]"},
178
+ }
179
+
180
+
181
+ class TestEntryPoints:
182
+ def write_entry_points(self, tmp_path):
183
+ entry_points = ConfigParser()
184
+ entry_points.read_dict(ENTRY_POINTS)
185
+ with open(tmp_path / "entry-points.txt", "w", encoding="utf-8") as f:
186
+ entry_points.write(f)
187
+
188
+ def pyproject(self, dynamic=None):
189
+ project = {"dynamic": dynamic or ["scripts", "gui-scripts", "entry-points"]}
190
+ tool = {"dynamic": {"entry-points": {"file": "entry-points.txt"}}}
191
+ return {"project": project, "tool": {"setuptools": tool}}
192
+
193
+ def test_all_listed_in_dynamic(self, tmp_path):
194
+ self.write_entry_points(tmp_path)
195
+ expanded = expand_configuration(self.pyproject(), tmp_path)
196
+ expanded_project = expanded["project"]
197
+ assert len(expanded_project["scripts"]) == 1
198
+ assert expanded_project["scripts"]["a"] == "mod.a:func"
199
+ assert len(expanded_project["gui-scripts"]) == 1
200
+ assert expanded_project["gui-scripts"]["b"] == "mod.b:func"
201
+ assert len(expanded_project["entry-points"]) == 1
202
+ assert expanded_project["entry-points"]["other"]["c"] == "mod.c:func [extra]"
203
+
204
+ @pytest.mark.parametrize("missing_dynamic", ("scripts", "gui-scripts"))
205
+ def test_scripts_not_listed_in_dynamic(self, tmp_path, missing_dynamic):
206
+ self.write_entry_points(tmp_path)
207
+ dynamic = {"scripts", "gui-scripts", "entry-points"} - {missing_dynamic}
208
+
209
+ msg = f"defined outside of `pyproject.toml`:.*{missing_dynamic}"
210
+ with pytest.raises(OptionError, match=re.compile(msg, re.S)):
211
+ expand_configuration(self.pyproject(dynamic), tmp_path)
212
+
213
+
214
+ class TestClassifiers:
215
+ def test_dynamic(self, tmp_path):
216
+ # Let's create a project example that has dynamic classifiers
217
+ # coming from a txt file.
218
+ create_example(tmp_path, "src")
219
+ classifiers = cleandoc(
220
+ """
221
+ Framework :: Flask
222
+ Programming Language :: Haskell
223
+ """
224
+ )
225
+ (tmp_path / "classifiers.txt").write_text(classifiers, encoding="utf-8")
226
+
227
+ pyproject = tmp_path / "pyproject.toml"
228
+ config = read_configuration(pyproject, expand=False)
229
+ dynamic = config["project"]["dynamic"]
230
+ config["project"]["dynamic"] = list({*dynamic, "classifiers"})
231
+ dynamic_config = config["tool"]["setuptools"]["dynamic"]
232
+ dynamic_config["classifiers"] = {"file": "classifiers.txt"}
233
+
234
+ # When the configuration is expanded,
235
+ # each line of the file should be an different classifier.
236
+ validate(config, pyproject)
237
+ expanded = expand_configuration(config, tmp_path)
238
+
239
+ assert set(expanded["project"]["classifiers"]) == {
240
+ "Framework :: Flask",
241
+ "Programming Language :: Haskell",
242
+ }
243
+
244
+ def test_dynamic_without_config(self, tmp_path):
245
+ config = """
246
+ [project]
247
+ name = "myproj"
248
+ version = '42'
249
+ dynamic = ["classifiers"]
250
+ """
251
+
252
+ pyproject = tmp_path / "pyproject.toml"
253
+ pyproject.write_text(cleandoc(config), encoding="utf-8")
254
+ with pytest.raises(OptionError, match="No configuration .* .classifiers."):
255
+ read_configuration(pyproject)
256
+
257
+ def test_dynamic_readme_from_setup_script_args(self, tmp_path):
258
+ config = """
259
+ [project]
260
+ name = "myproj"
261
+ version = '42'
262
+ dynamic = ["readme"]
263
+ """
264
+ pyproject = tmp_path / "pyproject.toml"
265
+ pyproject.write_text(cleandoc(config), encoding="utf-8")
266
+ dist = Distribution(attrs={"long_description": "42"})
267
+ # No error should occur because of missing `readme`
268
+ dist = apply_configuration(dist, pyproject)
269
+ assert dist.metadata.long_description == "42"
270
+
271
+ def test_dynamic_without_file(self, tmp_path):
272
+ config = """
273
+ [project]
274
+ name = "myproj"
275
+ version = '42'
276
+ dynamic = ["classifiers"]
277
+
278
+ [tool.setuptools.dynamic]
279
+ classifiers = {file = ["classifiers.txt"]}
280
+ """
281
+
282
+ pyproject = tmp_path / "pyproject.toml"
283
+ pyproject.write_text(cleandoc(config), encoding="utf-8")
284
+ with pytest.warns(UserWarning, match="File .*classifiers.txt. cannot be found"):
285
+ expanded = read_configuration(pyproject)
286
+ assert "classifiers" not in expanded["project"]
287
+
288
+
289
+ @pytest.mark.parametrize(
290
+ "example",
291
+ (
292
+ """
293
+ [project]
294
+ name = "myproj"
295
+ version = "1.2"
296
+
297
+ [my-tool.that-disrespect.pep518]
298
+ value = 42
299
+ """,
300
+ ),
301
+ )
302
+ def test_ignore_unrelated_config(tmp_path, example):
303
+ pyproject = tmp_path / "pyproject.toml"
304
+ pyproject.write_text(cleandoc(example), encoding="utf-8")
305
+
306
+ # Make sure no error is raised due to 3rd party configs in pyproject.toml
307
+ assert read_configuration(pyproject) is not None
308
+
309
+
310
+ @pytest.mark.parametrize(
311
+ ("example", "error_msg"),
312
+ [
313
+ (
314
+ """
315
+ [project]
316
+ name = "myproj"
317
+ version = "1.2"
318
+ requires = ['pywin32; platform_system=="Windows"' ]
319
+ """,
320
+ "configuration error: .project. must not contain ..requires.. properties",
321
+ ),
322
+ ],
323
+ )
324
+ def test_invalid_example(tmp_path, example, error_msg):
325
+ pyproject = tmp_path / "pyproject.toml"
326
+ pyproject.write_text(cleandoc(example), encoding="utf-8")
327
+
328
+ pattern = re.compile(f"invalid pyproject.toml.*{error_msg}.*", re.M | re.S)
329
+ with pytest.raises(ValueError, match=pattern):
330
+ read_configuration(pyproject)
331
+
332
+
333
+ @pytest.mark.parametrize("config", ("", "[tool.something]\nvalue = 42"))
334
+ def test_empty(tmp_path, config):
335
+ pyproject = tmp_path / "pyproject.toml"
336
+ pyproject.write_text(config, encoding="utf-8")
337
+
338
+ # Make sure no error is raised
339
+ assert read_configuration(pyproject) == {}
340
+
341
+
342
+ @pytest.mark.parametrize("config", ("[project]\nname = 'myproj'\nversion='42'\n",))
343
+ def test_include_package_data_by_default(tmp_path, config):
344
+ """Builds with ``pyproject.toml`` should consider ``include-package-data=True`` as
345
+ default.
346
+ """
347
+ pyproject = tmp_path / "pyproject.toml"
348
+ pyproject.write_text(config, encoding="utf-8")
349
+
350
+ config = read_configuration(pyproject)
351
+ assert config["tool"]["setuptools"]["include-package-data"] is True
352
+
353
+
354
+ def test_include_package_data_in_setuppy(tmp_path):
355
+ """Builds with ``pyproject.toml`` should consider ``include_package_data`` set in
356
+ ``setup.py``.
357
+
358
+ See https://github.com/pypa/setuptools/issues/3197#issuecomment-1079023889
359
+ """
360
+ files = {
361
+ "pyproject.toml": "[project]\nname = 'myproj'\nversion='42'\n",
362
+ "setup.py": "__import__('setuptools').setup(include_package_data=False)",
363
+ }
364
+ jaraco.path.build(files, prefix=tmp_path)
365
+
366
+ with Path(tmp_path):
367
+ dist = distutils.core.run_setup("setup.py", {}, stop_after="config")
368
+
369
+ assert dist.get_name() == "myproj"
370
+ assert dist.get_version() == "42"
371
+ assert dist.include_package_data is False
372
+
373
+
374
+ def test_warn_tools_typo(tmp_path):
375
+ """Test that the common ``tools.setuptools`` typo in ``pyproject.toml`` issues a warning
376
+
377
+ See https://github.com/pypa/setuptools/issues/4150
378
+ """
379
+ config = """
380
+ [build-system]
381
+ requires = ["setuptools"]
382
+ build-backend = "setuptools.build_meta"
383
+
384
+ [project]
385
+ name = "myproj"
386
+ version = '42'
387
+
388
+ [tools.setuptools]
389
+ packages = ["package"]
390
+ """
391
+
392
+ pyproject = tmp_path / "pyproject.toml"
393
+ pyproject.write_text(cleandoc(config), encoding="utf-8")
394
+
395
+ with pytest.warns(_ToolsTypoInMetadata):
396
+ read_configuration(pyproject)