annotate uploader/dispatcher.py @ 2:0b5fce452087

include handling of subpaths
author k0s <k0scist@gmail.com>
date Sun, 27 Dec 2009 15:37:51 -0500
parents a02c4fcd7001
children bb2d34fb5de4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
1 """
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
2 request dispatcher
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
3 """
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
4
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
5 import os
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
6 from handlers import Get, Post, SubpathGet, SubpathPost
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
7 from webob import Request, exc
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
8
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
9 class Dispatcher(object):
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
10
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
11 ### class level variables
1
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
12 defaults = { 'directory': None,
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
13 'auth': 'False',
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
14 'query_string': None,
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
15 'subpath': 'False' }
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
16
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
17 def __init__(self, **kw):
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
18 for key in self.defaults:
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
19 setattr(self, key, kw.get(key, self.defaults[key]))
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
20 assert os.path.exists(self.directory)
1
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
21 self.auth = self.auth.lower() == 'true'
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
22 self.subpath = self.subpath.lower() == 'true'
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
23 if self.subpath:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
24 if self.query_string:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
25 self.handlers = [ SubpathGet, SubpathPost ]
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
26 else:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
27 self.handlers = [ SubpathPost ]
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
28 else:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
29 self.handlers = [ Get, Post ]
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
30
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
31 ### methods dealing with HTTP
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
32 def __call__(self, environ, start_response):
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
33 request = Request(environ)
1
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
34 if self.auth and not request.remote_user:
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
35 return exc.HTTPUnauthorized()(environ, start_response)
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
36 for h in self.handlers:
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
37 if h.match(self, request):
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
38 handler = h(self, request)
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
39 break
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
40 else:
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
41 handler = exc.HTTPNotFound
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
42 res = handler()
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
43 return res(environ, start_response)