pngtile/tile.py
changeset 171 0ff809f855f7
parent 167 16b600e927fe
child 172 73380dd6a816
equal deleted inserted replaced
170:c756bbcbc102 171:0ff809f855f7
   122             Redirect to the image frontend for a non-tile request.
   122             Redirect to the image frontend for a non-tile request.
   123         """
   123         """
   124 
   124 
   125         return redirect(self.image_url(name))
   125         return redirect(self.image_url(name))
   126 
   126 
   127     def handle_region (self, request):
       
   128         """
       
   129             Return image/png for given region.
       
   130         """
       
   131 
       
   132         image, name = self.open(request.path)
       
   133  
       
   134         png = self.render_region(request, image)
       
   135         
       
   136         return Response(png, content_type='image/png')
       
   137 
       
   138     def handle_tile (self, request):
       
   139         """
       
   140             Return image/png for given tile.
       
   141         """
       
   142 
       
   143         image, name = self.open(request.path)
       
   144             
       
   145         png = self.render_tile(request, image)
       
   146         
       
   147         return Response(png, content_type='image/png')
       
   148 
       
   149     def handle (self, request):
   127     def handle (self, request):
   150         """
   128         """
   151             Handle request for an image
   129             Handle request for an image
   152         """
   130         """
   153         
   131         
   159 
   137 
   160         elif not request.args:
   138         elif not request.args:
   161             return self.handle_image(request, name, path)
   139             return self.handle_image(request, name, path)
   162 
   140 
   163         elif 'w' in request.args and 'h' in request.args and 'x' in request.args and 'y' in request.args:
   141         elif 'w' in request.args and 'h' in request.args and 'x' in request.args and 'y' in request.args:
   164             return self.handle_region(request)
   142             render_func = self.render_region
   165 
   143 
   166         elif 'x' in request.args and 'y' in request.args:
   144         elif 'x' in request.args and 'y' in request.args:
   167             return self.handle_tile(request)
   145             render_func = self.render_tile
   168 
   146 
   169         else:
   147         else:
   170             raise exceptions.BadRequest("Unknown args")
   148             raise exceptions.BadRequest("Unknown args")
       
   149         
       
   150         # handle image
       
   151         image, name = self.open(request.path)
   171 
   152 
       
   153         # http caching
       
   154         mtime = image.cache_mtime()
       
   155 
       
   156         if request.if_modified_since and mtime == request.if_modified_since:
       
   157             return Response(status=304)
       
   158             
       
   159         # render
       
   160         png = render_func(request, image)
       
   161         
       
   162         # response
       
   163         response = Response(png, content_type='image/png')
       
   164         response.last_modified = mtime
       
   165 
       
   166         return response
       
   167 
       
   168