From 6b6bef4e8631b19d7d5d293c78c1974d7209f47c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 30 Jan 2015 13:56:18 +0100 Subject: [PATCH] First inject static additional injects, then follow up with factory created ones This way plugins are already prepopulated with stuff like basefolder and logger and such when the factories are executed. --- src/octoprint/plugin/core.py | 54 +++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/octoprint/plugin/core.py b/src/octoprint/plugin/core.py index 3e6075a3..a84a96b1 100644 --- a/src/octoprint/plugin/core.py +++ b/src/octoprint/plugin/core.py @@ -308,30 +308,37 @@ class PluginManager(object): for name, implementations in self.plugin_implementations.items(): plugin = self.plugins[name] for implementation in implementations: - kwargs = dict(additional_injects) - - for factory in additional_inject_factories: - try: - return_value = factory(name, implementation) - except: - self.logger.exception("Exception while executing injection factory %r" % factory) - else: - if return_value is not None: - if isinstance(return_value, dict): - kwargs.update(return_value) - - kwargs.update(dict( - identifier=name, - plugin_name=plugin.name, - plugin_version=plugin.version, - basefolder=os.path.realpath(plugin.location), - logger=logging.getLogger(self.logging_prefix + name), - )) - try: - implementation.pre_initialize(**kwargs) + kwargs = dict(additional_injects) + + kwargs.update(dict( + identifier=name, + plugin_name=plugin.name, + plugin_version=plugin.version, + basefolder=os.path.realpath(plugin.location), + logger=logging.getLogger(self.logging_prefix + name), + )) + + # inject the additional_injects + for arg, value in kwargs.items(): + setattr(implementation, "_" + arg, value) + + # inject any injects produced in the additional_inject_factories + for factory in additional_inject_factories: + try: + return_value = factory(name, implementation) + except: + self.logger.exception("Exception while executing injection factory %r" % factory) + else: + if return_value is not None: + if isinstance(return_value, dict): + for arg, value in return_value.items(): + setattr(implementation, "_" + arg, value) + + implementation.initialize() except: self.logger.exception("Exception while initializing plugin") + # TODO disable plugin! self.logger.info("Initialized {count} plugin(s)".format(count=len(self.plugin_implementations))) @@ -394,10 +401,5 @@ class PluginManager(object): class Plugin(object): - def pre_initialize(self, **kwargs): - for arg, value in kwargs.items(): - setattr(self, "_" + arg, value) - self.initialize() - def initialize(self): pass