Skip to content

Commit

Permalink
fix: #804, issue with WFS filter passed as string
Browse files Browse the repository at this point in the history
  • Loading branch information
huard committed Jan 12, 2023
1 parent 6e1eca9 commit a70c46c
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
5 changes: 5 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Changes
=======

0.27.2 (unreleased)
-------------------

- WFS: Fix set_filter for string inputs (#804)

0.27.1 (2022-08-28)
-------------------

Expand Down
4 changes: 3 additions & 1 deletion owslib/feature/postrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,9 @@ def set_filter(self, filter):
"""
if isinstance(filter, str):
f = etree.fromstring(filter)
sub_elem = f.find(util.nspath("Filter", FES_NAMESPACE))
# If this raises an error, it means the filter string does not contain an actual Filter node.
sub_elem = f.xpath("//FES:Filter", namespaces={"FES": FES_NAMESPACE})[0]

else:
sub_elem = filter

Expand Down
24 changes: 24 additions & 0 deletions tests/test_wfs_postrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,16 @@
</wfs:GetFeature>
"""

raw_2_0_filter = """
<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:erl="http://xmlns.earthresourceml.org/earthresourceml-lite/1.0">
<fes:PropertyIsEqualTo>
<fes:ValueReference>reference</fes:ValueReference>
<fes:Literal>gold</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
"""

typename = "ns:typename"


Expand Down Expand Up @@ -272,3 +282,17 @@ def test_filter_query(self, requestv200):
assert equal_elem is not None
assert propertyname == "status"
assert literal == "rejected"

def test_filter_root_query(self, requestv200):
"""Same as test_filter_query, but the filter is the root element."""
requestv200.set_filter(raw_2_0_filter)

filter_elem = requestv200._query.find(util.nspath("Filter", FES_NAMESPACE))
equal_elem = filter_elem.find(util.nspath("PropertyIsEqualTo", FES_NAMESPACE))
propertyname = equal_elem.findtext(util.nspath("ValueReference", FES_NAMESPACE))
literal = equal_elem.findtext(util.nspath("Literal", FES_NAMESPACE))

assert filter_elem is not None
assert equal_elem is not None
assert propertyname == "reference"
assert literal == "gold"

0 comments on commit a70c46c

Please sign in to comment.