annotate uploader/dispatcher.py @ 6:d2990750e5d6

fix the way query string works
author k0s <k0scist@gmail.com>
date Sun, 27 Dec 2009 16:35:48 -0500
parents e5efa999911a
children f60ad139acc1
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)
4
e5efa999911a make sure self.app is actually callable
k0s <k0scist@gmail.com>
parents: 3
diff changeset
22 if self.app:
e5efa999911a make sure self.app is actually callable
k0s <k0scist@gmail.com>
parents: 3
diff changeset
23 assert hasattr(self.app, '__call__')
1
a02c4fcd7001 * optionally require auth
k0s <k0scist@gmail.com>
parents: 0
diff changeset
24 self.auth = self.auth.lower() == 'true'
2
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
25 self.subpath = self.subpath.lower() == 'true'
0b5fce452087 include handling of subpaths
k0s <k0scist@gmail.com>
parents: 1
diff changeset
26 if self.subpath:
6
d2990750e5d6 fix the way query string works
k0s <k0scist@gmail.com>
parents: 4
diff changeset
27 self.handlers = [ SubpathGet, SubpathPost ]
2
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:
3
bb2d34fb5de4 allow to be used as middleware
k0s <k0scist@gmail.com>
parents: 2
diff changeset
41 if self.app:
bb2d34fb5de4 allow to be used as middleware
k0s <k0scist@gmail.com>
parents: 2
diff changeset
42 return self.app(environ, start_response)
0
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
43 handler = exc.HTTPNotFound
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
44 res = handler()
827f7577f940 initial commit of file upload widget
k0s <k0scist@gmail.com>
parents:
diff changeset
45 return res(environ, start_response)