#!/usr/bin/env python def render(data, kw, lookup_dirs): from mako.template import Template from mako.lookup import TemplateLookup lookup = TemplateLookup(lookup_dirs) return Template(data, lookup=lookup).render(**kw) def varsplit(var): if "=" not in var: return (var, "") return var.split("=", 1) def main(argv=None): from os.path import isfile, dirname from sys import stdin if argv is None: import sys argv = sys.argv from optparse import OptionParser parser = OptionParser("usage: %prog [FILENAME]") parser.add_option("--var", default=[], action="append", help="variable (can be used multiple times, use name=value)") parser.add_option("--template-dir", default=[], action="append", help="Directory to use for template lookup (multiple " "directories may be provided). If not given then if the " "template is read from stdin, the value defaults to be " "the current directory, otherwise it defaults to be the " "parent directory of the file provided.") opts, args = parser.parse_args(argv[1:]) if len(args) not in (0, 1): parser.error("wrong number of arguments") # Will exit if (len(args) == 0) or (args[0] == "-"): fo = stdin lookup_dirs = opts.template_dir or ["."] else: filename = args[0] if not isfile(filename): raise SystemExit("error: can't find %s" % filename) fo = open(filename) lookup_dirs = opts.template_dir or [dirname(filename)] kw = dict([varsplit(var) for var in opts.var]) data = fo.read() try: print(render(data, kw, lookup_dirs=lookup_dirs)) except: from mako import exceptions print(exceptions.text_error_template().render(), file=sys.stderr) sys.exit(1) if __name__ == "__main__": main()