Mercurial > hg > uploader
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:827f7577f940 |
---|---|
1 import os | |
2 from urlparse import urlparse | |
3 from webob import Response, exc | |
4 | |
5 class Handler(object): | |
6 def __init__(self, app, request): | |
7 self.app = app | |
8 self.request = request | |
9 self.application_path = urlparse(request.application_url)[2] | |
10 | |
11 def link(self, path=(), permanant=False): | |
12 if isinstance(path, basestring): | |
13 path = [ path ] | |
14 path = [ i.strip('/') for i in path ] | |
15 if permanant: | |
16 application_url = [ self.request.application_url ] | |
17 else: | |
18 application_url = [ self.application_path ] | |
19 path = application_url + path | |
20 return '/'.join(path) | |
21 | |
22 def redirect(self, location): | |
23 raise exc.HTTPSeeOther(location=location) | |
24 | |
25 class Get(Handler): | |
26 | |
27 @classmethod | |
28 def match(cls, request): | |
29 return request.method == 'GET' | |
30 | |
31 def __call__(self): | |
32 retval = """<html><body><form name="upload_form" method="post" enctype="multipart/form-data"> | |
33 <input type="file" name="file"/><input type="submit" value="upload"/></form></body></html>""" | |
34 return Response(content_type='text/html', body=retval) | |
35 | |
36 class Post(Handler): | |
37 | |
38 @classmethod | |
39 def match(cls, request): | |
40 return request.method == 'POST' | |
41 | |
42 def __call__(self): | |
43 fin = self.request.POST['file'] | |
44 assert os.sep not in fin.filename | |
45 assert '..' not in fin.filename | |
46 fout = file(os.path.join(self.app.directory, fin.filename), 'w') | |
47 fout.write(fin.file.read()) | |
48 fout.close() | |
49 self.redirect(self.link('/')) | |
50 |