def serialize_browse_report(browse_report, stream=None, pretty_print=False): if not stream: stream = StringIO() browse_report_elem = Element(ns_rep("browseReport"), nsmap={"rep": ns_rep.uri}, attrib={"version": "1.3"}) SubElement( browse_report_elem, ns_rep("responsibleOrgName")).text = browse_report.responsible_org_name SubElement( browse_report_elem, ns_rep("dateTime")).text = browse_report.date_time.isoformat("T") SubElement(browse_report_elem, ns_rep("browseType")).text = browse_report.browse_type for browse in browse_report: browse_report_elem.append(_serialize_browse(browse)) et = ElementTree(browse_report_elem) et.write(stream, pretty_print=pretty_print, encoding="utf-8", xml_declaration=True) return stream
def decode_grid(grid_elem): if grid_elem.tag in (ns_rep("verticalCurtainReferenceGrid"), ns_rep("verticalReferenceGrid")): return data.VerticalReferenceGrid( **vertical_reference_grid_decoder(grid_elem) ) if grid_elem.tag == ns_rep("verticalRegularGrid"): return data.VerticalRegularGrid( **vertical_regular_grid_decoder(grid_elem) ) elif grid_elem.tag == ns_rep("verticalCurtainVerticalGrid"): return data.VerticalCurtainVerticalGrid( **vertical_reference_grid_decoder(grid_elem) )
def serialize_browse_report(browse_report, stream=None, pretty_print=False): if not stream: stream = StringIO() browse_report_elem = Element(ns_rep("browseReport"), nsmap={"rep": ns_rep.uri}, attrib={"version": "1.3"}) SubElement(browse_report_elem, ns_rep("responsibleOrgName")).text = browse_report.responsible_org_name SubElement(browse_report_elem, ns_rep("dateTime")).text = browse_report.date_time.isoformat("T") SubElement(browse_report_elem, ns_rep("browseType")).text = browse_report.browse_type for browse in browse_report: browse_report_elem.append(_serialize_browse(browse)) et = ElementTree(browse_report_elem) et.write(stream, pretty_print=pretty_print, encoding="utf-8", xml_declaration=True) return stream
def _serialize_regular_grid_browse(browse): georef_elem = Element(ns_rep("regularGrid")) SubElement(georef_elem, ns_rep("colNodeNumber")).text = str(browse.col_node_number) SubElement(georef_elem, ns_rep("rowNodeNumber")).text = str(browse.row_node_number) SubElement(georef_elem, ns_rep("colStep")).text = str(browse.col_step) SubElement(georef_elem, ns_rep("rowStep")).text = str(browse.row_step) for coord_list in browse.coord_lists: SubElement(georef_elem, ns_rep("coordList")).text = coord_list return georef_elem
def _serialize_browse(browse): browse_elem = Element(ns_rep("browse")) if browse.browse_identifier: SubElement(browse_elem, ns_rep("browseIdentifier")).text = browse.browse_identifier SubElement(browse_elem, ns_rep("fileName")).text = browse.file_name SubElement(browse_elem, ns_rep("imageType")).text = browse.image_type SubElement(browse_elem, ns_rep("referenceSystemIdentifier")).text = browse.reference_system_identifier browse_elem.append(GEO_TYPE_TO_XML[browse.geo_type](browse)) SubElement(browse_elem, ns_rep("startTime")).text = browse.start_time.isoformat("T") SubElement(browse_elem, ns_rep("endTime")).text = browse.end_time.isoformat("T") return browse_elem
def _serialize_browse(browse): browse_elem = Element(ns_rep("browse")) if browse.browse_identifier: SubElement(browse_elem, ns_rep("browseIdentifier")).text = browse.browse_identifier SubElement(browse_elem, ns_rep("fileName")).text = browse.file_name SubElement(browse_elem, ns_rep("imageType")).text = browse.image_type SubElement(browse_elem, ns_rep( "referenceSystemIdentifier")).text = browse.reference_system_identifier browse_elem.append(GEO_TYPE_TO_XML[browse.geo_type](browse)) SubElement(browse_elem, ns_rep("startTime")).text = browse.start_time.isoformat("T") SubElement(browse_elem, ns_rep("endTime")).text = browse.end_time.isoformat("T") return browse_elem
def decode_browse(browse_elem): """ Parsing function to return a Browse object from an ElementTree.Element node. """ # general args kwargs = browse_decoder.decode(browse_elem) browse_identifier = browse_elem.find(ns_rep("browseIdentifier")) if browse_identifier is not None: kwargs["browse_identifier"] = browse_identifier.text # allow spaces in reference_system_identifier e.g. "EPSG: 4326" # work-around for ESA's Landsat data kwargs['reference_system_identifier'] = kwargs['reference_system_identifier'].replace(" ", "") # check type of geo reference rectified_browse = browse_elem.find(ns_rep("rectifiedBrowse")) footprint = browse_elem.find(ns_rep("footprint")) regular_grid = browse_elem.find(ns_rep("regularGrid")) model_in_geotiff = browse_elem.find(ns_rep("modelInGeotiff")) vertical_curtain_footprint = browse_elem.find(ns_rep("verticalCurtainFootprint")) if rectified_browse is not None: logger.info("Parsing Rectified Browse.") kwargs.update(rectified_decoder.decode(rectified_browse)) return data.RectifiedBrowse(**kwargs) elif footprint is not None: logger.info("Parsing Footprint Browse.") kwargs.update(footprint_decoder.decode(footprint)) return data.FootprintBrowse(**kwargs) elif regular_grid is not None: logger.info("Parsing Regular Grid Browse.") kwargs.update(regular_grid_decoder.decode(regular_grid)) return data.RegularGridBrowse(**kwargs) elif model_in_geotiff is not None: logger.info("Parsing GeoTIFF Browse.") return data.ModelInGeotiffBrowse(**kwargs) elif vertical_curtain_footprint is not None: logger.info("Parsing Vertical Curtain Browse.") kwargs.update( vertical_curtain_footprint_decoder(vertical_curtain_footprint) ) return data.VerticalCurtainBrowse(**kwargs) else: raise DecodingException("Missing geo-spatial reference type.")
def decode_browse_report(browse_report_elem): """ Parsing function to return a BrowseReport object from an ElementTree.Element node. """ logger.info("Start parsing browse report.") try: browse_report_elem = browse_report_elem.getroot() except AttributeError: pass expected_tags = ns_bsi("ingestBrowse"), ns_rep("browseReport"), ns_rep_old( "browseReport") if browse_report_elem.tag not in expected_tags: raise DecodingException( "Invalid root tag '%s'. Expected one of '%s'." % (browse_report_elem.tag, expected_tags)) if browse_report_elem.find(ns_rep_old("browseType")) is not None: ns = ns_rep_old else: ns = ns_rep browse_report_decoder = XMLDecoder( { "date_time": ("rep:dateTime/text()", getDateTime), "browse_type": "rep:browseType/text()", "responsible_org_name": "rep:responsibleOrgName/text()", "browses": ("rep:browse", lambda browse: decode_browse(browse, ns), "*") }, {"rep": ns.uri}) browse_report = data.BrowseReport( **browse_report_decoder.decode(browse_report_elem)) logger.info("Finished decoding browse report.") return browse_report
def decode_browse_report(browse_report_elem): """ Parsing function to return a BrowseReport object from an ElementTree.Element node. """ logger.info("Start parsing browse report.") try: browse_report_elem = browse_report_elem.getroot() except AttributeError: pass expected_tags = ns_bsi("ingestBrowse"), ns_rep("browseReport"), ns_rep_old("browseReport") if browse_report_elem.tag not in expected_tags: raise DecodingException("Invalid root tag '%s'. Expected one of '%s'." % (browse_report_elem.tag, expected_tags)) if browse_report_elem.find(ns_rep_old("browseType")) is not None: ns = ns_rep_old else: ns = ns_rep browse_report_decoder = XMLDecoder({ "date_time": ("rep:dateTime/text()", getDateTime), "browse_type": "rep:browseType/text()", "responsible_org_name": "rep:responsibleOrgName/text()", "browses": ("rep:browse", lambda browse: decode_browse(browse, ns), "*") }, {"rep": ns.uri}) browse_report = data.BrowseReport( **browse_report_decoder.decode(browse_report_elem) ) logger.info("Finished decoding browse report.") return browse_report
def decode_browse_report(browse_report_elem): """ Parsing function to return a BrowseReport object from an ElementTree.Element node. """ logger.info("Start parsing browse report.") try: browse_report_elem = browse_report_elem.getroot() except AttributeError: pass expected_tags = ns_bsi("ingestBrowse"), ns_rep("browseReport") if browse_report_elem.tag not in expected_tags: raise DecodingException("Invalid root tag '%s'. Expected one of '%s'." % (browse_report_elem.tag, expected_tags)) browse_report = data.BrowseReport( **browse_report_decoder.decode(browse_report_elem) ) logger.info("Finished decoding browse report.") return browse_report
def _serialize_model_in_geotiff_browse(browse): georef_elem = Element(ns_rep("modelInGeotiff")) georef_elem.text = "true" return georef_elem
def _serialize_footprint_browse(browse): georef_elem = Element(ns_rep("footprint"), attrib={"nodeNumber": str(browse.node_number)}) SubElement(georef_elem, ns_rep("colRowList")).text = browse.col_row_list SubElement(georef_elem, ns_rep("coordList")).text = browse.coord_list return georef_elem
def _serialize_rectified_browse(browse): georef_elem = Element(ns_rep("rectifiedBrowse")) SubElement(georef_elem, ns_rep("coordList")).text = browse.coord_list return georef_elem