Mercurial > hg > SimpleWiki
comparison simplewiki/dispatcher.py @ 1:4c83f7715993
[mq]: renderer
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 07 Sep 2010 18:11:04 -0700 |
parents | d5102c881cb5 |
children | 2464e2051b78 |
comparison
equal
deleted
inserted
replaced
0:d5102c881cb5 | 1:4c83f7715993 |
---|---|
3 data persisting across requests should go here | 3 data persisting across requests should go here |
4 """ | 4 """ |
5 | 5 |
6 import os | 6 import os |
7 | 7 |
8 from handlers import Index | 8 from handlers import GenshiRenderer |
9 | 9 |
10 from genshi.template import TemplateLoader | 10 from genshi.template import TemplateLoader |
11 from paste.fileapp import FileApp | 11 from paste.fileapp import FileApp |
12 from pkg_resources import resource_filename | 12 from pkg_resources import resource_filename |
13 from webob import Request, Response, exc | 13 from webob import Request, Response, exc |
15 class Dispatcher(object): | 15 class Dispatcher(object): |
16 | 16 |
17 ### class level variables | 17 ### class level variables |
18 defaults = { 'auto_reload': 'False', | 18 defaults = { 'auto_reload': 'False', |
19 'template_dirs': '', | 19 'template_dirs': '', |
20 'app': None, | 20 'name': 'anonymous', |
21 'name': 'anonymous' } | 21 'directory': None } |
22 | 22 |
23 def __init__(self, **kw): | 23 def __init__(self, **kw): |
24 | 24 |
25 # set instance parameters from kw and defaults | 25 # set instance parameters from kw and defaults |
26 for key in self.defaults: | 26 for key in self.defaults: |
27 setattr(self, key, kw.get(key, self.defaults[key])) | 27 setattr(self, key, kw.get(key, self.defaults[key])) |
28 self.auto_reload = self.auto_reload.lower() == 'true' | 28 self.auto_reload = self.auto_reload.lower() == 'true' |
29 | 29 |
30 assert self.directory and os.path.exists(self.directory), "Must specify an existing directory" | |
31 | |
30 # request handlers | 32 # request handlers |
31 self.handlers = [ Index ] | 33 self.handlers = [ GenshiRenderer ] |
32 | |
33 # endpoint app if used as middleware | |
34 if self.app: | |
35 assert hasattr(self.app, '__call__') | |
36 | 34 |
37 # template loader | 35 # template loader |
38 self.template_dirs = self.template_dirs.split() | 36 self.template_dirs = self.template_dirs.split() |
39 self.template_dirs.append(resource_filename(__name__, 'templates')) | 37 self.template_dirs.append(resource_filename(__name__, 'templates')) |
40 self.loader = TemplateLoader(self.template_dirs, | 38 self.loader = TemplateLoader(self.template_dirs, |
55 for h in self.handlers: | 53 for h in self.handlers: |
56 handler = h.match(self, request) | 54 handler = h.match(self, request) |
57 if handler is not None: | 55 if handler is not None: |
58 break | 56 break |
59 else: | 57 else: |
60 if self.app: | |
61 return self.app(environ, start_response) | |
62 handler = exc.HTTPNotFound | 58 handler = exc.HTTPNotFound |
63 | 59 |
64 # add navigation links to handler [example] | 60 # add navigation links to handler [example] |
65 if hasattr(handler, 'data'): | 61 if hasattr(handler, 'data'): |
66 handler.data.setdefault('links', []) | 62 handler.data.setdefault('links', []) |