comparison makeitso/template.py @ 99:d9c6e26a42ff

fix up interactivity of API template a bit. still doesnt quite work
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 11 Jan 2011 11:53:02 -0800
parents 26b9c3bba04e
children b54898f7d8a9
comparison
equal deleted inserted replaced
98:37f92ae8f999 99:d9c6e26a42ff
35 if self.cast: 35 if self.cast:
36 self.value = self.cast(value) 36 self.value = self.cast(value)
37 else: 37 else:
38 self.value = value 38 self.value = value
39 self._set = True 39 self._set = True
40 return self.value
41
42 def isset(self):
43 """whether the variable has been set or not"""
44 return self._set
40 45
41 def read(self, fd=sys.stdout): 46 def read(self, fd=sys.stdout):
42 """prompt and read the variable from stdin""" 47 """prompt and read the variable from stdin"""
43 fd.write(self.display()) 48 fd.write(self.display())
44 self.set(raw_input()) 49 self.set(raw_input())
45 50
46 def display(self): 51 def display(self):
47 description = self.description or self.name 52 description = self.description or self.name
48 if self.default: 53 if self.default:
49 return 'Enter %s [DEFAULT: %s]:' % (description, repr(self.default)) 54 return 'Enter %s [DEFAULT: %s]: ' % (description, repr(self.default))
50 else: 55 else:
51 return 'Enter %s:' % description 56 return 'Enter %s: ' % description
52 57
53 def __repr__(self): 58 def __repr__(self):
54 return "Variable(name='%s')" % self.name 59 return "Variable(name='%s')" % self.name
55 60
56 def assemble(*args): 61 def assemble(*args):
135 vars = self.get_variables(**variables) 140 vars = self.get_variables(**variables)
136 missing = set([]) 141 missing = set([])
137 142
138 # get known needed variables 143 # get known needed variables
139 for var in self.vars: 144 for var in self.vars:
140 if var.name not in vars: 145 if var.name in vars:
141 missing.add(var) 146 if var.default is Undefined:
147 missing.add(var.name)
148 continue
149 if self.usedefaults and not var.isset():
150 missing.add(var.name)
151 else:
152 missing.add(var.name)
142 153
143 if self.look: 154 if self.look:
144 # scan templates for other variables 155 # scan templates for other variables
145 raise NotImplementedError 156 template = PolyTemplate(self._templates,
146 157 interactive=self.interactive,
158 variables=vars)
159 missing.update(template.missing())
160
147 return missing 161 return missing
148 162
149 def pre(self, variables): 163 def pre(self, variables):
150 """do stuff before interpolation""" 164 """do stuff before interpolation"""
151 165
171 def read_variables(self, variables): 185 def read_variables(self, variables):
172 """read variables from stdin""" 186 """read variables from stdin"""
173 retval = {} 187 retval = {}
174 for i in variables: 188 for i in variables:
175 if i in self.vardict: 189 if i in self.vardict:
176 self.vardict[i].read() 190 value = self.vardict[i].read()
191 retval[i] = value
177 else: 192 else:
178 retval.update(ContentTemplate.read_variables(self, (i,))) 193 retval.update(ContentTemplate.read_variables(self, (i,)))
179 return retval 194 return retval
180 195
181 class PasteScriptTemplate(MakeItSoTemplate): 196 class PasteScriptTemplate(MakeItSoTemplate):