From 4cf779e040f5d1e3e2396a0704df397159422e77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 31 Aug 2016 16:02:55 +0200 Subject: [PATCH] Keep reference to loaded extension, and refuse to load twice. The Pillar extensions are now stored, by their name, in a dictionary. --- pillar/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pillar/__init__.py b/pillar/__init__.py index fdabe5cf..1973df82 100644 --- a/pillar/__init__.py +++ b/pillar/__init__.py @@ -35,6 +35,8 @@ class PillarServer(Eve): kwargs.setdefault('validator', custom_field_validation.ValidateCustomFields) super(PillarServer, self).__init__(settings=empty_settings, **kwargs) + self.pillar_extensions = {} # mapping from extension name to extension object. + self.app_root = os.path.abspath(app_root) self._load_flask_config() self._config_logging() @@ -178,8 +180,14 @@ class PillarServer(Eve): def load_extension(self, pillar_extension, url_prefix): from .extension import PillarExtension - self.log.info('Initialising extension %r', pillar_extension) - assert isinstance(pillar_extension, PillarExtension) + assert isinstance(pillar_extension, PillarExtension), \ + 'Extension has wrong type %r' % type(pillar_extension) + self.log.info('Loading extension %s', pillar_extension.name) + + # Remember this extension, and disallow duplicates. + if pillar_extension.name in self.pillar_extensions: + raise ValueError('Extension with name %s already loaded', pillar_extension.name) + self.pillar_extensions[pillar_extension.name] = pillar_extension # Load extension Flask configuration for key, value in pillar_extension.flask_config():