Skip to content

Commit b9cd08b

Browse files
authored
WFS 2.0 URL building (#612)
1 parent f620405 commit b9cd08b

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

owslib/feature/__init__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from urllib.parse import urlencode
1111
from owslib.crs import Crs
12-
from owslib.util import Authentication
12+
from owslib.util import Authentication, build_get_url
1313
from owslib.feature.schema import get_schema
1414
from owslib.feature.postrequest import PostRequest_1_1_0, PostRequest_2_0_0
1515

@@ -209,7 +209,6 @@ def getGETGetFeatureRequest(
209209
if m.get("type").lower() == method.lower()
210210
)
211211
)
212-
base_url = base_url if base_url.endswith("?") else base_url + "?"
213212

214213
request = {"service": "WFS", "version": self.version, "request": "GetFeature"}
215214

@@ -248,9 +247,7 @@ def getGETGetFeatureRequest(
248247
if outputFormat is not None:
249248
request["outputFormat"] = outputFormat
250249

251-
data = urlencode(request, doseq=True)
252-
253-
return base_url + data
250+
return build_get_url(base_url, request)
254251

255252
def getPOSTGetFeatureRequest(
256253
self,

owslib/util.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ def getNamespace(element):
566566
return ""
567567

568568

569-
def build_get_url(base_url, params, overwrite=False):
569+
def build_get_url(base_url, params, overwrite=False, doseq=False):
570570
''' Utility function to build a full HTTP GET URL from the service base URL and a dictionary of HTTP parameters.
571571
572572
TODO: handle parameters case-insensitive?
@@ -598,7 +598,7 @@ def build_get_url(base_url, params, overwrite=False):
598598
if key not in pars:
599599
qs.append((key, value))
600600

601-
urlqs = urlencode(tuple(qs))
601+
urlqs = urlencode(tuple(qs), doseq=doseq)
602602
return base_url.split('?')[0] + '?' + urlqs
603603

604604

tests/test_util.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def test_clean_ows_url():
2828
def test_build_get_url():
2929
assert build_get_url("http://example.org/wps", {'service': 'WPS'}) == 'http://example.org/wps?service=WPS'
3030
assert build_get_url("http://example.org/wms", {'SERVICE': 'wms'}) == 'http://example.org/wms?SERVICE=wms'
31+
assert build_get_url("http://example.org/wms?map=/path/to/foo.map&", {'SERVICE': 'wms'}) == 'http://example.org/wms?map=%2Fpath%2Fto%2Ffoo.map&SERVICE=wms'
3132
assert build_get_url("http://example.org/wps?service=WPS", {'request': 'GetCapabilities'}) == \
3233
'http://example.org/wps?service=WPS&request=GetCapabilities'
3334
assert build_get_url("http://example.org/wps?service=WPS", {'request': 'GetCapabilities'}) == \
@@ -38,6 +39,12 @@ def test_build_get_url():
3839
# Parameter is case-senstive
3940
assert build_get_url("http://example.org/ows?SERVICE=WPS", {'service': 'WMS'}) == \
4041
'http://example.org/ows?SERVICE=WPS&service=WMS'
42+
# Test with trailing ampersand and doseq False (default)
43+
assert build_get_url("http://example.org/ows?SERVICE=WFS&", {'typename': 'test', 'keys': [1,2]}, doseq=False) == \
44+
'http://example.org/ows?SERVICE=WFS&typename=test&keys=%5B1%2C+2%5D'
45+
# Test with trailing ampersand and doseq True
46+
assert build_get_url("http://example.org/ows?SERVICE=WFS&", {'typename': 'test', 'keys': [1,2]}, doseq=True) == \
47+
'http://example.org/ows?SERVICE=WFS&typename=test&keys=1&keys=2'
4148

4249

4350
def test_build_get_url_overwrite():

0 commit comments

Comments
 (0)