Allow the plugins to use a default configuration too
through overloading the class variable default_config. also fix a bug that would add meaningless sections to plugin configurations.
This commit is contained in:
parent
4c7a470dc8
commit
003c28e953
3 changed files with 21 additions and 9 deletions
|
@ -153,9 +153,11 @@ class Config(RawConfigParser):
|
||||||
except TypeError: # python < 3.2 sucks
|
except TypeError: # python < 3.2 sucks
|
||||||
RawConfigParser.read(self, self.file_name)
|
RawConfigParser.read(self, self.file_name)
|
||||||
# Check config integrity and fix it if it’s wrong
|
# Check config integrity and fix it if it’s wrong
|
||||||
for section in ('bindings', 'var'):
|
# only when the object is the main config
|
||||||
if not self.has_section(section):
|
if self.__class__ is Config:
|
||||||
self.add_section(section)
|
for section in ('bindings', 'var'):
|
||||||
|
if not self.has_section(section):
|
||||||
|
self.add_section(section)
|
||||||
|
|
||||||
def get(self, option, default=None, section=DEFSECTION):
|
def get(self, option, default=None, section=DEFSECTION):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -305,7 +305,7 @@ def completion_set(self, the_input):
|
||||||
end_list = ['%s|%s' % (plugin_name, section) for section in plugin.config.sections()]
|
end_list = ['%s|%s' % (plugin_name, section) for section in plugin.config.sections()]
|
||||||
else:
|
else:
|
||||||
end_list = set(config.options('Poezio'))
|
end_list = set(config.options('Poezio'))
|
||||||
end_list = end_list.union(set(config.default.get('Poezio', {})))
|
end_list.update(config.default.get('Poezio', {}))
|
||||||
end_list = list(end_list)
|
end_list = list(end_list)
|
||||||
end_list.sort()
|
end_list.sort()
|
||||||
elif n == 2:
|
elif n == 2:
|
||||||
|
@ -314,7 +314,10 @@ def completion_set(self, the_input):
|
||||||
if not plugin_name in self.plugin_manager.plugins:
|
if not plugin_name in self.plugin_manager.plugins:
|
||||||
return the_input.new_completion([''], n, quotify=True)
|
return the_input.new_completion([''], n, quotify=True)
|
||||||
plugin = self.plugin_manager.plugins[plugin_name]
|
plugin = self.plugin_manager.plugins[plugin_name]
|
||||||
end_list = plugin.config.options(section or plugin_name)
|
end_list = set(plugin.config.options(section or plugin_name))
|
||||||
|
end_list.update(plugin.config.default.get(section or plugin_name, {}))
|
||||||
|
end_list = list(end_list)
|
||||||
|
end_list.sort()
|
||||||
elif not config.has_option('Poezio', args[1]):
|
elif not config.has_option('Poezio', args[1]):
|
||||||
if config.has_section(args[1]):
|
if config.has_section(args[1]):
|
||||||
end_list = config.options(args[1])
|
end_list = config.options(args[1])
|
||||||
|
|
|
@ -19,12 +19,12 @@ class PluginConfig(config.Config):
|
||||||
They are accessible inside the plugin with self.config
|
They are accessible inside the plugin with self.config
|
||||||
and behave like the core Config object.
|
and behave like the core Config object.
|
||||||
"""
|
"""
|
||||||
def __init__(self, filename, module_name):
|
def __init__(self, filename, module_name, default=None):
|
||||||
config.Config.__init__(self, filename)
|
config.Config.__init__(self, filename, default=default)
|
||||||
self.module_name = module_name
|
self.module_name = module_name
|
||||||
self.read()
|
self.read()
|
||||||
|
|
||||||
def get(self, option, default, section=None):
|
def get(self, option, default=None, section=None):
|
||||||
if not section:
|
if not section:
|
||||||
section = self.module_name
|
section = self.module_name
|
||||||
return config.Config.get(self, option, default, section)
|
return config.Config.get(self, option, default, section)
|
||||||
|
@ -364,12 +364,19 @@ class BasePlugin(object, metaclass=SafetyMetaclass):
|
||||||
Class that all plugins derive from.
|
Class that all plugins derive from.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
default_config = None
|
||||||
|
|
||||||
def __init__(self, plugin_api, core, plugins_conf_dir):
|
def __init__(self, plugin_api, core, plugins_conf_dir):
|
||||||
self.core = core
|
self.core = core
|
||||||
# More hack; luckily we'll never have more than one core object
|
# More hack; luckily we'll never have more than one core object
|
||||||
SafetyMetaclass.core = core
|
SafetyMetaclass.core = core
|
||||||
conf = os.path.join(plugins_conf_dir, self.__module__+'.cfg')
|
conf = os.path.join(plugins_conf_dir, self.__module__+'.cfg')
|
||||||
self.config = PluginConfig(conf, self.__module__)
|
try:
|
||||||
|
self.config = PluginConfig(conf, self.__module__,
|
||||||
|
default=self.default_config)
|
||||||
|
except Exception:
|
||||||
|
log.debug('Error while creating the plugin config', exc_info=True)
|
||||||
|
self.config = PluginConfig(conf, self.__module__)
|
||||||
self._api = plugin_api[self.name]
|
self._api = plugin_api[self.name]
|
||||||
self.init()
|
self.init()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue