# encoding: utf-8
# response types
from werkzeug.wrappers import Response
from werkzeug.exceptions import (
HTTPException,
BadRequest, # 400
NotFound, # 404
)
from werkzeug.utils import redirect
# view
from pvl.html import tags as html
class Handler (object) :
"""
Per-Request controller/view, containing the request context and generating the response.
"""
TITLE = None
CSS = (
#"/static/layout.css",
"/static/style.css",
)
def __init__ (self, app, request, urls) :
"""
app - wsgi.Application
request - werkzeug.Request
urls - werkzeug.routing.MapAdapter
"""
self.app = app
self.db = app.db
self.request = request
self.urlmap = urls
def url (self, handler=None, **params) :
"""
Return an URL for given endpoint, with parameters,
"""
if not handler :
handler = self.__class__
return self.urlmap.build(handler, params)
def title (self) :
"""
Render site/page title as text.
"""
if self.TITLE :
return u"Päivölä Verkko :: {title}".format(title=self.TITLE)
else :
return u"Päivölä Verkko"
def render (self) :
"""
Render page content (as <body>...</body>).
"""
raise NotImplementedError()
def render_html (self) :
"""
Render page layout (as <html>).
"""
title = self.title()
return html.html(
html.head(
html.title(title),
(
html.link(rel='Stylesheet', type="text/css", href=src) for src in self.CSS
),
),
html.body(
html.h1(title),
self.render()
)
)
def process (self, **params) :
"""
Process request args to build internal request state.
"""
pass
def respond (self, **params) :
"""
Generate a response, or raise an HTTPException
Does an HTML layout'd response per default.
**params - url-mapped parameters
"""
# XXX: returning e.g. redirect?
self.process(**params)
# render as html per default
text = unicode(html.document(self.render_html()))
return Response(text, mimetype='text/html')
class Index (Handler) :
def render (self) :
return (
html.ul(
# TODO: self.url
html.a(href='/hosts')("DHCP Hosts"),
)
)