From 7af304fb5e1d2e3e48c2ae8635d75e0cce772713 Mon Sep 17 00:00:00 2001 From: JinWang An Date: Mon, 27 Mar 2023 17:02:46 +0900 Subject: [PATCH] Imported Upstream version 60.9.1 --- .bumpversion.cfg | 2 +- .github/workflows/main.yml | 19 +++---------- CHANGES.rst | 11 ++++++++ setup.cfg | 2 +- setuptools/_entry_points.py | 11 +++++++- setuptools/_importlib.py | 23 +++++++++++++++ .../INSTALLER | 0 .../LICENSE | 0 .../METADATA | 6 ++-- .../RECORD | 16 +++++------ .../REQUESTED | 0 .../WHEEL | 0 .../top_level.txt | 0 .../_vendor/importlib_metadata/__init__.py | 28 ++++++++----------- setuptools/_vendor/vendored.txt | 2 +- setuptools/tests/test_build_meta.py | 20 ++++++++++++- tox.ini | 1 + 17 files changed, 94 insertions(+), 47 deletions(-) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/INSTALLER (100%) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/LICENSE (100%) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/METADATA (95%) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/RECORD (69%) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/REQUESTED (100%) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/WHEEL (100%) rename setuptools/_vendor/{importlib_metadata-4.10.1.dist-info => importlib_metadata-4.11.1.dist-info}/top_level.txt (100%) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 93624e4..7f5864f 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 60.9.0 +current_version = 60.9.1 commit = True tag = True diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6237373..c985f85 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,6 @@ jobs: strategy: matrix: distutils: - - stdlib - local python: - pypy-3.7 @@ -23,6 +22,10 @@ jobs: - ubuntu-latest - macos-latest - windows-latest + include: + - platform: ubuntu-latest + python: "3.10" + distutils: stdlib runs-on: ${{ matrix.platform }} env: SETUPTOOLS_USE_DISTUTILS: ${{ matrix.distutils }} @@ -46,14 +49,7 @@ jobs: ${{ matrix.python }} test_cygwin: - strategy: - matrix: - distutils: - - stdlib - - local runs-on: windows-latest - env: - SETUPTOOLS_USE_DISTUTILS: ${{ matrix.distutils }} steps: - uses: actions/checkout@v2 - name: Install Cygwin with Python @@ -76,11 +72,6 @@ jobs: tox -- --cov-report xml integration-test: - strategy: - matrix: - distutils: - - stdlib - - local needs: test if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && contains(github.ref, 'refs/tags/')) # To avoid long times and high resource usage, we assume that: @@ -91,8 +82,6 @@ jobs: # "integration") # With that in mind, the integration tests can run for a single setup runs-on: ubuntu-latest - env: - SETUPTOOLS_USE_DISTUTILS: ${{ matrix.distutils }} steps: - uses: actions/checkout@v2 - name: Install OS-level dependencies diff --git a/CHANGES.rst b/CHANGES.rst index dc1fac3..efe34d3 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,14 @@ +v60.9.1 +------- + + +Misc +^^^^ +* #3102: Prevent vendored importlib_metadata from loading distributions from older importlib_metadata. +* #3103: Fixed issue where string-based entry points would be omitted. +* #3107: Bump importlib_metadata to 4.11.1 addressing issue with parsing requirements in egg-info as found in PyPy. + + v60.9.0 ------- diff --git a/setup.cfg b/setup.cfg index 59999cc..555038c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = setuptools -version = 60.9.0 +version = 60.9.1 author = Python Packaging Authority author_email = distutils-sig@python.org description = Easily download, build, install, upgrade, and uninstall Python packages diff --git a/setuptools/_entry_points.py b/setuptools/_entry_points.py index 0cf2691..f087681 100644 --- a/setuptools/_entry_points.py +++ b/setuptools/_entry_points.py @@ -53,7 +53,16 @@ def load(eps): @load.register(str) def _(eps): - return validate(metadata.EntryPoints._from_text(eps)) + r""" + >>> ep, = load('[console_scripts]\nfoo=bar') + >>> ep.group + 'console_scripts' + >>> ep.name + 'foo' + >>> ep.value + 'bar' + """ + return validate(metadata.EntryPoints(metadata.EntryPoints._from_text(eps))) load.register(type(None), lambda x: x) diff --git a/setuptools/_importlib.py b/setuptools/_importlib.py index c529ccd..c1ac137 100644 --- a/setuptools/_importlib.py +++ b/setuptools/_importlib.py @@ -1,8 +1,31 @@ import sys +def disable_importlib_metadata_finder(metadata): + """ + Ensure importlib_metadata doesn't provide older, incompatible + Distributions. + + Workaround for #3102. + """ + try: + import importlib_metadata + except ImportError: + return + if importlib_metadata is metadata: + return + to_remove = [ + ob + for ob in sys.meta_path + if isinstance(ob, importlib_metadata.MetadataPathFinder) + ] + for item in to_remove: + sys.meta_path.remove(item) + + if sys.version_info < (3, 10): from setuptools.extern import importlib_metadata as metadata + disable_importlib_metadata_finder(metadata) else: import importlib.metadata as metadata # noqa: F401 diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/INSTALLER b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/INSTALLER similarity index 100% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/INSTALLER rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/INSTALLER diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/LICENSE b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/LICENSE similarity index 100% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/LICENSE rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/LICENSE diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/METADATA b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/METADATA similarity index 95% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/METADATA rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/METADATA index 7327b88..fda4bc7 100644 --- a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/METADATA +++ b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: importlib-metadata -Version: 4.10.1 +Version: 4.11.1 Summary: Read metadata from Python packages Home-page: https://github.com/python/importlib_metadata Author: Jason R. Coombs @@ -33,7 +33,7 @@ Requires-Dist: pyfakefs ; extra == 'testing' Requires-Dist: flufl.flake8 ; extra == 'testing' Requires-Dist: pytest-perf (>=0.9.2) ; extra == 'testing' Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing' -Requires-Dist: pytest-mypy ; (platform_python_implementation != "PyPy") and extra == 'testing' +Requires-Dist: pytest-mypy (>=0.9.1) ; (platform_python_implementation != "PyPy") and extra == 'testing' Requires-Dist: importlib-resources (>=1.3) ; (python_version < "3.9") and extra == 'testing' .. image:: https://img.shields.io/pypi/v/importlib_metadata.svg @@ -55,7 +55,7 @@ Requires-Dist: importlib-resources (>=1.3) ; (python_version < "3.9") and extra .. image:: https://readthedocs.org/projects/importlib-metadata/badge/?version=latest :target: https://importlib-metadata.readthedocs.io/en/latest/?badge=latest -.. image:: https://img.shields.io/badge/skeleton-2021-informational +.. image:: https://img.shields.io/badge/skeleton-2022-informational :target: https://blog.jaraco.com/skeleton diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/RECORD b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/RECORD similarity index 69% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/RECORD rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/RECORD index ebedf90..d8c2dff 100644 --- a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/RECORD +++ b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/RECORD @@ -1,11 +1,11 @@ -importlib_metadata-4.10.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -importlib_metadata-4.10.1.dist-info/LICENSE,sha256=wNe6dAchmJ1VvVB8D9oTc-gHHadCuaSBAev36sYEM6U,571 -importlib_metadata-4.10.1.dist-info/METADATA,sha256=-HDYj3iK6bcjwN5MAoO58Op6WQIYQfbhl6ZaPqL0IZI,3989 -importlib_metadata-4.10.1.dist-info/RECORD,, -importlib_metadata-4.10.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -importlib_metadata-4.10.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 -importlib_metadata-4.10.1.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19 -importlib_metadata/__init__.py,sha256=7WxDdbPPu4Wy3VeMTApd-JlPQoENgVDyDH6aqyE7acE,30175 +importlib_metadata-4.11.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +importlib_metadata-4.11.1.dist-info/LICENSE,sha256=wNe6dAchmJ1VvVB8D9oTc-gHHadCuaSBAev36sYEM6U,571 +importlib_metadata-4.11.1.dist-info/METADATA,sha256=XNgM09x6V8tbt6ugvKjiUxH9yB7pBdILWuWE5YNWHRw,3999 +importlib_metadata-4.11.1.dist-info/RECORD,, +importlib_metadata-4.11.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +importlib_metadata-4.11.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 +importlib_metadata-4.11.1.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19 +importlib_metadata/__init__.py,sha256=Wkh_tb0u0Ds_615ByV9VLLjqgoOWirwMY8EW40oO3nM,30122 importlib_metadata/__pycache__/__init__.cpython-310.pyc,, importlib_metadata/__pycache__/_adapters.cpython-310.pyc,, importlib_metadata/__pycache__/_collections.cpython-310.pyc,, diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/REQUESTED b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/REQUESTED similarity index 100% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/REQUESTED rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/REQUESTED diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/WHEEL b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/WHEEL similarity index 100% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/WHEEL rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/WHEEL diff --git a/setuptools/_vendor/importlib_metadata-4.10.1.dist-info/top_level.txt b/setuptools/_vendor/importlib_metadata-4.11.1.dist-info/top_level.txt similarity index 100% rename from setuptools/_vendor/importlib_metadata-4.10.1.dist-info/top_level.txt rename to setuptools/_vendor/importlib_metadata-4.11.1.dist-info/top_level.txt diff --git a/setuptools/_vendor/importlib_metadata/__init__.py b/setuptools/_vendor/importlib_metadata/__init__.py index 4554117..292e0c6 100644 --- a/setuptools/_vendor/importlib_metadata/__init__.py +++ b/setuptools/_vendor/importlib_metadata/__init__.py @@ -283,6 +283,8 @@ class DeprecatedList(list): 1 """ + __slots__ = () + _warn = functools.partial( warnings.warn, "EntryPoints list interface is deprecated. Cast to list if needed.", @@ -295,21 +297,15 @@ class DeprecatedList(list): self._warn() return getattr(super(), method_name)(*args, **kwargs) - return wrapped - - for method_name in [ - '__setitem__', - '__delitem__', - 'append', - 'reverse', - 'extend', - 'pop', - 'remove', - '__iadd__', - 'insert', - 'sort', - ]: - locals()[method_name] = _wrap_deprecated_method(method_name) + return method_name, wrapped + + locals().update( + map( + _wrap_deprecated_method, + '__setitem__ __delitem__ append reverse extend pop remove ' + '__iadd__ insert sort'.split(), + ) + ) def __add__(self, other): if not isinstance(other, tuple): @@ -663,7 +659,7 @@ class Distribution: def _read_egg_info_reqs(self): source = self.read_text('requires.txt') - return source and self._deps_from_requires_text(source) + return pass_none(self._deps_from_requires_text)(source) @classmethod def _deps_from_requires_text(cls, source): diff --git a/setuptools/_vendor/vendored.txt b/setuptools/_vendor/vendored.txt index 1dd32ef..db24b40 100644 --- a/setuptools/_vendor/vendored.txt +++ b/setuptools/_vendor/vendored.txt @@ -4,7 +4,7 @@ ordered-set==3.1.1 more_itertools==8.8.0 jaraco.text==3.7.0 importlib_resources==5.4.0 -importlib_metadata==4.10.1 +importlib_metadata==4.11.1 # required for importlib_metadata on older Pythons typing_extensions==4.0.1 # required for importlib_resources and _metadata on older Pythons diff --git a/setuptools/tests/test_build_meta.py b/setuptools/tests/test_build_meta.py index 0f4a1a7..9270aa7 100644 --- a/setuptools/tests/test_build_meta.py +++ b/setuptools/tests/test_build_meta.py @@ -1,7 +1,9 @@ import os import shutil +import signal import tarfile import importlib +import contextlib from concurrent import futures import re @@ -11,6 +13,9 @@ from jaraco import path from .textwrap import DALS +TIMEOUT = int(os.getenv("TIMEOUT_BACKEND_TEST", "180")) # in seconds + + class BuildBackendBase: def __init__(self, cwd='.', env={}, backend_name='setuptools.build_meta'): self.cwd = cwd @@ -31,10 +36,23 @@ class BuildBackend(BuildBackendBase): def method(*args, **kw): root = os.path.abspath(self.cwd) caller = BuildBackendCaller(root, self.env, self.backend_name) - return self.pool.submit(caller, name, *args, **kw).result() + pid = None + try: + pid = self.pool.submit(os.getpid).result(TIMEOUT) + return self.pool.submit(caller, name, *args, **kw).result(TIMEOUT) + except futures.TimeoutError: + self.pool.shutdown(wait=False) # doesn't stop already running processes + self._kill(pid) + pytest.xfail(f"Backend did not respond before timeout ({TIMEOUT} s)") return method + def _kill(self, pid): + if pid is None: + return + with contextlib.suppress(ProcessLookupError, OSError): + os.kill(pid, signal.SIGTERM if os.name == "nt" else signal.SIGKILL) + class BuildBackendCaller(BuildBackendBase): def __init__(self, *args, **kwargs): diff --git a/tox.ini b/tox.ini index 4152c1b..6b587e2 100644 --- a/tox.ini +++ b/tox.ini @@ -14,6 +14,7 @@ usedevelop = True extras = testing passenv = SETUPTOOLS_USE_DISTUTILS + TIMEOUT_BACKEND_TEST # timeout (in seconds) for test_build_meta windir # required for test_pkg_resources # honor git config in pytest-perf HOME -- 2.34.1