diff options
author | Zuul <zuul@review.opendev.org> | 2022-10-05 11:56:39 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-10-05 11:56:39 +0000 |
commit | ae36c47165221abeaebcb9796521573170b05112 (patch) | |
tree | f2f7695ed14aac1778e4f39dc249af00fb7b5703 | |
parent | 13a9c2799ad945da44de8ac1d737270c92d408c1 (diff) | |
parent | 663d56c9535c64f4f8bd363abf69406975585ee9 (diff) | |
download | stevedore-ae36c47165221abeaebcb9796521573170b05112.tar.gz |
Merge "Fix compatibility with Python 3.10, 3.9.11"
-rw-r--r-- | stevedore/extension.py | 30 |
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): |