EOX GitLab Instance

Skip to content
Snippets Groups Projects
Commit 9bd979ff authored by Fabian Schindler's avatar Fabian Schindler
Browse files

Several fixes. Multiple namespaces for 'rep'

parent 55fcc0aa
No related branches found
No related tags found
No related merge requests found
......@@ -34,7 +34,8 @@ from .util import pairwise
class BrowseReportParserError(ValueError):
pass
NS_REP = 'http://ngeo.eo.esa.int/schema/browseReport'
NS_REP = 'http://ngeo.eo.esa.int/ngEO/browseReport/1.0'
NS_REP_OLD = 'http://ngeo.eo.esa.int/schema/browseReport'
NS_BSI = 'http://ngeo.eo.esa.int/schema/browse/ingestion'
......@@ -47,11 +48,16 @@ nsmap = {
def rep(tag):
return f'{{{NS_REP}}}{tag}'
def rep_old(tag):
return f'{{{NS_REP_OLD}}}{tag}'
def bsi(tag):
return f'{{{NS_BSI}}}{tag}'
ALLOWED_ROOT_TAGS = {rep('browseReport'), rep_old('browseReport'), bsi('ingestBrowse')}
def parse_browse_report(input_file):
"""
:returns: list of browses
......@@ -62,72 +68,77 @@ def parse_browse_report(input_file):
raise BrowseReportParserError('Failed to parse XML.') from e
root = tree.getroot()
if not root.tag in [rep('browseReport'), bsi('ingestBrowse')]:
if not root.tag in ALLOWED_ROOT_TAGS:
raise BrowseReportParserError(
'Document is not a browse report or an ingest browse instruction.'
)
if root.tag == rep_old('browseReport'):
used_rep = rep_old
else:
used_rep = rep
return {
'responsible_or_name': root.find(rep('responsibleOrgName')),
'date_time': dateutil.parser.parse(root.find(rep('dateTime'))),
'browse_type': root.findtext(rep('browseType')),
'responsible_org_name': root.findtext(used_rep('responsibleOrgName')),
'date_time': dateutil.parser.parse(root.findtext(used_rep('dateTime'))),
'browse_type': root.findtext(used_rep('browseType')),
'browses': [
parse_browse(elem)
for elem in root.iterfind(rep('browse'))
parse_browse(elem, used_rep)
for elem in root.iterfind(used_rep('browse'))
],
}
def parse_browse(elem):
def parse_browse(elem, used_rep):
browse = {
'type': '',
'filename': elem.findtext(rep('fileName')),
'image_type': elem.findtext(rep('imageType')),
'browse_identifier': elem.findtext(used_rep('browseIdentifier')),
'filename': elem.findtext(used_rep('fileName')),
'image_type': elem.findtext(used_rep('imageType')),
'reference_system_identifier': elem.findtext(
rep('referenceSystemIdentifier')
used_rep('referenceSystemIdentifier')
),
'start_time': dateutil.parser.parse(elem.findtext(rep('startTime'))),
'end_time': dateutil.parser.parse(elem.findtext(rep('endTime'))),
'start_time': dateutil.parser.parse(elem.findtext(used_rep('startTime'))),
'end_time': dateutil.parser.parse(elem.findtext(used_rep('endTime'))),
}
rectified_elem = elem.find(rep('rectifiedBrowse'))
footprint_elem = elem.find(rep('footprint'))
geotiff_elem = elem.find(rep('modelInGeotiff'))
regular_grid_browse = elem.find(rep('modelInGeotiff'))
rectified_elem = elem.find(used_rep('rectifiedBrowse'))
footprint_elem = elem.find(used_rep('footprint'))
geotiff_elem = elem.find(used_rep('modelInGeotiff'))
regular_grid_browse = elem.find(used_rep('modelInGeotiff'))
if rectified_elem:
if rectified_elem is not None:
browse['type'] = 'rectified_browse'
browse['rectified'] = {
'coord_list': [
(float(x), float(y))
for x, y in pairwise(
footprint_elem.findtext(rep('coordList')).split()
rectified_elem.findtext(used_rep('coordList')).split()
)
],
}
elif footprint_elem:
elif footprint_elem is not None:
browse['type'] = 'footprint_browse'
browse['footprint'] = {
'col_row_list': [
(int(x), int(y))
for x, y in pairwise(
footprint_elem.findtext(rep('colRowList')).split()
footprint_elem.findtext(used_rep('colRowList')).split()
)
],
'coord_list': [
(float(x), float(y))
for x, y in pairwise(
footprint_elem.findtext(rep('coordList')).split()
footprint_elem.findtext(used_rep('coordList')).split()
)
],
}
elif geotiff_elem:
elif geotiff_elem is not None:
browse['type'] = 'model_in_geotiff_browse'
browse['model_in_geotiff'] = True
elif regular_grid_browse:
elif regular_grid_browse is not None:
# TODO: other browse types
browse['type'] = 'regular_grid_browse'
raise NotImplementedError('Regular grid browses are not supported')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment