diff 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
line wrap: on
line diff
--- a/licenser/web.py	Fri Nov 25 00:08:34 2011 -0800
+++ b/licenser/web.py	Fri Nov 25 00:57:38 2011 -0800
@@ -6,11 +6,12 @@
 
 import licenses
 import tempfile
+from StringIO import StringIO
 from webob import Request, Response, exc
 
 class Handler(object):
 
-    required = set(['name', 'email', 'url'])
+    required = set(['author', 'email', 'url'])
 
     template = """<html>
 <head><title>MPL licenser</title></head>
@@ -20,13 +21,14 @@
 <div><form method="POST" enctype="multipart/form-data">
 <p>Enter a file: <input type="file" name="file"/></p>
 <p>or a URL: <input type="text" name="url" value="%(url)s"/></p>
-<p>And enter your name: <input type="text" name="name" value="%(name)s"/></p>
+<p>And enter your name: <input type="text" name="author" value="%(author)s"/></p>
 <p>and email: <input type="text" name="email" value="%(email)s"/></p>
 <input type="submit"/>
 </body>
 </html>"""
 
     def __init__(self, **kw):
+        self.license = licenses.MPL()
         self.methods = {'GET': self.GET,
                         'POST': self.POST}
 
@@ -58,16 +60,42 @@
         return Response(content_type='text/html', body=(self.template % variables))
 
     def POST(self, request):
-        pass
+        variables = dict([(i, request.params[i])
+                          for i in self.required
+                              if i in request.params])
+        if 'file' in request.POST and hasattr(request.POST['file'], 'filename'):
+            body = request.POST['file'].file.getvalue()
+            filename = request.POST['file'].filename
+        elif 'url' in request.POST:
+            try:
+                pass
+            except:
+                return self.render(**variables)
+        if not set(['author', 'email']).issubset(request.params):
+            return self.render(**variables)
+        author = request.params['author']
+        email = request.params['email']
+        retval = self.interpolate(filename, body, author, email)
+        return Response(content_type='text/plain', body=retval)
 
-    def interpolate(self, filename, body, name, email):
-        fd, tf = tempfile.mkstemp()
-        try:
-            os.write(fd, body)
-            os.close(fd)
-        finally:
-            os.remove(tf)
+    def interpolate(self, filename, body, author, email):
 
+        buffer = StringIO()
+        buffer.write(body)
+        value = buffer.getvalue().splitlines()
+        if self.license.has_license(buffer):
+            return body
+        filetype = self.license.filetype(filename)
+        if not filetype:
+            return body
+        variables = self.license.obtain_variables(author=author, email=email)
+        license = self.license.interpolate_license(**variables)
+        value = [i + '\r\n' for i in value]
+        filetype._lines = value
+        buffer = StringIO()
+        filetype.filename = buffer
+        filetype(license)
+        return buffer.getvalue()
 
 if __name__ == '__main__':
     from wsgiref import simple_server