summaryrefslogtreecommitdiff
path: root/setuptools/dist.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2021-09-06 11:53:04 -0400
committerJason R. Coombs <jaraco@jaraco.com>2021-09-06 11:56:36 -0400
commit2a5fa490ddf541c0d25bade7bb5e8de3e6d6f981 (patch)
treeda655b5e0410868361fcffc232b95427799e739e /setuptools/dist.py
parent47b724639703d0c512f275a316dbb99e6c226e38 (diff)
downloadpython-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.py27
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)