Mercurial > hg > MakeItSo
annotate makeitso/template.py @ 140:3046e15c3dd7
fix up sectioning
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Tue, 21 Feb 2012 21:06:11 -0800 |
| parents | b2152efec89a |
| children | cfd4f1e91090 |
| 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 |
|
122
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
16 |
|
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
|
17 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
|
18 """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
|
19 |
|
58
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
20 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
|
21 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
|
22 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
|
23 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
|
24 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
|
25 |
|
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 # 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
|
27 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
|
28 |
|
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 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
|
30 |
|
71
95d1bb85ab3c
add a copy method to a variable to get a non-futzed copy
Jeff Hammel <jhammel@mozilla.com>
parents:
70
diff
changeset
|
31 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
|
32 """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
|
33 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
|
34 |
|
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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 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
|
40 self._set = True |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
41 return self.value |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
42 |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
43 def isset(self): |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
44 """whether the variable has been set or not""" |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
45 return self._set |
|
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
|
46 |
|
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 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
|
48 """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
|
49 fd.write(self.display()) |
|
100
b54898f7d8a9
now API template variables seem to work
Jeff Hammel <jhammel@mozilla.com>
parents:
99
diff
changeset
|
50 return self.set(raw_input()) |
|
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
|
51 |
|
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 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
|
53 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
|
54 if self.default: |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
55 return 'Enter %s [DEFAULT: %s]: ' % (description, repr(self.default)) |
|
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
|
56 else: |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
57 return 'Enter %s: ' % description |
|
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
|
58 |
|
75
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
59 def __repr__(self): |
|
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
60 return "Variable(name='%s')" % self.name |
|
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
61 |
|
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
62 def assemble(*args): |
|
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
63 names = set() |
|
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
64 retval = [] |
|
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
65 for arg in args: |
|
74
d16823fd8c4a
check for subclassing, not instance of
Jeff Hammel <jhammel@mozilla.com>
parents:
73
diff
changeset
|
66 if issubclass(arg, MakeItSoTemplate): |
|
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
67 arg = arg.vars |
| 73 | 68 for variable in arg: |
|
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
69 if variable.name in names: |
|
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
70 continue |
|
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
71 retval.append(variable.copy()) |
|
75
ec35e5763b52
* fix with assemble function
Jeff Hammel <jhammel@mozilla.com>
parents:
74
diff
changeset
|
72 names.add(variable.name) |
|
72
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
73 return retval |
|
f44af8f30147
add function to assemble variables
Jeff Hammel <jhammel@mozilla.com>
parents:
71
diff
changeset
|
74 |
|
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
75 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
|
76 """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
|
77 |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
78 # 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
|
79 name = '' |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
80 |
|
56
728cae02a6ed
* fix another variable-related bug
Jeff Hammel <jhammel@mozilla.com>
parents:
44
diff
changeset
|
81 # description of the template |
|
728cae02a6ed
* fix another variable-related bug
Jeff Hammel <jhammel@mozilla.com>
parents:
44
diff
changeset
|
82 description = '' |
|
728cae02a6ed
* fix another variable-related bug
Jeff Hammel <jhammel@mozilla.com>
parents:
44
diff
changeset
|
83 |
|
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
84 # 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
|
85 # 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
|
86 templates = [] |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
87 |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
88 # variables |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
89 vars = [] |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
90 |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
91 # 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
|
92 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
|
93 |
|
90
26b9c3bba04e
make the api for substitute() variables, output
Jeff Hammel <jhammel@mozilla.com>
parents:
88
diff
changeset
|
94 def __init__(self, interactive=True, usedefaults=True, variables=None): |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
95 """ |
|
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
96 - 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
|
97 - 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
|
98 - 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
|
99 """ |
|
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
|
100 |
|
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
Jeff Hammel <jhammel@mozilla.com>
parents:
62
diff
changeset
|
101 # boilerplate |
|
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
102 variables = variables or {} |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
75
diff
changeset
|
103 if not self.description and hasattr(self, '__doc__'): |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
75
diff
changeset
|
104 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
|
105 self.interactive = interactive |
|
66
7821c82772f5
determine the location in a better way
Jeff Hammel <jhammel@mozilla.com>
parents:
65
diff
changeset
|
106 _file = sys.modules[self.__class__.__module__].__file__ |
|
7821c82772f5
determine the location in a better way
Jeff Hammel <jhammel@mozilla.com>
parents:
65
diff
changeset
|
107 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
|
108 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
|
109 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
|
110 |
|
58
112bf081148c
make a full CLI class for a single API template
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
111 # 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
|
112 self.vardict = {} |
|
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
113 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
|
114 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
|
115 |
|
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
116 # ensure all of these templates exist |
|
65
0152741621c1
check in a failing test wrt location
Jeff Hammel <jhammel@mozilla.com>
parents:
64
diff
changeset
|
117 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
|
118 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
|
119 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
|
120 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
|
121 continue |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
122 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
|
123 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
|
124 else: |
|
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
125 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
|
126 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
|
127 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
|
128 |
|
122
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
129 @classmethod |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
130 def get_description(cls): |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
131 if hasattr(cls, 'description'): |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
132 if cls.description: |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
133 return cls.description |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
134 if hasattr(cls, '__doc__'): |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
135 return cls.__doc__ |
|
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
113
diff
changeset
|
136 |
|
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 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
|
138 # 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 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
|
145 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
|
146 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
|
147 |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
148 def missing(self, **variables): |
|
113
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
149 |
|
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
150 # boilerplate |
|
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
|
151 vars = self.get_variables(**variables) |
|
62
30100690ad3f
display defaults with command line --help option
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
152 missing = set([]) |
| 64 | 153 |
| 154 # get known needed variables | |
| 155 for var in self.vars: | |
|
113
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
156 if var.name not in vars: |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
157 if var.default is Undefined: |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
158 missing.add(var.name) |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
159 continue |
|
100
b54898f7d8a9
now API template variables seem to work
Jeff Hammel <jhammel@mozilla.com>
parents:
99
diff
changeset
|
160 if (not self.usedefaults) and (not var.isset()): |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
161 missing.add(var.name) |
| 64 | 162 |
|
113
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
163 # scan templates for other variables |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
164 if self.look: |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
165 template = PolyTemplate(self._templates, |
| 112 | 166 interactive=False, |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
167 variables=vars) |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
168 missing.update(template.missing()) |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
169 |
| 64 | 170 return missing |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
171 |
| 101 | 172 def pre(self, variables, output): |
|
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
|
173 """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
|
174 |
|
100
b54898f7d8a9
now API template variables seem to work
Jeff Hammel <jhammel@mozilla.com>
parents:
99
diff
changeset
|
175 def substitute(self, variables, output=None): |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
176 """do the substitution""" |
|
113
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
177 |
|
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
178 # get the variables |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
179 vars = self.get_variables(**variables) |
| 101 | 180 self.pre(vars, output) |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
181 self.check_missing(vars) |
| 64 | 182 |
| 183 # do the substitution | |
|
67
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
184 template = PolyTemplate(self._templates, |
|
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
185 interactive=self.interactive, |
|
a0f7bfa98755
API templates now hobble along on their own two feet
Jeff Hammel <jhammel@mozilla.com>
parents:
66
diff
changeset
|
186 variables=vars) |
|
88
712a6d358083
fixed output broke other things
Jeff Hammel <jhammel@mozilla.com>
parents:
78
diff
changeset
|
187 template.check_output(output) |
|
90
26b9c3bba04e
make the api for substitute() variables, output
Jeff Hammel <jhammel@mozilla.com>
parents:
88
diff
changeset
|
188 template.substitute({}, output) |
|
113
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
189 |
|
c3b8ce33d3ad
make variable getting logic a little less horrible
Jeff Hammel <jhammel@mozilla.com>
parents:
112
diff
changeset
|
190 # do whatever you need to do afterwards |
| 101 | 191 self.post(vars, output) |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
192 |
| 101 | 193 def post(self, variables, output): |
|
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
|
194 """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
|
195 |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
196 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
|
197 """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
|
198 retval = {} |
|
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
199 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
|
200 if i in self.vardict: |
|
99
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
201 value = self.vardict[i].read() |
|
d9c6e26a42ff
fix up interactivity of API template a bit. still doesnt quite work
Jeff Hammel <jhammel@mozilla.com>
parents:
90
diff
changeset
|
202 retval[i] = value |
|
44
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
203 else: |
|
6e08cca7d656
do API variable reading and stubbing a bit for control flow
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
204 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
|
205 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
|
206 |
|
42
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
207 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
|
208 """template for backwards compatability with PasteScript""" |
