Keep reference to loaded extension, and refuse to load twice.

The Pillar extensions are now stored, by their name, in a dictionary.
This commit is contained in:
Sybren A. Stüvel 2016-08-31 16:02:55 +02:00
parent a0cc76259e
commit 4cf779e040

View File

@ -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():