Skip to content

Commit a59dd32

Browse files
[Fixes #13010] Add describe layer to the WMS harvester
1 parent 60bc0d6 commit a59dd32

File tree

1 file changed

+22
-7
lines changed
  • geonode/harvesting/harvesters

1 file changed

+22
-7
lines changed

geonode/harvesting/harvesters/wms.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,22 +184,29 @@ def get_ogc_wms_url(self, wms_url, version=None):
184184
logger.exception(e)
185185
return ogc_wms_url
186186

187-
def get_capabilities(self) -> requests.Response:
187+
def wms_call(self, kind="GetCapabilities", override_version=None, additional_params={}) -> requests.Response:
188188
params = self._base_wms_parameters.copy()
189189
params.update(
190190
{
191-
"request": "GetCapabilities",
191+
"request": kind,
192192
}
193193
)
194194
(wms_url, _service, _version, _request) = self._get_cleaned_url_params(self.remote_url)
195195
if _service:
196196
params["service"] = _service
197-
if _version:
198-
params["version"] = _version
197+
if override_version or _version:
198+
params["version"] = override_version or _version
199199
if wms_url.query:
200200
for _param in parse_qsl(wms_url.query):
201201
params[_param[0]] = _param[1]
202-
202+
# updating default params with custom ones
203+
params = {**params, **additional_params}
204+
205+
# adding basic auth if required
206+
harvester = models.Harvester.objects.get(pk=self.harvester_id).first()
207+
if harvester and harvester._service:
208+
_service = harvester._service
209+
203210
get_capabilities_response = self.http_session.get(
204211
self.get_ogc_wms_url(wms_url, version=_version), params=params
205212
)
@@ -237,7 +244,7 @@ def list_resources(self, offset: typing.Optional[int] = 0) -> typing.List[base.B
237244

238245
def check_availability(self, timeout_seconds: typing.Optional[int] = 5) -> bool:
239246
try:
240-
response = self.get_capabilities()
247+
response = self.wms_call()
241248
except (requests.HTTPError, requests.ConnectionError):
242249
result = False
243250
else:
@@ -326,7 +333,7 @@ def get_resource(
326333

327334
def _get_data(self) -> typing.Dict:
328335
"""Return data from the harvester URL in JSON format."""
329-
get_capabilities_response = self.get_capabilities()
336+
get_capabilities_response = self.wms_call()
330337
root = etree.fromstring(get_capabilities_response.content, parser=XML_PARSER)
331338
nsmap = _get_nsmap(root.nsmap)
332339

@@ -532,6 +539,14 @@ def finalize_resource_update(
532539
forced_crs=target_crs,
533540
overwrite=True,
534541
)
542+
# ref GeoNode #13010
543+
# A describeLayer is perfomed to see if we can add the WDS link
544+
# to the resource
545+
response = self.wms_call(
546+
kind="DescribeLayer",
547+
override_version="1.1.1",
548+
additional_params={"layers": geonode_resource.alternate}
549+
)
535550

536551

537552
def _get_nsmap(original: typing.Dict):

0 commit comments

Comments
 (0)