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', [])