33 lines
		
	
	
	
		
			834 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			834 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from base import Plugin
 | |
| from collections.abc import Sequence
 | |
| 
 | |
| def load_plugins() -> Sequence[Plugin]:
 | |
|     from importlib import import_module
 | |
|     import yaml
 | |
| 
 | |
|     with open('config.yml') as config_file:
 | |
|         config = yaml.load(config_file, Loader=yaml.Loader)
 | |
| 
 | |
|     plugins = []
 | |
| 
 | |
|     for plugin_def in config['plugins']:
 | |
|         plugin_name = plugin_def['name']
 | |
|         plugin_config = plugin_def['config']
 | |
| 
 | |
|         module_name, class_name = plugin_name.split(':')
 | |
| 
 | |
|         module = import_module(module_name)
 | |
|         plugin_class = getattr(module, class_name)
 | |
|         plugin = plugin_class(**plugin_config)
 | |
| 
 | |
|         plugins.append(plugin)
 | |
| 
 | |
|     return plugins
 | |
| 
 | |
| def fire_hook(plugins: Sequence[Plugin]):
 | |
|     for plugin in plugins:
 | |
|         plugin.hook()
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     plugins = load_plugins()
 | |
|     fire_hook(plugins)
 |