Mercurial > piecrust2
comparison piecrust/plugins/base.py @ 303:5dbab01daaba
plugins: First pass for a working plugin loader functionality.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 19 Mar 2015 18:30:38 -0700 |
parents | 343d08ef5668 |
children | 9ae23409d6e9 |
comparison
equal
deleted
inserted
replaced
302:103abb08755e | 303:5dbab01daaba |
---|---|
1 import os | 1 import logging |
2 import importlib | |
3 | |
4 | |
5 logger = logging.getLogger(__name__) | |
2 | 6 |
3 | 7 |
4 class PieCrustPlugin(object): | 8 class PieCrustPlugin(object): |
5 def getFormatters(self): | 9 def getFormatters(self): |
6 return [] | 10 return [] |
92 | 96 |
93 from piecrust.plugins.builtin import BuiltInPlugin | 97 from piecrust.plugins.builtin import BuiltInPlugin |
94 self._plugins = [BuiltInPlugin()] | 98 self._plugins = [BuiltInPlugin()] |
95 self._pluginsMeta = {self._plugins[0].name: False} | 99 self._pluginsMeta = {self._plugins[0].name: False} |
96 | 100 |
97 for d in self.app.plugins_dirs: | 101 for p in self.app.config.get('site/plugins'): |
98 _, dirs, __ = next(os.walk(d)) | 102 self._loadPlugin(p) |
99 for dd in dirs: | |
100 self._loadPlugin(os.path.join(d, dd)) | |
101 | 103 |
102 for plugin in self._plugins: | 104 for plugin in self._plugins: |
103 plugin.initialize(self.app) | 105 plugin.initialize(self.app) |
104 | 106 |
105 def _loadPlugin(self, plugin_dir): | 107 def _loadPlugin(self, plugin_name): |
106 pass | 108 try: |
109 mod = importlib.import_module(plugin_name) | |
110 except ImportError: | |
111 logger.error("Failed to load plugin '%s'.") | |
112 return | |
113 | |
114 plugin_class = getattr(mod, '__piecrust_plugin__', None) | |
115 if plugin_class is None: | |
116 logger.error("Plugin '%s' doesn't specify any " | |
117 "`__piecrust_plugin__` class." % plugin_name) | |
118 return | |
119 | |
120 try: | |
121 plugin = plugin_class() | |
122 except Exception as ex: | |
123 logger.error("Failed to create plugin '%s': %s" % | |
124 (plugin_name, ex)) | |
125 return | |
126 | |
127 self._plugins.append(plugin) | |
107 | 128 |
108 def _getPluginComponents(self, name, initialize=False, order_key=None): | 129 def _getPluginComponents(self, name, initialize=False, order_key=None): |
109 if name in self._componentCache: | 130 if name in self._componentCache: |
110 return self._componentCache[name] | 131 return self._componentCache[name] |
111 | 132 |