Exemple #1
0
    def __init__(self, bot):
        """
        Create new storage for bot

        :param bot: Bot object
        :return:
        """
        self.bot = bot

        # Connect to Redis.
        # If we had problems with Redis - just set self.redis to None.
        # Not redis-required modules must work without Redis.

        # We get parameters for redis connection from bot's config.
        self.redis = StrictRedis(
            host=bot.config.get('SHELDON_REDIS_HOST', 'localhost'),
            port=bot.config.get('SHELDON_REDIS_PORT', '6379'),
            db=bot.config.get('SHELDON_REDIS_DB', '0')
        )
        try:
            # Check Redis connection
            self.redis.client_list()
        except Exception as error:
            logger.error_message('Error while connecting Redis:')
            logger.error_message(str(error))
            self.redis = None
Exemple #2
0
def import_plugin(plugin_name):
    """
    Import plugin using importlib

    :param plugin_name: full name of plugin, ex. 'plugins.console'
    :return: module object or None if plugin not found
    """
    try:
        return importlib.import_module(plugin_name)
    except ImportError as error:
        logger.error_message('Error with loading {}: \n {}'.format(
            plugin_name, str(error)
        ))
        return None
Exemple #3
0
    def load_plugin(self, plugin_name):
        """
        Parse config, find hooks and create new Plugin object.

        :param plugin_name: name for plugin import
        :return:
        """
        plugin_name = plugin_name.strip()
        plugin_module = import_plugin(plugin_name)
        if not plugin_module:
            logger.error_message("'{}' plugin didn't load".format(
                plugin_name
            ))
            return
        plugin_config = parse_config(plugin_module)
        hooks, interval_hooks = find_hooks(plugin_module)

        plugin = Plugin(plugin_name, plugin_module, plugin_config,
                        hooks, interval_hooks)
        self.plugins.append(plugin)
Exemple #4
0
def parse_config(module):
    """
    Parse module (plugin/adapter) config in __doc__

    :param module: module object
    :return: ModuleConfig object
    """
    if not hasattr(module, '__doc__'):
        logger.error_message('__doc__ config not found in {}'.format(module))
        return None

    config_text = module.__doc__
    try:
        config_data = yaml.load(config_text)
    except yaml.scanner.ScannerError as error:
        logger.error_message('Error while reading {} config \n {}'.format(
            module,
            error.__traceback__
        ))
        return None

    config = ModuleConfig(config_data)
    return config
Exemple #5
0
 def wrapper(*args, **kwargs):
     try:
         module_call_function(*args, **kwargs)
     except Exception as error:
         error_message = str(error)
         logger.error_message('Module error: \n' + error_message)