@@ -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
537552def _get_nsmap (original : typing .Dict ):
0 commit comments