Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.parent.context.namespaces)).text = value
elif 'elementsetname' in self.parent.kvp:
if (self.parent.kvp['elementsetname'] == 'full' and
util.getqattr(recobj, self.parent.context.md_core_model['mappings']\
['pycsw:Typename']) == 'csw:Record' and
util.getqattr(recobj, self.parent.context.md_core_model['mappings']\
['pycsw:Schema']) == 'http://www.opengis.net/cat/csw/2.0.2' and
util.getqattr(recobj, self.parent.context.md_core_model['mappings']\
['pycsw:Type']) != 'service'):
# dump record as is and exit
return etree.fromstring(util.getqattr(recobj,
self.parent.context.md_core_model['mappings']['pycsw:XML']), self.parent.context.parser)
etree.SubElement(record,
util.nspath_eval('dc:identifier', self.parent.context.namespaces)).text = \
util.getqattr(recobj,
self.parent.context.md_core_model['mappings']['pycsw:Identifier'])
for i in ['dc:title', 'dc:type']:
val = util.getqattr(recobj, queryables[i]['dbcol'])
if not val:
val = ''
etree.SubElement(record, util.nspath_eval(i,
self.parent.context.namespaces)).text = val
if self.parent.kvp['elementsetname'] in ['summary', 'full']:
# add summary elements
keywords = util.getqattr(recobj, queryables['dc:subject']['dbcol'])
if keywords is not None:
for keyword in keywords.split(','):
etree.SubElement(record,
util.nspath_eval('dc:subject',
etree.SubElement(tmp5, util.nspath_eval('gco:Integer', self.namespaces)).text = str(val)
# resource language
val = util.getqattr(result, queryables['apiso:ResourceLanguage']['dbcol'])
tmp = etree.SubElement(resident, util.nspath_eval('gmd:language', self.namespaces))
etree.SubElement(tmp, util.nspath_eval('gco:CharacterString', self.namespaces)).text = val
# topic category
val = util.getqattr(result, queryables['apiso:TopicCategory']['dbcol'])
if val:
for v in val.split(','):
tmp = etree.SubElement(resident, util.nspath_eval('gmd:topicCategory', self.namespaces))
etree.SubElement(tmp, util.nspath_eval('gmd:MD_TopicCategoryCode', self.namespaces)).text = val
# bbox extent
val = util.getqattr(result, queryables['apiso:BoundingBox']['dbcol'])
bboxel = write_extent(val, self.namespaces)
if bboxel is not None and mtype != 'service':
resident.append(bboxel)
# service identification
if mtype == 'service':
# service type
# service type version
val = util.getqattr(result, queryables['apiso:ServiceType']['dbcol'])
val2 = util.getqattr(result, queryables['apiso:ServiceTypeVersion']['dbcol'])
if val is not None:
tmp = etree.SubElement(resident, util.nspath_eval('srv:serviceType', self.namespaces))
etree.SubElement(tmp, util.nspath_eval('gco:LocalName', self.namespaces)).text = val
tmp = etree.SubElement(resident, util.nspath_eval('srv:serviceTypeVersion', self.namespaces))
etree.SubElement(tmp, util.nspath_eval('gco:CharacterString', self.namespaces)).text = val2
etree.SubElement(digtinfo, 'formname').text = val
etree.SubElement(citeinfo, 'geoform').text = val
# source
lineage = etree.SubElement(node, 'lineage')
srcinfo = etree.SubElement(lineage, 'srcinfo')
srccite = etree.SubElement(srcinfo, 'srccite')
sciteinfo = etree.SubElement(srccite, 'citeinfo')
val = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Source']) or ''
etree.SubElement(sciteinfo, 'title').text = val
val = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Relation']) or ''
etree.SubElement(citeinfo, 'onlink').text = val
# links
rlinks = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Links'])
if rlinks:
for link in rlinks.split('^'):
linkset = link.split(',')
etree.SubElement(citeinfo, 'onlink', type=linkset[2]).text = linkset[-1]
# metd
metainfo = etree.SubElement(node, 'metainfo')
val = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Modified']) or ''
etree.SubElement(metainfo, 'metd').text = val
return node
val = util.getqattr(recobj, queryables[i]['dbcol'])
if not val:
val = ''
etree.SubElement(record, util.nspath_eval(i,
self.parent.context.namespaces)).text = val
if self.parent.kvp['elementsetname'] in ['summary', 'full']:
# add summary elements
keywords = util.getqattr(recobj, queryables['dc:subject']['dbcol'])
if keywords is not None:
for keyword in keywords.split(','):
etree.SubElement(record,
util.nspath_eval('dc:subject',
self.parent.context.namespaces)).text = keyword
val = util.getqattr(recobj, self.parent.context.md_core_model['mappings']['pycsw:TopicCategory'])
if val:
etree.SubElement(record,
util.nspath_eval('dc:subject',
self.parent.context.namespaces), scheme='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode').text = val
val = util.getqattr(recobj, queryables['dc:format']['dbcol'])
if val:
etree.SubElement(record,
util.nspath_eval('dc:format',
self.parent.context.namespaces)).text = val
# links
rlinks = util.getqattr(recobj,
self.parent.context.md_core_model['mappings']['pycsw:Links'])
if rlinks:
elem.text = value
elif 'elementsetname' in self.parent.kvp:
if (self.parent.kvp['elementsetname'] == 'full' and
util.getqattr(recobj, self.parent.context.md_core_model['mappings']\
['pycsw:Typename']) == 'csw:Record' and
util.getqattr(recobj, self.parent.context.md_core_model['mappings']\
['pycsw:Schema']) == 'http://www.opengis.net/cat/csw/3.0' and
util.getqattr(recobj, self.parent.context.md_core_model['mappings']\
['pycsw:Type']) != 'service'):
# dump record as is and exit
return etree.fromstring(util.getqattr(recobj,
self.parent.context.md_core_model['mappings']['pycsw:XML']), self.parent.context.parser)
etree.SubElement(record,
util.nspath_eval('dc:identifier', self.parent.context.namespaces)).text = \
util.getqattr(recobj,
self.parent.context.md_core_model['mappings']['pycsw:Identifier'])
for i in ['dc:title', 'dc:type']:
val = util.getqattr(recobj, queryables[i]['dbcol'])
if not val:
val = ''
etree.SubElement(record, util.nspath_eval(i,
self.parent.context.namespaces)).text = val
if self.parent.kvp['elementsetname'] in ['summary', 'full']:
# add summary elements
keywords = util.getqattr(recobj, queryables['dc:subject']['dbcol'])
if keywords is not None:
for keyword in keywords.split(','):
etree.SubElement(record,
util.nspath_eval('dc:subject',
def write_record(result, esn, context, url=None):
''' Return csw:SearchResults child as lxml.etree.Element '''
typename = util.getqattr(result, context.md_core_model['mappings']['pycsw:Typename'])
if typename == 'gm03:TRANSFER':
# dump record as is and exit
# TODO: provide brief and summary elementsetname's
return etree.fromstring(util.getqattr(result, context.md_core_model['mappings']['pycsw:XML']), context.parser)
node = etree.Element(util.nspath_eval('gm03:TRANSFER', NAMESPACES), nsmap=NAMESPACES)
header = etree.SubElement(node, util.nspath_eval('gm03:HEADERSECTION', NAMESPACES))
header.attrib['version'] = '2.3'
header.attrib['sender'] = 'pycsw'
etree.SubElement(header, util.nspath_eval('gm03:MODELS', NAMESPACES))
data = etree.SubElement(node, util.nspath_eval('gm03:DATASECTION', NAMESPACES))
def write_record(self, result, esn, outputschema, queryables, caps=None):
''' Return csw:SearchResults child as lxml.etree.Element '''
typename = util.getqattr(result, self.context.md_core_model['mappings']['pycsw:Typename'])
is_iso_anyway = False
xml_blob = util.getqattr(result, self.context.md_core_model['mappings']['pycsw:XML'])
if caps is None and xml_blob is not None and xml_blob.startswith(b'
def write_record(recobj, esn, context, url=None):
''' Return csw:SearchResults child as lxml.etree.Element '''
typename = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Typename'])
if esn == 'full' and typename == 'fgdc:metadata':
# dump record as is and exit
return etree.fromstring(util.getqattr(recobj, context.md_core_model['mappings']['pycsw:XML']), context.parser)
node = etree.Element('metadata')
node.attrib[util.nspath_eval('xsi:noNamespaceSchemaLocation', context.namespaces)] = \
'http://www.fgdc.gov/metadata/fgdc-std-001-1998.xsd'
idinfo = etree.SubElement(node, 'idinfo')
# identifier
etree.SubElement(idinfo, 'datasetid').text = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Identifier'])
citation = etree.SubElement(idinfo, 'citation')
citeinfo = etree.SubElement(citation, 'citeinfo')
# title
val = util.getqattr(recobj, context.md_core_model['mappings']['pycsw:Title'])
etree.SubElement(citeinfo, 'title').text = val
data = etree.SubElement(node, util.nspath_eval('gm03:DATASECTION', NAMESPACES))
core = etree.SubElement(data, util.nspath_eval('gm03:GM03_2_1Core.Core', NAMESPACES))
core_meta = etree.SubElement(core, util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Metadata', NAMESPACES))
val = util.getqattr(result, context.md_core_model['mappings']['pycsw:Identifier'])
etree.SubElement(core_meta, util.nspath_eval('gm03:fileIdentifier', NAMESPACES)).text = val
language = util.getqattr(result, context.md_core_model['mappings']['pycsw:Language'])
etree.SubElement(core_meta, util.nspath_eval('gm03:language', NAMESPACES)).text = language
val = util.getqattr(result, context.md_core_model['mappings']['pycsw:Modified'])
etree.SubElement(core_meta, util.nspath_eval('gm03:dateStamp', NAMESPACES)).text = val
hierarchy_level_val = util.getqattr(result, context.md_core_model['mappings']['pycsw:Type'])
# metadata standard name
standard = etree.SubElement(core_meta, util.nspath_eval('gm03:metadataStandardName', NAMESPACES)).text = 'GM03'
# metadata standard version
standardver = etree.SubElement(core_meta, util.nspath_eval('gm03:metadataStandardVersion', NAMESPACES)).text = '2.3'
# hierarchy level
hierarchy_level = etree.SubElement(core_meta, util.nspath_eval('gm03:hierarchyLevel', NAMESPACES))
scope_code = etree.SubElement(hierarchy_level, util.nspath_eval('gm03:GM03_2_1Core.Core.MD_ScopeCode_', NAMESPACES))
etree.SubElement(scope_code, util.nspath_eval('gm03:value', NAMESPACES)).text = hierarchy_level_val
# parent identifier
val = util.getqattr(result, context.md_core_model['mappings']['pycsw:ParentIdentifier'])
parent_identifier = etree.SubElement(core_meta, util.nspath_eval('gm03:parentIdentifier', NAMESPACES))
scope_code = etree.SubElement(parent_identifier, util.nspath_eval('gm03:GM03_2_1Core.Core.MD_ScopeCode_', NAMESPACES))
util.nspath_eval(i, self.parent.context.namespaces)).text = val
val = util.getqattr(recobj, queryables['dct:spatial']['dbcol'])
if val:
etree.SubElement(record,
util.nspath_eval('dct:spatial', self.parent.context.namespaces), scheme='http://www.opengis.net/def/crs').text = val
# always write out ows:BoundingBox
bboxel = write_boundingbox(getattr(recobj,
self.parent.context.md_core_model['mappings']['pycsw:BoundingBox']),
self.parent.context.namespaces)
if bboxel is not None:
record.append(bboxel)
if self.parent.kvp['elementsetname'] != 'brief': # add temporal extent
begin = util.getqattr(record, self.parent.context.md_core_model['mappings']['pycsw:TempExtent_begin'])
end = util.getqattr(record, self.parent.context.md_core_model['mappings']['pycsw:TempExtent_end'])
if begin or end:
tempext = etree.SubElement(record, util.nspath_eval('csw30:TemporalExtent', self.parent.context.namespaces))
if begin:
etree.SubElement(record, util.nspath_eval('csw30:begin', self.parent.context.namespaces)).text = begin
if end:
etree.SubElement(record, util.nspath_eval('csw30:end', self.parent.context.namespaces)).text = end
return record