Mercurial > hg > genshi_view
annotate genshi_view/template/+package+/dispatcher.py @ 4:0be8714e4d6a
use the app and add it to the handler
author | k0s <k0scist@gmail.com> |
---|---|
date | Fri, 06 Nov 2009 16:47:27 -0500 |
parents | b8e5471794b2 |
children | 55011632cf03 |
rev | line source |
---|---|
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
1 """ |
1 | 2 request dispatcher |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
3 """ |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
4 |
1 | 5 from handlers import Index |
6 | |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
7 from genshi.template import TemplateLoader |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
8 from paste.fileapp import FileApp |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
9 from pkg_resources import resource_filename |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
10 from webob import Request, Response, exc |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
11 |
1 | 12 class Dispatcher(object): |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
13 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
14 ### class level variables |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
15 defaults = { 'auto_reload': 'False'} |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
16 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
17 def __init__(self, **kw): |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
18 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
19 # set instance parameters from kw and defaults |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
20 for key in self.defaults: |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 setattr(self, key, kw.get(key, self.defaults[key])) |
4
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
22 self.auto_reload = self.auto_reload.lower() == 'true' |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
23 |
1 | 24 self.handlers = [ Index ] |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
25 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
26 # static files |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
27 self.htdocs = resource_filename(__name__, 'static') |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
28 |
1 | 29 # template loader # to move??? |
4
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
30 templates_dir = resource_filename(__name__, 'templates') |
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
31 self.loader = TemplateLoader(templates_dir, |
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
32 auto_reload=self.auto_reload) |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
33 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
34 ### methods dealing with HTTP |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
35 def __call__(self, environ, start_response): |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
36 request = Request(environ) |
1 | 37 |
38 # serve static files | |
39 # TODO: put into a handler | |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
40 filename = os.path.join(self.htdocs, request.path_info) |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
41 if request.path_info != '/' and os.path.exists(filename): |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
42 fileapp = FileApp(filename) |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
43 return fileapp(environ, start_response) |
1 | 44 |
45 # match the request to a handler | |
46 for h in self.handlers: | |
4
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
47 handler = h.match(self, request) |
1 | 48 if handler is not None: |
49 break | |
50 else: | |
51 handler = exc.HTTPNotFound | |
52 | |
53 res = handler() | |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
54 return res(environ, start_response) |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
55 |