Skip to content

Commit 666b818

Browse files
[Fixes #222] use default workspace instead of cascading (#225)
1 parent d67a99f commit 666b818

File tree

4 files changed

+46
-14
lines changed

4 files changed

+46
-14
lines changed

importer/handlers/common/raster.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from geonode.resource.enumerator import ExecutionRequestAction as exa
1616
from geonode.resource.manager import resource_manager
1717
from geonode.resource.models import ExecutionRequest
18-
from geonode.services.serviceprocessors.base import get_geoserver_cascading_workspace
1918
from importer.api.exception import ImportException
2019
from importer.celery_tasks import ErrorBaseTaskClass, import_orchestrator
2120
from importer.handlers.base import BaseHandler
@@ -281,7 +280,7 @@ def import_resource(self, files: dict, execution_id: str, **kwargs) -> str:
281280
skip_existing_layer=_exec.input_params.get("skip_existing_layer"),
282281
overwrite_existing_layer=should_be_overwritten,
283282
):
284-
workspace = get_geoserver_cascading_workspace(create=False)
283+
workspace = DataPublisher(None).workspace
285284
user_datasets = Dataset.objects.filter(
286285
owner=_exec.user, alternate=f"{workspace.name}:{layer_name}"
287286
)

importer/handlers/common/vector.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from dynamic_models.schema import ModelSchemaEditor
1717
from geonode.base.models import ResourceBase
1818
from geonode.resource.enumerator import ExecutionRequestAction as exa
19-
from geonode.services.serviceprocessors.base import get_geoserver_cascading_workspace
2019
from geonode.layers.models import Dataset
2120
from importer.celery_tasks import ErrorBaseTaskClass, create_dynamic_structure
2221
from importer.handlers.base import BaseHandler
@@ -401,7 +400,7 @@ def import_resource(self, files: dict, execution_id: str, **kwargs) -> str:
401400
return
402401

403402
def find_alternate_by_dataset(self, _exec_obj, layer_name, should_be_overwritten):
404-
workspace = get_geoserver_cascading_workspace(create=False)
403+
workspace = DataPublisher(None).workspace
405404
dataset_available = Dataset.objects.filter(
406405
alternate__iexact=f"{workspace.name}:{layer_name}"
407406
)
@@ -434,7 +433,7 @@ def setup_dynamic_model(
434433
"""
435434

436435
layer_name = self.fixup_name(layer.GetName())
437-
workspace = get_geoserver_cascading_workspace(create=False)
436+
workspace = DataPublisher(None).workspace
438437
user_datasets = Dataset.objects.filter(
439438
owner=username, alternate__iexact=f"{workspace.name}:{layer_name}"
440439
)

importer/handlers/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
from django.contrib.auth import get_user_model
44
from geonode.base.models import ResourceBase
55
from geonode.resource.models import ExecutionRequest
6-
from geonode.services.serviceprocessors.base import get_geoserver_cascading_workspace
76
import logging
87
from dynamic_models.schema import ModelSchemaEditor
98
from django.utils.module_loading import import_string
109
from uuid import UUID
1110

11+
from importer.publisher import DataPublisher
12+
1213
logger = logging.getLogger(__name__)
1314

1415

@@ -53,7 +54,7 @@ def should_be_imported(layer: str, user: get_user_model(), **kwargs) -> bool:
5354
- the publisher should republish the resource
5455
- geonode should update it
5556
"""
56-
workspace = get_geoserver_cascading_workspace(create=False)
57+
workspace = DataPublisher(None).workspace
5758
exists = ResourceBase.objects.filter(
5859
alternate=f"{workspace.name}:{layer}", owner=user
5960
).exists()

importer/publisher.py

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
from geonode import settings
66
from geonode.geoserver.helpers import create_geoserver_db_featurestore
7-
from geonode.services.serviceprocessors.base import get_geoserver_cascading_workspace
87
from geoserver.catalog import Catalog
98
from geonode.utils import OGC_Servers_Handler
109
from django.utils.module_loading import import_string
@@ -28,9 +27,10 @@ def __init__(self, handler_module_path) -> None:
2827
self.cat = Catalog(
2928
service_url=ogc_server_settings.rest, username=_user, password=_password
3029
)
31-
self.workspace = get_geoserver_cascading_workspace(create=True)
30+
self.workspace = self._get_default_workspace(create=True)
3231

33-
self.handler = import_string(handler_module_path)()
32+
if handler_module_path is not None:
33+
self.handler = import_string(handler_module_path)()
3434

3535
def extract_resource_to_publish(
3636
self, files: dict, action: str, layer_name, alternate=None, **kwargs
@@ -90,9 +90,19 @@ def delete_resource(self, resource_name):
9090
layer = self.get_resource(resource_name)
9191
if layer and layer.resource:
9292
self.cat.delete(layer.resource, purge="all", recurse=True)
93-
store = self.cat.get_store(resource_name.split(":")[-1], workspace=os.getenv("DEFAULT_WORKSPACE", os.getenv("CASCADE_WORKSPACE", "geonode")))
93+
store = self.cat.get_store(
94+
resource_name.split(":")[-1],
95+
workspace=os.getenv(
96+
"DEFAULT_WORKSPACE", os.getenv("CASCADE_WORKSPACE", "geonode")
97+
),
98+
)
9499
if not store:
95-
store = self.cat.get_store(resource_name, workspace=os.getenv("DEFAULT_WORKSPACE", os.getenv("CASCADE_WORKSPACE", "geonode")))
100+
store = self.cat.get_store(
101+
resource_name,
102+
workspace=os.getenv(
103+
"DEFAULT_WORKSPACE", os.getenv("CASCADE_WORKSPACE", "geonode")
104+
),
105+
)
96106
if store:
97107
self.cat.delete(store, purge="all", recurse=True)
98108

@@ -138,9 +148,32 @@ def sanity_checks(self, resources):
138148
"""
139149

140150
for _resource in resources:
141-
possible_layer_name = [_resource.get("name"), _resource.get("name").split(":")[-1], f"{self.workspace.name}:{_resource.get('name')}"]
142-
res = list(filter(None, (self.cat.get_resource(x, workspace=self.workspace) for x in possible_layer_name)))
151+
possible_layer_name = [
152+
_resource.get("name"),
153+
_resource.get("name").split(":")[-1],
154+
f"{self.workspace.name}:{_resource.get('name')}",
155+
]
156+
res = list(
157+
filter(
158+
None,
159+
(
160+
self.cat.get_resource(x, workspace=self.workspace)
161+
for x in possible_layer_name
162+
),
163+
)
164+
)
143165
if not res or (res and not res[0].projection):
144166
raise PublishResourceException(
145167
f"The SRID for the resource {_resource} is not correctly set, Please check Geoserver logs"
146168
)
169+
170+
def _get_default_workspace(self, create=True):
171+
"""Return the default geoserver workspace
172+
The workspace can be created it if needed.
173+
"""
174+
name = getattr(settings, "DEFAULT_WORKSPACE", "geonode")
175+
workspace = self.cat.get_workspace(name)
176+
if workspace is None and create:
177+
uri = f"http://www.geonode.org/{name}"
178+
workspace = self.cat.create_workspace(name, uri)
179+
return workspace

0 commit comments

Comments
 (0)