annotate genshi_view/template/+package+/dispatcher.py @ 11:8a7731b2126a

include a post method, a nav bar, and some jquery fun
author k0s <k0scist@gmail.com>
date Sat, 07 Nov 2009 22:49:46 -0500
parents 55011632cf03
children 6075ca965357
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
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
28 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
29
b65da5423cc9 initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
30 # static files
b65da5423cc9 initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
31 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
32
11
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
33 # template loader
4
0be8714e4d6a use the app and add it to the handler
k0s <k0scist@gmail.com>
parents: 2
diff changeset
34 templates_dir = resource_filename(__name__, 'templates')
0be8714e4d6a use the app and add it to the handler
k0s <k0scist@gmail.com>
parents: 2
diff changeset
35 self.loader = TemplateLoader(templates_dir,
0be8714e4d6a use the app and add it to the handler
k0s <k0scist@gmail.com>
parents: 2
diff changeset
36 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
37
b65da5423cc9 initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
38 ### 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
39 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
40
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
41 # 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
42 request = Request(environ)
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
43
11
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
44 # get the path
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
45 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
46 if path == ['']:
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
47 path = []
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
48 request.environ['path'] = path
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
49
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
50 # match the request to a handler
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
51 for h in self.handlers:
4
0be8714e4d6a use the app and add it to the handler
k0s <k0scist@gmail.com>
parents: 2
diff changeset
52 handler = h.match(self, request)
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
53 if handler is not None:
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
54 break
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
55 else:
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
56 handler = exc.HTTPNotFound
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
57
11
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
58 # 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
59 handler.data.setdefault('links', [])
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
60 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
61 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
62 h.__name__))
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
63
8a7731b2126a include a post method, a nav bar, and some jquery fun
k0s <k0scist@gmail.com>
parents: 7
diff changeset
64 # get response
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
65 res = handler()
0
b65da5423cc9 initial import from https://svn.openplans.org/svn/standalone/templates/genshi_view/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
66 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
67