comparison 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
comparison
equal deleted inserted replaced
10:ffdfb79b30bf 11:8a7731b2126a
1 """ 1 """
2 request dispatcher 2 request dispatcher:
3 data persisting across requests should go here
3 """ 4 """
4 5
5 import os 6 import os
6 7
7 from handlers import Index 8 from handlers import Index
12 from webob import Request, Response, exc 13 from webob import Request, Response, exc
13 14
14 class Dispatcher(object): 15 class Dispatcher(object):
15 16
16 ### class level variables 17 ### class level variables
17 defaults = { 'auto_reload': 'False'} 18 defaults = { 'auto_reload': 'False',
19 'name': 'anonymous' }
18 20
19 def __init__(self, **kw): 21 def __init__(self, **kw):
20 22
21 # set instance parameters from kw and defaults 23 # set instance parameters from kw and defaults
22 for key in self.defaults: 24 for key in self.defaults:
26 self.handlers = [ Index ] 28 self.handlers = [ Index ]
27 29
28 # static files 30 # static files
29 self.htdocs = resource_filename(__name__, 'static') 31 self.htdocs = resource_filename(__name__, 'static')
30 32
31 # template loader # to move??? 33 # template loader
32 templates_dir = resource_filename(__name__, 'templates') 34 templates_dir = resource_filename(__name__, 'templates')
33 self.loader = TemplateLoader(templates_dir, 35 self.loader = TemplateLoader(templates_dir,
34 auto_reload=self.auto_reload) 36 auto_reload=self.auto_reload)
35 37
36 ### methods dealing with HTTP 38 ### methods dealing with HTTP
37 def __call__(self, environ, start_response): 39 def __call__(self, environ, start_response):
40
41 # get a request object
38 request = Request(environ) 42 request = Request(environ)
39 43
40 # serve static files 44 # get the path
41 # TODO: put into a handler 45 path = request.path_info.strip('/').split('/')
42 filename = os.path.join(self.htdocs, request.path_info) 46 if path == ['']:
43 if request.path_info != '/' and os.path.exists(filename): 47 path = []
44 fileapp = FileApp(filename) 48 request.environ['path'] = path
45 return fileapp(environ, start_response)
46 49
47 # match the request to a handler 50 # match the request to a handler
48 for h in self.handlers: 51 for h in self.handlers:
49 handler = h.match(self, request) 52 handler = h.match(self, request)
50 if handler is not None: 53 if handler is not None:
51 break 54 break
52 else: 55 else:
53 handler = exc.HTTPNotFound 56 handler = exc.HTTPNotFound
54 57
58 # add navigation links to handler [example]
59 handler.data.setdefault('links', [])
60 for h in self.handlers:
61 handler.data['links'].append((handler.link(h.handler_path),
62 h.__name__))
63
64 # get response
55 res = handler() 65 res = handler()
56 return res(environ, start_response) 66 return res(environ, start_response)
57 67