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,993 @@
1
+ from __future__ import annotations
2
+
3
+ import collections.abc
4
+ import inspect
5
+ import sys
6
+ import types
7
+ import typing
8
+ import warnings
9
+ from enum import Enum
10
+ from inspect import Parameter, isclass, isfunction
11
+ from io import BufferedIOBase, IOBase, RawIOBase, TextIOBase
12
+ from textwrap import indent
13
+ from typing import (
14
+ IO,
15
+ AbstractSet,
16
+ Any,
17
+ BinaryIO,
18
+ Callable,
19
+ Dict,
20
+ ForwardRef,
21
+ List,
22
+ Mapping,
23
+ MutableMapping,
24
+ NewType,
25
+ Optional,
26
+ Sequence,
27
+ Set,
28
+ TextIO,
29
+ Tuple,
30
+ Type,
31
+ TypeVar,
32
+ Union,
33
+ )
34
+ from unittest.mock import Mock
35
+ from weakref import WeakKeyDictionary
36
+
37
+ try:
38
+ import typing_extensions
39
+ except ImportError:
40
+ typing_extensions = None # type: ignore[assignment]
41
+
42
+ # Must use this because typing.is_typeddict does not recognize
43
+ # TypedDict from typing_extensions, and as of version 4.12.0
44
+ # typing_extensions.TypedDict is different from typing.TypedDict
45
+ # on all versions.
46
+ from typing_extensions import is_typeddict
47
+
48
+ from ._config import ForwardRefPolicy
49
+ from ._exceptions import TypeCheckError, TypeHintWarning
50
+ from ._memo import TypeCheckMemo
51
+ from ._utils import evaluate_forwardref, get_stacklevel, get_type_name, qualified_name
52
+
53
+ if sys.version_info >= (3, 11):
54
+ from typing import (
55
+ Annotated,
56
+ NotRequired,
57
+ TypeAlias,
58
+ get_args,
59
+ get_origin,
60
+ )
61
+
62
+ SubclassableAny = Any
63
+ else:
64
+ from typing_extensions import (
65
+ Annotated,
66
+ NotRequired,
67
+ TypeAlias,
68
+ get_args,
69
+ get_origin,
70
+ )
71
+ from typing_extensions import Any as SubclassableAny
72
+
73
+ if sys.version_info >= (3, 10):
74
+ from importlib.metadata import entry_points
75
+ from typing import ParamSpec
76
+ else:
77
+ from importlib_metadata import entry_points
78
+ from typing_extensions import ParamSpec
79
+
80
+ TypeCheckerCallable: TypeAlias = Callable[
81
+ [Any, Any, Tuple[Any, ...], TypeCheckMemo], Any
82
+ ]
83
+ TypeCheckLookupCallback: TypeAlias = Callable[
84
+ [Any, Tuple[Any, ...], Tuple[Any, ...]], Optional[TypeCheckerCallable]
85
+ ]
86
+
87
+ checker_lookup_functions: list[TypeCheckLookupCallback] = []
88
+ generic_alias_types: tuple[type, ...] = (type(List), type(List[Any]))
89
+ if sys.version_info >= (3, 9):
90
+ generic_alias_types += (types.GenericAlias,)
91
+
92
+ protocol_check_cache: WeakKeyDictionary[
93
+ type[Any], dict[type[Any], TypeCheckError | None]
94
+ ] = WeakKeyDictionary()
95
+
96
+ # Sentinel
97
+ _missing = object()
98
+
99
+ # Lifted from mypy.sharedparse
100
+ BINARY_MAGIC_METHODS = {
101
+ "__add__",
102
+ "__and__",
103
+ "__cmp__",
104
+ "__divmod__",
105
+ "__div__",
106
+ "__eq__",
107
+ "__floordiv__",
108
+ "__ge__",
109
+ "__gt__",
110
+ "__iadd__",
111
+ "__iand__",
112
+ "__idiv__",
113
+ "__ifloordiv__",
114
+ "__ilshift__",
115
+ "__imatmul__",
116
+ "__imod__",
117
+ "__imul__",
118
+ "__ior__",
119
+ "__ipow__",
120
+ "__irshift__",
121
+ "__isub__",
122
+ "__itruediv__",
123
+ "__ixor__",
124
+ "__le__",
125
+ "__lshift__",
126
+ "__lt__",
127
+ "__matmul__",
128
+ "__mod__",
129
+ "__mul__",
130
+ "__ne__",
131
+ "__or__",
132
+ "__pow__",
133
+ "__radd__",
134
+ "__rand__",
135
+ "__rdiv__",
136
+ "__rfloordiv__",
137
+ "__rlshift__",
138
+ "__rmatmul__",
139
+ "__rmod__",
140
+ "__rmul__",
141
+ "__ror__",
142
+ "__rpow__",
143
+ "__rrshift__",
144
+ "__rshift__",
145
+ "__rsub__",
146
+ "__rtruediv__",
147
+ "__rxor__",
148
+ "__sub__",
149
+ "__truediv__",
150
+ "__xor__",
151
+ }
152
+
153
+
154
+ def check_callable(
155
+ value: Any,
156
+ origin_type: Any,
157
+ args: tuple[Any, ...],
158
+ memo: TypeCheckMemo,
159
+ ) -> None:
160
+ if not callable(value):
161
+ raise TypeCheckError("is not callable")
162
+
163
+ if args:
164
+ try:
165
+ signature = inspect.signature(value)
166
+ except (TypeError, ValueError):
167
+ return
168
+
169
+ argument_types = args[0]
170
+ if isinstance(argument_types, list) and not any(
171
+ type(item) is ParamSpec for item in argument_types
172
+ ):
173
+ # The callable must not have keyword-only arguments without defaults
174
+ unfulfilled_kwonlyargs = [
175
+ param.name
176
+ for param in signature.parameters.values()
177
+ if param.kind == Parameter.KEYWORD_ONLY
178
+ and param.default == Parameter.empty
179
+ ]
180
+ if unfulfilled_kwonlyargs:
181
+ raise TypeCheckError(
182
+ f"has mandatory keyword-only arguments in its declaration: "
183
+ f'{", ".join(unfulfilled_kwonlyargs)}'
184
+ )
185
+
186
+ num_positional_args = num_mandatory_pos_args = 0
187
+ has_varargs = False
188
+ for param in signature.parameters.values():
189
+ if param.kind in (
190
+ Parameter.POSITIONAL_ONLY,
191
+ Parameter.POSITIONAL_OR_KEYWORD,
192
+ ):
193
+ num_positional_args += 1
194
+ if param.default is Parameter.empty:
195
+ num_mandatory_pos_args += 1
196
+ elif param.kind == Parameter.VAR_POSITIONAL:
197
+ has_varargs = True
198
+
199
+ if num_mandatory_pos_args > len(argument_types):
200
+ raise TypeCheckError(
201
+ f"has too many mandatory positional arguments in its declaration; "
202
+ f"expected {len(argument_types)} but {num_mandatory_pos_args} "
203
+ f"mandatory positional argument(s) declared"
204
+ )
205
+ elif not has_varargs and num_positional_args < len(argument_types):
206
+ raise TypeCheckError(
207
+ f"has too few arguments in its declaration; expected "
208
+ f"{len(argument_types)} but {num_positional_args} argument(s) "
209
+ f"declared"
210
+ )
211
+
212
+
213
+ def check_mapping(
214
+ value: Any,
215
+ origin_type: Any,
216
+ args: tuple[Any, ...],
217
+ memo: TypeCheckMemo,
218
+ ) -> None:
219
+ if origin_type is Dict or origin_type is dict:
220
+ if not isinstance(value, dict):
221
+ raise TypeCheckError("is not a dict")
222
+ if origin_type is MutableMapping or origin_type is collections.abc.MutableMapping:
223
+ if not isinstance(value, collections.abc.MutableMapping):
224
+ raise TypeCheckError("is not a mutable mapping")
225
+ elif not isinstance(value, collections.abc.Mapping):
226
+ raise TypeCheckError("is not a mapping")
227
+
228
+ if args:
229
+ key_type, value_type = args
230
+ if key_type is not Any or value_type is not Any:
231
+ samples = memo.config.collection_check_strategy.iterate_samples(
232
+ value.items()
233
+ )
234
+ for k, v in samples:
235
+ try:
236
+ check_type_internal(k, key_type, memo)
237
+ except TypeCheckError as exc:
238
+ exc.append_path_element(f"key {k!r}")
239
+ raise
240
+
241
+ try:
242
+ check_type_internal(v, value_type, memo)
243
+ except TypeCheckError as exc:
244
+ exc.append_path_element(f"value of key {k!r}")
245
+ raise
246
+
247
+
248
+ def check_typed_dict(
249
+ value: Any,
250
+ origin_type: Any,
251
+ args: tuple[Any, ...],
252
+ memo: TypeCheckMemo,
253
+ ) -> None:
254
+ if not isinstance(value, dict):
255
+ raise TypeCheckError("is not a dict")
256
+
257
+ declared_keys = frozenset(origin_type.__annotations__)
258
+ if hasattr(origin_type, "__required_keys__"):
259
+ required_keys = set(origin_type.__required_keys__)
260
+ else: # py3.8 and lower
261
+ required_keys = set(declared_keys) if origin_type.__total__ else set()
262
+
263
+ existing_keys = set(value)
264
+ extra_keys = existing_keys - declared_keys
265
+ if extra_keys:
266
+ keys_formatted = ", ".join(f'"{key}"' for key in sorted(extra_keys, key=repr))
267
+ raise TypeCheckError(f"has unexpected extra key(s): {keys_formatted}")
268
+
269
+ # Detect NotRequired fields which are hidden by get_type_hints()
270
+ type_hints: dict[str, type] = {}
271
+ for key, annotation in origin_type.__annotations__.items():
272
+ if isinstance(annotation, ForwardRef):
273
+ annotation = evaluate_forwardref(annotation, memo)
274
+ if get_origin(annotation) is NotRequired:
275
+ required_keys.discard(key)
276
+ annotation = get_args(annotation)[0]
277
+
278
+ type_hints[key] = annotation
279
+
280
+ missing_keys = required_keys - existing_keys
281
+ if missing_keys:
282
+ keys_formatted = ", ".join(f'"{key}"' for key in sorted(missing_keys, key=repr))
283
+ raise TypeCheckError(f"is missing required key(s): {keys_formatted}")
284
+
285
+ for key, argtype in type_hints.items():
286
+ argvalue = value.get(key, _missing)
287
+ if argvalue is not _missing:
288
+ try:
289
+ check_type_internal(argvalue, argtype, memo)
290
+ except TypeCheckError as exc:
291
+ exc.append_path_element(f"value of key {key!r}")
292
+ raise
293
+
294
+
295
+ def check_list(
296
+ value: Any,
297
+ origin_type: Any,
298
+ args: tuple[Any, ...],
299
+ memo: TypeCheckMemo,
300
+ ) -> None:
301
+ if not isinstance(value, list):
302
+ raise TypeCheckError("is not a list")
303
+
304
+ if args and args != (Any,):
305
+ samples = memo.config.collection_check_strategy.iterate_samples(value)
306
+ for i, v in enumerate(samples):
307
+ try:
308
+ check_type_internal(v, args[0], memo)
309
+ except TypeCheckError as exc:
310
+ exc.append_path_element(f"item {i}")
311
+ raise
312
+
313
+
314
+ def check_sequence(
315
+ value: Any,
316
+ origin_type: Any,
317
+ args: tuple[Any, ...],
318
+ memo: TypeCheckMemo,
319
+ ) -> None:
320
+ if not isinstance(value, collections.abc.Sequence):
321
+ raise TypeCheckError("is not a sequence")
322
+
323
+ if args and args != (Any,):
324
+ samples = memo.config.collection_check_strategy.iterate_samples(value)
325
+ for i, v in enumerate(samples):
326
+ try:
327
+ check_type_internal(v, args[0], memo)
328
+ except TypeCheckError as exc:
329
+ exc.append_path_element(f"item {i}")
330
+ raise
331
+
332
+
333
+ def check_set(
334
+ value: Any,
335
+ origin_type: Any,
336
+ args: tuple[Any, ...],
337
+ memo: TypeCheckMemo,
338
+ ) -> None:
339
+ if origin_type is frozenset:
340
+ if not isinstance(value, frozenset):
341
+ raise TypeCheckError("is not a frozenset")
342
+ elif not isinstance(value, AbstractSet):
343
+ raise TypeCheckError("is not a set")
344
+
345
+ if args and args != (Any,):
346
+ samples = memo.config.collection_check_strategy.iterate_samples(value)
347
+ for v in samples:
348
+ try:
349
+ check_type_internal(v, args[0], memo)
350
+ except TypeCheckError as exc:
351
+ exc.append_path_element(f"[{v}]")
352
+ raise
353
+
354
+
355
+ def check_tuple(
356
+ value: Any,
357
+ origin_type: Any,
358
+ args: tuple[Any, ...],
359
+ memo: TypeCheckMemo,
360
+ ) -> None:
361
+ # Specialized check for NamedTuples
362
+ if field_types := getattr(origin_type, "__annotations__", None):
363
+ if not isinstance(value, origin_type):
364
+ raise TypeCheckError(
365
+ f"is not a named tuple of type {qualified_name(origin_type)}"
366
+ )
367
+
368
+ for name, field_type in field_types.items():
369
+ try:
370
+ check_type_internal(getattr(value, name), field_type, memo)
371
+ except TypeCheckError as exc:
372
+ exc.append_path_element(f"attribute {name!r}")
373
+ raise
374
+
375
+ return
376
+ elif not isinstance(value, tuple):
377
+ raise TypeCheckError("is not a tuple")
378
+
379
+ if args:
380
+ use_ellipsis = args[-1] is Ellipsis
381
+ tuple_params = args[: -1 if use_ellipsis else None]
382
+ else:
383
+ # Unparametrized Tuple or plain tuple
384
+ return
385
+
386
+ if use_ellipsis:
387
+ element_type = tuple_params[0]
388
+ samples = memo.config.collection_check_strategy.iterate_samples(value)
389
+ for i, element in enumerate(samples):
390
+ try:
391
+ check_type_internal(element, element_type, memo)
392
+ except TypeCheckError as exc:
393
+ exc.append_path_element(f"item {i}")
394
+ raise
395
+ elif tuple_params == ((),):
396
+ if value != ():
397
+ raise TypeCheckError("is not an empty tuple")
398
+ else:
399
+ if len(value) != len(tuple_params):
400
+ raise TypeCheckError(
401
+ f"has wrong number of elements (expected {len(tuple_params)}, got "
402
+ f"{len(value)} instead)"
403
+ )
404
+
405
+ for i, (element, element_type) in enumerate(zip(value, tuple_params)):
406
+ try:
407
+ check_type_internal(element, element_type, memo)
408
+ except TypeCheckError as exc:
409
+ exc.append_path_element(f"item {i}")
410
+ raise
411
+
412
+
413
+ def check_union(
414
+ value: Any,
415
+ origin_type: Any,
416
+ args: tuple[Any, ...],
417
+ memo: TypeCheckMemo,
418
+ ) -> None:
419
+ errors: dict[str, TypeCheckError] = {}
420
+ try:
421
+ for type_ in args:
422
+ try:
423
+ check_type_internal(value, type_, memo)
424
+ return
425
+ except TypeCheckError as exc:
426
+ errors[get_type_name(type_)] = exc
427
+
428
+ formatted_errors = indent(
429
+ "\n".join(f"{key}: {error}" for key, error in errors.items()), " "
430
+ )
431
+ finally:
432
+ del errors # avoid creating ref cycle
433
+ raise TypeCheckError(f"did not match any element in the union:\n{formatted_errors}")
434
+
435
+
436
+ def check_uniontype(
437
+ value: Any,
438
+ origin_type: Any,
439
+ args: tuple[Any, ...],
440
+ memo: TypeCheckMemo,
441
+ ) -> None:
442
+ errors: dict[str, TypeCheckError] = {}
443
+ for type_ in args:
444
+ try:
445
+ check_type_internal(value, type_, memo)
446
+ return
447
+ except TypeCheckError as exc:
448
+ errors[get_type_name(type_)] = exc
449
+
450
+ formatted_errors = indent(
451
+ "\n".join(f"{key}: {error}" for key, error in errors.items()), " "
452
+ )
453
+ raise TypeCheckError(f"did not match any element in the union:\n{formatted_errors}")
454
+
455
+
456
+ def check_class(
457
+ value: Any,
458
+ origin_type: Any,
459
+ args: tuple[Any, ...],
460
+ memo: TypeCheckMemo,
461
+ ) -> None:
462
+ if not isclass(value) and not isinstance(value, generic_alias_types):
463
+ raise TypeCheckError("is not a class")
464
+
465
+ if not args:
466
+ return
467
+
468
+ if isinstance(args[0], ForwardRef):
469
+ expected_class = evaluate_forwardref(args[0], memo)
470
+ else:
471
+ expected_class = args[0]
472
+
473
+ if expected_class is Any:
474
+ return
475
+ elif getattr(expected_class, "_is_protocol", False):
476
+ check_protocol(value, expected_class, (), memo)
477
+ elif isinstance(expected_class, TypeVar):
478
+ check_typevar(value, expected_class, (), memo, subclass_check=True)
479
+ elif get_origin(expected_class) is Union:
480
+ errors: dict[str, TypeCheckError] = {}
481
+ for arg in get_args(expected_class):
482
+ if arg is Any:
483
+ return
484
+
485
+ try:
486
+ check_class(value, type, (arg,), memo)
487
+ return
488
+ except TypeCheckError as exc:
489
+ errors[get_type_name(arg)] = exc
490
+ else:
491
+ formatted_errors = indent(
492
+ "\n".join(f"{key}: {error}" for key, error in errors.items()), " "
493
+ )
494
+ raise TypeCheckError(
495
+ f"did not match any element in the union:\n{formatted_errors}"
496
+ )
497
+ elif not issubclass(value, expected_class): # type: ignore[arg-type]
498
+ raise TypeCheckError(f"is not a subclass of {qualified_name(expected_class)}")
499
+
500
+
501
+ def check_newtype(
502
+ value: Any,
503
+ origin_type: Any,
504
+ args: tuple[Any, ...],
505
+ memo: TypeCheckMemo,
506
+ ) -> None:
507
+ check_type_internal(value, origin_type.__supertype__, memo)
508
+
509
+
510
+ def check_instance(
511
+ value: Any,
512
+ origin_type: Any,
513
+ args: tuple[Any, ...],
514
+ memo: TypeCheckMemo,
515
+ ) -> None:
516
+ if not isinstance(value, origin_type):
517
+ raise TypeCheckError(f"is not an instance of {qualified_name(origin_type)}")
518
+
519
+
520
+ def check_typevar(
521
+ value: Any,
522
+ origin_type: TypeVar,
523
+ args: tuple[Any, ...],
524
+ memo: TypeCheckMemo,
525
+ *,
526
+ subclass_check: bool = False,
527
+ ) -> None:
528
+ if origin_type.__bound__ is not None:
529
+ annotation = (
530
+ Type[origin_type.__bound__] if subclass_check else origin_type.__bound__
531
+ )
532
+ check_type_internal(value, annotation, memo)
533
+ elif origin_type.__constraints__:
534
+ for constraint in origin_type.__constraints__:
535
+ annotation = Type[constraint] if subclass_check else constraint
536
+ try:
537
+ check_type_internal(value, annotation, memo)
538
+ except TypeCheckError:
539
+ pass
540
+ else:
541
+ break
542
+ else:
543
+ formatted_constraints = ", ".join(
544
+ get_type_name(constraint) for constraint in origin_type.__constraints__
545
+ )
546
+ raise TypeCheckError(
547
+ f"does not match any of the constraints " f"({formatted_constraints})"
548
+ )
549
+
550
+
551
+ if typing_extensions is None:
552
+
553
+ def _is_literal_type(typ: object) -> bool:
554
+ return typ is typing.Literal
555
+
556
+ else:
557
+
558
+ def _is_literal_type(typ: object) -> bool:
559
+ return typ is typing.Literal or typ is typing_extensions.Literal
560
+
561
+
562
+ def check_literal(
563
+ value: Any,
564
+ origin_type: Any,
565
+ args: tuple[Any, ...],
566
+ memo: TypeCheckMemo,
567
+ ) -> None:
568
+ def get_literal_args(literal_args: tuple[Any, ...]) -> tuple[Any, ...]:
569
+ retval: list[Any] = []
570
+ for arg in literal_args:
571
+ if _is_literal_type(get_origin(arg)):
572
+ retval.extend(get_literal_args(arg.__args__))
573
+ elif arg is None or isinstance(arg, (int, str, bytes, bool, Enum)):
574
+ retval.append(arg)
575
+ else:
576
+ raise TypeError(
577
+ f"Illegal literal value: {arg}"
578
+ ) # TypeError here is deliberate
579
+
580
+ return tuple(retval)
581
+
582
+ final_args = tuple(get_literal_args(args))
583
+ try:
584
+ index = final_args.index(value)
585
+ except ValueError:
586
+ pass
587
+ else:
588
+ if type(final_args[index]) is type(value):
589
+ return
590
+
591
+ formatted_args = ", ".join(repr(arg) for arg in final_args)
592
+ raise TypeCheckError(f"is not any of ({formatted_args})") from None
593
+
594
+
595
+ def check_literal_string(
596
+ value: Any,
597
+ origin_type: Any,
598
+ args: tuple[Any, ...],
599
+ memo: TypeCheckMemo,
600
+ ) -> None:
601
+ check_type_internal(value, str, memo)
602
+
603
+
604
+ def check_typeguard(
605
+ value: Any,
606
+ origin_type: Any,
607
+ args: tuple[Any, ...],
608
+ memo: TypeCheckMemo,
609
+ ) -> None:
610
+ check_type_internal(value, bool, memo)
611
+
612
+
613
+ def check_none(
614
+ value: Any,
615
+ origin_type: Any,
616
+ args: tuple[Any, ...],
617
+ memo: TypeCheckMemo,
618
+ ) -> None:
619
+ if value is not None:
620
+ raise TypeCheckError("is not None")
621
+
622
+
623
+ def check_number(
624
+ value: Any,
625
+ origin_type: Any,
626
+ args: tuple[Any, ...],
627
+ memo: TypeCheckMemo,
628
+ ) -> None:
629
+ if origin_type is complex and not isinstance(value, (complex, float, int)):
630
+ raise TypeCheckError("is neither complex, float or int")
631
+ elif origin_type is float and not isinstance(value, (float, int)):
632
+ raise TypeCheckError("is neither float or int")
633
+
634
+
635
+ def check_io(
636
+ value: Any,
637
+ origin_type: Any,
638
+ args: tuple[Any, ...],
639
+ memo: TypeCheckMemo,
640
+ ) -> None:
641
+ if origin_type is TextIO or (origin_type is IO and args == (str,)):
642
+ if not isinstance(value, TextIOBase):
643
+ raise TypeCheckError("is not a text based I/O object")
644
+ elif origin_type is BinaryIO or (origin_type is IO and args == (bytes,)):
645
+ if not isinstance(value, (RawIOBase, BufferedIOBase)):
646
+ raise TypeCheckError("is not a binary I/O object")
647
+ elif not isinstance(value, IOBase):
648
+ raise TypeCheckError("is not an I/O object")
649
+
650
+
651
+ def check_protocol(
652
+ value: Any,
653
+ origin_type: Any,
654
+ args: tuple[Any, ...],
655
+ memo: TypeCheckMemo,
656
+ ) -> None:
657
+ subject: type[Any] = value if isclass(value) else type(value)
658
+
659
+ if subject in protocol_check_cache:
660
+ result_map = protocol_check_cache[subject]
661
+ if origin_type in result_map:
662
+ if exc := result_map[origin_type]:
663
+ raise exc
664
+ else:
665
+ return
666
+
667
+ # Collect a set of methods and non-method attributes present in the protocol
668
+ ignored_attrs = set(dir(typing.Protocol)) | {
669
+ "__annotations__",
670
+ "__non_callable_proto_members__",
671
+ }
672
+ expected_methods: dict[str, tuple[Any, Any]] = {}
673
+ expected_noncallable_members: dict[str, Any] = {}
674
+ for attrname in dir(origin_type):
675
+ # Skip attributes present in typing.Protocol
676
+ if attrname in ignored_attrs:
677
+ continue
678
+
679
+ member = getattr(origin_type, attrname)
680
+ if callable(member):
681
+ signature = inspect.signature(member)
682
+ argtypes = [
683
+ (p.annotation if p.annotation is not Parameter.empty else Any)
684
+ for p in signature.parameters.values()
685
+ if p.kind is not Parameter.KEYWORD_ONLY
686
+ ] or Ellipsis
687
+ return_annotation = (
688
+ signature.return_annotation
689
+ if signature.return_annotation is not Parameter.empty
690
+ else Any
691
+ )
692
+ expected_methods[attrname] = argtypes, return_annotation
693
+ else:
694
+ expected_noncallable_members[attrname] = member
695
+
696
+ for attrname, annotation in typing.get_type_hints(origin_type).items():
697
+ expected_noncallable_members[attrname] = annotation
698
+
699
+ subject_annotations = typing.get_type_hints(subject)
700
+
701
+ # Check that all required methods are present and their signatures are compatible
702
+ result_map = protocol_check_cache.setdefault(subject, {})
703
+ try:
704
+ for attrname, callable_args in expected_methods.items():
705
+ try:
706
+ method = getattr(subject, attrname)
707
+ except AttributeError:
708
+ if attrname in subject_annotations:
709
+ raise TypeCheckError(
710
+ f"is not compatible with the {origin_type.__qualname__} protocol "
711
+ f"because its {attrname!r} attribute is not a method"
712
+ ) from None
713
+ else:
714
+ raise TypeCheckError(
715
+ f"is not compatible with the {origin_type.__qualname__} protocol "
716
+ f"because it has no method named {attrname!r}"
717
+ ) from None
718
+
719
+ if not callable(method):
720
+ raise TypeCheckError(
721
+ f"is not compatible with the {origin_type.__qualname__} protocol "
722
+ f"because its {attrname!r} attribute is not a callable"
723
+ )
724
+
725
+ # TODO: raise exception on added keyword-only arguments without defaults
726
+ try:
727
+ check_callable(method, Callable, callable_args, memo)
728
+ except TypeCheckError as exc:
729
+ raise TypeCheckError(
730
+ f"is not compatible with the {origin_type.__qualname__} protocol "
731
+ f"because its {attrname!r} method {exc}"
732
+ ) from None
733
+
734
+ # Check that all required non-callable members are present
735
+ for attrname in expected_noncallable_members:
736
+ # TODO: implement assignability checks for non-callable members
737
+ if attrname not in subject_annotations and not hasattr(subject, attrname):
738
+ raise TypeCheckError(
739
+ f"is not compatible with the {origin_type.__qualname__} protocol "
740
+ f"because it has no attribute named {attrname!r}"
741
+ )
742
+ except TypeCheckError as exc:
743
+ result_map[origin_type] = exc
744
+ raise
745
+ else:
746
+ result_map[origin_type] = None
747
+
748
+
749
+ def check_byteslike(
750
+ value: Any,
751
+ origin_type: Any,
752
+ args: tuple[Any, ...],
753
+ memo: TypeCheckMemo,
754
+ ) -> None:
755
+ if not isinstance(value, (bytearray, bytes, memoryview)):
756
+ raise TypeCheckError("is not bytes-like")
757
+
758
+
759
+ def check_self(
760
+ value: Any,
761
+ origin_type: Any,
762
+ args: tuple[Any, ...],
763
+ memo: TypeCheckMemo,
764
+ ) -> None:
765
+ if memo.self_type is None:
766
+ raise TypeCheckError("cannot be checked against Self outside of a method call")
767
+
768
+ if isclass(value):
769
+ if not issubclass(value, memo.self_type):
770
+ raise TypeCheckError(
771
+ f"is not an instance of the self type "
772
+ f"({qualified_name(memo.self_type)})"
773
+ )
774
+ elif not isinstance(value, memo.self_type):
775
+ raise TypeCheckError(
776
+ f"is not an instance of the self type ({qualified_name(memo.self_type)})"
777
+ )
778
+
779
+
780
+ def check_paramspec(
781
+ value: Any,
782
+ origin_type: Any,
783
+ args: tuple[Any, ...],
784
+ memo: TypeCheckMemo,
785
+ ) -> None:
786
+ pass # No-op for now
787
+
788
+
789
+ def check_instanceof(
790
+ value: Any,
791
+ origin_type: Any,
792
+ args: tuple[Any, ...],
793
+ memo: TypeCheckMemo,
794
+ ) -> None:
795
+ if not isinstance(value, origin_type):
796
+ raise TypeCheckError(f"is not an instance of {qualified_name(origin_type)}")
797
+
798
+
799
+ def check_type_internal(
800
+ value: Any,
801
+ annotation: Any,
802
+ memo: TypeCheckMemo,
803
+ ) -> None:
804
+ """
805
+ Check that the given object is compatible with the given type annotation.
806
+
807
+ This function should only be used by type checker callables. Applications should use
808
+ :func:`~.check_type` instead.
809
+
810
+ :param value: the value to check
811
+ :param annotation: the type annotation to check against
812
+ :param memo: a memo object containing configuration and information necessary for
813
+ looking up forward references
814
+ """
815
+
816
+ if isinstance(annotation, ForwardRef):
817
+ try:
818
+ annotation = evaluate_forwardref(annotation, memo)
819
+ except NameError:
820
+ if memo.config.forward_ref_policy is ForwardRefPolicy.ERROR:
821
+ raise
822
+ elif memo.config.forward_ref_policy is ForwardRefPolicy.WARN:
823
+ warnings.warn(
824
+ f"Cannot resolve forward reference {annotation.__forward_arg__!r}",
825
+ TypeHintWarning,
826
+ stacklevel=get_stacklevel(),
827
+ )
828
+
829
+ return
830
+
831
+ if annotation is Any or annotation is SubclassableAny or isinstance(value, Mock):
832
+ return
833
+
834
+ # Skip type checks if value is an instance of a class that inherits from Any
835
+ if not isclass(value) and SubclassableAny in type(value).__bases__:
836
+ return
837
+
838
+ extras: tuple[Any, ...]
839
+ origin_type = get_origin(annotation)
840
+ if origin_type is Annotated:
841
+ annotation, *extras_ = get_args(annotation)
842
+ extras = tuple(extras_)
843
+ origin_type = get_origin(annotation)
844
+ else:
845
+ extras = ()
846
+
847
+ if origin_type is not None:
848
+ args = get_args(annotation)
849
+
850
+ # Compatibility hack to distinguish between unparametrized and empty tuple
851
+ # (tuple[()]), necessary due to https://github.com/python/cpython/issues/91137
852
+ if origin_type in (tuple, Tuple) and annotation is not Tuple and not args:
853
+ args = ((),)
854
+ else:
855
+ origin_type = annotation
856
+ args = ()
857
+
858
+ for lookup_func in checker_lookup_functions:
859
+ checker = lookup_func(origin_type, args, extras)
860
+ if checker:
861
+ checker(value, origin_type, args, memo)
862
+ return
863
+
864
+ if isclass(origin_type):
865
+ if not isinstance(value, origin_type):
866
+ raise TypeCheckError(f"is not an instance of {qualified_name(origin_type)}")
867
+ elif type(origin_type) is str: # noqa: E721
868
+ warnings.warn(
869
+ f"Skipping type check against {origin_type!r}; this looks like a "
870
+ f"string-form forward reference imported from another module",
871
+ TypeHintWarning,
872
+ stacklevel=get_stacklevel(),
873
+ )
874
+
875
+
876
+ # Equality checks are applied to these
877
+ origin_type_checkers = {
878
+ bytes: check_byteslike,
879
+ AbstractSet: check_set,
880
+ BinaryIO: check_io,
881
+ Callable: check_callable,
882
+ collections.abc.Callable: check_callable,
883
+ complex: check_number,
884
+ dict: check_mapping,
885
+ Dict: check_mapping,
886
+ float: check_number,
887
+ frozenset: check_set,
888
+ IO: check_io,
889
+ list: check_list,
890
+ List: check_list,
891
+ typing.Literal: check_literal,
892
+ Mapping: check_mapping,
893
+ MutableMapping: check_mapping,
894
+ None: check_none,
895
+ collections.abc.Mapping: check_mapping,
896
+ collections.abc.MutableMapping: check_mapping,
897
+ Sequence: check_sequence,
898
+ collections.abc.Sequence: check_sequence,
899
+ collections.abc.Set: check_set,
900
+ set: check_set,
901
+ Set: check_set,
902
+ TextIO: check_io,
903
+ tuple: check_tuple,
904
+ Tuple: check_tuple,
905
+ type: check_class,
906
+ Type: check_class,
907
+ Union: check_union,
908
+ }
909
+ if sys.version_info >= (3, 10):
910
+ origin_type_checkers[types.UnionType] = check_uniontype
911
+ origin_type_checkers[typing.TypeGuard] = check_typeguard
912
+ if sys.version_info >= (3, 11):
913
+ origin_type_checkers.update(
914
+ {typing.LiteralString: check_literal_string, typing.Self: check_self}
915
+ )
916
+ if typing_extensions is not None:
917
+ # On some Python versions, these may simply be re-exports from typing,
918
+ # but exactly which Python versions is subject to change,
919
+ # so it's best to err on the safe side
920
+ # and update the dictionary on all Python versions
921
+ # if typing_extensions is installed
922
+ origin_type_checkers[typing_extensions.Literal] = check_literal
923
+ origin_type_checkers[typing_extensions.LiteralString] = check_literal_string
924
+ origin_type_checkers[typing_extensions.Self] = check_self
925
+ origin_type_checkers[typing_extensions.TypeGuard] = check_typeguard
926
+
927
+
928
+ def builtin_checker_lookup(
929
+ origin_type: Any, args: tuple[Any, ...], extras: tuple[Any, ...]
930
+ ) -> TypeCheckerCallable | None:
931
+ checker = origin_type_checkers.get(origin_type)
932
+ if checker is not None:
933
+ return checker
934
+ elif is_typeddict(origin_type):
935
+ return check_typed_dict
936
+ elif isclass(origin_type) and issubclass(
937
+ origin_type,
938
+ Tuple, # type: ignore[arg-type]
939
+ ):
940
+ # NamedTuple
941
+ return check_tuple
942
+ elif getattr(origin_type, "_is_protocol", False):
943
+ return check_protocol
944
+ elif isinstance(origin_type, ParamSpec):
945
+ return check_paramspec
946
+ elif isinstance(origin_type, TypeVar):
947
+ return check_typevar
948
+ elif origin_type.__class__ is NewType:
949
+ # typing.NewType on Python 3.10+
950
+ return check_newtype
951
+ elif (
952
+ isfunction(origin_type)
953
+ and getattr(origin_type, "__module__", None) == "typing"
954
+ and getattr(origin_type, "__qualname__", "").startswith("NewType.")
955
+ and hasattr(origin_type, "__supertype__")
956
+ ):
957
+ # typing.NewType on Python 3.9 and below
958
+ return check_newtype
959
+
960
+ return None
961
+
962
+
963
+ checker_lookup_functions.append(builtin_checker_lookup)
964
+
965
+
966
+ def load_plugins() -> None:
967
+ """
968
+ Load all type checker lookup functions from entry points.
969
+
970
+ All entry points from the ``typeguard.checker_lookup`` group are loaded, and the
971
+ returned lookup functions are added to :data:`typeguard.checker_lookup_functions`.
972
+
973
+ .. note:: This function is called implicitly on import, unless the
974
+ ``TYPEGUARD_DISABLE_PLUGIN_AUTOLOAD`` environment variable is present.
975
+ """
976
+
977
+ for ep in entry_points(group="typeguard.checker_lookup"):
978
+ try:
979
+ plugin = ep.load()
980
+ except Exception as exc:
981
+ warnings.warn(
982
+ f"Failed to load plugin {ep.name!r}: " f"{qualified_name(exc)}: {exc}",
983
+ stacklevel=2,
984
+ )
985
+ continue
986
+
987
+ if not callable(plugin):
988
+ warnings.warn(
989
+ f"Plugin {ep} returned a non-callable object: {plugin!r}", stacklevel=2
990
+ )
991
+ continue
992
+
993
+ checker_lookup_functions.insert(0, plugin)