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