teleport/server/www/packages/packages-windows/x86/mako/cmd.py

104 lines
2.8 KiB
Python
Raw Normal View History

2018-09-23 19:29:42 +00:00
# mako/cmd.py
2020-06-04 16:58:17 +00:00
# Copyright 2006-2020 the Mako authors and contributors <see AUTHORS file>
2018-09-23 19:29:42 +00:00
#
# This module is part of Mako and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
from argparse import ArgumentParser
2020-06-04 16:58:17 +00:00
import io
from os.path import dirname
from os.path import isfile
2018-09-23 19:29:42 +00:00
import sys
2020-06-04 16:58:17 +00:00
2018-09-23 19:29:42 +00:00
from mako import exceptions
2020-06-04 16:58:17 +00:00
from mako.lookup import TemplateLookup
from mako.template import Template
2018-09-23 19:29:42 +00:00
def varsplit(var):
if "=" not in var:
return (var, "")
return var.split("=", 1)
def _exit():
sys.stderr.write(exceptions.text_error_template().render())
sys.exit(1)
def cmdline(argv=None):
2020-06-04 16:58:17 +00:00
parser = ArgumentParser()
2018-09-23 19:29:42 +00:00
parser.add_argument(
2020-06-04 16:58:17 +00:00
"--var",
default=[],
action="append",
help="variable (can be used multiple times, use name=value)",
)
2018-09-23 19:29:42 +00:00
parser.add_argument(
2020-06-04 16:58:17 +00:00
"--template-dir",
default=[],
action="append",
2018-09-23 19:29:42 +00:00
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 "
2020-06-04 16:58:17 +00:00
"parent directory of the file provided.",
)
parser.add_argument(
"--output-encoding", default=None, help="force output encoding"
)
parser.add_argument(
"--output-file",
default=None,
help="Write to file upon successful render instead of stdout",
)
parser.add_argument("input", nargs="?", default="-")
2018-09-23 19:29:42 +00:00
options = parser.parse_args(argv)
2020-06-04 16:58:17 +00:00
output_encoding = options.output_encoding
output_file = options.output_file
if options.input == "-":
2018-09-23 19:29:42 +00:00
lookup_dirs = options.template_dir or ["."]
lookup = TemplateLookup(lookup_dirs)
try:
2020-06-04 16:58:17 +00:00
template = Template(
sys.stdin.read(),
lookup=lookup,
output_encoding=output_encoding,
)
2018-09-23 19:29:42 +00:00
except:
_exit()
else:
filename = options.input
if not isfile(filename):
raise SystemExit("error: can't find %s" % filename)
lookup_dirs = options.template_dir or [dirname(filename)]
lookup = TemplateLookup(lookup_dirs)
try:
2020-06-04 16:58:17 +00:00
template = Template(
filename=filename,
lookup=lookup,
output_encoding=output_encoding,
)
2018-09-23 19:29:42 +00:00
except:
_exit()
kw = dict([varsplit(var) for var in options.var])
try:
2020-06-04 16:58:17 +00:00
rendered = template.render(**kw)
2018-09-23 19:29:42 +00:00
except:
_exit()
2020-06-04 16:58:17 +00:00
else:
if output_file:
io.open(output_file, "wt", encoding=output_encoding).write(
rendered
)
else:
sys.stdout.write(rendered)
2018-09-23 19:29:42 +00:00
if __name__ == "__main__":
cmdline()