Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def getdomain(self):
''' Handle GetDomain request '''
if ('parametername' not in self.parent.kvp and
'propertyname' not in self.parent.kvp):
return self.exceptionreport('MissingParameterValue',
'parametername', 'Missing value. \
One of propertyname or parametername must be specified')
node = etree.Element(util.nspath_eval('csw:GetDomainResponse',
self.parent.context.namespaces), nsmap=self.parent.context.namespaces)
node.attrib[util.nspath_eval('xsi:schemaLocation',
self.parent.context.namespaces)] = '%s %s/csw/2.0.2/CSW-discovery.xsd' % \
(self.parent.context.namespaces['csw'],
self.parent.config.get('server', 'ogc_schemas_base'))
if 'parametername' in self.parent.kvp:
for pname in self.parent.kvp['parametername'].split(','):
LOGGER.debug('Parsing parametername %s.' % pname)
domainvalue = etree.SubElement(node,
util.nspath_eval('csw:DomainValues', self.parent.context.namespaces),
type='csw:Record')
etree.SubElement(domainvalue,
util.nspath_eval('csw:ParameterName',
self.parent.context.namespaces)).text = pname
if self.parent.profiles is not None:
for prof in self.parent.profiles['loaded'].keys():
result = \
self.parent.profiles['loaded'][prof].check_parameters(self.parent.kvp)
if result is not None:
return self.exceptionreport(result['code'],
result['locator'], result['text'])
# @updateSequence: get latest update to repository
try:
updatesequence = \
util.get_time_iso2unix(self.parent.repository.query_insert())
except:
updatesequence = None
node = etree.Element(util.nspath_eval('csw30:Capabilities',
self.parent.context.namespaces),
nsmap=self.parent.context.namespaces, version='3.0.0',
updateSequence=str(updatesequence))
if 'updatesequence' in self.parent.kvp:
if int(self.parent.kvp['updatesequence']) == updatesequence:
return node
elif int(self.parent.kvp['updatesequence']) > updatesequence:
return self.exceptionreport('InvalidUpdateSequence',
'updatesequence',
'outputsequence specified (%s) is higher than server\'s \
updatesequence (%s)' % (self.parent.kvp['updatesequence'],
updatesequence))
node.attrib[util.nspath_eval('xsi:schemaLocation',
self.parent.context.namespaces)] = '%s %s/cat/csw/3.0/cswGetCapabilities.xsd' % \
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
# publisher
publinfo = etree.SubElement(citeinfo, 'publinfo')
def write_extent(bbox, nsmap):
''' Generate BBOX extent '''
if bbox is not None:
try:
bbox2 = util.wkt2geom(bbox)
except:
return None
bounding_box = etree.Element(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_GeographicBoundingBox', NAMESPACES))
etree.SubElement(bounding_box, util.nspath_eval('gm03:northBoundLatitude', nsmap)).text = str(bbox2[3])
etree.SubElement(bounding_box, util.nspath_eval('gm03:southBoundLatitude', nsmap)).text = str(bbox2[1])
etree.SubElement(bounding_box, util.nspath_eval('gm03:eastBoundLongitude', nsmap)).text = str(bbox2[0])
etree.SubElement(bounding_box, util.nspath_eval('gm03:westBoundLongitude', nsmap)).text = str(bbox2[2])
return bounding_box
return None
def write_extent(bbox, nsmap):
''' Generate BBOX extent '''
if bbox is not None:
try:
bbox2 = util.wkt2geom(bbox)
except:
return None
where = etree.Element(util.nspath_eval('georss:where', NAMESPACES))
envelope = etree.SubElement(where, util.nspath_eval('gml:Envelope', nsmap), srsName='http://www.opengis.net/def/crs/EPSG/0/4326')
etree.SubElement(envelope, util.nspath_eval('gml:lowerCorner', nsmap)).text = '%s %s' % (bbox2[1], bbox2[0])
etree.SubElement(envelope, util.nspath_eval('gml:upperCorner', nsmap)).text = '%s %s' % (bbox2[3], bbox2[2])
return where
return None
def _write_transactionsummary(self, inserted=0, updated=0, deleted=0):
''' Write csw:TransactionSummary construct '''
node = etree.Element(util.nspath_eval('csw30:TransactionSummary',
self.parent.context.namespaces))
if 'requestid' in self.parent.kvp and self.parent.kvp['requestid'] is not None:
node.attrib['requestId'] = self.parent.kvp['requestid']
etree.SubElement(node, util.nspath_eval('csw30:totalInserted',
self.parent.context.namespaces)).text = str(inserted)
etree.SubElement(node, util.nspath_eval('csw30:totalUpdated',
self.parent.context.namespaces)).text = str(updated)
etree.SubElement(node, util.nspath_eval('csw30:totalDeleted',
self.parent.context.namespaces)).text = str(deleted)
return node
def write_boundingbox(bbox, nsmap):
''' Generate ows20:BoundingBox '''
if bbox is not None:
try:
bbox2 = util.wkt2geom(bbox)
except:
return None
if len(bbox2) == 4:
boundingbox = etree.Element(util.nspath_eval('ows20:BoundingBox',
nsmap), crs='http://www.opengis.net/def/crs/EPSG/0/4326',
dimensions='2')
etree.SubElement(boundingbox, util.nspath_eval('ows20:LowerCorner',
nsmap)).text = '%s %s' % (bbox2[1], bbox2[0])
etree.SubElement(boundingbox, util.nspath_eval('ows20:UpperCorner',
nsmap)).text = '%s %s' % (bbox2[3], bbox2[2])
return boundingbox
else:
return None
else:
return None
if nextrecord == 0:
searchresult_status = 'complete'
def _write_date(dateval, datetypeval, nsmap):
date1 = etree.Element(util.nspath_eval('gmd:date', nsmap))
date2 = etree.SubElement(date1, util.nspath_eval('gmd:CI_Date', nsmap))
date3 = etree.SubElement(date2, util.nspath_eval('gmd:date', nsmap))
if dateval.find('T') != -1:
dateel = 'gco:DateTime'
else:
dateel = 'gco:Date'
etree.SubElement(date3, util.nspath_eval(dateel, nsmap)).text = dateval
datetype = etree.SubElement(date2, util.nspath_eval('gmd:dateType', nsmap))
datetype.append(_write_codelist_element('gmd:CI_DateTypeCode', datetypeval, nsmap))
return date1
self.parent.kvp['outputformat'] not in
self.parent.context.model['operations']['DescribeRecord']
['parameters']['outputFormat']['values']): # bad outputformat
return self.exceptionreport('InvalidParameterValue',
'outputformat', 'Invalid value for outputformat: %s' %
self.parent.kvp['outputformat'])
if ('schemalanguage' in self.parent.kvp and
self.parent.kvp['schemalanguage'] not in
self.parent.context.model['operations']['DescribeRecord']['parameters']
['schemaLanguage']['values']): # bad schemalanguage
return self.exceptionreport('InvalidParameterValue',
'schemalanguage', 'Invalid value for schemalanguage: %s' %
self.parent.kvp['schemalanguage'])
node = etree.Element(util.nspath_eval('csw:DescribeRecordResponse',
self.parent.context.namespaces), nsmap=self.parent.context.namespaces)
node.attrib[util.nspath_eval('xsi:schemaLocation',
self.parent.context.namespaces)] = \
'%s %s/csw/2.0.2/CSW-discovery.xsd' % (self.parent.context.namespaces['csw'],
self.parent.config.get('server', 'ogc_schemas_base'))
for typename in self.parent.kvp['typename']:
if typename.find(':') == -1: # unqualified typename
return self.exceptionreport('InvalidParameterValue',
'typename', 'Typename not qualified: %s' % typename)
if typename == 'csw:Record': # load core schema
LOGGER.debug('Writing csw:Record schema.')
schemacomponent = etree.SubElement(node,
util.nspath_eval('csw:SchemaComponent', self.parent.context.namespaces),
schemaLanguage='XMLSCHEMA',