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,407 @@
1
+ """distutils.command.build_py
2
+
3
+ Implements the Distutils 'build_py' command."""
4
+
5
+ import glob
6
+ import importlib.util
7
+ import os
8
+ import sys
9
+ from distutils._log import log
10
+ from typing import ClassVar
11
+
12
+ from ..core import Command
13
+ from ..errors import DistutilsFileError, DistutilsOptionError
14
+ from ..util import convert_path
15
+
16
+
17
+ class build_py(Command):
18
+ description = "\"build\" pure Python modules (copy to build directory)"
19
+
20
+ user_options = [
21
+ ('build-lib=', 'd', "directory to \"build\" (copy) to"),
22
+ ('compile', 'c', "compile .py to .pyc"),
23
+ ('no-compile', None, "don't compile .py files [default]"),
24
+ (
25
+ 'optimize=',
26
+ 'O',
27
+ "also compile with optimization: -O1 for \"python -O\", "
28
+ "-O2 for \"python -OO\", and -O0 to disable [default: -O0]",
29
+ ),
30
+ ('force', 'f', "forcibly build everything (ignore file timestamps)"),
31
+ ]
32
+
33
+ boolean_options: ClassVar[list[str]] = ['compile', 'force']
34
+ negative_opt: ClassVar[dict[str, str]] = {'no-compile': 'compile'}
35
+
36
+ def initialize_options(self):
37
+ self.build_lib = None
38
+ self.py_modules = None
39
+ self.package = None
40
+ self.package_data = None
41
+ self.package_dir = None
42
+ self.compile = False
43
+ self.optimize = 0
44
+ self.force = None
45
+
46
+ def finalize_options(self) -> None:
47
+ self.set_undefined_options(
48
+ 'build', ('build_lib', 'build_lib'), ('force', 'force')
49
+ )
50
+
51
+ # Get the distribution options that are aliases for build_py
52
+ # options -- list of packages and list of modules.
53
+ self.packages = self.distribution.packages
54
+ self.py_modules = self.distribution.py_modules
55
+ self.package_data = self.distribution.package_data
56
+ self.package_dir = {}
57
+ if self.distribution.package_dir:
58
+ for name, path in self.distribution.package_dir.items():
59
+ self.package_dir[name] = convert_path(path)
60
+ self.data_files = self.get_data_files()
61
+
62
+ # Ick, copied straight from install_lib.py (fancy_getopt needs a
63
+ # type system! Hell, *everything* needs a type system!!!)
64
+ if not isinstance(self.optimize, int):
65
+ try:
66
+ self.optimize = int(self.optimize)
67
+ assert 0 <= self.optimize <= 2
68
+ except (ValueError, AssertionError):
69
+ raise DistutilsOptionError("optimize must be 0, 1, or 2")
70
+
71
+ def run(self) -> None:
72
+ # XXX copy_file by default preserves atime and mtime. IMHO this is
73
+ # the right thing to do, but perhaps it should be an option -- in
74
+ # particular, a site administrator might want installed files to
75
+ # reflect the time of installation rather than the last
76
+ # modification time before the installed release.
77
+
78
+ # XXX copy_file by default preserves mode, which appears to be the
79
+ # wrong thing to do: if a file is read-only in the working
80
+ # directory, we want it to be installed read/write so that the next
81
+ # installation of the same module distribution can overwrite it
82
+ # without problems. (This might be a Unix-specific issue.) Thus
83
+ # we turn off 'preserve_mode' when copying to the build directory,
84
+ # since the build directory is supposed to be exactly what the
85
+ # installation will look like (ie. we preserve mode when
86
+ # installing).
87
+
88
+ # Two options control which modules will be installed: 'packages'
89
+ # and 'py_modules'. The former lets us work with whole packages, not
90
+ # specifying individual modules at all; the latter is for
91
+ # specifying modules one-at-a-time.
92
+
93
+ if self.py_modules:
94
+ self.build_modules()
95
+ if self.packages:
96
+ self.build_packages()
97
+ self.build_package_data()
98
+
99
+ self.byte_compile(self.get_outputs(include_bytecode=False))
100
+
101
+ def get_data_files(self):
102
+ """Generate list of '(package,src_dir,build_dir,filenames)' tuples"""
103
+ data = []
104
+ if not self.packages:
105
+ return data
106
+ for package in self.packages:
107
+ # Locate package source directory
108
+ src_dir = self.get_package_dir(package)
109
+
110
+ # Compute package build directory
111
+ build_dir = os.path.join(*([self.build_lib] + package.split('.')))
112
+
113
+ # Length of path to strip from found files
114
+ plen = 0
115
+ if src_dir:
116
+ plen = len(src_dir) + 1
117
+
118
+ # Strip directory from globbed filenames
119
+ filenames = [file[plen:] for file in self.find_data_files(package, src_dir)]
120
+ data.append((package, src_dir, build_dir, filenames))
121
+ return data
122
+
123
+ def find_data_files(self, package, src_dir):
124
+ """Return filenames for package's data files in 'src_dir'"""
125
+ globs = self.package_data.get('', []) + self.package_data.get(package, [])
126
+ files = []
127
+ for pattern in globs:
128
+ # Each pattern has to be converted to a platform-specific path
129
+ filelist = glob.glob(
130
+ os.path.join(glob.escape(src_dir), convert_path(pattern))
131
+ )
132
+ # Files that match more than one pattern are only added once
133
+ files.extend([
134
+ fn for fn in filelist if fn not in files and os.path.isfile(fn)
135
+ ])
136
+ return files
137
+
138
+ def build_package_data(self) -> None:
139
+ """Copy data files into build directory"""
140
+ for _package, src_dir, build_dir, filenames in self.data_files:
141
+ for filename in filenames:
142
+ target = os.path.join(build_dir, filename)
143
+ self.mkpath(os.path.dirname(target))
144
+ self.copy_file(
145
+ os.path.join(src_dir, filename), target, preserve_mode=False
146
+ )
147
+
148
+ def get_package_dir(self, package):
149
+ """Return the directory, relative to the top of the source
150
+ distribution, where package 'package' should be found
151
+ (at least according to the 'package_dir' option, if any)."""
152
+ path = package.split('.')
153
+
154
+ if not self.package_dir:
155
+ if path:
156
+ return os.path.join(*path)
157
+ else:
158
+ return ''
159
+ else:
160
+ tail = []
161
+ while path:
162
+ try:
163
+ pdir = self.package_dir['.'.join(path)]
164
+ except KeyError:
165
+ tail.insert(0, path[-1])
166
+ del path[-1]
167
+ else:
168
+ tail.insert(0, pdir)
169
+ return os.path.join(*tail)
170
+ else:
171
+ # Oops, got all the way through 'path' without finding a
172
+ # match in package_dir. If package_dir defines a directory
173
+ # for the root (nameless) package, then fallback on it;
174
+ # otherwise, we might as well have not consulted
175
+ # package_dir at all, as we just use the directory implied
176
+ # by 'tail' (which should be the same as the original value
177
+ # of 'path' at this point).
178
+ pdir = self.package_dir.get('')
179
+ if pdir is not None:
180
+ tail.insert(0, pdir)
181
+
182
+ if tail:
183
+ return os.path.join(*tail)
184
+ else:
185
+ return ''
186
+
187
+ def check_package(self, package, package_dir):
188
+ # Empty dir name means current directory, which we can probably
189
+ # assume exists. Also, os.path.exists and isdir don't know about
190
+ # my "empty string means current dir" convention, so we have to
191
+ # circumvent them.
192
+ if package_dir != "":
193
+ if not os.path.exists(package_dir):
194
+ raise DistutilsFileError(
195
+ f"package directory '{package_dir}' does not exist"
196
+ )
197
+ if not os.path.isdir(package_dir):
198
+ raise DistutilsFileError(
199
+ f"supposed package directory '{package_dir}' exists, "
200
+ "but is not a directory"
201
+ )
202
+
203
+ # Directories without __init__.py are namespace packages (PEP 420).
204
+ if package:
205
+ init_py = os.path.join(package_dir, "__init__.py")
206
+ if os.path.isfile(init_py):
207
+ return init_py
208
+
209
+ # Either not in a package at all (__init__.py not expected), or
210
+ # __init__.py doesn't exist -- so don't return the filename.
211
+ return None
212
+
213
+ def check_module(self, module, module_file):
214
+ if not os.path.isfile(module_file):
215
+ log.warning("file %s (for module %s) not found", module_file, module)
216
+ return False
217
+ else:
218
+ return True
219
+
220
+ def find_package_modules(self, package, package_dir):
221
+ self.check_package(package, package_dir)
222
+ module_files = glob.glob(os.path.join(glob.escape(package_dir), "*.py"))
223
+ modules = []
224
+ setup_script = os.path.abspath(self.distribution.script_name)
225
+
226
+ for f in module_files:
227
+ abs_f = os.path.abspath(f)
228
+ if abs_f != setup_script:
229
+ module = os.path.splitext(os.path.basename(f))[0]
230
+ modules.append((package, module, f))
231
+ else:
232
+ self.debug_print(f"excluding {setup_script}")
233
+ return modules
234
+
235
+ def find_modules(self):
236
+ """Finds individually-specified Python modules, ie. those listed by
237
+ module name in 'self.py_modules'. Returns a list of tuples (package,
238
+ module_base, filename): 'package' is a tuple of the path through
239
+ package-space to the module; 'module_base' is the bare (no
240
+ packages, no dots) module name, and 'filename' is the path to the
241
+ ".py" file (relative to the distribution root) that implements the
242
+ module.
243
+ """
244
+ # Map package names to tuples of useful info about the package:
245
+ # (package_dir, checked)
246
+ # package_dir - the directory where we'll find source files for
247
+ # this package
248
+ # checked - true if we have checked that the package directory
249
+ # is valid (exists, contains __init__.py, ... ?)
250
+ packages = {}
251
+
252
+ # List of (package, module, filename) tuples to return
253
+ modules = []
254
+
255
+ # We treat modules-in-packages almost the same as toplevel modules,
256
+ # just the "package" for a toplevel is empty (either an empty
257
+ # string or empty list, depending on context). Differences:
258
+ # - don't check for __init__.py in directory for empty package
259
+ for module in self.py_modules:
260
+ path = module.split('.')
261
+ package = '.'.join(path[0:-1])
262
+ module_base = path[-1]
263
+
264
+ try:
265
+ (package_dir, checked) = packages[package]
266
+ except KeyError:
267
+ package_dir = self.get_package_dir(package)
268
+ checked = False
269
+
270
+ if not checked:
271
+ init_py = self.check_package(package, package_dir)
272
+ packages[package] = (package_dir, 1)
273
+ if init_py:
274
+ modules.append((package, "__init__", init_py))
275
+
276
+ # XXX perhaps we should also check for just .pyc files
277
+ # (so greedy closed-source bastards can distribute Python
278
+ # modules too)
279
+ module_file = os.path.join(package_dir, module_base + ".py")
280
+ if not self.check_module(module, module_file):
281
+ continue
282
+
283
+ modules.append((package, module_base, module_file))
284
+
285
+ return modules
286
+
287
+ def find_all_modules(self):
288
+ """Compute the list of all modules that will be built, whether
289
+ they are specified one-module-at-a-time ('self.py_modules') or
290
+ by whole packages ('self.packages'). Return a list of tuples
291
+ (package, module, module_file), just like 'find_modules()' and
292
+ 'find_package_modules()' do."""
293
+ modules = []
294
+ if self.py_modules:
295
+ modules.extend(self.find_modules())
296
+ if self.packages:
297
+ for package in self.packages:
298
+ package_dir = self.get_package_dir(package)
299
+ m = self.find_package_modules(package, package_dir)
300
+ modules.extend(m)
301
+ return modules
302
+
303
+ def get_source_files(self):
304
+ return [module[-1] for module in self.find_all_modules()]
305
+
306
+ def get_module_outfile(self, build_dir, package, module):
307
+ outfile_path = [build_dir] + list(package) + [module + ".py"]
308
+ return os.path.join(*outfile_path)
309
+
310
+ def get_outputs(self, include_bytecode: bool = True) -> list[str]:
311
+ modules = self.find_all_modules()
312
+ outputs = []
313
+ for package, module, _module_file in modules:
314
+ package = package.split('.')
315
+ filename = self.get_module_outfile(self.build_lib, package, module)
316
+ outputs.append(filename)
317
+ if include_bytecode:
318
+ if self.compile:
319
+ outputs.append(
320
+ importlib.util.cache_from_source(filename, optimization='')
321
+ )
322
+ if self.optimize > 0:
323
+ outputs.append(
324
+ importlib.util.cache_from_source(
325
+ filename, optimization=self.optimize
326
+ )
327
+ )
328
+
329
+ outputs += [
330
+ os.path.join(build_dir, filename)
331
+ for package, src_dir, build_dir, filenames in self.data_files
332
+ for filename in filenames
333
+ ]
334
+
335
+ return outputs
336
+
337
+ def build_module(self, module, module_file, package):
338
+ if isinstance(package, str):
339
+ package = package.split('.')
340
+ elif not isinstance(package, (list, tuple)):
341
+ raise TypeError(
342
+ "'package' must be a string (dot-separated), list, or tuple"
343
+ )
344
+
345
+ # Now put the module source file into the "build" area -- this is
346
+ # easy, we just copy it somewhere under self.build_lib (the build
347
+ # directory for Python source).
348
+ outfile = self.get_module_outfile(self.build_lib, package, module)
349
+ dir = os.path.dirname(outfile)
350
+ self.mkpath(dir)
351
+ return self.copy_file(module_file, outfile, preserve_mode=False)
352
+
353
+ def build_modules(self) -> None:
354
+ modules = self.find_modules()
355
+ for package, module, module_file in modules:
356
+ # Now "build" the module -- ie. copy the source file to
357
+ # self.build_lib (the build directory for Python source).
358
+ # (Actually, it gets copied to the directory for this package
359
+ # under self.build_lib.)
360
+ self.build_module(module, module_file, package)
361
+
362
+ def build_packages(self) -> None:
363
+ for package in self.packages:
364
+ # Get list of (package, module, module_file) tuples based on
365
+ # scanning the package directory. 'package' is only included
366
+ # in the tuple so that 'find_modules()' and
367
+ # 'find_package_tuples()' have a consistent interface; it's
368
+ # ignored here (apart from a sanity check). Also, 'module' is
369
+ # the *unqualified* module name (ie. no dots, no package -- we
370
+ # already know its package!), and 'module_file' is the path to
371
+ # the .py file, relative to the current directory
372
+ # (ie. including 'package_dir').
373
+ package_dir = self.get_package_dir(package)
374
+ modules = self.find_package_modules(package, package_dir)
375
+
376
+ # Now loop over the modules we found, "building" each one (just
377
+ # copy it to self.build_lib).
378
+ for package_, module, module_file in modules:
379
+ assert package == package_
380
+ self.build_module(module, module_file, package)
381
+
382
+ def byte_compile(self, files) -> None:
383
+ if sys.dont_write_bytecode:
384
+ self.warn('byte-compiling is disabled, skipping.')
385
+ return
386
+
387
+ from ..util import byte_compile
388
+
389
+ prefix = self.build_lib
390
+ if prefix[-1] != os.sep:
391
+ prefix = prefix + os.sep
392
+
393
+ # XXX this code is essentially the same as the 'byte_compile()
394
+ # method of the "install_lib" command, except for the determination
395
+ # of the 'prefix' string. Hmmm.
396
+ if self.compile:
397
+ byte_compile(
398
+ files, optimize=0, force=self.force, prefix=prefix, dry_run=self.dry_run
399
+ )
400
+ if self.optimize > 0:
401
+ byte_compile(
402
+ files,
403
+ optimize=self.optimize,
404
+ force=self.force,
405
+ prefix=prefix,
406
+ dry_run=self.dry_run,
407
+ )
@@ -0,0 +1,160 @@
1
+ """distutils.command.build_scripts
2
+
3
+ Implements the Distutils 'build_scripts' command."""
4
+
5
+ import os
6
+ import re
7
+ import tokenize
8
+ from distutils._log import log
9
+ from stat import ST_MODE
10
+ from typing import ClassVar
11
+
12
+ from .._modified import newer
13
+ from ..core import Command
14
+ from ..util import convert_path
15
+
16
+ shebang_pattern = re.compile('^#!.*python[0-9.]*([ \t].*)?$')
17
+ """
18
+ Pattern matching a Python interpreter indicated in first line of a script.
19
+ """
20
+
21
+ # for Setuptools compatibility
22
+ first_line_re = shebang_pattern
23
+
24
+
25
+ class build_scripts(Command):
26
+ description = "\"build\" scripts (copy and fixup #! line)"
27
+
28
+ user_options: ClassVar[list[tuple[str, str, str]]] = [
29
+ ('build-dir=', 'd', "directory to \"build\" (copy) to"),
30
+ ('force', 'f', "forcibly build everything (ignore file timestamps"),
31
+ ('executable=', 'e', "specify final destination interpreter path"),
32
+ ]
33
+
34
+ boolean_options: ClassVar[list[str]] = ['force']
35
+
36
+ def initialize_options(self):
37
+ self.build_dir = None
38
+ self.scripts = None
39
+ self.force = None
40
+ self.executable = None
41
+
42
+ def finalize_options(self):
43
+ self.set_undefined_options(
44
+ 'build',
45
+ ('build_scripts', 'build_dir'),
46
+ ('force', 'force'),
47
+ ('executable', 'executable'),
48
+ )
49
+ self.scripts = self.distribution.scripts
50
+
51
+ def get_source_files(self):
52
+ return self.scripts
53
+
54
+ def run(self):
55
+ if not self.scripts:
56
+ return
57
+ self.copy_scripts()
58
+
59
+ def copy_scripts(self):
60
+ """
61
+ Copy each script listed in ``self.scripts``.
62
+
63
+ If a script is marked as a Python script (first line matches
64
+ 'shebang_pattern', i.e. starts with ``#!`` and contains
65
+ "python"), then adjust in the copy the first line to refer to
66
+ the current Python interpreter.
67
+ """
68
+ self.mkpath(self.build_dir)
69
+ outfiles = []
70
+ updated_files = []
71
+ for script in self.scripts:
72
+ self._copy_script(script, outfiles, updated_files)
73
+
74
+ self._change_modes(outfiles)
75
+
76
+ return outfiles, updated_files
77
+
78
+ def _copy_script(self, script, outfiles, updated_files):
79
+ shebang_match = None
80
+ script = convert_path(script)
81
+ outfile = os.path.join(self.build_dir, os.path.basename(script))
82
+ outfiles.append(outfile)
83
+
84
+ if not self.force and not newer(script, outfile):
85
+ log.debug("not copying %s (up-to-date)", script)
86
+ return
87
+
88
+ # Always open the file, but ignore failures in dry-run mode
89
+ # in order to attempt to copy directly.
90
+ try:
91
+ f = tokenize.open(script)
92
+ except OSError:
93
+ if not self.dry_run:
94
+ raise
95
+ f = None
96
+ else:
97
+ first_line = f.readline()
98
+ if not first_line:
99
+ self.warn(f"{script} is an empty file (skipping)")
100
+ return
101
+
102
+ shebang_match = shebang_pattern.match(first_line)
103
+
104
+ updated_files.append(outfile)
105
+ if shebang_match:
106
+ log.info("copying and adjusting %s -> %s", script, self.build_dir)
107
+ if not self.dry_run:
108
+ post_interp = shebang_match.group(1) or ''
109
+ shebang = "#!" + self.executable + post_interp + "\n"
110
+ self._validate_shebang(shebang, f.encoding)
111
+ with open(outfile, "w", encoding=f.encoding) as outf:
112
+ outf.write(shebang)
113
+ outf.writelines(f.readlines())
114
+ if f:
115
+ f.close()
116
+ else:
117
+ if f:
118
+ f.close()
119
+ self.copy_file(script, outfile)
120
+
121
+ def _change_modes(self, outfiles):
122
+ if os.name != 'posix':
123
+ return
124
+
125
+ for file in outfiles:
126
+ self._change_mode(file)
127
+
128
+ def _change_mode(self, file):
129
+ if self.dry_run:
130
+ log.info("changing mode of %s", file)
131
+ return
132
+
133
+ oldmode = os.stat(file)[ST_MODE] & 0o7777
134
+ newmode = (oldmode | 0o555) & 0o7777
135
+ if newmode != oldmode:
136
+ log.info("changing mode of %s from %o to %o", file, oldmode, newmode)
137
+ os.chmod(file, newmode)
138
+
139
+ @staticmethod
140
+ def _validate_shebang(shebang, encoding):
141
+ # Python parser starts to read a script using UTF-8 until
142
+ # it gets a #coding:xxx cookie. The shebang has to be the
143
+ # first line of a file, the #coding:xxx cookie cannot be
144
+ # written before. So the shebang has to be encodable to
145
+ # UTF-8.
146
+ try:
147
+ shebang.encode('utf-8')
148
+ except UnicodeEncodeError:
149
+ raise ValueError(f"The shebang ({shebang!r}) is not encodable to utf-8")
150
+
151
+ # If the script is encoded to a custom encoding (use a
152
+ # #coding:xxx cookie), the shebang has to be encodable to
153
+ # the script encoding too.
154
+ try:
155
+ shebang.encode(encoding)
156
+ except UnicodeEncodeError:
157
+ raise ValueError(
158
+ f"The shebang ({shebang!r}) is not encodable "
159
+ f"to the script encoding ({encoding})"
160
+ )