# HG changeset patch # User Tero Marttila # Date 1412376054 -10800 # Node ID 0ff809f855f76bcc92bd63908c7388aa69e29910 # Parent c756bbcbc102b62dc8f3f9d0c5acacbbc2c619ee pngtile.tile: implement Last-Modified/If-Modified-Since caching diff -r c756bbcbc102 -r 0ff809f855f7 pngtile/tile.py --- a/pngtile/tile.py Sat Oct 04 01:40:40 2014 +0300 +++ b/pngtile/tile.py Sat Oct 04 01:40:54 2014 +0300 @@ -124,28 +124,6 @@ return redirect(self.image_url(name)) - def handle_region (self, request): - """ - Return image/png for given region. - """ - - image, name = self.open(request.path) - - png = self.render_region(request, image) - - return Response(png, content_type='image/png') - - def handle_tile (self, request): - """ - Return image/png for given tile. - """ - - image, name = self.open(request.path) - - png = self.render_tile(request, image) - - return Response(png, content_type='image/png') - def handle (self, request): """ Handle request for an image @@ -161,11 +139,30 @@ return self.handle_image(request, name, path) elif 'w' in request.args and 'h' in request.args and 'x' in request.args and 'y' in request.args: - return self.handle_region(request) + render_func = self.render_region elif 'x' in request.args and 'y' in request.args: - return self.handle_tile(request) + render_func = self.render_tile else: raise exceptions.BadRequest("Unknown args") + + # handle image + image, name = self.open(request.path) + # http caching + mtime = image.cache_mtime() + + if request.if_modified_since and mtime == request.if_modified_since: + return Response(status=304) + + # render + png = render_func(request, image) + + # response + response = Response(png, content_type='image/png') + response.last_modified = mtime + + return response + +