Mercurial > hg > genshi_view
comparison genshi_view/template/+package+/dispatcher.py @ 11:8a7731b2126a
include a post method, a nav bar, and some jquery fun
author | k0s <k0scist@gmail.com> |
---|---|
date | Sat, 07 Nov 2009 22:49:46 -0500 |
parents | 55011632cf03 |
children | 6075ca965357 |
comparison
equal
deleted
inserted
replaced
10:ffdfb79b30bf | 11:8a7731b2126a |
---|---|
1 """ | 1 """ |
2 request dispatcher | 2 request dispatcher: |
3 data persisting across requests should go here | |
3 """ | 4 """ |
4 | 5 |
5 import os | 6 import os |
6 | 7 |
7 from handlers import Index | 8 from handlers import Index |
12 from webob import Request, Response, exc | 13 from webob import Request, Response, exc |
13 | 14 |
14 class Dispatcher(object): | 15 class Dispatcher(object): |
15 | 16 |
16 ### class level variables | 17 ### class level variables |
17 defaults = { 'auto_reload': 'False'} | 18 defaults = { 'auto_reload': 'False', |
19 'name': 'anonymous' } | |
18 | 20 |
19 def __init__(self, **kw): | 21 def __init__(self, **kw): |
20 | 22 |
21 # set instance parameters from kw and defaults | 23 # set instance parameters from kw and defaults |
22 for key in self.defaults: | 24 for key in self.defaults: |
26 self.handlers = [ Index ] | 28 self.handlers = [ Index ] |
27 | 29 |
28 # static files | 30 # static files |
29 self.htdocs = resource_filename(__name__, 'static') | 31 self.htdocs = resource_filename(__name__, 'static') |
30 | 32 |
31 # template loader # to move??? | 33 # template loader |
32 templates_dir = resource_filename(__name__, 'templates') | 34 templates_dir = resource_filename(__name__, 'templates') |
33 self.loader = TemplateLoader(templates_dir, | 35 self.loader = TemplateLoader(templates_dir, |
34 auto_reload=self.auto_reload) | 36 auto_reload=self.auto_reload) |
35 | 37 |
36 ### methods dealing with HTTP | 38 ### methods dealing with HTTP |
37 def __call__(self, environ, start_response): | 39 def __call__(self, environ, start_response): |
40 | |
41 # get a request object | |
38 request = Request(environ) | 42 request = Request(environ) |
39 | 43 |
40 # serve static files | 44 # get the path |
41 # TODO: put into a handler | 45 path = request.path_info.strip('/').split('/') |
42 filename = os.path.join(self.htdocs, request.path_info) | 46 if path == ['']: |
43 if request.path_info != '/' and os.path.exists(filename): | 47 path = [] |
44 fileapp = FileApp(filename) | 48 request.environ['path'] = path |
45 return fileapp(environ, start_response) | |
46 | 49 |
47 # match the request to a handler | 50 # match the request to a handler |
48 for h in self.handlers: | 51 for h in self.handlers: |
49 handler = h.match(self, request) | 52 handler = h.match(self, request) |
50 if handler is not None: | 53 if handler is not None: |
51 break | 54 break |
52 else: | 55 else: |
53 handler = exc.HTTPNotFound | 56 handler = exc.HTTPNotFound |
54 | 57 |
58 # add navigation links to handler [example] | |
59 handler.data.setdefault('links', []) | |
60 for h in self.handlers: | |
61 handler.data['links'].append((handler.link(h.handler_path), | |
62 h.__name__)) | |
63 | |
64 # get response | |
55 res = handler() | 65 res = handler() |
56 return res(environ, start_response) | 66 return res(environ, start_response) |
57 | 67 |