Skip to content

Commit

Permalink
[Fixes #4639] Switch library "gsconfig" to "geoserver-restoconfig"
Browse files Browse the repository at this point in the history
  • Loading branch information
afabiani committed Jul 15, 2019
1 parent d771ddb commit 92ed66c
Show file tree
Hide file tree
Showing 14 changed files with 65 additions and 51 deletions.
4 changes: 2 additions & 2 deletions geonode/geoserver/createlayer/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ def get_or_create_datastore(cat, workspace=None, charset="UTF-8"):
raise GeoNodeException(msg)

try:
ds = cat.get_store(dsname, workspace)
ds = cat.get_store(dsname, workspace=workspace)
except FailedRequestError:
ds = cat.create_datastore(dsname, workspace=workspace)

Expand All @@ -177,7 +177,7 @@ def get_or_create_datastore(cat, workspace=None, charset="UTF-8"):

# we need to reload the ds as gsconfig-1.0.6 apparently does not populate ds.type
# using create_datastore (TODO fix this in gsconfig)
ds = cat.get_store(dsname, workspace)
ds = cat.get_store(dsname, workspace=workspace)

return ds

Expand Down
36 changes: 19 additions & 17 deletions geonode/geoserver/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ def get_sld_for(gs_catalog, layer):
if gs_layer and gs_layer.resource and gs_layer.resource.resource_type == 'featureType':
res = gs_layer.resource
res.fetch()
ft = res.store.get_resources(res.name)
ft = res.store.get_resources(name=res.name)
ft.fetch()
for attr in ft.dom.find("attributes").getchildren():
attr_binding = attr.find("binding")
Expand Down Expand Up @@ -295,7 +295,7 @@ def fixup_style(cat, resource, style):
for lyr in layers:
if lyr.default_style.name in _style_templates:
logger.info("%s uses a default style, generating a new one", lyr)
name = _style_name(lyr)
name = _style_name(lyr.resource)
if style is None:
sld = get_sld_for(cat, lyr)
else:
Expand Down Expand Up @@ -389,9 +389,9 @@ def cascading_delete(cat, layer_name):
logger.debug(
'cascading delete was called on a layer where the workspace was not found')
return
resource = cat.get_resource(name, store=store, workspace=workspace)
resource = cat.get_resource(name=name, store=store, workspace=workspace)
else:
resource = cat.get_resource(layer_name)
resource = cat.get_resource(name=layer_name)
except EnvironmentError as e:
if e.errno == errno.ECONNREFUSED:
msg = ('Could not connect to geoserver at "%s"'
Expand Down Expand Up @@ -421,7 +421,7 @@ def cascading_delete(cat, layer_name):
pass
gs_styles = [x for x in cat.get_styles()]
if settings.DEFAULT_WORKSPACE:
gs_styles = gs_styles + [x for x in cat.get_styles(workspace=settings.DEFAULT_WORKSPACE)]
gs_styles = gs_styles + [x for x in cat.get_styles(workspaces=settings.DEFAULT_WORKSPACE)]
ws_styles = []
for s in styles:
if s is not None and s.name not in _default_style_names:
Expand Down Expand Up @@ -549,13 +549,13 @@ def gs_slurp(
if store is None:
resources = []
else:
resources = cat.get_resources(store=store)
resources = cat.get_resources(stores=[store])
else:
resources = cat.get_resources(workspace=workspace)
resources = cat.get_resources(workspaces=[workspace])

elif store is not None:
store = get_store(cat, store)
resources = cat.get_resources(store=store)
resources = cat.get_resources(stores=[store])
else:
resources = cat.get_resources()
if remove_deleted:
Expand Down Expand Up @@ -1245,7 +1245,7 @@ def create_geoserver_db_featurestore(
ds_exists = False
try:
if dsname:
ds = cat.get_store(dsname)
ds = cat.get_store(dsname, workspace=workspace)
else:
return None
if ds is None:
Expand Down Expand Up @@ -1288,7 +1288,10 @@ def create_geoserver_db_featurestore(
if ds_exists:
ds.save_method = "PUT"

logger.info('Updating target datastore % s' % dsname)
cat.save(ds)

logger.info('Reloading target datastore % s' % dsname)
ds = get_store(cat, dsname, workspace=workspace)
assert ds.enabled

Expand All @@ -1303,17 +1306,17 @@ def _create_featurestore(name, data, overwrite=False, charset="UTF-8", workspace
except BaseException as e:
logger.exception(e)
store = get_store(cat, name, workspace=workspace)
return store, cat.get_resource(name, store=store, workspace=workspace)
return store, cat.get_resource(name=name, store=store, workspace=workspace)


def _create_coveragestore(name, data, overwrite=False, charset="UTF-8", workspace=None):
cat = gs_catalog
try:
cat.create_coveragestore(name, data, overwrite=overwrite)
cat.create_coveragestore(name, path=data, overwrite=overwrite, upload_data=True)
except BaseException as e:
logger.exception(e)
store = get_store(cat, name, workspace=workspace)
return store, cat.get_resource(name, store=store, workspace=workspace)
return store, cat.get_resource(name=name, store=store, workspace=workspace)


def _create_db_featurestore(name, data, overwrite=False, charset="UTF-8", workspace=None):
Expand All @@ -1335,7 +1338,7 @@ def _create_db_featurestore(name, data, overwrite=False, charset="UTF-8", worksp
overwrite=overwrite,
workspace=workspace,
charset=charset)
resource = cat.get_resource(name, store=ds, workspace=workspace)
resource = cat.get_resource(name=name, store=ds, workspace=workspace)
assert resource is not None
return ds, resource
except Exception:
Expand All @@ -1350,7 +1353,6 @@ def _create_db_featurestore(name, data, overwrite=False, charset="UTF-8", worksp


def get_store(cat, name, workspace=None):

# Make sure workspace is a workspace object and not a string.
# If the workspace does not exist, continue as if no workspace had been defined.
if isinstance(workspace, basestring):
Expand Down Expand Up @@ -1780,7 +1782,7 @@ def set_time_info(layer, attribute, end_attribute, presentation,
raise ValueError('no such layer: %s' % layer.name)
resource = layer.resource if layer else None
if not resource:
resources = gs_catalog.get_resources(store=layer.name)
resources = gs_catalog.get_resources(stores=[layer.name])
if resources:
resource = resources[0]

Expand Down Expand Up @@ -1813,7 +1815,7 @@ def get_time_info(layer):
raise ValueError('no such layer: %s' % layer.name)
resource = layer.resource if layer else None
if not resource:
resources = gs_catalog.get_resources(store=layer.name)
resources = gs_catalog.get_resources(stores=[layer.name])
if resources:
resource = resources[0]

Expand Down Expand Up @@ -2133,7 +2135,7 @@ def set_time_dimension(cat, name, workspace, time_presentation, time_presentatio
layer = cat.get_layer(name)
resource = layer.resource if layer else None
if not resource:
resources = cat.get_resources(store=name) or cat.get_resources(store=name, workspace=workspace)
resources = cat.get_resources(stores=[name]) or cat.get_resources(stores=[name], workspaces=[workspace])
if resources:
resource = resources[0]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@

def is_gs_resource_valid(layer):
gs_resource = gs_catalog.get_resource(
layer.name,
store=layer.store,
workspace=layer.workspace)
name=layer.name,
store=layer.store,
workspace=layer.workspace)
if gs_resource:
return True
else:
Expand Down
18 changes: 11 additions & 7 deletions geonode/geoserver/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ def geoserver_delete(typename):
cascading_delete(gs_catalog, typename)


@on_ogc_backend(BACKEND_PACKAGE)
def geoserver_pre_delete(instance, sender, **kwargs):
"""Removes the layer from GeoServer
"""
Expand All @@ -69,6 +70,7 @@ def geoserver_pre_delete(instance, sender, **kwargs):
cascading_delete(gs_catalog, instance.alternate)


@on_ogc_backend(BACKEND_PACKAGE)
def geoserver_pre_save(*args, **kwargs):
# nothing to do here, processing is pushed to post-save
pass
Expand All @@ -88,7 +90,7 @@ def geoserver_post_save(instance, sender, created, **kwargs):
instance.set_dirty_state()

if instance.storeType != 'remoteStore' and created:
logger.info("... Creating Default Resource Linkks for Layer [%s]" % (instance.alternate))
logger.info("... Creating Default Resource Links for Layer [%s]" % (instance.alternate))
set_resource_default_links(instance, sender, prune=True)
logger.info("... Creating Thumbnail for Layer [%s]" % (instance.alternate))
try:
Expand All @@ -97,6 +99,7 @@ def geoserver_post_save(instance, sender, created, **kwargs):
logger.warn("Failure Creating Thumbnail for Layer [%s]" % (instance.alternate))


@on_ogc_backend(BACKEND_PACKAGE)
def geoserver_post_save_local(instance, *args, **kwargs):
"""Send information to geoserver.
Expand Down Expand Up @@ -139,13 +142,12 @@ def geoserver_post_save_local(instance, *args, **kwargs):
# keywords=instance.keywords,
charset=instance.charset)

gs_resource = gs_catalog.get_resource(
name=instance.name,
store=instance.store,
workspace=instance.workspace)
if not gs_resource:
gs_resource = gs_catalog.get_resource(
instance.name,
store=instance.store,
workspace=instance.workspace)
if not gs_resource:
gs_resource = gs_catalog.get_resource(instance.alternate)
gs_resource = gs_catalog.get_resource(name=instance.alternate)

if gs_resource:
gs_resource.title = instance.title or ""
Expand Down Expand Up @@ -351,6 +353,7 @@ def geoserver_post_save_local(instance, *args, **kwargs):
call_command('update_index')


@on_ogc_backend(BACKEND_PACKAGE)
def geoserver_pre_save_maplayer(instance, sender, **kwargs):
# If this object was saved via fixtures,
# do not do post processing.
Expand All @@ -370,6 +373,7 @@ def geoserver_pre_save_maplayer(instance, sender, **kwargs):
raise e


@on_ogc_backend(BACKEND_PACKAGE)
def geoserver_post_save_map(instance, sender, created, **kwargs):
instance.set_missing_info()
if not created:
Expand Down
10 changes: 7 additions & 3 deletions geonode/geoserver/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,10 @@ def geoserver_upload(
# Verify the resource was created
if not gs_resource:
gs_resource = gs_catalog.get_resource(
name,
name=name,
workspace=workspace)
if not gs_resource:
gs_resource = gs_catalog.get_resource(name)
gs_resource = gs_catalog.get_resource(name=name)
if gs_resource is not None:
assert gs_resource.name == name
else:
Expand Down Expand Up @@ -221,7 +221,11 @@ def geoserver_upload(
style = None
if sld is not None:
try:
style = cat.get_style(name, workspace=settings.DEFAULT_WORKSPACE) or cat.get_style(name)
style = cat.get_style(name, workspace=settings.DEFAULT_WORKSPACE)
except geoserver.catalog.FailedRequestError:
style = cat.get_style(name)

try:
overwrite = style or False
cat.create_style(name, sld, overwrite=overwrite, raw=True, workspace=settings.DEFAULT_WORKSPACE)
except geoserver.catalog.ConflictingDataError as e:
Expand Down
2 changes: 1 addition & 1 deletion geonode/local_settings.py.geoserver.sample
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ LOGGING = {
"handlers": ["console"], "level": "INFO", },
"geonode.qgis_server": {
"handlers": ["console"], "level": "ERROR", },
"gsconfig.catalog": {
"geoserver-restconfig.catalog": {
"handlers": ["console"], "level": "ERROR", },
"owslib": {
"handlers": ["console"], "level": "ERROR", },
Expand Down
2 changes: 1 addition & 1 deletion geonode/security/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1268,7 +1268,7 @@ def test_save_and_delete_signals(self):
set_layer_style(test_perm_layer, test_perm_layer.alternate, sld)

fixup_style(gs_catalog, test_perm_layer.alternate, None)
self.assertIsNone(get_sld_for(gs_catalog, test_perm_layer))
self.assertIsNotNone(get_sld_for(gs_catalog, test_perm_layer))
_log("3. ------------ %s " % get_sld_for(gs_catalog, test_perm_layer))

create_gs_thumbnail(test_perm_layer, overwrite=True)
Expand Down
5 changes: 4 additions & 1 deletion geonode/services/serviceprocessors/wms.py
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,10 @@ def _import_cascaded_resource(self, layer_meta):
store = self._get_store(create=False)
cat = store.catalog
workspace = store.workspace
layer_resource = cat.get_resource(layer_meta.id, store, workspace)
layer_resource = cat.get_resource(
name=layer_meta.id,
store=store,
workspace=workspace)
if layer_resource is None:
layer_resource = cat.create_wmslayer(
workspace, store, layer_meta.id)
Expand Down
2 changes: 1 addition & 1 deletion geonode/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@
"handlers": ["console"], "level": "INFO", },
"geonode.qgis_server": {
"handlers": ["console"], "level": "ERROR", },
"gsconfig.catalog": {
"geoserver-restconfig.catalog": {
"handlers": ["console"], "level": "ERROR", },
"owslib": {
"handlers": ["console"], "level": "ERROR", },
Expand Down
15 changes: 7 additions & 8 deletions geonode/tests/integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@

from geonode.qgis_server.models import QGISServerLayer

from geoserver.catalog import FailedRequestError

# from geonode.security.models import *
from geonode.decorators import on_ogc_backend
from geonode.base.models import TopicCategory, Link
Expand Down Expand Up @@ -761,11 +759,11 @@ def test_layer_delete_from_geoserver(self):
ws = gs_cat.get_workspace(tif_layer.workspace)
tif_store = gs_cat.get_store(tif_layer.store, ws)
tif_layer.delete()
self.assertRaises(
FailedRequestError,
lambda: gs_cat.get_resource(
shp_layer.name,
store=tif_store))
self.assertIsNone(gs_cat.get_resource(
name=shp_layer.name,
store=tif_store,
workspace=ws)
)

@on_ogc_backend(geoserver.BACKEND_PACKAGE)
@timeout_decorator.timeout(LOCAL_TIMEOUT)
Expand Down Expand Up @@ -1248,7 +1246,8 @@ def test_map_thumbnail(self):

thumbnail_url = map_obj.get_thumbnail_url()

self.assertNotEqual(thumbnail_url, staticfiles.static(settings.MISSING_THUMBNAIL))
if check_ogc_backend(qgis_server.BACKEND_PACKAGE):
self.assertEquals(thumbnail_url, staticfiles.static(settings.MISSING_THUMBNAIL))
finally:
# Cleanup
saved_layer.delete()
Expand Down
3 changes: 2 additions & 1 deletion geonode/upload/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,8 @@ def run_import(upload_session, async_upload=_ASYNC_UPLOAD):
if ogc_server_settings.datastore_db and task.target.store_type != 'coverageStore':
target = create_geoserver_db_featurestore(
# store_name=ogc_server_settings.DATASTORE,
store_name=ogc_server_settings.datastore_db['NAME']
store_name=ogc_server_settings.datastore_db['NAME'],
workspace=settings.DEFAULT_WORKSPACE
)
_log(
'setting target datastore %s %s',
Expand Down
9 changes: 5 additions & 4 deletions geonode/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,8 +457,9 @@ def layer_config(l, user=None):
for source in sources.values() if source and 'url' in source]

if 'geonode.geoserver' in settings.INSTALLED_APPS:
if len(sources.keys(
)) > 0 and not settings.MAP_BASELAYERS[0]['source']['url'] in source_urls:
if len(sources.keys()) > 0 and \
'url' in settings.MAP_BASELAYERS[0]['source'] and \
not settings.MAP_BASELAYERS[0]['source']['url'] in source_urls:
keys = sorted(sources.keys())
settings.MAP_BASELAYERS[0]['source'][
'title'] = 'Local Geoserver'
Expand Down Expand Up @@ -1495,10 +1496,10 @@ def set_resource_default_links(instance, layer, prune=False, **kwargs):
srid = instance.srid if instance.srid else getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:4326')
try:
gs_resource = gs_catalog.get_resource(
instance.name,
name=instance.name,
workspace=instance.workspace)
if not gs_resource:
gs_resource = gs_catalog.get_resource(instance.name)
gs_resource = gs_catalog.get_resource(name=instance.name)
bbox = gs_resource.native_bbox

dx = float(bbox[1]) - float(bbox[0])
Expand Down
2 changes: 1 addition & 1 deletion package/support/geonode.local_settings
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,7 @@ LOGGING = {
"handlers": ["console"], "level": "INFO", },
"geonode.qgis_server": {
"handlers": ["console"], "level": "ERROR", },
"gsconfig.catalog": {
"geoserver-restconfig.catalog": {
"handlers": ["console"], "level": "ERROR", },
"owslib": {
"handlers": ["console"], "level": "ERROR", },
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ geonode-announcements==1.0.13
geonode-agon-ratings==0.3.8
arcrest>=10.0
geonode-dialogos==1.2
gsconfig>=1.0.10
geoserver-restconfig==1.0.1
gn-gsimporter>=1.0.9
gisdata>=0.5.4

Expand Down

0 comments on commit 92ed66c

Please sign in to comment.