summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-10-29 16:35:27 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-10-30 06:37:46 -0400
commitc4e1b49ff7d5b8f5860f5cc208476ff42159724e (patch)
tree84da32caf2072e617dd6b7be992ff5971b50095a /src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
parent2161b4be08f2b295f68e2f7c0f9c791919542a39 (diff)
downloadbcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.tar.gz
bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.tar.bz2
bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.zip
Plugins: Added TemplateDataProvider plugin interface
This lets you provide variables to the top-level namespace of templates in a more seamless way than through a Connector plugin. It's mostly useful for TemplateHelper for now, but may find other uses in the future.
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
index 7ba8c4491..ef4e6a656 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
@@ -6,7 +6,8 @@ import re
import sys
import traceback
import Bcfg2.Options
-from Bcfg2.Server.Plugin import PluginExecutionError, removecomment
+from Bcfg2.Server.Plugin import PluginExecutionError, removecomment, \
+ DefaultTemplateDataProvider, get_template_data
from Bcfg2.Server.Plugins.Cfg import CfgGenerator
from genshi.template import TemplateLoader, NewTextTemplate
from genshi.template.eval import UndefinedError, Suite
@@ -42,6 +43,18 @@ d['a']"""
GENSHI_REMOVES_BLANK_LINES = _genshi_removes_blank_lines()
+class DefaultGenshiDataProvider(DefaultTemplateDataProvider):
+ """ Template data provider for Genshi templates. Cheetah and
+ Genshi currently differ over the value of the ``path`` variable,
+ which is why this is necessary. """
+
+ def get_template_data(self, entry, metadata, template):
+ rv = DefaultTemplateDataProvider.get_template_data(self, entry,
+ metadata, template)
+ rv['path'] = template
+ return rv
+
+
class CfgGenshiGenerator(CfgGenerator):
""" The CfgGenshiGenerator allows you to use the `Genshi
<http://genshi.edgewall.org>`_ templating system to generate
@@ -81,13 +94,10 @@ class CfgGenshiGenerator(CfgGenerator):
raise PluginExecutionError("Failed to load template %s" %
self.name)
- fname = entry.get('realname', entry.get('name'))
stream = self.template.generate(
- name=fname,
- metadata=metadata,
- path=self.name,
- source_path=self.name,
- repo=Bcfg2.Options.setup.repository).filter(removecomment)
+ **get_template_data(
+ entry, metadata, self.name,
+ default=DefaultGenshiDataProvider())).filter(removecomment)
try:
try:
return stream.render('text',