From 64fb91dcaec6ab3d3b4cd2b65f6497809f99f20c Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Sun, 5 Jan 2014 13:00:31 +0100 Subject: [PATCH] [entropy.core] SystemSettings: enable lazy loading of external plugins as well --- lib/entropy/core/settings/base.py | 17 +++++++++++++---- lib/entropy/core/settings/plugins/skel.py | 8 +++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/entropy/core/settings/base.py b/lib/entropy/core/settings/base.py index 3d08a42c3..5d7de90e3 100644 --- a/lib/entropy/core/settings/base.py +++ b/lib/entropy/core/settings/base.py @@ -788,13 +788,23 @@ class SystemSettings(Singleton, EntropyPluginStore): # plugins support local_plugins = self.get_plugins() for plugin_id in sorted(local_plugins): - local_plugins[plugin_id].parse(self) + + def parse_method(): + local_plugins[plugin_id].parse(self) + return self.__data[plugin_id] + + self.__parsables[plugin_id] = parse_method # external plugins support external_plugins = self.__get_external_plugins() for external_plugin_id in sorted(external_plugins): external_plugin = external_plugins[external_plugin_id]() - external_plugin.parse(self) + + def parse_method(): + external_plugin.parse(self) + return self.__data[external_plugin_id] + + self.__parsables[external_plugin_id] = parse_method self.__external_plugins[external_plugin_id] = external_plugin enforce_persistent() @@ -955,6 +965,7 @@ class SystemSettings(Singleton, EntropyPluginStore): """ with self.__lock: self.__data.clear() + self.__parsables.clear() self.__setup_const() self.__scan() @@ -1037,8 +1048,6 @@ class SystemSettings(Singleton, EntropyPluginStore): @return: None @rtype: None """ - self.__parsables.clear() - # some parsers must be run BEFORE everything: for item in self.__setting_files_pre_run: myattr = '_%s_parser' % (item,) diff --git a/lib/entropy/core/settings/plugins/skel.py b/lib/entropy/core/settings/plugins/skel.py index 719916fde..7f4e7a7f9 100644 --- a/lib/entropy/core/settings/plugins/skel.py +++ b/lib/entropy/core/settings/plugins/skel.py @@ -138,14 +138,20 @@ class SystemSettingsPlugin(object): @return: None @rtype: None """ + metadata = {} + plugin_id = self.get_id() + obj = metadata.setdefault(plugin_id, {}) + for parser_id, parser in self.__parsers: data = parser(system_settings_instance) if data is None: continue - obj = system_settings_instance.setdefault(plugin_id, {}) obj[parser_id] = data + for key, value in metadata.items(): + system_settings_instance[key] = value + def post_setup(self, system_settings_instance): """ This method is called by SystemSettings instance