diff options
| author | Jason R. Coombs <jaraco@jaraco.com> | 2021-09-06 11:53:04 -0400 |
|---|---|---|
| committer | Jason R. Coombs <jaraco@jaraco.com> | 2021-09-06 11:56:36 -0400 |
| commit | 2a5fa490ddf541c0d25bade7bb5e8de3e6d6f981 (patch) | |
| tree | da655b5e0410868361fcffc232b95427799e739e /setuptools/dist.py | |
| parent | 47b724639703d0c512f275a316dbb99e6c226e38 (diff) | |
| download | python-setuptools-git-2a5fa490ddf541c0d25bade7bb5e8de3e6d6f981.tar.gz | |
In Distribution.finalize_options, suppress known removed entry points for a year to avoid issues with older Setuptools. Fixes #2765.
Diffstat (limited to 'setuptools/dist.py')
| -rw-r--r-- | setuptools/dist.py | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py index eec0b27e..f20ba912 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -5,6 +5,7 @@ import io import sys import re import os +import datetime import warnings import numbers import distutils.log @@ -817,10 +818,32 @@ class Distribution(_Distribution): def by_order(hook): return getattr(hook, 'order', 0) - eps = map(lambda e: e.load(), pkg_resources.iter_entry_points(group)) - for ep in sorted(eps, key=by_order): + defined = pkg_resources.iter_entry_points(group) + filtered = self._suppress_removed_finalization_eps(defined) + loaded = map(lambda e: e.load(), filtered) + for ep in sorted(loaded, key=by_order): ep(self) + @staticmethod + def _suppress_removed_finalization_eps(defined): + """ + When removing an entry point, if metadata is loaded + from an older version of Setuptools, that removed + entry point will attempt to be loaded and will fail. + See #2765 for more details. Remove these known + removed entry points for a year to limit the + disruption. + """ + removed = { + '2to3_doctests': datetime.date(2021, 9, 5), + } + duration = datetime.timedelta(days=365) + today = datetime.date.today() + + def suppress(ep): + return ep.name in removed and today - removed[ep.name] < duration + return itertools.filterfalse(suppress, defined) + def _finalize_setup_keywords(self): for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): value = getattr(self, ep.name, None) |
