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,77 @@
|
|
|
1
|
+
from setuptools.command.setopt import config_file, edit_config, option_base
|
|
2
|
+
|
|
3
|
+
from distutils.errors import DistutilsOptionError
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def shquote(arg):
|
|
7
|
+
"""Quote an argument for later parsing by shlex.split()"""
|
|
8
|
+
for c in '"', "'", "\\", "#":
|
|
9
|
+
if c in arg:
|
|
10
|
+
return repr(arg)
|
|
11
|
+
if arg.split() != [arg]:
|
|
12
|
+
return repr(arg)
|
|
13
|
+
return arg
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class alias(option_base):
|
|
17
|
+
"""Define a shortcut that invokes one or more commands"""
|
|
18
|
+
|
|
19
|
+
description = "define a shortcut to invoke one or more commands"
|
|
20
|
+
command_consumes_arguments = True
|
|
21
|
+
|
|
22
|
+
user_options = [
|
|
23
|
+
('remove', 'r', 'remove (unset) the alias'),
|
|
24
|
+
] + option_base.user_options
|
|
25
|
+
|
|
26
|
+
boolean_options = option_base.boolean_options + ['remove']
|
|
27
|
+
|
|
28
|
+
def initialize_options(self):
|
|
29
|
+
option_base.initialize_options(self)
|
|
30
|
+
self.args = None
|
|
31
|
+
self.remove = None
|
|
32
|
+
|
|
33
|
+
def finalize_options(self) -> None:
|
|
34
|
+
option_base.finalize_options(self)
|
|
35
|
+
if self.remove and len(self.args) != 1:
|
|
36
|
+
raise DistutilsOptionError(
|
|
37
|
+
"Must specify exactly one argument (the alias name) when using --remove"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
def run(self) -> None:
|
|
41
|
+
aliases = self.distribution.get_option_dict('aliases')
|
|
42
|
+
|
|
43
|
+
if not self.args:
|
|
44
|
+
print("Command Aliases")
|
|
45
|
+
print("---------------")
|
|
46
|
+
for alias in aliases:
|
|
47
|
+
print("setup.py alias", format_alias(alias, aliases))
|
|
48
|
+
return
|
|
49
|
+
|
|
50
|
+
elif len(self.args) == 1:
|
|
51
|
+
(alias,) = self.args
|
|
52
|
+
if self.remove:
|
|
53
|
+
command = None
|
|
54
|
+
elif alias in aliases:
|
|
55
|
+
print("setup.py alias", format_alias(alias, aliases))
|
|
56
|
+
return
|
|
57
|
+
else:
|
|
58
|
+
print(f"No alias definition found for {alias!r}")
|
|
59
|
+
return
|
|
60
|
+
else:
|
|
61
|
+
alias = self.args[0]
|
|
62
|
+
command = ' '.join(map(shquote, self.args[1:]))
|
|
63
|
+
|
|
64
|
+
edit_config(self.filename, {'aliases': {alias: command}}, self.dry_run)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def format_alias(name, aliases):
|
|
68
|
+
source, command = aliases[name]
|
|
69
|
+
if source == config_file('global'):
|
|
70
|
+
source = '--global-config '
|
|
71
|
+
elif source == config_file('user'):
|
|
72
|
+
source = '--user-config '
|
|
73
|
+
elif source == config_file('local'):
|
|
74
|
+
source = ''
|
|
75
|
+
else:
|
|
76
|
+
source = f'--filename={source!r}'
|
|
77
|
+
return source + name + ' ' + command
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
"""setuptools.command.bdist_egg
|
|
2
|
+
|
|
3
|
+
Build .egg distributions"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import marshal
|
|
8
|
+
import os
|
|
9
|
+
import re
|
|
10
|
+
import sys
|
|
11
|
+
import textwrap
|
|
12
|
+
from sysconfig import get_path, get_platform, get_python_version
|
|
13
|
+
from types import CodeType
|
|
14
|
+
from typing import TYPE_CHECKING, Literal
|
|
15
|
+
|
|
16
|
+
from setuptools import Command
|
|
17
|
+
from setuptools.extension import Library
|
|
18
|
+
|
|
19
|
+
from .._path import StrPathT, ensure_directory
|
|
20
|
+
|
|
21
|
+
from distutils import log
|
|
22
|
+
from distutils.dir_util import mkpath, remove_tree
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from typing_extensions import TypeAlias
|
|
26
|
+
|
|
27
|
+
# Same as zipfile._ZipFileMode from typeshed
|
|
28
|
+
_ZipFileMode: TypeAlias = Literal["r", "w", "x", "a"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _get_purelib():
|
|
32
|
+
return get_path("purelib")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def strip_module(filename):
|
|
36
|
+
if '.' in filename:
|
|
37
|
+
filename = os.path.splitext(filename)[0]
|
|
38
|
+
if filename.endswith('module'):
|
|
39
|
+
filename = filename[:-6]
|
|
40
|
+
return filename
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def sorted_walk(dir):
|
|
44
|
+
"""Do os.walk in a reproducible way,
|
|
45
|
+
independent of indeterministic filesystem readdir order
|
|
46
|
+
"""
|
|
47
|
+
for base, dirs, files in os.walk(dir):
|
|
48
|
+
dirs.sort()
|
|
49
|
+
files.sort()
|
|
50
|
+
yield base, dirs, files
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def write_stub(resource, pyfile) -> None:
|
|
54
|
+
_stub_template = textwrap.dedent(
|
|
55
|
+
"""
|
|
56
|
+
def __bootstrap__():
|
|
57
|
+
global __bootstrap__, __loader__, __file__
|
|
58
|
+
import sys, importlib.resources as irs, importlib.util
|
|
59
|
+
with irs.as_file(irs.files(__name__).joinpath(%r)) as __file__:
|
|
60
|
+
__loader__ = None; del __bootstrap__, __loader__
|
|
61
|
+
spec = importlib.util.spec_from_file_location(__name__,__file__)
|
|
62
|
+
mod = importlib.util.module_from_spec(spec)
|
|
63
|
+
spec.loader.exec_module(mod)
|
|
64
|
+
__bootstrap__()
|
|
65
|
+
"""
|
|
66
|
+
).lstrip()
|
|
67
|
+
with open(pyfile, 'w', encoding="utf-8") as f:
|
|
68
|
+
f.write(_stub_template % resource)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class bdist_egg(Command):
|
|
72
|
+
description = 'create an "egg" distribution'
|
|
73
|
+
|
|
74
|
+
user_options = [
|
|
75
|
+
('bdist-dir=', 'b', "temporary directory for creating the distribution"),
|
|
76
|
+
(
|
|
77
|
+
'plat-name=',
|
|
78
|
+
'p',
|
|
79
|
+
"platform name to embed in generated filenames "
|
|
80
|
+
"(by default uses `sysconfig.get_platform()`)",
|
|
81
|
+
),
|
|
82
|
+
('exclude-source-files', None, "remove all .py files from the generated egg"),
|
|
83
|
+
(
|
|
84
|
+
'keep-temp',
|
|
85
|
+
'k',
|
|
86
|
+
"keep the pseudo-installation tree around after "
|
|
87
|
+
"creating the distribution archive",
|
|
88
|
+
),
|
|
89
|
+
('dist-dir=', 'd', "directory to put final built distributions in"),
|
|
90
|
+
('skip-build', None, "skip rebuilding everything (for testing/debugging)"),
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
boolean_options = ['keep-temp', 'skip-build', 'exclude-source-files']
|
|
94
|
+
|
|
95
|
+
def initialize_options(self):
|
|
96
|
+
self.bdist_dir = None
|
|
97
|
+
self.plat_name = None
|
|
98
|
+
self.keep_temp = False
|
|
99
|
+
self.dist_dir = None
|
|
100
|
+
self.skip_build = False
|
|
101
|
+
self.egg_output = None
|
|
102
|
+
self.exclude_source_files = None
|
|
103
|
+
|
|
104
|
+
def finalize_options(self) -> None:
|
|
105
|
+
ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info")
|
|
106
|
+
self.egg_info = ei_cmd.egg_info
|
|
107
|
+
|
|
108
|
+
if self.bdist_dir is None:
|
|
109
|
+
bdist_base = self.get_finalized_command('bdist').bdist_base
|
|
110
|
+
self.bdist_dir = os.path.join(bdist_base, 'egg')
|
|
111
|
+
|
|
112
|
+
if self.plat_name is None:
|
|
113
|
+
self.plat_name = get_platform()
|
|
114
|
+
|
|
115
|
+
self.set_undefined_options('bdist', ('dist_dir', 'dist_dir'))
|
|
116
|
+
|
|
117
|
+
if self.egg_output is None:
|
|
118
|
+
# Compute filename of the output egg
|
|
119
|
+
basename = ei_cmd._get_egg_basename(
|
|
120
|
+
py_version=get_python_version(),
|
|
121
|
+
platform=self.distribution.has_ext_modules() and self.plat_name,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
self.egg_output = os.path.join(self.dist_dir, basename + '.egg')
|
|
125
|
+
|
|
126
|
+
def do_install_data(self) -> None:
|
|
127
|
+
# Hack for packages that install data to install's --install-lib
|
|
128
|
+
self.get_finalized_command('install').install_lib = self.bdist_dir
|
|
129
|
+
|
|
130
|
+
site_packages = os.path.normcase(os.path.realpath(_get_purelib()))
|
|
131
|
+
old, self.distribution.data_files = self.distribution.data_files, []
|
|
132
|
+
|
|
133
|
+
for item in old:
|
|
134
|
+
if isinstance(item, tuple) and len(item) == 2:
|
|
135
|
+
if os.path.isabs(item[0]):
|
|
136
|
+
realpath = os.path.realpath(item[0])
|
|
137
|
+
normalized = os.path.normcase(realpath)
|
|
138
|
+
if normalized == site_packages or normalized.startswith(
|
|
139
|
+
site_packages + os.sep
|
|
140
|
+
):
|
|
141
|
+
item = realpath[len(site_packages) + 1 :], item[1]
|
|
142
|
+
# XXX else: raise ???
|
|
143
|
+
self.distribution.data_files.append(item)
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
log.info("installing package data to %s", self.bdist_dir)
|
|
147
|
+
self.call_command('install_data', force=False, root=None)
|
|
148
|
+
finally:
|
|
149
|
+
self.distribution.data_files = old
|
|
150
|
+
|
|
151
|
+
def get_outputs(self):
|
|
152
|
+
return [self.egg_output]
|
|
153
|
+
|
|
154
|
+
def call_command(self, cmdname, **kw):
|
|
155
|
+
"""Invoke reinitialized command `cmdname` with keyword args"""
|
|
156
|
+
for dirname in INSTALL_DIRECTORY_ATTRS:
|
|
157
|
+
kw.setdefault(dirname, self.bdist_dir)
|
|
158
|
+
kw.setdefault('skip_build', self.skip_build)
|
|
159
|
+
kw.setdefault('dry_run', self.dry_run)
|
|
160
|
+
cmd = self.reinitialize_command(cmdname, **kw)
|
|
161
|
+
self.run_command(cmdname)
|
|
162
|
+
return cmd
|
|
163
|
+
|
|
164
|
+
def run(self): # noqa: C901 # is too complex (14) # FIXME
|
|
165
|
+
# Generate metadata first
|
|
166
|
+
self.run_command("egg_info")
|
|
167
|
+
# We run install_lib before install_data, because some data hacks
|
|
168
|
+
# pull their data path from the install_lib command.
|
|
169
|
+
log.info("installing library code to %s", self.bdist_dir)
|
|
170
|
+
instcmd = self.get_finalized_command('install')
|
|
171
|
+
old_root = instcmd.root
|
|
172
|
+
instcmd.root = None
|
|
173
|
+
if self.distribution.has_c_libraries() and not self.skip_build:
|
|
174
|
+
self.run_command('build_clib')
|
|
175
|
+
cmd = self.call_command('install_lib', warn_dir=False)
|
|
176
|
+
instcmd.root = old_root
|
|
177
|
+
|
|
178
|
+
all_outputs, ext_outputs = self.get_ext_outputs()
|
|
179
|
+
self.stubs = []
|
|
180
|
+
to_compile = []
|
|
181
|
+
for p, ext_name in enumerate(ext_outputs):
|
|
182
|
+
filename, _ext = os.path.splitext(ext_name)
|
|
183
|
+
pyfile = os.path.join(self.bdist_dir, strip_module(filename) + '.py')
|
|
184
|
+
self.stubs.append(pyfile)
|
|
185
|
+
log.info("creating stub loader for %s", ext_name)
|
|
186
|
+
if not self.dry_run:
|
|
187
|
+
write_stub(os.path.basename(ext_name), pyfile)
|
|
188
|
+
to_compile.append(pyfile)
|
|
189
|
+
ext_outputs[p] = ext_name.replace(os.sep, '/')
|
|
190
|
+
|
|
191
|
+
if to_compile:
|
|
192
|
+
cmd.byte_compile(to_compile)
|
|
193
|
+
if self.distribution.data_files:
|
|
194
|
+
self.do_install_data()
|
|
195
|
+
|
|
196
|
+
# Make the EGG-INFO directory
|
|
197
|
+
archive_root = self.bdist_dir
|
|
198
|
+
egg_info = os.path.join(archive_root, 'EGG-INFO')
|
|
199
|
+
self.mkpath(egg_info)
|
|
200
|
+
if self.distribution.scripts:
|
|
201
|
+
script_dir = os.path.join(egg_info, 'scripts')
|
|
202
|
+
log.info("installing scripts to %s", script_dir)
|
|
203
|
+
self.call_command('install_scripts', install_dir=script_dir, no_ep=True)
|
|
204
|
+
|
|
205
|
+
self.copy_metadata_to(egg_info)
|
|
206
|
+
native_libs = os.path.join(egg_info, "native_libs.txt")
|
|
207
|
+
if all_outputs:
|
|
208
|
+
log.info("writing %s", native_libs)
|
|
209
|
+
if not self.dry_run:
|
|
210
|
+
ensure_directory(native_libs)
|
|
211
|
+
with open(native_libs, 'wt', encoding="utf-8") as libs_file:
|
|
212
|
+
libs_file.write('\n'.join(all_outputs))
|
|
213
|
+
libs_file.write('\n')
|
|
214
|
+
elif os.path.isfile(native_libs):
|
|
215
|
+
log.info("removing %s", native_libs)
|
|
216
|
+
if not self.dry_run:
|
|
217
|
+
os.unlink(native_libs)
|
|
218
|
+
|
|
219
|
+
write_safety_flag(os.path.join(archive_root, 'EGG-INFO'), self.zip_safe())
|
|
220
|
+
|
|
221
|
+
if os.path.exists(os.path.join(self.egg_info, 'depends.txt')):
|
|
222
|
+
log.warn(
|
|
223
|
+
"WARNING: 'depends.txt' will not be used by setuptools 0.6!\n"
|
|
224
|
+
"Use the install_requires/extras_require setup() args instead."
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
if self.exclude_source_files:
|
|
228
|
+
self.zap_pyfiles()
|
|
229
|
+
|
|
230
|
+
# Make the archive
|
|
231
|
+
make_zipfile(
|
|
232
|
+
self.egg_output,
|
|
233
|
+
archive_root,
|
|
234
|
+
verbose=self.verbose,
|
|
235
|
+
dry_run=self.dry_run,
|
|
236
|
+
mode=self.gen_header(),
|
|
237
|
+
)
|
|
238
|
+
if not self.keep_temp:
|
|
239
|
+
remove_tree(self.bdist_dir, dry_run=self.dry_run)
|
|
240
|
+
|
|
241
|
+
# Add to 'Distribution.dist_files' so that the "upload" command works
|
|
242
|
+
getattr(self.distribution, 'dist_files', []).append((
|
|
243
|
+
'bdist_egg',
|
|
244
|
+
get_python_version(),
|
|
245
|
+
self.egg_output,
|
|
246
|
+
))
|
|
247
|
+
|
|
248
|
+
def zap_pyfiles(self):
|
|
249
|
+
log.info("Removing .py files from temporary directory")
|
|
250
|
+
for base, dirs, files in walk_egg(self.bdist_dir):
|
|
251
|
+
for name in files:
|
|
252
|
+
path = os.path.join(base, name)
|
|
253
|
+
|
|
254
|
+
if name.endswith('.py'):
|
|
255
|
+
log.debug("Deleting %s", path)
|
|
256
|
+
os.unlink(path)
|
|
257
|
+
|
|
258
|
+
if base.endswith('__pycache__'):
|
|
259
|
+
path_old = path
|
|
260
|
+
|
|
261
|
+
pattern = r'(?P<name>.+)\.(?P<magic>[^.]+)\.pyc'
|
|
262
|
+
m = re.match(pattern, name)
|
|
263
|
+
path_new = os.path.join(base, os.pardir, m.group('name') + '.pyc')
|
|
264
|
+
log.info(f"Renaming file from [{path_old}] to [{path_new}]")
|
|
265
|
+
try:
|
|
266
|
+
os.remove(path_new)
|
|
267
|
+
except OSError:
|
|
268
|
+
pass
|
|
269
|
+
os.rename(path_old, path_new)
|
|
270
|
+
|
|
271
|
+
def zip_safe(self):
|
|
272
|
+
safe = getattr(self.distribution, 'zip_safe', None)
|
|
273
|
+
if safe is not None:
|
|
274
|
+
return safe
|
|
275
|
+
log.warn("zip_safe flag not set; analyzing archive contents...")
|
|
276
|
+
return analyze_egg(self.bdist_dir, self.stubs)
|
|
277
|
+
|
|
278
|
+
def gen_header(self) -> Literal["w"]:
|
|
279
|
+
return 'w'
|
|
280
|
+
|
|
281
|
+
def copy_metadata_to(self, target_dir) -> None:
|
|
282
|
+
"Copy metadata (egg info) to the target_dir"
|
|
283
|
+
# normalize the path (so that a forward-slash in egg_info will
|
|
284
|
+
# match using startswith below)
|
|
285
|
+
norm_egg_info = os.path.normpath(self.egg_info)
|
|
286
|
+
prefix = os.path.join(norm_egg_info, '')
|
|
287
|
+
for path in self.ei_cmd.filelist.files:
|
|
288
|
+
if path.startswith(prefix):
|
|
289
|
+
target = os.path.join(target_dir, path[len(prefix) :])
|
|
290
|
+
ensure_directory(target)
|
|
291
|
+
self.copy_file(path, target)
|
|
292
|
+
|
|
293
|
+
def get_ext_outputs(self):
|
|
294
|
+
"""Get a list of relative paths to C extensions in the output distro"""
|
|
295
|
+
|
|
296
|
+
all_outputs = []
|
|
297
|
+
ext_outputs = []
|
|
298
|
+
|
|
299
|
+
paths = {self.bdist_dir: ''}
|
|
300
|
+
for base, dirs, files in sorted_walk(self.bdist_dir):
|
|
301
|
+
all_outputs.extend(
|
|
302
|
+
paths[base] + filename
|
|
303
|
+
for filename in files
|
|
304
|
+
if os.path.splitext(filename)[1].lower() in NATIVE_EXTENSIONS
|
|
305
|
+
)
|
|
306
|
+
for filename in dirs:
|
|
307
|
+
paths[os.path.join(base, filename)] = paths[base] + filename + '/'
|
|
308
|
+
|
|
309
|
+
if self.distribution.has_ext_modules():
|
|
310
|
+
build_cmd = self.get_finalized_command('build_ext')
|
|
311
|
+
for ext in build_cmd.extensions:
|
|
312
|
+
if isinstance(ext, Library):
|
|
313
|
+
continue
|
|
314
|
+
fullname = build_cmd.get_ext_fullname(ext.name)
|
|
315
|
+
filename = build_cmd.get_ext_filename(fullname)
|
|
316
|
+
if not os.path.basename(filename).startswith('dl-'):
|
|
317
|
+
if os.path.exists(os.path.join(self.bdist_dir, filename)):
|
|
318
|
+
ext_outputs.append(filename)
|
|
319
|
+
|
|
320
|
+
return all_outputs, ext_outputs
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
NATIVE_EXTENSIONS: dict[str, None] = dict.fromkeys('.dll .so .dylib .pyd'.split())
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def walk_egg(egg_dir):
|
|
327
|
+
"""Walk an unpacked egg's contents, skipping the metadata directory"""
|
|
328
|
+
walker = sorted_walk(egg_dir)
|
|
329
|
+
base, dirs, files = next(walker)
|
|
330
|
+
if 'EGG-INFO' in dirs:
|
|
331
|
+
dirs.remove('EGG-INFO')
|
|
332
|
+
yield base, dirs, files
|
|
333
|
+
yield from walker
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def analyze_egg(egg_dir, stubs):
|
|
337
|
+
# check for existing flag in EGG-INFO
|
|
338
|
+
for flag, fn in safety_flags.items():
|
|
339
|
+
if os.path.exists(os.path.join(egg_dir, 'EGG-INFO', fn)):
|
|
340
|
+
return flag
|
|
341
|
+
if not can_scan():
|
|
342
|
+
return False
|
|
343
|
+
safe = True
|
|
344
|
+
for base, dirs, files in walk_egg(egg_dir):
|
|
345
|
+
for name in files:
|
|
346
|
+
if name.endswith('.py') or name.endswith('.pyw'):
|
|
347
|
+
continue
|
|
348
|
+
elif name.endswith('.pyc') or name.endswith('.pyo'):
|
|
349
|
+
# always scan, even if we already know we're not safe
|
|
350
|
+
safe = scan_module(egg_dir, base, name, stubs) and safe
|
|
351
|
+
return safe
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def write_safety_flag(egg_dir, safe) -> None:
|
|
355
|
+
# Write or remove zip safety flag file(s)
|
|
356
|
+
for flag, fn in safety_flags.items():
|
|
357
|
+
fn = os.path.join(egg_dir, fn)
|
|
358
|
+
if os.path.exists(fn):
|
|
359
|
+
if safe is None or bool(safe) != flag:
|
|
360
|
+
os.unlink(fn)
|
|
361
|
+
elif safe is not None and bool(safe) == flag:
|
|
362
|
+
with open(fn, 'wt', encoding="utf-8") as f:
|
|
363
|
+
f.write('\n')
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
safety_flags = {
|
|
367
|
+
True: 'zip-safe',
|
|
368
|
+
False: 'not-zip-safe',
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def scan_module(egg_dir, base, name, stubs):
|
|
373
|
+
"""Check whether module possibly uses unsafe-for-zipfile stuff"""
|
|
374
|
+
|
|
375
|
+
filename = os.path.join(base, name)
|
|
376
|
+
if filename[:-1] in stubs:
|
|
377
|
+
return True # Extension module
|
|
378
|
+
pkg = base[len(egg_dir) + 1 :].replace(os.sep, '.')
|
|
379
|
+
module = pkg + (pkg and '.' or '') + os.path.splitext(name)[0]
|
|
380
|
+
skip = 16 # skip magic & reserved? & date & file size
|
|
381
|
+
f = open(filename, 'rb')
|
|
382
|
+
f.read(skip)
|
|
383
|
+
code = marshal.load(f)
|
|
384
|
+
f.close()
|
|
385
|
+
safe = True
|
|
386
|
+
symbols = dict.fromkeys(iter_symbols(code))
|
|
387
|
+
for bad in ['__file__', '__path__']:
|
|
388
|
+
if bad in symbols:
|
|
389
|
+
log.warn("%s: module references %s", module, bad)
|
|
390
|
+
safe = False
|
|
391
|
+
if 'inspect' in symbols:
|
|
392
|
+
for bad in [
|
|
393
|
+
'getsource',
|
|
394
|
+
'getabsfile',
|
|
395
|
+
'getfile',
|
|
396
|
+
'getsourcefile',
|
|
397
|
+
'getsourcelines',
|
|
398
|
+
'findsource',
|
|
399
|
+
'getcomments',
|
|
400
|
+
'getframeinfo',
|
|
401
|
+
'getinnerframes',
|
|
402
|
+
'getouterframes',
|
|
403
|
+
'stack',
|
|
404
|
+
'trace',
|
|
405
|
+
]:
|
|
406
|
+
if bad in symbols:
|
|
407
|
+
log.warn("%s: module MAY be using inspect.%s", module, bad)
|
|
408
|
+
safe = False
|
|
409
|
+
return safe
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def iter_symbols(code):
|
|
413
|
+
"""Yield names and strings used by `code` and its nested code objects"""
|
|
414
|
+
yield from code.co_names
|
|
415
|
+
for const in code.co_consts:
|
|
416
|
+
if isinstance(const, str):
|
|
417
|
+
yield const
|
|
418
|
+
elif isinstance(const, CodeType):
|
|
419
|
+
yield from iter_symbols(const)
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
def can_scan() -> bool:
|
|
423
|
+
if not sys.platform.startswith('java') and sys.platform != 'cli':
|
|
424
|
+
# CPython, PyPy, etc.
|
|
425
|
+
return True
|
|
426
|
+
log.warn("Unable to analyze compiled code on this platform.")
|
|
427
|
+
log.warn(
|
|
428
|
+
"Please ask the author to include a 'zip_safe'"
|
|
429
|
+
" setting (either True or False) in the package's setup.py"
|
|
430
|
+
)
|
|
431
|
+
return False
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
# Attribute names of options for commands that might need to be convinced to
|
|
435
|
+
# install to the egg build directory
|
|
436
|
+
|
|
437
|
+
INSTALL_DIRECTORY_ATTRS = ['install_lib', 'install_dir', 'install_data', 'install_base']
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def make_zipfile(
|
|
441
|
+
zip_filename: StrPathT,
|
|
442
|
+
base_dir,
|
|
443
|
+
verbose: bool = False,
|
|
444
|
+
dry_run: bool = False,
|
|
445
|
+
compress=True,
|
|
446
|
+
mode: _ZipFileMode = 'w',
|
|
447
|
+
) -> StrPathT:
|
|
448
|
+
"""Create a zip file from all the files under 'base_dir'. The output
|
|
449
|
+
zip file will be named 'base_dir' + ".zip". Uses either the "zipfile"
|
|
450
|
+
Python module (if available) or the InfoZIP "zip" utility (if installed
|
|
451
|
+
and found on the default search path). If neither tool is available,
|
|
452
|
+
raises DistutilsExecError. Returns the name of the output zip file.
|
|
453
|
+
"""
|
|
454
|
+
import zipfile
|
|
455
|
+
|
|
456
|
+
mkpath(os.path.dirname(zip_filename), dry_run=dry_run) # type: ignore[arg-type] # python/mypy#18075
|
|
457
|
+
log.info("creating '%s' and adding '%s' to it", zip_filename, base_dir)
|
|
458
|
+
|
|
459
|
+
def visit(z, dirname, names):
|
|
460
|
+
for name in names:
|
|
461
|
+
path = os.path.normpath(os.path.join(dirname, name))
|
|
462
|
+
if os.path.isfile(path):
|
|
463
|
+
p = path[len(base_dir) + 1 :]
|
|
464
|
+
if not dry_run:
|
|
465
|
+
z.write(path, p)
|
|
466
|
+
log.debug("adding '%s'", p)
|
|
467
|
+
|
|
468
|
+
compression = zipfile.ZIP_DEFLATED if compress else zipfile.ZIP_STORED
|
|
469
|
+
if not dry_run:
|
|
470
|
+
z = zipfile.ZipFile(zip_filename, mode, compression=compression)
|
|
471
|
+
for dirname, dirs, files in sorted_walk(base_dir):
|
|
472
|
+
visit(z, dirname, files)
|
|
473
|
+
z.close()
|
|
474
|
+
else:
|
|
475
|
+
for dirname, dirs, files in sorted_walk(base_dir):
|
|
476
|
+
visit(None, dirname, files)
|
|
477
|
+
return zip_filename
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from ..dist import Distribution
|
|
2
|
+
from ..warnings import SetuptoolsDeprecationWarning
|
|
3
|
+
|
|
4
|
+
import distutils.command.bdist_rpm as orig
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class bdist_rpm(orig.bdist_rpm):
|
|
8
|
+
"""
|
|
9
|
+
Override the default bdist_rpm behavior to do the following:
|
|
10
|
+
|
|
11
|
+
1. Run egg_info to ensure the name and version are properly calculated.
|
|
12
|
+
2. Always run 'install' using --single-version-externally-managed to
|
|
13
|
+
disable eggs in RPM distributions.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
distribution: Distribution # override distutils.dist.Distribution with setuptools.dist.Distribution
|
|
17
|
+
|
|
18
|
+
def run(self) -> None:
|
|
19
|
+
SetuptoolsDeprecationWarning.emit(
|
|
20
|
+
"Deprecated command",
|
|
21
|
+
"""
|
|
22
|
+
bdist_rpm is deprecated and will be removed in a future version.
|
|
23
|
+
Use bdist_wheel (wheel packages) instead.
|
|
24
|
+
""",
|
|
25
|
+
see_url="https://github.com/pypa/setuptools/issues/1988",
|
|
26
|
+
due_date=(2023, 10, 30), # Deprecation introduced in 22 Oct 2021.
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# ensure distro name is up-to-date
|
|
30
|
+
self.run_command('egg_info')
|
|
31
|
+
|
|
32
|
+
orig.bdist_rpm.run(self)
|
|
33
|
+
|
|
34
|
+
def _make_spec_file(self):
|
|
35
|
+
spec = orig.bdist_rpm._make_spec_file(self)
|
|
36
|
+
return [
|
|
37
|
+
line.replace(
|
|
38
|
+
"setup.py install ",
|
|
39
|
+
"setup.py install --single-version-externally-managed ",
|
|
40
|
+
).replace("%setup", "%setup -n %{name}-%{unmangled_version}")
|
|
41
|
+
for line in spec
|
|
42
|
+
]
|