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,468 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Load setuptools configuration from ``pyproject.toml`` files.
|
|
3
|
+
|
|
4
|
+
**PRIVATE MODULE**: API reserved for setuptools internal usage only.
|
|
5
|
+
|
|
6
|
+
To read project metadata, consider using
|
|
7
|
+
``build.util.project_wheel_metadata`` (https://pypi.org/project/build/).
|
|
8
|
+
For simple scenarios, you can also try parsing the file directly
|
|
9
|
+
with the help of ``tomllib`` or ``tomli``.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
import os
|
|
16
|
+
from collections.abc import Mapping
|
|
17
|
+
from contextlib import contextmanager
|
|
18
|
+
from functools import partial
|
|
19
|
+
from types import TracebackType
|
|
20
|
+
from typing import TYPE_CHECKING, Any, Callable
|
|
21
|
+
|
|
22
|
+
from .._path import StrPath
|
|
23
|
+
from ..errors import FileError, InvalidConfigError
|
|
24
|
+
from ..warnings import SetuptoolsWarning
|
|
25
|
+
from . import expand as _expand
|
|
26
|
+
from ._apply_pyprojecttoml import _PREVIOUSLY_DEFINED, _MissingDynamic, apply as _apply
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from typing_extensions import Self
|
|
30
|
+
|
|
31
|
+
from setuptools.dist import Distribution
|
|
32
|
+
|
|
33
|
+
_logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def load_file(filepath: StrPath) -> dict:
|
|
37
|
+
from ..compat.py310 import tomllib
|
|
38
|
+
|
|
39
|
+
with open(filepath, "rb") as file:
|
|
40
|
+
return tomllib.load(file)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def validate(config: dict, filepath: StrPath) -> bool:
|
|
44
|
+
from . import _validate_pyproject as validator
|
|
45
|
+
|
|
46
|
+
trove_classifier = validator.FORMAT_FUNCTIONS.get("trove-classifier")
|
|
47
|
+
if hasattr(trove_classifier, "_disable_download"):
|
|
48
|
+
# Improve reproducibility by default. See abravalheri/validate-pyproject#31
|
|
49
|
+
trove_classifier._disable_download() # type: ignore[union-attr]
|
|
50
|
+
|
|
51
|
+
try:
|
|
52
|
+
return validator.validate(config)
|
|
53
|
+
except validator.ValidationError as ex:
|
|
54
|
+
summary = f"configuration error: {ex.summary}"
|
|
55
|
+
if ex.name.strip("`") != "project":
|
|
56
|
+
# Probably it is just a field missing/misnamed, not worthy the verbosity...
|
|
57
|
+
_logger.debug(summary)
|
|
58
|
+
_logger.debug(ex.details)
|
|
59
|
+
|
|
60
|
+
error = f"invalid pyproject.toml config: {ex.name}."
|
|
61
|
+
raise ValueError(f"{error}\n{summary}") from None
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def apply_configuration(
|
|
65
|
+
dist: Distribution,
|
|
66
|
+
filepath: StrPath,
|
|
67
|
+
ignore_option_errors: bool = False,
|
|
68
|
+
) -> Distribution:
|
|
69
|
+
"""Apply the configuration from a ``pyproject.toml`` file into an existing
|
|
70
|
+
distribution object.
|
|
71
|
+
"""
|
|
72
|
+
config = read_configuration(filepath, True, ignore_option_errors, dist)
|
|
73
|
+
return _apply(dist, config, filepath)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def read_configuration(
|
|
77
|
+
filepath: StrPath,
|
|
78
|
+
expand: bool = True,
|
|
79
|
+
ignore_option_errors: bool = False,
|
|
80
|
+
dist: Distribution | None = None,
|
|
81
|
+
) -> dict[str, Any]:
|
|
82
|
+
"""Read given configuration file and returns options from it as a dict.
|
|
83
|
+
|
|
84
|
+
:param str|unicode filepath: Path to configuration file in the ``pyproject.toml``
|
|
85
|
+
format.
|
|
86
|
+
|
|
87
|
+
:param bool expand: Whether to expand directives and other computed values
|
|
88
|
+
(i.e. post-process the given configuration)
|
|
89
|
+
|
|
90
|
+
:param bool ignore_option_errors: Whether to silently ignore
|
|
91
|
+
options, values of which could not be resolved (e.g. due to exceptions
|
|
92
|
+
in directives such as file:, attr:, etc.).
|
|
93
|
+
If False exceptions are propagated as expected.
|
|
94
|
+
|
|
95
|
+
:param Distribution|None: Distribution object to which the configuration refers.
|
|
96
|
+
If not given a dummy object will be created and discarded after the
|
|
97
|
+
configuration is read. This is used for auto-discovery of packages and in the
|
|
98
|
+
case a dynamic configuration (e.g. ``attr`` or ``cmdclass``) is expanded.
|
|
99
|
+
When ``expand=False`` this object is simply ignored.
|
|
100
|
+
|
|
101
|
+
:rtype: dict
|
|
102
|
+
"""
|
|
103
|
+
filepath = os.path.abspath(filepath)
|
|
104
|
+
|
|
105
|
+
if not os.path.isfile(filepath):
|
|
106
|
+
raise FileError(f"Configuration file {filepath!r} does not exist.")
|
|
107
|
+
|
|
108
|
+
asdict = load_file(filepath) or {}
|
|
109
|
+
project_table = asdict.get("project", {})
|
|
110
|
+
tool_table = asdict.get("tool", {})
|
|
111
|
+
setuptools_table = tool_table.get("setuptools", {})
|
|
112
|
+
if not asdict or not (project_table or setuptools_table):
|
|
113
|
+
return {} # User is not using pyproject to configure setuptools
|
|
114
|
+
|
|
115
|
+
if "setuptools" in asdict.get("tools", {}):
|
|
116
|
+
# let the user know they probably have a typo in their metadata
|
|
117
|
+
_ToolsTypoInMetadata.emit()
|
|
118
|
+
|
|
119
|
+
if "distutils" in tool_table:
|
|
120
|
+
_ExperimentalConfiguration.emit(subject="[tool.distutils]")
|
|
121
|
+
|
|
122
|
+
# There is an overall sense in the community that making include_package_data=True
|
|
123
|
+
# the default would be an improvement.
|
|
124
|
+
# `ini2toml` backfills include_package_data=False when nothing is explicitly given,
|
|
125
|
+
# therefore setting a default here is backwards compatible.
|
|
126
|
+
if dist and dist.include_package_data is not None:
|
|
127
|
+
setuptools_table.setdefault("include-package-data", dist.include_package_data)
|
|
128
|
+
else:
|
|
129
|
+
setuptools_table.setdefault("include-package-data", True)
|
|
130
|
+
# Persist changes:
|
|
131
|
+
asdict["tool"] = tool_table
|
|
132
|
+
tool_table["setuptools"] = setuptools_table
|
|
133
|
+
|
|
134
|
+
if "ext-modules" in setuptools_table:
|
|
135
|
+
_ExperimentalConfiguration.emit(subject="[tool.setuptools.ext-modules]")
|
|
136
|
+
|
|
137
|
+
with _ignore_errors(ignore_option_errors):
|
|
138
|
+
# Don't complain about unrelated errors (e.g. tools not using the "tool" table)
|
|
139
|
+
subset = {"project": project_table, "tool": {"setuptools": setuptools_table}}
|
|
140
|
+
validate(subset, filepath)
|
|
141
|
+
|
|
142
|
+
if expand:
|
|
143
|
+
root_dir = os.path.dirname(filepath)
|
|
144
|
+
return expand_configuration(asdict, root_dir, ignore_option_errors, dist)
|
|
145
|
+
|
|
146
|
+
return asdict
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def expand_configuration(
|
|
150
|
+
config: dict,
|
|
151
|
+
root_dir: StrPath | None = None,
|
|
152
|
+
ignore_option_errors: bool = False,
|
|
153
|
+
dist: Distribution | None = None,
|
|
154
|
+
) -> dict:
|
|
155
|
+
"""Given a configuration with unresolved fields (e.g. dynamic, cmdclass, ...)
|
|
156
|
+
find their final values.
|
|
157
|
+
|
|
158
|
+
:param dict config: Dict containing the configuration for the distribution
|
|
159
|
+
:param str root_dir: Top-level directory for the distribution/project
|
|
160
|
+
(the same directory where ``pyproject.toml`` is place)
|
|
161
|
+
:param bool ignore_option_errors: see :func:`read_configuration`
|
|
162
|
+
:param Distribution|None: Distribution object to which the configuration refers.
|
|
163
|
+
If not given a dummy object will be created and discarded after the
|
|
164
|
+
configuration is read. Used in the case a dynamic configuration
|
|
165
|
+
(e.g. ``attr`` or ``cmdclass``).
|
|
166
|
+
|
|
167
|
+
:rtype: dict
|
|
168
|
+
"""
|
|
169
|
+
return _ConfigExpander(config, root_dir, ignore_option_errors, dist).expand()
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class _ConfigExpander:
|
|
173
|
+
def __init__(
|
|
174
|
+
self,
|
|
175
|
+
config: dict,
|
|
176
|
+
root_dir: StrPath | None = None,
|
|
177
|
+
ignore_option_errors: bool = False,
|
|
178
|
+
dist: Distribution | None = None,
|
|
179
|
+
) -> None:
|
|
180
|
+
self.config = config
|
|
181
|
+
self.root_dir = root_dir or os.getcwd()
|
|
182
|
+
self.project_cfg = config.get("project", {})
|
|
183
|
+
self.dynamic = self.project_cfg.get("dynamic", [])
|
|
184
|
+
self.setuptools_cfg = config.get("tool", {}).get("setuptools", {})
|
|
185
|
+
self.dynamic_cfg = self.setuptools_cfg.get("dynamic", {})
|
|
186
|
+
self.ignore_option_errors = ignore_option_errors
|
|
187
|
+
self._dist = dist
|
|
188
|
+
self._referenced_files = set[str]()
|
|
189
|
+
|
|
190
|
+
def _ensure_dist(self) -> Distribution:
|
|
191
|
+
from setuptools.dist import Distribution
|
|
192
|
+
|
|
193
|
+
attrs = {"src_root": self.root_dir, "name": self.project_cfg.get("name", None)}
|
|
194
|
+
return self._dist or Distribution(attrs)
|
|
195
|
+
|
|
196
|
+
def _process_field(self, container: dict, field: str, fn: Callable):
|
|
197
|
+
if field in container:
|
|
198
|
+
with _ignore_errors(self.ignore_option_errors):
|
|
199
|
+
container[field] = fn(container[field])
|
|
200
|
+
|
|
201
|
+
def _canonic_package_data(self, field="package-data"):
|
|
202
|
+
package_data = self.setuptools_cfg.get(field, {})
|
|
203
|
+
return _expand.canonic_package_data(package_data)
|
|
204
|
+
|
|
205
|
+
def expand(self):
|
|
206
|
+
self._expand_packages()
|
|
207
|
+
self._canonic_package_data()
|
|
208
|
+
self._canonic_package_data("exclude-package-data")
|
|
209
|
+
|
|
210
|
+
# A distribution object is required for discovering the correct package_dir
|
|
211
|
+
dist = self._ensure_dist()
|
|
212
|
+
ctx = _EnsurePackagesDiscovered(dist, self.project_cfg, self.setuptools_cfg)
|
|
213
|
+
with ctx as ensure_discovered:
|
|
214
|
+
package_dir = ensure_discovered.package_dir
|
|
215
|
+
self._expand_data_files()
|
|
216
|
+
self._expand_cmdclass(package_dir)
|
|
217
|
+
self._expand_all_dynamic(dist, package_dir)
|
|
218
|
+
|
|
219
|
+
dist._referenced_files.update(self._referenced_files)
|
|
220
|
+
return self.config
|
|
221
|
+
|
|
222
|
+
def _expand_packages(self):
|
|
223
|
+
packages = self.setuptools_cfg.get("packages")
|
|
224
|
+
if packages is None or isinstance(packages, (list, tuple)):
|
|
225
|
+
return
|
|
226
|
+
|
|
227
|
+
find = packages.get("find")
|
|
228
|
+
if isinstance(find, dict):
|
|
229
|
+
find["root_dir"] = self.root_dir
|
|
230
|
+
find["fill_package_dir"] = self.setuptools_cfg.setdefault("package-dir", {})
|
|
231
|
+
with _ignore_errors(self.ignore_option_errors):
|
|
232
|
+
self.setuptools_cfg["packages"] = _expand.find_packages(**find)
|
|
233
|
+
|
|
234
|
+
def _expand_data_files(self):
|
|
235
|
+
data_files = partial(_expand.canonic_data_files, root_dir=self.root_dir)
|
|
236
|
+
self._process_field(self.setuptools_cfg, "data-files", data_files)
|
|
237
|
+
|
|
238
|
+
def _expand_cmdclass(self, package_dir: Mapping[str, str]):
|
|
239
|
+
root_dir = self.root_dir
|
|
240
|
+
cmdclass = partial(_expand.cmdclass, package_dir=package_dir, root_dir=root_dir)
|
|
241
|
+
self._process_field(self.setuptools_cfg, "cmdclass", cmdclass)
|
|
242
|
+
|
|
243
|
+
def _expand_all_dynamic(self, dist: Distribution, package_dir: Mapping[str, str]):
|
|
244
|
+
special = ( # need special handling
|
|
245
|
+
"version",
|
|
246
|
+
"readme",
|
|
247
|
+
"entry-points",
|
|
248
|
+
"scripts",
|
|
249
|
+
"gui-scripts",
|
|
250
|
+
"classifiers",
|
|
251
|
+
"dependencies",
|
|
252
|
+
"optional-dependencies",
|
|
253
|
+
)
|
|
254
|
+
# `_obtain` functions are assumed to raise appropriate exceptions/warnings.
|
|
255
|
+
obtained_dynamic = {
|
|
256
|
+
field: self._obtain(dist, field, package_dir)
|
|
257
|
+
for field in self.dynamic
|
|
258
|
+
if field not in special
|
|
259
|
+
}
|
|
260
|
+
obtained_dynamic.update(
|
|
261
|
+
self._obtain_entry_points(dist, package_dir) or {},
|
|
262
|
+
version=self._obtain_version(dist, package_dir),
|
|
263
|
+
readme=self._obtain_readme(dist),
|
|
264
|
+
classifiers=self._obtain_classifiers(dist),
|
|
265
|
+
dependencies=self._obtain_dependencies(dist),
|
|
266
|
+
optional_dependencies=self._obtain_optional_dependencies(dist),
|
|
267
|
+
)
|
|
268
|
+
# `None` indicates there is nothing in `tool.setuptools.dynamic` but the value
|
|
269
|
+
# might have already been set by setup.py/extensions, so avoid overwriting.
|
|
270
|
+
updates = {k: v for k, v in obtained_dynamic.items() if v is not None}
|
|
271
|
+
self.project_cfg.update(updates)
|
|
272
|
+
|
|
273
|
+
def _ensure_previously_set(self, dist: Distribution, field: str):
|
|
274
|
+
previous = _PREVIOUSLY_DEFINED[field](dist)
|
|
275
|
+
if previous is None and not self.ignore_option_errors:
|
|
276
|
+
msg = (
|
|
277
|
+
f"No configuration found for dynamic {field!r}.\n"
|
|
278
|
+
"Some dynamic fields need to be specified via `tool.setuptools.dynamic`"
|
|
279
|
+
"\nothers must be specified via the equivalent attribute in `setup.py`."
|
|
280
|
+
)
|
|
281
|
+
raise InvalidConfigError(msg)
|
|
282
|
+
|
|
283
|
+
def _expand_directive(
|
|
284
|
+
self, specifier: str, directive, package_dir: Mapping[str, str]
|
|
285
|
+
):
|
|
286
|
+
from more_itertools import always_iterable
|
|
287
|
+
|
|
288
|
+
with _ignore_errors(self.ignore_option_errors):
|
|
289
|
+
root_dir = self.root_dir
|
|
290
|
+
if "file" in directive:
|
|
291
|
+
self._referenced_files.update(always_iterable(directive["file"]))
|
|
292
|
+
return _expand.read_files(directive["file"], root_dir)
|
|
293
|
+
if "attr" in directive:
|
|
294
|
+
return _expand.read_attr(directive["attr"], package_dir, root_dir)
|
|
295
|
+
raise ValueError(f"invalid `{specifier}`: {directive!r}")
|
|
296
|
+
return None
|
|
297
|
+
|
|
298
|
+
def _obtain(self, dist: Distribution, field: str, package_dir: Mapping[str, str]):
|
|
299
|
+
if field in self.dynamic_cfg:
|
|
300
|
+
return self._expand_directive(
|
|
301
|
+
f"tool.setuptools.dynamic.{field}",
|
|
302
|
+
self.dynamic_cfg[field],
|
|
303
|
+
package_dir,
|
|
304
|
+
)
|
|
305
|
+
self._ensure_previously_set(dist, field)
|
|
306
|
+
return None
|
|
307
|
+
|
|
308
|
+
def _obtain_version(self, dist: Distribution, package_dir: Mapping[str, str]):
|
|
309
|
+
# Since plugins can set version, let's silently skip if it cannot be obtained
|
|
310
|
+
if "version" in self.dynamic and "version" in self.dynamic_cfg:
|
|
311
|
+
return _expand.version(
|
|
312
|
+
# We already do an early check for the presence of "version"
|
|
313
|
+
self._obtain(dist, "version", package_dir) # pyright: ignore[reportArgumentType]
|
|
314
|
+
)
|
|
315
|
+
return None
|
|
316
|
+
|
|
317
|
+
def _obtain_readme(self, dist: Distribution) -> dict[str, str] | None:
|
|
318
|
+
if "readme" not in self.dynamic:
|
|
319
|
+
return None
|
|
320
|
+
|
|
321
|
+
dynamic_cfg = self.dynamic_cfg
|
|
322
|
+
if "readme" in dynamic_cfg:
|
|
323
|
+
return {
|
|
324
|
+
# We already do an early check for the presence of "readme"
|
|
325
|
+
"text": self._obtain(dist, "readme", {}),
|
|
326
|
+
"content-type": dynamic_cfg["readme"].get("content-type", "text/x-rst"),
|
|
327
|
+
} # pyright: ignore[reportReturnType]
|
|
328
|
+
|
|
329
|
+
self._ensure_previously_set(dist, "readme")
|
|
330
|
+
return None
|
|
331
|
+
|
|
332
|
+
def _obtain_entry_points(
|
|
333
|
+
self, dist: Distribution, package_dir: Mapping[str, str]
|
|
334
|
+
) -> dict[str, dict[str, Any]] | None:
|
|
335
|
+
fields = ("entry-points", "scripts", "gui-scripts")
|
|
336
|
+
if not any(field in self.dynamic for field in fields):
|
|
337
|
+
return None
|
|
338
|
+
|
|
339
|
+
text = self._obtain(dist, "entry-points", package_dir)
|
|
340
|
+
if text is None:
|
|
341
|
+
return None
|
|
342
|
+
|
|
343
|
+
groups = _expand.entry_points(text)
|
|
344
|
+
# Any is str | dict[str, str], but causes variance issues
|
|
345
|
+
expanded: dict[str, dict[str, Any]] = {"entry-points": groups}
|
|
346
|
+
|
|
347
|
+
def _set_scripts(field: str, group: str):
|
|
348
|
+
if group in groups:
|
|
349
|
+
value = groups.pop(group)
|
|
350
|
+
if field not in self.dynamic:
|
|
351
|
+
raise InvalidConfigError(_MissingDynamic.details(field, value))
|
|
352
|
+
expanded[field] = value
|
|
353
|
+
|
|
354
|
+
_set_scripts("scripts", "console_scripts")
|
|
355
|
+
_set_scripts("gui-scripts", "gui_scripts")
|
|
356
|
+
|
|
357
|
+
return expanded
|
|
358
|
+
|
|
359
|
+
def _obtain_classifiers(self, dist: Distribution):
|
|
360
|
+
if "classifiers" in self.dynamic:
|
|
361
|
+
value = self._obtain(dist, "classifiers", {})
|
|
362
|
+
if value:
|
|
363
|
+
return value.splitlines()
|
|
364
|
+
return None
|
|
365
|
+
|
|
366
|
+
def _obtain_dependencies(self, dist: Distribution):
|
|
367
|
+
if "dependencies" in self.dynamic:
|
|
368
|
+
value = self._obtain(dist, "dependencies", {})
|
|
369
|
+
if value:
|
|
370
|
+
return _parse_requirements_list(value)
|
|
371
|
+
return None
|
|
372
|
+
|
|
373
|
+
def _obtain_optional_dependencies(self, dist: Distribution):
|
|
374
|
+
if "optional-dependencies" not in self.dynamic:
|
|
375
|
+
return None
|
|
376
|
+
if "optional-dependencies" in self.dynamic_cfg:
|
|
377
|
+
optional_dependencies_map = self.dynamic_cfg["optional-dependencies"]
|
|
378
|
+
assert isinstance(optional_dependencies_map, dict)
|
|
379
|
+
return {
|
|
380
|
+
group: _parse_requirements_list(
|
|
381
|
+
self._expand_directive(
|
|
382
|
+
f"tool.setuptools.dynamic.optional-dependencies.{group}",
|
|
383
|
+
directive,
|
|
384
|
+
{},
|
|
385
|
+
)
|
|
386
|
+
)
|
|
387
|
+
for group, directive in optional_dependencies_map.items()
|
|
388
|
+
}
|
|
389
|
+
self._ensure_previously_set(dist, "optional-dependencies")
|
|
390
|
+
return None
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
def _parse_requirements_list(value):
|
|
394
|
+
return [
|
|
395
|
+
line
|
|
396
|
+
for line in value.splitlines()
|
|
397
|
+
if line.strip() and not line.strip().startswith("#")
|
|
398
|
+
]
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
@contextmanager
|
|
402
|
+
def _ignore_errors(ignore_option_errors: bool):
|
|
403
|
+
if not ignore_option_errors:
|
|
404
|
+
yield
|
|
405
|
+
return
|
|
406
|
+
|
|
407
|
+
try:
|
|
408
|
+
yield
|
|
409
|
+
except Exception as ex:
|
|
410
|
+
_logger.debug(f"ignored error: {ex.__class__.__name__} - {ex}")
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
class _EnsurePackagesDiscovered(_expand.EnsurePackagesDiscovered):
|
|
414
|
+
def __init__(
|
|
415
|
+
self, distribution: Distribution, project_cfg: dict, setuptools_cfg: dict
|
|
416
|
+
) -> None:
|
|
417
|
+
super().__init__(distribution)
|
|
418
|
+
self._project_cfg = project_cfg
|
|
419
|
+
self._setuptools_cfg = setuptools_cfg
|
|
420
|
+
|
|
421
|
+
def __enter__(self) -> Self:
|
|
422
|
+
"""When entering the context, the values of ``packages``, ``py_modules`` and
|
|
423
|
+
``package_dir`` that are missing in ``dist`` are copied from ``setuptools_cfg``.
|
|
424
|
+
"""
|
|
425
|
+
dist, cfg = self._dist, self._setuptools_cfg
|
|
426
|
+
package_dir: dict[str, str] = cfg.setdefault("package-dir", {})
|
|
427
|
+
package_dir.update(dist.package_dir or {})
|
|
428
|
+
dist.package_dir = package_dir # needs to be the same object
|
|
429
|
+
|
|
430
|
+
dist.set_defaults._ignore_ext_modules() # pyproject.toml-specific behaviour
|
|
431
|
+
|
|
432
|
+
# Set `name`, `py_modules` and `packages` in dist to short-circuit
|
|
433
|
+
# auto-discovery, but avoid overwriting empty lists purposefully set by users.
|
|
434
|
+
if dist.metadata.name is None:
|
|
435
|
+
dist.metadata.name = self._project_cfg.get("name")
|
|
436
|
+
if dist.py_modules is None:
|
|
437
|
+
dist.py_modules = cfg.get("py-modules")
|
|
438
|
+
if dist.packages is None:
|
|
439
|
+
dist.packages = cfg.get("packages")
|
|
440
|
+
|
|
441
|
+
return super().__enter__()
|
|
442
|
+
|
|
443
|
+
def __exit__(
|
|
444
|
+
self,
|
|
445
|
+
exc_type: type[BaseException] | None,
|
|
446
|
+
exc_value: BaseException | None,
|
|
447
|
+
traceback: TracebackType | None,
|
|
448
|
+
) -> None:
|
|
449
|
+
"""When exiting the context, if values of ``packages``, ``py_modules`` and
|
|
450
|
+
``package_dir`` are missing in ``setuptools_cfg``, copy from ``dist``.
|
|
451
|
+
"""
|
|
452
|
+
# If anything was discovered set them back, so they count in the final config.
|
|
453
|
+
self._setuptools_cfg.setdefault("packages", self._dist.packages)
|
|
454
|
+
self._setuptools_cfg.setdefault("py-modules", self._dist.py_modules)
|
|
455
|
+
return super().__exit__(exc_type, exc_value, traceback)
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
class _ExperimentalConfiguration(SetuptoolsWarning):
|
|
459
|
+
_SUMMARY = (
|
|
460
|
+
"`{subject}` in `pyproject.toml` is still *experimental* "
|
|
461
|
+
"and likely to change in future releases."
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
class _ToolsTypoInMetadata(SetuptoolsWarning):
|
|
466
|
+
_SUMMARY = (
|
|
467
|
+
"Ignoring [tools.setuptools] in pyproject.toml, did you mean [tool.setuptools]?"
|
|
468
|
+
)
|