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