Skip to content

Commit

Permalink
Order old importlib-metadata results by group
Browse files Browse the repository at this point in the history
A Debian Buster-based zuul-jobs test started failing when using stestr
recently [1].  Upon further investigation, this is a Python 3.7
environment which is affected by a recent breaking change to
importlib_metadata.

It seems stevedore worked around this with
Ib9c2b0a14edea91e97d122d2ac93b650029f918e, which was released with
3.5.1 -- but I was still seeing the issue.

Upon further investigation, the "real_groups" dict being returned here
with importlib-metadata 4.12.0 is in buckets by group, e.g.

 {'group.one': [EntryPoint(name='foo', ... , group='group.one'),
                EntryPoint(name='bar', ... , group='group.one')],
  'group.two': [EntryPoint(name='moo', ... , group='group.two'),
                EntryPoint(name='goo', ... , group='group.two')],
 }

This current code seems to return a dict with entry-points by thier
name, e.g.

 {'foo': EntryPoint(name='foo', ... , group='group.one),
  'bar': EntryPoint(name='bar', ... , group='group.one),
  'moo': EntryPoint(name='moo', ... , group='group.two),
  'goo': EntryPoint(name='goo', ... , group='group.two)
 }

This reorgansies the fixup routine to put entry-points in a bucket by
their group.  With this change, stestr is again finding it's command
plugins.

[1] mtreinish/stestr#336
[2] python/importlib_metadata#409

Change-Id: I3496ab1dfa312b1098a869cdfd9a0c6f81653b28
(cherry picked from commit 5189992)
(cherry picked from commit 93f1e09)
  • Loading branch information
ianw authored and stephenfin committed Oct 19, 2022
1 parent 143a3e9 commit 6c9978a
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion stevedore/_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ def _build_cacheable_data():
# importlib-metadata 4.0 or later (or stdlib importlib.metadata in
# Python 3.9 or later)
real_groups = {
name: real_groups.select(name=name) for name in real_groups.names
group: real_groups.select(group=group)
for group in real_groups.groups
}

# Convert the namedtuple values to regular tuples
Expand Down

0 comments on commit 6c9978a

Please sign in to comment.