Mercurial > hg > MakeItSo
comparison makeitso/template.py @ 44:6e08cca7d656
do API variable reading and stubbing a bit for control flow
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Tue, 04 Jan 2011 18:07:18 -0800 |
| parents | 73dac34d2692 |
| children | 728cae02a6ed |
comparison
equal
deleted
inserted
replaced
| 43:554f916cef13 | 44:6e08cca7d656 |
|---|---|
| 5 import os | 5 import os |
| 6 import sys | 6 import sys |
| 7 from makeitso import ContentTemplate | 7 from makeitso import ContentTemplate |
| 8 from makeitso import PolyTemplate | 8 from makeitso import PolyTemplate |
| 9 | 9 |
| 10 class Undefined(object): | |
| 11 """marker class for variables""" | |
| 12 Undefined = Undefined() # singleton | |
| 13 | |
| 10 class Variable(object): | 14 class Variable(object): |
| 11 """variable object for MakeItSo templates""" | 15 """variable object for MakeItSo templates""" |
| 12 | 16 |
| 13 def __init__(self, name, default=None, description=None, | 17 def __init__(self, name, default=Undefined, description=None, |
| 14 cast=None): | 18 cast=None): |
| 15 self.name = name | 19 self.name = name |
| 16 self.default = default | 20 self.default = default |
| 17 self.description = description | 21 self.description = description |
| 18 | 22 |
| 54 vars = [] | 58 vars = [] |
| 55 | 59 |
| 56 # inspect the templates for more variables | 60 # inspect the templates for more variables |
| 57 look = False | 61 look = False |
| 58 | 62 |
| 59 def __init__(self, output=None, interactive=True, **variables): | 63 def __init__(self, output=None, interactive=True, usedefaults=False, **variables): |
| 64 """ | |
| 65 - output : output file or directory | |
| 66 - interactive : whether tointeractively get variables | |
| 67 - usedefaults : try to use the default values if not specified | |
| 68 """ | |
| 69 | |
| 60 assert self.templates | 70 assert self.templates |
| 61 self.output = output | 71 self.output = output |
| 62 self.interactive = interactive | 72 self.interactive = interactive |
| 63 self.location = os.path.dirnme(os.path.abspath(__file__)) | 73 self.location = os.path.dirnme(os.path.abspath(__file__)) |
| 64 self.defaults = variables.copy | 74 self.defaults = variables.copy |
| 75 | |
| 76 # make a dictionary of the variables | |
| 77 self.vardict = {} | |
| 78 for i in self.vars: | |
| 79 self.vardict[i.name] = i | |
| 65 | 80 |
| 66 # ensure all of these templates exist | 81 # ensure all of these templates exist |
| 67 for template in self.templates: | 82 for template in self.templates: |
| 68 if template.startswith('http://') or template.startswith('https://'): | 83 if template.startswith('http://') or template.startswith('https://'): |
| 69 continue | 84 continue |
| 71 path = template | 86 path = template |
| 72 else: | 87 else: |
| 73 path = os.path.join(self.location, template) | 88 path = os.path.join(self.location, template) |
| 74 assert os.path.exists(template) | 89 assert os.path.exists(template) |
| 75 | 90 |
| 91 def missing(self, **variables): | |
| 92 if self.look: | |
| 93 pass | |
| 94 else: | |
| 95 if self.usedefaults: | |
| 96 pass | |
| 97 | |
| 76 def pre(self, **variables): | 98 def pre(self, **variables): |
| 77 """do stuff before interpolation""" | 99 """do stuff before interpolation""" |
| 100 | |
| 101 def substitute(self, **variables): | |
| 102 """do the substitution""" | |
| 103 vars = self.get_variables(**variables) | |
| 104 self.pre(**variables) | |
| 105 self.check_missing(vars) | |
| 106 self.post(**variables) | |
| 78 | 107 |
| 79 def post(self, **variables): | 108 def post(self, **variables): |
| 80 """do stuff after interpolation""" | 109 """do stuff after interpolation""" |
| 81 | 110 |
| 111 def read_variables(self, variables): | |
| 112 """read variables from stdin""" | |
| 113 retval = {} | |
| 114 for i in variables: | |
| 115 if i in self.vardict: | |
| 116 self.vardict[i].read() | |
| 117 else: | |
| 118 retval.update(ContentTemplate.read_variables(self, (i,))) | |
| 119 return retval | |
| 82 | 120 |
| 83 class PasteScriptTemplate(MakeItSoTemplate): | 121 class PasteScriptTemplate(MakeItSoTemplate): |
| 84 """template for backwards compatability with PasteScript""" | 122 """template for backwards compatability with PasteScript""" |
