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)
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