Source code for rasahub

from __future__ import unicode_literals

import json
import time
import sys
import yaml
import os
import importlib
import inspect
import argparse

from rasahub.messagehandler import RasahubHandler
from rasahub.plugin import RasahubPlugin

[docs]def initialize_middleware(configpath = 'config.yml'): """Initialize the middleware given a configuration file Args: configpath: Path and name of config file Returns: messagehandler """ messagehandler = RasahubHandler() config = yaml.safe_load(open(configpath)) for plugin in config: try: lib = __import__(config[plugin]['package']) classes = inspect.getmembers(lib, inspect.isclass) method = None for plugin_class in classes: if plugin_class[1].__bases__[0].__name__ == 'RasahubPlugin': method = plugin_class[0] if method == None: raise Exception globals()[plugin] = lib except: print("Package " + config[plugin]['package'] + " not found.") try: if config[plugin]['init'] is not None: plugin_instance = eval(plugin + '.' + method)(**config[plugin]['init']) else: plugin_instance = eval(plugin + '.' + method)() if plugin_instance is not None: plugin_instance.add_target(config[plugin]['out']) # depracted messagehandler.add_plugin(plugin, config[plugin]['type'], plugin_instance) else: print("plugin " + plugin + "could not be started") except: print("plugin " + plugin + " could not be started")
return messagehandler
[docs]def create_argparser(): """Creates the argumentparser for Rasahub Returns: ArgumentParser """ parser = argparse.ArgumentParser(description='Starts Rasahub.') parser.add_argument( '-c', '--config', type=str, default='config.yml', help="Path to config file")
return parser
[docs]def main(): """The main function initializes plugins and handles messages. It starts the messagehandler, registers all plugins and starts the threads. When a Keyboard interruption is registered it starts closing all threads. """ parser = create_argparser() arguments = parser.parse_args() configpath = arguments.config handler = initialize_middleware(configpath) handler.start() print("Input threads started") try: while True: pass except KeyboardInterrupt: print("Closing worker threads..") handler.end_processes()
return True