Exemple #1
0
def get_fgdcinfo(fpath):
    """
    Gathers information from FGDC metadata attached to each NOAA project.
    """
    r = requests.get(fpath)

    md_parser = get_metadata_parser(r.content)
    root = ET.fromstring(r.content)

    start_date = root.findall(f'.//{gml_tag}beginPosition')
    end_date = root.findall(f'.//{gml_tag}endPosition')

    if len(start_date) == len(end_date) == 0:
        start_date = end_date = root.findall(f'.//{gml_tag}timePosition')

    if len(start_date) == len(end_date) == 0:
        start_date = end_date = None
    else:
        start_date = start_date[0].text
        end_date = end_date[0].text

    return {
        'title': md_parser.title,
        'description': md_parser.abstract,
        'processing': md_parser.process_steps,
        'start_date': start_date,
        'end_date': end_date,
    }
Exemple #2
0
    def test_template_conversion_bad_roots(self):

        bad_root_format = "Bad root test failed for {0} with {1}"

        for bad_root in (None, u"", StringIO(u""), {}, '<?xml version="1.0" encoding="UTF-8"?>\n'):
            with self.assertRaises(NoContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                get_parsed_content(bad_root)
            with self.assertRaises(NoContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                get_metadata_parser(bad_root)

            if bad_root is not None:
                with self.assertRaises(NoContent, msg=bad_root_format.format("ArcGISParser", bad_root)):
                    ArcGISParser(bad_root)
                with self.assertRaises(NoContent, msg=bad_root_format.format("FgdcParser", bad_root)):
                    FgdcParser(bad_root)
                with self.assertRaises(NoContent, msg=bad_root_format.format("IsoParser", bad_root)):
                    IsoParser(bad_root)

        for bad_root in (u"NOT XML", u"<badRoot/>", u"<badRoot>invalid</badRoot>"):
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                get_parsed_content(bad_root)
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                get_metadata_parser(bad_root)
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("ArcGISParser", bad_root)):
                ArcGISParser(bad_root)
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("FgdcParser", bad_root)):
                FgdcParser(bad_root)
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("IsoParser", bad_root)):
                IsoParser(bad_root)

        with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
            IsoParser(FGDC_ROOT.join(("<", "></", ">")))

        for iso_root in ISO_ROOTS:
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                ArcGISParser(iso_root.join(("<", "></", ">")))
            with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                FgdcParser(iso_root.join(("<", "></", ">")))

        for arcgis_root in ARCGIS_ROOTS:

            with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                IsoParser(arcgis_root.join(("<", "></", ">")))

            if arcgis_root != FGDC_ROOT:
                with self.assertRaises(InvalidContent, msg=bad_root_format.format("get_parsed_content", bad_root)):
                    FgdcParser(arcgis_root.join(("<", "></", ">")))
Exemple #3
0
    def test_conversion_from_dict(self):
        arcgis_parser = ArcGISParser(self.arcgis_metadata)
        fgdc_parser = FgdcParser(self.fgdc_metadata)
        iso_parser = IsoParser(self.iso_metadata)

        self.assert_parser_conversion(
            arcgis_parser, get_metadata_parser(element_to_dict(fgdc_parser._xml_tree, recurse=True)), "dict-based"
        )
        self.assert_parser_conversion(
            arcgis_parser, get_metadata_parser(element_to_dict(iso_parser._xml_tree, recurse=True)), "dict-based"
        )

        self.assert_parser_conversion(
            fgdc_parser, get_metadata_parser(element_to_dict(arcgis_parser._xml_tree, recurse=True)), "dict-based"
        )
        self.assert_parser_conversion(
            fgdc_parser, get_metadata_parser(element_to_dict(iso_parser._xml_tree, recurse=True)), "dict-based"
        )

        self.assert_parser_conversion(
            iso_parser, get_metadata_parser(element_to_dict(arcgis_parser._xml_tree, recurse=True)), "dict-based"
        )
        self.assert_parser_conversion(
            iso_parser, get_metadata_parser(element_to_dict(fgdc_parser._xml_tree, recurse=True)), "dict-based"
        )
