d23344d0 by Marcos Cano

minified version of templar using String template

1 parent 7dee8c20
1 this a template file
2
3 var = [[{variable}]]
4
5 otra_variable= [[{var}]]
...\ No newline at end of file ...\ No newline at end of file
1 variable=hello world
1 #!/usr/bin/python
2 import string, re, sys
3 import getopt,os.path
4
5
6 debug = False
7 ifile = ''
8 ofile = ifile
9 printit = False
10 vars=os.environ
11
12
13 class MyTemplate(string.Template):
14 #delimiter = '{{'
15 pattern = r'''
16 \[\[\{(?:
17 (?P<escaped>\[\[\{)|
18 (?P<named>[_a-z][_a-z0-9]*)\}\]\]|
19 (?P<braced>[_a-z][_a-z0-9]*)\}\]\]|
20 (?P<invalid>)
21 )
22 '''
23
24
25 def usage():
26 print """ usage: %s [OPTIONS]
27
28 OPTIONS:
29 -i, --ifile=ABSOLUTE_INPUT_FILE_PATH
30 input template file
31 by default it will replace in file
32
33 -v, --vars=JSON_VARS_FILE
34 json of variables file to replace in,
35 by default it loads the environment variables
36
37 -o, --ofile=ABS_OUTPUT_FILE_PATH
38 provide an output file,
39 override the input file default behaviour
40 -p, --print
41 print to stdout instead of replacing the file,
42 it will do replace in file.
43 it will override the output file and input file default behaviour
44
45 """%sys.argv[0]
46 sys.exit(2)
47
48
49 def engine(ifile,ofile,vars):
50 template_content = open(ifile, "r").read()
51 template= MyTemplate(template_content)
52
53 #print 'MATCHES:', t.pattern.findall(t.template)
54 outputText = template.safe_substitute(vars)
55 print 'MATCHES:', template.pattern.findall(template.template)
56
57
58 if printit:
59 print "AFTER TEMPLATE:"
60 #print outputText
61 print outputText.encode('ascii', 'ignore')
62 else:
63 f = open(ofile,'w')
64 f.write(outputText.encode('ascii', 'ignore'))
65 f.close()
66
67
68
69
70 def main(argv):
71 try:
72 options, remainder = getopt.getopt(sys.argv[1:], 'o:f:i:v:dph', ['ofile=','o=',
73 'ifile=','i=',
74 'vars=','v=',
75 'print','p',
76 'help','h'
77 ])
78 except getopt.GetoptError:
79 usage()
80 sys.exit(2)
81
82 global debug, vars, ifile, ofile,printit
83
84 for opt, arg in options:
85 if opt in ('-v','--vars','--v'):
86 if os.path.isfile(arg):
87 with open(arg) as data_file:
88 print "using file"
89 vars = json.load(data_file)
90 else:
91 print "using environment"
92 vars=os.environ
93
94 elif opt in ('-f','--ifile','--i','-i'):
95 if os.path.isfile(arg):
96 ifile=arg
97 ofile=ifile
98 else:
99 print "file provided [%s] does not exist" %arg
100 usage()
101
102 elif opt in ("-o" ,"--ofile",'--o') :
103 ofile = arg
104 elif opt in ('-p','--print'):
105 printit=True
106 elif opt in ('-h','--help'):
107 usage()
108 else:
109 usage()
110
111 if debug:
112 print 'OPTIONS :', options
113 print 'VARS :', pprint(vars)
114 print 'DEBUG :', debug
115 print 'OUTPUT :', ofile
116 print 'INPUT :', ifile
117 print 'PRINTIT :', printit
118 print 'REMAINING :', remainder
119
120
121
122 engine(ifile, ofile, vars )
123
124
125
126
127 if __name__ == "__main__":
128 if len(sys.argv) > 1:
129 main(sys.argv[1:])
130 else:
131 usage()
132 sys.exit()
133
134
135
136
137