pvl/verkko/rrd.py
changeset 198 f1d06158af06
parent 166 d9304aca296d
child 201 b97929bcef05
--- a/pvl/verkko/rrd.py	Sun Feb 10 12:06:01 2013 +0200
+++ b/pvl/verkko/rrd.py	Sun Feb 10 12:06:53 2013 +0200
@@ -7,10 +7,31 @@
 from pvl.web import urls
 from pvl.web.html import tags as html
 
+import pvl.web.response
 import pvl.rrd
 
 import logging; log = logging.getLogger('pvl.verkko.rrd')
 
+# errors
+import os.path
+
+class RRDNotFound (pvl.web.response.NotFound) :
+    """
+        404 Not Found for tree/rrd.
+    """
+
+    def __init__ (self, tree, rrd=None) :
+        if tree and rrd :
+            path = os.path.join(tree, rrd)
+        elif tree :
+            path = tree
+        elif rrd :
+            path = rrd
+        else :
+            path = ''
+
+        response.NotFound.__init__(self, path)
+
 # View/Controller
 class Handler (web.Handler) :
     CSS = (
@@ -83,7 +104,7 @@
 
             except ValueError as ex :
                 # mask
-                raise web.NotFound(tree)
+                raise RRDNotFound(tree)
         else :
             # root
             self.tree = self.app.rrd.tree()
@@ -148,7 +169,7 @@
             self.target = target
 
         except ValueError as ex :
-            raise web.NotFound((tree, target))
+            raise RRDNotFound(tree, target)
 
     def render_interval (self, interval, style='detail') :
         """
@@ -189,7 +210,7 @@
             self.rrd = self.app.rrd.rrd(target, self.tree)
 
         except ValueError as ex :
-            raise web.NotFound((tree, target))
+            raise RRDNotFound(tree, target)
         
         self.style = style
         self.interval = interval
@@ -214,11 +235,10 @@
             return response
         
         # PNG output
-        render = self.render_png()
-        file = werkzeug.wrap_file(self.request.environ, render)
-        
+        file = self.render_png()
+
         # respond with file wrapper
-        return web.Response(file, mimetype='image/png', direct_passthrough=True)        
+        return pvl.web.response.image(self.response_file(file), type='png')
 
 # WSGI
 class Application (web.Application) :