changeset 849:8f8bbb2e70e1

templating: Template engines can now load extensions directly from plugins.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 27 Apr 2017 20:55:07 -0700
parents 7d83b9484b98
children 370e74941d32
files piecrust/plugins/base.py piecrust/templating/jinjaengine.py
diffstat 2 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/plugins/base.py	Thu Apr 27 20:54:29 2017 -0700
+++ b/piecrust/plugins/base.py	Thu Apr 27 20:55:07 2017 -0700
@@ -15,6 +15,9 @@
     def getTemplateEngines(self):
         return []
 
+    def getTemplateEngineExtensions(self, engine_name):
+        return []
+
     def getDataProviders(self):
         return []
 
@@ -69,6 +72,10 @@
                 initialize=True, register_timer=True,
                 register_timer_suffixes=['_segment', '_layout'])
 
+    def getTemplateEngineExtensions(self, engine_name):
+        return self._getPluginComponents('getTemplateEngineExtensions',
+                                         engine_name)
+
     def getDataProviders(self):
         return self._getPluginComponents('getDataProviders')
 
@@ -153,7 +160,7 @@
 
         return plugin
 
-    def _getPluginComponents(self, name, *,
+    def _getPluginComponents(self, name, *args,
                              initialize=False,
                              register_timer=False,
                              register_timer_suffixes=None,
@@ -163,7 +170,7 @@
 
         all_components = []
         for plugin in self.plugins:
-            plugin_components = getattr(plugin, name)()
+            plugin_components = getattr(plugin, name)(*args)
             all_components += plugin_components
 
             if initialize:
--- a/piecrust/templating/jinjaengine.py	Thu Apr 27 20:54:29 2017 -0700
+++ b/piecrust/templating/jinjaengine.py	Thu Apr 27 20:55:07 2017 -0700
@@ -127,6 +127,8 @@
             if '.' not in n:
                 n = 'jinja2.ext.' + n
             extensions.append(n)
+        for je in self.app.plugin_loader.getTemplateEngineExtensions('jinja'):
+            extensions.append(je)
 
         # Create the Jinja environment.
         logger.debug("Creating Jinja environment with folders: %s" %