Пример #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 _get_assets(
    stac_item: pystac.Item,
    include: Optional[Set[str]] = None,
    exclude: Optional[Set[str]] = None,
    include_asset_types: Optional[Set[str]] = None,
    exclude_asset_types: Optional[Set[str]] = None,
) -> Iterator:
    """Get valid asset list.

    Args:
        stac_item (pystac.Item): STAC Item.
        include (Optional[Set[str]]): Only Include specific assets.
        exclude (Optional[Set[str]]): Exclude specific assets.
        include_asset_types (Optional[Set[str]]): Only include some assets base on their type.
        exclude_asset_types (Optional[Set[str]]): Exclude some assets base on their type.

    Yields
        str: valid STAC asset name.

    """
    for asset, asset_info in stac_item.get_assets().items():
        _type = asset_info.media_type

        if exclude and asset in exclude:
            continue

        if (_type and (exclude_asset_types and _type in exclude_asset_types)
                or (include and asset not in include)):
            continue

        if (_type and
            (include_asset_types and _type not in include_asset_types)
                or (include and asset not in include)):
            continue

        yield asset