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
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
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)
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
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)