From eb04fc4a3e3db913475d2f7105420351a0a781a9 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Fri, 13 Jan 2017 15:42:27 +0100 Subject: [PATCH] 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 --- stevedore/extension.py | 18 ++++++++++++------ stevedore/tests/test_extension.py | 9 +++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/stevedore/extension.py b/stevedore/extension.py index 4029b65..cdd53d2 100644 --- a/stevedore/extension.py +++ b/stevedore/extension.py @@ -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, diff --git a/stevedore/tests/test_extension.py b/stevedore/tests/test_extension.py index 7d695ef..a84c2df 100644 --- a/stevedore/tests/test_extension.py +++ b/stevedore/tests/test_extension.py @@ -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)