def test_wfs_build_getfeature_maxfeatures_string(self): """Test the owsutil.wfs_build_getfeature_request method with a an non-integer maxfeature value. Test whether an AttributeError is raised. """ with pytest.raises(AttributeError): owsutil.wfs_build_getfeature_request('dov-pub:Boringen', max_features="0")
def test_wfs_build_getfeature_maxfeatures_zero(self): """Test the owsutil.wfs_build_getfeature_request method with a a maxfeature value of 0. Test whether an AttributeError is raised. """ with pytest.raises(AttributeError): owsutil.wfs_build_getfeature_request('dov-pub:Boringen', max_features=0)
def test_wfs_build_getfeature_request_bbox_nogeometrycolumn(self): """Test the owsutil.wfs_build_getfeature_request method with a location argument but without the geometry_column argument. Test whether an AttributeError is raised. """ with pytest.raises(AttributeError): owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', location=Within(Box(151650, 214675, 151750, 214775)))
def test_wfs_build_getfeature_request_filter(self): """Test the owsutil.wfs_build_getfeature_request method with an attribute filter. Test whether the XML of the WFS GetFeature call is generated correctly. """ query = PropertyIsEqualTo(propertyname='gemeente', literal='Herstappe') filter_request = FilterRequest() filter_request = filter_request.setConstraint(query) try: filter_request = etree.tostring(filter_request, encoding='unicode') except LookupError: # Python2.7 without lxml uses 'utf-8' instead. filter_request = etree.tostring(filter_request, encoding='utf-8') xml = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', filter=filter_request) assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( '<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'service="WFS" version="1.1.0" ' 'xsi:schemaLocation="http://www.opengis.net/wfs ' 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> <wfs:Query ' 'typeName="dov-pub:Boringen"> <ogc:Filter> ' '<ogc:PropertyIsEqualTo> ' '<ogc:PropertyName>gemeente</ogc:PropertyName> ' '<ogc:Literal>Herstappe</ogc:Literal> </ogc:PropertyIsEqualTo> ' '</ogc:Filter> </wfs:Query> </wfs:GetFeature>')
def test_wfs_build_getfeature_request_bbox(self): """Test the owsutil.wfs_build_getfeature_request method with a typename, box and geometry_column. Test whether the XML of the WFS GetFeature call is generated correctly. """ xml = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', location=Within(Box(151650, 214675, 151750, 214775)), geometry_column='geom') assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( '<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'service="WFS" version="1.1.0" ' 'xsi:schemaLocation="http://www.opengis.net/wfs ' 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"><wfs:Query ' 'typeName="dov-pub:Boringen"><ogc:Filter ' 'xmlns:ogc="http://www.opengis.net/ogc"><ogc:Within> ' '<ogc:PropertyName>geom</ogc:PropertyName><gml:Envelope ' 'xmlns:gml="http://www.opengis.net/gml" srsDimension="2" ' 'srsName="http://www.opengis.net/gml/srs/epsg.xml#31370"><gml' ':lowerCorner>151650.000 ' '214675.000</gml:lowerCorner><gml:upperCorner>151750.000 ' '214775.000</gml:upperCorner></gml:Envelope></ogc:Within></ogc' ':Filter></wfs:Query></wfs:GetFeature>')
def test_wfs_build_getfeature_request_sortby(self): """Test the owsutil.wfs_build_getfeature_request method with a sortby. Test whether the XML of the WFS GetFeature call is generated correctly. """ sort_by = SortBy([SortProperty('diepte_tot_m', 'DESC')]) try: sort_by = etree.tostring(sort_by.toXML(), encoding='unicode') except LookupError: # Python2.7 without lxml uses 'utf-8' instead. sort_by = etree.tostring(sort_by.toXML(), encoding='utf-8') xml = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', propertyname=['fiche', 'diepte_tot_m'], sort_by=sort_by) assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( '<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'service="WFS" version="1.1.0" ' 'xsi:schemaLocation="http://www.opengis.net/wfs ' 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"><wfs:Query ' 'typeName="dov-pub:Boringen"><wfs:PropertyName>fiche</wfs' ':PropertyName><wfs:PropertyName>diepte_tot_m</wfs:PropertyName' '><ogc:Filter/><ogc:SortBy><ogc:SortProperty><ogc:PropertyName' '>diepte_tot_m</ogc:PropertyName><ogc:SortOrder>DESC</ogc' ':SortOrder></ogc:SortProperty></ogc:SortBy></wfs:Query></wfs' ':GetFeature>')
def test_wfs_build_getfeature_request_bbox_filter(self): """Test the owsutil.wfs_build_getfeature_request method with an attribute filter, a box and a geometry_column. Test whether the XML of the WFS GetFeature call is generated correctly. """ query = PropertyIsEqualTo(propertyname='gemeente', literal='Herstappe') filter_request = FilterRequest() filter_request = filter_request.setConstraint(query) filter_request = etree.tostring(filter_request, encoding='unicode') xml = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', filter=filter_request, location=Within(Box(151650, 214675, 151750, 214775)), geometry_column='geom') assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( '<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'service="WFS" version="1.1.0" ' 'xsi:schemaLocation="http://www.opengis.net/wfs ' 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> <wfs:Query ' 'typeName="dov-pub:Boringen"> <ogc:Filter> <ogc:And> ' '<ogc:PropertyIsEqualTo> ' '<ogc:PropertyName>gemeente</ogc:PropertyName> ' '<ogc:Literal>Herstappe</ogc:Literal> </ogc:PropertyIsEqualTo> ' '<ogc:Within> <ogc:PropertyName>geom</ogc:PropertyName> ' '<gml:Envelope xmlns:gml="http://www.opengis.net/gml" ' 'srsDimension="2" ' 'srsName="http://www.opengis.net/gml/srs/epsg.xml#31370"> ' '<gml:lowerCorner>151650.000000 214675.000000</gml:lowerCorner> ' '<gml:upperCorner>151750.000000 214775.000000</gml:upperCorner> ' '</gml:Envelope> </ogc:Within> </ogc:And> </ogc:Filter> ' '</wfs:Query> </wfs:GetFeature>')
def test_wfs_build_getfeature_request_propertyname_stable(self): """Test the owsutil.wfs_build_getfeature_request method with a list of propertynames. Test whether the XML of the WFS GetFeature that is being generated is stable (i.e. independent of the order of the propertynames). """ xml = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', propertyname=['fiche', 'diepte_tot_m']) xml2 = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', propertyname=['diepte_tot_m', 'fiche']) assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( etree.tostring(xml2).decode('utf8'))
def test_wfs_build_getfeature_maxfeatures(self): """Test the owsutil.wfs_build_getfeature_request method with a limited set of features defined. Test whether the XML of the WFS GetFeature call is generated correctly. """ xml = owsutil.wfs_build_getfeature_request('dov-pub:Boringen', max_features=3) assert "maxFeatures" in xml.attrib.keys() assert xml.attrib["maxFeatures"] == "3"
def _get_remote_wfs_feature(wfs, typename, location, filter, sort_by, propertyname, max_features, geometry_column): """Perform the WFS GetFeature call to get features from the remote service. Parameters ---------- typename : str Layername to query. location : pydov.util.location.AbstractLocationFilter Location filter limiting the features to retrieve. filter : str of owslib.fes.FilterRequest Filter request to search on attribute values. sort_by : str of owslib.fes.SortBy, optional List of properties to sort by. propertyname : list<str> List of properties to return. max_features : int Limit the maximum number of features to request. geometry_column : str Name of the geometry column to use in the spatial filter. Returns ------- wfs_response, wfs_getfeature_request : bytes, etree.Element Response of the WFS service. """ wfs_getfeature_xml = owsutil.wfs_build_getfeature_request( version=wfs.version, geometry_column=geometry_column, typename=typename, location=location, filter=filter, sort_by=sort_by, max_features=max_features, propertyname=propertyname) HookRunner.execute_wfs_search_init(typename) tree = HookRunner.execute_inject_wfs_getfeature_response( wfs_getfeature_xml) if tree is not None: return tree, wfs_getfeature_xml return owsutil.wfs_get_feature( baseurl=wfs.url, get_feature_request=wfs_getfeature_xml), wfs_getfeature_xml
def test_wfs_build_getfeature_request_onlytypename(self): """Test the owsutil.wfs_build_getfeature_request method with only a typename specified. Test whether the XML of the WFS GetFeature call is generated correctly. """ xml = owsutil.wfs_build_getfeature_request('dov-pub:Boringen') assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( '<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'service="WFS" version="1.1.0" ' 'xsi:schemaLocation="http://www.opengis.net/wfs ' 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"><wfs:Query ' 'typeName="dov-pub:Boringen"><ogc:Filter ' 'xmlns:ogc="http://www.opengis.net/ogc"/></wfs:Query></wfs' ':GetFeature>')
def test_wfs_build_getfeature_request_propertyname(self): """Test the owsutil.wfs_build_getfeature_request method with a list of propertynames. Test whether the XML of the WFS GetFeature call is generated correctly. """ xml = owsutil.wfs_build_getfeature_request( 'dov-pub:Boringen', propertyname=['fiche', 'diepte_tot_m']) assert clean_xml(etree.tostring(xml).decode('utf8')) == clean_xml( '<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'service="WFS" version="1.1.0" ' 'xsi:schemaLocation="http://www.opengis.net/wfs ' 'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> <wfs:Query ' 'typeName="dov-pub:Boringen"> ' '<wfs:PropertyName>fiche</wfs:PropertyName> ' '<wfs:PropertyName>diepte_tot_m</wfs:PropertyName> <ogc:Filter/> ' '</wfs:Query> </wfs:GetFeature>')
def _get_remote_wfs_feature(wfs, typename, location, filter, propertyname, geometry_column): """Perform the WFS GetFeature call to get features from the remote service. Parameters ---------- typename : str Layername to query. location : pydov.util.location.AbstractLocationFilter Location filter limiting the features to retrieve. filter : owslib.fes.FilterRequest Filter request to search on attribute values. propertyname : list<str> List of properties to return. geometry_column : str Name of the geometry column to use in the spatial filter. Returns ------- bytes Response of the WFS service. """ wfs_getfeature_xml = owsutil.wfs_build_getfeature_request( version=wfs.version, geometry_column=geometry_column, typename=typename, location=location, filter=filter, propertyname=propertyname) for hook in pydov.hooks: hook.wfs_search_init(typename) return owsutil.wfs_get_feature(baseurl=wfs.url, get_feature_request=wfs_getfeature_xml)