Mercurial > piecrust2
comparison piecrust/plugins/base.py @ 852:4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
* Everything is a `ContentSource`, including assets directories.
* Most content sources are subclasses of the base file-system source.
* A source is processed by a "pipeline", and there are 2 built-in pipelines,
one for assets and one for pages. The asset pipeline is vaguely functional,
but the page pipeline is completely broken right now.
* Rewrite the baking process as just running appropriate pipelines on each
content item. This should allow for better parallelization.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 17 May 2017 00:11:48 -0700 |
parents | 8f8bbb2e70e1 |
children | 371731b555ec |
comparison
equal
deleted
inserted
replaced
851:2c7e57d80bba | 852:4850f8c21b6e |
---|---|
37 return [] | 37 return [] |
38 | 38 |
39 def getSources(self): | 39 def getSources(self): |
40 return [] | 40 return [] |
41 | 41 |
42 def getPageGenerators(self): | 42 def getPipelines(self): |
43 return [] | 43 return [] |
44 | 44 |
45 def getPublishers(self): | 45 def getPublishers(self): |
46 return [] | 46 return [] |
47 | 47 |
60 self._ensureLoaded() | 60 self._ensureLoaded() |
61 return self._plugins | 61 return self._plugins |
62 | 62 |
63 def getFormatters(self): | 63 def getFormatters(self): |
64 return self._getPluginComponents( | 64 return self._getPluginComponents( |
65 'getFormatters', | 65 'getFormatters', |
66 initialize=True, register_timer=True, | 66 initialize=True, register_timer=True, |
67 order_key=lambda f: f.priority) | 67 order_key=lambda f: f.priority) |
68 | 68 |
69 def getTemplateEngines(self): | 69 def getTemplateEngines(self): |
70 return self._getPluginComponents( | 70 return self._getPluginComponents( |
71 'getTemplateEngines', | 71 'getTemplateEngines', |
72 initialize=True, register_timer=True, | 72 initialize=True, register_timer=True, |
73 register_timer_suffixes=['_segment', '_layout']) | 73 register_timer_suffixes=['_segment', '_layout']) |
74 | 74 |
75 def getTemplateEngineExtensions(self, engine_name): | 75 def getTemplateEngineExtensions(self, engine_name): |
76 return self._getPluginComponents('getTemplateEngineExtensions', | 76 return self._getPluginComponents('getTemplateEngineExtensions', |
77 engine_name) | 77 engine_name) |
78 | 78 |
79 def getDataProviders(self): | 79 def getDataProviders(self): |
80 return self._getPluginComponents('getDataProviders') | 80 return self._getPluginComponents('getDataProviders') |
81 | 81 |
82 def getProcessors(self): | 82 def getProcessors(self): |
83 return self._getPluginComponents( | 83 return self._getPluginComponents( |
84 'getProcessors', | 84 'getProcessors', |
85 initialize=True, register_timer=True, | 85 initialize=True, register_timer=True, |
86 order_key=lambda p: p.priority) | 86 order_key=lambda p: p.priority) |
87 | 87 |
88 def getImporters(self): | 88 def getImporters(self): |
89 return self._getPluginComponents('getImporters') | 89 return self._getPluginComponents('getImporters') |
90 | 90 |
91 def getCommands(self): | 91 def getCommands(self): |
98 return self._getPluginComponents('getBakerAssistants') | 98 return self._getPluginComponents('getBakerAssistants') |
99 | 99 |
100 def getSources(self): | 100 def getSources(self): |
101 return self._getPluginComponents('getSources') | 101 return self._getPluginComponents('getSources') |
102 | 102 |
103 def getPageGenerators(self): | 103 def getPipelines(self): |
104 return self._getPluginComponents('getPageGenerators') | 104 return self._getPluginComponents('getPipelines') |
105 | 105 |
106 def getPublishers(self): | 106 def getPublishers(self): |
107 return self._getPluginComponents('getPublishers') | 107 return self._getPluginComponents('getPublishers') |
108 | 108 |
109 def _ensureLoaded(self): | 109 def _ensureLoaded(self): |
140 spec.loader.exec_module(mod) | 140 spec.loader.exec_module(mod) |
141 sys.modules[mod_name] = mod | 141 sys.modules[mod_name] = mod |
142 | 142 |
143 if mod is None: | 143 if mod is None: |
144 logger.error("Failed to load plugin '%s'." % plugin_name) | 144 logger.error("Failed to load plugin '%s'." % plugin_name) |
145 logger.error(ex) | |
146 return | 145 return |
147 | 146 |
148 plugin_class = getattr(mod, '__piecrust_plugin__', None) | 147 plugin_class = getattr(mod, '__piecrust_plugin__', None) |
149 if plugin_class is None: | 148 if plugin_class is None: |
150 logger.error("Plugin '%s' doesn't specify any " | 149 logger.error("Plugin '%s' doesn't specify any " |
178 comp.initialize(self.app) | 177 comp.initialize(self.app) |
179 | 178 |
180 if register_timer: | 179 if register_timer: |
181 for comp in plugin_components: | 180 for comp in plugin_components: |
182 if not register_timer_suffixes: | 181 if not register_timer_suffixes: |
183 self.app.env.registerTimer(comp.__class__.__name__) | 182 self.app.env.stats.registerTimer( |
183 comp.__class__.__name__) | |
184 else: | 184 else: |
185 for s in register_timer_suffixes: | 185 for s in register_timer_suffixes: |
186 self.app.env.registerTimer( | 186 self.app.env.stats.registerTimer( |
187 comp.__class__.__name__ + s) | 187 comp.__class__.__name__ + s) |
188 | 188 |
189 if order_key is not None: | 189 if order_key is not None: |
190 all_components.sort(key=order_key) | 190 all_components.sort(key=order_key) |
191 | 191 |