0
|
1 """
|
|
2 request dispatcher:
|
|
3 data persisting across requests should go here
|
|
4 """
|
|
5
|
|
6 import os
|
|
7 from handlers import Index
|
2
|
8 from webob import Request, Response, exc
|
0
|
9
|
2
|
10 here = os.path.dirname(os.path.abspath(__file__))
|
0
|
11
|
|
12 class Dispatcher(object):
|
|
13
|
|
14 ### class level variables
|
|
15 defaults = {'auto_reload': 'False',
|
|
16 'template_dirs': '',
|
|
17 }
|
|
18
|
2
|
19 def __init__(self, directory, **kw):
|
|
20
|
|
21 self.directory = directory
|
|
22 assert os.path.exists(directory)
|
0
|
23
|
|
24 # set instance parameters from kw and defaults
|
2
|
25 # XXX unneeded for now
|
|
26 # for key in self.defaults:
|
|
27 # setattr(self, key, kw.get(key, self.defaults[key]))
|
|
28 # self.auto_reload = self.auto_reload.lower() == 'true'
|
0
|
29
|
|
30 # request handlers
|
|
31 self.handlers = [ Index ]
|
|
32
|
|
33 # template directories
|
2
|
34 # self.template_dirs = self.template_dirs.split()
|
|
35 self.template_dirs = [os.path.join(here, 'templates')]
|
0
|
36
|
|
37 def __call__(self, environ, start_response):
|
|
38
|
|
39 # get a request object
|
|
40 request = Request(environ)
|
|
41
|
2
|
42 # get the path
|
0
|
43 path = request.path_info.strip('/').split('/')
|
|
44 if path == ['']:
|
|
45 path = []
|
|
46 request.environ['path'] = path
|
|
47
|
|
48 # match the request to a handler
|
|
49 for h in self.handlers:
|
|
50 handler = h.match(self, request)
|
|
51 if handler is not None:
|
|
52 break
|
|
53 else:
|
|
54 handler = exc.HTTPNotFound
|
|
55
|
|
56 # get response
|
|
57 res = handler()
|
|
58 return res(environ, start_response)
|