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)