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,336 @@
1
+ import io
2
+ import json
3
+ import logging
4
+ import os
5
+ import re
6
+ import typing
7
+ from contextlib import contextmanager
8
+ from textwrap import indent, wrap
9
+ from typing import Any, Dict, Generator, Iterator, List, Optional, Sequence, Union
10
+
11
+ from .fastjsonschema_exceptions import JsonSchemaValueException
12
+
13
+ if typing.TYPE_CHECKING:
14
+ import sys
15
+
16
+ if sys.version_info < (3, 11):
17
+ from typing_extensions import Self
18
+ else:
19
+ from typing import Self
20
+
21
+ _logger = logging.getLogger(__name__)
22
+
23
+ _MESSAGE_REPLACEMENTS = {
24
+ "must be named by propertyName definition": "keys must be named by",
25
+ "one of contains definition": "at least one item that matches",
26
+ " same as const definition:": "",
27
+ "only specified items": "only items matching the definition",
28
+ }
29
+
30
+ _SKIP_DETAILS = (
31
+ "must not be empty",
32
+ "is always invalid",
33
+ "must not be there",
34
+ )
35
+
36
+ _NEED_DETAILS = {"anyOf", "oneOf", "allOf", "contains", "propertyNames", "not", "items"}
37
+
38
+ _CAMEL_CASE_SPLITTER = re.compile(r"\W+|([A-Z][^A-Z\W]*)")
39
+ _IDENTIFIER = re.compile(r"^[\w_]+$", re.I)
40
+
41
+ _TOML_JARGON = {
42
+ "object": "table",
43
+ "property": "key",
44
+ "properties": "keys",
45
+ "property names": "keys",
46
+ }
47
+
48
+ _FORMATS_HELP = """
49
+ For more details about `format` see
50
+ https://validate-pyproject.readthedocs.io/en/latest/api/validate_pyproject.formats.html
51
+ """
52
+
53
+
54
+ class ValidationError(JsonSchemaValueException):
55
+ """Report violations of a given JSON schema.
56
+
57
+ This class extends :exc:`~fastjsonschema.JsonSchemaValueException`
58
+ by adding the following properties:
59
+
60
+ - ``summary``: an improved version of the ``JsonSchemaValueException`` error message
61
+ with only the necessary information)
62
+
63
+ - ``details``: more contextual information about the error like the failing schema
64
+ itself and the value that violates the schema.
65
+
66
+ Depending on the level of the verbosity of the ``logging`` configuration
67
+ the exception message will be only ``summary`` (default) or a combination of
68
+ ``summary`` and ``details`` (when the logging level is set to :obj:`logging.DEBUG`).
69
+ """
70
+
71
+ summary = ""
72
+ details = ""
73
+ _original_message = ""
74
+
75
+ @classmethod
76
+ def _from_jsonschema(cls, ex: JsonSchemaValueException) -> "Self":
77
+ formatter = _ErrorFormatting(ex)
78
+ obj = cls(str(formatter), ex.value, formatter.name, ex.definition, ex.rule)
79
+ debug_code = os.getenv("JSONSCHEMA_DEBUG_CODE_GENERATION", "false").lower()
80
+ if debug_code != "false": # pragma: no cover
81
+ obj.__cause__, obj.__traceback__ = ex.__cause__, ex.__traceback__
82
+ obj._original_message = ex.message
83
+ obj.summary = formatter.summary
84
+ obj.details = formatter.details
85
+ return obj
86
+
87
+
88
+ @contextmanager
89
+ def detailed_errors() -> Generator[None, None, None]:
90
+ try:
91
+ yield
92
+ except JsonSchemaValueException as ex:
93
+ raise ValidationError._from_jsonschema(ex) from None
94
+
95
+
96
+ class _ErrorFormatting:
97
+ def __init__(self, ex: JsonSchemaValueException):
98
+ self.ex = ex
99
+ self.name = f"`{self._simplify_name(ex.name)}`"
100
+ self._original_message: str = self.ex.message.replace(ex.name, self.name)
101
+ self._summary = ""
102
+ self._details = ""
103
+
104
+ def __str__(self) -> str:
105
+ if _logger.getEffectiveLevel() <= logging.DEBUG and self.details:
106
+ return f"{self.summary}\n\n{self.details}"
107
+
108
+ return self.summary
109
+
110
+ @property
111
+ def summary(self) -> str:
112
+ if not self._summary:
113
+ self._summary = self._expand_summary()
114
+
115
+ return self._summary
116
+
117
+ @property
118
+ def details(self) -> str:
119
+ if not self._details:
120
+ self._details = self._expand_details()
121
+
122
+ return self._details
123
+
124
+ @staticmethod
125
+ def _simplify_name(name: str) -> str:
126
+ x = len("data.")
127
+ return name[x:] if name.startswith("data.") else name
128
+
129
+ def _expand_summary(self) -> str:
130
+ msg = self._original_message
131
+
132
+ for bad, repl in _MESSAGE_REPLACEMENTS.items():
133
+ msg = msg.replace(bad, repl)
134
+
135
+ if any(substring in msg for substring in _SKIP_DETAILS):
136
+ return msg
137
+
138
+ schema = self.ex.rule_definition
139
+ if self.ex.rule in _NEED_DETAILS and schema:
140
+ summary = _SummaryWriter(_TOML_JARGON)
141
+ return f"{msg}:\n\n{indent(summary(schema), ' ')}"
142
+
143
+ return msg
144
+
145
+ def _expand_details(self) -> str:
146
+ optional = []
147
+ definition = self.ex.definition or {}
148
+ desc_lines = definition.pop("$$description", [])
149
+ desc = definition.pop("description", None) or " ".join(desc_lines)
150
+ if desc:
151
+ description = "\n".join(
152
+ wrap(
153
+ desc,
154
+ width=80,
155
+ initial_indent=" ",
156
+ subsequent_indent=" ",
157
+ break_long_words=False,
158
+ )
159
+ )
160
+ optional.append(f"DESCRIPTION:\n{description}")
161
+ schema = json.dumps(definition, indent=4)
162
+ value = json.dumps(self.ex.value, indent=4)
163
+ defaults = [
164
+ f"GIVEN VALUE:\n{indent(value, ' ')}",
165
+ f"OFFENDING RULE: {self.ex.rule!r}",
166
+ f"DEFINITION:\n{indent(schema, ' ')}",
167
+ ]
168
+ msg = "\n\n".join(optional + defaults)
169
+ epilog = f"\n{_FORMATS_HELP}" if "format" in msg.lower() else ""
170
+ return msg + epilog
171
+
172
+
173
+ class _SummaryWriter:
174
+ _IGNORE = frozenset(("description", "default", "title", "examples"))
175
+
176
+ def __init__(self, jargon: Optional[Dict[str, str]] = None):
177
+ self.jargon: Dict[str, str] = jargon or {}
178
+ # Clarify confusing terms
179
+ self._terms = {
180
+ "anyOf": "at least one of the following",
181
+ "oneOf": "exactly one of the following",
182
+ "allOf": "all of the following",
183
+ "not": "(*NOT* the following)",
184
+ "prefixItems": f"{self._jargon('items')} (in order)",
185
+ "items": "items",
186
+ "contains": "contains at least one of",
187
+ "propertyNames": (
188
+ f"non-predefined acceptable {self._jargon('property names')}"
189
+ ),
190
+ "patternProperties": f"{self._jargon('properties')} named via pattern",
191
+ "const": "predefined value",
192
+ "enum": "one of",
193
+ }
194
+ # Attributes that indicate that the definition is easy and can be done
195
+ # inline (e.g. string and number)
196
+ self._guess_inline_defs = [
197
+ "enum",
198
+ "const",
199
+ "maxLength",
200
+ "minLength",
201
+ "pattern",
202
+ "format",
203
+ "minimum",
204
+ "maximum",
205
+ "exclusiveMinimum",
206
+ "exclusiveMaximum",
207
+ "multipleOf",
208
+ ]
209
+
210
+ def _jargon(self, term: Union[str, List[str]]) -> Union[str, List[str]]:
211
+ if isinstance(term, list):
212
+ return [self.jargon.get(t, t) for t in term]
213
+ return self.jargon.get(term, term)
214
+
215
+ def __call__(
216
+ self,
217
+ schema: Union[dict, List[dict]],
218
+ prefix: str = "",
219
+ *,
220
+ _path: Sequence[str] = (),
221
+ ) -> str:
222
+ if isinstance(schema, list):
223
+ return self._handle_list(schema, prefix, _path)
224
+
225
+ filtered = self._filter_unecessary(schema, _path)
226
+ simple = self._handle_simple_dict(filtered, _path)
227
+ if simple:
228
+ return f"{prefix}{simple}"
229
+
230
+ child_prefix = self._child_prefix(prefix, " ")
231
+ item_prefix = self._child_prefix(prefix, "- ")
232
+ indent = len(prefix) * " "
233
+ with io.StringIO() as buffer:
234
+ for i, (key, value) in enumerate(filtered.items()):
235
+ child_path = [*_path, key]
236
+ line_prefix = prefix if i == 0 else indent
237
+ buffer.write(f"{line_prefix}{self._label(child_path)}:")
238
+ # ^ just the first item should receive the complete prefix
239
+ if isinstance(value, dict):
240
+ filtered = self._filter_unecessary(value, child_path)
241
+ simple = self._handle_simple_dict(filtered, child_path)
242
+ buffer.write(
243
+ f" {simple}"
244
+ if simple
245
+ else f"\n{self(value, child_prefix, _path=child_path)}"
246
+ )
247
+ elif isinstance(value, list) and (
248
+ key != "type" or self._is_property(child_path)
249
+ ):
250
+ children = self._handle_list(value, item_prefix, child_path)
251
+ sep = " " if children.startswith("[") else "\n"
252
+ buffer.write(f"{sep}{children}")
253
+ else:
254
+ buffer.write(f" {self._value(value, child_path)}\n")
255
+ return buffer.getvalue()
256
+
257
+ def _is_unecessary(self, path: Sequence[str]) -> bool:
258
+ if self._is_property(path) or not path: # empty path => instruction @ root
259
+ return False
260
+ key = path[-1]
261
+ return any(key.startswith(k) for k in "$_") or key in self._IGNORE
262
+
263
+ def _filter_unecessary(
264
+ self, schema: Dict[str, Any], path: Sequence[str]
265
+ ) -> Dict[str, Any]:
266
+ return {
267
+ key: value
268
+ for key, value in schema.items()
269
+ if not self._is_unecessary([*path, key])
270
+ }
271
+
272
+ def _handle_simple_dict(self, value: dict, path: Sequence[str]) -> Optional[str]:
273
+ inline = any(p in value for p in self._guess_inline_defs)
274
+ simple = not any(isinstance(v, (list, dict)) for v in value.values())
275
+ if inline or simple:
276
+ return f"{{{', '.join(self._inline_attrs(value, path))}}}\n"
277
+ return None
278
+
279
+ def _handle_list(
280
+ self, schemas: list, prefix: str = "", path: Sequence[str] = ()
281
+ ) -> str:
282
+ if self._is_unecessary(path):
283
+ return ""
284
+
285
+ repr_ = repr(schemas)
286
+ if all(not isinstance(e, (dict, list)) for e in schemas) and len(repr_) < 60:
287
+ return f"{repr_}\n"
288
+
289
+ item_prefix = self._child_prefix(prefix, "- ")
290
+ return "".join(
291
+ self(v, item_prefix, _path=[*path, f"[{i}]"]) for i, v in enumerate(schemas)
292
+ )
293
+
294
+ def _is_property(self, path: Sequence[str]) -> bool:
295
+ """Check if the given path can correspond to an arbitrarily named property"""
296
+ counter = 0
297
+ for key in path[-2::-1]:
298
+ if key not in {"properties", "patternProperties"}:
299
+ break
300
+ counter += 1
301
+
302
+ # If the counter if even, the path correspond to a JSON Schema keyword
303
+ # otherwise it can be any arbitrary string naming a property
304
+ return counter % 2 == 1
305
+
306
+ def _label(self, path: Sequence[str]) -> str:
307
+ *parents, key = path
308
+ if not self._is_property(path):
309
+ norm_key = _separate_terms(key)
310
+ return self._terms.get(key) or " ".join(self._jargon(norm_key))
311
+
312
+ if parents[-1] == "patternProperties":
313
+ return f"(regex {key!r})"
314
+ return repr(key) # property name
315
+
316
+ def _value(self, value: Any, path: Sequence[str]) -> str:
317
+ if path[-1] == "type" and not self._is_property(path):
318
+ type_ = self._jargon(value)
319
+ return f"[{', '.join(type_)}]" if isinstance(type_, list) else type_
320
+ return repr(value)
321
+
322
+ def _inline_attrs(self, schema: dict, path: Sequence[str]) -> Iterator[str]:
323
+ for key, value in schema.items():
324
+ child_path = [*path, key]
325
+ yield f"{self._label(child_path)}: {self._value(value, child_path)}"
326
+
327
+ def _child_prefix(self, parent_prefix: str, child_prefix: str) -> str:
328
+ return len(parent_prefix) * " " + child_prefix
329
+
330
+
331
+ def _separate_terms(word: str) -> List[str]:
332
+ """
333
+ >>> _separate_terms("FooBar-foo")
334
+ ['foo', 'bar', 'foo']
335
+ """
336
+ return [w.lower() for w in _CAMEL_CASE_SPLITTER.split(word) if w]
@@ -0,0 +1,82 @@
1
+ """The purpose of this module is implement PEP 621 validations that are
2
+ difficult to express as a JSON Schema (or that are not supported by the current
3
+ JSON Schema library).
4
+ """
5
+
6
+ from inspect import cleandoc
7
+ from typing import Mapping, TypeVar
8
+
9
+ from .error_reporting import ValidationError
10
+
11
+ T = TypeVar("T", bound=Mapping)
12
+
13
+
14
+ class RedefiningStaticFieldAsDynamic(ValidationError):
15
+ _DESC = """According to PEP 621:
16
+
17
+ Build back-ends MUST raise an error if the metadata specifies a field
18
+ statically as well as being listed in dynamic.
19
+ """
20
+ __doc__ = _DESC
21
+ _URL = (
22
+ "https://packaging.python.org/en/latest/specifications/"
23
+ "pyproject-toml/#dynamic"
24
+ )
25
+
26
+
27
+ class IncludedDependencyGroupMustExist(ValidationError):
28
+ _DESC = """An included dependency group must exist and must not be cyclic.
29
+ """
30
+ __doc__ = _DESC
31
+ _URL = "https://peps.python.org/pep-0735/"
32
+
33
+
34
+ def validate_project_dynamic(pyproject: T) -> T:
35
+ project_table = pyproject.get("project", {})
36
+ dynamic = project_table.get("dynamic", [])
37
+
38
+ for field in dynamic:
39
+ if field in project_table:
40
+ raise RedefiningStaticFieldAsDynamic(
41
+ message=f"You cannot provide a value for `project.{field}` and "
42
+ "list it under `project.dynamic` at the same time",
43
+ value={
44
+ field: project_table[field],
45
+ "...": " # ...",
46
+ "dynamic": dynamic,
47
+ },
48
+ name=f"data.project.{field}",
49
+ definition={
50
+ "description": cleandoc(RedefiningStaticFieldAsDynamic._DESC),
51
+ "see": RedefiningStaticFieldAsDynamic._URL,
52
+ },
53
+ rule="PEP 621",
54
+ )
55
+
56
+ return pyproject
57
+
58
+
59
+ def validate_include_depenency(pyproject: T) -> T:
60
+ dependency_groups = pyproject.get("dependency-groups", {})
61
+ for key, value in dependency_groups.items():
62
+ for each in value:
63
+ if (
64
+ isinstance(each, dict)
65
+ and (include_group := each.get("include-group"))
66
+ and include_group not in dependency_groups
67
+ ):
68
+ raise IncludedDependencyGroupMustExist(
69
+ message=f"The included dependency group {include_group} doesn't exist",
70
+ value=each,
71
+ name=f"data.dependency_groups.{key}",
72
+ definition={
73
+ "description": cleandoc(IncludedDependencyGroupMustExist._DESC),
74
+ "see": IncludedDependencyGroupMustExist._URL,
75
+ },
76
+ rule="PEP 735",
77
+ )
78
+ # TODO: check for `include-group` cycles (can be conditional to graphlib)
79
+ return pyproject
80
+
81
+
82
+ EXTRA_VALIDATIONS = (validate_project_dynamic, validate_include_depenency)
@@ -0,0 +1,51 @@
1
+ import re
2
+
3
+
4
+ SPLIT_RE = re.compile(r'[\.\[\]]+')
5
+
6
+
7
+ class JsonSchemaException(ValueError):
8
+ """
9
+ Base exception of ``fastjsonschema`` library.
10
+ """
11
+
12
+
13
+ class JsonSchemaValueException(JsonSchemaException):
14
+ """
15
+ Exception raised by validation function. Available properties:
16
+
17
+ * ``message`` containing human-readable information what is wrong (e.g. ``data.property[index] must be smaller than or equal to 42``),
18
+ * invalid ``value`` (e.g. ``60``),
19
+ * ``name`` of a path in the data structure (e.g. ``data.property[index]``),
20
+ * ``path`` as an array in the data structure (e.g. ``['data', 'property', 'index']``),
21
+ * the whole ``definition`` which the ``value`` has to fulfil (e.g. ``{'type': 'number', 'maximum': 42}``),
22
+ * ``rule`` which the ``value`` is breaking (e.g. ``maximum``)
23
+ * and ``rule_definition`` (e.g. ``42``).
24
+
25
+ .. versionchanged:: 2.14.0
26
+ Added all extra properties.
27
+ """
28
+
29
+ def __init__(self, message, value=None, name=None, definition=None, rule=None):
30
+ super().__init__(message)
31
+ self.message = message
32
+ self.value = value
33
+ self.name = name
34
+ self.definition = definition
35
+ self.rule = rule
36
+
37
+ @property
38
+ def path(self):
39
+ return [item for item in SPLIT_RE.split(self.name) if item != '']
40
+
41
+ @property
42
+ def rule_definition(self):
43
+ if not self.rule or not self.definition:
44
+ return None
45
+ return self.definition.get(self.rule)
46
+
47
+
48
+ class JsonSchemaDefinitionException(JsonSchemaException):
49
+ """
50
+ Exception raised by generator of validation function.
51
+ """