Exemple #4
0
    def test_template_conversion_from_str(self):

        for arcgis_root in ARCGIS_ROOTS:
            for arcgis_node in ARCGIS_NODES:

                data = arcgis_node.join(("<", "></", ">"))
                data = arcgis_root.join(("<", ">{0}</", ">")).format(data)

                self.assert_parser_conversion(FgdcParser(), get_metadata_parser(data), "dict-based template")
                self.assert_parser_conversion(IsoParser(), get_metadata_parser(data), "dict-based template")

        self.assert_parser_conversion(
            ArcGISParser(), get_metadata_parser(FGDC_ROOT.join(("<", "></", ">"))), "str-based template"
        )
        self.assert_parser_conversion(
            IsoParser(), get_metadata_parser(FGDC_ROOT.join(("<", "></", ">"))), "str-based template"
        )

        for iso_root in ISO_ROOTS:
            self.assert_parser_conversion(
                ArcGISParser(), get_metadata_parser(iso_root.join(("<", "></", ">"))), "str-based template"
            )
            self.assert_parser_conversion(
                FgdcParser(), get_metadata_parser(iso_root.join(("<", "></", ">"))), "str-based template"
            )
Exemple #5
0
    def test_template_conversion_from_type(self):

        self.assert_parser_conversion(ArcGISParser(), get_metadata_parser(FgdcParser), "type-based template")
        self.assert_parser_conversion(ArcGISParser(), get_metadata_parser(IsoParser), "type-based template")

        self.assert_parser_conversion(IsoParser(), get_metadata_parser(ArcGISParser), "type-based template")
        self.assert_parser_conversion(IsoParser(), get_metadata_parser(FgdcParser), "type-based template")

        self.assert_parser_conversion(FgdcParser(), get_metadata_parser(ArcGISParser), "type-based template")
        self.assert_parser_conversion(FgdcParser(), get_metadata_parser(IsoParser), "type-based template")
Exemple #6
0
    def test_conversion_from_str(self):
        arcgis_parser = ArcGISParser(self.arcgis_metadata)
        fgdc_parser = FgdcParser(self.fgdc_metadata)
        iso_parser = IsoParser(self.iso_metadata)

        self.assert_parser_conversion(arcgis_parser, get_metadata_parser(fgdc_parser.serialize()), "str-based")
        self.assert_parser_conversion(arcgis_parser, get_metadata_parser(iso_parser.serialize()), "str-based")

        self.assert_parser_conversion(fgdc_parser, get_metadata_parser(arcgis_parser.serialize()), "str-based")
        self.assert_parser_conversion(fgdc_parser, get_metadata_parser(iso_parser.serialize()), "str-based")

        self.assert_parser_conversion(iso_parser, get_metadata_parser(arcgis_parser.serialize()), "str-based")
        self.assert_parser_conversion(iso_parser, get_metadata_parser(fgdc_parser.serialize()), "str-based")
Exemple #7
0
    def test_template_conversion_from_dict(self):

        for arcgis_root in ARCGIS_ROOTS:
            for arcgis_node in ARCGIS_NODES:

                data = {"name": arcgis_root, "children": [{"name": arcgis_node}]}
                self.assert_parser_conversion(FgdcParser(), get_metadata_parser(data), "dict-based template")
                self.assert_parser_conversion(IsoParser(), get_metadata_parser(data), "dict-based template")

        self.assert_parser_conversion(ArcGISParser(), get_metadata_parser({"name": FGDC_ROOT}), "dict-based template")
        self.assert_parser_conversion(IsoParser(), get_metadata_parser({"name": FGDC_ROOT}), "dict-based template")

        for iso_root in ISO_ROOTS:
            self.assert_parser_conversion(
                ArcGISParser(), get_metadata_parser({"name": iso_root}), "dict-based template"
            )
            self.assert_parser_conversion(FgdcParser(), get_metadata_parser({"name": iso_root}), "dict-based template")