Mercurial > hg > genshi_view
annotate genshi_view/template/+package+/dispatcher.py @ 17:4a9ceda73d92
check for data before writing to it
author | k0s <k0scist@gmail.com> |
---|---|
date | Fri, 20 Nov 2009 16:42:57 -0500 |
parents | 6075ca965357 |
children | 24cd9c7749ce |
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 """ |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
2 request dispatcher: |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
3 data persisting across requests should go here |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
4 """ |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
5 |
7 | 6 import os |
7 | |
1 | 8 from handlers import Index |
9 | |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
10 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
|
11 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
|
12 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
|
13 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
|
14 |
1 | 15 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
|
16 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
17 ### class level variables |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
18 defaults = { 'auto_reload': 'False', |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
19 'name': 'anonymous' } |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
20 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 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
|
22 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
23 # 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
|
24 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
|
25 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
|
26 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
|
27 |
13 | 28 # request handlers |
1 | 29 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
|
30 |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
31 # template loader |
4
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
32 templates_dir = resource_filename(__name__, 'templates') |
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
33 self.loader = TemplateLoader(templates_dir, |
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
34 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
|
35 |
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
36 def __call__(self, environ, start_response): |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
37 |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
38 # get a request object |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
39 request = Request(environ) |
1 | 40 |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
41 # get the path |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
42 path = request.path_info.strip('/').split('/') |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
43 if path == ['']: |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
44 path = [] |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
45 request.environ['path'] = path |
1 | 46 |
47 # match the request to a handler | |
48 for h in self.handlers: | |
4
0be8714e4d6a
use the app and add it to the handler
k0s <k0scist@gmail.com>
parents:
2
diff
changeset
|
49 handler = h.match(self, request) |
1 | 50 if handler is not None: |
51 break | |
52 else: | |
53 handler = exc.HTTPNotFound | |
54 | |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
55 # add navigation links to handler [example] |
17 | 56 if hasattr(handler, 'data'): |
57 handler.data.setdefault('links', []) | |
58 for h in self.handlers: | |
59 handler.data['links'].append((handler.link(h.handler_path), | |
60 h.__name__)) | |
11
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
61 |
8a7731b2126a
include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents:
7
diff
changeset
|
62 # get response |
1 | 63 res = handler() |
0
b65da5423cc9
initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
64 return res(environ, start_response) |