Beispiel #1
0
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]
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
    def __init__(self, path, **kwargs):
        from medin.dws import MedinMetadataRequest

        self.request = MedinMetadataRequest()
        super(Metadata, self).__init__(path, check_etag=False, **kwargs)
Beispiel #7
0
 def __init__(self):
     from medin.dws import MedinMetadataRequest
     self.request = MedinMetadataRequest()
Beispiel #8
0
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]
Beispiel #9
0
    def __init__(self, path, **kwargs):
        from medin.dws import MedinMetadataRequest

        self.request = MedinMetadataRequest()
        super(Metadata, self).__init__(path, check_etag=False, **kwargs)
Beispiel #10
0
 def __init__(self):
     from medin.dws import MedinMetadataRequest
     self.request = MedinMetadataRequest()