summaryrefslogtreecommitdiff
path: root/scripts/mako-render
blob: 2b951ab108118734eef221627cadeb819b4d9a65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/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()