Replace on_*_change with callbacks generator

This commit is contained in:
ZyX 2014-07-10 20:19:11 +04:00
parent 0810f394f5
commit 585153466c

View File

@ -83,6 +83,13 @@ def get_fallback_logger():
return _fallback_logger return _fallback_logger
def _generate_change_callback(lock, key, dictionary):
def on_file_change(path):
with lock:
dictionary[key] = True
return on_file_change
class Powerline(object): class Powerline(object):
'''Main powerline class, entrance point for all powerline uses. Sets '''Main powerline class, entrance point for all powerline uses. Sets
powerline up and loads the configuration. powerline up and loads the configuration.
@ -136,12 +143,16 @@ class Powerline(object):
self.find_config_file = lambda cfg_path: find_config_file(config_paths, cfg_path) self.find_config_file = lambda cfg_path: find_config_file(config_paths, cfg_path)
self.cr_kwargs_lock = Lock() self.cr_kwargs_lock = Lock()
self.create_renderer_kwargs = { self.create_renderer_kwargs = {}
'load_main': True, self.cr_callbacks = {}
'load_colors': True, for key in ('main', 'colors', 'colorscheme', 'theme'):
'load_colorscheme': True, self.create_renderer_kwargs['load_' + key] = True
'load_theme': True, self.cr_callbacks[key] = _generate_change_callback(
} self.cr_kwargs_lock,
'load_' + key,
self.create_renderer_kwargs
)
self.shutdown_event = shutdown_event or Event() self.shutdown_event = shutdown_event or Event()
self.config_loader = config_loader or ConfigLoader(shutdown_event=self.shutdown_event, run_once=run_once) self.config_loader = config_loader or ConfigLoader(shutdown_event=self.shutdown_event, run_once=run_once)
self.run_loader_update = False self.run_loader_update = False
@ -324,7 +335,7 @@ class Powerline(object):
def _load_config(self, cfg_path, type): def _load_config(self, cfg_path, type):
'''Load configuration and setup watches.''' '''Load configuration and setup watches.'''
function = getattr(self, 'on_' + type + '_change') function = self.cr_callbacks[type]
try: try:
path = self.find_config_file(cfg_path) path = self.find_config_file(cfg_path)
except IOError: except IOError:
@ -334,7 +345,7 @@ class Powerline(object):
return self.config_loader.load(path) return self.config_loader.load(path)
def _purge_configs(self, type): def _purge_configs(self, type):
function = getattr(self, 'on_' + type + '_change') function = self.cr_callbacks[type]
self.config_loader.unregister_functions(set((function,))) self.config_loader.unregister_functions(set((function,)))
self.config_loader.unregister_missing(set(((self.find_config_file, function),))) self.config_loader.unregister_missing(set(((self.find_config_file, function),)))
@ -457,31 +468,10 @@ class Powerline(object):
self.renderer.shutdown() self.renderer.shutdown()
except AttributeError: except AttributeError:
pass pass
functions = ( functions = tuple(self.cr_callbacks.values())
self.on_main_change,
self.on_colors_change,
self.on_colorscheme_change,
self.on_theme_change,
)
self.config_loader.unregister_functions(set(functions)) self.config_loader.unregister_functions(set(functions))
self.config_loader.unregister_missing(set(((find_config_file, function) for function in functions))) self.config_loader.unregister_missing(set(((find_config_file, function) for function in functions)))
def on_main_change(self, path):
with self.cr_kwargs_lock:
self.create_renderer_kwargs['load_main'] = True
def on_colors_change(self, path):
with self.cr_kwargs_lock:
self.create_renderer_kwargs['load_colors'] = True
def on_colorscheme_change(self, path):
with self.cr_kwargs_lock:
self.create_renderer_kwargs['load_colorscheme'] = True
def on_theme_change(self, path):
with self.cr_kwargs_lock:
self.create_renderer_kwargs['load_theme'] = True
def __enter__(self): def __enter__(self):
return self return self