Source code for rasahub.config

import argparse
import inspect
import yaml

[docs]def create_argparser(): """Creates and returns the argument parser for config creation. Returns: ArgumentParser """ parser = argparse.ArgumentParser(description='Creates the Rasahub configuration file.') parser.add_argument( '-o', '--output', type=str, default='config.yml', help="Config file name to create") parser.add_argument( '-p', '--plugins', nargs='+', required=True, help="Plugin name")
return parser
[docs]def create_config(plugins): """Creates and returns the configuration given plugin names Args: plugins: List of plugins to include in config Returns: configuration as dict """ config = {} for plugin in plugins: pluginname = plugin while pluginname in config: pluginname = pluginname + '2' config[pluginname] = {} config[pluginname]['package'] = plugin # TODO no rasahub_ prefix config[pluginname]['init'] = {} # fill initialization lib = __import__(plugin) classes = inspect.getmembers(lib, inspect.isclass) pluginclass = None for plugin_class in classes: if plugin_class[1].__bases__[0].__name__ == 'RasahubPlugin': pluginclass = plugin_class[1] varnames = pluginclass.__init__.__code__.co_varnames[:pluginclass.__init__.__code__.co_argcount] for index in range(len(varnames)): if index > 0 and varnames[index] != 'self' and varnames[index] != 'kwargs': config[pluginname]['init'][varnames[index]] = pluginclass.__init__.__defaults__[index-1] config[pluginname]['out'] = "" for other_plugin in config: if pluginname != other_plugin: config[pluginname]['out'] = other_plugin config[pluginname]['type'] = "datastore" # check if there are send and receive methods - then its an interface or interpreter members = [] for plugin_touple in classes: for cl in plugin_touple: members += inspect.getmembers(cl) interface_methods = [m for m in members if m[0] == 'send' or m[0] == 'receive'] if (len(interface_methods) >= 2 and len(interface_methods)%2 == 0): config[pluginname]['type'] = "interface"
return config
[docs]def save_config(config, filename): """Saves config to given filename in yaml format Args: config: dict containing configuration arguments for each plugin filename: Filename to write yaml to """ with open(filename, 'w') as outfile:
yaml.dump(config, outfile, default_flow_style=False) if __name__ == '__main__': parser = create_argparser() arguments = parser.parse_args() filename = arguments.output plugins = arguments.plugins config = create_config(plugins) save_config(config, filename)