summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-11-11 09:27:08 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-11-11 09:28:53 -0500
commit4b531e75b3ff269ff96efd4a262a4101efd12375 (patch)
treec1d3ff7f33323bede95aa49361209b3fb4ec636d /src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
parentc2a164eb809c5d540495ae8bb2734cfa45643f33 (diff)
downloadbcfg2-4b531e75b3ff269ff96efd4a262a4101efd12375.tar.gz
bcfg2-4b531e75b3ff269ff96efd4a262a4101efd12375.tar.bz2
bcfg2-4b531e75b3ff269ff96efd4a262a4101efd12375.zip
TemplateHelper: misc. cleanup of __default__ feature
* Don't require symbols to be listed twice; they can be listed in either __export__ or __default__, but need not be in both. * Check for reserved words in __default__ list
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/TemplateHelper.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/TemplateHelper.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py b/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
index 05b5086f9..047fc062e 100644
--- a/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
+++ b/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
@@ -3,8 +3,10 @@
import re
import imp
import sys
+import lxml.etree
+from Bcfg2.Server.Plugin import Plugin, Connector, DirectoryBacked, \
+ TemplateDataProvider, DefaultTemplateDataProvider
from Bcfg2.Logger import Debuggable
-import Bcfg2.Server.Plugin
MODULE_RE = re.compile(r'(?P<filename>(?P<module>[^\/]+)\.py)$')
@@ -34,6 +36,11 @@ class HelperModule(Debuggable):
#: The attributes added to the template namespace by this module
self.defaults = []
+ default_prov = DefaultTemplateDataProvider()
+ self.reserved_defaults = default_prov.get_template_data(
+ lxml.etree.Element("Path", name="/dummy"),
+ None, None).keys() + ["path"]
+
def HandleEvent(self, event=None):
""" HandleEvent is called whenever the FAM registers an event.
@@ -59,7 +66,10 @@ class HelperModule(Debuggable):
return
newattrs = []
- for sym in module.__export__:
+ for sym in module.__export__ + getattr(module, "__default__", []):
+ if sym in newattrs:
+ # already added to attribute list
+ continue
if sym not in self._attrs and hasattr(self, sym):
self.logger.warning(
"TemplateHelper: %s: %s is a reserved keyword, "
@@ -81,18 +91,14 @@ class HelperModule(Debuggable):
self.defaults = []
for sym in getattr(module, "__default__", []):
- if sym not in self._attrs:
+ if sym in self.reserved_defaults:
self.logger.warning(
- "TemplateHelper: %s: %s is flagged as a default, "
- "but is not exported; skipping")
- continue
+ "TemplateHelper: %s: %s is a reserved keyword, not adding "
+ "as default" % (self.name, sym))
self.defaults.append(sym)
-class TemplateHelper(Bcfg2.Server.Plugin.Plugin,
- Bcfg2.Server.Plugin.Connector,
- Bcfg2.Server.Plugin.DirectoryBacked,
- Bcfg2.Server.Plugin.TemplateDataProvider):
+class TemplateHelper(Plugin, Connector, DirectoryBacked, TemplateDataProvider):
""" A plugin to provide helper classes and functions to templates """
__author__ = 'chris.a.st.pierre@gmail.com'
ignore = re.compile(r'^(\.#.*|.*~|\..*\.(sw[px])|.*\.py[co])$')
@@ -100,10 +106,10 @@ class TemplateHelper(Bcfg2.Server.Plugin.Plugin,
__child__ = HelperModule
def __init__(self, core):
- Bcfg2.Server.Plugin.Plugin.__init__(self, core)
- Bcfg2.Server.Plugin.Connector.__init__(self)
- Bcfg2.Server.Plugin.DirectoryBacked.__init__(self, self.data)
- Bcfg2.Server.Plugin.TemplateDataProvider.__init__(self)
+ Plugin.__init__(self, core)
+ Connector.__init__(self)
+ DirectoryBacked.__init__(self, self.data)
+ TemplateDataProvider.__init__(self)
def get_additional_data(self, _):
return dict([(h._module_name, h) # pylint: disable=W0212