#!/usr/bin/env python

def render(data, filename, kw):
    from mako.template import Template
    from mako.lookup import TemplateLookup

    lookup = TemplateLookup(["."])
    return Template(data, filename, 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
    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)")

    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
    else:
        filename = args[0]
        if not isfile(filename):
            raise SystemExit("error: can't find %s" % filename)
        fo = open(filename)

    kw = dict([varsplit(var) for var in opts.var])
    data = fo.read()
    print(render(data, filename, kw))

if __name__ == "__main__":
    main()
