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,470 @@
|
|
|
1
|
+
"""Tests for distutils.command.sdist."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import pathlib
|
|
5
|
+
import shutil # noqa: F401
|
|
6
|
+
import tarfile
|
|
7
|
+
import zipfile
|
|
8
|
+
from distutils.archive_util import ARCHIVE_FORMATS
|
|
9
|
+
from distutils.command.sdist import sdist, show_formats
|
|
10
|
+
from distutils.core import Distribution
|
|
11
|
+
from distutils.errors import DistutilsOptionError
|
|
12
|
+
from distutils.filelist import FileList
|
|
13
|
+
from os.path import join
|
|
14
|
+
from textwrap import dedent
|
|
15
|
+
|
|
16
|
+
import jaraco.path
|
|
17
|
+
import path
|
|
18
|
+
import pytest
|
|
19
|
+
from more_itertools import ilen
|
|
20
|
+
|
|
21
|
+
from . import support
|
|
22
|
+
from .unix_compat import grp, pwd, require_uid_0, require_unix_id
|
|
23
|
+
|
|
24
|
+
SETUP_PY = """
|
|
25
|
+
from distutils.core import setup
|
|
26
|
+
import somecode
|
|
27
|
+
|
|
28
|
+
setup(name='fake')
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
MANIFEST = """\
|
|
32
|
+
# file GENERATED by distutils, do NOT edit
|
|
33
|
+
README
|
|
34
|
+
buildout.cfg
|
|
35
|
+
inroot.txt
|
|
36
|
+
setup.py
|
|
37
|
+
data%(sep)sdata.dt
|
|
38
|
+
scripts%(sep)sscript.py
|
|
39
|
+
some%(sep)sfile.txt
|
|
40
|
+
some%(sep)sother_file.txt
|
|
41
|
+
somecode%(sep)s__init__.py
|
|
42
|
+
somecode%(sep)sdoc.dat
|
|
43
|
+
somecode%(sep)sdoc.txt
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@pytest.fixture(autouse=True)
|
|
48
|
+
def project_dir(request, distutils_managed_tempdir):
|
|
49
|
+
self = request.instance
|
|
50
|
+
self.tmp_dir = self.mkdtemp()
|
|
51
|
+
jaraco.path.build(
|
|
52
|
+
{
|
|
53
|
+
'somecode': {
|
|
54
|
+
'__init__.py': '#',
|
|
55
|
+
},
|
|
56
|
+
'README': 'xxx',
|
|
57
|
+
'setup.py': SETUP_PY,
|
|
58
|
+
},
|
|
59
|
+
self.tmp_dir,
|
|
60
|
+
)
|
|
61
|
+
with path.Path(self.tmp_dir):
|
|
62
|
+
yield
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def clean_lines(filepath):
|
|
66
|
+
with pathlib.Path(filepath).open(encoding='utf-8') as f:
|
|
67
|
+
yield from filter(None, map(str.strip, f))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class TestSDist(support.TempdirManager):
|
|
71
|
+
def get_cmd(self, metadata=None):
|
|
72
|
+
"""Returns a cmd"""
|
|
73
|
+
if metadata is None:
|
|
74
|
+
metadata = {
|
|
75
|
+
'name': 'ns.fake--pkg',
|
|
76
|
+
'version': '1.0',
|
|
77
|
+
'url': 'xxx',
|
|
78
|
+
'author': 'xxx',
|
|
79
|
+
'author_email': 'xxx',
|
|
80
|
+
}
|
|
81
|
+
dist = Distribution(metadata)
|
|
82
|
+
dist.script_name = 'setup.py'
|
|
83
|
+
dist.packages = ['somecode']
|
|
84
|
+
dist.include_package_data = True
|
|
85
|
+
cmd = sdist(dist)
|
|
86
|
+
cmd.dist_dir = 'dist'
|
|
87
|
+
return dist, cmd
|
|
88
|
+
|
|
89
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
90
|
+
def test_prune_file_list(self):
|
|
91
|
+
# this test creates a project with some VCS dirs and an NFS rename
|
|
92
|
+
# file, then launches sdist to check they get pruned on all systems
|
|
93
|
+
|
|
94
|
+
# creating VCS directories with some files in them
|
|
95
|
+
os.mkdir(join(self.tmp_dir, 'somecode', '.svn'))
|
|
96
|
+
self.write_file((self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx')
|
|
97
|
+
|
|
98
|
+
os.mkdir(join(self.tmp_dir, 'somecode', '.hg'))
|
|
99
|
+
self.write_file((self.tmp_dir, 'somecode', '.hg', 'ok'), 'xxx')
|
|
100
|
+
|
|
101
|
+
os.mkdir(join(self.tmp_dir, 'somecode', '.git'))
|
|
102
|
+
self.write_file((self.tmp_dir, 'somecode', '.git', 'ok'), 'xxx')
|
|
103
|
+
|
|
104
|
+
self.write_file((self.tmp_dir, 'somecode', '.nfs0001'), 'xxx')
|
|
105
|
+
|
|
106
|
+
# now building a sdist
|
|
107
|
+
dist, cmd = self.get_cmd()
|
|
108
|
+
|
|
109
|
+
# zip is available universally
|
|
110
|
+
# (tar might not be installed under win32)
|
|
111
|
+
cmd.formats = ['zip']
|
|
112
|
+
|
|
113
|
+
cmd.ensure_finalized()
|
|
114
|
+
cmd.run()
|
|
115
|
+
|
|
116
|
+
# now let's check what we have
|
|
117
|
+
dist_folder = join(self.tmp_dir, 'dist')
|
|
118
|
+
files = os.listdir(dist_folder)
|
|
119
|
+
assert files == ['ns_fake_pkg-1.0.zip']
|
|
120
|
+
|
|
121
|
+
zip_file = zipfile.ZipFile(join(dist_folder, 'ns_fake_pkg-1.0.zip'))
|
|
122
|
+
try:
|
|
123
|
+
content = zip_file.namelist()
|
|
124
|
+
finally:
|
|
125
|
+
zip_file.close()
|
|
126
|
+
|
|
127
|
+
# making sure everything has been pruned correctly
|
|
128
|
+
expected = [
|
|
129
|
+
'',
|
|
130
|
+
'PKG-INFO',
|
|
131
|
+
'README',
|
|
132
|
+
'setup.py',
|
|
133
|
+
'somecode/',
|
|
134
|
+
'somecode/__init__.py',
|
|
135
|
+
]
|
|
136
|
+
assert sorted(content) == ['ns_fake_pkg-1.0/' + x for x in expected]
|
|
137
|
+
|
|
138
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
139
|
+
@pytest.mark.skipif("not shutil.which('tar')")
|
|
140
|
+
@pytest.mark.skipif("not shutil.which('gzip')")
|
|
141
|
+
def test_make_distribution(self):
|
|
142
|
+
# now building a sdist
|
|
143
|
+
dist, cmd = self.get_cmd()
|
|
144
|
+
|
|
145
|
+
# creating a gztar then a tar
|
|
146
|
+
cmd.formats = ['gztar', 'tar']
|
|
147
|
+
cmd.ensure_finalized()
|
|
148
|
+
cmd.run()
|
|
149
|
+
|
|
150
|
+
# making sure we have two files
|
|
151
|
+
dist_folder = join(self.tmp_dir, 'dist')
|
|
152
|
+
result = os.listdir(dist_folder)
|
|
153
|
+
result.sort()
|
|
154
|
+
assert result == ['ns_fake_pkg-1.0.tar', 'ns_fake_pkg-1.0.tar.gz']
|
|
155
|
+
|
|
156
|
+
os.remove(join(dist_folder, 'ns_fake_pkg-1.0.tar'))
|
|
157
|
+
os.remove(join(dist_folder, 'ns_fake_pkg-1.0.tar.gz'))
|
|
158
|
+
|
|
159
|
+
# now trying a tar then a gztar
|
|
160
|
+
cmd.formats = ['tar', 'gztar']
|
|
161
|
+
|
|
162
|
+
cmd.ensure_finalized()
|
|
163
|
+
cmd.run()
|
|
164
|
+
|
|
165
|
+
result = os.listdir(dist_folder)
|
|
166
|
+
result.sort()
|
|
167
|
+
assert result == ['ns_fake_pkg-1.0.tar', 'ns_fake_pkg-1.0.tar.gz']
|
|
168
|
+
|
|
169
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
170
|
+
def test_add_defaults(self):
|
|
171
|
+
# https://bugs.python.org/issue2279
|
|
172
|
+
|
|
173
|
+
# add_default should also include
|
|
174
|
+
# data_files and package_data
|
|
175
|
+
dist, cmd = self.get_cmd()
|
|
176
|
+
|
|
177
|
+
# filling data_files by pointing files
|
|
178
|
+
# in package_data
|
|
179
|
+
dist.package_data = {'': ['*.cfg', '*.dat'], 'somecode': ['*.txt']}
|
|
180
|
+
self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
|
|
181
|
+
self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#')
|
|
182
|
+
|
|
183
|
+
# adding some data in data_files
|
|
184
|
+
data_dir = join(self.tmp_dir, 'data')
|
|
185
|
+
os.mkdir(data_dir)
|
|
186
|
+
self.write_file((data_dir, 'data.dt'), '#')
|
|
187
|
+
some_dir = join(self.tmp_dir, 'some')
|
|
188
|
+
os.mkdir(some_dir)
|
|
189
|
+
# make sure VCS directories are pruned (#14004)
|
|
190
|
+
hg_dir = join(self.tmp_dir, '.hg')
|
|
191
|
+
os.mkdir(hg_dir)
|
|
192
|
+
self.write_file((hg_dir, 'last-message.txt'), '#')
|
|
193
|
+
# a buggy regex used to prevent this from working on windows (#6884)
|
|
194
|
+
self.write_file((self.tmp_dir, 'buildout.cfg'), '#')
|
|
195
|
+
self.write_file((self.tmp_dir, 'inroot.txt'), '#')
|
|
196
|
+
self.write_file((some_dir, 'file.txt'), '#')
|
|
197
|
+
self.write_file((some_dir, 'other_file.txt'), '#')
|
|
198
|
+
|
|
199
|
+
dist.data_files = [
|
|
200
|
+
('data', ['data/data.dt', 'buildout.cfg', 'inroot.txt', 'notexisting']),
|
|
201
|
+
'some/file.txt',
|
|
202
|
+
'some/other_file.txt',
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
# adding a script
|
|
206
|
+
script_dir = join(self.tmp_dir, 'scripts')
|
|
207
|
+
os.mkdir(script_dir)
|
|
208
|
+
self.write_file((script_dir, 'script.py'), '#')
|
|
209
|
+
dist.scripts = [join('scripts', 'script.py')]
|
|
210
|
+
|
|
211
|
+
cmd.formats = ['zip']
|
|
212
|
+
cmd.use_defaults = True
|
|
213
|
+
|
|
214
|
+
cmd.ensure_finalized()
|
|
215
|
+
cmd.run()
|
|
216
|
+
|
|
217
|
+
# now let's check what we have
|
|
218
|
+
dist_folder = join(self.tmp_dir, 'dist')
|
|
219
|
+
files = os.listdir(dist_folder)
|
|
220
|
+
assert files == ['ns_fake_pkg-1.0.zip']
|
|
221
|
+
|
|
222
|
+
zip_file = zipfile.ZipFile(join(dist_folder, 'ns_fake_pkg-1.0.zip'))
|
|
223
|
+
try:
|
|
224
|
+
content = zip_file.namelist()
|
|
225
|
+
finally:
|
|
226
|
+
zip_file.close()
|
|
227
|
+
|
|
228
|
+
# making sure everything was added
|
|
229
|
+
expected = [
|
|
230
|
+
'',
|
|
231
|
+
'PKG-INFO',
|
|
232
|
+
'README',
|
|
233
|
+
'buildout.cfg',
|
|
234
|
+
'data/',
|
|
235
|
+
'data/data.dt',
|
|
236
|
+
'inroot.txt',
|
|
237
|
+
'scripts/',
|
|
238
|
+
'scripts/script.py',
|
|
239
|
+
'setup.py',
|
|
240
|
+
'some/',
|
|
241
|
+
'some/file.txt',
|
|
242
|
+
'some/other_file.txt',
|
|
243
|
+
'somecode/',
|
|
244
|
+
'somecode/__init__.py',
|
|
245
|
+
'somecode/doc.dat',
|
|
246
|
+
'somecode/doc.txt',
|
|
247
|
+
]
|
|
248
|
+
assert sorted(content) == ['ns_fake_pkg-1.0/' + x for x in expected]
|
|
249
|
+
|
|
250
|
+
# checking the MANIFEST
|
|
251
|
+
manifest = pathlib.Path(self.tmp_dir, 'MANIFEST').read_text(encoding='utf-8')
|
|
252
|
+
assert manifest == MANIFEST % {'sep': os.sep}
|
|
253
|
+
|
|
254
|
+
@staticmethod
|
|
255
|
+
def warnings(messages, prefix='warning: '):
|
|
256
|
+
return [msg for msg in messages if msg.startswith(prefix)]
|
|
257
|
+
|
|
258
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
259
|
+
def test_metadata_check_option(self, caplog):
|
|
260
|
+
# testing the `medata-check` option
|
|
261
|
+
dist, cmd = self.get_cmd(metadata={})
|
|
262
|
+
|
|
263
|
+
# this should raise some warnings !
|
|
264
|
+
# with the `check` subcommand
|
|
265
|
+
cmd.ensure_finalized()
|
|
266
|
+
cmd.run()
|
|
267
|
+
assert len(self.warnings(caplog.messages, 'warning: check: ')) == 1
|
|
268
|
+
|
|
269
|
+
# trying with a complete set of metadata
|
|
270
|
+
caplog.clear()
|
|
271
|
+
dist, cmd = self.get_cmd()
|
|
272
|
+
cmd.ensure_finalized()
|
|
273
|
+
cmd.metadata_check = False
|
|
274
|
+
cmd.run()
|
|
275
|
+
assert len(self.warnings(caplog.messages, 'warning: check: ')) == 0
|
|
276
|
+
|
|
277
|
+
def test_show_formats(self, capsys):
|
|
278
|
+
show_formats()
|
|
279
|
+
|
|
280
|
+
# the output should be a header line + one line per format
|
|
281
|
+
num_formats = len(ARCHIVE_FORMATS.keys())
|
|
282
|
+
output = [
|
|
283
|
+
line
|
|
284
|
+
for line in capsys.readouterr().out.split('\n')
|
|
285
|
+
if line.strip().startswith('--formats=')
|
|
286
|
+
]
|
|
287
|
+
assert len(output) == num_formats
|
|
288
|
+
|
|
289
|
+
def test_finalize_options(self):
|
|
290
|
+
dist, cmd = self.get_cmd()
|
|
291
|
+
cmd.finalize_options()
|
|
292
|
+
|
|
293
|
+
# default options set by finalize
|
|
294
|
+
assert cmd.manifest == 'MANIFEST'
|
|
295
|
+
assert cmd.template == 'MANIFEST.in'
|
|
296
|
+
assert cmd.dist_dir == 'dist'
|
|
297
|
+
|
|
298
|
+
# formats has to be a string splitable on (' ', ',') or
|
|
299
|
+
# a stringlist
|
|
300
|
+
cmd.formats = 1
|
|
301
|
+
with pytest.raises(DistutilsOptionError):
|
|
302
|
+
cmd.finalize_options()
|
|
303
|
+
cmd.formats = ['zip']
|
|
304
|
+
cmd.finalize_options()
|
|
305
|
+
|
|
306
|
+
# formats has to be known
|
|
307
|
+
cmd.formats = 'supazipa'
|
|
308
|
+
with pytest.raises(DistutilsOptionError):
|
|
309
|
+
cmd.finalize_options()
|
|
310
|
+
|
|
311
|
+
# the following tests make sure there is a nice error message instead
|
|
312
|
+
# of a traceback when parsing an invalid manifest template
|
|
313
|
+
|
|
314
|
+
def _check_template(self, content, caplog):
|
|
315
|
+
dist, cmd = self.get_cmd()
|
|
316
|
+
os.chdir(self.tmp_dir)
|
|
317
|
+
self.write_file('MANIFEST.in', content)
|
|
318
|
+
cmd.ensure_finalized()
|
|
319
|
+
cmd.filelist = FileList()
|
|
320
|
+
cmd.read_template()
|
|
321
|
+
assert len(self.warnings(caplog.messages)) == 1
|
|
322
|
+
|
|
323
|
+
def test_invalid_template_unknown_command(self, caplog):
|
|
324
|
+
self._check_template('taunt knights *', caplog)
|
|
325
|
+
|
|
326
|
+
def test_invalid_template_wrong_arguments(self, caplog):
|
|
327
|
+
# this manifest command takes one argument
|
|
328
|
+
self._check_template('prune', caplog)
|
|
329
|
+
|
|
330
|
+
@pytest.mark.skipif("platform.system() != 'Windows'")
|
|
331
|
+
def test_invalid_template_wrong_path(self, caplog):
|
|
332
|
+
# on Windows, trailing slashes are not allowed
|
|
333
|
+
# this used to crash instead of raising a warning: #8286
|
|
334
|
+
self._check_template('include examples/', caplog)
|
|
335
|
+
|
|
336
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
337
|
+
def test_get_file_list(self):
|
|
338
|
+
# make sure MANIFEST is recalculated
|
|
339
|
+
dist, cmd = self.get_cmd()
|
|
340
|
+
|
|
341
|
+
# filling data_files by pointing files in package_data
|
|
342
|
+
dist.package_data = {'somecode': ['*.txt']}
|
|
343
|
+
self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
|
|
344
|
+
cmd.formats = ['gztar']
|
|
345
|
+
cmd.ensure_finalized()
|
|
346
|
+
cmd.run()
|
|
347
|
+
|
|
348
|
+
assert ilen(clean_lines(cmd.manifest)) == 5
|
|
349
|
+
|
|
350
|
+
# adding a file
|
|
351
|
+
self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#')
|
|
352
|
+
|
|
353
|
+
# make sure build_py is reinitialized, like a fresh run
|
|
354
|
+
build_py = dist.get_command_obj('build_py')
|
|
355
|
+
build_py.finalized = False
|
|
356
|
+
build_py.ensure_finalized()
|
|
357
|
+
|
|
358
|
+
cmd.run()
|
|
359
|
+
|
|
360
|
+
manifest2 = list(clean_lines(cmd.manifest))
|
|
361
|
+
|
|
362
|
+
# do we have the new file in MANIFEST ?
|
|
363
|
+
assert len(manifest2) == 6
|
|
364
|
+
assert 'doc2.txt' in manifest2[-1]
|
|
365
|
+
|
|
366
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
367
|
+
def test_manifest_marker(self):
|
|
368
|
+
# check that autogenerated MANIFESTs have a marker
|
|
369
|
+
dist, cmd = self.get_cmd()
|
|
370
|
+
cmd.ensure_finalized()
|
|
371
|
+
cmd.run()
|
|
372
|
+
|
|
373
|
+
assert (
|
|
374
|
+
next(clean_lines(cmd.manifest))
|
|
375
|
+
== '# file GENERATED by distutils, do NOT edit'
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
379
|
+
def test_manifest_comments(self):
|
|
380
|
+
# make sure comments don't cause exceptions or wrong includes
|
|
381
|
+
contents = dedent(
|
|
382
|
+
"""\
|
|
383
|
+
# bad.py
|
|
384
|
+
#bad.py
|
|
385
|
+
good.py
|
|
386
|
+
"""
|
|
387
|
+
)
|
|
388
|
+
dist, cmd = self.get_cmd()
|
|
389
|
+
cmd.ensure_finalized()
|
|
390
|
+
self.write_file((self.tmp_dir, cmd.manifest), contents)
|
|
391
|
+
self.write_file((self.tmp_dir, 'good.py'), '# pick me!')
|
|
392
|
+
self.write_file((self.tmp_dir, 'bad.py'), "# don't pick me!")
|
|
393
|
+
self.write_file((self.tmp_dir, '#bad.py'), "# don't pick me!")
|
|
394
|
+
cmd.run()
|
|
395
|
+
assert cmd.filelist.files == ['good.py']
|
|
396
|
+
|
|
397
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
398
|
+
def test_manual_manifest(self):
|
|
399
|
+
# check that a MANIFEST without a marker is left alone
|
|
400
|
+
dist, cmd = self.get_cmd()
|
|
401
|
+
cmd.formats = ['gztar']
|
|
402
|
+
cmd.ensure_finalized()
|
|
403
|
+
self.write_file((self.tmp_dir, cmd.manifest), 'README.manual')
|
|
404
|
+
self.write_file(
|
|
405
|
+
(self.tmp_dir, 'README.manual'),
|
|
406
|
+
'This project maintains its MANIFEST file itself.',
|
|
407
|
+
)
|
|
408
|
+
cmd.run()
|
|
409
|
+
assert cmd.filelist.files == ['README.manual']
|
|
410
|
+
|
|
411
|
+
assert list(clean_lines(cmd.manifest)) == ['README.manual']
|
|
412
|
+
|
|
413
|
+
archive_name = join(self.tmp_dir, 'dist', 'ns_fake_pkg-1.0.tar.gz')
|
|
414
|
+
archive = tarfile.open(archive_name)
|
|
415
|
+
try:
|
|
416
|
+
filenames = [tarinfo.name for tarinfo in archive]
|
|
417
|
+
finally:
|
|
418
|
+
archive.close()
|
|
419
|
+
assert sorted(filenames) == [
|
|
420
|
+
'ns_fake_pkg-1.0',
|
|
421
|
+
'ns_fake_pkg-1.0/PKG-INFO',
|
|
422
|
+
'ns_fake_pkg-1.0/README.manual',
|
|
423
|
+
]
|
|
424
|
+
|
|
425
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
426
|
+
@require_unix_id
|
|
427
|
+
@require_uid_0
|
|
428
|
+
@pytest.mark.skipif("not shutil.which('tar')")
|
|
429
|
+
@pytest.mark.skipif("not shutil.which('gzip')")
|
|
430
|
+
def test_make_distribution_owner_group(self):
|
|
431
|
+
# now building a sdist
|
|
432
|
+
dist, cmd = self.get_cmd()
|
|
433
|
+
|
|
434
|
+
# creating a gztar and specifying the owner+group
|
|
435
|
+
cmd.formats = ['gztar']
|
|
436
|
+
cmd.owner = pwd.getpwuid(0)[0]
|
|
437
|
+
cmd.group = grp.getgrgid(0)[0]
|
|
438
|
+
cmd.ensure_finalized()
|
|
439
|
+
cmd.run()
|
|
440
|
+
|
|
441
|
+
# making sure we have the good rights
|
|
442
|
+
archive_name = join(self.tmp_dir, 'dist', 'ns_fake_pkg-1.0.tar.gz')
|
|
443
|
+
archive = tarfile.open(archive_name)
|
|
444
|
+
try:
|
|
445
|
+
for member in archive.getmembers():
|
|
446
|
+
assert member.uid == 0
|
|
447
|
+
assert member.gid == 0
|
|
448
|
+
finally:
|
|
449
|
+
archive.close()
|
|
450
|
+
|
|
451
|
+
# building a sdist again
|
|
452
|
+
dist, cmd = self.get_cmd()
|
|
453
|
+
|
|
454
|
+
# creating a gztar
|
|
455
|
+
cmd.formats = ['gztar']
|
|
456
|
+
cmd.ensure_finalized()
|
|
457
|
+
cmd.run()
|
|
458
|
+
|
|
459
|
+
# making sure we have the good rights
|
|
460
|
+
archive_name = join(self.tmp_dir, 'dist', 'ns_fake_pkg-1.0.tar.gz')
|
|
461
|
+
archive = tarfile.open(archive_name)
|
|
462
|
+
|
|
463
|
+
# note that we are not testing the group ownership here
|
|
464
|
+
# because, depending on the platforms and the container
|
|
465
|
+
# rights (see #7408)
|
|
466
|
+
try:
|
|
467
|
+
for member in archive.getmembers():
|
|
468
|
+
assert member.uid == os.getuid()
|
|
469
|
+
finally:
|
|
470
|
+
archive.close()
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""Tests for distutils.spawn."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import stat
|
|
5
|
+
import sys
|
|
6
|
+
import unittest.mock as mock
|
|
7
|
+
from distutils.errors import DistutilsExecError
|
|
8
|
+
from distutils.spawn import find_executable, spawn
|
|
9
|
+
from distutils.tests import support
|
|
10
|
+
|
|
11
|
+
import path
|
|
12
|
+
import pytest
|
|
13
|
+
from test.support import unix_shell
|
|
14
|
+
|
|
15
|
+
from .compat import py39 as os_helper
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TestSpawn(support.TempdirManager):
|
|
19
|
+
@pytest.mark.skipif("os.name not in ('nt', 'posix')")
|
|
20
|
+
def test_spawn(self):
|
|
21
|
+
tmpdir = self.mkdtemp()
|
|
22
|
+
|
|
23
|
+
# creating something executable
|
|
24
|
+
# through the shell that returns 1
|
|
25
|
+
if sys.platform != 'win32':
|
|
26
|
+
exe = os.path.join(tmpdir, 'foo.sh')
|
|
27
|
+
self.write_file(exe, f'#!{unix_shell}\nexit 1')
|
|
28
|
+
else:
|
|
29
|
+
exe = os.path.join(tmpdir, 'foo.bat')
|
|
30
|
+
self.write_file(exe, 'exit 1')
|
|
31
|
+
|
|
32
|
+
os.chmod(exe, 0o777)
|
|
33
|
+
with pytest.raises(DistutilsExecError):
|
|
34
|
+
spawn([exe])
|
|
35
|
+
|
|
36
|
+
# now something that works
|
|
37
|
+
if sys.platform != 'win32':
|
|
38
|
+
exe = os.path.join(tmpdir, 'foo.sh')
|
|
39
|
+
self.write_file(exe, f'#!{unix_shell}\nexit 0')
|
|
40
|
+
else:
|
|
41
|
+
exe = os.path.join(tmpdir, 'foo.bat')
|
|
42
|
+
self.write_file(exe, 'exit 0')
|
|
43
|
+
|
|
44
|
+
os.chmod(exe, 0o777)
|
|
45
|
+
spawn([exe]) # should work without any error
|
|
46
|
+
|
|
47
|
+
def test_find_executable(self, tmp_path):
|
|
48
|
+
program_path = self._make_executable(tmp_path, '.exe')
|
|
49
|
+
program = program_path.name
|
|
50
|
+
program_noeext = program_path.with_suffix('').name
|
|
51
|
+
filename = str(program_path)
|
|
52
|
+
tmp_dir = path.Path(tmp_path)
|
|
53
|
+
|
|
54
|
+
# test path parameter
|
|
55
|
+
rv = find_executable(program, path=tmp_dir)
|
|
56
|
+
assert rv == filename
|
|
57
|
+
|
|
58
|
+
if sys.platform == 'win32':
|
|
59
|
+
# test without ".exe" extension
|
|
60
|
+
rv = find_executable(program_noeext, path=tmp_dir)
|
|
61
|
+
assert rv == filename
|
|
62
|
+
|
|
63
|
+
# test find in the current directory
|
|
64
|
+
with tmp_dir:
|
|
65
|
+
rv = find_executable(program)
|
|
66
|
+
assert rv == program
|
|
67
|
+
|
|
68
|
+
# test non-existent program
|
|
69
|
+
dont_exist_program = "dontexist_" + program
|
|
70
|
+
rv = find_executable(dont_exist_program, path=tmp_dir)
|
|
71
|
+
assert rv is None
|
|
72
|
+
|
|
73
|
+
# PATH='': no match, except in the current directory
|
|
74
|
+
with os_helper.EnvironmentVarGuard() as env:
|
|
75
|
+
env['PATH'] = ''
|
|
76
|
+
with (
|
|
77
|
+
mock.patch(
|
|
78
|
+
'distutils.spawn.os.confstr', return_value=tmp_dir, create=True
|
|
79
|
+
),
|
|
80
|
+
mock.patch('distutils.spawn.os.defpath', tmp_dir),
|
|
81
|
+
):
|
|
82
|
+
rv = find_executable(program)
|
|
83
|
+
assert rv is None
|
|
84
|
+
|
|
85
|
+
# look in current directory
|
|
86
|
+
with tmp_dir:
|
|
87
|
+
rv = find_executable(program)
|
|
88
|
+
assert rv == program
|
|
89
|
+
|
|
90
|
+
# PATH=':': explicitly looks in the current directory
|
|
91
|
+
with os_helper.EnvironmentVarGuard() as env:
|
|
92
|
+
env['PATH'] = os.pathsep
|
|
93
|
+
with (
|
|
94
|
+
mock.patch('distutils.spawn.os.confstr', return_value='', create=True),
|
|
95
|
+
mock.patch('distutils.spawn.os.defpath', ''),
|
|
96
|
+
):
|
|
97
|
+
rv = find_executable(program)
|
|
98
|
+
assert rv is None
|
|
99
|
+
|
|
100
|
+
# look in current directory
|
|
101
|
+
with tmp_dir:
|
|
102
|
+
rv = find_executable(program)
|
|
103
|
+
assert rv == program
|
|
104
|
+
|
|
105
|
+
# missing PATH: test os.confstr("CS_PATH") and os.defpath
|
|
106
|
+
with os_helper.EnvironmentVarGuard() as env:
|
|
107
|
+
env.pop('PATH', None)
|
|
108
|
+
|
|
109
|
+
# without confstr
|
|
110
|
+
with (
|
|
111
|
+
mock.patch(
|
|
112
|
+
'distutils.spawn.os.confstr', side_effect=ValueError, create=True
|
|
113
|
+
),
|
|
114
|
+
mock.patch('distutils.spawn.os.defpath', tmp_dir),
|
|
115
|
+
):
|
|
116
|
+
rv = find_executable(program)
|
|
117
|
+
assert rv == filename
|
|
118
|
+
|
|
119
|
+
# with confstr
|
|
120
|
+
with (
|
|
121
|
+
mock.patch(
|
|
122
|
+
'distutils.spawn.os.confstr', return_value=tmp_dir, create=True
|
|
123
|
+
),
|
|
124
|
+
mock.patch('distutils.spawn.os.defpath', ''),
|
|
125
|
+
):
|
|
126
|
+
rv = find_executable(program)
|
|
127
|
+
assert rv == filename
|
|
128
|
+
|
|
129
|
+
@staticmethod
|
|
130
|
+
def _make_executable(tmp_path, ext):
|
|
131
|
+
# Give the temporary program a suffix regardless of platform.
|
|
132
|
+
# It's needed on Windows and not harmful on others.
|
|
133
|
+
program = tmp_path.joinpath('program').with_suffix(ext)
|
|
134
|
+
program.write_text("", encoding='utf-8')
|
|
135
|
+
program.chmod(stat.S_IXUSR)
|
|
136
|
+
return program
|
|
137
|
+
|
|
138
|
+
def test_spawn_missing_exe(self):
|
|
139
|
+
with pytest.raises(DistutilsExecError) as ctx:
|
|
140
|
+
spawn(['does-not-exist'])
|
|
141
|
+
assert "command 'does-not-exist' failed" in str(ctx.value)
|