Skip to content

Commit 16acc25

Browse files
[Fixes #13010] Add describe layer to the WMS harvester
1 parent 65cc2ec commit 16acc25

File tree

1 file changed

+23
-8
lines changed
  • geonode/harvesting/harvesters

1 file changed

+23
-8
lines changed

geonode/harvesting/harvesters/wms.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
from django.template.defaultfilters import slugify
3535
from requests.auth import HTTPBasicAuth
3636
from geonode.layers.models import Dataset
37-
from geonode.base.models import ResourceBase
37+
from geonode.base.models import Link, ResourceBase
3838
from geonode.layers.enumerations import GXP_PTYPES
3939
from geonode.thumbs.thumbnails import create_thumbnail
4040

@@ -216,11 +216,11 @@ def wms_call(self, kind="GetCapabilities", override_version=None, additional_par
216216
service = has_basic_auth.first()
217217
basic_auth = HTTPBasicAuth(service.username, service.get_password())
218218

219-
get_capabilities_response = self.http_session.get(
219+
response = self.http_session.get(
220220
self.get_ogc_wms_url(wms_url, version=_version), params=params, auth=basic_auth
221221
)
222-
get_capabilities_response.raise_for_status()
223-
return get_capabilities_response
222+
response.raise_for_status()
223+
return response
224224

225225
def get_num_available_resources(self) -> int:
226226
data = self._get_data()
@@ -549,13 +549,28 @@ def finalize_resource_update(
549549
overwrite=True,
550550
)
551551
# ref GeoNode #13010
552-
# A describeLayer is perfomed to see if we can add the WDS link
552+
# A describeLayer is perfomed to see if we can add the WDS link
553553
# to the resource
554554
response = self.wms_call(
555-
kind="DescribeLayer",
556-
override_version="1.1.1",
557-
additional_params={"layers": geonode_resource.alternate}
555+
kind="DescribeLayer", override_version="1.1.1", additional_params={"layers": geonode_resource.alternate}
558556
)
557+
# check if the owsType is WFS
558+
if response:
559+
if (
560+
etree.fromstring(response.content, parser=XML_PARSER).find("LayerDescription").attrib.get("owsType")
561+
== "WFS"
562+
):
563+
Link.objects.get_or_create(
564+
resource=geonode_resource,
565+
url=geonode_resource.ows_url,
566+
name=f"OGC WFS: {geonode_resource.workspace} Service",
567+
defaults=dict(
568+
extension="html",
569+
url=geonode_resource.ows_url,
570+
mime="text/html",
571+
link_type="OGC:WFS",
572+
),
573+
)
559574

560575

561576
def _get_nsmap(original: typing.Dict):

0 commit comments

Comments
 (0)