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,361 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import re
|
|
5
|
+
import shlex
|
|
6
|
+
import shutil
|
|
7
|
+
import struct
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
import textwrap
|
|
11
|
+
from collections.abc import Iterable
|
|
12
|
+
from typing import TYPE_CHECKING, TypedDict
|
|
13
|
+
|
|
14
|
+
from ._importlib import metadata, resources
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from typing_extensions import Self
|
|
18
|
+
|
|
19
|
+
from .warnings import SetuptoolsWarning
|
|
20
|
+
|
|
21
|
+
from distutils.command.build_scripts import first_line_re
|
|
22
|
+
from distutils.util import get_platform
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class _SplitArgs(TypedDict, total=False):
|
|
26
|
+
comments: bool
|
|
27
|
+
posix: bool
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CommandSpec(list):
|
|
31
|
+
"""
|
|
32
|
+
A command spec for a #! header, specified as a list of arguments akin to
|
|
33
|
+
those passed to Popen.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
options: list[str] = []
|
|
37
|
+
split_args = _SplitArgs()
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def best(cls):
|
|
41
|
+
"""
|
|
42
|
+
Choose the best CommandSpec class based on environmental conditions.
|
|
43
|
+
"""
|
|
44
|
+
return cls
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def _sys_executable(cls):
|
|
48
|
+
_default = os.path.normpath(sys.executable)
|
|
49
|
+
return os.environ.get('__PYVENV_LAUNCHER__', _default)
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def from_param(cls, param: Self | str | Iterable[str] | None) -> Self:
|
|
53
|
+
"""
|
|
54
|
+
Construct a CommandSpec from a parameter to build_scripts, which may
|
|
55
|
+
be None.
|
|
56
|
+
"""
|
|
57
|
+
if isinstance(param, cls):
|
|
58
|
+
return param
|
|
59
|
+
if isinstance(param, str):
|
|
60
|
+
return cls.from_string(param)
|
|
61
|
+
if isinstance(param, Iterable):
|
|
62
|
+
return cls(param)
|
|
63
|
+
if param is None:
|
|
64
|
+
return cls.from_environment()
|
|
65
|
+
raise TypeError(f"Argument has an unsupported type {type(param)}")
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_environment(cls):
|
|
69
|
+
return cls([cls._sys_executable()])
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_string(cls, string: str) -> Self:
|
|
73
|
+
"""
|
|
74
|
+
Construct a command spec from a simple string representing a command
|
|
75
|
+
line parseable by shlex.split.
|
|
76
|
+
"""
|
|
77
|
+
items = shlex.split(string, **cls.split_args)
|
|
78
|
+
return cls(items)
|
|
79
|
+
|
|
80
|
+
def install_options(self, script_text: str):
|
|
81
|
+
self.options = shlex.split(self._extract_options(script_text))
|
|
82
|
+
cmdline = subprocess.list2cmdline(self)
|
|
83
|
+
if not isascii(cmdline):
|
|
84
|
+
self.options[:0] = ['-x']
|
|
85
|
+
|
|
86
|
+
@staticmethod
|
|
87
|
+
def _extract_options(orig_script):
|
|
88
|
+
"""
|
|
89
|
+
Extract any options from the first line of the script.
|
|
90
|
+
"""
|
|
91
|
+
first = (orig_script + '\n').splitlines()[0]
|
|
92
|
+
match = _first_line_re().match(first)
|
|
93
|
+
options = match.group(1) or '' if match else ''
|
|
94
|
+
return options.strip()
|
|
95
|
+
|
|
96
|
+
def as_header(self):
|
|
97
|
+
return self._render(self + list(self.options))
|
|
98
|
+
|
|
99
|
+
@staticmethod
|
|
100
|
+
def _strip_quotes(item):
|
|
101
|
+
_QUOTES = '"\''
|
|
102
|
+
for q in _QUOTES:
|
|
103
|
+
if item.startswith(q) and item.endswith(q):
|
|
104
|
+
return item[1:-1]
|
|
105
|
+
return item
|
|
106
|
+
|
|
107
|
+
@staticmethod
|
|
108
|
+
def _render(items):
|
|
109
|
+
cmdline = subprocess.list2cmdline(
|
|
110
|
+
CommandSpec._strip_quotes(item.strip()) for item in items
|
|
111
|
+
)
|
|
112
|
+
return '#!' + cmdline + '\n'
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class WindowsCommandSpec(CommandSpec):
|
|
116
|
+
split_args = _SplitArgs(posix=False)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class ScriptWriter:
|
|
120
|
+
"""
|
|
121
|
+
Encapsulates behavior around writing entry point scripts for console and
|
|
122
|
+
gui apps.
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
template = textwrap.dedent(
|
|
126
|
+
r"""
|
|
127
|
+
# EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
|
|
128
|
+
import re
|
|
129
|
+
import sys
|
|
130
|
+
|
|
131
|
+
# for compatibility with easy_install; see #2198
|
|
132
|
+
__requires__ = %(spec)r
|
|
133
|
+
|
|
134
|
+
try:
|
|
135
|
+
from importlib.metadata import distribution
|
|
136
|
+
except ImportError:
|
|
137
|
+
try:
|
|
138
|
+
from importlib_metadata import distribution
|
|
139
|
+
except ImportError:
|
|
140
|
+
from pkg_resources import load_entry_point
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def importlib_load_entry_point(spec, group, name):
|
|
144
|
+
dist_name, _, _ = spec.partition('==')
|
|
145
|
+
matches = (
|
|
146
|
+
entry_point
|
|
147
|
+
for entry_point in distribution(dist_name).entry_points
|
|
148
|
+
if entry_point.group == group and entry_point.name == name
|
|
149
|
+
)
|
|
150
|
+
return next(matches).load()
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
globals().setdefault('load_entry_point', importlib_load_entry_point)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
if __name__ == '__main__':
|
|
157
|
+
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
158
|
+
sys.exit(load_entry_point(%(spec)r, %(group)r, %(name)r)())
|
|
159
|
+
"""
|
|
160
|
+
).lstrip()
|
|
161
|
+
|
|
162
|
+
command_spec_class = CommandSpec
|
|
163
|
+
|
|
164
|
+
@classmethod
|
|
165
|
+
def get_args(cls, dist, header=None):
|
|
166
|
+
"""
|
|
167
|
+
Yield write_script() argument tuples for a distribution's
|
|
168
|
+
console_scripts and gui_scripts entry points.
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
# If distribution is not an importlib.metadata.Distribution, assume
|
|
172
|
+
# it's a pkg_resources.Distribution and transform it.
|
|
173
|
+
if not hasattr(dist, 'entry_points'):
|
|
174
|
+
SetuptoolsWarning.emit("Unsupported distribution encountered.")
|
|
175
|
+
dist = metadata.Distribution.at(dist.egg_info)
|
|
176
|
+
|
|
177
|
+
if header is None:
|
|
178
|
+
header = cls.get_header()
|
|
179
|
+
spec = f'{dist.name}=={dist.version}'
|
|
180
|
+
for type_ in 'console', 'gui':
|
|
181
|
+
group = f'{type_}_scripts'
|
|
182
|
+
for ep in dist.entry_points.select(group=group):
|
|
183
|
+
name = ep.name
|
|
184
|
+
cls._ensure_safe_name(ep.name)
|
|
185
|
+
script_text = cls.template % locals()
|
|
186
|
+
args = cls._get_script_args(type_, ep.name, header, script_text)
|
|
187
|
+
yield from args
|
|
188
|
+
|
|
189
|
+
@staticmethod
|
|
190
|
+
def _ensure_safe_name(name):
|
|
191
|
+
"""
|
|
192
|
+
Prevent paths in *_scripts entry point names.
|
|
193
|
+
"""
|
|
194
|
+
has_path_sep = re.search(r'[\\/]', name)
|
|
195
|
+
if has_path_sep:
|
|
196
|
+
raise ValueError("Path separators not allowed in script names")
|
|
197
|
+
|
|
198
|
+
@classmethod
|
|
199
|
+
def best(cls):
|
|
200
|
+
"""
|
|
201
|
+
Select the best ScriptWriter for this environment.
|
|
202
|
+
"""
|
|
203
|
+
if sys.platform == 'win32' or (os.name == 'java' and os._name == 'nt'):
|
|
204
|
+
return WindowsScriptWriter.best()
|
|
205
|
+
else:
|
|
206
|
+
return cls
|
|
207
|
+
|
|
208
|
+
@classmethod
|
|
209
|
+
def _get_script_args(cls, type_, name, header, script_text):
|
|
210
|
+
# Simply write the stub with no extension.
|
|
211
|
+
yield (name, header + script_text)
|
|
212
|
+
|
|
213
|
+
@classmethod
|
|
214
|
+
def get_header(
|
|
215
|
+
cls,
|
|
216
|
+
script_text: str = "",
|
|
217
|
+
executable: str | CommandSpec | Iterable[str] | None = None,
|
|
218
|
+
) -> str:
|
|
219
|
+
"""Create a #! line, getting options (if any) from script_text"""
|
|
220
|
+
cmd = cls.command_spec_class.best().from_param(executable)
|
|
221
|
+
cmd.install_options(script_text)
|
|
222
|
+
return cmd.as_header()
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class WindowsScriptWriter(ScriptWriter):
|
|
226
|
+
command_spec_class = WindowsCommandSpec
|
|
227
|
+
|
|
228
|
+
@classmethod
|
|
229
|
+
def best(cls):
|
|
230
|
+
"""
|
|
231
|
+
Select the best ScriptWriter suitable for Windows
|
|
232
|
+
"""
|
|
233
|
+
writer_lookup = dict(
|
|
234
|
+
executable=WindowsExecutableLauncherWriter,
|
|
235
|
+
natural=cls,
|
|
236
|
+
)
|
|
237
|
+
# for compatibility, use the executable launcher by default
|
|
238
|
+
launcher = os.environ.get('SETUPTOOLS_LAUNCHER', 'executable')
|
|
239
|
+
return writer_lookup[launcher]
|
|
240
|
+
|
|
241
|
+
@classmethod
|
|
242
|
+
def _get_script_args(cls, type_, name, header, script_text):
|
|
243
|
+
"For Windows, add a .py extension"
|
|
244
|
+
ext = dict(console='.pya', gui='.pyw')[type_]
|
|
245
|
+
if ext not in os.environ['PATHEXT'].lower().split(';'):
|
|
246
|
+
msg = (
|
|
247
|
+
"{ext} not listed in PATHEXT; scripts will not be "
|
|
248
|
+
"recognized as executables."
|
|
249
|
+
).format(**locals())
|
|
250
|
+
SetuptoolsWarning.emit(msg)
|
|
251
|
+
old = ['.pya', '.py', '-script.py', '.pyc', '.pyo', '.pyw', '.exe']
|
|
252
|
+
old.remove(ext)
|
|
253
|
+
header = cls._adjust_header(type_, header)
|
|
254
|
+
blockers = [name + x for x in old]
|
|
255
|
+
yield name + ext, header + script_text, 't', blockers
|
|
256
|
+
|
|
257
|
+
@classmethod
|
|
258
|
+
def _adjust_header(cls, type_, orig_header):
|
|
259
|
+
"""
|
|
260
|
+
Make sure 'pythonw' is used for gui and 'python' is used for
|
|
261
|
+
console (regardless of what sys.executable is).
|
|
262
|
+
"""
|
|
263
|
+
pattern = 'pythonw.exe'
|
|
264
|
+
repl = 'python.exe'
|
|
265
|
+
if type_ == 'gui':
|
|
266
|
+
pattern, repl = repl, pattern
|
|
267
|
+
pattern_ob = re.compile(re.escape(pattern), re.IGNORECASE)
|
|
268
|
+
new_header = pattern_ob.sub(string=orig_header, repl=repl)
|
|
269
|
+
return new_header if cls._use_header(new_header) else orig_header
|
|
270
|
+
|
|
271
|
+
@staticmethod
|
|
272
|
+
def _use_header(new_header):
|
|
273
|
+
"""
|
|
274
|
+
Should _adjust_header use the replaced header?
|
|
275
|
+
|
|
276
|
+
On non-windows systems, always use. On
|
|
277
|
+
Windows systems, only use the replaced header if it resolves
|
|
278
|
+
to an executable on the system.
|
|
279
|
+
"""
|
|
280
|
+
clean_header = new_header[2:-1].strip('"')
|
|
281
|
+
return sys.platform != 'win32' or shutil.which(clean_header)
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
class WindowsExecutableLauncherWriter(WindowsScriptWriter):
|
|
285
|
+
@classmethod
|
|
286
|
+
def _get_script_args(cls, type_, name, header, script_text):
|
|
287
|
+
"""
|
|
288
|
+
For Windows, add a .py extension and an .exe launcher
|
|
289
|
+
"""
|
|
290
|
+
if type_ == 'gui':
|
|
291
|
+
launcher_type = 'gui'
|
|
292
|
+
ext = '-script.pyw'
|
|
293
|
+
old = ['.pyw']
|
|
294
|
+
else:
|
|
295
|
+
launcher_type = 'cli'
|
|
296
|
+
ext = '-script.py'
|
|
297
|
+
old = ['.py', '.pyc', '.pyo']
|
|
298
|
+
hdr = cls._adjust_header(type_, header)
|
|
299
|
+
blockers = [name + x for x in old]
|
|
300
|
+
yield (name + ext, hdr + script_text, 't', blockers)
|
|
301
|
+
yield (
|
|
302
|
+
name + '.exe',
|
|
303
|
+
get_win_launcher(launcher_type),
|
|
304
|
+
'b', # write in binary mode
|
|
305
|
+
)
|
|
306
|
+
if not is_64bit():
|
|
307
|
+
# install a manifest for the launcher to prevent Windows
|
|
308
|
+
# from detecting it as an installer (which it will for
|
|
309
|
+
# launchers like easy_install.exe). Consider only
|
|
310
|
+
# adding a manifest for launchers detected as installers.
|
|
311
|
+
# See Distribute #143 for details.
|
|
312
|
+
m_name = name + '.exe.manifest'
|
|
313
|
+
yield (m_name, load_launcher_manifest(name), 't')
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def get_win_launcher(type):
|
|
317
|
+
"""
|
|
318
|
+
Load the Windows launcher (executable) suitable for launching a script.
|
|
319
|
+
|
|
320
|
+
`type` should be either 'cli' or 'gui'
|
|
321
|
+
|
|
322
|
+
Returns the executable as a byte string.
|
|
323
|
+
"""
|
|
324
|
+
launcher_fn = f'{type}.exe'
|
|
325
|
+
if is_64bit():
|
|
326
|
+
if get_platform() == "win-arm64":
|
|
327
|
+
launcher_fn = launcher_fn.replace(".", "-arm64.")
|
|
328
|
+
else:
|
|
329
|
+
launcher_fn = launcher_fn.replace(".", "-64.")
|
|
330
|
+
else:
|
|
331
|
+
launcher_fn = launcher_fn.replace(".", "-32.")
|
|
332
|
+
return resources.files('setuptools').joinpath(launcher_fn).read_bytes()
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def load_launcher_manifest(name):
|
|
336
|
+
res = resources.files(__name__).joinpath('launcher manifest.xml')
|
|
337
|
+
return res.read_text(encoding='utf-8') % vars()
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
def _first_line_re():
|
|
341
|
+
"""
|
|
342
|
+
Return a regular expression based on first_line_re suitable for matching
|
|
343
|
+
strings.
|
|
344
|
+
"""
|
|
345
|
+
if isinstance(first_line_re.pattern, str):
|
|
346
|
+
return first_line_re
|
|
347
|
+
|
|
348
|
+
# first_line_re in Python >=3.1.4 and >=3.2.1 is a bytes pattern.
|
|
349
|
+
return re.compile(first_line_re.pattern.decode())
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def is_64bit():
|
|
353
|
+
return struct.calcsize("P") == 8
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
def isascii(s):
|
|
357
|
+
try:
|
|
358
|
+
s.encode('ascii')
|
|
359
|
+
except UnicodeError:
|
|
360
|
+
return False
|
|
361
|
+
return True
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Convenience layer on top of stdlib's shutil and os"""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import stat
|
|
5
|
+
from typing import Callable, TypeVar
|
|
6
|
+
|
|
7
|
+
from .compat import py311
|
|
8
|
+
|
|
9
|
+
from distutils import log
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
from os import chmod # pyright: ignore[reportAssignmentType]
|
|
13
|
+
# Losing type-safety w/ pyright, but that's ok
|
|
14
|
+
except ImportError: # pragma: no cover
|
|
15
|
+
# Jython compatibility
|
|
16
|
+
def chmod(*args: object, **kwargs: object) -> None: # type: ignore[misc] # Mypy reuses the imported definition anyway
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
_T = TypeVar("_T")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def attempt_chmod_verbose(path, mode):
|
|
24
|
+
log.debug("changing mode of %s to %o", path, mode)
|
|
25
|
+
try:
|
|
26
|
+
chmod(path, mode)
|
|
27
|
+
except OSError as e: # pragma: no cover
|
|
28
|
+
log.debug("chmod failed: %s", e)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# Must match shutil._OnExcCallback
|
|
32
|
+
def _auto_chmod(
|
|
33
|
+
func: Callable[..., _T], arg: str, exc: BaseException
|
|
34
|
+
) -> _T: # pragma: no cover
|
|
35
|
+
"""shutils onexc callback to automatically call chmod for certain functions."""
|
|
36
|
+
# Only retry for scenarios known to have an issue
|
|
37
|
+
if func in [os.unlink, os.remove] and os.name == 'nt':
|
|
38
|
+
attempt_chmod_verbose(arg, stat.S_IWRITE)
|
|
39
|
+
return func(arg)
|
|
40
|
+
raise exc
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def rmtree(path, ignore_errors=False, onexc=_auto_chmod):
|
|
44
|
+
"""
|
|
45
|
+
Similar to ``shutil.rmtree`` but automatically executes ``chmod``
|
|
46
|
+
for well know Windows failure scenarios.
|
|
47
|
+
"""
|
|
48
|
+
return py311.shutil_rmtree(path, ignore_errors, onexc)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def rmdir(path, **opts):
|
|
52
|
+
if os.path.isdir(path):
|
|
53
|
+
rmtree(path, **opts)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def current_umask():
|
|
57
|
+
tmp = os.umask(0o022)
|
|
58
|
+
os.umask(tmp)
|
|
59
|
+
return tmp
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
from functools import wraps
|
|
2
|
+
from typing import TypeVar
|
|
3
|
+
|
|
4
|
+
import packaging.specifiers
|
|
5
|
+
|
|
6
|
+
from .warnings import SetuptoolsDeprecationWarning
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Static:
|
|
10
|
+
"""
|
|
11
|
+
Wrapper for built-in object types that are allow setuptools to identify
|
|
12
|
+
static core metadata (in opposition to ``Dynamic``, as defined :pep:`643`).
|
|
13
|
+
|
|
14
|
+
The trick is to mark values with :class:`Static` when they come from
|
|
15
|
+
``pyproject.toml`` or ``setup.cfg``, so if any plugin overwrite the value
|
|
16
|
+
with a built-in, setuptools will be able to recognise the change.
|
|
17
|
+
|
|
18
|
+
We inherit from built-in classes, so that we don't need to change the existing
|
|
19
|
+
code base to deal with the new types.
|
|
20
|
+
We also should strive for immutability objects to avoid changes after the
|
|
21
|
+
initial parsing.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
_mutated_: bool = False # TODO: Remove after deprecation warning is solved
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _prevent_modification(target: type, method: str, copying: str) -> None:
|
|
28
|
+
"""
|
|
29
|
+
Because setuptools is very flexible we cannot fully prevent
|
|
30
|
+
plugins and user customizations from modifying static values that were
|
|
31
|
+
parsed from config files.
|
|
32
|
+
But we can attempt to block "in-place" mutations and identify when they
|
|
33
|
+
were done.
|
|
34
|
+
"""
|
|
35
|
+
fn = getattr(target, method, None)
|
|
36
|
+
if fn is None:
|
|
37
|
+
return
|
|
38
|
+
|
|
39
|
+
@wraps(fn)
|
|
40
|
+
def _replacement(self: Static, *args, **kwargs):
|
|
41
|
+
# TODO: After deprecation period raise NotImplementedError instead of warning
|
|
42
|
+
# which obviated the existence and checks of the `_mutated_` attribute.
|
|
43
|
+
self._mutated_ = True
|
|
44
|
+
SetuptoolsDeprecationWarning.emit(
|
|
45
|
+
"Direct modification of value will be disallowed",
|
|
46
|
+
f"""
|
|
47
|
+
In an effort to implement PEP 643, direct/in-place changes of static values
|
|
48
|
+
that come from configuration files are deprecated.
|
|
49
|
+
If you need to modify this value, please first create a copy with {copying}
|
|
50
|
+
and make sure conform to all relevant standards when overriding setuptools
|
|
51
|
+
functionality (https://packaging.python.org/en/latest/specifications/).
|
|
52
|
+
""",
|
|
53
|
+
due_date=(2025, 10, 10), # Initially introduced in 2024-09-06
|
|
54
|
+
)
|
|
55
|
+
return fn(self, *args, **kwargs)
|
|
56
|
+
|
|
57
|
+
_replacement.__doc__ = "" # otherwise doctest may fail.
|
|
58
|
+
setattr(target, method, _replacement)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class Str(str, Static):
|
|
62
|
+
pass
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class Tuple(tuple, Static):
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class List(list, Static):
|
|
70
|
+
"""
|
|
71
|
+
:meta private:
|
|
72
|
+
>>> x = List([1, 2, 3])
|
|
73
|
+
>>> is_static(x)
|
|
74
|
+
True
|
|
75
|
+
>>> x += [0] # doctest: +IGNORE_EXCEPTION_DETAIL
|
|
76
|
+
Traceback (most recent call last):
|
|
77
|
+
SetuptoolsDeprecationWarning: Direct modification ...
|
|
78
|
+
>>> is_static(x) # no longer static after modification
|
|
79
|
+
False
|
|
80
|
+
>>> y = list(x)
|
|
81
|
+
>>> y.clear()
|
|
82
|
+
>>> y
|
|
83
|
+
[]
|
|
84
|
+
>>> y == x
|
|
85
|
+
False
|
|
86
|
+
>>> is_static(List(y))
|
|
87
|
+
True
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# Make `List` immutable-ish
|
|
92
|
+
# (certain places of setuptools/distutils issue a warn if we use tuple instead of list)
|
|
93
|
+
for _method in (
|
|
94
|
+
'__delitem__',
|
|
95
|
+
'__iadd__',
|
|
96
|
+
'__setitem__',
|
|
97
|
+
'append',
|
|
98
|
+
'clear',
|
|
99
|
+
'extend',
|
|
100
|
+
'insert',
|
|
101
|
+
'remove',
|
|
102
|
+
'reverse',
|
|
103
|
+
'pop',
|
|
104
|
+
):
|
|
105
|
+
_prevent_modification(List, _method, "`list(value)`")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class Dict(dict, Static):
|
|
109
|
+
"""
|
|
110
|
+
:meta private:
|
|
111
|
+
>>> x = Dict({'a': 1, 'b': 2})
|
|
112
|
+
>>> is_static(x)
|
|
113
|
+
True
|
|
114
|
+
>>> x['c'] = 0 # doctest: +IGNORE_EXCEPTION_DETAIL
|
|
115
|
+
Traceback (most recent call last):
|
|
116
|
+
SetuptoolsDeprecationWarning: Direct modification ...
|
|
117
|
+
>>> x._mutated_
|
|
118
|
+
True
|
|
119
|
+
>>> is_static(x) # no longer static after modification
|
|
120
|
+
False
|
|
121
|
+
>>> y = dict(x)
|
|
122
|
+
>>> y.popitem()
|
|
123
|
+
('b', 2)
|
|
124
|
+
>>> y == x
|
|
125
|
+
False
|
|
126
|
+
>>> is_static(Dict(y))
|
|
127
|
+
True
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# Make `Dict` immutable-ish (we cannot inherit from types.MappingProxyType):
|
|
132
|
+
for _method in (
|
|
133
|
+
'__delitem__',
|
|
134
|
+
'__ior__',
|
|
135
|
+
'__setitem__',
|
|
136
|
+
'clear',
|
|
137
|
+
'pop',
|
|
138
|
+
'popitem',
|
|
139
|
+
'setdefault',
|
|
140
|
+
'update',
|
|
141
|
+
):
|
|
142
|
+
_prevent_modification(Dict, _method, "`dict(value)`")
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class SpecifierSet(packaging.specifiers.SpecifierSet, Static):
|
|
146
|
+
"""Not exactly a built-in type but useful for ``requires-python``"""
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
T = TypeVar("T")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def noop(value: T) -> T:
|
|
153
|
+
"""
|
|
154
|
+
>>> noop(42)
|
|
155
|
+
42
|
|
156
|
+
"""
|
|
157
|
+
return value
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
_CONVERSIONS = {str: Str, tuple: Tuple, list: List, dict: Dict}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def attempt_conversion(value: T) -> T:
|
|
164
|
+
"""
|
|
165
|
+
>>> is_static(attempt_conversion("hello"))
|
|
166
|
+
True
|
|
167
|
+
>>> is_static(object())
|
|
168
|
+
False
|
|
169
|
+
"""
|
|
170
|
+
return _CONVERSIONS.get(type(value), noop)(value) # type: ignore[call-overload]
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def is_static(value: object) -> bool:
|
|
174
|
+
"""
|
|
175
|
+
>>> is_static(a := Dict({'a': 1}))
|
|
176
|
+
True
|
|
177
|
+
>>> is_static(dict(a))
|
|
178
|
+
False
|
|
179
|
+
>>> is_static(b := List([1, 2, 3]))
|
|
180
|
+
True
|
|
181
|
+
>>> is_static(list(b))
|
|
182
|
+
False
|
|
183
|
+
"""
|
|
184
|
+
return isinstance(value, Static) and not value._mutated_
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
EMPTY_LIST = List()
|
|
188
|
+
EMPTY_DICT = Dict()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Copyright 2014-2016 Nathan West
|
|
2
|
+
#
|
|
3
|
+
# This file is part of autocommand.
|
|
4
|
+
#
|
|
5
|
+
# autocommand is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# autocommand is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with autocommand. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
# flake8 flags all these imports as unused, hence the NOQAs everywhere.
|
|
19
|
+
|
|
20
|
+
from .automain import automain # NOQA
|
|
21
|
+
from .autoparse import autoparse, smart_open # NOQA
|
|
22
|
+
from .autocommand import autocommand # NOQA
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
from .autoasync import autoasync # NOQA
|
|
26
|
+
except ImportError: # pragma: no cover
|
|
27
|
+
pass
|