Manage dynamic plugins for Python applications
Go to file
Ian Wienand 93f1e0937c Order old importlib-metadata results by group
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] https://github.com/mtreinish/stestr/issues/336
[2] https://github.com/python/importlib_metadata/issues/409

Change-Id: I3496ab1dfa312b1098a869cdfd9a0c6f81653b28
(cherry picked from commit 5189992d71)
2022-10-19 11:17:28 +01:00
doc Merge "Adding pre-commit" 2020-10-05 16:59:20 +00:00
releasenotes Update master for stable/yoga 2022-03-04 17:20:47 +00:00
stevedore Order old importlib-metadata results by group 2022-10-19 11:17:28 +01:00
.gitignore Drop Python 2.7 support 2020-04-21 15:14:10 +01:00
.gitreview Update .gitreview for stable/zed 2022-09-09 09:19:26 +00:00
.pre-commit-config.yaml Move flake8 as a pre-commit local target. 2021-03-23 13:11:54 +01:00
.stestr.conf Switch to stestr 2018-07-05 18:04:48 +07:00
.zuul.yaml Add Python3 zed unit tests 2022-03-04 17:20:49 +00:00
CONTRIBUTING.rst Workflow documentation is now in infra-manual 2014-12-05 03:30:40 +00:00
LICENSE add license 2012-06-19 14:33:24 -04:00
README.rst update git.openstack.org to opendev 2019-04-25 01:07:11 +00:00
bindep.txt Add local bindep.txt 2019-06-27 12:59:31 +02:00
requirements.txt Fix remaining logic to support Python 3.6/7 2022-06-21 21:54:06 +09:00
setup.cfg Drop python3.6/3.7 support in testing runtime 2022-05-05 16:02:13 +02:00
setup.py Drop Python 2.7 support 2020-04-21 15:14:10 +01:00
test-requirements.txt Adding pre-commit 2020-09-15 13:40:37 +02:00
tox.ini Update TOX_CONSTRAINTS_FILE for stable/zed 2022-09-09 09:19:28 +00:00

README.rst

stevedore -- Manage dynamic plugins for Python applications

Latest Version

image

Python makes loading code dynamically easy, allowing you to configure and extend your application by discovering and loading extensions ("plugins") at runtime. Many applications implement their own library for doing this, using __import__ or importlib. stevedore avoids creating yet another extension mechanism by building on top of setuptools entry points. The code for managing entry points tends to be repetitive, though, so stevedore provides manager classes for implementing common patterns for using dynamically loaded extensions.