annotate genshi_view/template/+package+/dispatcher.py @ 13:6075ca965357

cleanup
author k0s <k0scist@gmail.com>
date Sat, 07 Nov 2009 22:55:06 -0500
parents 8a7731b2126a
children 4a9ceda73d92
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
55011632cf03 import os
k0s <k0scist@gmail.com>
parents: 4
diff changeset
6 import os
55011632cf03 import os
k0s <k0scist@gmail.com>
parents: 4
diff changeset
7
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
8 from handlers import Index
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
6075ca965357 cleanup
k0s <k0scist@gmail.com>
parents: 11
diff changeset
28 # request handlers
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
46
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
47 # match the request to a handler
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
50 if handler is not None:
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
51 break
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
52 else:
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
53 handler = exc.HTTPNotFound
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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]
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
56 handler.data.setdefault('links', [])
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
57 for h in self.handlers:
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
58 handler.data['links'].append((handler.link(h.handler_path),
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
59 h.__name__))
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
60
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
61 # get response
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
62 res = handler()
0
b65da5423cc9 initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
63 return res(environ, start_response)