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,691 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from __future__ import annotations
6
+
7
+ from collections.abc import Iterable
8
+ import string
9
+ from types import MappingProxyType
10
+ from typing import Any, BinaryIO, NamedTuple
11
+
12
+ from ._re import (
13
+ RE_DATETIME,
14
+ RE_LOCALTIME,
15
+ RE_NUMBER,
16
+ match_to_datetime,
17
+ match_to_localtime,
18
+ match_to_number,
19
+ )
20
+ from ._types import Key, ParseFloat, Pos
21
+
22
+ ASCII_CTRL = frozenset(chr(i) for i in range(32)) | frozenset(chr(127))
23
+
24
+ # Neither of these sets include quotation mark or backslash. They are
25
+ # currently handled as separate cases in the parser functions.
26
+ ILLEGAL_BASIC_STR_CHARS = ASCII_CTRL - frozenset("\t")
27
+ ILLEGAL_MULTILINE_BASIC_STR_CHARS = ASCII_CTRL - frozenset("\t\n")
28
+
29
+ ILLEGAL_LITERAL_STR_CHARS = ILLEGAL_BASIC_STR_CHARS
30
+ ILLEGAL_MULTILINE_LITERAL_STR_CHARS = ILLEGAL_MULTILINE_BASIC_STR_CHARS
31
+
32
+ ILLEGAL_COMMENT_CHARS = ILLEGAL_BASIC_STR_CHARS
33
+
34
+ TOML_WS = frozenset(" \t")
35
+ TOML_WS_AND_NEWLINE = TOML_WS | frozenset("\n")
36
+ BARE_KEY_CHARS = frozenset(string.ascii_letters + string.digits + "-_")
37
+ KEY_INITIAL_CHARS = BARE_KEY_CHARS | frozenset("\"'")
38
+ HEXDIGIT_CHARS = frozenset(string.hexdigits)
39
+
40
+ BASIC_STR_ESCAPE_REPLACEMENTS = MappingProxyType(
41
+ {
42
+ "\\b": "\u0008", # backspace
43
+ "\\t": "\u0009", # tab
44
+ "\\n": "\u000A", # linefeed
45
+ "\\f": "\u000C", # form feed
46
+ "\\r": "\u000D", # carriage return
47
+ '\\"': "\u0022", # quote
48
+ "\\\\": "\u005C", # backslash
49
+ }
50
+ )
51
+
52
+
53
+ class TOMLDecodeError(ValueError):
54
+ """An error raised if a document is not valid TOML."""
55
+
56
+
57
+ def load(__fp: BinaryIO, *, parse_float: ParseFloat = float) -> dict[str, Any]:
58
+ """Parse TOML from a binary file object."""
59
+ b = __fp.read()
60
+ try:
61
+ s = b.decode()
62
+ except AttributeError:
63
+ raise TypeError(
64
+ "File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`"
65
+ ) from None
66
+ return loads(s, parse_float=parse_float)
67
+
68
+
69
+ def loads(__s: str, *, parse_float: ParseFloat = float) -> dict[str, Any]: # noqa: C901
70
+ """Parse TOML from a string."""
71
+
72
+ # The spec allows converting "\r\n" to "\n", even in string
73
+ # literals. Let's do so to simplify parsing.
74
+ src = __s.replace("\r\n", "\n")
75
+ pos = 0
76
+ out = Output(NestedDict(), Flags())
77
+ header: Key = ()
78
+ parse_float = make_safe_parse_float(parse_float)
79
+
80
+ # Parse one statement at a time
81
+ # (typically means one line in TOML source)
82
+ while True:
83
+ # 1. Skip line leading whitespace
84
+ pos = skip_chars(src, pos, TOML_WS)
85
+
86
+ # 2. Parse rules. Expect one of the following:
87
+ # - end of file
88
+ # - end of line
89
+ # - comment
90
+ # - key/value pair
91
+ # - append dict to list (and move to its namespace)
92
+ # - create dict (and move to its namespace)
93
+ # Skip trailing whitespace when applicable.
94
+ try:
95
+ char = src[pos]
96
+ except IndexError:
97
+ break
98
+ if char == "\n":
99
+ pos += 1
100
+ continue
101
+ if char in KEY_INITIAL_CHARS:
102
+ pos = key_value_rule(src, pos, out, header, parse_float)
103
+ pos = skip_chars(src, pos, TOML_WS)
104
+ elif char == "[":
105
+ try:
106
+ second_char: str | None = src[pos + 1]
107
+ except IndexError:
108
+ second_char = None
109
+ out.flags.finalize_pending()
110
+ if second_char == "[":
111
+ pos, header = create_list_rule(src, pos, out)
112
+ else:
113
+ pos, header = create_dict_rule(src, pos, out)
114
+ pos = skip_chars(src, pos, TOML_WS)
115
+ elif char != "#":
116
+ raise suffixed_err(src, pos, "Invalid statement")
117
+
118
+ # 3. Skip comment
119
+ pos = skip_comment(src, pos)
120
+
121
+ # 4. Expect end of line or end of file
122
+ try:
123
+ char = src[pos]
124
+ except IndexError:
125
+ break
126
+ if char != "\n":
127
+ raise suffixed_err(
128
+ src, pos, "Expected newline or end of document after a statement"
129
+ )
130
+ pos += 1
131
+
132
+ return out.data.dict
133
+
134
+
135
+ class Flags:
136
+ """Flags that map to parsed keys/namespaces."""
137
+
138
+ # Marks an immutable namespace (inline array or inline table).
139
+ FROZEN = 0
140
+ # Marks a nest that has been explicitly created and can no longer
141
+ # be opened using the "[table]" syntax.
142
+ EXPLICIT_NEST = 1
143
+
144
+ def __init__(self) -> None:
145
+ self._flags: dict[str, dict] = {}
146
+ self._pending_flags: set[tuple[Key, int]] = set()
147
+
148
+ def add_pending(self, key: Key, flag: int) -> None:
149
+ self._pending_flags.add((key, flag))
150
+
151
+ def finalize_pending(self) -> None:
152
+ for key, flag in self._pending_flags:
153
+ self.set(key, flag, recursive=False)
154
+ self._pending_flags.clear()
155
+
156
+ def unset_all(self, key: Key) -> None:
157
+ cont = self._flags
158
+ for k in key[:-1]:
159
+ if k not in cont:
160
+ return
161
+ cont = cont[k]["nested"]
162
+ cont.pop(key[-1], None)
163
+
164
+ def set(self, key: Key, flag: int, *, recursive: bool) -> None: # noqa: A003
165
+ cont = self._flags
166
+ key_parent, key_stem = key[:-1], key[-1]
167
+ for k in key_parent:
168
+ if k not in cont:
169
+ cont[k] = {"flags": set(), "recursive_flags": set(), "nested": {}}
170
+ cont = cont[k]["nested"]
171
+ if key_stem not in cont:
172
+ cont[key_stem] = {"flags": set(), "recursive_flags": set(), "nested": {}}
173
+ cont[key_stem]["recursive_flags" if recursive else "flags"].add(flag)
174
+
175
+ def is_(self, key: Key, flag: int) -> bool:
176
+ if not key:
177
+ return False # document root has no flags
178
+ cont = self._flags
179
+ for k in key[:-1]:
180
+ if k not in cont:
181
+ return False
182
+ inner_cont = cont[k]
183
+ if flag in inner_cont["recursive_flags"]:
184
+ return True
185
+ cont = inner_cont["nested"]
186
+ key_stem = key[-1]
187
+ if key_stem in cont:
188
+ cont = cont[key_stem]
189
+ return flag in cont["flags"] or flag in cont["recursive_flags"]
190
+ return False
191
+
192
+
193
+ class NestedDict:
194
+ def __init__(self) -> None:
195
+ # The parsed content of the TOML document
196
+ self.dict: dict[str, Any] = {}
197
+
198
+ def get_or_create_nest(
199
+ self,
200
+ key: Key,
201
+ *,
202
+ access_lists: bool = True,
203
+ ) -> dict:
204
+ cont: Any = self.dict
205
+ for k in key:
206
+ if k not in cont:
207
+ cont[k] = {}
208
+ cont = cont[k]
209
+ if access_lists and isinstance(cont, list):
210
+ cont = cont[-1]
211
+ if not isinstance(cont, dict):
212
+ raise KeyError("There is no nest behind this key")
213
+ return cont
214
+
215
+ def append_nest_to_list(self, key: Key) -> None:
216
+ cont = self.get_or_create_nest(key[:-1])
217
+ last_key = key[-1]
218
+ if last_key in cont:
219
+ list_ = cont[last_key]
220
+ if not isinstance(list_, list):
221
+ raise KeyError("An object other than list found behind this key")
222
+ list_.append({})
223
+ else:
224
+ cont[last_key] = [{}]
225
+
226
+
227
+ class Output(NamedTuple):
228
+ data: NestedDict
229
+ flags: Flags
230
+
231
+
232
+ def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos:
233
+ try:
234
+ while src[pos] in chars:
235
+ pos += 1
236
+ except IndexError:
237
+ pass
238
+ return pos
239
+
240
+
241
+ def skip_until(
242
+ src: str,
243
+ pos: Pos,
244
+ expect: str,
245
+ *,
246
+ error_on: frozenset[str],
247
+ error_on_eof: bool,
248
+ ) -> Pos:
249
+ try:
250
+ new_pos = src.index(expect, pos)
251
+ except ValueError:
252
+ new_pos = len(src)
253
+ if error_on_eof:
254
+ raise suffixed_err(src, new_pos, f"Expected {expect!r}") from None
255
+
256
+ if not error_on.isdisjoint(src[pos:new_pos]):
257
+ while src[pos] not in error_on:
258
+ pos += 1
259
+ raise suffixed_err(src, pos, f"Found invalid character {src[pos]!r}")
260
+ return new_pos
261
+
262
+
263
+ def skip_comment(src: str, pos: Pos) -> Pos:
264
+ try:
265
+ char: str | None = src[pos]
266
+ except IndexError:
267
+ char = None
268
+ if char == "#":
269
+ return skip_until(
270
+ src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False
271
+ )
272
+ return pos
273
+
274
+
275
+ def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos:
276
+ while True:
277
+ pos_before_skip = pos
278
+ pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
279
+ pos = skip_comment(src, pos)
280
+ if pos == pos_before_skip:
281
+ return pos
282
+
283
+
284
+ def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
285
+ pos += 1 # Skip "["
286
+ pos = skip_chars(src, pos, TOML_WS)
287
+ pos, key = parse_key(src, pos)
288
+
289
+ if out.flags.is_(key, Flags.EXPLICIT_NEST) or out.flags.is_(key, Flags.FROZEN):
290
+ raise suffixed_err(src, pos, f"Cannot declare {key} twice")
291
+ out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False)
292
+ try:
293
+ out.data.get_or_create_nest(key)
294
+ except KeyError:
295
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
296
+
297
+ if not src.startswith("]", pos):
298
+ raise suffixed_err(src, pos, "Expected ']' at the end of a table declaration")
299
+ return pos + 1, key
300
+
301
+
302
+ def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
303
+ pos += 2 # Skip "[["
304
+ pos = skip_chars(src, pos, TOML_WS)
305
+ pos, key = parse_key(src, pos)
306
+
307
+ if out.flags.is_(key, Flags.FROZEN):
308
+ raise suffixed_err(src, pos, f"Cannot mutate immutable namespace {key}")
309
+ # Free the namespace now that it points to another empty list item...
310
+ out.flags.unset_all(key)
311
+ # ...but this key precisely is still prohibited from table declaration
312
+ out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False)
313
+ try:
314
+ out.data.append_nest_to_list(key)
315
+ except KeyError:
316
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
317
+
318
+ if not src.startswith("]]", pos):
319
+ raise suffixed_err(src, pos, "Expected ']]' at the end of an array declaration")
320
+ return pos + 2, key
321
+
322
+
323
+ def key_value_rule(
324
+ src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat
325
+ ) -> Pos:
326
+ pos, key, value = parse_key_value_pair(src, pos, parse_float)
327
+ key_parent, key_stem = key[:-1], key[-1]
328
+ abs_key_parent = header + key_parent
329
+
330
+ relative_path_cont_keys = (header + key[:i] for i in range(1, len(key)))
331
+ for cont_key in relative_path_cont_keys:
332
+ # Check that dotted key syntax does not redefine an existing table
333
+ if out.flags.is_(cont_key, Flags.EXPLICIT_NEST):
334
+ raise suffixed_err(src, pos, f"Cannot redefine namespace {cont_key}")
335
+ # Containers in the relative path can't be opened with the table syntax or
336
+ # dotted key/value syntax in following table sections.
337
+ out.flags.add_pending(cont_key, Flags.EXPLICIT_NEST)
338
+
339
+ if out.flags.is_(abs_key_parent, Flags.FROZEN):
340
+ raise suffixed_err(
341
+ src, pos, f"Cannot mutate immutable namespace {abs_key_parent}"
342
+ )
343
+
344
+ try:
345
+ nest = out.data.get_or_create_nest(abs_key_parent)
346
+ except KeyError:
347
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
348
+ if key_stem in nest:
349
+ raise suffixed_err(src, pos, "Cannot overwrite a value")
350
+ # Mark inline table and array namespaces recursively immutable
351
+ if isinstance(value, (dict, list)):
352
+ out.flags.set(header + key, Flags.FROZEN, recursive=True)
353
+ nest[key_stem] = value
354
+ return pos
355
+
356
+
357
+ def parse_key_value_pair(
358
+ src: str, pos: Pos, parse_float: ParseFloat
359
+ ) -> tuple[Pos, Key, Any]:
360
+ pos, key = parse_key(src, pos)
361
+ try:
362
+ char: str | None = src[pos]
363
+ except IndexError:
364
+ char = None
365
+ if char != "=":
366
+ raise suffixed_err(src, pos, "Expected '=' after a key in a key/value pair")
367
+ pos += 1
368
+ pos = skip_chars(src, pos, TOML_WS)
369
+ pos, value = parse_value(src, pos, parse_float)
370
+ return pos, key, value
371
+
372
+
373
+ def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]:
374
+ pos, key_part = parse_key_part(src, pos)
375
+ key: Key = (key_part,)
376
+ pos = skip_chars(src, pos, TOML_WS)
377
+ while True:
378
+ try:
379
+ char: str | None = src[pos]
380
+ except IndexError:
381
+ char = None
382
+ if char != ".":
383
+ return pos, key
384
+ pos += 1
385
+ pos = skip_chars(src, pos, TOML_WS)
386
+ pos, key_part = parse_key_part(src, pos)
387
+ key += (key_part,)
388
+ pos = skip_chars(src, pos, TOML_WS)
389
+
390
+
391
+ def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]:
392
+ try:
393
+ char: str | None = src[pos]
394
+ except IndexError:
395
+ char = None
396
+ if char in BARE_KEY_CHARS:
397
+ start_pos = pos
398
+ pos = skip_chars(src, pos, BARE_KEY_CHARS)
399
+ return pos, src[start_pos:pos]
400
+ if char == "'":
401
+ return parse_literal_str(src, pos)
402
+ if char == '"':
403
+ return parse_one_line_basic_str(src, pos)
404
+ raise suffixed_err(src, pos, "Invalid initial character for a key part")
405
+
406
+
407
+ def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]:
408
+ pos += 1
409
+ return parse_basic_str(src, pos, multiline=False)
410
+
411
+
412
+ def parse_array(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, list]:
413
+ pos += 1
414
+ array: list = []
415
+
416
+ pos = skip_comments_and_array_ws(src, pos)
417
+ if src.startswith("]", pos):
418
+ return pos + 1, array
419
+ while True:
420
+ pos, val = parse_value(src, pos, parse_float)
421
+ array.append(val)
422
+ pos = skip_comments_and_array_ws(src, pos)
423
+
424
+ c = src[pos : pos + 1]
425
+ if c == "]":
426
+ return pos + 1, array
427
+ if c != ",":
428
+ raise suffixed_err(src, pos, "Unclosed array")
429
+ pos += 1
430
+
431
+ pos = skip_comments_and_array_ws(src, pos)
432
+ if src.startswith("]", pos):
433
+ return pos + 1, array
434
+
435
+
436
+ def parse_inline_table(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, dict]:
437
+ pos += 1
438
+ nested_dict = NestedDict()
439
+ flags = Flags()
440
+
441
+ pos = skip_chars(src, pos, TOML_WS)
442
+ if src.startswith("}", pos):
443
+ return pos + 1, nested_dict.dict
444
+ while True:
445
+ pos, key, value = parse_key_value_pair(src, pos, parse_float)
446
+ key_parent, key_stem = key[:-1], key[-1]
447
+ if flags.is_(key, Flags.FROZEN):
448
+ raise suffixed_err(src, pos, f"Cannot mutate immutable namespace {key}")
449
+ try:
450
+ nest = nested_dict.get_or_create_nest(key_parent, access_lists=False)
451
+ except KeyError:
452
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
453
+ if key_stem in nest:
454
+ raise suffixed_err(src, pos, f"Duplicate inline table key {key_stem!r}")
455
+ nest[key_stem] = value
456
+ pos = skip_chars(src, pos, TOML_WS)
457
+ c = src[pos : pos + 1]
458
+ if c == "}":
459
+ return pos + 1, nested_dict.dict
460
+ if c != ",":
461
+ raise suffixed_err(src, pos, "Unclosed inline table")
462
+ if isinstance(value, (dict, list)):
463
+ flags.set(key, Flags.FROZEN, recursive=True)
464
+ pos += 1
465
+ pos = skip_chars(src, pos, TOML_WS)
466
+
467
+
468
+ def parse_basic_str_escape(
469
+ src: str, pos: Pos, *, multiline: bool = False
470
+ ) -> tuple[Pos, str]:
471
+ escape_id = src[pos : pos + 2]
472
+ pos += 2
473
+ if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}:
474
+ # Skip whitespace until next non-whitespace character or end of
475
+ # the doc. Error if non-whitespace is found before newline.
476
+ if escape_id != "\\\n":
477
+ pos = skip_chars(src, pos, TOML_WS)
478
+ try:
479
+ char = src[pos]
480
+ except IndexError:
481
+ return pos, ""
482
+ if char != "\n":
483
+ raise suffixed_err(src, pos, "Unescaped '\\' in a string")
484
+ pos += 1
485
+ pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
486
+ return pos, ""
487
+ if escape_id == "\\u":
488
+ return parse_hex_char(src, pos, 4)
489
+ if escape_id == "\\U":
490
+ return parse_hex_char(src, pos, 8)
491
+ try:
492
+ return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id]
493
+ except KeyError:
494
+ raise suffixed_err(src, pos, "Unescaped '\\' in a string") from None
495
+
496
+
497
+ def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]:
498
+ return parse_basic_str_escape(src, pos, multiline=True)
499
+
500
+
501
+ def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]:
502
+ hex_str = src[pos : pos + hex_len]
503
+ if len(hex_str) != hex_len or not HEXDIGIT_CHARS.issuperset(hex_str):
504
+ raise suffixed_err(src, pos, "Invalid hex value")
505
+ pos += hex_len
506
+ hex_int = int(hex_str, 16)
507
+ if not is_unicode_scalar_value(hex_int):
508
+ raise suffixed_err(src, pos, "Escaped character is not a Unicode scalar value")
509
+ return pos, chr(hex_int)
510
+
511
+
512
+ def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]:
513
+ pos += 1 # Skip starting apostrophe
514
+ start_pos = pos
515
+ pos = skip_until(
516
+ src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True
517
+ )
518
+ return pos + 1, src[start_pos:pos] # Skip ending apostrophe
519
+
520
+
521
+ def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]:
522
+ pos += 3
523
+ if src.startswith("\n", pos):
524
+ pos += 1
525
+
526
+ if literal:
527
+ delim = "'"
528
+ end_pos = skip_until(
529
+ src,
530
+ pos,
531
+ "'''",
532
+ error_on=ILLEGAL_MULTILINE_LITERAL_STR_CHARS,
533
+ error_on_eof=True,
534
+ )
535
+ result = src[pos:end_pos]
536
+ pos = end_pos + 3
537
+ else:
538
+ delim = '"'
539
+ pos, result = parse_basic_str(src, pos, multiline=True)
540
+
541
+ # Add at maximum two extra apostrophes/quotes if the end sequence
542
+ # is 4 or 5 chars long instead of just 3.
543
+ if not src.startswith(delim, pos):
544
+ return pos, result
545
+ pos += 1
546
+ if not src.startswith(delim, pos):
547
+ return pos, result + delim
548
+ pos += 1
549
+ return pos, result + (delim * 2)
550
+
551
+
552
+ def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]:
553
+ if multiline:
554
+ error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS
555
+ parse_escapes = parse_basic_str_escape_multiline
556
+ else:
557
+ error_on = ILLEGAL_BASIC_STR_CHARS
558
+ parse_escapes = parse_basic_str_escape
559
+ result = ""
560
+ start_pos = pos
561
+ while True:
562
+ try:
563
+ char = src[pos]
564
+ except IndexError:
565
+ raise suffixed_err(src, pos, "Unterminated string") from None
566
+ if char == '"':
567
+ if not multiline:
568
+ return pos + 1, result + src[start_pos:pos]
569
+ if src.startswith('"""', pos):
570
+ return pos + 3, result + src[start_pos:pos]
571
+ pos += 1
572
+ continue
573
+ if char == "\\":
574
+ result += src[start_pos:pos]
575
+ pos, parsed_escape = parse_escapes(src, pos)
576
+ result += parsed_escape
577
+ start_pos = pos
578
+ continue
579
+ if char in error_on:
580
+ raise suffixed_err(src, pos, f"Illegal character {char!r}")
581
+ pos += 1
582
+
583
+
584
+ def parse_value( # noqa: C901
585
+ src: str, pos: Pos, parse_float: ParseFloat
586
+ ) -> tuple[Pos, Any]:
587
+ try:
588
+ char: str | None = src[pos]
589
+ except IndexError:
590
+ char = None
591
+
592
+ # IMPORTANT: order conditions based on speed of checking and likelihood
593
+
594
+ # Basic strings
595
+ if char == '"':
596
+ if src.startswith('"""', pos):
597
+ return parse_multiline_str(src, pos, literal=False)
598
+ return parse_one_line_basic_str(src, pos)
599
+
600
+ # Literal strings
601
+ if char == "'":
602
+ if src.startswith("'''", pos):
603
+ return parse_multiline_str(src, pos, literal=True)
604
+ return parse_literal_str(src, pos)
605
+
606
+ # Booleans
607
+ if char == "t":
608
+ if src.startswith("true", pos):
609
+ return pos + 4, True
610
+ if char == "f":
611
+ if src.startswith("false", pos):
612
+ return pos + 5, False
613
+
614
+ # Arrays
615
+ if char == "[":
616
+ return parse_array(src, pos, parse_float)
617
+
618
+ # Inline tables
619
+ if char == "{":
620
+ return parse_inline_table(src, pos, parse_float)
621
+
622
+ # Dates and times
623
+ datetime_match = RE_DATETIME.match(src, pos)
624
+ if datetime_match:
625
+ try:
626
+ datetime_obj = match_to_datetime(datetime_match)
627
+ except ValueError as e:
628
+ raise suffixed_err(src, pos, "Invalid date or datetime") from e
629
+ return datetime_match.end(), datetime_obj
630
+ localtime_match = RE_LOCALTIME.match(src, pos)
631
+ if localtime_match:
632
+ return localtime_match.end(), match_to_localtime(localtime_match)
633
+
634
+ # Integers and "normal" floats.
635
+ # The regex will greedily match any type starting with a decimal
636
+ # char, so needs to be located after handling of dates and times.
637
+ number_match = RE_NUMBER.match(src, pos)
638
+ if number_match:
639
+ return number_match.end(), match_to_number(number_match, parse_float)
640
+
641
+ # Special floats
642
+ first_three = src[pos : pos + 3]
643
+ if first_three in {"inf", "nan"}:
644
+ return pos + 3, parse_float(first_three)
645
+ first_four = src[pos : pos + 4]
646
+ if first_four in {"-inf", "+inf", "-nan", "+nan"}:
647
+ return pos + 4, parse_float(first_four)
648
+
649
+ raise suffixed_err(src, pos, "Invalid value")
650
+
651
+
652
+ def suffixed_err(src: str, pos: Pos, msg: str) -> TOMLDecodeError:
653
+ """Return a `TOMLDecodeError` where error message is suffixed with
654
+ coordinates in source."""
655
+
656
+ def coord_repr(src: str, pos: Pos) -> str:
657
+ if pos >= len(src):
658
+ return "end of document"
659
+ line = src.count("\n", 0, pos) + 1
660
+ if line == 1:
661
+ column = pos + 1
662
+ else:
663
+ column = pos - src.rindex("\n", 0, pos)
664
+ return f"line {line}, column {column}"
665
+
666
+ return TOMLDecodeError(f"{msg} (at {coord_repr(src, pos)})")
667
+
668
+
669
+ def is_unicode_scalar_value(codepoint: int) -> bool:
670
+ return (0 <= codepoint <= 55295) or (57344 <= codepoint <= 1114111)
671
+
672
+
673
+ def make_safe_parse_float(parse_float: ParseFloat) -> ParseFloat:
674
+ """A decorator to make `parse_float` safe.
675
+
676
+ `parse_float` must not return dicts or lists, because these types
677
+ would be mixed with parsed TOML tables and arrays, thus confusing
678
+ the parser. The returned decorated callable raises `ValueError`
679
+ instead of returning illegal types.
680
+ """
681
+ # The default `float` callable never returns illegal types. Optimize it.
682
+ if parse_float is float: # type: ignore[comparison-overlap]
683
+ return float
684
+
685
+ def safe_parse_float(float_str: str) -> Any:
686
+ float_value = parse_float(float_str)
687
+ if isinstance(float_value, (dict, list)):
688
+ raise ValueError("parse_float must not return dicts or lists")
689
+ return float_value
690
+
691
+ return safe_parse_float