Mercurial > hg > MakeItSo
annotate makeitso/template.py @ 238:a1a615aae3d1
dont give up so easily
| author | Jeff Hammel <k0scist@gmail.com> | 
|---|---|
| date | Thu, 21 Jan 2016 09:48:14 -0800 | 
| parents | cfd4f1e91090 | 
| children | f10f5beb8ad1 | 
| 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: 
41diff
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: 
41diff
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: 
42diff
changeset | 10 class Undefined(object): | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 11 """marker class for variables""" | 
| 65 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
changeset | 12 def __nonzero__(self): | 
| 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
changeset | 13 return False | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 14 Undefined = Undefined() # singleton | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 15 | 
| 122 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
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""" | 
| 159 | 19 | 
| 58 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
56diff
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: 
70diff
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: 
70diff
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: 
70diff
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: 
70diff
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: 
90diff
changeset | 41 return self.value | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 42 | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 43 def isset(self): | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
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: 
90diff
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: 
99diff
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: 
90diff
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: 
90diff
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: 
74diff
changeset | 59 def __repr__(self): | 
| 
ec35e5763b52
* fix with assemble function
 Jeff Hammel <jhammel@mozilla.com> parents: 
74diff
changeset | 60 return "Variable(name='%s')" % self.name | 
| 
ec35e5763b52
* fix with assemble function
 Jeff Hammel <jhammel@mozilla.com> parents: 
74diff
changeset | 61 | 
| 72 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 62 def assemble(*args): | 
| 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 63 names = set() | 
| 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 64 retval = [] | 
| 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 65 for arg in args: | 
| 74 
d16823fd8c4a
check for subclassing, not instance of
 Jeff Hammel <jhammel@mozilla.com> parents: 
73diff
changeset | 66 if issubclass(arg, MakeItSoTemplate): | 
| 72 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 67 arg = arg.vars | 
| 73 | 68 for variable in arg: | 
| 72 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 69 if variable.name in names: | 
| 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 70 continue | 
| 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 71 retval.append(variable.copy()) | 
| 75 
ec35e5763b52
* fix with assemble function
 Jeff Hammel <jhammel@mozilla.com> parents: 
74diff
changeset | 72 names.add(variable.name) | 
| 72 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 73 return retval | 
| 
f44af8f30147
add function to assemble variables
 Jeff Hammel <jhammel@mozilla.com> parents: 
71diff
changeset | 74 | 
| 42 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
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: 
41diff
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: 
41diff
changeset | 77 | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
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: 
41diff
changeset | 79 name = '' | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 80 | 
| 56 
728cae02a6ed
* fix another variable-related bug
 Jeff Hammel <jhammel@mozilla.com> parents: 
44diff
changeset | 81 # description of the template | 
| 
728cae02a6ed
* fix another variable-related bug
 Jeff Hammel <jhammel@mozilla.com> parents: 
44diff
changeset | 82 description = '' | 
| 
728cae02a6ed
* fix another variable-related bug
 Jeff Hammel <jhammel@mozilla.com> parents: 
44diff
changeset | 83 | 
| 42 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
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: 
41diff
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: 
41diff
changeset | 86 templates = [] | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 87 | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 88 # variables | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 89 vars = [] | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 90 | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
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: 
41diff
changeset | 92 look = False | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 93 | 
| 90 
26b9c3bba04e
make the api for substitute() variables, output
 Jeff Hammel <jhammel@mozilla.com> parents: 
88diff
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: 
42diff
changeset | 95 """ | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
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: 
42diff
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: 
42diff
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: 
42diff
changeset | 99 """ | 
| 63 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 100 | 
| 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 101 # boilerplate | 
| 65 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
changeset | 102 variables = variables or {} | 
| 78 
d4184945f8a8
stub out python package creation
 Jeff Hammel <jhammel@mozilla.com> parents: 
75diff
changeset | 103 if not self.description and hasattr(self, '__doc__'): | 
| 
d4184945f8a8
stub out python package creation
 Jeff Hammel <jhammel@mozilla.com> parents: 
75diff
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: 
41diff
changeset | 105 self.interactive = interactive | 
| 66 
7821c82772f5
determine the location in a better way
 Jeff Hammel <jhammel@mozilla.com> parents: 
65diff
changeset | 106 _file = sys.modules[self.__class__.__module__].__file__ | 
| 
7821c82772f5
determine the location in a better way
 Jeff Hammel <jhammel@mozilla.com> parents: 
65diff
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: 
56diff
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: 
62diff
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: 
41diff
changeset | 110 | 
| 58 
112bf081148c
make a full CLI class for a single API template
 Jeff Hammel <jhammel@mozilla.com> parents: 
56diff
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: 
42diff
changeset | 112 self.vardict = {} | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
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: 
42diff
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: 
42diff
changeset | 115 | 
| 42 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 116 # ensure all of these templates exist | 
| 65 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
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: 
41diff
changeset | 118 for template in self.templates: | 
| 159 | 119 if not isinstance(template, basestring): | 
| 120 template = os.path.join(*template) | |
| 42 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 121 if template.startswith('http://') or template.startswith('https://'): | 
| 65 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
changeset | 122 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: 
41diff
changeset | 123 continue | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 124 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: 
41diff
changeset | 125 path = template | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 126 else: | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 127 path = os.path.join(self.location, template) | 
| 65 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
changeset | 128 assert os.path.exists(path), "%s does not exist" % path | 
| 
0152741621c1
check in a failing test wrt location
 Jeff Hammel <jhammel@mozilla.com> parents: 
64diff
changeset | 129 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 | 130 | 
| 122 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 131 @classmethod | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 132 def get_description(cls): | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 133 if hasattr(cls, 'description'): | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 134 if cls.description: | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 135 return cls.description | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 136 if hasattr(cls, '__doc__'): | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 137 return cls.__doc__ | 
| 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
113diff
changeset | 138 | 
| 63 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 139 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: 
62diff
changeset | 140 # 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: 
62diff
changeset | 141 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: 
62diff
changeset | 142 if self.usedefaults: | 
| 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 143 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: 
62diff
changeset | 144 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: 
62diff
changeset | 145 continue | 
| 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 146 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: 
62diff
changeset | 147 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: 
62diff
changeset | 148 return vars | 
| 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 149 | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 150 def missing(self, **variables): | 
| 113 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 151 | 
| 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 152 # boilerplate | 
| 63 
b91133e3b02d
override get_variables for API template; could instead do this in the ctor, alternately
 Jeff Hammel <jhammel@mozilla.com> parents: 
62diff
changeset | 153 vars = self.get_variables(**variables) | 
| 62 
30100690ad3f
display defaults with command line --help option
 Jeff Hammel <jhammel@mozilla.com> parents: 
58diff
changeset | 154 missing = set([]) | 
| 64 | 155 | 
| 156 # get known needed variables | |
| 157 for var in self.vars: | |
| 113 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 158 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: 
90diff
changeset | 159 if var.default is Undefined: | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 160 missing.add(var.name) | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 161 continue | 
| 100 
b54898f7d8a9
now API template variables seem to work
 Jeff Hammel <jhammel@mozilla.com> parents: 
99diff
changeset | 162 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: 
90diff
changeset | 163 missing.add(var.name) | 
| 64 | 164 | 
| 113 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 165 # scan templates for other variables | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 166 if self.look: | 
| 99 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 167 template = PolyTemplate(self._templates, | 
| 112 | 168 interactive=False, | 
| 99 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 169 variables=vars) | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 170 missing.update(template.missing()) | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 171 | 
| 64 | 172 return missing | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 173 | 
| 101 | 174 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 | 175 """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 | 176 | 
| 100 
b54898f7d8a9
now API template variables seem to work
 Jeff Hammel <jhammel@mozilla.com> parents: 
