From 03830990acd67bae2a77dc4aee80d6f6d89e542a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Tue, 27 Oct 2015 10:48:23 +0100 Subject: [PATCH] New helper plugin_settings_for_settings_plugin, to use from cli hooks and internally --- src/octoprint/plugin/__init__.py | 28 ++++++++++++++++++++++++++++ src/octoprint/server/__init__.py | 12 ++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/octoprint/plugin/__init__.py b/src/octoprint/plugin/__init__.py index e81966b3..ddeec697 100644 --- a/src/octoprint/plugin/__init__.py +++ b/src/octoprint/plugin/__init__.py @@ -161,6 +161,34 @@ def plugin_settings(plugin_key, defaults=None, get_preprocessors=None, set_prepr set_preprocessors=set_preprocessors) +def plugin_settings_for_settings_plugin(plugin_key, instance, settings=None): + """ + Factory method for creating a :class:`PluginSettings` instance for a given :class:`SettingsPlugin` instance. + + Will return `None` if the provided `instance` is not a :class:`SettingsPlugin` instance. + + Arguments: + plugin_key (string): The plugin identifier for which to create the settings instance. + implementation (octoprint.plugin.SettingsPlugin): The :class:`SettingsPlugin` instance. + settings (octoprint.settings.Settings): The settings instance to use. Defaults to the global OctoPrint settings. + + Returns: + PluginSettings or None: A fully initialized :class:`PluginSettings` instance to be used to access the plugin's + settings, or `None` if the provided `instance` was not a class:`SettingsPlugin` + """ + if not isinstance(instance, SettingsPlugin): + return None + + try: + defaults = instance.get_settings_defaults() + get_preprocessors, set_preprocessors = instance.get_settings_preprocessors() + except: + logging.getLogger(__name__).exception("Error while retrieving defaults or preprocessors for plugin {}".format(plugin_key)) + return None + + return plugin_settings(plugin_key, defaults=defaults, get_preprocessors=get_preprocessors, set_preprocessors=set_preprocessors, settings=settings) + + def call_plugin(types, method, args=None, kwargs=None, callback=None, error_callback=None, sorting_context=None): """ Helper method to invoke the indicated ``method`` on all registered plugin implementations implementing the diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index 238061fa..4f33f5a6 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -215,14 +215,10 @@ class Server(): ) def settings_plugin_inject_factory(name, implementation): - if not isinstance(implementation, octoprint.plugin.SettingsPlugin): - return None - default_settings = implementation.get_settings_defaults() - get_preprocessors, set_preprocessors = implementation.get_settings_preprocessors() - plugin_settings = octoprint.plugin.plugin_settings(name, - defaults=default_settings, - get_preprocessors=get_preprocessors, - set_preprocessors=set_preprocessors) + plugin_settings = octoprint.plugin.plugin_settings_for_settings_plugin(name, implementation) + if plugin_settings is None: + return + return dict(settings=plugin_settings) def settings_plugin_config_migration_and_cleanup(name, implementation):