def main():
"""Main application entry point."""
if len(sys.argv) != 2:
print "Usage: yamlcalc <input-file>"
return
mapping_tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
sequence_tag = yaml.resolver.BaseResolver.DEFAULT_SEQUENCE_TAG
yaml.add_constructor(mapping_tag, dict_constructor)
yaml.add_constructor(sequence_tag, list_constructor)
yaml.add_representer(CalcDict, dict_representer)
yaml.add_representer(CalcList, list_representer)
try:
with open(sys.argv[1]) as infp:
top = yaml.load(infp)
if not isinstance(top, CalcDict):
type_name = type(top).__name__
err("Top level element should be dict not {0}".format(type_name))
defs = {}
defs_str = top.get("DEFS", "")
try:
exec defs_str in defs
except Exception as exc:
err("Error executing DEFS: {0}".format(exc))
CalcContainer.set_top(defs, top)
view = top.get("VIEW", {})
writer_type = view.get("type", "raw")
writer_func_name = "_".join(writer_type.split("-"))
try:
write = globals()["write_" + writer_func_name]
except KeyError:
err("Error unsupporter writer: {0}".format(writer_type))
outdir, ext = os.path.splitext(sys.argv[1])
if os.path.exists(outdir):
if not os.path.isdir(outdir):
err("Path exists but is not a directory: {0}".format(outdir))
else:
try:
os.mkdir(outdir)
except OSError as exc:
err("Error create directory: {0}".format(outdir))
write(view, top, outdir)
except IOError as exc:
err("Error opening file: {0}".format(exc))
except yaml.YAMLError as exc:
err("Error parsing input: {0}".format(exc))
评论列表
文章目录