From b90995fb4b6d8151df862d40edc8c369d7052cfa Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sat, 14 Aug 2010 11:28:00 -0400 Subject: [PATCH] Replace .config rather than reconstructing plugins, drivers, and UIs. The previous implementation destroyed any state the plugins, etc. were holding. For example, it cleared CommandStackPlugin.command_stack. --- hooke/hooke.py | 25 +++++++++++++++++++++++++ hooke/plugin/__init__.py | 8 -------- hooke/plugin/config.py | 6 +++--- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/hooke/hooke.py b/hooke/hooke.py index b69bdf8..b9a659e 100644 --- a/hooke/hooke.py +++ b/hooke/hooke.py @@ -54,6 +54,7 @@ if False: # Queue pickle error debugging code feed(buffer, notempty, s, writelock, close) multiprocessing.queues.Queue._feed = staticmethod(new_feed) +from ConfigParser import NoSectionError import logging import logging.config import multiprocessing @@ -104,6 +105,7 @@ class Hooke (object): def load_plugins(self): self.plugins = plugin_mod.load_graph( plugin_mod.PLUGIN_GRAPH, self.config, include_section='plugins') + self.configure_plugins() self.commands = [] for plugin in self.plugins: self.commands.extend(plugin.commands()) @@ -113,9 +115,32 @@ class Hooke (object): def load_drivers(self): self.drivers = plugin_mod.load_graph( driver_mod.DRIVER_GRAPH, self.config, include_section='drivers') + self.configure_drivers() def load_ui(self): self.ui = ui.load_ui(self.config) + self.configure_ui() + + def configure_plugins(self): + for plugin in self.plugins: + self._configure_item(plugin) + + def configure_drivers(self): + for driver in self.drivers: + self._configure_item(driver) + + def configure_ui(self): + self._configure_item(self.ui) + + def _configure_item(self, item): + conditions = self.config.items('conditions') + try: + item.config = dict(self.config.items(item.setting_section)) + except NoSectionError: + item.config = {} + for key,value in conditions: + if key not in item.config: + item.config[key] = value def close(self, save_config=False): if save_config == True: diff --git a/hooke/plugin/__init__.py b/hooke/plugin/__init__.py index 95c56e2..d04f374 100644 --- a/hooke/plugin/__init__.py +++ b/hooke/plugin/__init__.py @@ -171,7 +171,6 @@ def default_settings(): def load_graph(graph, config, include_section): enabled = {} items = [] - conditions = config.items('conditions') for node in graph: item = node.data try: @@ -188,12 +187,5 @@ def load_graph(graph, config, include_section): % (item.name, dependency.data.name)) enabled[item.name] = False continue - try: - item.config = dict(config.items(item.setting_section)) - except configparser.NoSectionError: - item.config = {} - for key,value in conditions: - if key not in item.config: - item.config[key] = value items.append(item) return items diff --git a/hooke/plugin/config.py b/hooke/plugin/config.py index 5820dd7..466ca1f 100644 --- a/hooke/plugin/config.py +++ b/hooke/plugin/config.py @@ -88,9 +88,9 @@ class SetCommand (Command): hooke.config.set(params['section'], params['option'], params['value']) # push config changes hooke.load_log() - hooke.load_plugins() - hooke.load_drivers() - hooke.load_ui() # for post-HookeRunner Hooke return. + hooke.configure_plugins() + hooke.configure_drivers() + hooke.configure_ui() # for post-HookeRunner Hooke return. # notify UI to update config outqueue.put(ReloadUserInterfaceConfig(hooke.config)) -- 2.26.2