extension: expose _find_entry_points as list_entry_points

Having the ability to list the entry points without loading them can be quite
useful. Expose the internal method externally to help with that.

Change-Id: Id675f335957a95fcfce61934dfbfbb2c64af761a
This commit is contained in:
Julien Danjou 2017-01-13 15:42:27 +01:00
parent 04f5e154e5
commit eb04fc4a3e
2 changed files with 21 additions and 6 deletions

View File

@ -156,16 +156,22 @@ class ExtensionManager(object):
ENTRY_POINT_CACHE = {}
def _find_entry_points(self, namespace):
if namespace not in self.ENTRY_POINT_CACHE:
eps = list(pkg_resources.iter_entry_points(namespace))
self.ENTRY_POINT_CACHE[namespace] = eps
return self.ENTRY_POINT_CACHE[namespace]
def list_entry_points(self):
"""Return the list of entry points for this namespace.
The entry points are not actually loaded, their list is just read and
returned.
"""
if self.namespace not in self.ENTRY_POINT_CACHE:
eps = list(pkg_resources.iter_entry_points(self.namespace))
self.ENTRY_POINT_CACHE[self.namespace] = eps
return self.ENTRY_POINT_CACHE[self.namespace]
def _load_plugins(self, invoke_on_load, invoke_args, invoke_kwds,
verify_requirements):
extensions = []
for ep in self._find_entry_points(self.namespace):
for ep in self.list_entry_points():
LOG.debug('found extension %r', ep)
try:
ext = self._load_one_plugin(ep,

View File

@ -13,6 +13,8 @@
"""Tests for stevedore.extension
"""
import operator
import mock
from stevedore import exception
@ -49,6 +51,13 @@ class TestCallback(utils.TestCase):
e = em['t1']
self.assertEqual(e.name, 't1')
def test_list_entry_points(self):
em = extension.ExtensionManager('stevedore.test.extension')
n = em.list_entry_points()
self.assertEqual(set(['e1', 'e2', 't1', 't2']),
set(map(operator.attrgetter("name"), n)))
self.assertEqual(4, len(n))
def test_contains_by_name(self):
em = extension.ExtensionManager('stevedore.test.extension')
self.assertEqual('t1' in em, True)