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
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 """
1
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
5 from handlers import Index
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
37
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
38 # serve static files
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
44
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
45 # match the request to a handler
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
48 if handler is not None:
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
49 break
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
50 else:
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
51 handler = exc.HTTPNotFound
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
52
d9519f40c177 moving to a dispatcher architecture
k0s <k0scist@gmail.com>
parents: 0
diff changeset
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