Mercurial > hg > genshi_view
view genshi_view/template/+package+/handlers.py @ 8:af07c17c7b2f
pass app to Index handler
author | k0s <k0scist@gmail.com> |
---|---|
date | Fri, 06 Nov 2009 16:53:32 -0500 |
parents | 86df7b4dbc9c |
children | cb8ebcb8b4fd |
line wrap: on
line source
from urlparse import urlparse from webob import Response, exc class HandlerMatchException(Exception): """the handler doesn't match the request""" class Handler(object): methods = set(['GET']) # methods to listen to handler_path = [] # path elements to match @classmethod def match(cls, app, request): try: return cls(app, request) except HandlerMatchException: return None def __init__(self, app, request): if request.method not in self.methods: raise HandlerMatchException self.path = request.path.info.strip('/').split('/') if self.path == ['']: self.path = [] if path[:len(handler_path)] != self.handler_path: raise HandlerMatchException self.app = app self.request = request self.application_path = urlparse(request.application_url)[2] def link(self, path=(), permanant=False): if isinstance(path, basestring): path = [ path ] path = [ i.strip('/') for i in path ] if permanant: application_url = [ self.request.application_url ] else: application_url = [ self.application_path ] path = application_url + path return '/'.join(path) def redirect(self, location): raise exc.HTTPSeeOther(location=location) class GenshiHandler(Handler): def __init__(self, app, request): Handler.__init__(self, request) self.data = { 'request': request } def __call__(self): template = self.app.loader.load(self.template) return Response(content_type='text/html', body=template.generate(**self.data).render()) class Index(GenshiHandler): template = 'index.html'