--- 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) :
"""