99diff
changeset | 177 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: 
42diff
changeset | 178 """do the substitution""" | 
| 113 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 179 | 
| 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 180 # get the variables | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 181 vars = self.get_variables(**variables) | 
| 101 | 182 self.pre(vars, output) | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 183 self.check_missing(vars) | 
| 64 | 184 | 
| 185 # do the substitution | |
| 67 
a0f7bfa98755
API templates now hobble along on their own two feet
 Jeff Hammel <jhammel@mozilla.com> parents: 
66diff
changeset | 186 template = PolyTemplate(self._templates, | 
| 
a0f7bfa98755
API templates now hobble along on their own two feet
 Jeff Hammel <jhammel@mozilla.com> parents: 
66diff
changeset | 187 interactive=self.interactive, | 
| 
a0f7bfa98755
API templates now hobble along on their own two feet
 Jeff Hammel <jhammel@mozilla.com> parents: 
66diff
changeset | 188 variables=vars) | 
| 88 
712a6d358083
fixed output broke other things
 Jeff Hammel <jhammel@mozilla.com> parents: 
78diff
changeset | 189 template.check_output(output) | 
| 90 
26b9c3bba04e
make the api for substitute() variables, output
 Jeff Hammel <jhammel@mozilla.com> parents: 
88diff
changeset | 190 template.substitute({}, output) | 
| 113 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 191 | 
| 
c3b8ce33d3ad
make variable getting logic a little less horrible
 Jeff Hammel <jhammel@mozilla.com> parents: 
112diff
changeset | 192 # do whatever you need to do afterwards | 
| 101 | 193 self.post(vars, output) | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 194 | 
| 101 | 195 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 | 196 """do stuff after interpolation""" | 
| 159 | 197 | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 198 def read_variables(self, variables): | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 199 """read variables from stdin""" | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 200 retval = {} | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 201 for i in variables: | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 202 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: 
90diff
changeset | 203 value = self.vardict[i].read() | 
| 
d9c6e26a42ff
fix up interactivity of API template a bit.  still doesnt quite work
 Jeff Hammel <jhammel@mozilla.com> parents: 
90diff
changeset | 204 retval[i] = value | 
| 44 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 205 else: | 
| 
6e08cca7d656
do API variable reading and stubbing a bit for control flow
 Jeff Hammel <jhammel@mozilla.com> parents: 
42diff
changeset | 206 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: 
42diff
changeset | 207 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 | 208 | 
| 42 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 209 class PasteScriptTemplate(MakeItSoTemplate): | 
| 
73dac34d2692
more stubbing of API class; first get something off the ground; then rewrite
 Jeff Hammel <jhammel@mozilla.com> parents: 
41diff
changeset | 210 """template for backwards compatability with PasteScript""" | 
