pvl/verkko/web.py
changeset 151 8a9f01036091
parent 26 589249097230
child 158 3ff66d4f401c
--- 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...?