7b09e3ac |
#!/usr/bin/env python2
|
2add3e2a |
from __future__ import division
import argparse
import collections
import os
|
03c89fec |
import sys
|
2add3e2a |
def parse_line(line):
line = line.split(':')
if len(line) > 2:
expr = line.pop().strip()
var = line.pop().strip()
desc = ':'.join(line).strip()
else:
expr = ''
var = line.pop().strip()
desc = ':'.join(line).strip()
|
03c89fec |
expr = expr.partition(' = ')[0]
|
2add3e2a |
return expr,var,desc
def eval_line(expr,variables):
return eval(expr, {}, variables)
|
03c89fec |
def run_template(f, values):
variables = {}
for line in f:
line = line.strip()
if line == '':
print;continue
expr, var, desc = parse_line(line)
if expr == '':
if values != []:
expr = values.pop(0)
|
2add3e2a |
else:
|
03c89fec |
expr = raw_input('%s? ' % desc)
res = variables[var] = eval_line(expr, variables)
else:
res = variables[var] = eval_line(expr, variables)
print '%s: %s: %s = %s' % (desc, var, expr, res)
|
2add3e2a |
|
03c89fec |
def get_template_info(f, verbose=False):
tmpl = f.read()
variables = ' '.join(var for expr,var,desc in map(parse_line, tmpl.split('\n')) if expr == '' and var != '')
print 'Template Usage: %s %s' % (os.path.basename(t).rpartition('.')[0], variables)
if verbose:
print
print 'Template Source:'
print tmpl
|
2add3e2a |
def main():
template_dir = os.environ.get('SYMBCALC_TEMPLATES', 'templates')
argparser = argparse.ArgumentParser()
argparser.add_argument('--template-dir', dest='td', default=template_dir)
argparser.add_argument('template', nargs='?')
argparser.add_argument('values', nargs='*')
argparser.add_argument('-i', action='store_true')
argparser.add_argument('-v', action='store_true')
args = argparser.parse_args()
template = None
|
03c89fec |
if len(sys.argv) > 1:
if args.template:
template = '%s.tmpl' % os.path.join(args.td, args.template)
|
2add3e2a |
|
03c89fec |
if args.i:
if template:
with open(template) as file_:
get_template_info(file_, args.v)
else:
print 'You must supply a template to get info about'
elif args.template:
try:
with open(template) as file_:
run_template(file_, args.values)
except (KeyboardInterrupt, EOFError): pass
|
2add3e2a |
else:
|
03c89fec |
print 'Available Templates:'
print '---'
for x in os.listdir(args.td):
if not x.endswith('.tmpl'): continue
print x.rpartition('.')[0]
else: run_template(sys.stdin, [])
|
2add3e2a |
if __name__ == '__main__':
main()
|