diff --git a/utils/test-parse-template b/utils/test-parse-template new file mode 100755 index 00000000..dab8d4bf --- /dev/null +++ b/utils/test-parse-template @@ -0,0 +1,80 @@ +#!/usr/bin/python +# test-parse-template - parse and print (but don't execute!) a Lorax Template. +# Copyright (C) 2011 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Red Hat Author(s): Will Woods + +import sys, inspect +from pylorax.base import DataHolder +from pylorax.ltmpl import LoraxTemplate +from mako.exceptions import text_error_template + +data = DataHolder() +data.arch = DataHolder(basearch='ARCH.BASEARCH', buildarch='ARCH.BUILDARCH', libdir='ARCH.LIBDIR') +data.product = DataHolder(name='PRODUCT.NAME', version='PRODUCT.VERSION') +data.glob = lambda g: ['glob.1', 'glob.2'] +data.exists = lambda e: True +data.udev_escape = lambda s: "UDEV_ESCAPE(%s)" % s.upper() +data.removelocales = ['REMOVELOCALE1', 'REMOVELOCALE2'] +data.kernels = [DataHolder(path="/path/to/vmlinuz", initrd=DataHolder(path="/path/to/initrd.img"), flavor=None, arch=data.arch.basearch)] +data.basearch = data.arch.basearch +data.libdir = data.arch.libdir + +def get_args(template): + argspec = inspect.getargspec(template.module.render_body) + return set(argspec.args[1:]) # skip "context" + +def readtemplate(templatefile): + parser = LoraxTemplate(directories=['.']) + from mako.lookup import TemplateLookup + lookup = TemplateLookup(directories=parser.directories) + return lookup.get_template(templatefile) + +if __name__ == '__main__': + # check args + if len(sys.argv) == 1: + print "usage: %s TEMPLATE [arg1=value1] [arg2=value2] ..." + + # read template + templatefile = sys.argv[1] + print "parsing %s" % templatefile + t = readtemplate(templatefile) + reqargs = get_args(t) + print "required args: %s" % ' '.join(reqargs) + + # parse extra commandline args + if len(sys.argv) > 2: + for arg in sys.argv[2:]: + if '=' in arg: + k,v = arg.split('=',1) + data[k] = v + + # fill in remaining blanks + for a in reqargs.difference(data): + data[a] = a.upper() + + print "rendering %s using values:" % templatefile + for a in data: + print " %s=%s" % (a,repr(data[a])) + + # render and print + try: + lines = t.render(**data).splitlines() + for line in lines: + print line + except Exception: + print text_error_template().render() + raise SystemExit(1)