svv/controllers.py
changeset 32 10c48a6843ad
parent 31 e1b63e4d10f4
child 37 eabea2857143
--- a/svv/controllers.py	Fri Jan 07 01:23:24 2011 +0200
+++ b/svv/controllers.py	Fri Jan 07 02:06:49 2011 +0200
@@ -54,12 +54,27 @@
         # MultiDict from werkzeug.Request
         return self.request.form
 
-    def respond (self, url_values) :
+    def respond (self, **url_values) :
         """
             Handle request that was mapped to ourselves via the URL routing, using given dict of values from URL.
         """
 
-        raise NotImplementedError()
+        # process e.g. POST data for e.g. redirect
+        response = self.process(**url_values)
+        
+        if not response :
+            # assume superclass does something else if process didn't handle it
+            pass
+
+        return response
+
+    def process (self, **args) :
+        """
+            Process incoming POST data, optionally returning a redirect response.
+        """
+        
+        # default to ignore
+        pass
 
 class PageHandler (AppHandler) :
     """
@@ -155,7 +170,7 @@
         # ok
         return response
 
-    def respond (self, url_values) :
+    def respond (self, **url_values) :
         """
             Build and return a response from the following steps:
 
@@ -163,8 +178,8 @@
             * render() -> render_content() as HTML
         """
 
-        # process e.g. POST data for e.g. redirect
-        response = self.process(**url_values)
+        # optional processing
+        response = super(PageHandler, self).respond(**url_values)
 
         if not response :
             # render page HTML
@@ -177,35 +192,31 @@
         # ok
         return response
 
-    def process (self, **args) :
-        """
-            Process incoming POST data, optionally returning a redirect response.
-        """
-        
-        # default to ignore
-        pass
-
 class DocumentHandler (AppHandler) :
     """
         PDF generation/export
     """
 
-    def respond (self, url_values) :
+    def respond (self, **url_values) :
         """
             Generate the document, and return it as a .pdf file, with the filename generated from the document's title.
         """
-
-        # XXX: proper support
-        self.process(**url_values)
         
-        pdf_file = self.generate(**url_values)
+        # optional processing
+        response = super(DocumentHandler, self).respond(**url_values)
+        
+        if not response :
+            pdf_file = self.generate(**url_values)
 
-        # file wrapper
-        # XXX: is this any use at all for StringIO?
-        pdf_file = werkzeug.wrap_file(self.request.environ, pdf_file)
+            # file wrapper
+            # XXX: is this any use at all for StringIO?
+            pdf_file = werkzeug.wrap_file(self.request.environ, pdf_file)
 
-        # respond with file wrapper
-        return Response(pdf_file, mimetype='application/pdf', direct_passthrough=True)
+            # respond with file wrapper
+            response = Response(pdf_file, mimetype='application/pdf', direct_passthrough=True)
+        
+        # ok
+        return response
 
     def generate (self, **url_values) :
         """