diff uploader/handlers.py @ 0:827f7577f940

initial commit of file upload widget
author k0s <k0scist@gmail.com>
date Sat, 21 Nov 2009 15:29:03 -0500
parents
children 0b5fce452087
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uploader/handlers.py	Sat Nov 21 15:29:03 2009 -0500
@@ -0,0 +1,50 @@
+import os
+from urlparse import urlparse
+from webob import Response, exc
+
+class Handler(object):
+    def __init__(self, app, request):
+        self.app = app
+        self.request = request
+        self.application_path = urlparse(request.application_url)[2]
+
+    def link(self, path=(), permanant=False):
+        if isinstance(path, basestring):
+            path = [ path ]
+        path = [ i.strip('/') for i in path ]
+        if permanant:
+            application_url = [ self.request.application_url ]
+        else:
+            application_url = [ self.application_path ]
+        path = application_url + path
+        return '/'.join(path)
+
+    def redirect(self, location):
+        raise exc.HTTPSeeOther(location=location)
+
+class Get(Handler):
+
+    @classmethod
+    def match(cls, request):
+        return request.method == 'GET'
+
+    def __call__(self):
+        retval = """<html><body><form name="upload_form" method="post" enctype="multipart/form-data">
+<input type="file" name="file"/><input type="submit" value="upload"/></form></body></html>"""
+        return Response(content_type='text/html', body=retval)
+
+class Post(Handler):
+
+    @classmethod
+    def match(cls, request):
+        return request.method == 'POST'
+
+    def __call__(self):
+        fin = self.request.POST['file']
+        assert os.sep not in fin.filename
+        assert '..' not in fin.filename
+        fout = file(os.path.join(self.app.directory, fin.filename), 'w')
+        fout.write(fin.file.read())
+        fout.close()
+        self.redirect(self.link('/'))
+