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,501 @@
1
+ import io
2
+ import posixpath
3
+ import zipfile
4
+ import itertools
5
+ import contextlib
6
+ import pathlib
7
+ import re
8
+ import stat
9
+ import sys
10
+
11
+ from .compat.py310 import text_encoding
12
+ from .glob import Translator
13
+
14
+
15
+ __all__ = ['Path']
16
+
17
+
18
+ def _parents(path):
19
+ """
20
+ Given a path with elements separated by
21
+ posixpath.sep, generate all parents of that path.
22
+
23
+ >>> list(_parents('b/d'))
24
+ ['b']
25
+ >>> list(_parents('/b/d/'))
26
+ ['/b']
27
+ >>> list(_parents('b/d/f/'))
28
+ ['b/d', 'b']
29
+ >>> list(_parents('b'))
30
+ []
31
+ >>> list(_parents(''))
32
+ []
33
+ """
34
+ return itertools.islice(_ancestry(path), 1, None)
35
+
36
+
37
+ def _ancestry(path):
38
+ """
39
+ Given a path with elements separated by
40
+ posixpath.sep, generate all elements of that path
41
+
42
+ >>> list(_ancestry('b/d'))
43
+ ['b/d', 'b']
44
+ >>> list(_ancestry('/b/d/'))
45
+ ['/b/d', '/b']
46
+ >>> list(_ancestry('b/d/f/'))
47
+ ['b/d/f', 'b/d', 'b']
48
+ >>> list(_ancestry('b'))
49
+ ['b']
50
+ >>> list(_ancestry(''))
51
+ []
52
+ """
53
+ path = path.rstrip(posixpath.sep)
54
+ while path and path != posixpath.sep:
55
+ yield path
56
+ path, tail = posixpath.split(path)
57
+
58
+
59
+ _dedupe = dict.fromkeys
60
+ """Deduplicate an iterable in original order"""
61
+
62
+
63
+ def _difference(minuend, subtrahend):
64
+ """
65
+ Return items in minuend not in subtrahend, retaining order
66
+ with O(1) lookup.
67
+ """
68
+ return itertools.filterfalse(set(subtrahend).__contains__, minuend)
69
+
70
+
71
+ class InitializedState:
72
+ """
73
+ Mix-in to save the initialization state for pickling.
74
+ """
75
+
76
+ def __init__(self, *args, **kwargs):
77
+ self.__args = args
78
+ self.__kwargs = kwargs
79
+ super().__init__(*args, **kwargs)
80
+
81
+ def __getstate__(self):
82
+ return self.__args, self.__kwargs
83
+
84
+ def __setstate__(self, state):
85
+ args, kwargs = state
86
+ super().__init__(*args, **kwargs)
87
+
88
+
89
+ class SanitizedNames:
90
+ """
91
+ ZipFile mix-in to ensure names are sanitized.
92
+ """
93
+
94
+ def namelist(self):
95
+ return list(map(self._sanitize, super().namelist()))
96
+
97
+ @staticmethod
98
+ def _sanitize(name):
99
+ r"""
100
+ Ensure a relative path with posix separators and no dot names.
101
+
102
+ Modeled after
103
+ https://github.com/python/cpython/blob/bcc1be39cb1d04ad9fc0bd1b9193d3972835a57c/Lib/zipfile/__init__.py#L1799-L1813
104
+ but provides consistent cross-platform behavior.
105
+
106
+ >>> san = SanitizedNames._sanitize
107
+ >>> san('/foo/bar')
108
+ 'foo/bar'
109
+ >>> san('//foo.txt')
110
+ 'foo.txt'
111
+ >>> san('foo/.././bar.txt')
112
+ 'foo/bar.txt'
113
+ >>> san('foo../.bar.txt')
114
+ 'foo../.bar.txt'
115
+ >>> san('\\foo\\bar.txt')
116
+ 'foo/bar.txt'
117
+ >>> san('D:\\foo.txt')
118
+ 'D/foo.txt'
119
+ >>> san('\\\\server\\share\\file.txt')
120
+ 'server/share/file.txt'
121
+ >>> san('\\\\?\\GLOBALROOT\\Volume3')
122
+ '?/GLOBALROOT/Volume3'
123
+ >>> san('\\\\.\\PhysicalDrive1\\root')
124
+ 'PhysicalDrive1/root'
125
+
126
+ Retain any trailing slash.
127
+ >>> san('abc/')
128
+ 'abc/'
129
+
130
+ Raises a ValueError if the result is empty.
131
+ >>> san('../..')
132
+ Traceback (most recent call last):
133
+ ...
134
+ ValueError: Empty filename
135
+ """
136
+
137
+ def allowed(part):
138
+ return part and part not in {'..', '.'}
139
+
140
+ # Remove the drive letter.
141
+ # Don't use ntpath.splitdrive, because that also strips UNC paths
142
+ bare = re.sub('^([A-Z]):', r'\1', name, flags=re.IGNORECASE)
143
+ clean = bare.replace('\\', '/')
144
+ parts = clean.split('/')
145
+ joined = '/'.join(filter(allowed, parts))
146
+ if not joined:
147
+ raise ValueError("Empty filename")
148
+ return joined + '/' * name.endswith('/')
149
+
150
+
151
+ class CompleteDirs(InitializedState, SanitizedNames, zipfile.ZipFile):
152
+ """
153
+ A ZipFile subclass that ensures that implied directories
154
+ are always included in the namelist.
155
+
156
+ >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt']))
157
+ ['foo/', 'foo/bar/']
158
+ >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt', 'foo/bar/']))
159
+ ['foo/']
160
+ """
161
+
162
+ @staticmethod
163
+ def _implied_dirs(names):
164
+ parents = itertools.chain.from_iterable(map(_parents, names))
165
+ as_dirs = (p + posixpath.sep for p in parents)
166
+ return _dedupe(_difference(as_dirs, names))
167
+
168
+ def namelist(self):
169
+ names = super().namelist()
170
+ return names + list(self._implied_dirs(names))
171
+
172
+ def _name_set(self):
173
+ return set(self.namelist())
174
+
175
+ def resolve_dir(self, name):
176
+ """
177
+ If the name represents a directory, return that name
178
+ as a directory (with the trailing slash).
179
+ """
180
+ names = self._name_set()
181
+ dirname = name + '/'
182
+ dir_match = name not in names and dirname in names
183
+ return dirname if dir_match else name
184
+
185
+ def getinfo(self, name):
186
+ """
187
+ Supplement getinfo for implied dirs.
188
+ """
189
+ try:
190
+ return super().getinfo(name)
191
+ except KeyError:
192
+ if not name.endswith('/') or name not in self._name_set():
193
+ raise
194
+ return zipfile.ZipInfo(filename=name)
195
+
196
+ @classmethod
197
+ def make(cls, source):
198
+ """
199
+ Given a source (filename or zipfile), return an
200
+ appropriate CompleteDirs subclass.
201
+ """
202
+ if isinstance(source, CompleteDirs):
203
+ return source
204
+
205
+ if not isinstance(source, zipfile.ZipFile):
206
+ return cls(source)
207
+
208
+ # Only allow for FastLookup when supplied zipfile is read-only
209
+ if 'r' not in source.mode:
210
+ cls = CompleteDirs
211
+
212
+ source.__class__ = cls
213
+ return source
214
+
215
+ @classmethod
216
+ def inject(cls, zf: zipfile.ZipFile) -> zipfile.ZipFile:
217
+ """
218
+ Given a writable zip file zf, inject directory entries for
219
+ any directories implied by the presence of children.
220
+ """
221
+ for name in cls._implied_dirs(zf.namelist()):
222
+ zf.writestr(name, b"")
223
+ return zf
224
+
225
+
226
+ class FastLookup(CompleteDirs):
227
+ """
228
+ ZipFile subclass to ensure implicit
229
+ dirs exist and are resolved rapidly.
230
+ """
231
+
232
+ def namelist(self):
233
+ with contextlib.suppress(AttributeError):
234
+ return self.__names
235
+ self.__names = super().namelist()
236
+ return self.__names
237
+
238
+ def _name_set(self):
239
+ with contextlib.suppress(AttributeError):
240
+ return self.__lookup
241
+ self.__lookup = super()._name_set()
242
+ return self.__lookup
243
+
244
+
245
+ def _extract_text_encoding(encoding=None, *args, **kwargs):
246
+ # compute stack level so that the caller of the caller sees any warning.
247
+ is_pypy = sys.implementation.name == 'pypy'
248
+ stack_level = 3 + is_pypy
249
+ return text_encoding(encoding, stack_level), args, kwargs
250
+
251
+
252
+ class Path:
253
+ """
254
+ A :class:`importlib.resources.abc.Traversable` interface for zip files.
255
+
256
+ Implements many of the features users enjoy from
257
+ :class:`pathlib.Path`.
258
+
259
+ Consider a zip file with this structure::
260
+
261
+ .
262
+ ├── a.txt
263
+ └── b
264
+ ├── c.txt
265
+ └── d
266
+ └── e.txt
267
+
268
+ >>> data = io.BytesIO()
269
+ >>> zf = zipfile.ZipFile(data, 'w')
270
+ >>> zf.writestr('a.txt', 'content of a')
271
+ >>> zf.writestr('b/c.txt', 'content of c')
272
+ >>> zf.writestr('b/d/e.txt', 'content of e')
273
+ >>> zf.filename = 'mem/abcde.zip'
274
+
275
+ Path accepts the zipfile object itself or a filename
276
+
277
+ >>> path = Path(zf)
278
+
279
+ From there, several path operations are available.
280
+
281
+ Directory iteration (including the zip file itself):
282
+
283
+ >>> a, b = path.iterdir()
284
+ >>> a
285
+ Path('mem/abcde.zip', 'a.txt')
286
+ >>> b
287
+ Path('mem/abcde.zip', 'b/')
288
+
289
+ name property:
290
+
291
+ >>> b.name
292
+ 'b'
293
+
294
+ join with divide operator:
295
+
296
+ >>> c = b / 'c.txt'
297
+ >>> c
298
+ Path('mem/abcde.zip', 'b/c.txt')
299
+ >>> c.name
300
+ 'c.txt'
301
+
302
+ Read text:
303
+
304
+ >>> c.read_text(encoding='utf-8')
305
+ 'content of c'
306
+
307
+ existence:
308
+
309
+ >>> c.exists()
310
+ True
311
+ >>> (b / 'missing.txt').exists()
312
+ False
313
+
314
+ Coercion to string:
315
+
316
+ >>> import os
317
+ >>> str(c).replace(os.sep, posixpath.sep)
318
+ 'mem/abcde.zip/b/c.txt'
319
+
320
+ At the root, ``name``, ``filename``, and ``parent``
321
+ resolve to the zipfile.
322
+
323
+ >>> str(path)
324
+ 'mem/abcde.zip/'
325
+ >>> path.name
326
+ 'abcde.zip'
327
+ >>> path.filename == pathlib.Path('mem/abcde.zip')
328
+ True
329
+ >>> str(path.parent)
330
+ 'mem'
331
+
332
+ If the zipfile has no filename, such attributes are not
333
+ valid and accessing them will raise an Exception.
334
+
335
+ >>> zf.filename = None
336
+ >>> path.name
337
+ Traceback (most recent call last):
338
+ ...
339
+ TypeError: ...
340
+
341
+ >>> path.filename
342
+ Traceback (most recent call last):
343
+ ...
344
+ TypeError: ...
345
+
346
+ >>> path.parent
347
+ Traceback (most recent call last):
348
+ ...
349
+ TypeError: ...
350
+
351
+ # workaround python/cpython#106763
352
+ >>> pass
353
+ """
354
+
355
+ __repr = "{self.__class__.__name__}({self.root.filename!r}, {self.at!r})"
356
+
357
+ def __init__(self, root, at=""):
358
+ """
359
+ Construct a Path from a ZipFile or filename.
360
+
361
+ Note: When the source is an existing ZipFile object,
362
+ its type (__class__) will be mutated to a
363
+ specialized type. If the caller wishes to retain the
364
+ original type, the caller should either create a
365
+ separate ZipFile object or pass a filename.
366
+ """
367
+ self.root = FastLookup.make(root)
368
+ self.at = at
369
+
370
+ def __eq__(self, other):
371
+ """
372
+ >>> Path(zipfile.ZipFile(io.BytesIO(), 'w')) == 'foo'
373
+ False
374
+ """
375
+ if self.__class__ is not other.__class__:
376
+ return NotImplemented
377
+ return (self.root, self.at) == (other.root, other.at)
378
+
379
+ def __hash__(self):
380
+ return hash((self.root, self.at))
381
+
382
+ def open(self, mode='r', *args, pwd=None, **kwargs):
383
+ """
384
+ Open this entry as text or binary following the semantics
385
+ of ``pathlib.Path.open()`` by passing arguments through
386
+ to io.TextIOWrapper().
387
+ """
388
+ if self.is_dir():
389
+ raise IsADirectoryError(self)
390
+ zip_mode = mode[0]
391
+ if not self.exists() and zip_mode == 'r':
392
+ raise FileNotFoundError(self)
393
+ stream = self.root.open(self.at, zip_mode, pwd=pwd)
394
+ if 'b' in mode:
395
+ if args or kwargs:
396
+ raise ValueError("encoding args invalid for binary operation")
397
+ return stream
398
+ # Text mode:
399
+ encoding, args, kwargs = _extract_text_encoding(*args, **kwargs)
400
+ return io.TextIOWrapper(stream, encoding, *args, **kwargs)
401
+
402
+ def _base(self):
403
+ return pathlib.PurePosixPath(self.at or self.root.filename)
404
+
405
+ @property
406
+ def name(self):
407
+ return self._base().name
408
+
409
+ @property
410
+ def suffix(self):
411
+ return self._base().suffix
412
+
413
+ @property
414
+ def suffixes(self):
415
+ return self._base().suffixes
416
+
417
+ @property
418
+ def stem(self):
419
+ return self._base().stem
420
+
421
+ @property
422
+ def filename(self):
423
+ return pathlib.Path(self.root.filename).joinpath(self.at)
424
+
425
+ def read_text(self, *args, **kwargs):
426
+ encoding, args, kwargs = _extract_text_encoding(*args, **kwargs)
427
+ with self.open('r', encoding, *args, **kwargs) as strm:
428
+ return strm.read()
429
+
430
+ def read_bytes(self):
431
+ with self.open('rb') as strm:
432
+ return strm.read()
433
+
434
+ def _is_child(self, path):
435
+ return posixpath.dirname(path.at.rstrip("/")) == self.at.rstrip("/")
436
+
437
+ def _next(self, at):
438
+ return self.__class__(self.root, at)
439
+
440
+ def is_dir(self):
441
+ return not self.at or self.at.endswith("/")
442
+
443
+ def is_file(self):
444
+ return self.exists() and not self.is_dir()
445
+
446
+ def exists(self):
447
+ return self.at in self.root._name_set()
448
+
449
+ def iterdir(self):
450
+ if not self.is_dir():
451
+ raise ValueError("Can't listdir a file")
452
+ subs = map(self._next, self.root.namelist())
453
+ return filter(self._is_child, subs)
454
+
455
+ def match(self, path_pattern):
456
+ return pathlib.PurePosixPath(self.at).match(path_pattern)
457
+
458
+ def is_symlink(self):
459
+ """
460
+ Return whether this path is a symlink.
461
+ """
462
+ info = self.root.getinfo(self.at)
463
+ mode = info.external_attr >> 16
464
+ return stat.S_ISLNK(mode)
465
+
466
+ def glob(self, pattern):
467
+ if not pattern:
468
+ raise ValueError(f"Unacceptable pattern: {pattern!r}")
469
+
470
+ prefix = re.escape(self.at)
471
+ tr = Translator(seps='/')
472
+ matches = re.compile(prefix + tr.translate(pattern)).fullmatch
473
+ names = (data.filename for data in self.root.filelist)
474
+ return map(self._next, filter(matches, names))
475
+
476
+ def rglob(self, pattern):
477
+ return self.glob(f'**/{pattern}')
478
+
479
+ def relative_to(self, other, *extra):
480
+ return posixpath.relpath(str(self), str(other.joinpath(*extra)))
481
+
482
+ def __str__(self):
483
+ return posixpath.join(self.root.filename, self.at)
484
+
485
+ def __repr__(self):
486
+ return self.__repr.format(self=self)
487
+
488
+ def joinpath(self, *other):
489
+ next = posixpath.join(self.at, *other)
490
+ return self._next(self.root.resolve_dir(next))
491
+
492
+ __truediv__ = joinpath
493
+
494
+ @property
495
+ def parent(self):
496
+ if not self.at:
497
+ return self.filename.parent
498
+ parent_at = posixpath.dirname(self.at.rstrip('/'))
499
+ if parent_at:
500
+ parent_at += '/'
501
+ return self._next(parent_at)
@@ -0,0 +1,11 @@
1
+ import sys
2
+ import io
3
+
4
+
5
+ def _text_encoding(encoding, stacklevel=2, /): # pragma: no cover
6
+ return encoding
7
+
8
+
9
+ text_encoding = (
10
+ io.text_encoding if sys.version_info > (3, 10) else _text_encoding # type: ignore
11
+ )
@@ -0,0 +1,106 @@
1
+ import os
2
+ import re
3
+
4
+
5
+ _default_seps = os.sep + str(os.altsep) * bool(os.altsep)
6
+
7
+
8
+ class Translator:
9
+ """
10
+ >>> Translator('xyz')
11
+ Traceback (most recent call last):
12
+ ...
13
+ AssertionError: Invalid separators
14
+
15
+ >>> Translator('')
16
+ Traceback (most recent call last):
17
+ ...
18
+ AssertionError: Invalid separators
19
+ """
20
+
21
+ seps: str
22
+
23
+ def __init__(self, seps: str = _default_seps):
24
+ assert seps and set(seps) <= set(_default_seps), "Invalid separators"
25
+ self.seps = seps
26
+
27
+ def translate(self, pattern):
28
+ """
29
+ Given a glob pattern, produce a regex that matches it.
30
+ """
31
+ return self.extend(self.translate_core(pattern))
32
+
33
+ def extend(self, pattern):
34
+ r"""
35
+ Extend regex for pattern-wide concerns.
36
+
37
+ Apply '(?s:)' to create a non-matching group that
38
+ matches newlines (valid on Unix).
39
+
40
+ Append '\Z' to imply fullmatch even when match is used.
41
+ """
42
+ return rf'(?s:{pattern})\Z'
43
+
44
+ def translate_core(self, pattern):
45
+ r"""
46
+ Given a glob pattern, produce a regex that matches it.
47
+
48
+ >>> t = Translator()
49
+ >>> t.translate_core('*.txt').replace('\\\\', '')
50
+ '[^/]*\\.txt'
51
+ >>> t.translate_core('a?txt')
52
+ 'a[^/]txt'
53
+ >>> t.translate_core('**/*').replace('\\\\', '')
54
+ '.*/[^/][^/]*'
55
+ """
56
+ self.restrict_rglob(pattern)
57
+ return ''.join(map(self.replace, separate(self.star_not_empty(pattern))))
58
+
59
+ def replace(self, match):
60
+ """
61
+ Perform the replacements for a match from :func:`separate`.
62
+ """
63
+ return match.group('set') or (
64
+ re.escape(match.group(0))
65
+ .replace('\\*\\*', r'.*')
66
+ .replace('\\*', rf'[^{re.escape(self.seps)}]*')
67
+ .replace('\\?', r'[^/]')
68
+ )
69
+
70
+ def restrict_rglob(self, pattern):
71
+ """
72
+ Raise ValueError if ** appears in anything but a full path segment.
73
+
74
+ >>> Translator().translate('**foo')
75
+ Traceback (most recent call last):
76
+ ...
77
+ ValueError: ** must appear alone in a path segment
78
+ """
79
+ seps_pattern = rf'[{re.escape(self.seps)}]+'
80
+ segments = re.split(seps_pattern, pattern)
81
+ if any('**' in segment and segment != '**' for segment in segments):
82
+ raise ValueError("** must appear alone in a path segment")
83
+
84
+ def star_not_empty(self, pattern):
85
+ """
86
+ Ensure that * will not match an empty segment.
87
+ """
88
+
89
+ def handle_segment(match):
90
+ segment = match.group(0)
91
+ return '?*' if segment == '*' else segment
92
+
93
+ not_seps_pattern = rf'[^{re.escape(self.seps)}]+'
94
+ return re.sub(not_seps_pattern, handle_segment, pattern)
95
+
96
+
97
+ def separate(pattern):
98
+ """
99
+ Separate out character sets to avoid translating their contents.
100
+
101
+ >>> [m.group(0) for m in separate('*.txt')]
102
+ ['*.txt']
103
+ >>> [m.group(0) for m in separate('a[?]txt')]
104
+ ['a', '[?]', 'txt']
105
+ """
106
+ return re.finditer(r'([^\[]+)|(?P<set>[\[].*?[\]])|([\[][^\]]*$)', pattern)