comparison piecrust/plugins/base.py @ 305:9ae23409d6e9

plugins: Change how plugins are loaded. Add a `plugins` command.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 22 Mar 2015 22:20:18 -0700
parents 5dbab01daaba
children 7122976bc751
comparison
equal deleted inserted replaced
304:34ef6a2a0c97 305:9ae23409d6e9
45 45
46 class PluginLoader(object): 46 class PluginLoader(object):
47 def __init__(self, app): 47 def __init__(self, app):
48 self.app = app 48 self.app = app
49 self._plugins = None 49 self._plugins = None
50 self._pluginsMeta = None
51 self._componentCache = {} 50 self._componentCache = {}
52 51
53 @property 52 @property
54 def plugins(self): 53 def plugins(self):
55 self._ensureLoaded() 54 self._ensureLoaded()
94 if self._plugins is not None: 93 if self._plugins is not None:
95 return 94 return
96 95
97 from piecrust.plugins.builtin import BuiltInPlugin 96 from piecrust.plugins.builtin import BuiltInPlugin
98 self._plugins = [BuiltInPlugin()] 97 self._plugins = [BuiltInPlugin()]
99 self._pluginsMeta = {self._plugins[0].name: False}
100 98
101 for p in self.app.config.get('site/plugins'): 99 for p in self.app.config.get('site/plugins'):
102 self._loadPlugin(p) 100 self._loadPlugin(p)
103 101
104 for plugin in self._plugins: 102 for plugin in self._plugins:
105 plugin.initialize(self.app) 103 plugin.initialize(self.app)
106 104
107 def _loadPlugin(self, plugin_name): 105 def _loadPlugin(self, plugin_name):
108 try: 106 try:
109 mod = importlib.import_module(plugin_name) 107 mod = importlib.import_module('piecrust_' + plugin_name)
110 except ImportError: 108 except ImportError as ex:
111 logger.error("Failed to load plugin '%s'.") 109 logger.error("Failed to load plugin '%s'." % plugin_name)
110 logger.error(ex)
112 return 111 return
113 112
114 plugin_class = getattr(mod, '__piecrust_plugin__', None) 113 plugin_class = getattr(mod, '__piecrust_plugin__', None)
115 if plugin_class is None: 114 if plugin_class is None:
116 logger.error("Plugin '%s' doesn't specify any " 115 logger.error("Plugin '%s' doesn't specify any "