Mercurial > piecrust2
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 " |