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,134 @@
|
|
|
1
|
+
"""Support code for distutils test cases."""
|
|
2
|
+
|
|
3
|
+
import itertools
|
|
4
|
+
import os
|
|
5
|
+
import pathlib
|
|
6
|
+
import shutil
|
|
7
|
+
import sys
|
|
8
|
+
import sysconfig
|
|
9
|
+
import tempfile
|
|
10
|
+
from distutils.core import Distribution
|
|
11
|
+
|
|
12
|
+
import pytest
|
|
13
|
+
from more_itertools import always_iterable
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@pytest.mark.usefixtures('distutils_managed_tempdir')
|
|
17
|
+
class TempdirManager:
|
|
18
|
+
"""
|
|
19
|
+
Mix-in class that handles temporary directories for test cases.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def mkdtemp(self):
|
|
23
|
+
"""Create a temporary directory that will be cleaned up.
|
|
24
|
+
|
|
25
|
+
Returns the path of the directory.
|
|
26
|
+
"""
|
|
27
|
+
d = tempfile.mkdtemp()
|
|
28
|
+
self.tempdirs.append(d)
|
|
29
|
+
return d
|
|
30
|
+
|
|
31
|
+
def write_file(self, path, content='xxx'):
|
|
32
|
+
"""Writes a file in the given path.
|
|
33
|
+
|
|
34
|
+
path can be a string or a sequence.
|
|
35
|
+
"""
|
|
36
|
+
pathlib.Path(*always_iterable(path)).write_text(content, encoding='utf-8')
|
|
37
|
+
|
|
38
|
+
def create_dist(self, pkg_name='foo', **kw):
|
|
39
|
+
"""Will generate a test environment.
|
|
40
|
+
|
|
41
|
+
This function creates:
|
|
42
|
+
- a Distribution instance using keywords
|
|
43
|
+
- a temporary directory with a package structure
|
|
44
|
+
|
|
45
|
+
It returns the package directory and the distribution
|
|
46
|
+
instance.
|
|
47
|
+
"""
|
|
48
|
+
tmp_dir = self.mkdtemp()
|
|
49
|
+
pkg_dir = os.path.join(tmp_dir, pkg_name)
|
|
50
|
+
os.mkdir(pkg_dir)
|
|
51
|
+
dist = Distribution(attrs=kw)
|
|
52
|
+
|
|
53
|
+
return pkg_dir, dist
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class DummyCommand:
|
|
57
|
+
"""Class to store options for retrieval via set_undefined_options()."""
|
|
58
|
+
|
|
59
|
+
def __init__(self, **kwargs):
|
|
60
|
+
vars(self).update(kwargs)
|
|
61
|
+
|
|
62
|
+
def ensure_finalized(self):
|
|
63
|
+
pass
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def copy_xxmodule_c(directory):
|
|
67
|
+
"""Helper for tests that need the xxmodule.c source file.
|
|
68
|
+
|
|
69
|
+
Example use:
|
|
70
|
+
|
|
71
|
+
def test_compile(self):
|
|
72
|
+
copy_xxmodule_c(self.tmpdir)
|
|
73
|
+
self.assertIn('xxmodule.c', os.listdir(self.tmpdir))
|
|
74
|
+
|
|
75
|
+
If the source file can be found, it will be copied to *directory*. If not,
|
|
76
|
+
the test will be skipped. Errors during copy are not caught.
|
|
77
|
+
"""
|
|
78
|
+
shutil.copy(_get_xxmodule_path(), os.path.join(directory, 'xxmodule.c'))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _get_xxmodule_path():
|
|
82
|
+
source_name = 'xxmodule.c' if sys.version_info > (3, 9) else 'xxmodule-3.8.c'
|
|
83
|
+
return os.path.join(os.path.dirname(__file__), source_name)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def fixup_build_ext(cmd):
|
|
87
|
+
"""Function needed to make build_ext tests pass.
|
|
88
|
+
|
|
89
|
+
When Python was built with --enable-shared on Unix, -L. is not enough to
|
|
90
|
+
find libpython<blah>.so, because regrtest runs in a tempdir, not in the
|
|
91
|
+
source directory where the .so lives.
|
|
92
|
+
|
|
93
|
+
When Python was built with in debug mode on Windows, build_ext commands
|
|
94
|
+
need their debug attribute set, and it is not done automatically for
|
|
95
|
+
some reason.
|
|
96
|
+
|
|
97
|
+
This function handles both of these things. Example use:
|
|
98
|
+
|
|
99
|
+
cmd = build_ext(dist)
|
|
100
|
+
support.fixup_build_ext(cmd)
|
|
101
|
+
cmd.ensure_finalized()
|
|
102
|
+
|
|
103
|
+
Unlike most other Unix platforms, Mac OS X embeds absolute paths
|
|
104
|
+
to shared libraries into executables, so the fixup is not needed there.
|
|
105
|
+
"""
|
|
106
|
+
if os.name == 'nt':
|
|
107
|
+
cmd.debug = sys.executable.endswith('_d.exe')
|
|
108
|
+
elif sysconfig.get_config_var('Py_ENABLE_SHARED'):
|
|
109
|
+
# To further add to the shared builds fun on Unix, we can't just add
|
|
110
|
+
# library_dirs to the Extension() instance because that doesn't get
|
|
111
|
+
# plumbed through to the final compiler command.
|
|
112
|
+
runshared = sysconfig.get_config_var('RUNSHARED')
|
|
113
|
+
if runshared is None:
|
|
114
|
+
cmd.library_dirs = ['.']
|
|
115
|
+
else:
|
|
116
|
+
if sys.platform == 'darwin':
|
|
117
|
+
cmd.library_dirs = []
|
|
118
|
+
else:
|
|
119
|
+
name, equals, value = runshared.partition('=')
|
|
120
|
+
cmd.library_dirs = [d for d in value.split(os.pathsep) if d]
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def combine_markers(cls):
|
|
124
|
+
"""
|
|
125
|
+
pytest will honor markers as found on the class, but when
|
|
126
|
+
markers are on multiple subclasses, only one appears. Use
|
|
127
|
+
this decorator to combine those markers.
|
|
128
|
+
"""
|
|
129
|
+
cls.pytestmark = [
|
|
130
|
+
mark
|
|
131
|
+
for base in itertools.chain([cls], cls.__bases__)
|
|
132
|
+
for mark in getattr(base, 'pytestmark', [])
|
|
133
|
+
]
|
|
134
|
+
return cls
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"""Tests for distutils.archive_util."""
|
|
2
|
+
|
|
3
|
+
import functools
|
|
4
|
+
import operator
|
|
5
|
+
import os
|
|
6
|
+
import pathlib
|
|
7
|
+
import sys
|
|
8
|
+
import tarfile
|
|
9
|
+
from distutils import archive_util
|
|
10
|
+
from distutils.archive_util import (
|
|
11
|
+
ARCHIVE_FORMATS,
|
|
12
|
+
check_archive_formats,
|
|
13
|
+
make_archive,
|
|
14
|
+
make_tarball,
|
|
15
|
+
make_zipfile,
|
|
16
|
+
)
|
|
17
|
+
from distutils.spawn import spawn
|
|
18
|
+
from distutils.tests import support
|
|
19
|
+
from os.path import splitdrive
|
|
20
|
+
|
|
21
|
+
import path
|
|
22
|
+
import pytest
|
|
23
|
+
from test.support import patch
|
|
24
|
+
|
|
25
|
+
from .unix_compat import UID_0_SUPPORT, grp, pwd, require_uid_0, require_unix_id
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def can_fs_encode(filename):
|
|
29
|
+
"""
|
|
30
|
+
Return True if the filename can be saved in the file system.
|
|
31
|
+
"""
|
|
32
|
+
if os.path.supports_unicode_filenames:
|
|
33
|
+
return True
|
|
34
|
+
try:
|
|
35
|
+
filename.encode(sys.getfilesystemencoding())
|
|
36
|
+
except UnicodeEncodeError:
|
|
37
|
+
return False
|
|
38
|
+
return True
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def all_equal(values):
|
|
42
|
+
return functools.reduce(operator.eq, values)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def same_drive(*paths):
|
|
46
|
+
return all_equal(pathlib.Path(path).drive for path in paths)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class ArchiveUtilTestCase(support.TempdirManager):
|
|
50
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
51
|
+
def test_make_tarball(self, name='archive'):
|
|
52
|
+
# creating something to tar
|
|
53
|
+
tmpdir = self._create_files()
|
|
54
|
+
self._make_tarball(tmpdir, name, '.tar.gz')
|
|
55
|
+
# trying an uncompressed one
|
|
56
|
+
self._make_tarball(tmpdir, name, '.tar', compress=None)
|
|
57
|
+
|
|
58
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
59
|
+
def test_make_tarball_gzip(self):
|
|
60
|
+
tmpdir = self._create_files()
|
|
61
|
+
self._make_tarball(tmpdir, 'archive', '.tar.gz', compress='gzip')
|
|
62
|
+
|
|
63
|
+
def test_make_tarball_bzip2(self):
|
|
64
|
+
pytest.importorskip('bz2')
|
|
65
|
+
tmpdir = self._create_files()
|
|
66
|
+
self._make_tarball(tmpdir, 'archive', '.tar.bz2', compress='bzip2')
|
|
67
|
+
|
|
68
|
+
def test_make_tarball_xz(self):
|
|
69
|
+
pytest.importorskip('lzma')
|
|
70
|
+
tmpdir = self._create_files()
|
|
71
|
+
self._make_tarball(tmpdir, 'archive', '.tar.xz', compress='xz')
|
|
72
|
+
|
|
73
|
+
@pytest.mark.skipif("not can_fs_encode('årchiv')")
|
|
74
|
+
def test_make_tarball_latin1(self):
|
|
75
|
+
"""
|
|
76
|
+
Mirror test_make_tarball, except filename contains latin characters.
|
|
77
|
+
"""
|
|
78
|
+
self.test_make_tarball('årchiv') # note this isn't a real word
|
|
79
|
+
|
|
80
|
+
@pytest.mark.skipif("not can_fs_encode('のアーカイブ')")
|
|
81
|
+
def test_make_tarball_extended(self):
|
|
82
|
+
"""
|
|
83
|
+
Mirror test_make_tarball, except filename contains extended
|
|
84
|
+
characters outside the latin charset.
|
|
85
|
+
"""
|
|
86
|
+
self.test_make_tarball('のアーカイブ') # japanese for archive
|
|
87
|
+
|
|
88
|
+
def _make_tarball(self, tmpdir, target_name, suffix, **kwargs):
|
|
89
|
+
tmpdir2 = self.mkdtemp()
|
|
90
|
+
if same_drive(tmpdir, tmpdir2):
|
|
91
|
+
pytest.skip("source and target should be on same drive")
|
|
92
|
+
|
|
93
|
+
base_name = os.path.join(tmpdir2, target_name)
|
|
94
|
+
|
|
95
|
+
# working with relative paths to avoid tar warnings
|
|
96
|
+
with path.Path(tmpdir):
|
|
97
|
+
make_tarball(splitdrive(base_name)[1], 'dist', **kwargs)
|
|
98
|
+
|
|
99
|
+
# check if the compressed tarball was created
|
|
100
|
+
tarball = base_name + suffix
|
|
101
|
+
assert os.path.exists(tarball)
|
|
102
|
+
assert self._tarinfo(tarball) == self._created_files
|
|
103
|
+
|
|
104
|
+
def _tarinfo(self, path):
|
|
105
|
+
tar = tarfile.open(path)
|
|
106
|
+
try:
|
|
107
|
+
names = tar.getnames()
|
|
108
|
+
names.sort()
|
|
109
|
+
return names
|
|
110
|
+
finally:
|
|
111
|
+
tar.close()
|
|
112
|
+
|
|
113
|
+
_zip_created_files = [
|
|
114
|
+
'dist/',
|
|
115
|
+
'dist/file1',
|
|
116
|
+
'dist/file2',
|
|
117
|
+
'dist/sub/',
|
|
118
|
+
'dist/sub/file3',
|
|
119
|
+
'dist/sub2/',
|
|
120
|
+
]
|
|
121
|
+
_created_files = [p.rstrip('/') for p in _zip_created_files]
|
|
122
|
+
|
|
123
|
+
def _create_files(self):
|
|
124
|
+
# creating something to tar
|
|
125
|
+
tmpdir = self.mkdtemp()
|
|
126
|
+
dist = os.path.join(tmpdir, 'dist')
|
|
127
|
+
os.mkdir(dist)
|
|
128
|
+
self.write_file([dist, 'file1'], 'xxx')
|
|
129
|
+
self.write_file([dist, 'file2'], 'xxx')
|
|
130
|
+
os.mkdir(os.path.join(dist, 'sub'))
|
|
131
|
+
self.write_file([dist, 'sub', 'file3'], 'xxx')
|
|
132
|
+
os.mkdir(os.path.join(dist, 'sub2'))
|
|
133
|
+
return tmpdir
|
|
134
|
+
|
|
135
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
136
|
+
@pytest.mark.skipif("not (shutil.which('tar') and shutil.which('gzip'))")
|
|
137
|
+
def test_tarfile_vs_tar(self):
|
|
138
|
+
tmpdir = self._create_files()
|
|
139
|
+
tmpdir2 = self.mkdtemp()
|
|
140
|
+
base_name = os.path.join(tmpdir2, 'archive')
|
|
141
|
+
old_dir = os.getcwd()
|
|
142
|
+
os.chdir(tmpdir)
|
|
143
|
+
try:
|
|
144
|
+
make_tarball(base_name, 'dist')
|
|
145
|
+
finally:
|
|
146
|
+
os.chdir(old_dir)
|
|
147
|
+
|
|
148
|
+
# check if the compressed tarball was created
|
|
149
|
+
tarball = base_name + '.tar.gz'
|
|
150
|
+
assert os.path.exists(tarball)
|
|
151
|
+
|
|
152
|
+
# now create another tarball using `tar`
|
|
153
|
+
tarball2 = os.path.join(tmpdir, 'archive2.tar.gz')
|
|
154
|
+
tar_cmd = ['tar', '-cf', 'archive2.tar', 'dist']
|
|
155
|
+
gzip_cmd = ['gzip', '-f', '-9', 'archive2.tar']
|
|
156
|
+
old_dir = os.getcwd()
|
|
157
|
+
os.chdir(tmpdir)
|
|
158
|
+
try:
|
|
159
|
+
spawn(tar_cmd)
|
|
160
|
+
spawn(gzip_cmd)
|
|
161
|
+
finally:
|
|
162
|
+
os.chdir(old_dir)
|
|
163
|
+
|
|
164
|
+
assert os.path.exists(tarball2)
|
|
165
|
+
# let's compare both tarballs
|
|
166
|
+
assert self._tarinfo(tarball) == self._created_files
|
|
167
|
+
assert self._tarinfo(tarball2) == self._created_files
|
|
168
|
+
|
|
169
|
+
# trying an uncompressed one
|
|
170
|
+
base_name = os.path.join(tmpdir2, 'archive')
|
|
171
|
+
old_dir = os.getcwd()
|
|
172
|
+
os.chdir(tmpdir)
|
|
173
|
+
try:
|
|
174
|
+
make_tarball(base_name, 'dist', compress=None)
|
|
175
|
+
finally:
|
|
176
|
+
os.chdir(old_dir)
|
|
177
|
+
tarball = base_name + '.tar'
|
|
178
|
+
assert os.path.exists(tarball)
|
|
179
|
+
|
|
180
|
+
# now for a dry_run
|
|
181
|
+
base_name = os.path.join(tmpdir2, 'archive')
|
|
182
|
+
old_dir = os.getcwd()
|
|
183
|
+
os.chdir(tmpdir)
|
|
184
|
+
try:
|
|
185
|
+
make_tarball(base_name, 'dist', compress=None, dry_run=True)
|
|
186
|
+
finally:
|
|
187
|
+
os.chdir(old_dir)
|
|
188
|
+
tarball = base_name + '.tar'
|
|
189
|
+
assert os.path.exists(tarball)
|
|
190
|
+
|
|
191
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
192
|
+
def test_make_zipfile(self):
|
|
193
|
+
zipfile = pytest.importorskip('zipfile')
|
|
194
|
+
# creating something to tar
|
|
195
|
+
tmpdir = self._create_files()
|
|
196
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
197
|
+
with path.Path(tmpdir):
|
|
198
|
+
make_zipfile(base_name, 'dist')
|
|
199
|
+
|
|
200
|
+
# check if the compressed tarball was created
|
|
201
|
+
tarball = base_name + '.zip'
|
|
202
|
+
assert os.path.exists(tarball)
|
|
203
|
+
with zipfile.ZipFile(tarball) as zf:
|
|
204
|
+
assert sorted(zf.namelist()) == self._zip_created_files
|
|
205
|
+
|
|
206
|
+
def test_make_zipfile_no_zlib(self):
|
|
207
|
+
zipfile = pytest.importorskip('zipfile')
|
|
208
|
+
patch(self, archive_util.zipfile, 'zlib', None) # force zlib ImportError
|
|
209
|
+
|
|
210
|
+
called = []
|
|
211
|
+
zipfile_class = zipfile.ZipFile
|
|
212
|
+
|
|
213
|
+
def fake_zipfile(*a, **kw):
|
|
214
|
+
if kw.get('compression', None) == zipfile.ZIP_STORED:
|
|
215
|
+
called.append((a, kw))
|
|
216
|
+
return zipfile_class(*a, **kw)
|
|
217
|
+
|
|
218
|
+
patch(self, archive_util.zipfile, 'ZipFile', fake_zipfile)
|
|
219
|
+
|
|
220
|
+
# create something to tar and compress
|
|
221
|
+
tmpdir = self._create_files()
|
|
222
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
223
|
+
with path.Path(tmpdir):
|
|
224
|
+
make_zipfile(base_name, 'dist')
|
|
225
|
+
|
|
226
|
+
tarball = base_name + '.zip'
|
|
227
|
+
assert called == [((tarball, "w"), {'compression': zipfile.ZIP_STORED})]
|
|
228
|
+
assert os.path.exists(tarball)
|
|
229
|
+
with zipfile.ZipFile(tarball) as zf:
|
|
230
|
+
assert sorted(zf.namelist()) == self._zip_created_files
|
|
231
|
+
|
|
232
|
+
def test_check_archive_formats(self):
|
|
233
|
+
assert check_archive_formats(['gztar', 'xxx', 'zip']) == 'xxx'
|
|
234
|
+
assert (
|
|
235
|
+
check_archive_formats(['gztar', 'bztar', 'xztar', 'ztar', 'tar', 'zip'])
|
|
236
|
+
is None
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
def test_make_archive(self):
|
|
240
|
+
tmpdir = self.mkdtemp()
|
|
241
|
+
base_name = os.path.join(tmpdir, 'archive')
|
|
242
|
+
with pytest.raises(ValueError):
|
|
243
|
+
make_archive(base_name, 'xxx')
|
|
244
|
+
|
|
245
|
+
def test_make_archive_cwd(self):
|
|
246
|
+
current_dir = os.getcwd()
|
|
247
|
+
|
|
248
|
+
def _breaks(*args, **kw):
|
|
249
|
+
raise RuntimeError()
|
|
250
|
+
|
|
251
|
+
ARCHIVE_FORMATS['xxx'] = (_breaks, [], 'xxx file')
|
|
252
|
+
try:
|
|
253
|
+
try:
|
|
254
|
+
make_archive('xxx', 'xxx', root_dir=self.mkdtemp())
|
|
255
|
+
except Exception:
|
|
256
|
+
pass
|
|
257
|
+
assert os.getcwd() == current_dir
|
|
258
|
+
finally:
|
|
259
|
+
ARCHIVE_FORMATS.pop('xxx')
|
|
260
|
+
|
|
261
|
+
def test_make_archive_tar(self):
|
|
262
|
+
base_dir = self._create_files()
|
|
263
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
264
|
+
res = make_archive(base_name, 'tar', base_dir, 'dist')
|
|
265
|
+
assert os.path.exists(res)
|
|
266
|
+
assert os.path.basename(res) == 'archive.tar'
|
|
267
|
+
assert self._tarinfo(res) == self._created_files
|
|
268
|
+
|
|
269
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
270
|
+
def test_make_archive_gztar(self):
|
|
271
|
+
base_dir = self._create_files()
|
|
272
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
273
|
+
res = make_archive(base_name, 'gztar', base_dir, 'dist')
|
|
274
|
+
assert os.path.exists(res)
|
|
275
|
+
assert os.path.basename(res) == 'archive.tar.gz'
|
|
276
|
+
assert self._tarinfo(res) == self._created_files
|
|
277
|
+
|
|
278
|
+
def test_make_archive_bztar(self):
|
|
279
|
+
pytest.importorskip('bz2')
|
|
280
|
+
base_dir = self._create_files()
|
|
281
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
282
|
+
res = make_archive(base_name, 'bztar', base_dir, 'dist')
|
|
283
|
+
assert os.path.exists(res)
|
|
284
|
+
assert os.path.basename(res) == 'archive.tar.bz2'
|
|
285
|
+
assert self._tarinfo(res) == self._created_files
|
|
286
|
+
|
|
287
|
+
def test_make_archive_xztar(self):
|
|
288
|
+
pytest.importorskip('lzma')
|
|
289
|
+
base_dir = self._create_files()
|
|
290
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
291
|
+
res = make_archive(base_name, 'xztar', base_dir, 'dist')
|
|
292
|
+
assert os.path.exists(res)
|
|
293
|
+
assert os.path.basename(res) == 'archive.tar.xz'
|
|
294
|
+
assert self._tarinfo(res) == self._created_files
|
|
295
|
+
|
|
296
|
+
def test_make_archive_owner_group(self):
|
|
297
|
+
# testing make_archive with owner and group, with various combinations
|
|
298
|
+
# this works even if there's not gid/uid support
|
|
299
|
+
if UID_0_SUPPORT:
|
|
300
|
+
group = grp.getgrgid(0)[0]
|
|
301
|
+
owner = pwd.getpwuid(0)[0]
|
|
302
|
+
else:
|
|
303
|
+
group = owner = 'root'
|
|
304
|
+
|
|
305
|
+
base_dir = self._create_files()
|
|
306
|
+
root_dir = self.mkdtemp()
|
|
307
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
308
|
+
res = make_archive(
|
|
309
|
+
base_name, 'zip', root_dir, base_dir, owner=owner, group=group
|
|
310
|
+
)
|
|
311
|
+
assert os.path.exists(res)
|
|
312
|
+
|
|
313
|
+
res = make_archive(base_name, 'zip', root_dir, base_dir)
|
|
314
|
+
assert os.path.exists(res)
|
|
315
|
+
|
|
316
|
+
res = make_archive(
|
|
317
|
+
base_name, 'tar', root_dir, base_dir, owner=owner, group=group
|
|
318
|
+
)
|
|
319
|
+
assert os.path.exists(res)
|
|
320
|
+
|
|
321
|
+
res = make_archive(
|
|
322
|
+
base_name, 'tar', root_dir, base_dir, owner='kjhkjhkjg', group='oihohoh'
|
|
323
|
+
)
|
|
324
|
+
assert os.path.exists(res)
|
|
325
|
+
|
|
326
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
327
|
+
@require_unix_id
|
|
328
|
+
@require_uid_0
|
|
329
|
+
def test_tarfile_root_owner(self):
|
|
330
|
+
tmpdir = self._create_files()
|
|
331
|
+
base_name = os.path.join(self.mkdtemp(), 'archive')
|
|
332
|
+
old_dir = os.getcwd()
|
|
333
|
+
os.chdir(tmpdir)
|
|
334
|
+
group = grp.getgrgid(0)[0]
|
|
335
|
+
owner = pwd.getpwuid(0)[0]
|
|
336
|
+
try:
|
|
337
|
+
archive_name = make_tarball(
|
|
338
|
+
base_name, 'dist', compress=None, owner=owner, group=group
|
|
339
|
+
)
|
|
340
|
+
finally:
|
|
341
|
+
os.chdir(old_dir)
|
|
342
|
+
|
|
343
|
+
# check if the compressed tarball was created
|
|
344
|
+
assert os.path.exists(archive_name)
|
|
345
|
+
|
|
346
|
+
# now checks the rights
|
|
347
|
+
archive = tarfile.open(archive_name)
|
|
348
|
+
try:
|
|
349
|
+
for member in archive.getmembers():
|
|
350
|
+
assert member.uid == 0
|
|
351
|
+
assert member.gid == 0
|
|
352
|
+
finally:
|
|
353
|
+
archive.close()
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Tests for distutils.command.bdist."""
|
|
2
|
+
|
|
3
|
+
from distutils.command.bdist import bdist
|
|
4
|
+
from distutils.tests import support
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class TestBuild(support.TempdirManager):
|
|
8
|
+
def test_formats(self):
|
|
9
|
+
# let's create a command and make sure
|
|
10
|
+
# we can set the format
|
|
11
|
+
dist = self.create_dist()[1]
|
|
12
|
+
cmd = bdist(dist)
|
|
13
|
+
cmd.formats = ['gztar']
|
|
14
|
+
cmd.ensure_finalized()
|
|
15
|
+
assert cmd.formats == ['gztar']
|
|
16
|
+
|
|
17
|
+
# what formats does bdist offer?
|
|
18
|
+
formats = [
|
|
19
|
+
'bztar',
|
|
20
|
+
'gztar',
|
|
21
|
+
'rpm',
|
|
22
|
+
'tar',
|
|
23
|
+
'xztar',
|
|
24
|
+
'zip',
|
|
25
|
+
'ztar',
|
|
26
|
+
]
|
|
27
|
+
found = sorted(cmd.format_commands)
|
|
28
|
+
assert found == formats
|
|
29
|
+
|
|
30
|
+
def test_skip_build(self):
|
|
31
|
+
# bug #10946: bdist --skip-build should trickle down to subcommands
|
|
32
|
+
dist = self.create_dist()[1]
|
|
33
|
+
cmd = bdist(dist)
|
|
34
|
+
cmd.skip_build = True
|
|
35
|
+
cmd.ensure_finalized()
|
|
36
|
+
dist.command_obj['bdist'] = cmd
|
|
37
|
+
|
|
38
|
+
names = [
|
|
39
|
+
'bdist_dumb',
|
|
40
|
+
] # bdist_rpm does not support --skip-build
|
|
41
|
+
|
|
42
|
+
for name in names:
|
|
43
|
+
subcmd = cmd.get_finalized_command(name)
|
|
44
|
+
if getattr(subcmd, '_unsupported', False):
|
|
45
|
+
# command is not supported on this build
|
|
46
|
+
continue
|
|
47
|
+
assert subcmd.skip_build, f'{name} should take --skip-build from bdist'
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Tests for distutils.command.bdist_dumb."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
import zipfile
|
|
6
|
+
from distutils.command.bdist_dumb import bdist_dumb
|
|
7
|
+
from distutils.core import Distribution
|
|
8
|
+
from distutils.tests import support
|
|
9
|
+
|
|
10
|
+
import pytest
|
|
11
|
+
|
|
12
|
+
SETUP_PY = """\
|
|
13
|
+
from distutils.core import setup
|
|
14
|
+
import foo
|
|
15
|
+
|
|
16
|
+
setup(name='foo', version='0.1', py_modules=['foo'],
|
|
17
|
+
url='xxx', author='xxx', author_email='xxx')
|
|
18
|
+
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@support.combine_markers
|
|
23
|
+
@pytest.mark.usefixtures('save_env')
|
|
24
|
+
@pytest.mark.usefixtures('save_argv')
|
|
25
|
+
@pytest.mark.usefixtures('save_cwd')
|
|
26
|
+
class TestBuildDumb(
|
|
27
|
+
support.TempdirManager,
|
|
28
|
+
):
|
|
29
|
+
@pytest.mark.usefixtures('needs_zlib')
|
|
30
|
+
def test_simple_built(self):
|
|
31
|
+
# let's create a simple package
|
|
32
|
+
tmp_dir = self.mkdtemp()
|
|
33
|
+
pkg_dir = os.path.join(tmp_dir, 'foo')
|
|
34
|
+
os.mkdir(pkg_dir)
|
|
35
|
+
self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
|
|
36
|
+
self.write_file((pkg_dir, 'foo.py'), '#')
|
|
37
|
+
self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
|
|
38
|
+
self.write_file((pkg_dir, 'README'), '')
|
|
39
|
+
|
|
40
|
+
dist = Distribution({
|
|
41
|
+
'name': 'foo',
|
|
42
|
+
'version': '0.1',
|
|
43
|
+
'py_modules': ['foo'],
|
|
44
|
+
'url': 'xxx',
|
|
45
|
+
'author': 'xxx',
|
|
46
|
+
'author_email': 'xxx',
|
|
47
|
+
})
|
|
48
|
+
dist.script_name = 'setup.py'
|
|
49
|
+
os.chdir(pkg_dir)
|
|
50
|
+
|
|
51
|
+
sys.argv = ['setup.py']
|
|
52
|
+
cmd = bdist_dumb(dist)
|
|
53
|
+
|
|
54
|
+
# so the output is the same no matter
|
|
55
|
+
# what is the platform
|
|
56
|
+
cmd.format = 'zip'
|
|
57
|
+
|
|
58
|
+
cmd.ensure_finalized()
|
|
59
|
+
cmd.run()
|
|
60
|
+
|
|
61
|
+
# see what we have
|
|
62
|
+
dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
|
|
63
|
+
base = f"{dist.get_fullname()}.{cmd.plat_name}.zip"
|
|
64
|
+
|
|
65
|
+
assert dist_created == [base]
|
|
66
|
+
|
|
67
|
+
# now let's check what we have in the zip file
|
|
68
|
+
fp = zipfile.ZipFile(os.path.join('dist', base))
|
|
69
|
+
try:
|
|
70
|
+
contents = fp.namelist()
|
|
71
|
+
finally:
|
|
72
|
+
fp.close()
|
|
73
|
+
|
|
74
|
+
contents = sorted(filter(None, map(os.path.basename, contents)))
|
|
75
|
+
wanted = ['foo-0.1-py{}.{}.egg-info'.format(*sys.version_info[:2]), 'foo.py']
|
|
76
|
+
if not sys.dont_write_bytecode:
|
|
77
|
+
wanted.append(f'foo.{sys.implementation.cache_tag}.pyc')
|
|
78
|
+
assert contents == sorted(wanted)
|