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.
- android_notify/config.py +1 -1
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/METADATA +4 -4
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/RECORD +375 -6
- venv/Lib/site-packages/_distutils_hack/__init__.py +239 -0
- venv/Lib/site-packages/_distutils_hack/override.py +1 -0
- venv/Lib/site-packages/pkg_resources/__init__.py +3713 -0
- venv/Lib/site-packages/pkg_resources/py.typed +0 -0
- venv/Lib/site-packages/pkg_resources/tests/__init__.py +0 -0
- venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +7 -0
- venv/Lib/site-packages/pkg_resources/tests/test_find_distributions.py +56 -0
- venv/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py +54 -0
- venv/Lib/site-packages/pkg_resources/tests/test_markers.py +8 -0
- venv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +485 -0
- venv/Lib/site-packages/pkg_resources/tests/test_resources.py +869 -0
- venv/Lib/site-packages/pkg_resources/tests/test_working_set.py +505 -0
- venv/Lib/site-packages/setuptools/__init__.py +248 -0
- venv/Lib/site-packages/setuptools/_core_metadata.py +337 -0
- venv/Lib/site-packages/setuptools/_discovery.py +33 -0
- venv/Lib/site-packages/setuptools/_distutils/__init__.py +14 -0
- venv/Lib/site-packages/setuptools/_distutils/_log.py +3 -0
- venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
- venv/Lib/site-packages/setuptools/_distutils/_modified.py +95 -0
- venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +16 -0
- venv/Lib/site-packages/setuptools/_distutils/archive_util.py +294 -0
- venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +26 -0
- venv/Lib/site-packages/setuptools/_distutils/cmd.py +554 -0
- venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +23 -0
- venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +54 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +167 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +141 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +598 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build.py +156 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +201 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +812 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +160 -0
- venv/Lib/site-packages/setuptools/_distutils/command/check.py +152 -0
- venv/Lib/site-packages/setuptools/_distutils/command/clean.py +77 -0
- venv/Lib/site-packages/setuptools/_distutils/command/config.py +358 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install.py +805 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +94 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +46 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +62 -0
- venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +521 -0
- venv/Lib/site-packages/setuptools/_distutils/compat/__init__.py +18 -0
- venv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
- venv/Lib/site-packages/setuptools/_distutils/compat/py39.py +66 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1394 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_base.py +83 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py +76 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_mingw.py +48 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py +136 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +413 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +422 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
- venv/Lib/site-packages/setuptools/_distutils/core.py +289 -0
- venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +31 -0
- venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
- venv/Lib/site-packages/setuptools/_distutils/dep_util.py +14 -0
- venv/Lib/site-packages/setuptools/_distutils/dir_util.py +244 -0
- venv/Lib/site-packages/setuptools/_distutils/dist.py +1386 -0
- venv/Lib/site-packages/setuptools/_distutils/errors.py +108 -0
- venv/Lib/site-packages/setuptools/_distutils/extension.py +258 -0
- venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +471 -0
- venv/Lib/site-packages/setuptools/_distutils/file_util.py +236 -0
- venv/Lib/site-packages/setuptools/_distutils/filelist.py +431 -0
- venv/Lib/site-packages/setuptools/_distutils/log.py +56 -0
- venv/Lib/site-packages/setuptools/_distutils/spawn.py +134 -0
- venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +598 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/__init__.py +42 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/compat/py39.py +40 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/support.py +134 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_archive_util.py +353 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist.py +47 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_dumb.py +78 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_rpm.py +127 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build.py +49 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_clib.py +134 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +628 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_py.py +196 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_scripts.py +96 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_check.py +194 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_clean.py +45 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_cmd.py +107 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_config_cmd.py +87 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_core.py +130 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +139 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_dist.py +552 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_extension.py +117 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_file_util.py +95 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_filelist.py +336 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install.py +245 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_data.py +74 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_headers.py +33 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_lib.py +110 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_scripts.py +52 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_log.py +12 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_modified.py +126 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +470 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_spawn.py +141 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_sysconfig.py +319 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_text_file.py +127 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_util.py +243 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_version.py +80 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_versionpredicate.py +0 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/unix_compat.py +17 -0
- venv/Lib/site-packages/setuptools/_distutils/text_file.py +286 -0
- venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +9 -0
- venv/Lib/site-packages/setuptools/_distutils/util.py +518 -0
- venv/Lib/site-packages/setuptools/_distutils/version.py +348 -0
- venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
- venv/Lib/site-packages/setuptools/_distutils/zosccompiler.py +3 -0
- venv/Lib/site-packages/setuptools/_entry_points.py +94 -0
- venv/Lib/site-packages/setuptools/_imp.py +87 -0
- venv/Lib/site-packages/setuptools/_importlib.py +9 -0
- venv/Lib/site-packages/setuptools/_itertools.py +23 -0
- venv/Lib/site-packages/setuptools/_normalization.py +177 -0
- venv/Lib/site-packages/setuptools/_path.py +93 -0
- venv/Lib/site-packages/setuptools/_reqs.py +42 -0
- venv/Lib/site-packages/setuptools/_scripts.py +361 -0
- venv/Lib/site-packages/setuptools/_shutil.py +59 -0
- venv/Lib/site-packages/setuptools/_static.py +188 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/__init__.py +27 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/autoasync.py +142 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/autocommand.py +70 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/automain.py +59 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/autoparse.py +333 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/errors.py +23 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/__init__.py +1 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__init__.py +2937 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__main__.py +5 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py +24 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1083 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +83 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +57 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +67 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py +22 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py +36 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/diagnose.py +21 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/__init__.py +3986 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/compat/py38.py +7 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/__init__.py +1091 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +361 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.py +633 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +624 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/layouts.py +25 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/show-newlines.py +33 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/strip-prefix.py +21 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-dvorak.py +6 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-qwerty.py +6 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +6 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +4806 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +1046 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +15 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +110 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +263 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +85 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_parser.py +354 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_tokenizer.py +194 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +331 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +863 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +91 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +1020 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +617 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +163 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +582 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/__init__.py +627 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/__main__.py +55 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/android.py +249 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/api.py +292 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/macos.py +130 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/unix.py +275 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/version.py +16 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/windows.py +272 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/__init__.py +48 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_checkers.py +993 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_config.py +108 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_decorators.py +235 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_exceptions.py +42 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_functions.py +308 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_importhook.py +213 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_memo.py +48 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_pytest_plugin.py +127 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_suppression.py +86 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_transformer.py +1229 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_union_transformer.py +55 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_utils.py +173 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +3641 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +3 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/__main__.py +23 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +26 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +26 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +155 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +332 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/pack.py +85 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/tags.py +139 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/unpack.py +30 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +482 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +183 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/util.py +17 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_elffile.py +108 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py +260 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py +83 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_parser.py +356 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_structures.py +61 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py +192 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/markers.py +253 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/requirements.py +90 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/specifiers.py +1011 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/tags.py +571 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/utils.py +172 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/version.py +561 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +227 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/__init__.py +501 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/compat/py310.py +11 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/glob.py +106 -0
- venv/Lib/site-packages/setuptools/archive_util.py +219 -0
- venv/Lib/site-packages/setuptools/build_meta.py +548 -0
- venv/Lib/site-packages/setuptools/command/__init__.py +21 -0
- venv/Lib/site-packages/setuptools/command/_requirestxt.py +131 -0
- venv/Lib/site-packages/setuptools/command/alias.py +77 -0
- venv/Lib/site-packages/setuptools/command/bdist_egg.py +477 -0
- venv/Lib/site-packages/setuptools/command/bdist_rpm.py +42 -0
- venv/Lib/site-packages/setuptools/command/bdist_wheel.py +604 -0
- venv/Lib/site-packages/setuptools/command/build.py +135 -0
- venv/Lib/site-packages/setuptools/command/build_clib.py +103 -0
- venv/Lib/site-packages/setuptools/command/build_ext.py +470 -0
- venv/Lib/site-packages/setuptools/command/build_py.py +400 -0
- venv/Lib/site-packages/setuptools/command/develop.py +55 -0
- venv/Lib/site-packages/setuptools/command/dist_info.py +103 -0
- venv/Lib/site-packages/setuptools/command/easy_install.py +30 -0
- venv/Lib/site-packages/setuptools/command/editable_wheel.py +908 -0
- venv/Lib/site-packages/setuptools/command/egg_info.py +718 -0
- venv/Lib/site-packages/setuptools/command/install.py +131 -0
- venv/Lib/site-packages/setuptools/command/install_egg_info.py +58 -0
- venv/Lib/site-packages/setuptools/command/install_lib.py +137 -0
- venv/Lib/site-packages/setuptools/command/install_scripts.py +67 -0
- venv/Lib/site-packages/setuptools/command/rotate.py +65 -0
- venv/Lib/site-packages/setuptools/command/saveopts.py +21 -0
- venv/Lib/site-packages/setuptools/command/sdist.py +217 -0
- venv/Lib/site-packages/setuptools/command/setopt.py +141 -0
- venv/Lib/site-packages/setuptools/command/test.py +45 -0
- venv/Lib/site-packages/setuptools/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/compat/py310.py +20 -0
- venv/Lib/site-packages/setuptools/compat/py311.py +27 -0
- venv/Lib/site-packages/setuptools/compat/py312.py +13 -0
- venv/Lib/site-packages/setuptools/compat/py39.py +9 -0
- venv/Lib/site-packages/setuptools/config/__init__.py +43 -0
- venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +526 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +336 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +82 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1412 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +402 -0
- venv/Lib/site-packages/setuptools/config/expand.py +452 -0
- venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +468 -0
- venv/Lib/site-packages/setuptools/config/setupcfg.py +780 -0
- venv/Lib/site-packages/setuptools/depends.py +185 -0
- venv/Lib/site-packages/setuptools/discovery.py +614 -0
- venv/Lib/site-packages/setuptools/dist.py +1119 -0
- venv/Lib/site-packages/setuptools/errors.py +67 -0
- venv/Lib/site-packages/setuptools/extension.py +177 -0
- venv/Lib/site-packages/setuptools/glob.py +185 -0
- venv/Lib/site-packages/setuptools/installer.py +155 -0
- venv/Lib/site-packages/setuptools/launch.py +36 -0
- venv/Lib/site-packages/setuptools/logging.py +40 -0
- venv/Lib/site-packages/setuptools/modified.py +18 -0
- venv/Lib/site-packages/setuptools/monkey.py +126 -0
- venv/Lib/site-packages/setuptools/msvc.py +1536 -0
- venv/Lib/site-packages/setuptools/namespaces.py +106 -0
- venv/Lib/site-packages/setuptools/tests/__init__.py +13 -0
- venv/Lib/site-packages/setuptools/tests/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/tests/compat/py39.py +3 -0
- venv/Lib/site-packages/setuptools/tests/config/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +59 -0
- venv/Lib/site-packages/setuptools/tests/config/downloads/preload.py +18 -0
- venv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +772 -0
- venv/Lib/site-packages/setuptools/tests/config/test_expand.py +247 -0
- venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +396 -0
- venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +109 -0
- venv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +980 -0
- venv/Lib/site-packages/setuptools/tests/contexts.py +131 -0
- venv/Lib/site-packages/setuptools/tests/environment.py +95 -0
- venv/Lib/site-packages/setuptools/tests/fixtures.py +392 -0
- venv/Lib/site-packages/setuptools/tests/integration/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/tests/integration/helpers.py +77 -0
- venv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
- venv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +223 -0
- venv/Lib/site-packages/setuptools/tests/mod_with_constant.py +1 -0
- venv/Lib/site-packages/setuptools/tests/namespaces.py +90 -0
- venv/Lib/site-packages/setuptools/tests/script-with-bom.py +1 -0
- venv/Lib/site-packages/setuptools/tests/test_archive_util.py +36 -0
- venv/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py +28 -0
- venv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +73 -0
- venv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +708 -0
- venv/Lib/site-packages/setuptools/tests/test_build.py +33 -0
- venv/Lib/site-packages/setuptools/tests/test_build_clib.py +84 -0
- venv/Lib/site-packages/setuptools/tests/test_build_ext.py +293 -0
- venv/Lib/site-packages/setuptools/tests/test_build_meta.py +959 -0
- venv/Lib/site-packages/setuptools/tests/test_build_py.py +480 -0
- venv/Lib/site-packages/setuptools/tests/test_config_discovery.py +647 -0
- venv/Lib/site-packages/setuptools/tests/test_core_metadata.py +622 -0
- venv/Lib/site-packages/setuptools/tests/test_depends.py +15 -0
- venv/Lib/site-packages/setuptools/tests/test_develop.py +112 -0
- venv/Lib/site-packages/setuptools/tests/test_dist.py +278 -0
- venv/Lib/site-packages/setuptools/tests/test_dist_info.py +147 -0
- venv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +198 -0
- venv/Lib/site-packages/setuptools/tests/test_editable_install.py +1263 -0
- venv/Lib/site-packages/setuptools/tests/test_egg_info.py +1306 -0
- venv/Lib/site-packages/setuptools/tests/test_extern.py +15 -0
- venv/Lib/site-packages/setuptools/tests/test_find_packages.py +218 -0
- venv/Lib/site-packages/setuptools/tests/test_find_py_modules.py +73 -0
- venv/Lib/site-packages/setuptools/tests/test_glob.py +45 -0
- venv/Lib/site-packages/setuptools/tests/test_install_scripts.py +89 -0
- venv/Lib/site-packages/setuptools/tests/test_logging.py +76 -0
- venv/Lib/site-packages/setuptools/tests/test_manifest.py +622 -0
- venv/Lib/site-packages/setuptools/tests/test_namespaces.py +138 -0
- venv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
- venv/Lib/site-packages/setuptools/tests/test_sdist.py +984 -0
- venv/Lib/site-packages/setuptools/tests/test_setopt.py +40 -0
- venv/Lib/site-packages/setuptools/tests/test_setuptools.py +290 -0
- venv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
- venv/Lib/site-packages/setuptools/tests/test_unicode_utils.py +10 -0
- venv/Lib/site-packages/setuptools/tests/test_virtualenv.py +113 -0
- venv/Lib/site-packages/setuptools/tests/test_warnings.py +106 -0
- venv/Lib/site-packages/setuptools/tests/test_wheel.py +690 -0
- venv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +258 -0
- venv/Lib/site-packages/setuptools/tests/text.py +4 -0
- venv/Lib/site-packages/setuptools/tests/textwrap.py +6 -0
- venv/Lib/site-packages/setuptools/unicode_utils.py +102 -0
- venv/Lib/site-packages/setuptools/version.py +6 -0
- venv/Lib/site-packages/setuptools/warnings.py +110 -0
- venv/Lib/site-packages/setuptools/wheel.py +261 -0
- venv/Lib/site-packages/setuptools/windows_support.py +30 -0
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/WHEEL +0 -0
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/entry_points.txt +0 -0
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Python Script Wrapper for Windows
|
|
3
|
+
=================================
|
|
4
|
+
|
|
5
|
+
setuptools includes wrappers for Python scripts that allows them to be
|
|
6
|
+
executed like regular windows programs. There are 2 wrappers, one
|
|
7
|
+
for command-line programs, cli.exe, and one for graphical programs,
|
|
8
|
+
gui.exe. These programs are almost identical, function pretty much
|
|
9
|
+
the same way, and are generated from the same source file. The
|
|
10
|
+
wrapper programs are used by copying them to the directory containing
|
|
11
|
+
the script they are to wrap and with the same name as the script they
|
|
12
|
+
are to wrap.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import pathlib
|
|
16
|
+
import platform
|
|
17
|
+
import subprocess
|
|
18
|
+
import sys
|
|
19
|
+
import textwrap
|
|
20
|
+
|
|
21
|
+
import pytest
|
|
22
|
+
|
|
23
|
+
from setuptools._importlib import resources
|
|
24
|
+
|
|
25
|
+
pytestmark = pytest.mark.skipif(sys.platform != 'win32', reason="Windows only")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class WrapperTester:
|
|
29
|
+
@classmethod
|
|
30
|
+
def prep_script(cls, template):
|
|
31
|
+
python_exe = subprocess.list2cmdline([sys.executable])
|
|
32
|
+
return template % locals()
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def create_script(cls, tmpdir):
|
|
36
|
+
"""
|
|
37
|
+
Create a simple script, foo-script.py
|
|
38
|
+
|
|
39
|
+
Note that the script starts with a Unix-style '#!' line saying which
|
|
40
|
+
Python executable to run. The wrapper will use this line to find the
|
|
41
|
+
correct Python executable.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
script = cls.prep_script(cls.script_tmpl)
|
|
45
|
+
|
|
46
|
+
with (tmpdir / cls.script_name).open('w') as f:
|
|
47
|
+
f.write(script)
|
|
48
|
+
|
|
49
|
+
# also copy cli.exe to the sample directory
|
|
50
|
+
with (tmpdir / cls.wrapper_name).open('wb') as f:
|
|
51
|
+
w = resources.files('setuptools').joinpath(cls.wrapper_source).read_bytes()
|
|
52
|
+
f.write(w)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def win_launcher_exe(prefix):
|
|
56
|
+
"""A simple routine to select launcher script based on platform."""
|
|
57
|
+
assert prefix in ('cli', 'gui')
|
|
58
|
+
if platform.machine() == "ARM64":
|
|
59
|
+
return f"{prefix}-arm64.exe"
|
|
60
|
+
else:
|
|
61
|
+
return f"{prefix}-32.exe"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class TestCLI(WrapperTester):
|
|
65
|
+
script_name = 'foo-script.py'
|
|
66
|
+
wrapper_name = 'foo.exe'
|
|
67
|
+
wrapper_source = win_launcher_exe('cli')
|
|
68
|
+
|
|
69
|
+
script_tmpl = textwrap.dedent(
|
|
70
|
+
"""
|
|
71
|
+
#!%(python_exe)s
|
|
72
|
+
import sys
|
|
73
|
+
input = repr(sys.stdin.read())
|
|
74
|
+
print(sys.argv[0][-14:])
|
|
75
|
+
print(sys.argv[1:])
|
|
76
|
+
print(input)
|
|
77
|
+
if __debug__:
|
|
78
|
+
print('non-optimized')
|
|
79
|
+
"""
|
|
80
|
+
).lstrip()
|
|
81
|
+
|
|
82
|
+
def test_basic(self, tmpdir):
|
|
83
|
+
"""
|
|
84
|
+
When the copy of cli.exe, foo.exe in this example, runs, it examines
|
|
85
|
+
the path name it was run with and computes a Python script path name
|
|
86
|
+
by removing the '.exe' suffix and adding the '-script.py' suffix. (For
|
|
87
|
+
GUI programs, the suffix '-script.pyw' is added.) This is why we
|
|
88
|
+
named out script the way we did. Now we can run out script by running
|
|
89
|
+
the wrapper:
|
|
90
|
+
|
|
91
|
+
This example was a little pathological in that it exercised windows
|
|
92
|
+
(MS C runtime) quoting rules:
|
|
93
|
+
|
|
94
|
+
- Strings containing spaces are surrounded by double quotes.
|
|
95
|
+
|
|
96
|
+
- Double quotes in strings need to be escaped by preceding them with
|
|
97
|
+
back slashes.
|
|
98
|
+
|
|
99
|
+
- One or more backslashes preceding double quotes need to be escaped
|
|
100
|
+
by preceding each of them with back slashes.
|
|
101
|
+
"""
|
|
102
|
+
self.create_script(tmpdir)
|
|
103
|
+
cmd = [
|
|
104
|
+
str(tmpdir / 'foo.exe'),
|
|
105
|
+
'arg1',
|
|
106
|
+
'arg 2',
|
|
107
|
+
'arg "2\\"',
|
|
108
|
+
'arg 4\\',
|
|
109
|
+
'arg5 a\\\\b',
|
|
110
|
+
]
|
|
111
|
+
proc = subprocess.Popen(
|
|
112
|
+
cmd,
|
|
113
|
+
stdout=subprocess.PIPE,
|
|
114
|
+
stdin=subprocess.PIPE,
|
|
115
|
+
text=True,
|
|
116
|
+
encoding="utf-8",
|
|
117
|
+
)
|
|
118
|
+
stdout, _stderr = proc.communicate('hello\nworld\n')
|
|
119
|
+
actual = stdout.replace('\r\n', '\n')
|
|
120
|
+
expected = textwrap.dedent(
|
|
121
|
+
r"""
|
|
122
|
+
\foo-script.py
|
|
123
|
+
['arg1', 'arg 2', 'arg "2\\"', 'arg 4\\', 'arg5 a\\\\b']
|
|
124
|
+
'hello\nworld\n'
|
|
125
|
+
non-optimized
|
|
126
|
+
"""
|
|
127
|
+
).lstrip()
|
|
128
|
+
assert actual == expected
|
|
129
|
+
|
|
130
|
+
def test_symlink(self, tmpdir):
|
|
131
|
+
"""
|
|
132
|
+
Ensure that symlink for the foo.exe is working correctly.
|
|
133
|
+
"""
|
|
134
|
+
script_dir = tmpdir / "script_dir"
|
|
135
|
+
script_dir.mkdir()
|
|
136
|
+
self.create_script(script_dir)
|
|
137
|
+
symlink = pathlib.Path(tmpdir / "foo.exe")
|
|
138
|
+
symlink.symlink_to(script_dir / "foo.exe")
|
|
139
|
+
|
|
140
|
+
cmd = [
|
|
141
|
+
str(tmpdir / 'foo.exe'),
|
|
142
|
+
'arg1',
|
|
143
|
+
'arg 2',
|
|
144
|
+
'arg "2\\"',
|
|
145
|
+
'arg 4\\',
|
|
146
|
+
'arg5 a\\\\b',
|
|
147
|
+
]
|
|
148
|
+
proc = subprocess.Popen(
|
|
149
|
+
cmd,
|
|
150
|
+
stdout=subprocess.PIPE,
|
|
151
|
+
stdin=subprocess.PIPE,
|
|
152
|
+
text=True,
|
|
153
|
+
encoding="utf-8",
|
|
154
|
+
)
|
|
155
|
+
stdout, _stderr = proc.communicate('hello\nworld\n')
|
|
156
|
+
actual = stdout.replace('\r\n', '\n')
|
|
157
|
+
expected = textwrap.dedent(
|
|
158
|
+
r"""
|
|
159
|
+
\foo-script.py
|
|
160
|
+
['arg1', 'arg 2', 'arg "2\\"', 'arg 4\\', 'arg5 a\\\\b']
|
|
161
|
+
'hello\nworld\n'
|
|
162
|
+
non-optimized
|
|
163
|
+
"""
|
|
164
|
+
).lstrip()
|
|
165
|
+
assert actual == expected
|
|
166
|
+
|
|
167
|
+
def test_with_options(self, tmpdir):
|
|
168
|
+
"""
|
|
169
|
+
Specifying Python Command-line Options
|
|
170
|
+
--------------------------------------
|
|
171
|
+
|
|
172
|
+
You can specify a single argument on the '#!' line. This can be used
|
|
173
|
+
to specify Python options like -O, to run in optimized mode or -i
|
|
174
|
+
to start the interactive interpreter. You can combine multiple
|
|
175
|
+
options as usual. For example, to run in optimized mode and
|
|
176
|
+
enter the interpreter after running the script, you could use -Oi:
|
|
177
|
+
"""
|
|
178
|
+
self.create_script(tmpdir)
|
|
179
|
+
tmpl = textwrap.dedent(
|
|
180
|
+
"""
|
|
181
|
+
#!%(python_exe)s -Oi
|
|
182
|
+
import sys
|
|
183
|
+
input = repr(sys.stdin.read())
|
|
184
|
+
print(sys.argv[0][-14:])
|
|
185
|
+
print(sys.argv[1:])
|
|
186
|
+
print(input)
|
|
187
|
+
if __debug__:
|
|
188
|
+
print('non-optimized')
|
|
189
|
+
sys.ps1 = '---'
|
|
190
|
+
"""
|
|
191
|
+
).lstrip()
|
|
192
|
+
with (tmpdir / 'foo-script.py').open('w') as f:
|
|
193
|
+
f.write(self.prep_script(tmpl))
|
|
194
|
+
cmd = [str(tmpdir / 'foo.exe')]
|
|
195
|
+
proc = subprocess.Popen(
|
|
196
|
+
cmd,
|
|
197
|
+
stdout=subprocess.PIPE,
|
|
198
|
+
stdin=subprocess.PIPE,
|
|
199
|
+
stderr=subprocess.STDOUT,
|
|
200
|
+
text=True,
|
|
201
|
+
encoding="utf-8",
|
|
202
|
+
)
|
|
203
|
+
stdout, _stderr = proc.communicate()
|
|
204
|
+
actual = stdout.replace('\r\n', '\n')
|
|
205
|
+
expected = textwrap.dedent(
|
|
206
|
+
r"""
|
|
207
|
+
\foo-script.py
|
|
208
|
+
[]
|
|
209
|
+
''
|
|
210
|
+
---
|
|
211
|
+
"""
|
|
212
|
+
).lstrip()
|
|
213
|
+
assert actual == expected
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class TestGUI(WrapperTester):
|
|
217
|
+
"""
|
|
218
|
+
Testing the GUI Version
|
|
219
|
+
-----------------------
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
script_name = 'bar-script.pyw'
|
|
223
|
+
wrapper_source = win_launcher_exe('gui')
|
|
224
|
+
wrapper_name = 'bar.exe'
|
|
225
|
+
|
|
226
|
+
script_tmpl = textwrap.dedent(
|
|
227
|
+
"""
|
|
228
|
+
#!%(python_exe)s
|
|
229
|
+
import sys
|
|
230
|
+
f = open(sys.argv[1], 'wb')
|
|
231
|
+
bytes_written = f.write(repr(sys.argv[2]).encode('utf-8'))
|
|
232
|
+
f.close()
|
|
233
|
+
"""
|
|
234
|
+
).strip()
|
|
235
|
+
|
|
236
|
+
def test_basic(self, tmpdir):
|
|
237
|
+
"""Test the GUI version with the simple script, bar-script.py"""
|
|
238
|
+
self.create_script(tmpdir)
|
|
239
|
+
|
|
240
|
+
cmd = [
|
|
241
|
+
str(tmpdir / 'bar.exe'),
|
|
242
|
+
str(tmpdir / 'test_output.txt'),
|
|
243
|
+
'Test Argument',
|
|
244
|
+
]
|
|
245
|
+
proc = subprocess.Popen(
|
|
246
|
+
cmd,
|
|
247
|
+
stdout=subprocess.PIPE,
|
|
248
|
+
stdin=subprocess.PIPE,
|
|
249
|
+
stderr=subprocess.STDOUT,
|
|
250
|
+
text=True,
|
|
251
|
+
encoding="utf-8",
|
|
252
|
+
)
|
|
253
|
+
stdout, stderr = proc.communicate()
|
|
254
|
+
assert not stdout
|
|
255
|
+
assert not stderr
|
|
256
|
+
with (tmpdir / 'test_output.txt').open('rb') as f_out:
|
|
257
|
+
actual = f_out.read().decode('ascii')
|
|
258
|
+
assert actual == repr('Test Argument')
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import unicodedata
|
|
3
|
+
from configparser import RawConfigParser
|
|
4
|
+
|
|
5
|
+
from .compat import py39
|
|
6
|
+
from .warnings import SetuptoolsDeprecationWarning
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# HFS Plus uses decomposed UTF-8
|
|
10
|
+
def decompose(path):
|
|
11
|
+
if isinstance(path, str):
|
|
12
|
+
return unicodedata.normalize('NFD', path)
|
|
13
|
+
try:
|
|
14
|
+
path = path.decode('utf-8')
|
|
15
|
+
path = unicodedata.normalize('NFD', path)
|
|
16
|
+
path = path.encode('utf-8')
|
|
17
|
+
except UnicodeError:
|
|
18
|
+
pass # Not UTF-8
|
|
19
|
+
return path
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def filesys_decode(path):
|
|
23
|
+
"""
|
|
24
|
+
Ensure that the given path is decoded,
|
|
25
|
+
``None`` when no expected encoding works
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
if isinstance(path, str):
|
|
29
|
+
return path
|
|
30
|
+
|
|
31
|
+
fs_enc = sys.getfilesystemencoding() or 'utf-8'
|
|
32
|
+
candidates = fs_enc, 'utf-8'
|
|
33
|
+
|
|
34
|
+
for enc in candidates:
|
|
35
|
+
try:
|
|
36
|
+
return path.decode(enc)
|
|
37
|
+
except UnicodeDecodeError:
|
|
38
|
+
continue
|
|
39
|
+
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def try_encode(string, enc):
|
|
44
|
+
"turn unicode encoding into a functional routine"
|
|
45
|
+
try:
|
|
46
|
+
return string.encode(enc)
|
|
47
|
+
except UnicodeEncodeError:
|
|
48
|
+
return None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _read_utf8_with_fallback(file: str, fallback_encoding=py39.LOCALE_ENCODING) -> str:
|
|
52
|
+
"""
|
|
53
|
+
First try to read the file with UTF-8, if there is an error fallback to a
|
|
54
|
+
different encoding ("locale" by default). Returns the content of the file.
|
|
55
|
+
Also useful when reading files that might have been produced by an older version of
|
|
56
|
+
setuptools.
|
|
57
|
+
"""
|
|
58
|
+
try:
|
|
59
|
+
with open(file, "r", encoding="utf-8") as f:
|
|
60
|
+
return f.read()
|
|
61
|
+
except UnicodeDecodeError: # pragma: no cover
|
|
62
|
+
_Utf8EncodingNeeded.emit(file=file, fallback_encoding=fallback_encoding)
|
|
63
|
+
with open(file, "r", encoding=fallback_encoding) as f:
|
|
64
|
+
return f.read()
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _cfg_read_utf8_with_fallback(
|
|
68
|
+
cfg: RawConfigParser, file: str, fallback_encoding=py39.LOCALE_ENCODING
|
|
69
|
+
) -> None:
|
|
70
|
+
"""Same idea as :func:`_read_utf8_with_fallback`, but for the
|
|
71
|
+
:meth:`RawConfigParser.read` method.
|
|
72
|
+
|
|
73
|
+
This method may call ``cfg.clear()``.
|
|
74
|
+
"""
|
|
75
|
+
try:
|
|
76
|
+
cfg.read(file, encoding="utf-8")
|
|
77
|
+
except UnicodeDecodeError: # pragma: no cover
|
|
78
|
+
_Utf8EncodingNeeded.emit(file=file, fallback_encoding=fallback_encoding)
|
|
79
|
+
cfg.clear()
|
|
80
|
+
cfg.read(file, encoding=fallback_encoding)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class _Utf8EncodingNeeded(SetuptoolsDeprecationWarning):
|
|
84
|
+
_SUMMARY = """
|
|
85
|
+
`encoding="utf-8"` fails with {file!r}, trying `encoding={fallback_encoding!r}`.
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
_DETAILS = """
|
|
89
|
+
Fallback behavior for UTF-8 is considered **deprecated** and future versions of
|
|
90
|
+
`setuptools` may not implement it.
|
|
91
|
+
|
|
92
|
+
Please encode {file!r} with "utf-8" to ensure future builds will succeed.
|
|
93
|
+
|
|
94
|
+
If this file was produced by `setuptools` itself, cleaning up the cached files
|
|
95
|
+
and re-building/re-installing the package with a newer version of `setuptools`
|
|
96
|
+
(e.g. by updating `build-system.requires` in its `pyproject.toml`)
|
|
97
|
+
might solve the problem.
|
|
98
|
+
"""
|
|
99
|
+
# TODO: Add a deadline?
|
|
100
|
+
# Will we be able to remove this?
|
|
101
|
+
# The question comes to mind mainly because of sdists that have been produced
|
|
102
|
+
# by old versions of setuptools and published to PyPI...
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""Provide basic warnings used by setuptools modules.
|
|
2
|
+
|
|
3
|
+
Using custom classes (other than ``UserWarning``) allow users to set
|
|
4
|
+
``PYTHONWARNINGS`` filters to run tests and prepare for upcoming changes in
|
|
5
|
+
setuptools.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import warnings
|
|
12
|
+
from datetime import date
|
|
13
|
+
from inspect import cleandoc
|
|
14
|
+
from textwrap import indent
|
|
15
|
+
from typing import TYPE_CHECKING
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from typing_extensions import TypeAlias
|
|
19
|
+
|
|
20
|
+
_DueDate: TypeAlias = tuple[int, int, int] # time tuple
|
|
21
|
+
_INDENT = 8 * " "
|
|
22
|
+
_TEMPLATE = f"""{80 * '*'}\n{{details}}\n{80 * '*'}"""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class SetuptoolsWarning(UserWarning):
|
|
26
|
+
"""Base class in ``setuptools`` warning hierarchy."""
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def emit(
|
|
30
|
+
cls,
|
|
31
|
+
summary: str | None = None,
|
|
32
|
+
details: str | None = None,
|
|
33
|
+
due_date: _DueDate | None = None,
|
|
34
|
+
see_docs: str | None = None,
|
|
35
|
+
see_url: str | None = None,
|
|
36
|
+
stacklevel: int = 2,
|
|
37
|
+
**kwargs,
|
|
38
|
+
) -> None:
|
|
39
|
+
"""Private: reserved for ``setuptools`` internal use only"""
|
|
40
|
+
# Default values:
|
|
41
|
+
summary_ = summary or getattr(cls, "_SUMMARY", None) or ""
|
|
42
|
+
details_ = details or getattr(cls, "_DETAILS", None) or ""
|
|
43
|
+
due_date = due_date or getattr(cls, "_DUE_DATE", None)
|
|
44
|
+
docs_ref = see_docs or getattr(cls, "_SEE_DOCS", None)
|
|
45
|
+
docs_url = docs_ref and f"https://setuptools.pypa.io/en/latest/{docs_ref}"
|
|
46
|
+
see_url = see_url or getattr(cls, "_SEE_URL", None)
|
|
47
|
+
due = date(*due_date) if due_date else None
|
|
48
|
+
|
|
49
|
+
text = cls._format(summary_, details_, due, see_url or docs_url, kwargs)
|
|
50
|
+
if due and due < date.today() and _should_enforce():
|
|
51
|
+
raise cls(text)
|
|
52
|
+
warnings.warn(text, cls, stacklevel=stacklevel + 1)
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def _format(
|
|
56
|
+
cls,
|
|
57
|
+
summary: str,
|
|
58
|
+
details: str,
|
|
59
|
+
due_date: date | None = None,
|
|
60
|
+
see_url: str | None = None,
|
|
61
|
+
format_args: dict | None = None,
|
|
62
|
+
) -> str:
|
|
63
|
+
"""Private: reserved for ``setuptools`` internal use only"""
|
|
64
|
+
today = date.today()
|
|
65
|
+
summary = cleandoc(summary).format_map(format_args or {})
|
|
66
|
+
possible_parts = [
|
|
67
|
+
cleandoc(details).format_map(format_args or {}),
|
|
68
|
+
(
|
|
69
|
+
f"\nBy {due_date:%Y-%b-%d}, you need to update your project and remove "
|
|
70
|
+
"deprecated calls\nor your builds will no longer be supported."
|
|
71
|
+
if due_date and due_date > today
|
|
72
|
+
else None
|
|
73
|
+
),
|
|
74
|
+
(
|
|
75
|
+
"\nThis deprecation is overdue, please update your project and remove "
|
|
76
|
+
"deprecated\ncalls to avoid build errors in the future."
|
|
77
|
+
if due_date and due_date < today
|
|
78
|
+
else None
|
|
79
|
+
),
|
|
80
|
+
(f"\nSee {see_url} for details." if see_url else None),
|
|
81
|
+
]
|
|
82
|
+
parts = [x for x in possible_parts if x]
|
|
83
|
+
if parts:
|
|
84
|
+
body = indent(_TEMPLATE.format(details="\n".join(parts)), _INDENT)
|
|
85
|
+
return "\n".join([summary, "!!\n", body, "\n!!"])
|
|
86
|
+
return summary
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class InformationOnly(SetuptoolsWarning):
|
|
90
|
+
"""Currently there is no clear way of displaying messages to the users
|
|
91
|
+
that use the setuptools backend directly via ``pip``.
|
|
92
|
+
The only thing that might work is a warning, although it is not the
|
|
93
|
+
most appropriate tool for the job...
|
|
94
|
+
|
|
95
|
+
See pypa/packaging-problems#558.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class SetuptoolsDeprecationWarning(SetuptoolsWarning):
|
|
100
|
+
"""
|
|
101
|
+
Base class for warning deprecations in ``setuptools``
|
|
102
|
+
|
|
103
|
+
This class is not derived from ``DeprecationWarning``, and as such is
|
|
104
|
+
visible by default.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _should_enforce():
|
|
109
|
+
enforce = os.getenv("SETUPTOOLS_ENFORCE_DEPRECATION", "false").lower()
|
|
110
|
+
return enforce in ("true", "on", "ok", "1")
|