diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-02-14 11:17:40 -0500 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-02-14 11:17:40 -0500 |
commit | c7fbaf3552b61cb272188a9cfc7590c0f14934a8 (patch) | |
tree | 3a749afea8eae0263f1e4b4368a11aae36fbe8a0 /src/lib/Bcfg2/Server | |
parent | e3f871022b9cc4bb4916c23920c6621be8c33e7d (diff) | |
download | bcfg2-c7fbaf3552b61cb272188a9cfc7590c0f14934a8.tar.gz bcfg2-c7fbaf3552b61cb272188a9cfc7590c0f14934a8.tar.bz2 bcfg2-c7fbaf3552b61cb272188a9cfc7590c0f14934a8.zip |
better Genshi syntax lint checker
Diffstat (limited to 'src/lib/Bcfg2/Server')
-rwxr-xr-x | src/lib/Bcfg2/Server/Lint/Genshi.py | 73 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Bundler.py | 3 |
2 files changed, 57 insertions, 19 deletions
diff --git a/src/lib/Bcfg2/Server/Lint/Genshi.py b/src/lib/Bcfg2/Server/Lint/Genshi.py index 18b4ae28a..b8c823eb9 100755 --- a/src/lib/Bcfg2/Server/Lint/Genshi.py +++ b/src/lib/Bcfg2/Server/Lint/Genshi.py @@ -1,8 +1,11 @@ """ Check Genshi templates for syntax errors """ import sys -import genshi.template import Bcfg2.Server.Lint +from genshi.template import TemplateLoader, NewTextTemplate, MarkupTemplate, \ + TemplateSyntaxError +from Bcfg2.Server.Plugins.Bundler import BundleTemplateFile +from Bcfg2.Server.Plugins.Cfg.CfgGenshiGenerator import CfgGenshiGenerator class Genshi(Bcfg2.Server.Lint.ServerPlugin): @@ -10,30 +13,66 @@ class Genshi(Bcfg2.Server.Lint.ServerPlugin): def Run(self): """ run plugin """ - loader = genshi.template.TemplateLoader() - for plugin in ['Cfg', 'TGenshi']: - if plugin in self.core.plugins: - self.check_files(self.core.plugins[plugin].entries, - loader=loader) + if 'Cfg' in self.core.plugins: + self.check_cfg() + if 'TGenshi' in self.core.plugins: + self.check_tgenshi() + if 'Bundler' in self.core.plugins: + self.check_bundler() @classmethod def Errors(cls): return {"genshi-syntax-error": "error"} - def check_files(self, entries, loader=None): - """ Check genshi templates in a list of entries for syntax - errors """ - if loader is None: - loader = genshi.template.TemplateLoader() + def check_cfg(self): + """ Check genshi templates in Cfg for syntax errors """ + for entryset in self.core.plugins['Cfg'].entries.values(): + for entry in entryset.entries.values(): + if "hosts" in entry.name: + print "checking %s" % entry.name + print " handles: %s" % self.HandlesFile(entry.name) + print " is genshi: %s" % isinstance(entry, CfgGenshiGenerator) + if isinstance(entry, CfgGenshiGenerator): + print " has template: %s" % bool(entry.template) + if (self.HandlesFile(entry.name) and + isinstance(entry, CfgGenshiGenerator) and + not entry.template): + try: + entry.loader.load(entry.name, + cls=NewTextTemplate) + if "hosts" in entry.name: + print " loaded successfully" + except TemplateSyntaxError: + if "hosts" in entry.name: + print " failed loading" + err = sys.exc_info()[1] + self.LintError("genshi-syntax-error", + "Genshi syntax error: %s" % err) - for eset in entries.values(): + def check_tgenshi(self): + """ Check templates in TGenshi for syntax errors """ + loader = TemplateLoader() + + for eset in self.core.plugins['TGenshi'].entries.values(): for fname, sdata in list(eset.entries.items()): - if (self.HandlesFile(fname) and - (fname.endswith(".genshi") or fname.endswith(".newtxt"))): + if self.HandlesFile(fname): try: - loader.load(sdata.name, - cls=genshi.template.NewTextTemplate) - except genshi.template.TemplateSyntaxError: + loader.load(sdata.name, cls=NewTextTemplate) + except TemplateSyntaxError: err = sys.exc_info()[1] self.LintError("genshi-syntax-error", "Genshi syntax error: %s" % err) + + def check_bundler(self): + """ Check templates in Bundler for syntax errors """ + loader = TemplateLoader() + + for entry in self.core.plugins['Bundler'].entries.values(): + if (self.HandlesFile(entry.name) and + isinstance(entry, BundleTemplateFile)): + try: + loader.load(entry.name, cls=MarkupTemplate) + except TemplateSyntaxError: + err = sys.exc_info()[1] + self.LintError("genshi-syntax-error", + "Genshi syntax error: %s" % err) diff --git a/src/lib/Bcfg2/Server/Plugins/Bundler.py b/src/lib/Bcfg2/Server/Plugins/Bundler.py index b200346bc..7030c1574 100644 --- a/src/lib/Bcfg2/Server/Plugins/Bundler.py +++ b/src/lib/Bcfg2/Server/Plugins/Bundler.py @@ -109,8 +109,7 @@ class Bundler(Bcfg2.Server.Plugin.Plugin, """ Add the correct child entry type to Bundler depending on whether the XML file in question is a plain XML file or a templated bundle """ - bundle = lxml.etree.parse(name, - parser=Bcfg2.Server.XMLParser) + bundle = lxml.etree.parse(name, parser=Bcfg2.Server.XMLParser) nsmap = bundle.getroot().nsmap if (name.endswith('.genshi') or ('py' in nsmap and |