From 168d46e96045fc78c674f6af20f853b28f6da229 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Fri, 15 Apr 2016 12:57:28 -0700 Subject: [PATCH 1/2] Find plugins from both new and old entrypoints --- certbot/constants.py | 3 +++ certbot/plugins/disco.py | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/certbot/constants.py b/certbot/constants.py index ef59b8769..1d4efe80e 100644 --- a/certbot/constants.py +++ b/certbot/constants.py @@ -8,6 +8,9 @@ from acme import challenges SETUPTOOLS_PLUGINS_ENTRY_POINT = "certbot.plugins" """Setuptools entry point group name for plugins.""" +OLD_SETUPTOOLS_PLUGINS_ENTRY_POINT = "letsencrypt.plugins" +"""Plugins Setuptools entry point before rename.""" + CLI_DEFAULTS = dict( config_files=[ "/etc/letsencrypt/cli.ini", diff --git a/certbot/plugins/disco.py b/certbot/plugins/disco.py index eb3851d34..d88b871f6 100644 --- a/certbot/plugins/disco.py +++ b/certbot/plugins/disco.py @@ -1,5 +1,6 @@ """Utilities for plugins discovery and selection.""" import collections +import itertools import logging import pkg_resources @@ -164,8 +165,12 @@ class PluginsRegistry(collections.Mapping): def find_all(cls): """Find plugins using setuptools entry points.""" plugins = {} - for entry_point in pkg_resources.iter_entry_points( - constants.SETUPTOOLS_PLUGINS_ENTRY_POINT): + entry_points = itertools.chain( + pkg_resources.iter_entry_points( + constants.SETUPTOOLS_PLUGINS_ENTRY_POINT), + pkg_resources.iter_entry_points( + constants.OLD_SETUPTOOLS_PLUGINS_ENTRY_POINT),) + for entry_point in entry_points: plugin_ep = PluginEntryPoint(entry_point) assert plugin_ep.name not in plugins, ( "PREFIX_FREE_DISTRIBUTIONS messed up") From 65503905eba1053bfa4be5cf79801ea934963735 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Fri, 15 Apr 2016 13:38:53 -0700 Subject: [PATCH 2/2] Add two entry point group test --- certbot/plugins/disco_test.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/certbot/plugins/disco_test.py b/certbot/plugins/disco_test.py index 086980695..cef6ede8f 100644 --- a/certbot/plugins/disco_test.py +++ b/certbot/plugins/disco_test.py @@ -9,11 +9,16 @@ from certbot import errors from certbot import interfaces from certbot.plugins import standalone +from certbot.plugins import webroot EP_SA = pkg_resources.EntryPoint( "sa", "certbot.plugins.standalone", attrs=("Authenticator",), dist=mock.MagicMock(key="certbot")) +EP_WR = pkg_resources.EntryPoint( + "wr", "certbot.plugins.webroot", + attrs=("Authenticator",), + dist=mock.MagicMock(key="certbot")) class PluginEntryPointTest(unittest.TestCase): @@ -176,10 +181,13 @@ class PluginsRegistryTest(unittest.TestCase): def test_find_all(self): from certbot.plugins.disco import PluginsRegistry with mock.patch("certbot.plugins.disco.pkg_resources") as mock_pkg: - mock_pkg.iter_entry_points.return_value = iter([EP_SA]) + mock_pkg.iter_entry_points.side_effect = [iter([EP_SA]), + iter([EP_WR])] plugins = PluginsRegistry.find_all() self.assertTrue(plugins["sa"].plugin_cls is standalone.Authenticator) self.assertTrue(plugins["sa"].entry_point is EP_SA) + self.assertTrue(plugins["wr"].plugin_cls is webroot.Authenticator) + self.assertTrue(plugins["wr"].entry_point is EP_WR) def test_getitem(self): self.assertEqual(self.plugin_ep, self.reg["mock"])