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,647 @@
1
+ import os
2
+ import sys
3
+ from configparser import ConfigParser
4
+ from itertools import product
5
+ from typing import cast
6
+
7
+ import jaraco.path
8
+ import pytest
9
+ from path import Path
10
+
11
+ import setuptools # noqa: F401 # force distutils.core to be patched
12
+ from setuptools.command.sdist import sdist
13
+ from setuptools.discovery import find_package_path, find_parent_package
14
+ from setuptools.dist import Distribution
15
+ from setuptools.errors import PackageDiscoveryError
16
+
17
+ from .contexts import quiet
18
+ from .integration.helpers import get_sdist_members, get_wheel_members, run
19
+ from .textwrap import DALS
20
+
21
+ import distutils.core
22
+
23
+
24
+ class TestFindParentPackage:
25
+ def test_single_package(self, tmp_path):
26
+ # find_parent_package should find a non-namespace parent package
27
+ (tmp_path / "src/namespace/pkg/nested").mkdir(exist_ok=True, parents=True)
28
+ (tmp_path / "src/namespace/pkg/nested/__init__.py").touch()
29
+ (tmp_path / "src/namespace/pkg/__init__.py").touch()
30
+ packages = ["namespace", "namespace.pkg", "namespace.pkg.nested"]
31
+ assert find_parent_package(packages, {"": "src"}, tmp_path) == "namespace.pkg"
32
+
33
+ def test_multiple_toplevel(self, tmp_path):
34
+ # find_parent_package should return null if the given list of packages does not
35
+ # have a single parent package
36
+ multiple = ["pkg", "pkg1", "pkg2"]
37
+ for name in multiple:
38
+ (tmp_path / f"src/{name}").mkdir(exist_ok=True, parents=True)
39
+ (tmp_path / f"src/{name}/__init__.py").touch()
40
+ assert find_parent_package(multiple, {"": "src"}, tmp_path) is None
41
+
42
+
43
+ class TestDiscoverPackagesAndPyModules:
44
+ """Make sure discovered values for ``packages`` and ``py_modules`` work
45
+ similarly to explicit configuration for the simple scenarios.
46
+ """
47
+
48
+ OPTIONS = {
49
+ # Different options according to the circumstance being tested
50
+ "explicit-src": {"package_dir": {"": "src"}, "packages": ["pkg"]},
51
+ "variation-lib": {
52
+ "package_dir": {"": "lib"}, # variation of the source-layout
53
+ },
54
+ "explicit-flat": {"packages": ["pkg"]},
55
+ "explicit-single_module": {"py_modules": ["pkg"]},
56
+ "explicit-namespace": {"packages": ["ns", "ns.pkg"]},
57
+ "automatic-src": {},
58
+ "automatic-flat": {},
59
+ "automatic-single_module": {},
60
+ "automatic-namespace": {},
61
+ }
62
+ FILES = {
63
+ "src": ["src/pkg/__init__.py", "src/pkg/main.py"],
64
+ "lib": ["lib/pkg/__init__.py", "lib/pkg/main.py"],
65
+ "flat": ["pkg/__init__.py", "pkg/main.py"],
66
+ "single_module": ["pkg.py"],
67
+ "namespace": ["ns/pkg/__init__.py"],
68
+ }
69
+
70
+ def _get_info(self, circumstance):
71
+ _, _, layout = circumstance.partition("-")
72
+ files = self.FILES[layout]
73
+ options = self.OPTIONS[circumstance]
74
+ return files, options
75
+
76
+ @pytest.mark.parametrize("circumstance", OPTIONS.keys())
77
+ def test_sdist_filelist(self, tmp_path, circumstance):
78
+ files, options = self._get_info(circumstance)
79
+ _populate_project_dir(tmp_path, files, options)
80
+
81
+ _, cmd = _run_sdist_programatically(tmp_path, options)
82
+
83
+ manifest = [f.replace(os.sep, "/") for f in cmd.filelist.files]
84
+ for file in files:
85
+ assert any(f.endswith(file) for f in manifest)
86
+
87
+ @pytest.mark.parametrize("circumstance", OPTIONS.keys())
88
+ def test_project(self, tmp_path, circumstance):
89
+ files, options = self._get_info(circumstance)
90
+ _populate_project_dir(tmp_path, files, options)
91
+
92
+ # Simulate a pre-existing `build` directory
93
+ (tmp_path / "build").mkdir()
94
+ (tmp_path / "build/lib").mkdir()
95
+ (tmp_path / "build/bdist.linux-x86_64").mkdir()
96
+ (tmp_path / "build/bdist.linux-x86_64/file.py").touch()
97
+ (tmp_path / "build/lib/__init__.py").touch()
98
+ (tmp_path / "build/lib/file.py").touch()
99
+ (tmp_path / "dist").mkdir()
100
+ (tmp_path / "dist/file.py").touch()
101
+
102
+ _run_build(tmp_path)
103
+
104
+ sdist_files = get_sdist_members(next(tmp_path.glob("dist/*.tar.gz")))
105
+ print("~~~~~ sdist_members ~~~~~")
106
+ print('\n'.join(sdist_files))
107
+ assert sdist_files >= set(files)
108
+
109
+ wheel_files = get_wheel_members(next(tmp_path.glob("dist/*.whl")))
110
+ print("~~~~~ wheel_members ~~~~~")
111
+ print('\n'.join(wheel_files))
112
+ orig_files = {f.replace("src/", "").replace("lib/", "") for f in files}
113
+ assert wheel_files >= orig_files
114
+
115
+ # Make sure build files are not included by mistake
116
+ for file in wheel_files:
117
+ assert "build" not in files
118
+ assert "dist" not in files
119
+
120
+ PURPOSEFULLY_EMPY = {
121
+ "setup.cfg": DALS(
122
+ """
123
+ [metadata]
124
+ name = myproj
125
+ version = 0.0.0
126
+
127
+ [options]
128
+ {param} =
129
+ """
130
+ ),
131
+ "setup.py": DALS(
132
+ """
133
+ __import__('setuptools').setup(
134
+ name="myproj",
135
+ version="0.0.0",
136
+ {param}=[]
137
+ )
138
+ """
139
+ ),
140
+ "pyproject.toml": DALS(
141
+ """
142
+ [build-system]
143
+ requires = []
144
+ build-backend = 'setuptools.build_meta'
145
+
146
+ [project]
147
+ name = "myproj"
148
+ version = "0.0.0"
149
+
150
+ [tool.setuptools]
151
+ {param} = []
152
+ """
153
+ ),
154
+ "template-pyproject.toml": DALS(
155
+ """
156
+ [build-system]
157
+ requires = []
158
+ build-backend = 'setuptools.build_meta'
159
+ """
160
+ ),
161
+ }
162
+
163
+ @pytest.mark.parametrize(
164
+ ("config_file", "param", "circumstance"),
165
+ product(
166
+ ["setup.cfg", "setup.py", "pyproject.toml"],
167
+ ["packages", "py_modules"],
168
+ FILES.keys(),
169
+ ),
170
+ )
171
+ def test_purposefully_empty(self, tmp_path, config_file, param, circumstance):
172
+ files = self.FILES[circumstance] + ["mod.py", "other.py", "src/pkg/__init__.py"]
173
+ _populate_project_dir(tmp_path, files, {})
174
+
175
+ if config_file == "pyproject.toml":
176
+ template_param = param.replace("_", "-")
177
+ else:
178
+ # Make sure build works with or without setup.cfg
179
+ pyproject = self.PURPOSEFULLY_EMPY["template-pyproject.toml"]
180
+ (tmp_path / "pyproject.toml").write_text(pyproject, encoding="utf-8")
181
+ template_param = param
182
+
183
+ config = self.PURPOSEFULLY_EMPY[config_file].format(param=template_param)
184
+ (tmp_path / config_file).write_text(config, encoding="utf-8")
185
+
186
+ dist = _get_dist(tmp_path, {})
187
+ # When either parameter package or py_modules is an empty list,
188
+ # then there should be no discovery
189
+ assert getattr(dist, param) == []
190
+ other = {"py_modules": "packages", "packages": "py_modules"}[param]
191
+ assert getattr(dist, other) is None
192
+
193
+ @pytest.mark.parametrize(
194
+ ("extra_files", "pkgs"),
195
+ [
196
+ (["venv/bin/simulate_venv"], {"pkg"}),
197
+ (["pkg-stubs/__init__.pyi"], {"pkg", "pkg-stubs"}),
198
+ (["other-stubs/__init__.pyi"], {"pkg", "other-stubs"}),
199
+ (
200
+ # Type stubs can also be namespaced
201
+ ["namespace-stubs/pkg/__init__.pyi"],
202
+ {"pkg", "namespace-stubs", "namespace-stubs.pkg"},
203
+ ),
204
+ (
205
+ # Just the top-level package can have `-stubs`, ignore nested ones
206
+ ["namespace-stubs/pkg-stubs/__init__.pyi"],
207
+ {"pkg", "namespace-stubs"},
208
+ ),
209
+ (["_hidden/file.py"], {"pkg"}),
210
+ (["news/finalize.py"], {"pkg"}),
211
+ ],
212
+ )
213
+ def test_flat_layout_with_extra_files(self, tmp_path, extra_files, pkgs):
214
+ files = self.FILES["flat"] + extra_files
215
+ _populate_project_dir(tmp_path, files, {})
216
+ dist = _get_dist(tmp_path, {})
217
+ assert set(dist.packages) == pkgs
218
+
219
+ @pytest.mark.parametrize(
220
+ "extra_files",
221
+ [
222
+ ["other/__init__.py"],
223
+ ["other/finalize.py"],
224
+ ],
225
+ )
226
+ def test_flat_layout_with_dangerous_extra_files(self, tmp_path, extra_files):
227
+ files = self.FILES["flat"] + extra_files
228
+ _populate_project_dir(tmp_path, files, {})
229
+ with pytest.raises(PackageDiscoveryError, match="multiple (packages|modules)"):
230
+ _get_dist(tmp_path, {})
231
+
232
+ def test_flat_layout_with_single_module(self, tmp_path):
233
+ files = self.FILES["single_module"] + ["invalid-module-name.py"]
234
+ _populate_project_dir(tmp_path, files, {})
235
+ dist = _get_dist(tmp_path, {})
236
+ assert set(dist.py_modules) == {"pkg"}
237
+
238
+ def test_flat_layout_with_multiple_modules(self, tmp_path):
239
+ files = self.FILES["single_module"] + ["valid_module_name.py"]
240
+ _populate_project_dir(tmp_path, files, {})
241
+ with pytest.raises(PackageDiscoveryError, match="multiple (packages|modules)"):
242
+ _get_dist(tmp_path, {})
243
+
244
+ def test_py_modules_when_wheel_dir_is_cwd(self, tmp_path):
245
+ """Regression for issue 3692"""
246
+ from setuptools import build_meta
247
+
248
+ pyproject = '[project]\nname = "test"\nversion = "1"'
249
+ (tmp_path / "pyproject.toml").write_text(DALS(pyproject), encoding="utf-8")
250
+ (tmp_path / "foo.py").touch()
251
+ with jaraco.path.DirectoryStack().context(tmp_path):
252
+ build_meta.build_wheel(".")
253
+ # Ensure py_modules are found
254
+ wheel_files = get_wheel_members(next(tmp_path.glob("*.whl")))
255
+ assert "foo.py" in wheel_files
256
+
257
+
258
+ class TestNoConfig:
259
+ DEFAULT_VERSION = "0.0.0" # Default version given by setuptools
260
+
261
+ EXAMPLES = {
262
+ "pkg1": ["src/pkg1.py"],
263
+ "pkg2": ["src/pkg2/__init__.py"],
264
+ "pkg3": ["src/pkg3/__init__.py", "src/pkg3-stubs/__init__.py"],
265
+ "pkg4": ["pkg4/__init__.py", "pkg4-stubs/__init__.py"],
266
+ "ns.nested.pkg1": ["src/ns/nested/pkg1/__init__.py"],
267
+ "ns.nested.pkg2": ["ns/nested/pkg2/__init__.py"],
268
+ }
269
+
270
+ @pytest.mark.parametrize("example", EXAMPLES.keys())
271
+ def test_discover_name(self, tmp_path, example):
272
+ _populate_project_dir(tmp_path, self.EXAMPLES[example], {})
273
+ dist = _get_dist(tmp_path, {})
274
+ assert dist.get_name() == example
275
+
276
+ def test_build_with_discovered_name(self, tmp_path):
277
+ files = ["src/ns/nested/pkg/__init__.py"]
278
+ _populate_project_dir(tmp_path, files, {})
279
+ _run_build(tmp_path, "--sdist")
280
+ # Expected distribution file
281
+ dist_file = tmp_path / f"dist/ns_nested_pkg-{self.DEFAULT_VERSION}.tar.gz"
282
+ assert dist_file.is_file()
283
+
284
+
285
+ class TestWithAttrDirective:
286
+ @pytest.mark.parametrize(
287
+ ("folder", "opts"),
288
+ [
289
+ ("src", {}),
290
+ ("lib", {"packages": "find:", "packages.find": {"where": "lib"}}),
291
+ ],
292
+ )
293
+ def test_setupcfg_metadata(self, tmp_path, folder, opts):
294
+ files = [f"{folder}/pkg/__init__.py", "setup.cfg"]
295
+ _populate_project_dir(tmp_path, files, opts)
296
+
297
+ config = (tmp_path / "setup.cfg").read_text(encoding="utf-8")
298
+ overwrite = {
299
+ folder: {"pkg": {"__init__.py": "version = 42"}},
300
+ "setup.cfg": "[metadata]\nversion = attr: pkg.version\n" + config,
301
+ }
302
+ jaraco.path.build(overwrite, prefix=tmp_path)
303
+
304
+ dist = _get_dist(tmp_path, {})
305
+ assert dist.get_name() == "pkg"
306
+ assert dist.get_version() == "42"
307
+ assert dist.package_dir
308
+ package_path = find_package_path("pkg", dist.package_dir, tmp_path)
309
+ assert os.path.exists(package_path)
310
+ assert folder in Path(package_path).parts()
311
+
312
+ _run_build(tmp_path, "--sdist")
313
+ dist_file = tmp_path / "dist/pkg-42.tar.gz"
314
+ assert dist_file.is_file()
315
+
316
+ def test_pyproject_metadata(self, tmp_path):
317
+ _populate_project_dir(tmp_path, ["src/pkg/__init__.py"], {})
318
+
319
+ overwrite = {
320
+ "src": {"pkg": {"__init__.py": "version = 42"}},
321
+ "pyproject.toml": (
322
+ "[project]\nname = 'pkg'\ndynamic = ['version']\n"
323
+ "[tool.setuptools.dynamic]\nversion = {attr = 'pkg.version'}\n"
324
+ ),
325
+ }
326
+ jaraco.path.build(overwrite, prefix=tmp_path)
327
+
328
+ dist = _get_dist(tmp_path, {})
329
+ assert dist.get_version() == "42"
330
+ assert dist.package_dir == {"": "src"}
331
+
332
+
333
+ class TestWithCExtension:
334
+ def _simulate_package_with_extension(self, tmp_path):
335
+ # This example is based on: https://github.com/nucleic/kiwi/tree/1.4.0
336
+ files = [
337
+ "benchmarks/file.py",
338
+ "docs/Makefile",
339
+ "docs/requirements.txt",
340
+ "docs/source/conf.py",
341
+ "proj/header.h",
342
+ "proj/file.py",
343
+ "py/proj.cpp",
344
+ "py/other.cpp",
345
+ "py/file.py",
346
+ "py/py.typed",
347
+ "py/tests/test_proj.py",
348
+ "README.rst",
349
+ ]
350
+ _populate_project_dir(tmp_path, files, {})
351
+
352
+ setup_script = """
353
+ from setuptools import Extension, setup
354
+
355
+ ext_modules = [
356
+ Extension(
357
+ "proj",
358
+ ["py/proj.cpp", "py/other.cpp"],
359
+ include_dirs=["."],
360
+ language="c++",
361
+ ),
362
+ ]
363
+ setup(ext_modules=ext_modules)
364
+ """
365
+ (tmp_path / "setup.py").write_text(DALS(setup_script), encoding="utf-8")
366
+
367
+ def test_skip_discovery_with_setupcfg_metadata(self, tmp_path):
368
+ """Ensure that auto-discovery is not triggered when the project is based on
369
+ C-extensions only, for backward compatibility.
370
+ """
371
+ self._simulate_package_with_extension(tmp_path)
372
+
373
+ pyproject = """
374
+ [build-system]
375
+ requires = []
376
+ build-backend = 'setuptools.build_meta'
377
+ """
378
+ (tmp_path / "pyproject.toml").write_text(DALS(pyproject), encoding="utf-8")
379
+
380
+ setupcfg = """
381
+ [metadata]
382
+ name = proj
383
+ version = 42
384
+ """
385
+ (tmp_path / "setup.cfg").write_text(DALS(setupcfg), encoding="utf-8")
386
+
387
+ dist = _get_dist(tmp_path, {})
388
+ assert dist.get_name() == "proj"
389
+ assert dist.get_version() == "42"
390
+ assert dist.py_modules is None
391
+ assert dist.packages is None
392
+ assert len(dist.ext_modules) == 1
393
+ assert dist.ext_modules[0].name == "proj"
394
+
395
+ def test_dont_skip_discovery_with_pyproject_metadata(self, tmp_path):
396
+ """When opting-in to pyproject.toml metadata, auto-discovery will be active if
397
+ the package lists C-extensions, but does not configure py-modules or packages.
398
+
399
+ This way we ensure users with complex package layouts that would lead to the
400
+ discovery of multiple top-level modules/packages see errors and are forced to
401
+ explicitly set ``packages`` or ``py-modules``.
402
+ """
403
+ self._simulate_package_with_extension(tmp_path)
404
+
405
+ pyproject = """
406
+ [project]
407
+ name = 'proj'
408
+ version = '42'
409
+ """
410
+ (tmp_path / "pyproject.toml").write_text(DALS(pyproject), encoding="utf-8")
411
+ with pytest.raises(PackageDiscoveryError, match="multiple (packages|modules)"):
412
+ _get_dist(tmp_path, {})
413
+
414
+
415
+ class TestWithPackageData:
416
+ def _simulate_package_with_data_files(self, tmp_path, src_root):
417
+ files = [
418
+ f"{src_root}/proj/__init__.py",
419
+ f"{src_root}/proj/file1.txt",
420
+ f"{src_root}/proj/nested/file2.txt",
421
+ ]
422
+ _populate_project_dir(tmp_path, files, {})
423
+
424
+ manifest = """
425
+ global-include *.py *.txt
426
+ """
427
+ (tmp_path / "MANIFEST.in").write_text(DALS(manifest), encoding="utf-8")
428
+
429
+ EXAMPLE_SETUPCFG = """
430
+ [metadata]
431
+ name = proj
432
+ version = 42
433
+
434
+ [options]
435
+ include_package_data = True
436
+ """
437
+ EXAMPLE_PYPROJECT = """
438
+ [project]
439
+ name = "proj"
440
+ version = "42"
441
+ """
442
+
443
+ PYPROJECT_PACKAGE_DIR = """
444
+ [tool.setuptools]
445
+ package-dir = {"" = "src"}
446
+ """
447
+
448
+ @pytest.mark.parametrize(
449
+ ("src_root", "files"),
450
+ [
451
+ (".", {"setup.cfg": DALS(EXAMPLE_SETUPCFG)}),
452
+ (".", {"pyproject.toml": DALS(EXAMPLE_PYPROJECT)}),
453
+ ("src", {"setup.cfg": DALS(EXAMPLE_SETUPCFG)}),
454
+ ("src", {"pyproject.toml": DALS(EXAMPLE_PYPROJECT)}),
455
+ (
456
+ "src",
457
+ {
458
+ "setup.cfg": DALS(EXAMPLE_SETUPCFG)
459
+ + DALS(
460
+ """
461
+ packages = find:
462
+ package_dir =
463
+ =src
464
+
465
+ [options.packages.find]
466
+ where = src
467
+ """
468
+ )
469
+ },
470
+ ),
471
+ (
472
+ "src",
473
+ {
474
+ "pyproject.toml": DALS(EXAMPLE_PYPROJECT)
475
+ + DALS(
476
+ """
477
+ [tool.setuptools]
478
+ package-dir = {"" = "src"}
479
+ """
480
+ )
481
+ },
482
+ ),
483
+ ],
484
+ )
485
+ def test_include_package_data(self, tmp_path, src_root, files):
486
+ """
487
+ Make sure auto-discovery does not affect package include_package_data.
488
+ See issue #3196.
489
+ """
490
+ jaraco.path.build(files, prefix=str(tmp_path))
491
+ self._simulate_package_with_data_files(tmp_path, src_root)
492
+
493
+ expected = {
494
+ os.path.normpath(f"{src_root}/proj/file1.txt").replace(os.sep, "/"),
495
+ os.path.normpath(f"{src_root}/proj/nested/file2.txt").replace(os.sep, "/"),
496
+ }
497
+
498
+ _run_build(tmp_path)
499
+
500
+ sdist_files = get_sdist_members(next(tmp_path.glob("dist/*.tar.gz")))
501
+ print("~~~~~ sdist_members ~~~~~")
502
+ print('\n'.join(sdist_files))
503
+ assert sdist_files >= expected
504
+
505
+ wheel_files = get_wheel_members(next(tmp_path.glob("dist/*.whl")))
506
+ print("~~~~~ wheel_members ~~~~~")
507
+ print('\n'.join(wheel_files))
508
+ orig_files = {f.replace("src/", "").replace("lib/", "") for f in expected}
509
+ assert wheel_files >= orig_files
510
+
511
+
512
+ def test_compatible_with_numpy_configuration(tmp_path):
513
+ files = [
514
+ "dir1/__init__.py",
515
+ "dir2/__init__.py",
516
+ "file.py",
517
+ ]
518
+ _populate_project_dir(tmp_path, files, {})
519
+ dist = Distribution({})
520
+ dist.configuration = object()
521
+ dist.set_defaults()
522
+ assert dist.py_modules is None
523
+ assert dist.packages is None
524
+
525
+
526
+ def test_name_discovery_doesnt_break_cli(tmpdir_cwd):
527
+ jaraco.path.build({"pkg.py": ""})
528
+ dist = Distribution({})
529
+ dist.script_args = ["--name"]
530
+ dist.set_defaults()
531
+ dist.parse_command_line() # <-- no exception should be raised here.
532
+ assert dist.get_name() == "pkg"
533
+
534
+
535
+ def test_preserve_explicit_name_with_dynamic_version(tmpdir_cwd, monkeypatch):
536
+ """According to #3545 it seems that ``name`` discovery is running,
537
+ even when the project already explicitly sets it.
538
+ This seems to be related to parsing of dynamic versions (via ``attr`` directive),
539
+ which requires the auto-discovery of ``package_dir``.
540
+ """
541
+ files = {
542
+ "src": {
543
+ "pkg": {"__init__.py": "__version__ = 42\n"},
544
+ },
545
+ "pyproject.toml": DALS(
546
+ """
547
+ [project]
548
+ name = "myproj" # purposefully different from package name
549
+ dynamic = ["version"]
550
+ [tool.setuptools.dynamic]
551
+ version = {"attr" = "pkg.__version__"}
552
+ """
553
+ ),
554
+ }
555
+ jaraco.path.build(files)
556
+ dist = Distribution({})
557
+ orig_analyse_name = dist.set_defaults.analyse_name
558
+
559
+ def spy_analyse_name():
560
+ # We can check if name discovery was triggered by ensuring the original
561
+ # name remains instead of the package name.
562
+ orig_analyse_name()
563
+ assert dist.get_name() == "myproj"
564
+
565
+ monkeypatch.setattr(dist.set_defaults, "analyse_name", spy_analyse_name)
566
+ dist.parse_config_files()
567
+ assert dist.get_version() == "42"
568
+ assert set(dist.packages) == {"pkg"}
569
+
570
+
571
+ def _populate_project_dir(root, files, options):
572
+ # NOTE: Currently pypa/build will refuse to build the project if no
573
+ # `pyproject.toml` or `setup.py` is found. So it is impossible to do
574
+ # completely "config-less" projects.
575
+ basic = {
576
+ "setup.py": "import setuptools\nsetuptools.setup()",
577
+ "README.md": "# Example Package",
578
+ "LICENSE": "Copyright (c) 2018",
579
+ }
580
+ jaraco.path.build(basic, prefix=root)
581
+ _write_setupcfg(root, options)
582
+ paths = (root / f for f in files)
583
+ for path in paths:
584
+ path.parent.mkdir(exist_ok=True, parents=True)
585
+ path.touch()
586
+
587
+
588
+ def _write_setupcfg(root, options):
589
+ if not options:
590
+ print("~~~~~ **NO** setup.cfg ~~~~~")
591
+ return
592
+ setupcfg = ConfigParser()
593
+ setupcfg.add_section("options")
594
+ for key, value in options.items():
595
+ if key == "packages.find":
596
+ setupcfg.add_section(f"options.{key}")
597
+ setupcfg[f"options.{key}"].update(value)
598
+ elif isinstance(value, list):
599
+ setupcfg["options"][key] = ", ".join(value)
600
+ elif isinstance(value, dict):
601
+ str_value = "\n".join(f"\t{k} = {v}" for k, v in value.items())
602
+ setupcfg["options"][key] = "\n" + str_value
603
+ else:
604
+ setupcfg["options"][key] = str(value)
605
+ with open(root / "setup.cfg", "w", encoding="utf-8") as f:
606
+ setupcfg.write(f)
607
+ print("~~~~~ setup.cfg ~~~~~")
608
+ print((root / "setup.cfg").read_text(encoding="utf-8"))
609
+
610
+
611
+ def _run_build(path, *flags):
612
+ cmd = [sys.executable, "-m", "build", "--no-isolation", *flags, str(path)]
613
+ return run(cmd, env={'DISTUTILS_DEBUG': ''})
614
+
615
+
616
+ def _get_dist(dist_path, attrs):
617
+ root = "/".join(os.path.split(dist_path)) # POSIX-style
618
+
619
+ script = dist_path / 'setup.py'
620
+ if script.exists():
621
+ with Path(dist_path):
622
+ dist = cast(
623
+ Distribution,
624
+ distutils.core.run_setup("setup.py", {}, stop_after="init"),
625
+ )
626
+ else:
627
+ dist = Distribution(attrs)
628
+
629
+ dist.src_root = root
630
+ dist.script_name = "setup.py"
631
+ with Path(dist_path):
632
+ dist.parse_config_files()
633
+
634
+ dist.set_defaults()
635
+ return dist
636
+
637
+
638
+ def _run_sdist_programatically(dist_path, attrs):
639
+ dist = _get_dist(dist_path, attrs)
640
+ cmd = sdist(dist)
641
+ cmd.ensure_finalized()
642
+ assert cmd.distribution.packages or cmd.distribution.py_modules
643
+
644
+ with quiet(), Path(dist_path):
645
+ cmd.run()
646
+
647
+ return dist, cmd