Mercurial > mozilla > hg > licenser
comparison licenser/web.py @ 27:7e0c931a201d
web licenser now works
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Fri, 25 Nov 2011 00:57:38 -0800 |
parents | 0faf3e7b593a |
children | eb3749dbdbf5 |
comparison
equal
deleted
inserted
replaced
26:0faf3e7b593a | 27:7e0c931a201d |
---|---|
4 web handler for MPL licenser | 4 web handler for MPL licenser |
5 """ | 5 """ |
6 | 6 |
7 import licenses | 7 import licenses |
8 import tempfile | 8 import tempfile |
9 from StringIO import StringIO | |
9 from webob import Request, Response, exc | 10 from webob import Request, Response, exc |
10 | 11 |
11 class Handler(object): | 12 class Handler(object): |
12 | 13 |
13 required = set(['name', 'email', 'url']) | 14 required = set(['author', 'email', 'url']) |
14 | 15 |
15 template = """<html> | 16 template = """<html> |
16 <head><title>MPL licenser</title></head> | 17 <head><title>MPL licenser</title></head> |
17 <body> | 18 <body> |
18 <h1>MPL Licenser</h1> | 19 <h1>MPL Licenser</h1> |
19 <div><i>license your files with MPL. Currently works for files of type: %(filetypes)s</i></div> | 20 <div><i>license your files with MPL. Currently works for files of type: %(filetypes)s</i></div> |
20 <div><form method="POST" enctype="multipart/form-data"> | 21 <div><form method="POST" enctype="multipart/form-data"> |
21 <p>Enter a file: <input type="file" name="file"/></p> | 22 <p>Enter a file: <input type="file" name="file"/></p> |
22 <p>or a URL: <input type="text" name="url" value="%(url)s"/></p> | 23 <p>or a URL: <input type="text" name="url" value="%(url)s"/></p> |
23 <p>And enter your name: <input type="text" name="name" value="%(name)s"/></p> | 24 <p>And enter your name: <input type="text" name="author" value="%(author)s"/></p> |
24 <p>and email: <input type="text" name="email" value="%(email)s"/></p> | 25 <p>and email: <input type="text" name="email" value="%(email)s"/></p> |
25 <input type="submit"/> | 26 <input type="submit"/> |
26 </body> | 27 </body> |
27 </html>""" | 28 </html>""" |
28 | 29 |
29 def __init__(self, **kw): | 30 def __init__(self, **kw): |
31 self.license = licenses.MPL() | |
30 self.methods = {'GET': self.GET, | 32 self.methods = {'GET': self.GET, |
31 'POST': self.POST} | 33 'POST': self.POST} |
32 | 34 |
33 def __call__(self, environ, start_response): | 35 def __call__(self, environ, start_response): |
34 request = Request(environ) | 36 request = Request(environ) |
56 variables[i] = '' | 58 variables[i] = '' |
57 variables['filetypes'] = licenses.filetypes_string() | 59 variables['filetypes'] = licenses.filetypes_string() |
58 return Response(content_type='text/html', body=(self.template % variables)) | 60 return Response(content_type='text/html', body=(self.template % variables)) |
59 | 61 |
60 def POST(self, request): | 62 def POST(self, request): |
61 pass | 63 variables = dict([(i, request.params[i]) |
64 for i in self.required | |
65 if i in request.params]) | |
66 if 'file' in request.POST and hasattr(request.POST['file'], 'filename'): | |
67 body = request.POST['file'].file.getvalue() | |
68 filename = request.POST['file'].filename | |
69 elif 'url' in request.POST: | |
70 try: | |
71 pass | |
72 except: | |
73 return self.render(**variables) | |
74 if not set(['author', 'email']).issubset(request.params): | |
75 return self.render(**variables) | |
76 author = request.params['author'] | |
77 email = request.params['email'] | |
78 retval = self.interpolate(filename, body, author, email) | |
79 return Response(content_type='text/plain', body=retval) | |
62 | 80 |
63 def interpolate(self, filename, body, name, email): | 81 def interpolate(self, filename, body, author, email): |
64 fd, tf = tempfile.mkstemp() | |
65 try: | |
66 os.write(fd, body) | |
67 os.close(fd) | |
68 finally: | |
69 os.remove(tf) | |
70 | 82 |
83 buffer = StringIO() | |
84 buffer.write(body) | |
85 value = buffer.getvalue().splitlines() | |
86 if self.license.has_license(buffer): | |
87 return body | |
88 filetype = self.license.filetype(filename) | |
89 if not filetype: | |
90 return body | |
91 variables = self.license.obtain_variables(author=author, email=email) | |
92 license = self.license.interpolate_license(**variables) | |
93 value = [i + '\r\n' for i in value] | |
94 filetype._lines = value | |
95 buffer = StringIO() | |
96 filetype.filename = buffer | |
97 filetype(license) | |
98 return buffer.getvalue() | |
71 | 99 |
72 if __name__ == '__main__': | 100 if __name__ == '__main__': |
73 from wsgiref import simple_server | 101 from wsgiref import simple_server |
74 app = Handler() | 102 app = Handler() |
75 server = simple_server.make_server(host='0.0.0.0', port=8080, app=app) | 103 server = simple_server.make_server(host='0.0.0.0', port=8080, app=app) |