Remove Extension.extras

The behavior of the 'EntryPoint.extras` attribute that this exposes has
changed in recent versions of 'importlib_metadata'/'importlib.metadata'.
In change Iff536d4f4267efbebc4be1e7e5da8a9fde39f79b we applied a
temporary fix to preserve the legacy behavior on these newer versions,
however, given that this is actually a deprecated attribute [1], the
best long-term option seems to be not exposing things. Do just that.


Change-Id: Id772d9f002e6945666685138bdef8f8ca32b5229
Signed-off-by: Stephen Finucane <>
This commit is contained in:
Stephen Finucane 2022-10-04 15:53:01 +01:00
parent 28fc7164da
commit 7eca3f5661
3 changed files with 7 additions and 27 deletions

View File

@ -0,0 +1,7 @@
- |
The ``stevedore.extension.Extension`` object no longer exposes an
``extras`` attribute. Entry point extras are a deprecated concept that
aren't useful in the context of stevedore thus the value in exposing this
is minimal to none.

View File

@ -58,29 +58,6 @@ class Extension(object):
match = self.entry_point.pattern.match(self.entry_point.value)
def extras(self):
"""The 'extras' settings for the plugin."""
# 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.
# 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
def attr(self):
"""The attribute of the module to be loaded."""

View File

@ -268,10 +268,6 @@ class TestExtensionProperties(utils.TestCase):
self.assertEqual('', self.ext1.module_name)
self.assertEqual('module', self.ext2.module_name)
def test_extras(self):
self.assertEqual(['[extra]'], self.ext1.extras)
self.assertEqual([], self.ext2.extras)
def test_attr(self):
self.assertEqual('', self.ext1.attr)
self.assertEqual('attribute', self.ext2.attr)