summaryrefslogtreecommitdiff
path: root/stevedore/extension.py
diff options
context:
space:
mode:
Diffstat (limited to 'stevedore/extension.py')
-rw-r--r--stevedore/extension.py30
1 files changed, 19 insertions, 11 deletions
diff --git a/stevedore/extension.py b/stevedore/extension.py
index 06ac067..d9ee084 100644
--- a/stevedore/extension.py
+++ b/stevedore/extension.py
@@ -61,17 +61,25 @@ class Extension(object):
@property
def extras(self):
"""The 'extras' settings for the plugin."""
- # NOTE: The underlying package returns re.Match objects for
- # some reason. Translate those to the matched strings, which
- # seem more useful.
- return [
- # Python 3.6 returns _sre.SRE_Match objects. Later
- # versions of python return re.Match objects. Both types
- # have a 'string' attribute containing the text that
- # matched the pattern.
- getattr(e, 'string', e)
- for e in self.entry_point.extras
- ]
+ # NOTE: The underlying package returned re.Match objects until this was
+ # fixed in importlib-metadata 4.11.3. This was fixed in Python 3.10 and
+ # backported to Python 3.9.11. For older versions without this fix,
+ # translate the re.Match objects to the matched strings, which seem
+ # more useful.
+ extras = []
+ for extra in self.entry_point.extras:
+ if isinstance(extra, str):
+ # We were previously returning the whole string including
+ # backets. We need to continue doing so to preserve API
+ # compatibility.
+ extras.append(f'[{extra}]')
+ else:
+ # Python 3.6 returns _sre.SRE_Match objects. Later
+ # versions of python return re.Match objects. Both types
+ # have a 'string' attribute containing the text that
+ # matched the pattern.
+ extras.append(getattr(extra, 'string', extra))
+ return extras
@property
def attr(self):