Mercurial > hg > MakeItSo
annotate makeitso/template.py @ 80:0300ed78d630
add a setup.py template
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Sat, 08 Jan 2011 20:54:41 -0800 |
parents | d4184945f8a8 |
children | 712a6d358083 |
rev | line source |
---|---|
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 """ |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
2 basic API template class |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 """ |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
4 |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
5 import os |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 import sys |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 from makeitso import ContentTemplate |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
8 from makeitso import PolyTemplate |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
10 class Undefined(object): |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
11 """marker class for variables""" |
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
12 def __nonzero__(self): |
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
13 return False |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
14 Undefined = Undefined() # singleton |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
15 |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 class Variable(object): |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 """variable object for MakeItSo templates""" |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 |
58
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
19 def __init__(self, name, description=None, default=Undefined, |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 cast=None): |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 self.name = name |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 self.default = default |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 self.description = description |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 # TODO (maybe): get cast from default variable type if not None |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 self.cast = cast |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
28 self._set = False |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
29 |
71
95d1bb85ab3c
add a copy method to a variable to get a non-futzed copy
Jeff Hammel <jhammel@mozilla.com>
parents:
70
diff
changeset
|
30 def copy(self): |
95d1bb85ab3c
add a copy method to a variable to get a non-futzed copy
Jeff Hammel <jhammel@mozilla.com>
parents:
70
diff
changeset
|
31 """returns a copy of the variable""" |
95d1bb85ab3c
add a copy method to a variable to get a non-futzed copy
Jeff Hammel <jhammel@mozilla.com>
parents:
70
diff
changeset
|
32 return Variable(self.name, self.description, self.default, self.cast) |
95d1bb85ab3c
add a copy method to a variable to get a non-futzed copy
Jeff Hammel <jhammel@mozilla.com>
parents:
70
diff
changeset
|
33 |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 def set(self, value): |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 if self.cast: |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 self.value = self.cast(value) |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 else: |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 self.value = value |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 self._set = True |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 def read(self, fd=sys.stdout): |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
42 """prompt and read the variable from stdin""" |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
43 fd.write(self.display()) |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
44 self.set(raw_input()) |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
45 |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
46 def display(self): |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
47 description = self.description or self.name |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
48 if self.default: |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
49 return 'Enter %s [DEFAULT: %s]:' % (description, repr(self.default)) |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
50 else: |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
51 return 'Enter %s:' % description |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
52 |
75
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
53 def __repr__(self): |
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
54 return "Variable(name='%s')" % self.name |
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
55 |
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
56 def assemble(*args): |
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
57 names = set() |
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
58 retval = [] |
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
59 for arg in args: |
74
d16823fd8c4a
check for subclassing, not instance of
Jeff Hammel <jhammel@mozilla.com>
parents:
73
diff
changeset
|
60 if issubclass(arg, MakeItSoTemplate): |
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
61 arg = arg.vars |
73 | 62 for variable in arg: |
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
63 if variable.name in names: |
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
64 continue |
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
65 retval.append(variable.copy()) |
75
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
66 names.add(variable.name) |
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
67 return retval |
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
68 |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
69 class MakeItSoTemplate(ContentTemplate): |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
70 """API template for MakeItSo""" |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
71 |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
72 # name of the template |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
73 name = '' |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
74 |
56
728cae02a6ed
* fix another variable-related bug
Jeff Hammel <jhammel@mozilla.com>
parents:
44
diff
changeset
|
75 # description of the template |
728cae02a6ed
* fix another variable-related bug
Jeff Hammel <jhammel@mozilla.com>
parents:
44
diff
changeset
|
76 description = '' |
728cae02a6ed
* fix another variable-related bug
Jeff Hammel <jhammel@mozilla.com>
parents:
44
diff
changeset
|
77 |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
78 # templates to interpolate |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
79 # paths are relative to __file__ unless absolute or URIs |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
80 templates = [] |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
81 |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
82 # variables |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
83 vars = [] |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
84 |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
85 # inspect the templates for more variables |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
86 look = False |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
87 |
58
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
88 def __init__(self, output=None, interactive=True, usedefaults=True, |
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
89 variables=None): |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
90 """ |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
91 - output : output file or directory |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
92 - interactive : whether tointeractively get variables |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
93 - usedefaults : try to use the default values if not specified |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
94 """ |
63
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
95 |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
96 # boilerplate |
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
97 variables = variables or {} |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
98 self.output = output |
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
75
diff
changeset
|
99 if not self.description and hasattr(self, '__doc__'): |
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
75
diff
changeset
|
100 self.description = self.__doc__ |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
101 self.interactive = interactive |
66
7821c82772f5
determine the location in a better way
Jeff Hammel <jhammel@mozilla.com>
parents:
65
diff
changeset
|
102 _file = sys.modules[self.__class__.__module__].__file__ |
7821c82772f5
determine the location in a better way
Jeff Hammel <jhammel@mozilla.com>
parents:
65
diff
changeset
|
103 self.location = os.path.dirname(os.path.abspath(_file)) |
58
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
104 self.defaults = variables.copy() |
63
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
105 self.usedefaults = usedefaults |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
106 |
58
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
107 # make a dictionary of the variables for lookup convenience |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
108 self.vardict = {} |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
109 for i in self.vars: |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
110 self.vardict[i.name] = i |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
111 |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
112 # ensure all of these templates exist |
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
113 self._templates = [] |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
114 for template in self.templates: |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
115 if template.startswith('http://') or template.startswith('https://'): |
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
116 self._templates.append(template) |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
117 continue |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
118 if os.path.isabs(template): |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
119 path = template |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
120 else: |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
121 path = os.path.join(self.location, template) |
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
122 assert os.path.exists(path), "%s does not exist" % path |
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
123 self._templates.append(path) |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
124 |
63
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
125 def get_variables(self, **variables): |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
126 # XXX could do this in the ctor |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
127 vars = ContentTemplate.get_variables(self, **variables) |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
128 if self.usedefaults: |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
129 for variable in self.vars: |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
130 if variable.name in vars: |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
131 continue |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
132 if variable.default is not Undefined: |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
133 vars[variable.name] = variable.default |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
134 return vars |
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
135 |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
136 def missing(self, **variables): |
63
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
137 vars = self.get_variables(**variables) |
62
30100690ad3f
display defaults with command line --help option
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
138 missing = set([]) |
64 | 139 |
140 # get known needed variables | |
141 for var in self.vars: | |
142 if var.name not in vars: | |
143 missing.add(var) | |
144 | |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
145 if self.look: |
64 | 146 # scan templates for other variables |
147 raise NotImplementedError | |
148 | |
149 return missing | |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
150 |
69
a75138a952d0
using **kw doesnt update the actual dict; fix this
Jeff Hammel <jhammel@mozilla.com>
parents:
67
diff
changeset
|
151 def pre(self, variables): |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
152 """do stuff before interpolation""" |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
153 |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
154 def substitute(self, **variables): |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
155 """do the substitution""" |
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
156 |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
157 vars = self.get_variables(**variables) |
69
a75138a952d0
using **kw doesnt update the actual dict; fix this
Jeff Hammel <jhammel@mozilla.com>
parents:
67
diff
changeset
|
158 self.pre(vars) |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
159 self.check_missing(vars) |
64 | 160 |
161 # do the substitution | |
67
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
162 template = PolyTemplate(self._templates, |
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
163 output=self.output, |
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
164 interactive=self.interactive, |
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
165 variables=vars) |
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
166 template.substitute() |
64 | 167 |
69
a75138a952d0
using **kw doesnt update the actual dict; fix this
Jeff Hammel <jhammel@mozilla.com>
parents:
67
diff
changeset
|
168 self.post(vars) |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
169 |
69
a75138a952d0
using **kw doesnt update the actual dict; fix this
Jeff Hammel <jhammel@mozilla.com>
parents:
67
diff
changeset
|
170 def post(self, variables): |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
171 """do stuff after interpolation""" |
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
172 |
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
173 def read_variables(self, variables): |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
174 """read variables from stdin""" |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
175 retval = {} |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
176 for i in variables: |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
177 if i in self.vardict: |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
178 self.vardict[i].read() |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
179 else: |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
180 retval.update(ContentTemplate.read_variables(self, (i,))) |
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
181 return retval |
41
9956e13558dd
stub out what API templates will look like; put these in a separate file as theres no reason to clutter up the command line entry point any further
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
182 |
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
183 class PasteScriptTemplate(MakeItSoTemplate): |
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
184 """template for backwards compatability with PasteScript""" |