Mercurial > hg > MakeItSo
comparison makeitso/makeitso.py @ 26:044ac9e0b29c
add a non-working example with an include clause
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 13 Dec 2010 21:03:39 -0800 |
parents | fbf19940fa97 |
children | ac44c36da885 |
comparison
equal
deleted
inserted
replaced
25:fbf19940fa97 | 26:044ac9e0b29c |
---|---|
19 | 19 |
20 # URL of tempita | 20 # URL of tempita |
21 tempita_location = 'http://bitbucket.org/ianb/tempita/raw-file/tip/tempita/' | 21 tempita_location = 'http://bitbucket.org/ianb/tempita/raw-file/tip/tempita/' |
22 | 22 |
23 def cleanup(): | 23 def cleanup(): |
24 | |
25 # remove temporary net module directory | 24 # remove temporary net module directory |
26 if 'tempdir' in globals(): | 25 if 'tempdir' in globals(): |
27 shutil.remove(tempdir) | 26 shutil.remove(tempdir) |
28 | 27 |
29 try: | 28 try: |
78 cmdstr = command | 77 cmdstr = command |
79 else: | 78 else: |
80 cmdstr = ' '.join(command) | 79 cmdstr = ' '.join(command) |
81 raise SystemExit("Command `%s` exited with code %d" % (cmdstr, code)) | 80 raise SystemExit("Command `%s` exited with code %d" % (cmdstr, code)) |
82 | 81 |
82 def base_uri(uri): | |
83 if '://' in uri: | |
84 return 'uri'.rsplit('/', 1)[0] | |
85 return os.path.dirname(os.path.abspath('me')) | |
86 | |
87 def include(uri): | |
88 f, headers = urllib.urlretrieve(uri) | |
89 return file(f).read() | |
90 | |
91 ### functions for variables | |
92 | |
93 defaults = {'include': include} | |
94 | |
83 def get_missing(name_error): | 95 def get_missing(name_error): |
84 """ | 96 """ |
85 This is a horrible hack because python doesn't do the proper thing | 97 This is a horrible hack because python doesn't do the proper thing |
86 via eval and return the name of the variable; instead, it just gives | 98 via eval and return the name of the variable; instead, it just gives |
87 you a message: | 99 you a message: |
124 | 136 |
125 # remove makeitso shebang if it has one | 137 # remove makeitso shebang if it has one |
126 if shebang_re.match(content): | 138 if shebang_re.match(content): |
127 content = os.linesep.join(content.splitlines()[1:]) | 139 content = os.linesep.join(content.splitlines()[1:]) |
128 | 140 |
129 variables = variables or {} | 141 variables = variables or defaults.copy() |
130 template = tempita.Template(content) | 142 template = tempita.Template(content) |
131 missing = missing_variables(template, variables) | 143 missing = missing_variables(template, variables) |
132 if missing: | 144 if missing: |
133 # TODO: add a switch for interactive or not | 145 # TODO: add a switch for interactive or not |
134 variables.update(read_variables(missing)) | 146 variables.update(read_variables(missing)) |
178 for variable in variables: | 190 for variable in variables: |
179 print variable | 191 print variable |
180 return | 192 return |
181 | 193 |
182 # template variables | 194 # template variables |
183 variables = {} | 195 variables = defaults.copy() |
184 _vars = [] | 196 _vars = [] |
185 _args = [] | 197 _args = [] |
186 for arg in args: | 198 for arg in args: |
187 if '=' in arg: | 199 if '=' in arg: |
188 key, value = arg.split('=') | 200 key, value = arg.split('=') |
195 if options.commandline: | 207 if options.commandline: |
196 if args: | 208 if args: |
197 for arg in args: | 209 for arg in args: |
198 print invocation(arg, **variables) | 210 print invocation(arg, **variables) |
199 else: | 211 else: |
200 print invocation('[URL]', **variables) | 212 print invocation('[URI]', **variables) |
201 return | 213 return |
202 | 214 |
203 # get the content | 215 # get the content |
204 if args: | 216 if args: |
205 for arg in args: | 217 for arg in args: |
206 f, headers = urllib.urlretrieve(arg) | 218 var_copy = variables.copy() |
207 content = file(f).read() | 219 var_copy['here'] = base_uri(arg) |
208 print substitute(content, variables=variables) | 220 content = include(arg) |
221 print substitute(content, variables=var_copy) | |
209 else: | 222 else: |
210 content = sys.stdin.read() | 223 content = sys.stdin.read() |
211 print substitute(content, variables=variables) | 224 print substitute(content, variables=variables) |
212 | 225 |
213 # cleanup | 226 # cleanup |