comparison simplewiki/handlers.py @ 1:4c83f7715993

[mq]: renderer
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 07 Sep 2010 18:11:04 -0700
parents d5102c881cb5
children 2464e2051b78
comparison
equal deleted inserted replaced
0:d5102c881cb5 1:4c83f7715993
1 """ 1 """
2 request handlers: 2 request handlers:
3 these are instantiated for every request, then called 3 these are instantiated for every request, then called
4 """ 4 """
5 5
6 import os
6 from urlparse import urlparse 7 from urlparse import urlparse
7 from webob import Response, exc 8 from webob import Response, exc
8 9
9 class HandlerMatchException(Exception): 10 class HandlerMatchException(Exception):
10 """the handler doesn't match the request""" 11 """the handler doesn't match the request"""
47 return '/'.join(path) 48 return '/'.join(path)
48 49
49 def redirect(self, location): 50 def redirect(self, location):
50 raise exc.HTTPSeeOther(location=location) 51 raise exc.HTTPSeeOther(location=location)
51 52
52 class GenshiHandler(Handler): 53 class GenshiRenderer(Handler):
54
55 @classmethod
56 def match(cls, app, request):
57
58 # check the method
59 if request.method not in cls.methods:
60 return None
61
62 # check the path
63 path = request.environ['path']
64 if not path:
65 return None
66 if not path[-1].endswith('.html'):
67 return None
68
69
70 try:
71 return cls(app, request)
72 except HandlerMatchException:
73 return None
53 74
54 def __init__(self, app, request): 75 def __init__(self, app, request):
55 Handler.__init__(self, app, request) 76 Handler.__init__(self, app, request)
77 self.template = os.path.join(app.directory, *request.environ['path'])
78 if not os.path.exists(self.template):
79 raise HandlerMatchException
56 self.data = { 'request': request, 80 self.data = { 'request': request,
57 'link': self.link } 81 'link': self.link }
58 82
59 def __call__(self): 83 def __call__(self):
60 return getattr(self, self.request.method.title())() 84 return getattr(self, self.request.method.title())()
63 # needs to have self.template set 87 # needs to have self.template set
64 template = self.app.loader.load(self.template) 88 template = self.app.loader.load(self.template)
65 return Response(content_type='text/html', 89 return Response(content_type='text/html',
66 body=template.generate(**self.data).render('html')) 90 body=template.generate(**self.data).render('html'))
67 91
68 class Index(GenshiHandler):
69 template = 'index.html'
70 methods=set(['GET', 'POST'])
71
72 def __init__(self, app, request):
73 GenshiHandler.__init__(self, app, request)
74
75 def Get(self):
76 self.data['name'] = self.request.remote_user or self.app.name
77 return GenshiHandler.Get(self)
78
79 def Post(self):
80 self.app.name = self.request.POST.get('name', self.app.name)
81 self.redirect(self.link(self.handler_path))