예제 #1
0
    def register_item(self, source: Source, item: Item,
                      replace: bool):
        logger.info('Ingesting product')

        assets = item.get_assets()
        if 'inspire-metadata' in assets and 'product-metadata' in assets:
            inspire_xml = href_to_path(assets['inspire-metadata'].href)
            esa_xml = href_to_path(assets['product-metadata'].href)

            esa_xml_local = '/tmp/esa-metadata.xml'
            inspire_xml_local = '/tmp/inspire-metadata.xml'

            logger.info(f"ESA XML metadata file: {esa_xml}")
            logger.info(f"INSPIRE XML metadata file: {inspire_xml}")

            try:
                source.get_file(inspire_xml, inspire_xml_local)
                source.get_file(esa_xml, esa_xml_local)
            except Exception as err:
                logger.error(err)
                raise

            logger.info('Generating ISO XML based on ESA and INSPIRE XML')
            imo = ISOMetadata(os.path.dirname(inspire_xml))

            with open(esa_xml_local, 'rb') as a, open(inspire_xml_local, 'rb') as b:  # noqa
                iso_metadata = imo.from_esa_iso_xml(
                    a.read(), b.read(), self.collections, self.ows_url)

            for tmp_file in [esa_xml_local, inspire_xml_local]:
                logger.debug(f"Removing temporary file {tmp_file}")
                os.remove(tmp_file)
        else:
            logger.info('Ingesting processing result')
            self_href = item.get_links('self')[0].get_absolute_href()
            parsed = urlparse(self_href)
            parsed = parsed._replace(path=os.path.dirname(parsed.path))
            base_url = urlunparse(parsed)

            logger.debug(f'base URL {base_url}')
            base_url = f's3://{base_url}'
            imo = ISOMetadata(base_url)
            iso_metadata = imo.from_stac_item(
                json.dumps(item.to_dict(transform_hrefs=False)),
                self.ows_url
            )

        logger.debug(f'Upserting metadata: {iso_metadata}')
        self._parse_and_upsert_metadata(iso_metadata)
예제 #2
0
def generate_cog(stac_item: Item, destination_uri: str, target_assets: List):
    """

    """
    for input_layer in target_assets:
        asset = stac_item.assets.get(input_layer)
        result = main(asset.href, join(destination_uri, basename(asset.href)))

        asset.add_asset(
            "{}_cog".format(input_layer),
            Asset(href=result['destination_layer'],
                  title=asset.title,
                  description=asset.description,
                  media_type=MediaType.COG,
                  roles=asset.roles,
                  properties=asset.properties))
    return stac_item.to_dict()