summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-10-05 11:56:39 +0000
committerGerrit Code Review <review@openstack.org>2022-10-05 11:56:39 +0000
commitae36c47165221abeaebcb9796521573170b05112 (patch)
treef2f7695ed14aac1778e4f39dc249af00fb7b5703
parent13a9c2799ad945da44de8ac1d737270c92d408c1 (diff)
parent663d56c9535c64f4f8bd363abf69406975585ee9 (diff)
downloadstevedore-ae36c47165221abeaebcb9796521573170b05112.tar.gz
Merge "Fix compatibility with Python 3.10, 3.9.11"
-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):