terom@138: from werkzeug import Request, Response, exceptions terom@138: terom@138: import pypngtile terom@166: import pngtile.store terom@152: terom@166: class PNGTileApplication (pngtile.store.PNGTileStore): terom@166: """ terom@166: Web application with a PNGTileStore. terom@166: """ terom@166: terom@166: def list (self, url): terom@166: """ terom@166: Yield names by request.url. terom@138: terom@166: Raises HTTPException terom@138: """ terom@138: terom@166: try: terom@166: return super(PNGTileApplication, self).list(url) terom@166: except pngtile.store.NotFound as error: terom@166: raise exceptions.NotFound(str(error)) terom@166: except pngtile.store.InvalidImage as error: terom@166: raise exceptions.BadRequest(str(error)) terom@166: terom@166: def lookup (self, url): terom@166: """ terom@166: Lookup neme, path, type by request.url. terom@138: terom@166: Raises HTTPException terom@138: """ terom@138: terom@166: try: terom@166: return super(PNGTileApplication, self).lookup(url) terom@166: except pngtile.store.Error as error: terom@166: raise exceptions.InternalServerError(str(error)) terom@166: except pngtile.store.NotFound as error: terom@166: raise exceptions.NotFound(str(error)) terom@166: except pngtile.store.InvalidImage as error: terom@166: raise exceptions.BadRequest(str(error)) terom@138: terom@166: def open (self, url): terom@166: """ terom@166: Return Image, name by request.url terom@138: terom@166: Raises HTTPException. terom@166: """ terom@138: terom@166: try: terom@166: return super(PNGTileApplication, self).open(url) terom@138: terom@166: except pypngtile.Error as error: terom@166: raise exceptions.InternalServerError(str(error)) terom@166: terom@166: except pngtile.store.Error as error: terom@166: raise exceptions.InternalServerError(str(error)) terom@166: terom@166: except pngtile.store.NotFound as error: terom@166: raise exceptions.NotFound(str(error)) terom@166: terom@166: except pngtile.store.InvalidImage as error: terom@166: raise exceptions.BadRequest(str(error)) terom@166: terom@166: except pngtile.store.UncachedImage as error: terom@166: raise exceptions.InternalServerError("Requested image has not yet been cached: {image}".format(image=error)) terom@138: terom@138: def handle (self, request): terom@138: """ terom@138: Handle request for an image terom@138: """ terom@138: terom@138: raise NotImplementedError() terom@138: terom@138: @Request.application terom@138: def __call__ (self, request): terom@138: """ terom@138: WSGI entry point. terom@138: """ terom@138: terom@138: try: terom@138: return self.handle(request) terom@138: terom@138: except exceptions.HTTPException as error: terom@138: return error terom@138: