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,248 @@
|
|
|
1
|
+
"""Extensions to the 'distutils' for large or complex distributions"""
|
|
2
|
+
# mypy: disable_error_code=override
|
|
3
|
+
# Command.reinitialize_command has an extra **kw param that distutils doesn't have
|
|
4
|
+
# Can't disable on the exact line because distutils doesn't exists on Python 3.12
|
|
5
|
+
# and mypy isn't aware of distutils_hack, causing distutils.core.Command to be Any,
|
|
6
|
+
# and a [unused-ignore] to be raised on 3.12+
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import functools
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
from abc import abstractmethod
|
|
14
|
+
from collections.abc import Mapping
|
|
15
|
+
from typing import TYPE_CHECKING, TypeVar, overload
|
|
16
|
+
|
|
17
|
+
sys.path.extend(((vendor_path := os.path.join(os.path.dirname(os.path.dirname(__file__)), 'setuptools', '_vendor')) not in sys.path) * [vendor_path]) # fmt: skip
|
|
18
|
+
# workaround for #4476
|
|
19
|
+
sys.modules.pop('backports', None)
|
|
20
|
+
|
|
21
|
+
import _distutils_hack.override # noqa: F401
|
|
22
|
+
|
|
23
|
+
from . import logging, monkey
|
|
24
|
+
from .depends import Require
|
|
25
|
+
from .discovery import PackageFinder, PEP420PackageFinder
|
|
26
|
+
from .dist import Distribution
|
|
27
|
+
from .extension import Extension
|
|
28
|
+
from .version import __version__ as __version__
|
|
29
|
+
from .warnings import SetuptoolsDeprecationWarning
|
|
30
|
+
|
|
31
|
+
import distutils.core
|
|
32
|
+
|
|
33
|
+
__all__ = [
|
|
34
|
+
'setup',
|
|
35
|
+
'Distribution',
|
|
36
|
+
'Command',
|
|
37
|
+
'Extension',
|
|
38
|
+
'Require',
|
|
39
|
+
'SetuptoolsDeprecationWarning',
|
|
40
|
+
'find_packages',
|
|
41
|
+
'find_namespace_packages',
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
_CommandT = TypeVar("_CommandT", bound="_Command")
|
|
45
|
+
|
|
46
|
+
bootstrap_install_from = None
|
|
47
|
+
|
|
48
|
+
find_packages = PackageFinder.find
|
|
49
|
+
find_namespace_packages = PEP420PackageFinder.find
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _install_setup_requires(attrs):
|
|
53
|
+
# Note: do not use `setuptools.Distribution` directly, as
|
|
54
|
+
# our PEP 517 backend patch `distutils.core.Distribution`.
|
|
55
|
+
class MinimalDistribution(distutils.core.Distribution):
|
|
56
|
+
"""
|
|
57
|
+
A minimal version of a distribution for supporting the
|
|
58
|
+
fetch_build_eggs interface.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def __init__(self, attrs: Mapping[str, object]) -> None:
|
|
62
|
+
_incl = 'dependency_links', 'setup_requires'
|
|
63
|
+
filtered = {k: attrs[k] for k in set(_incl) & set(attrs)}
|
|
64
|
+
super().__init__(filtered)
|
|
65
|
+
# Prevent accidentally triggering discovery with incomplete set of attrs
|
|
66
|
+
self.set_defaults._disable()
|
|
67
|
+
|
|
68
|
+
def _get_project_config_files(self, filenames=None):
|
|
69
|
+
"""Ignore ``pyproject.toml``, they are not related to setup_requires"""
|
|
70
|
+
try:
|
|
71
|
+
cfg, _toml = super()._split_standard_project_metadata(filenames)
|
|
72
|
+
except Exception:
|
|
73
|
+
return filenames, ()
|
|
74
|
+
return cfg, ()
|
|
75
|
+
|
|
76
|
+
def finalize_options(self):
|
|
77
|
+
"""
|
|
78
|
+
Disable finalize_options to avoid building the working set.
|
|
79
|
+
Ref #2158.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
dist = MinimalDistribution(attrs)
|
|
83
|
+
|
|
84
|
+
# Honor setup.cfg's options.
|
|
85
|
+
dist.parse_config_files(ignore_option_errors=True)
|
|
86
|
+
if dist.setup_requires:
|
|
87
|
+
_fetch_build_eggs(dist)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _fetch_build_eggs(dist: Distribution):
|
|
91
|
+
try:
|
|
92
|
+
dist.fetch_build_eggs(dist.setup_requires)
|
|
93
|
+
except Exception as ex:
|
|
94
|
+
msg = """
|
|
95
|
+
It is possible a package already installed in your system
|
|
96
|
+
contains an version that is invalid according to PEP 440.
|
|
97
|
+
You can try `pip install --use-pep517` as a workaround for this problem,
|
|
98
|
+
or rely on a new virtual environment.
|
|
99
|
+
|
|
100
|
+
If the problem refers to a package that is not installed yet,
|
|
101
|
+
please contact that package's maintainers or distributors.
|
|
102
|
+
"""
|
|
103
|
+
if "InvalidVersion" in ex.__class__.__name__:
|
|
104
|
+
if hasattr(ex, "add_note"):
|
|
105
|
+
ex.add_note(msg) # PEP 678
|
|
106
|
+
else:
|
|
107
|
+
dist.announce(f"\n{msg}\n")
|
|
108
|
+
raise
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def setup(**attrs):
|
|
112
|
+
logging.configure()
|
|
113
|
+
# Make sure we have any requirements needed to interpret 'attrs'.
|
|
114
|
+
_install_setup_requires(attrs)
|
|
115
|
+
return distutils.core.setup(**attrs)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
setup.__doc__ = distutils.core.setup.__doc__
|
|
119
|
+
|
|
120
|
+
if TYPE_CHECKING:
|
|
121
|
+
# Work around a mypy issue where type[T] can't be used as a base: https://github.com/python/mypy/issues/10962
|
|
122
|
+
from distutils.core import Command as _Command
|
|
123
|
+
else:
|
|
124
|
+
_Command = monkey.get_unpatched(distutils.core.Command)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class Command(_Command):
|
|
128
|
+
"""
|
|
129
|
+
Setuptools internal actions are organized using a *command design pattern*.
|
|
130
|
+
This means that each action (or group of closely related actions) executed during
|
|
131
|
+
the build should be implemented as a ``Command`` subclass.
|
|
132
|
+
|
|
133
|
+
These commands are abstractions and do not necessarily correspond to a command that
|
|
134
|
+
can (or should) be executed via a terminal, in a CLI fashion (although historically
|
|
135
|
+
they would).
|
|
136
|
+
|
|
137
|
+
When creating a new command from scratch, custom defined classes **SHOULD** inherit
|
|
138
|
+
from ``setuptools.Command`` and implement a few mandatory methods.
|
|
139
|
+
Between these mandatory methods, are listed:
|
|
140
|
+
:meth:`initialize_options`, :meth:`finalize_options` and :meth:`run`.
|
|
141
|
+
|
|
142
|
+
A useful analogy for command classes is to think of them as subroutines with local
|
|
143
|
+
variables called "options". The options are "declared" in :meth:`initialize_options`
|
|
144
|
+
and "defined" (given their final values, aka "finalized") in :meth:`finalize_options`,
|
|
145
|
+
both of which must be defined by every command class. The "body" of the subroutine,
|
|
146
|
+
(where it does all the work) is the :meth:`run` method.
|
|
147
|
+
Between :meth:`initialize_options` and :meth:`finalize_options`, ``setuptools`` may set
|
|
148
|
+
the values for options/attributes based on user's input (or circumstance),
|
|
149
|
+
which means that the implementation should be careful to not overwrite values in
|
|
150
|
+
:meth:`finalize_options` unless necessary.
|
|
151
|
+
|
|
152
|
+
Please note that other commands (or other parts of setuptools) may also overwrite
|
|
153
|
+
the values of the command's options/attributes multiple times during the build
|
|
154
|
+
process.
|
|
155
|
+
Therefore it is important to consistently implement :meth:`initialize_options` and
|
|
156
|
+
:meth:`finalize_options`. For example, all derived attributes (or attributes that
|
|
157
|
+
depend on the value of other attributes) **SHOULD** be recomputed in
|
|
158
|
+
:meth:`finalize_options`.
|
|
159
|
+
|
|
160
|
+
When overwriting existing commands, custom defined classes **MUST** abide by the
|
|
161
|
+
same APIs implemented by the original class. They also **SHOULD** inherit from the
|
|
162
|
+
original class.
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
command_consumes_arguments = False
|
|
166
|
+
distribution: Distribution # override distutils.dist.Distribution with setuptools.dist.Distribution
|
|
167
|
+
|
|
168
|
+
def __init__(self, dist: Distribution, **kw) -> None:
|
|
169
|
+
"""
|
|
170
|
+
Construct the command for dist, updating
|
|
171
|
+
vars(self) with any keyword parameters.
|
|
172
|
+
"""
|
|
173
|
+
super().__init__(dist)
|
|
174
|
+
vars(self).update(kw)
|
|
175
|
+
|
|
176
|
+
@overload
|
|
177
|
+
def reinitialize_command(
|
|
178
|
+
self, command: str, reinit_subcommands: bool = False, **kw
|
|
179
|
+
) -> _Command: ...
|
|
180
|
+
@overload
|
|
181
|
+
def reinitialize_command(
|
|
182
|
+
self, command: _CommandT, reinit_subcommands: bool = False, **kw
|
|
183
|
+
) -> _CommandT: ...
|
|
184
|
+
def reinitialize_command(
|
|
185
|
+
self, command: str | _Command, reinit_subcommands: bool = False, **kw
|
|
186
|
+
) -> _Command:
|
|
187
|
+
cmd = _Command.reinitialize_command(self, command, reinit_subcommands)
|
|
188
|
+
vars(cmd).update(kw)
|
|
189
|
+
return cmd # pyright: ignore[reportReturnType] # pypa/distutils#307
|
|
190
|
+
|
|
191
|
+
@abstractmethod
|
|
192
|
+
def initialize_options(self) -> None:
|
|
193
|
+
"""
|
|
194
|
+
Set or (reset) all options/attributes/caches used by the command
|
|
195
|
+
to their default values. Note that these values may be overwritten during
|
|
196
|
+
the build.
|
|
197
|
+
"""
|
|
198
|
+
raise NotImplementedError
|
|
199
|
+
|
|
200
|
+
@abstractmethod
|
|
201
|
+
def finalize_options(self) -> None:
|
|
202
|
+
"""
|
|
203
|
+
Set final values for all options/attributes used by the command.
|
|
204
|
+
Most of the time, each option/attribute/cache should only be set if it does not
|
|
205
|
+
have any value yet (e.g. ``if self.attr is None: self.attr = val``).
|
|
206
|
+
"""
|
|
207
|
+
raise NotImplementedError
|
|
208
|
+
|
|
209
|
+
@abstractmethod
|
|
210
|
+
def run(self) -> None:
|
|
211
|
+
"""
|
|
212
|
+
Execute the actions intended by the command.
|
|
213
|
+
(Side effects **SHOULD** only take place when :meth:`run` is executed,
|
|
214
|
+
for example, creating new files or writing to the terminal output).
|
|
215
|
+
"""
|
|
216
|
+
raise NotImplementedError
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def _find_all_simple(path):
|
|
220
|
+
"""
|
|
221
|
+
Find all files under 'path'
|
|
222
|
+
"""
|
|
223
|
+
results = (
|
|
224
|
+
os.path.join(base, file)
|
|
225
|
+
for base, dirs, files in os.walk(path, followlinks=True)
|
|
226
|
+
for file in files
|
|
227
|
+
)
|
|
228
|
+
return filter(os.path.isfile, results)
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def findall(dir=os.curdir):
|
|
232
|
+
"""
|
|
233
|
+
Find all files under 'dir' and return the list of full filenames.
|
|
234
|
+
Unless dir is '.', return full filenames with dir prepended.
|
|
235
|
+
"""
|
|
236
|
+
files = _find_all_simple(dir)
|
|
237
|
+
if dir == os.curdir:
|
|
238
|
+
make_rel = functools.partial(os.path.relpath, start=dir)
|
|
239
|
+
files = map(make_rel, files)
|
|
240
|
+
return list(files)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
class sic(str):
|
|
244
|
+
"""Treat this string as-is (https://en.wikipedia.org/wiki/Sic)"""
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
# Apply monkey patches
|
|
248
|
+
monkey.patch_all()
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Handling of Core Metadata for Python packages (including reading and writing).
|
|
3
|
+
|
|
4
|
+
See: https://packaging.python.org/en/latest/specifications/core-metadata/
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
import stat
|
|
11
|
+
import textwrap
|
|
12
|
+
from email import message_from_file
|
|
13
|
+
from email.message import Message
|
|
14
|
+
from tempfile import NamedTemporaryFile
|
|
15
|
+
|
|
16
|
+
from packaging.markers import Marker
|
|
17
|
+
from packaging.requirements import Requirement
|
|
18
|
+
from packaging.utils import canonicalize_name, canonicalize_version
|
|
19
|
+
from packaging.version import Version
|
|
20
|
+
|
|
21
|
+
from . import _normalization, _reqs
|
|
22
|
+
from ._static import is_static
|
|
23
|
+
from .warnings import SetuptoolsDeprecationWarning
|
|
24
|
+
|
|
25
|
+
from distutils.util import rfc822_escape
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_metadata_version(self):
|
|
29
|
+
mv = getattr(self, 'metadata_version', None)
|
|
30
|
+
if mv is None:
|
|
31
|
+
mv = Version('2.4')
|
|
32
|
+
self.metadata_version = mv
|
|
33
|
+
return mv
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def rfc822_unescape(content: str) -> str:
|
|
37
|
+
"""Reverse RFC-822 escaping by removing leading whitespaces from content."""
|
|
38
|
+
lines = content.splitlines()
|
|
39
|
+
if len(lines) == 1:
|
|
40
|
+
return lines[0].lstrip()
|
|
41
|
+
return '\n'.join((lines[0].lstrip(), textwrap.dedent('\n'.join(lines[1:]))))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _read_field_from_msg(msg: Message, field: str) -> str | None:
|
|
45
|
+
"""Read Message header field."""
|
|
46
|
+
value = msg[field]
|
|
47
|
+
if value == 'UNKNOWN':
|
|
48
|
+
return None
|
|
49
|
+
return value
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _read_field_unescaped_from_msg(msg: Message, field: str) -> str | None:
|
|
53
|
+
"""Read Message header field and apply rfc822_unescape."""
|
|
54
|
+
value = _read_field_from_msg(msg, field)
|
|
55
|
+
if value is None:
|
|
56
|
+
return value
|
|
57
|
+
return rfc822_unescape(value)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _read_list_from_msg(msg: Message, field: str) -> list[str] | None:
|
|
61
|
+
"""Read Message header field and return all results as list."""
|
|
62
|
+
values = msg.get_all(field, None)
|
|
63
|
+
if values == []:
|
|
64
|
+
return None
|
|
65
|
+
return values
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _read_payload_from_msg(msg: Message) -> str | None:
|
|
69
|
+
value = str(msg.get_payload()).strip()
|
|
70
|
+
if value == 'UNKNOWN' or not value:
|
|
71
|
+
return None
|
|
72
|
+
return value
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def read_pkg_file(self, file):
|
|
76
|
+
"""Reads the metadata values from a file object."""
|
|
77
|
+
msg = message_from_file(file)
|
|
78
|
+
|
|
79
|
+
self.metadata_version = Version(msg['metadata-version'])
|
|
80
|
+
self.name = _read_field_from_msg(msg, 'name')
|
|
81
|
+
self.version = _read_field_from_msg(msg, 'version')
|
|
82
|
+
self.description = _read_field_from_msg(msg, 'summary')
|
|
83
|
+
# we are filling author only.
|
|
84
|
+
self.author = _read_field_from_msg(msg, 'author')
|
|
85
|
+
self.maintainer = None
|
|
86
|
+
self.author_email = _read_field_from_msg(msg, 'author-email')
|
|
87
|
+
self.maintainer_email = None
|
|
88
|
+
self.url = _read_field_from_msg(msg, 'home-page')
|
|
89
|
+
self.download_url = _read_field_from_msg(msg, 'download-url')
|
|
90
|
+
self.license = _read_field_unescaped_from_msg(msg, 'license')
|
|
91
|
+
self.license_expression = _read_field_unescaped_from_msg(msg, 'license-expression')
|
|
92
|
+
|
|
93
|
+
self.long_description = _read_field_unescaped_from_msg(msg, 'description')
|
|
94
|
+
if self.long_description is None and self.metadata_version >= Version('2.1'):
|
|
95
|
+
self.long_description = _read_payload_from_msg(msg)
|
|
96
|
+
self.description = _read_field_from_msg(msg, 'summary')
|
|
97
|
+
|
|
98
|
+
if 'keywords' in msg:
|
|
99
|
+
self.keywords = _read_field_from_msg(msg, 'keywords').split(',')
|
|
100
|
+
|
|
101
|
+
self.platforms = _read_list_from_msg(msg, 'platform')
|
|
102
|
+
self.classifiers = _read_list_from_msg(msg, 'classifier')
|
|
103
|
+
|
|
104
|
+
# PEP 314 - these fields only exist in 1.1
|
|
105
|
+
if self.metadata_version == Version('1.1'):
|
|
106
|
+
self.requires = _read_list_from_msg(msg, 'requires')
|
|
107
|
+
self.provides = _read_list_from_msg(msg, 'provides')
|
|
108
|
+
self.obsoletes = _read_list_from_msg(msg, 'obsoletes')
|
|
109
|
+
else:
|
|
110
|
+
self.requires = None
|
|
111
|
+
self.provides = None
|
|
112
|
+
self.obsoletes = None
|
|
113
|
+
|
|
114
|
+
self.license_files = _read_list_from_msg(msg, 'license-file')
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def single_line(val):
|
|
118
|
+
"""
|
|
119
|
+
Quick and dirty validation for Summary pypa/setuptools#1390.
|
|
120
|
+
"""
|
|
121
|
+
if '\n' in val:
|
|
122
|
+
# TODO: Replace with `raise ValueError("newlines not allowed")`
|
|
123
|
+
# after reviewing #2893.
|
|
124
|
+
msg = "newlines are not allowed in `summary` and will break in the future"
|
|
125
|
+
SetuptoolsDeprecationWarning.emit("Invalid config.", msg)
|
|
126
|
+
# due_date is undefined. Controversial change, there was a lot of push back.
|
|
127
|
+
val = val.strip().split('\n')[0]
|
|
128
|
+
return val
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def write_pkg_info(self, base_dir):
|
|
132
|
+
"""Write the PKG-INFO file into the release tree."""
|
|
133
|
+
temp = ""
|
|
134
|
+
final = os.path.join(base_dir, 'PKG-INFO')
|
|
135
|
+
try:
|
|
136
|
+
# Use a temporary file while writing to avoid race conditions
|
|
137
|
+
# (e.g. `importlib.metadata` reading `.egg-info/PKG-INFO`):
|
|
138
|
+
with NamedTemporaryFile("w", encoding="utf-8", dir=base_dir, delete=False) as f:
|
|
139
|
+
temp = f.name
|
|
140
|
+
self.write_pkg_file(f)
|
|
141
|
+
permissions = stat.S_IMODE(os.lstat(temp).st_mode)
|
|
142
|
+
os.chmod(temp, permissions | stat.S_IRGRP | stat.S_IROTH)
|
|
143
|
+
os.replace(temp, final) # atomic operation.
|
|
144
|
+
finally:
|
|
145
|
+
if temp and os.path.exists(temp):
|
|
146
|
+
os.remove(temp)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
# Based on Python 3.5 version
|
|
150
|
+
def write_pkg_file(self, file): # noqa: C901 # is too complex (14) # FIXME
|
|
151
|
+
"""Write the PKG-INFO format data to a file object."""
|
|
152
|
+
version = self.get_metadata_version()
|
|
153
|
+
|
|
154
|
+
def write_field(key, value):
|
|
155
|
+
file.write(f"{key}: {value}\n")
|
|
156
|
+
|
|
157
|
+
write_field('Metadata-Version', str(version))
|
|
158
|
+
write_field('Name', self.get_name())
|
|
159
|
+
write_field('Version', self.get_version())
|
|
160
|
+
|
|
161
|
+
summary = self.get_description()
|
|
162
|
+
if summary:
|
|
163
|
+
write_field('Summary', single_line(summary))
|
|
164
|
+
|
|
165
|
+
optional_fields = (
|
|
166
|
+
('Home-page', 'url'),
|
|
167
|
+
('Download-URL', 'download_url'),
|
|
168
|
+
('Author', 'author'),
|
|
169
|
+
('Author-email', 'author_email'),
|
|
170
|
+
('Maintainer', 'maintainer'),
|
|
171
|
+
('Maintainer-email', 'maintainer_email'),
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
for field, attr in optional_fields:
|
|
175
|
+
attr_val = getattr(self, attr, None)
|
|
176
|
+
if attr_val is not None:
|
|
177
|
+
write_field(field, attr_val)
|
|
178
|
+
|
|
179
|
+
if license_expression := self.license_expression:
|
|
180
|
+
write_field('License-Expression', license_expression)
|
|
181
|
+
elif license := self.get_license():
|
|
182
|
+
write_field('License', rfc822_escape(license))
|
|
183
|
+
|
|
184
|
+
for label, url in self.project_urls.items():
|
|
185
|
+
write_field('Project-URL', f'{label}, {url}')
|
|
186
|
+
|
|
187
|
+
keywords = ','.join(self.get_keywords())
|
|
188
|
+
if keywords:
|
|
189
|
+
write_field('Keywords', keywords)
|
|
190
|
+
|
|
191
|
+
platforms = self.get_platforms() or []
|
|
192
|
+
for platform in platforms:
|
|
193
|
+
write_field('Platform', platform)
|
|
194
|
+
|
|
195
|
+
self._write_list(file, 'Classifier', self.get_classifiers())
|
|
196
|
+
|
|
197
|
+
# PEP 314
|
|
198
|
+
self._write_list(file, 'Requires', self.get_requires())
|
|
199
|
+
self._write_list(file, 'Provides', self.get_provides())
|
|
200
|
+
self._write_list(file, 'Obsoletes', self.get_obsoletes())
|
|
201
|
+
|
|
202
|
+
# Setuptools specific for PEP 345
|
|
203
|
+
if hasattr(self, 'python_requires'):
|
|
204
|
+
write_field('Requires-Python', self.python_requires)
|
|
205
|
+
|
|
206
|
+
# PEP 566
|
|
207
|
+
if self.long_description_content_type:
|
|
208
|
+
write_field('Description-Content-Type', self.long_description_content_type)
|
|
209
|
+
|
|
210
|
+
safe_license_files = map(_safe_license_file, self.license_files or [])
|
|
211
|
+
self._write_list(file, 'License-File', safe_license_files)
|
|
212
|
+
_write_requirements(self, file)
|
|
213
|
+
|
|
214
|
+
for field, attr in _POSSIBLE_DYNAMIC_FIELDS.items():
|
|
215
|
+
if (val := getattr(self, attr, None)) and not is_static(val):
|
|
216
|
+
write_field('Dynamic', field)
|
|
217
|
+
|
|
218
|
+
long_description = self.get_long_description()
|
|
219
|
+
if long_description:
|
|
220
|
+
file.write(f"\n{long_description}")
|
|
221
|
+
if not long_description.endswith("\n"):
|
|
222
|
+
file.write("\n")
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def _write_requirements(self, file):
|
|
226
|
+
for req in _reqs.parse(self.install_requires):
|
|
227
|
+
file.write(f"Requires-Dist: {req}\n")
|
|
228
|
+
|
|
229
|
+
processed_extras = {}
|
|
230
|
+
for augmented_extra, reqs in self.extras_require.items():
|
|
231
|
+
# Historically, setuptools allows "augmented extras": `<extra>:<condition>`
|
|
232
|
+
unsafe_extra, _, condition = augmented_extra.partition(":")
|
|
233
|
+
unsafe_extra = unsafe_extra.strip()
|
|
234
|
+
extra = _normalization.safe_extra(unsafe_extra)
|
|
235
|
+
|
|
236
|
+
if extra:
|
|
237
|
+
_write_provides_extra(file, processed_extras, extra, unsafe_extra)
|
|
238
|
+
for req in _reqs.parse_strings(reqs):
|
|
239
|
+
r = _include_extra(req, extra, condition.strip())
|
|
240
|
+
file.write(f"Requires-Dist: {r}\n")
|
|
241
|
+
|
|
242
|
+
return processed_extras
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _include_extra(req: str, extra: str, condition: str) -> Requirement:
|
|
246
|
+
r = Requirement(req) # create a fresh object that can be modified
|
|
247
|
+
parts = (
|
|
248
|
+
f"({r.marker})" if r.marker else None,
|
|
249
|
+
f"({condition})" if condition else None,
|
|
250
|
+
f"extra == {extra!r}" if extra else None,
|
|
251
|
+
)
|
|
252
|
+
r.marker = Marker(" and ".join(x for x in parts if x))
|
|
253
|
+
return r
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _write_provides_extra(file, processed_extras, safe, unsafe):
|
|
257
|
+
previous = processed_extras.get(safe)
|
|
258
|
+
if previous == unsafe:
|
|
259
|
+
SetuptoolsDeprecationWarning.emit(
|
|
260
|
+
'Ambiguity during "extra" normalization for dependencies.',
|
|
261
|
+
f"""
|
|
262
|
+
{previous!r} and {unsafe!r} normalize to the same value:\n
|
|
263
|
+
{safe!r}\n
|
|
264
|
+
In future versions, setuptools might halt the build process.
|
|
265
|
+
""",
|
|
266
|
+
see_url="https://peps.python.org/pep-0685/",
|
|
267
|
+
)
|
|
268
|
+
else:
|
|
269
|
+
processed_extras[safe] = unsafe
|
|
270
|
+
file.write(f"Provides-Extra: {safe}\n")
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
# from pypa/distutils#244; needed only until that logic is always available
|
|
274
|
+
def get_fullname(self):
|
|
275
|
+
return _distribution_fullname(self.get_name(), self.get_version())
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def _distribution_fullname(name: str, version: str) -> str:
|
|
279
|
+
"""
|
|
280
|
+
>>> _distribution_fullname('setup.tools', '1.0-2')
|
|
281
|
+
'setup_tools-1.0.post2'
|
|
282
|
+
>>> _distribution_fullname('setup-tools', '1.2post2')
|
|
283
|
+
'setup_tools-1.2.post2'
|
|
284
|
+
>>> _distribution_fullname('setup-tools', '1.0-r2')
|
|
285
|
+
'setup_tools-1.0.post2'
|
|
286
|
+
>>> _distribution_fullname('setup.tools', '1.0.post')
|
|
287
|
+
'setup_tools-1.0.post0'
|
|
288
|
+
>>> _distribution_fullname('setup.tools', '1.0+ubuntu-1')
|
|
289
|
+
'setup_tools-1.0+ubuntu.1'
|
|
290
|
+
"""
|
|
291
|
+
return "{}-{}".format(
|
|
292
|
+
canonicalize_name(name).replace('-', '_'),
|
|
293
|
+
canonicalize_version(version, strip_trailing_zero=False),
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def _safe_license_file(file):
|
|
298
|
+
# XXX: Do we need this after the deprecation discussed in #4892, #4896??
|
|
299
|
+
normalized = os.path.normpath(file).replace(os.sep, "/")
|
|
300
|
+
if "../" in normalized:
|
|
301
|
+
return os.path.basename(normalized) # Temporarily restore pre PEP639 behaviour
|
|
302
|
+
return normalized
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
_POSSIBLE_DYNAMIC_FIELDS = {
|
|
306
|
+
# Core Metadata Field x related Distribution attribute
|
|
307
|
+
"author": "author",
|
|
308
|
+
"author-email": "author_email",
|
|
309
|
+
"classifier": "classifiers",
|
|
310
|
+
"description": "long_description",
|
|
311
|
+
"description-content-type": "long_description_content_type",
|
|
312
|
+
"download-url": "download_url",
|
|
313
|
+
"home-page": "url",
|
|
314
|
+
"keywords": "keywords",
|
|
315
|
+
"license": "license",
|
|
316
|
+
# XXX: License-File is complicated because the user gives globs that are expanded
|
|
317
|
+
# during the build. Without special handling it is likely always
|
|
318
|
+
# marked as Dynamic, which is an acceptable outcome according to:
|
|
319
|
+
# https://github.com/pypa/setuptools/issues/4629#issuecomment-2331233677
|
|
320
|
+
"license-file": "license_files",
|
|
321
|
+
"license-expression": "license_expression", # PEP 639
|
|
322
|
+
"maintainer": "maintainer",
|
|
323
|
+
"maintainer-email": "maintainer_email",
|
|
324
|
+
"obsoletes": "obsoletes",
|
|
325
|
+
# "obsoletes-dist": "obsoletes_dist", # NOT USED
|
|
326
|
+
"platform": "platforms",
|
|
327
|
+
"project-url": "project_urls",
|
|
328
|
+
"provides": "provides",
|
|
329
|
+
# "provides-dist": "provides_dist", # NOT USED
|
|
330
|
+
"provides-extra": "extras_require",
|
|
331
|
+
"requires": "requires",
|
|
332
|
+
"requires-dist": "install_requires",
|
|
333
|
+
# "requires-external": "requires_external", # NOT USED
|
|
334
|
+
"requires-python": "python_requires",
|
|
335
|
+
"summary": "description",
|
|
336
|
+
# "supported-platform": "supported_platforms", # NOT USED
|
|
337
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import operator
|
|
3
|
+
|
|
4
|
+
import packaging.requirements
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# from coherent.build.discovery
|
|
8
|
+
def extras_from_dep(dep):
|
|
9
|
+
try:
|
|
10
|
+
markers = packaging.requirements.Requirement(dep).marker._markers
|
|
11
|
+
except AttributeError:
|
|
12
|
+
markers = ()
|
|
13
|
+
return set(
|
|
14
|
+
marker[2].value
|
|
15
|
+
for marker in markers
|
|
16
|
+
if isinstance(marker, tuple) and marker[0].value == 'extra'
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def extras_from_deps(deps):
|
|
21
|
+
"""
|
|
22
|
+
>>> extras_from_deps(['requests'])
|
|
23
|
+
set()
|
|
24
|
+
>>> extras_from_deps(['pytest; extra == "test"'])
|
|
25
|
+
{'test'}
|
|
26
|
+
>>> sorted(extras_from_deps([
|
|
27
|
+
... 'requests',
|
|
28
|
+
... 'pytest; extra == "test"',
|
|
29
|
+
... 'pytest-cov; extra == "test"',
|
|
30
|
+
... 'sphinx; extra=="doc"']))
|
|
31
|
+
['doc', 'test']
|
|
32
|
+
"""
|
|
33
|
+
return functools.reduce(operator.or_, map(extras_from_dep, deps), set())
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
__version__, _, _ = sys.version.partition(' ')
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
# Allow Debian and pkgsrc (only) to customize system
|
|
9
|
+
# behavior. Ref pypa/distutils#2 and pypa/distutils#16.
|
|
10
|
+
# This hook is deprecated and no other environments
|
|
11
|
+
# should use it.
|
|
12
|
+
importlib.import_module('_distutils_system_mod')
|
|
13
|
+
except ImportError:
|
|
14
|
+
pass
|