Skip to content

Commit

Permalink
[Fixes GeoNode#10070] Let the resource manager handle also raw sld (G…
Browse files Browse the repository at this point in the history
…eoNode#10071) (GeoNode#10095)

* [Fixes GeoNode#10070] Let the resource manager handle also raw sld

* [Fixes GeoNode#10070] Let the resource manager handle also raw sld

* [Fixes GeoNode#10070] Let the resource manager handle also raw sld

Co-authored-by: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com>
  • Loading branch information
2 people authored and ridoo committed Oct 26, 2022
1 parent 81d9153 commit 2a9d8b3
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 12 deletions.
15 changes: 5 additions & 10 deletions geonode/geoserver/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -407,17 +407,12 @@ def set_dataset_style(saved_dataset, title, sld, base_file=None):
except Exception as e:
logger.exception(e)
else:
style = gs_catalog.get_style(saved_dataset.name, workspace=saved_dataset.workspace) or \
gs_catalog.get_style(saved_dataset.name)
try:
if not style:
style = gs_catalog.create_style(
saved_dataset.name, sld,
overwrite=True, raw=True,
workspace=saved_dataset.workspace)
elif sld:
style.style_format = _extract_style_version_from_sld(sld)
style.update_body(sld)
_sld_format = _extract_style_version_from_sld(sld)
style = gs_catalog.create_style(
saved_dataset.name, sld,
overwrite=True, raw=True, style_format=_sld_format,
workspace=saved_dataset.workspace)
except Exception as e:
logger.exception(e)

Expand Down
9 changes: 8 additions & 1 deletion geonode/geoserver/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,19 @@ def geoserver_set_style(
if lock.acquire() is True:
log_lock.debug(f"geoserver_set_style: Acquired lock {lock_id} for {instance.name}")
try:
sld = open(base_file, "rb").read()
sld = None
if os.path.exists(base_file):
sld = open(base_file, "rb").read()
else:
sld = base_file
base_file = None

set_dataset_style(
instance,
instance.alternate,
sld,
base_file=base_file)

except Exception as e:
logger.exception(e)
finally:
Expand Down
39 changes: 38 additions & 1 deletion geonode/geoserver/tests/test_tasks.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from unittest.mock import create_autospec, patch

from geonode.base.populate_test_data import all_public, create_models, remove_models
from geonode.geoserver.tasks import geoserver_create_style
from geonode.geoserver.tasks import geoserver_create_style, geoserver_set_style
from geonode.geoserver.signals import geoserver_automatic_default_style_set
from geonode.layers.models import Dataset
from geonode.layers.populate_datasets_data import create_dataset_data
Expand Down Expand Up @@ -54,3 +54,40 @@ def test_geoserver_style_visual_mode_automatically_without_sld_file(self):
geoserver_automatic_default_style_set.connect(handler)
geoserver_create_style(dataset.id, dataset.name, sld_file=None, tempdir=None)
handler.assert_called_once_with(signal=geoserver_automatic_default_style_set, sender=dataset, instance=dataset)

@patch("geonode.geoserver.tasks.set_dataset_style")
def test_geoserver_set_style_with_real_file(self, mocked_set_dataset_style):
dataset = Dataset.objects.first()
sld_file = "geonode/base/fixtures/test_sld.sld"
geoserver_set_style(
instance_id=dataset.id,
base_file=sld_file
)
mocked_set_dataset_style.assert_called_once()

args_list = mocked_set_dataset_style.call_args_list[0].args
kwargs_list = mocked_set_dataset_style.call_args_list[0].kwargs
self.assertEqual(args_list[0].id, dataset.id)
self.assertEqual(args_list[1], dataset.alternate)
self.assertIsInstance(args_list[2], bytes)

self.assertDictEqual({"base_file": sld_file}, kwargs_list)

@patch("geonode.geoserver.tasks.set_dataset_style")
def test_geoserver_set_style_with_xml(self, mocked_set_dataset_style):
dataset = Dataset.objects.first()

with open("geonode/base/fixtures/test_sld.sld", 'r+') as _file:
geoserver_set_style(
instance_id=dataset.id,
base_file=_file.read()
)
mocked_set_dataset_style.assert_called_once()

args_list = mocked_set_dataset_style.call_args_list[0].args
kwargs_list = mocked_set_dataset_style.call_args_list[0].kwargs
self.assertEqual(args_list[0].id, dataset.id)
self.assertEqual(args_list[1], dataset.alternate)
self.assertIsInstance(args_list[2], str)

self.assertDictEqual({"base_file": None}, kwargs_list)

0 comments on commit 2a9d8b3

Please sign in to comment.