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,471 @@
1
+ """distutils.fancy_getopt
2
+
3
+ Wrapper around the standard getopt module that provides the following
4
+ additional features:
5
+ * short and long options are tied together
6
+ * options have help strings, so fancy_getopt could potentially
7
+ create a complete usage summary
8
+ * options set attributes of a passed-in object
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import getopt
14
+ import re
15
+ import string
16
+ import sys
17
+ from collections.abc import Sequence
18
+ from typing import Any
19
+
20
+ from .errors import DistutilsArgError, DistutilsGetoptError
21
+
22
+ # Much like command_re in distutils.core, this is close to but not quite
23
+ # the same as a Python NAME -- except, in the spirit of most GNU
24
+ # utilities, we use '-' in place of '_'. (The spirit of LISP lives on!)
25
+ # The similarities to NAME are again not a coincidence...
26
+ longopt_pat = r'[a-zA-Z](?:[a-zA-Z0-9-]*)'
27
+ longopt_re = re.compile(rf'^{longopt_pat}$')
28
+
29
+ # For recognizing "negative alias" options, eg. "quiet=!verbose"
30
+ neg_alias_re = re.compile(f"^({longopt_pat})=!({longopt_pat})$")
31
+
32
+ # This is used to translate long options to legitimate Python identifiers
33
+ # (for use as attributes of some object).
34
+ longopt_xlate = str.maketrans('-', '_')
35
+
36
+
37
+ class FancyGetopt:
38
+ """Wrapper around the standard 'getopt()' module that provides some
39
+ handy extra functionality:
40
+ * short and long options are tied together
41
+ * options have help strings, and help text can be assembled
42
+ from them
43
+ * options set attributes of a passed-in object
44
+ * boolean options can have "negative aliases" -- eg. if
45
+ --quiet is the "negative alias" of --verbose, then "--quiet"
46
+ on the command line sets 'verbose' to false
47
+ """
48
+
49
+ def __init__(self, option_table=None):
50
+ # The option table is (currently) a list of tuples. The
51
+ # tuples may have 3 or four values:
52
+ # (long_option, short_option, help_string [, repeatable])
53
+ # if an option takes an argument, its long_option should have '='
54
+ # appended; short_option should just be a single character, no ':'
55
+ # in any case. If a long_option doesn't have a corresponding
56
+ # short_option, short_option should be None. All option tuples
57
+ # must have long options.
58
+ self.option_table = option_table
59
+
60
+ # 'option_index' maps long option names to entries in the option
61
+ # table (ie. those 3-tuples).
62
+ self.option_index = {}
63
+ if self.option_table:
64
+ self._build_index()
65
+
66
+ # 'alias' records (duh) alias options; {'foo': 'bar'} means
67
+ # --foo is an alias for --bar
68
+ self.alias = {}
69
+
70
+ # 'negative_alias' keeps track of options that are the boolean
71
+ # opposite of some other option
72
+ self.negative_alias = {}
73
+
74
+ # These keep track of the information in the option table. We
75
+ # don't actually populate these structures until we're ready to
76
+ # parse the command-line, since the 'option_table' passed in here
77
+ # isn't necessarily the final word.
78
+ self.short_opts = []
79
+ self.long_opts = []
80
+ self.short2long = {}
81
+ self.attr_name = {}
82
+ self.takes_arg = {}
83
+
84
+ # And 'option_order' is filled up in 'getopt()'; it records the
85
+ # original order of options (and their values) on the command-line,
86
+ # but expands short options, converts aliases, etc.
87
+ self.option_order = []
88
+
89
+ def _build_index(self):
90
+ self.option_index.clear()
91
+ for option in self.option_table:
92
+ self.option_index[option[0]] = option
93
+
94
+ def set_option_table(self, option_table):
95
+ self.option_table = option_table
96
+ self._build_index()
97
+
98
+ def add_option(self, long_option, short_option=None, help_string=None):
99
+ if long_option in self.option_index:
100
+ raise DistutilsGetoptError(
101
+ f"option conflict: already an option '{long_option}'"
102
+ )
103
+ else:
104
+ option = (long_option, short_option, help_string)
105
+ self.option_table.append(option)
106
+ self.option_index[long_option] = option
107
+
108
+ def has_option(self, long_option):
109
+ """Return true if the option table for this parser has an
110
+ option with long name 'long_option'."""
111
+ return long_option in self.option_index
112
+
113
+ def get_attr_name(self, long_option):
114
+ """Translate long option name 'long_option' to the form it
115
+ has as an attribute of some object: ie., translate hyphens
116
+ to underscores."""
117
+ return long_option.translate(longopt_xlate)
118
+
119
+ def _check_alias_dict(self, aliases, what):
120
+ assert isinstance(aliases, dict)
121
+ for alias, opt in aliases.items():
122
+ if alias not in self.option_index:
123
+ raise DistutilsGetoptError(
124
+ f"invalid {what} '{alias}': option '{alias}' not defined"
125
+ )
126
+ if opt not in self.option_index:
127
+ raise DistutilsGetoptError(
128
+ f"invalid {what} '{alias}': aliased option '{opt}' not defined"
129
+ )
130
+
131
+ def set_aliases(self, alias):
132
+ """Set the aliases for this option parser."""
133
+ self._check_alias_dict(alias, "alias")
134
+ self.alias = alias
135
+
136
+ def set_negative_aliases(self, negative_alias):
137
+ """Set the negative aliases for this option parser.
138
+ 'negative_alias' should be a dictionary mapping option names to
139
+ option names, both the key and value must already be defined
140
+ in the option table."""
141
+ self._check_alias_dict(negative_alias, "negative alias")
142
+ self.negative_alias = negative_alias
143
+
144
+ def _grok_option_table(self): # noqa: C901
145
+ """Populate the various data structures that keep tabs on the
146
+ option table. Called by 'getopt()' before it can do anything
147
+ worthwhile.
148
+ """
149
+ self.long_opts = []
150
+ self.short_opts = []
151
+ self.short2long.clear()
152
+ self.repeat = {}
153
+
154
+ for option in self.option_table:
155
+ if len(option) == 3:
156
+ long, short, help = option
157
+ repeat = 0
158
+ elif len(option) == 4:
159
+ long, short, help, repeat = option
160
+ else:
161
+ # the option table is part of the code, so simply
162
+ # assert that it is correct
163
+ raise ValueError(f"invalid option tuple: {option!r}")
164
+
165
+ # Type- and value-check the option names
166
+ if not isinstance(long, str) or len(long) < 2:
167
+ raise DistutilsGetoptError(
168
+ f"invalid long option '{long}': must be a string of length >= 2"
169
+ )
170
+
171
+ if not ((short is None) or (isinstance(short, str) and len(short) == 1)):
172
+ raise DistutilsGetoptError(
173
+ f"invalid short option '{short}': must a single character or None"
174
+ )
175
+
176
+ self.repeat[long] = repeat
177
+ self.long_opts.append(long)
178
+
179
+ if long[-1] == '=': # option takes an argument?
180
+ if short:
181
+ short = short + ':'
182
+ long = long[0:-1]
183
+ self.takes_arg[long] = True
184
+ else:
185
+ # Is option is a "negative alias" for some other option (eg.
186
+ # "quiet" == "!verbose")?
187
+ alias_to = self.negative_alias.get(long)
188
+ if alias_to is not None:
189
+ if self.takes_arg[alias_to]:
190
+ raise DistutilsGetoptError(
191
+ f"invalid negative alias '{long}': "
192
+ f"aliased option '{alias_to}' takes a value"
193
+ )
194
+
195
+ self.long_opts[-1] = long # XXX redundant?!
196
+ self.takes_arg[long] = False
197
+
198
+ # If this is an alias option, make sure its "takes arg" flag is
199
+ # the same as the option it's aliased to.
200
+ alias_to = self.alias.get(long)
201
+ if alias_to is not None:
202
+ if self.takes_arg[long] != self.takes_arg[alias_to]:
203
+ raise DistutilsGetoptError(
204
+ f"invalid alias '{long}': inconsistent with "
205
+ f"aliased option '{alias_to}' (one of them takes a value, "
206
+ "the other doesn't"
207
+ )
208
+
209
+ # Now enforce some bondage on the long option name, so we can
210
+ # later translate it to an attribute name on some object. Have
211
+ # to do this a bit late to make sure we've removed any trailing
212
+ # '='.
213
+ if not longopt_re.match(long):
214
+ raise DistutilsGetoptError(
215
+ f"invalid long option name '{long}' "
216
+ "(must be letters, numbers, hyphens only"
217
+ )
218
+
219
+ self.attr_name[long] = self.get_attr_name(long)
220
+ if short:
221
+ self.short_opts.append(short)
222
+ self.short2long[short[0]] = long
223
+
224
+ def getopt(self, args: Sequence[str] | None = None, object=None): # noqa: C901
225
+ """Parse command-line options in args. Store as attributes on object.
226
+
227
+ If 'args' is None or not supplied, uses 'sys.argv[1:]'. If
228
+ 'object' is None or not supplied, creates a new OptionDummy
229
+ object, stores option values there, and returns a tuple (args,
230
+ object). If 'object' is supplied, it is modified in place and
231
+ 'getopt()' just returns 'args'; in both cases, the returned
232
+ 'args' is a modified copy of the passed-in 'args' list, which
233
+ is left untouched.
234
+ """
235
+ if args is None:
236
+ args = sys.argv[1:]
237
+ if object is None:
238
+ object = OptionDummy()
239
+ created_object = True
240
+ else:
241
+ created_object = False
242
+
243
+ self._grok_option_table()
244
+
245
+ short_opts = ' '.join(self.short_opts)
246
+ try:
247
+ opts, args = getopt.getopt(args, short_opts, self.long_opts)
248
+ except getopt.error as msg:
249
+ raise DistutilsArgError(msg)
250
+
251
+ for opt, val in opts:
252
+ if len(opt) == 2 and opt[0] == '-': # it's a short option
253
+ opt = self.short2long[opt[1]]
254
+ else:
255
+ assert len(opt) > 2 and opt[:2] == '--'
256
+ opt = opt[2:]
257
+
258
+ alias = self.alias.get(opt)
259
+ if alias:
260
+ opt = alias
261
+
262
+ if not self.takes_arg[opt]: # boolean option?
263
+ assert val == '', "boolean option can't have value"
264
+ alias = self.negative_alias.get(opt)
265
+ if alias:
266
+ opt = alias
267
+ val = 0
268
+ else:
269
+ val = 1
270
+
271
+ attr = self.attr_name[opt]
272
+ # The only repeating option at the moment is 'verbose'.
273
+ # It has a negative option -q quiet, which should set verbose = False.
274
+ if val and self.repeat.get(attr) is not None:
275
+ val = getattr(object, attr, 0) + 1
276
+ setattr(object, attr, val)
277
+ self.option_order.append((opt, val))
278
+
279
+ # for opts
280
+ if created_object:
281
+ return args, object
282
+ else:
283
+ return args
284
+
285
+ def get_option_order(self):
286
+ """Returns the list of (option, value) tuples processed by the
287
+ previous run of 'getopt()'. Raises RuntimeError if
288
+ 'getopt()' hasn't been called yet.
289
+ """
290
+ if self.option_order is None:
291
+ raise RuntimeError("'getopt()' hasn't been called yet")
292
+ else:
293
+ return self.option_order
294
+
295
+ def generate_help(self, header=None): # noqa: C901
296
+ """Generate help text (a list of strings, one per suggested line of
297
+ output) from the option table for this FancyGetopt object.
298
+ """
299
+ # Blithely assume the option table is good: probably wouldn't call
300
+ # 'generate_help()' unless you've already called 'getopt()'.
301
+
302
+ # First pass: determine maximum length of long option names
303
+ max_opt = 0
304
+ for option in self.option_table:
305
+ long = option[0]
306
+ short = option[1]
307
+ ell = len(long)
308
+ if long[-1] == '=':
309
+ ell = ell - 1
310
+ if short is not None:
311
+ ell = ell + 5 # " (-x)" where short == 'x'
312
+ if ell > max_opt:
313
+ max_opt = ell
314
+
315
+ opt_width = max_opt + 2 + 2 + 2 # room for indent + dashes + gutter
316
+
317
+ # Typical help block looks like this:
318
+ # --foo controls foonabulation
319
+ # Help block for longest option looks like this:
320
+ # --flimflam set the flim-flam level
321
+ # and with wrapped text:
322
+ # --flimflam set the flim-flam level (must be between
323
+ # 0 and 100, except on Tuesdays)
324
+ # Options with short names will have the short name shown (but
325
+ # it doesn't contribute to max_opt):
326
+ # --foo (-f) controls foonabulation
327
+ # If adding the short option would make the left column too wide,
328
+ # we push the explanation off to the next line
329
+ # --flimflam (-l)
330
+ # set the flim-flam level
331
+ # Important parameters:
332
+ # - 2 spaces before option block start lines
333
+ # - 2 dashes for each long option name
334
+ # - min. 2 spaces between option and explanation (gutter)
335
+ # - 5 characters (incl. space) for short option name
336
+
337
+ # Now generate lines of help text. (If 80 columns were good enough
338
+ # for Jesus, then 78 columns are good enough for me!)
339
+ line_width = 78
340
+ text_width = line_width - opt_width
341
+ big_indent = ' ' * opt_width
342
+ if header:
343
+ lines = [header]
344
+ else:
345
+ lines = ['Option summary:']
346
+
347
+ for option in self.option_table:
348
+ long, short, help = option[:3]
349
+ text = wrap_text(help, text_width)
350
+ if long[-1] == '=':
351
+ long = long[0:-1]
352
+
353
+ # Case 1: no short option at all (makes life easy)
354
+ if short is None:
355
+ if text:
356
+ lines.append(f" --{long:<{max_opt}} {text[0]}")
357
+ else:
358
+ lines.append(f" --{long:<{max_opt}}")
359
+
360
+ # Case 2: we have a short option, so we have to include it
361
+ # just after the long option
362
+ else:
363
+ opt_names = f"{long} (-{short})"
364
+ if text:
365
+ lines.append(f" --{opt_names:<{max_opt}} {text[0]}")
366
+ else:
367
+ lines.append(f" --{opt_names:<{max_opt}}")
368
+
369
+ for ell in text[1:]:
370
+ lines.append(big_indent + ell)
371
+ return lines
372
+
373
+ def print_help(self, header=None, file=None):
374
+ if file is None:
375
+ file = sys.stdout
376
+ for line in self.generate_help(header):
377
+ file.write(line + "\n")
378
+
379
+
380
+ def fancy_getopt(options, negative_opt, object, args: Sequence[str] | None):
381
+ parser = FancyGetopt(options)
382
+ parser.set_negative_aliases(negative_opt)
383
+ return parser.getopt(args, object)
384
+
385
+
386
+ WS_TRANS = {ord(_wschar): ' ' for _wschar in string.whitespace}
387
+
388
+
389
+ def wrap_text(text, width):
390
+ """wrap_text(text : string, width : int) -> [string]
391
+
392
+ Split 'text' into multiple lines of no more than 'width' characters
393
+ each, and return the list of strings that results.
394
+ """
395
+ if text is None:
396
+ return []
397
+ if len(text) <= width:
398
+ return [text]
399
+
400
+ text = text.expandtabs()
401
+ text = text.translate(WS_TRANS)
402
+ chunks = re.split(r'( +|-+)', text)
403
+ chunks = [ch for ch in chunks if ch] # ' - ' results in empty strings
404
+ lines = []
405
+
406
+ while chunks:
407
+ cur_line = [] # list of chunks (to-be-joined)
408
+ cur_len = 0 # length of current line
409
+
410
+ while chunks:
411
+ ell = len(chunks[0])
412
+ if cur_len + ell <= width: # can squeeze (at least) this chunk in
413
+ cur_line.append(chunks[0])
414
+ del chunks[0]
415
+ cur_len = cur_len + ell
416
+ else: # this line is full
417
+ # drop last chunk if all space
418
+ if cur_line and cur_line[-1][0] == ' ':
419
+ del cur_line[-1]
420
+ break
421
+
422
+ if chunks: # any chunks left to process?
423
+ # if the current line is still empty, then we had a single
424
+ # chunk that's too big too fit on a line -- so we break
425
+ # down and break it up at the line width
426
+ if cur_len == 0:
427
+ cur_line.append(chunks[0][0:width])
428
+ chunks[0] = chunks[0][width:]
429
+
430
+ # all-whitespace chunks at the end of a line can be discarded
431
+ # (and we know from the re.split above that if a chunk has
432
+ # *any* whitespace, it is *all* whitespace)
433
+ if chunks[0][0] == ' ':
434
+ del chunks[0]
435
+
436
+ # and store this line in the list-of-all-lines -- as a single
437
+ # string, of course!
438
+ lines.append(''.join(cur_line))
439
+
440
+ return lines
441
+
442
+
443
+ def translate_longopt(opt):
444
+ """Convert a long option name to a valid Python identifier by
445
+ changing "-" to "_".
446
+ """
447
+ return opt.translate(longopt_xlate)
448
+
449
+
450
+ class OptionDummy:
451
+ """Dummy class just used as a place to hold command-line option
452
+ values as instance attributes."""
453
+
454
+ def __init__(self, options: Sequence[Any] = []):
455
+ """Create a new OptionDummy instance. The attributes listed in
456
+ 'options' will be initialized to None."""
457
+ for opt in options:
458
+ setattr(self, opt, None)
459
+
460
+
461
+ if __name__ == "__main__":
462
+ text = """\
463
+ Tra-la-la, supercalifragilisticexpialidocious.
464
+ How *do* you spell that odd word, anyways?
465
+ (Someone ask Mary -- she'll know [or she'll
466
+ say, "How should I know?"].)"""
467
+
468
+ for w in (10, 20, 30, 40):
469
+ print(f"width: {w}")
470
+ print("\n".join(wrap_text(text, w)))
471
+ print()