class MetadataImage(object): """ WSGI app for outputting a metadata image """ def __init__(self): from medin.dws import MedinMetadataRequest self.request = MedinMetadataRequest() def prepareSOAP(self, environ): gid = environ['selector.vars']['gid'] # the global metadata identifier areas = get_areas(environ) vocab = get_vocab(environ) return self.request.prepareCaller(environ['logging.logger'], gid, areas, vocab) def __call__(self, environ, start_response): import os.path import medin.spatial self.prepareSOAP(environ) parser = self.request() if not parser: raise HTTPError('404 Not Found', 'The metadata record does not exist: %s' % environ['selector.vars']['gid']) # Check if the client needs a new version headers = [] date = get_metadata_date(environ, parser) if date: etag = check_etag(environ, date) headers.extend([('Etag', etag), ('Cache-Control', 'no-cache, must-revalidate')]) bboxes = parser.bboxes() if not bboxes: raise HTTPError('404 Not Found', 'The metadata record does not have a geographic bounding box') # ensure the background raster datasource has been created template_lookup = TemplateLookup(environ) lookup = template_lookup.lookup() rasterpath = background_raster(lookup, environ) # create the mapfile from its template mappath = os.path.join('config', 'metadata-extent.xml') template = lookup.get_template(mappath) mapfile = template.render(root_dir=environ.root) # create the image image = medin.spatial.metadata_image(bboxes, mapfile) # serialise the image bytes = image.tostring('png') headers.append(('Content-Type', 'image/png')) start_response('200 OK', headers) return [bytes]
class MetadataCSV(object): """ WSGI app for downloading metadata in CSV format """ def __init__(self): from medin.dws import MedinMetadataRequest self.request = MedinMetadataRequest() def prepareSOAP(self, environ): gid = environ['selector.vars']['gid'] # the global metadata identifier areas = get_areas(environ) vocab = get_vocab(environ) self.gid = gid return self.request.prepareCaller(environ['logging.logger'], gid, areas, vocab) def __call__(self, environ, start_response): from cStringIO import StringIO from medin.metadata import metadata2csv self.prepareSOAP(environ) gid = self.gid parser = self.request() if not parser: raise HTTPError('404 Not Found', 'The metadata record does not exist: %s' % gid) # Check if the client needs a new version headers = [] date = get_metadata_date(environ, parser) if date: etag = check_etag(environ, date) headers.extend([('Etag', etag), ('Cache-Control', 'no-cache, must-revalidate')]) metadata = parser.parse() buf = StringIO() metadata2csv(metadata, buf) buf.seek(0) # point to the start of the buffer if metadata.unique_id: filename = metadata.unique_id + '.csv' else: filename = gid + '.csv' headers.extend([('Content-disposition', 'attachment; filename="%s"' % filename), ('Content-Type', 'application/vnd.ms-excel')]) start_response('200 OK', headers) return buf
class Metadata(MakoApp): def __init__(self, path, **kwargs): from medin.dws import MedinMetadataRequest self.request = MedinMetadataRequest() super(Metadata, self).__init__(path, check_etag=False, **kwargs) def prepareSOAP(self, environ): """ The interface for generating a SOAPCaller """ gid = environ['selector.vars']['gid'] # the global metadata identifier areas = get_areas(environ) vocab = get_vocab(environ) return self.request.prepareCaller(environ['logging.logger'], gid, areas, vocab) def setup(self, environ, etag_data=''): self.prepareSOAP(environ) parser = self.request() if not parser: raise HTTPError( '404 Not Found', 'The metadata record does not exist: %s' % environ['selector.vars']['gid']) # Check if the client needs a new version headers = [] if parser: # check the etag, adding any extra data to the etag date = get_metadata_date(environ, parser) if date: etag = check_etag(environ, date + etag_data) headers.extend([('Etag', etag), ('Cache-Control', 'no-cache, must-revalidate') ]) return parser, headers
class Metadata(MakoApp): def __init__(self, path, **kwargs): from medin.dws import MedinMetadataRequest self.request = MedinMetadataRequest() super(Metadata, self).__init__(path, check_etag=False, **kwargs) def prepareSOAP(self, environ): """ The interface for generating a SOAPCaller """ gid = environ['selector.vars']['gid'] # the global metadata identifier areas = get_areas(environ) vocab = get_vocab(environ) return self.request.prepareCaller(environ['logging.logger'], gid, areas, vocab) def setup(self, environ, etag_data=''): self.prepareSOAP(environ) parser = self.request() if not parser: raise HTTPError('404 Not Found', 'The metadata record does not exist: %s' % environ['selector.vars']['gid']) # Check if the client needs a new version headers = [] if parser: # check the etag, adding any extra data to the etag date = get_metadata_date(environ, parser) if date: etag = check_etag(environ, date+etag_data) headers.extend([('Etag', etag), ('Cache-Control', 'no-cache, must-revalidate')]) return parser, headers
class MetadataImage(object): """ WSGI app for outputting a metadata image """ def __init__(self): from medin.dws import MedinMetadataRequest self.request = MedinMetadataRequest() def prepareSOAP(self, environ): gid = environ['selector.vars']['gid'] # the global metadata identifier areas = get_areas(environ) vocab = get_vocab(environ) return self.request.prepareCaller(environ['logging.logger'], gid, areas, vocab) def __call__(self, environ, start_response): import os.path import medin.spatial self.prepareSOAP(environ) parser = self.request() if not parser: raise HTTPError( '404 Not Found', 'The metadata record does not exist: %s' % environ['selector.vars']['gid']) # Check if the client needs a new version headers = [] date = get_metadata_date(environ, parser) if date: etag = check_etag(environ, date) headers.extend([('Etag', etag), ('Cache-Control', 'no-cache, must-revalidate')]) bboxes = parser.bboxes() if not bboxes: raise HTTPError( '404 Not Found', 'The metadata record does not have a geographic bounding box') # ensure the background raster datasource has been created template_lookup = TemplateLookup(environ) lookup = template_lookup.lookup() rasterpath = background_raster(lookup, environ) # create the mapfile from its template mappath = os.path.join('config', 'metadata-extent.xml') template = lookup.get_template(mappath) mapfile = template.render(root_dir=environ.root) # create the image image = medin.spatial.metadata_image(bboxes, mapfile) # serialise the image bytes = image.tostring('png') headers.append(('Content-Type', 'image/png')) start_response('200 OK', headers) return [bytes]