annotate uploader/dispatcher.py @ 3:bb2d34fb5de4

allow to be used as middleware
author k0s <k0scist@gmail.com>
date Sun, 27 Dec 2009 16:27:34 -0500
parents 0b5fce452087
children e5efa999911a
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,
3
bb2d34fb5de4 allow to be used as middleware
k0s <k0scist@gmail.com>
parents: 2
diff changeset
15 'subpath': 'False',
bb2d34fb5de4 allow to be used as middleware
k0s <k0scist@gmail.com>
parents: 2
diff changeset
16 'app': None}
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
17
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
18 def __init__(self, **kw):
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
19 for key in self.defaults:
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
20 setattr(self, key, kw.get(key, self.defaults[key]))
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
21 assert os.path.exists(self.directory)
1
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
22 self.auth = self.auth.lower() == 'true'
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
23 self.subpath = self.subpath.lower() == 'true'
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
24 if self.subpath:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
25 if self.query_string:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
26 self.handlers = [ SubpathGet, SubpathPost ]
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
27 else:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
28 self.handlers = [ SubpathPost ]
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
29 else:
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
30 self.handlers = [ Get, Post ]
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
31
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
32 ### methods dealing with HTTP
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
33 def __call__(self, environ, start_response):
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
34 request = Request(environ)
1
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
35 if self.auth and not request.remote_user:
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
36 return exc.HTTPUnauthorized()(environ, start_response)
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
37 for h in self.handlers:
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
38 if h.match(self, request):
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
39 handler = h(self, request)
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
40 break
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
41 else:
3
bb2d34fb5de4 allow to be used as middleware
k0s <k0scist@gmail.com>
parents: 2
diff changeset
42 if self.app:
bb2d34fb5de4 allow to be used as middleware
k0s <k0scist@gmail.com>
parents: 2
diff changeset
43 return self.app(environ, start_response)
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
44 handler = exc.HTTPNotFound
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
45 res = handler()
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
46 return res(environ, start_response)