--- a/pvl/verkko/web.py Sun Jan 20 18:19:03 2013 +0200
+++ b/pvl/verkko/web.py Sun Jan 20 18:26:12 2013 +0200
@@ -1,14 +1,9 @@
# encoding: utf-8
-
-def merge (*dicts) :
- dict = {}
+import pvl.web.application
- for d in dicts :
- dict.update(d)
+# view
+from pvl.web.html import tags as html
- return dict
-
-# response types
from werkzeug.wrappers import Response
from werkzeug.exceptions import (
HTTPException,
@@ -17,15 +12,7 @@
)
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
+class Handler (pvl.web.application.Handler) :
CSS = (
#"/static/layout.css",
"/static/style.css",
@@ -35,32 +22,11 @@
)
def __init__ (self, app, request, urls, params) :
- """
- app - wsgi.Application
- request - werkzeug.Request
- urls - werkzeug.routing.MapAdapter
- """
+ super(Handler, self).__init__(app, request, urls, params)
- self.app = app
- self.request = request
- self.urlmap = urls
- self.params = params
-
# new ORM session per request
self.db = app.db.session()
- def url (self, handler=None, **params) :
- """
- Return an URL for given endpoint, with parameters,
- """
-
- if not handler :
- # XXX: just generate a plain-relative '?foo=...' url instead?
- handler = self.__class__
- params = merge(self.params, params)
-
- return self.urlmap.build(handler, params)
-
def title (self) :
"""
Render site/page title as text.
@@ -71,65 +37,9 @@
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.script(src=src, type='text/javascript', _selfclosing=False) for src in self.JS
- ),
- ),
- html.body(
- html.h1(title),
- self.render()
- )
- )
-
- def process (self, **params) :
- """
- Process request args to build internal request state.
- """
-
- pass
-
- def respond (self) :
- """
- Generate a response, or raise an HTTPException
-
- Does an HTML layout'd response per default.
- """
-
- # returning e.g. redirect?
- response = self.process(**self.params)
-
- if response :
- return response
-
- # render as html per default
- render = self.render_html()
- text = unicode(html.document(render))
-
- return Response(text, mimetype='text/html')
-
def cleanup (self) :
"""
- After request processing. Do not fail :)
+ After request processing.
"""
# XXX: SQLAlchemy doesn't automatically close these...?