Mercurial > hg > MakeItSo
comparison makeitso/makeitso.py @ 16:1818cc524cde
change API making substitute return the substituted quantity
| author | Jeff Hammel <jhammel@mozilla.com> | 
|---|---|
| date | Mon, 15 Nov 2010 18:28:10 -0800 | 
| parents | edabb0bfe107 | 
| children | c879b93c3f15 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 15:edabb0bfe107 | 16:1818cc524cde | 
|---|---|
| 8 import subprocess | 8 import subprocess | 
| 9 import sys | 9 import sys | 
| 10 import urllib | 10 import urllib | 
| 11 | 11 | 
| 12 from optparse import OptionParser | 12 from optparse import OptionParser | 
| 13 | |
| 14 | 13 | 
| 15 try: | 14 try: | 
| 16 import tempita | 15 import tempita | 
| 17 except ImportError: | 16 except ImportError: | 
| 18 raise NotImplementedError | 17 raise NotImplementedError | 
| 74 for i in variables: | 73 for i in variables: | 
| 75 print 'Enter %s: ' % i, | 74 print 'Enter %s: ' % i, | 
| 76 retval[i] = raw_input() | 75 retval[i] = raw_input() | 
| 77 return retval | 76 return retval | 
| 78 | 77 | 
| 79 def substitute(content, fp=sys.stdout, variables=None): | 78 def substitute(content, variables=None): | 
| 79 """interactive (for now) substitution""" | |
| 80 | 80 | 
| 81 # remove makeitso shebang if it has one | 81 # remove makeitso shebang if it has one | 
| 82 if shebang_re.match(content): | 82 if shebang_re.match(content): | 
| 83 content = os.linesep.join(content.splitlines()[1:]) | 83 content = os.linesep.join(content.splitlines()[1:]) | 
| 84 | 84 | 
| 86 template = tempita.Template(content) | 86 template = tempita.Template(content) | 
| 87 missing = missing_variables(template, variables) | 87 missing = missing_variables(template, variables) | 
| 88 if missing: | 88 if missing: | 
| 89 # TODO: add a switch for interactive or not | 89 # TODO: add a switch for interactive or not | 
| 90 variables.update(read_variables(missing)) | 90 variables.update(read_variables(missing)) | 
| 91 print >> fp, template.substitute(**variables) | 91 return template.substitute(**variables) | 
| 92 | 92 | 
| 93 def invocation(url, **variables): | 93 def invocation(url, **variables): | 
| 94 """returns a string appropriate for TTW invocation""" | 94 """returns a string appropriate for TTW invocation""" | 
| 95 variables_string = ' '.join(['%s=%s' % (i,j) for i,j in variables.items()]) | 95 variables_string = ' '.join(['%s=%s' % (i,j) for i,j in variables.items()]) | 
| 96 return 'python <(curl %s) %s %s' % (location, url, variables_string) | 96 return 'python <(curl %s) %s %s' % (location, url, variables_string) | 
| 159 # get the content | 159 # get the content | 
| 160 if args: | 160 if args: | 
| 161 for arg in args: | 161 for arg in args: | 
| 162 f, headers = urllib.urlretrieve(arg) | 162 f, headers = urllib.urlretrieve(arg) | 
| 163 content = file(f).read() | 163 content = file(f).read() | 
| 164 substitute(content, variables=variables) | 164 print substitute(content, variables=variables) | 
| 165 else: | 165 else: | 
| 166 content = sys.stdin.read() | 166 content = sys.stdin.read() | 
| 167 substitute(content, variables=variables) | 167 print substitute(content, variables=variables) | 
| 168 | 168 | 
| 169 if __name__ == '__main__': | 169 if __name__ == '__main__': | 
| 170 main() | 170 main() | 
