def __init__(self, md): val = md.find(util.nspath_eval('dif:File', namespaces)) self.file = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:URL', namespaces)) self.url = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Format', namespaces)) self.format = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Caption', namespaces)) self.caption = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Description', namespaces)) self.description = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Visualization_URL', namespaces)) self.vis_url = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Visualization_Type', namespaces)) self.vis_type = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Visualization_Subtype', namespaces)) self.vis_subtype = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Visualization_Duration', namespaces)) self.vis_duration = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Visualization_File_Size', namespaces)) self.file_size = util.testXMLValue(val)
def __init__(self, md=None): if md is None: self.url = None self.protocol = None self.name = None self.description = None self.function = None else: val = md.find(util.nspath_eval('gmd:linkage/gmd:URL', namespaces)) self.url = util.testXMLValue(val) val = md.find( util.nspath_eval('gmd:protocol/gco:CharacterString', namespaces)) self.protocol = util.testXMLValue(val) val = md.find( util.nspath_eval('gmd:name/gco:CharacterString', namespaces)) self.name = util.testXMLValue(val) val = md.find( util.nspath_eval('gmd:description/gco:CharacterString', namespaces)) self.description = util.testXMLValue(val) self.function = _testCodeListValue( md.find( util.nspath_eval('gmd:function/gmd:CI_OnLineFunctionCode', namespaces)))
def describerecord(self, typename='csw:Record', format=outputformat): """ Construct and process DescribeRecord request Parameters ---------- - typename: the typename to describe (default is 'csw:Record') - format: the outputFormat (default is 'application/xml') """ # construct request node0 = self._setrootelement('csw:DescribeRecord') node0.set('service', self.service) node0.set('version', self.version) node0.set('outputFormat', format) node0.set('schemaLanguage', namespaces['xs2']) node0.set(util.nspath_eval('xsi:schemaLocation', namespaces), schema_location) etree.SubElement(node0, util.nspath_eval('csw:TypeName', namespaces)).text = typename self.request = node0 self._invoke()
def __init__(self, md=None): if md is None: self.boundingBox = None self.boundingPolygon = None self.description_code = None else: self.boundingBox = None self.boundingPolygon = None if md is not None: bboxElement = md.find( util.nspath_eval('gmd:EX_GeographicBoundingBox', namespaces)) if bboxElement is not None: self.boundingBox = EX_GeographicBoundingBox(bboxElement) polygonElement = md.find( util.nspath_eval('gmd:EX_BoundingPolygon', namespaces)) if polygonElement is not None: self.boundingPolygon = EX_GeographicBoundingPolygon( polygonElement) val = md.find( util.nspath_eval( 'gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:MD_Identifier/gmd:code/gco:CharacterString', namespaces)) self.description_code = util.testXMLValue(val)
def toXML(self): node0 = etree.Element(util.nspath_eval(self.propertyoperator, namespaces)) if not self.matchcase: node0.set('matchCase', 'false') etree.SubElement(node0, util.nspath_eval('ogc:PropertyName', namespaces)).text = self.propertyname etree.SubElement(node0, util.nspath_eval('ogc:Literal', namespaces)).text = self.literal return node0
def __init__(self, md=None): if md is None: self.format = None self.version = None self.distributor = [] self.online = [] pass else: val = md.find( util.nspath_eval( 'gmd:distributionFormat/gmd:MD_Format/gmd:name/gco:CharacterString', namespaces)) self.format = util.testXMLValue(val) val = md.find( util.nspath_eval( 'gmd:distributionFormat/gmd:MD_Format/gmd:version/gco:CharacterString', namespaces)) self.version = util.testXMLValue(val) self.distributor = [] for dist in md.findall( util.nspath_eval('gmd:distributor', namespaces)): self.distributor.append(MD_Distributor(dist)) self.online = [] for ol in md.findall( util.nspath_eval( 'gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource', namespaces)): self.online.append(CI_OnlineResource(ol))
def __init__(self, url, xml=None, lang='en-US', version='2.0.2', timeout=10, skip_caps=False, username=None, password=None): """ Construct and process a GetCapabilities request Parameters ---------- - url: the URL of the CSW - lang: the language (default is 'en-US') - version: version (default is '2.0.2') - timeout: timeout in seconds - skip_caps: whether to skip GetCapabilities processing on init (default is False) - username: username for HTTP basic authentication - password: password for HTTP basic authentication """ self.url = url self.lang = lang self.version = version self.timeout = timeout self.username = username self.password = password self.service = 'CSW' self.exceptionreport = None self.owscommon = ows.OwsCommon('1.0.0') if not skip_caps: # process GetCapabilities if xml: # load from the response to get _exml self._parse_response(xml) else: # construct request data = {'service': self.service, 'version': self.version, 'request': 'GetCapabilities'} self.request = '%s%s' % (bind_url(self.url), urlencode(data)) self._invoke() if self.exceptionreport is None: # ServiceIdentification val = self._exml.find(util.nspath_eval('ows:ServiceIdentification', namespaces)) self.identification=ows.ServiceIdentification(val,self.owscommon.namespace) # ServiceProvider val = self._exml.find(util.nspath_eval('ows:ServiceProvider', namespaces)) self.provider=ows.ServiceProvider(val,self.owscommon.namespace) # ServiceOperations metadata self.operations=[] for elem in self._exml.findall(util.nspath_eval('ows:OperationsMetadata/ows:Operation', namespaces)): self.operations.append(ows.OperationsMetadata(elem, self.owscommon.namespace)) # for harmonization self.contents = None # FilterCapabilities val = self._exml.find(util.nspath_eval('ogc:Filter_Capabilities', namespaces)) self.filters=fes.FilterCapabilities(val)
def toXML(self): tmp = etree.Element(util.nspath_eval('ogc:BBOX', namespaces)) etree.SubElement(tmp, util.nspath_eval('ogc:PropertyName', namespaces)).text = 'ows:BoundingBox' tmp2 = etree.SubElement(tmp, util.nspath_eval('gml:Envelope', namespaces)) if self.crs is not None: tmp2.set('srsName', self.crs) etree.SubElement(tmp2, util.nspath_eval('gml:lowerCorner', namespaces)).text = '%s %s' % (self.bbox[0], self.bbox[1]) etree.SubElement(tmp2, util.nspath_eval('gml:upperCorner', namespaces)).text = '%s %s' % (self.bbox[2], self.bbox[3]) return tmp
def __init__(self, md): val = md.find(util.nspath_eval('dif:Discipline_Name', namespaces)) self.name = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Subdiscipline', namespaces)) self.subdiscipline = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Detailed_Subdiscipline', namespaces)) self.detailed_subdiscipline = util.testXMLValue(val)
def __init__(self, md): val = md.find(util.nspath_eval('dif:Paleo_Start_Date', namespaces)) self.paleo_start_date = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Paleo_End_Date', namespaces)) self.paleo_end_date = util.testXMLValue(val) self.chronostratigraphic_unit = [] for el in md.findall(util.nspath_eval('dif:Chronostratigraphic_Unit', namespaces)): self.chronostratigraphic_unit.append(Chronostratigraphic_Unit(el))
def toXML(self): node0 = etree.Element(util.nspath_eval('ogc:PropertyIsLike', namespaces)) node0.set('wildCard', self.wildCard) node0.set('singleChar', self.singleChar) node0.set('escapeChar', self.escapeChar) if not self.matchCase: node0.set('matchCase', 'false') etree.SubElement(node0, util.nspath_eval('ogc:PropertyName', namespaces)).text = self.propertyname etree.SubElement(node0, util.nspath_eval('ogc:Literal', namespaces)).text = self.literal return node0
def __init__(self, md): self.content_type = [] for el in md.findall(util.nspath_eval('dif:URL_Content_Type', namespaces)): self.content_type.append(URL_Content_Type(el)) val = md.find(util.nspath_eval('dif:URL', namespaces)) self.url = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Description', namespaces)) self.description = util.testXMLValue(val)
def _parse_response(self, response): '''parse in-memory xml string from a file obj or _invoke ''' # parse result see if it's XML self._exml = etree.parse(StringIO.StringIO(response)) # it's XML. Attempt to decipher whether the XML response is CSW-ish """ valid_xpaths = [ util.nspath_eval('ows:ExceptionReport', namespaces), util.nspath_eval('csw:Capabilities', namespaces), util.nspath_eval('csw:DescribeRecordResponse', namespaces), util.nspath_eval('csw:GetDomainResponse', namespaces), util.nspath_eval('csw:GetRecordsResponse', namespaces), util.nspath_eval('csw:GetRecordByIdResponse', namespaces), util.nspath_eval('csw:HarvestResponse', namespaces), util.nspath_eval('csw:TransactionResponse', namespaces) ] if self._exml.getroot().tag not in valid_xpaths: raise RuntimeError('Document is XML, but not CSW-ish') # check if it's an OGC Exception val = self._exml.find(util.nspath_eval('ows:Exception', namespaces)) if val is not None: raise ows.ExceptionReport(self._exml, self.owscommon.namespace) else: self.exceptionreport = None
def _parsetransactionsummary(self): val = self._exml.find(util.nspath_eval('csw:TransactionSummary', namespaces)) if val is not None: rid = val.attrib.get('requestId') self.results['requestid'] = util.testXMLValue(rid, True) ts = val.find(util.nspath_eval('csw:totalInserted', namespaces)) self.results['inserted'] = int(util.testXMLValue(ts)) ts = val.find(util.nspath_eval('csw:totalUpdated', namespaces)) self.results['updated'] = int(util.testXMLValue(ts)) ts = val.find(util.nspath_eval('csw:totalDeleted', namespaces)) self.results['deleted'] = int(util.testXMLValue(ts))
def __init__(self, md): val = md.find(util.nspath_eval('dif:Data_Center_Name', namespaces)) self.name = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Data_Center_URL', namespaces)) self.url = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Data_Set_ID', namespaces)) self.data_set_id = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Personnel', namespaces)) self.personnel = util.testXMLValue(val)
def __init__(self, md): val = md.find(util.nspath_eval('dif:Distribution_Media', namespaces)) self.media = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Distribution_Size', namespaces)) self.size = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Distribution_Format', namespaces)) self.format = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Fees', namespaces)) self.fees = util.testXMLValue(val)
def __init__(self, md=None): if md is None: self.is_extent = None self.polygons = [] else: val = md.find(util.nspath_eval('gmd:extentTypeCode', namespaces)) self.is_extent = util.testXMLValue(val) md_polygons = md.findall(util.nspath_eval('gmd:polygon', namespaces)) self.polygons = [] for val in md_polygons: self.polygons.append(EX_Polygon(val))
def __init__(self, md=None): if md is None: self.is_extent = None self.polygons = [] else: val = md.find(util.nspath_eval('gmd:extentTypeCode', namespaces)) self.is_extent = util.testXMLValue(val) md_polygons = md.findall( util.nspath_eval('gmd:polygon', namespaces)) self.polygons = [] for val in md_polygons: self.polygons.append(EX_Polygon(val))
def __init__(self, md=None): if md is None: self.contact = None self.online = [] else: self.contact = None val = md.find(util.nspath_eval('gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty', namespaces)) if val is not None: self.contact = CI_ResponsibleParty(val) self.online = [] for ol in md.findall(util.nspath_eval('gmd:MD_Distributor/gmd:distributorTransferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource', namespaces)): self.online.append(CI_OnlineResource(ol))
def __init__(self, md): self.role = [] for el in md.findall(util.nspath_eval('dif:Role', namespaces)): self.role.append(util.testXMLValue(el)) val = md.find(util.nspath_eval('dif:First_Name', namespaces)) self.first_name = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Middle_Name', namespaces)) self.middle_name = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Last_Name', namespaces)) self.last_name = util.testXMLValue(val) self.email = [] for el in md.findall(util.nspath_eval('dif:Email', namespaces)): self.email.append(util.testXMLValue(el)) self.phone = [] for el in md.findall(util.nspath_eval('dif:Phone', namespaces)): self.phone.append(util.testXMLValue(el)) self.fax = [] for el in md.findall(util.nspath_eval('dif:Fax', namespaces)): self.fax.append(util.testXMLValue(el)) val = md.find(util.nspath_eval('dif:Contact_Address', namespaces)) self.contact_address = Contact_Address(val)
def __init__(self, md=None): if md is None: self.exterior_ring = None self.interior_rings = [] else: linear_ring = md.find(util.nspath_eval('gml32:Polygon/gml32:exterior/gml32:LinearRing', namespaces)) if linear_ring is not None: self.exterior_ring = self._coordinates_for_ring(linear_ring) interior_ring_elements = md.findall(util.nspath_eval('gml32:Polygon/gml32:interior', namespaces)) self.interior_rings = [] for iring_element in interior_ring_elements: linear_ring = iring_element.find(util.nspath_eval('gml32:LinearRing', namespaces)) self.interior_rings.append(self._coordinates_for_ring(linear_ring))
def _setconstraint(self, parent, qtype=None, propertyname='csw:AnyText', keywords=[], bbox=None, cql=None, identifier=None): if keywords or bbox is not None or qtype is not None or cql is not None or identifier is not None: node0 = etree.SubElement(parent, util.nspath_eval('csw:Constraint', namespaces)) node0.set('version', '1.1.0') if identifier is not None: # set identifier filter, overrides all other parameters flt = fes.FilterRequest() node0.append(flt.set(identifier=identifier)) elif cql is not None: # send raw CQL query # CQL passed, overrides all other parameters node1 = etree.SubElement(node0, util.nspath_eval('csw:CqlText', namespaces)) node1.text = cql else: # construct a Filter request flt = fes.FilterRequest() node0.append(flt.set(qtype=qtype, keywords=keywords, propertyname=propertyname,bbox=bbox))
def __init__(self, elem): # Spatial_Capabilities self.spatial_operands = [f.text for f in elem.findall(util.nspath_eval('ogc:Spatial_Capabilities/ogc:GeometryOperands/ogc:GeometryOperand', namespaces))] self.spatial_operators = [] for f in elem.findall(util.nspath_eval('ogc:Spatial_Capabilities/ogc:SpatialOperators/ogc:SpatialOperator', namespaces)): self.spatial_operators.append(f.attrib['name']) # Temporal_Capabilities self.temporal_operands = [f.text for f in elem.findall(util.nspath_eval('ogc:Temporal_Capabilities/ogc:TemporalOperands/ogc:TemporalOperand', namespaces))] self.temporal_operators = [] for f in elem.findall(util.nspath_eval('ogc:Temporal_Capabilities/ogc:TemporalOperators/ogc:TemporalOperator', namespaces)): self.temporal_operators.append(f.attrib['name']) # Scalar_Capabilities self.scalar_comparison_operators = [f.text for f in elem.findall(util.nspath_eval('ogc:Scalar_Capabilities/ogc:ComparisonOperators/ogc:ComparisonOperator', namespaces))]
def __init__(self, md=None): if md is None: self.minx = None self.maxx = None self.miny = None self.maxy = None else: val = md.find(util.nspath_eval('gmd:westBoundLongitude/gco:Decimal', namespaces)) self.minx = util.testXMLValue(val) val = md.find(util.nspath_eval('gmd:eastBoundLongitude/gco:Decimal', namespaces)) self.maxx = util.testXMLValue(val) val = md.find(util.nspath_eval('gmd:southBoundLatitude/gco:Decimal', namespaces)) self.miny = util.testXMLValue(val) val = md.find(util.nspath_eval('gmd:northBoundLatitude/gco:Decimal', namespaces)) self.maxy = util.testXMLValue(val)
def __init__(self, md): self.address = [] for el in md.findall(util.nspath_eval('dif:Address', namespaces)): self.address.append(util.testXMLValue(el)) val = md.find(util.nspath_eval('dif:City', namespaces)) self.city = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Province_or_State', namespaces)) self.province_or_state = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Postal_Code', namespaces)) self.postal_code = util.testXMLValue(val) val = md.find(util.nspath_eval('dif:Country', namespaces)) self.country = util.testXMLValue(val)
def __init__(self, url, version='1.0.0', xml=None, username=None, password=None): """Initialize.""" self.url = url self.username = username self.password = password self.version = version self._capabilities = None # Authentication handled by Reader reader = SosCapabilitiesReader(version=self.version, url=self.url, username=self.username, password=self.password) if xml: # read from stored xml self._capabilities = reader.read_string(xml) else: # read from server self._capabilities = reader.read(self.url) # Avoid building metadata if the response is an Exception if self._capabilities.tag == nspath_eval("ows:ExceptionReport", namespaces): raise ows.ExceptionReport(self._capabilities) # build metadata objects self._build_metadata()
def _buildMetadata(self, parse_remote_metadata=False): '''set up capabilities metadata objects: ''' # ServiceIdentification val = self._capabilities.find(util.nspath_eval('ows:ServiceIdentification', namespaces)) self.identification = ServiceIdentification(val, self.owscommon.namespace) # ServiceProvider val = self._capabilities.find(util.nspath_eval('ows:ServiceProvider', namespaces)) self.provider = ServiceProvider(val, self.owscommon.namespace) # ServiceOperations metadata self.operations = [] for elem in self._capabilities.findall(util.nspath_eval( 'ows:OperationsMetadata/ows:Operation', namespaces) ): self.operations.append(OperationsMetadata(elem, self.owscommon.namespace)) # FilterCapabilities val = self._capabilities.find(util.nspath_eval('ogc:Filter_Capabilities', namespaces)) self.filters = FilterCapabilities(val) # serviceContents metadata: our assumption is that services use a top-level # layer as a metadata organizer, nothing more. self.contents = {} features = self._capabilities.findall( nspath_eval('wfs:FeatureTypeList/wfs:FeatureType', namespaces) ) for feature in features: cm = ContentMetadata(feature, parse_remote_metadata) self.contents[cm.id] = cm # exceptions self.exceptions = [f.text for f in self._capabilities.findall('Capability/Exception/Format')]
def __init__(self, parent=None, version='1.1.0'): """ filter Constructor Parameters ---------- - parent: parent etree.Element object (default is None) - version: version (default is '1.1.0') """ self.version = version self._root = etree.Element(util.nspath_eval('ogc:Filter', namespaces)) if parent is not None: self._root.set(util.nspath_eval('xsi:schemaLocation', namespaces), schema_location)
def __init__(self, md=None): if md is None: self.date = None self.type = None else: val = md.find(util.nspath_eval('gmd:date/gco:Date', namespaces)) if val is not None: self.date = util.testXMLValue(val) else: val = md.find(util.nspath_eval('gmd:date/gco:DateTime', namespaces)) if val is not None: self.date = util.testXMLValue(val) else: self.date = None val = md.find(util.nspath_eval('gmd:dateType/gmd:CI_DateTypeCode', namespaces)) self.type = _testCodeListValue(val)
def _coordinates_for_ring(self, linear_ring): coordinates = [] positions = linear_ring.findall(util.nspath_eval('gml32:pos', namespaces)) for pos in positions: tokens = pos.text.split() coords = tuple([float(t) for t in tokens]) coordinates.append(coords) return coordinates
def get_observation(self, responseFormat=None, offerings=None, observedProperties=None, eventTime=None, method='Get', **kwargs): """ Parameters ---------- format : string Output format. Provide one that is available for all offerings method : string Optional. HTTP DCP method name: Get or Post. Must **kwargs : extra arguments anything else e.g. vendor specific parameters """ base_url = self.get_operation_by_name('GetObservation').methods[method]['url'] request = {'service': 'SOS', 'version': self.version, 'request': 'GetObservation'} # Required Fields assert isinstance(offerings, list) and len(offerings) > 0 request['offering'] = ','.join(offerings) assert isinstance(observedProperties, list) and len(observedProperties) > 0 request['observedProperty'] = ','.join(observedProperties) if responseFormat is not None: request['responseFormat'] = responseFormat # Optional Fields if eventTime is not None: request['temporalFilter'] = eventTime url_kwargs = {} if 'timeout' in kwargs: url_kwargs['timeout'] = kwargs.pop('timeout') # Client specified timeout value if kwargs: for kw in kwargs: request[kw] = kwargs[kw] data = urlencode(request) response = openURL( base_url, data, method, username=self.username, password=self.password, **url_kwargs ).read() try: tr = etree.fromstring(response) if tr.tag == nspath_eval("ows:ExceptionReport", namespaces): raise ows.ExceptionReport(tr) else: return response except ows.ExceptionReport: raise except BaseException: return response
def __init__(self, md): if md is None: pass else: val = md.find( util.nspath_eval( 'gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString', namespaces)) self.code = util.testXMLValue(val)
def _coordinates_for_ring(self, linear_ring): coordinates = [] positions = linear_ring.findall( util.nspath_eval('gml32:pos', namespaces)) for pos in positions: tokens = pos.text.split() coords = tuple([float(t) for t in tokens]) coordinates.append(coords) return coordinates
def setsortby(parent, propertyname, order='ASC'): """ constructs a SortBy element Parameters ---------- - parent: parent etree.Element object - propertyname: the PropertyName - order: the SortOrder (default is 'ASC') """ tmp = etree.SubElement(parent, util.nspath_eval('ogc:SortBy', namespaces)) tmp2 = etree.SubElement(tmp, util.nspath_eval('ogc:SortProperty', namespaces)) etree.SubElement(tmp2, util.nspath_eval('ogc:PropertyName', namespaces)).text = propertyname etree.SubElement(tmp2, util.nspath_eval('ogc:SortOrder', namespaces)).text = order
def __init__(self, md=None): if md is None: self.contact = None self.online = [] else: self.contact = None val = md.find( util.nspath_eval( 'gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty', namespaces)) if val is not None: self.contact = CI_ResponsibleParty(val) self.online = [] for ol in md.findall( util.nspath_eval( 'gmd:MD_Distributor/gmd:distributorTransferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource', namespaces)): self.online.append(CI_OnlineResource(ol))
def __init__(self, md=None): if md is None: self.exterior_ring = None self.interior_rings = [] else: linear_ring = md.find( util.nspath_eval( 'gml32:Polygon/gml32:exterior/gml32:LinearRing', namespaces)) if linear_ring is not None: self.exterior_ring = self._coordinates_for_ring(linear_ring) interior_ring_elements = md.findall( util.nspath_eval('gml32:Polygon/gml32:interior', namespaces)) self.interior_rings = [] for iring_element in interior_ring_elements: linear_ring = iring_element.find( util.nspath_eval('gml32:LinearRing', namespaces)) self.interior_rings.append( self._coordinates_for_ring(linear_ring))
def __init__(self, md=None): if md is None: self.boundingBox = None self.boundingPolygon = None self.description_code = None else: self.boundingBox = None self.boundingPolygon = None if md is not None: bboxElement = md.find(util.nspath_eval('gmd:EX_GeographicBoundingBox', namespaces)) if bboxElement is not None: self.boundingBox = EX_GeographicBoundingBox(bboxElement) polygonElement = md.find(util.nspath_eval('gmd:EX_BoundingPolygon', namespaces)) if polygonElement is not None: self.boundingPolygon = EX_GeographicBoundingPolygon(polygonElement) val = md.find(util.nspath_eval('gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:MD_Identifier/gmd:code/gco:CharacterString', namespaces)) self.description_code = util.testXMLValue(val)
def __init__(self, md=None): if md is None: self.date = None self.type = None else: val = md.find(util.nspath_eval('gmd:date/gco:Date', namespaces)) if val is not None: self.date = util.testXMLValue(val) else: val = md.find( util.nspath_eval('gmd:date/gco:DateTime', namespaces)) if val is not None: self.date = util.testXMLValue(val) else: self.date = None val = md.find( util.nspath_eval('gmd:dateType/gmd:CI_DateTypeCode', namespaces)) self.type = _testCodeListValue(val)
def getdomain(self, dname, dtype='parameter'): """ Construct and process a GetDomain request Parameters ---------- - dname: the value of the Parameter or Property to query - dtype: whether to query a parameter (parameter) or property (property) """ # construct request dtypename = 'ParameterName' node0 = self._setrootelement('csw:GetDomain') node0.set('service', self.service) node0.set('version', self.version) node0.set(util.nspath_eval('xsi:schemaLocation', namespaces), schema_location) if dtype == 'property': dtypename = 'PropertyName' etree.SubElement(node0, util.nspath_eval('csw:%s' % dtypename, namespaces)).text = dname self.request = node0 self._invoke() if self.exceptionreport is None: self.results = {} val = self._exml.find(util.nspath_eval('csw:DomainValues', namespaces)).attrib.get('type') self.results['type'] = util.testXMLValue(val, True) val = self._exml.find(util.nspath_eval('csw:DomainValues/csw:%s' % dtypename, namespaces)) self.results[dtype] = util.testXMLValue(val) # get the list of values associated with the Domain self.results['values'] = [] for f in self._exml.findall(util.nspath_eval('csw:DomainValues/csw:ListOfValues/csw:Value', namespaces)): self.results['values'].append(util.testXMLValue(f))
def __init__(self,md=None): if md is None: self.url = None self.protocol = None self.name = None self.description = None self.function = None else: val = md.find(util.nspath_eval('gmd:linkage/gmd:URL', namespaces)) self.url = util.testXMLValue(val) val = md.find(util.nspath_eval('gmd:protocol/gco:CharacterString', namespaces)) self.protocol = util.testXMLValue(val) val = md.find(util.nspath_eval('gmd:name/gco:CharacterString', namespaces)) self.name = util.testXMLValue(val) val = md.find(util.nspath_eval('gmd:description/gco:CharacterString', namespaces)) self.description = util.testXMLValue(val) self.function = _testCodeListValue(md.find(util.nspath_eval('gmd:function/gmd:CI_OnLineFunctionCode', namespaces)))