# 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
@property
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>).
"""
return html.html(
html.head(
html.title(self.title),
(
html.link(rel='Stylesheet', type="text/css", href=src) for src in self.CSS
),
),
html.body(
html.h1(self.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(
html.a(href='/hosts')("DHCP Hosts"),
)
)