Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
def decode_browse(browse_elem, ns):
    """ Parsing function to return a Browse object from an ElementTree.Element
        node.
    """

    browse_decoder = XMLDecoder({
        "browse_identifier": ("rep:browseIdentifier/text()", str, "?"),
        "file_name": "rep:fileName/text()",
        "image_type": "rep:imageType/text()",
        "reference_system_identifier": "rep:referenceSystemIdentifier/text()",
        "start_time": ("rep:startTime/text()", getDateTime),
        "end_time": ("rep:endTime/text()", getDateTime),
    }, {"rep": ns.uri})

    # general args
    kwargs = browse_decoder.decode(browse_elem)

    browse_identifier = browse_elem.find(ns("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("rectifiedBrowse"))
    footprint = browse_elem.find(ns("footprint"))
    regular_grid = browse_elem.find(ns("regularGrid"))
    model_in_geotiff = browse_elem.find(ns("modelInGeotiff"))
    vertical_curtain_footprint = browse_elem.find(ns("verticalCurtainFootprint"))

    rectified_decoder = XMLDecoder({
        "coord_list": "rep:coordList/text()",
    }, {"rep": ns.uri})

    footprint_decoder = XMLDecoder({
        "node_number": ("@nodeNumber", int),
        "col_row_list": "rep:colRowList/text()",
        "coord_list": "rep:coordList/text()"
    }, {"rep": ns.uri})

    regular_grid_decoder = XMLDecoder({
        "col_node_number": ("rep:colNodeNumber/text()", int),
        "row_node_number": ("rep:rowNodeNumber/text()", int),
        "col_step": ("rep:colStep/text()", float),
        "row_step": ("rep:rowStep/text()", float),
        "coord_lists": ("rep:coordList/text()", str, "+")
    }, {"rep": ns.uri})

    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.")
        return data.VerticalCurtainBrowse(**kwargs)

    else:
        raise DecodingException("Missing geo-spatial reference type.")
Esempio n. 4
0
def decode_browse(browse_elem, ns):
    """ Parsing function to return a Browse object from an ElementTree.Element
        node.
    """

    browse_decoder = XMLDecoder(
        {
            "browse_identifier": ("rep:browseIdentifier/text()", str, "?"),
            "file_name": "rep:fileName/text()",
            "image_type": "rep:imageType/text()",
            "reference_system_identifier":
            "rep:referenceSystemIdentifier/text()",
            "start_time": ("rep:startTime/text()", getDateTime),
            "end_time": ("rep:endTime/text()", getDateTime),
        }, {"rep": ns.uri})

    # general args
    kwargs = browse_decoder.decode(browse_elem)

    browse_identifier = browse_elem.find(ns("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("rectifiedBrowse"))
    footprint = browse_elem.find(ns("footprint"))
    regular_grid = browse_elem.find(ns("regularGrid"))
    model_in_geotiff = browse_elem.find(ns("modelInGeotiff"))
    vertical_curtain_footprint = browse_elem.find(
        ns("verticalCurtainFootprint"))

    rectified_decoder = XMLDecoder({
        "coord_list": "rep:coordList/text()",
    }, {"rep": ns.uri})

    footprint_decoder = XMLDecoder(
        {
            "node_number": ("@nodeNumber", int),
            "col_row_list": "rep:colRowList/text()",
            "coord_list": "rep:coordList/text()"
        }, {"rep": ns.uri})

    regular_grid_decoder = XMLDecoder(
        {
            "col_node_number": ("rep:colNodeNumber/text()", int),
            "row_node_number": ("rep:rowNodeNumber/text()", int),
            "col_step": ("rep:colStep/text()", float),
            "row_step": ("rep:rowStep/text()", float),
            "coord_lists": ("rep:coordList/text()", str, "+")
        }, {"rep": ns.uri})

    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.")
        return data.VerticalCurtainBrowse(**kwargs)

    else:
        raise DecodingException("Missing geo-spatial reference type.")
Esempio n. 5
0
    return browse_layers


browse_layer_decoder = XMLDecoder(
    {
        "browse_layer_identifier":
        "@browseLayerId",
        "browse_type":
        "cfg:browseType/text()",
        "title":
        "cfg:title/text()",
        "description": ("cfg:title/text()", str, "?"),
        "browse_access_policy":
        "cfg:browseAccessPolicy/text()",
        "related_dataset_ids":
        ("cfg:relatedDatasetIds/cfg:datasetId/text()", str, "*"),
        "contains_vertical_curtains":
        ("cfg:containsVerticalCurtains", lambda v: v == "true"),
        "r_band": ("cfg:rgbBands/text()", lambda v: int(v.split(",")[0])),
        "g_band": ("cfg:rgbBands/text()", lambda v: int(v.split(",")[1])),
        "b_band": ("cfg:rgbBands/text()", lambda v: int(v.split(",")[2])),
        "radiometric_interval_min":
        ("cfg:radiometricInterval/cfg:min/text()", int),
        "radiometric_interval_max":
        ("cfg:radiometricInterval/cfg:max/text()", int),
        "highest_map_level": ("cfg:highestMapLevel/text()", int),
        "lowest_map_level": ("cfg:lowestMapLevel/text()", int),
        "lowest_map_level":
        "cfg:grid/text()",
    }, {"cfg": ns_cfg.uri})