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, }
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(("<", "></", ">")))
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" )
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" )
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")
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")
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")