From e394c871c987dfef4ab8efd14a9414121baa2198 Mon Sep 17 00:00:00 2001 From: afabiani Date: Tue, 22 Oct 2019 10:17:00 +0000 Subject: [PATCH] [Fixes #4827] Line layer uploaded to GeoNode is rendered as point layer --- geonode/catalogue/models.py | 14 +++++----- geonode/geoserver/helpers.py | 52 ++++++++++++++++++++++++------------ 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/geonode/catalogue/models.py b/geonode/catalogue/models.py index 6354fb25139..b6fb4884dd4 100644 --- a/geonode/catalogue/models.py +++ b/geonode/catalogue/models.py @@ -67,12 +67,14 @@ def catalogue_post_save(instance, sender, **kwargs): else: raise err - msg = ('Metadata record for %s does not exist,' - ' check the catalogue signals.' % instance.title) - assert record is not None, msg + if not record: + msg = ('Metadata record for %s does not exist,' + ' check the catalogue signals.' % instance.title) + raise Exception(msg) - msg = ('Metadata record for %s should contain links.' % instance.title) - assert hasattr(record, 'links'), msg + if not hasattr(record, 'links'): + msg = ('Metadata record for %s should contain links.' % instance.title) + raise Exception(msg) # Create the different metadata links with the available formats for mime, name, metadata_url in record.links['metadata']: @@ -110,7 +112,7 @@ def catalogue_post_save(instance, sender, **kwargs): resources.update(csw_wkt_geometry=csw_wkt_geometry) resources.update(csw_anytext=csw_anytext) except BaseException as e: - LOGGER.exception(e) + LOGGER.debug(e) finally: # Revert temporarily changed publishing state if not is_published: diff --git a/geonode/geoserver/helpers.py b/geonode/geoserver/helpers.py index 5c0fb4ab1bb..86ce8145746 100755 --- a/geonode/geoserver/helpers.py +++ b/geonode/geoserver/helpers.py @@ -237,30 +237,48 @@ def extract_name_from_sld(gs_catalog, sld, sld_file=None): def get_sld_for(gs_catalog, layer): - # GeoServer sometimes fails to associate a style with the data, so - # for now we default to using a point style.(it works for lines and - # polygons, hope this doesn't happen for rasters though) + name = None gs_layer = None - _default_style = None - try: - _default_style = layer.default_style - except BaseException: - traceback.print_exc() - pass + gs_style = None + _default_style = layer.default_style if layer else None - try: - gs_catalog._cache.clear() - gs_layer = gs_catalog.get_layer(layer.name) - except BaseException: - traceback.print_exc() if _default_style is None: + _max_retries, _tries = getattr(ogc_server_settings, "MAX_RETRIES", 5), 0 try: - name = gs_layer.default_style.name if gs_layer.default_style is not None else "raster" + gs_layer = gs_catalog.get_layer(layer.name) + if gs_layer.default_style: + gs_style = gs_layer.default_style.sld_body + set_layer_style(layer, + layer.alternate, + gs_style) + name = gs_layer.default_style.name except BaseException: - traceback.print_exc() name = None + while not name and _tries < _max_retries: + try: + gs_layer = gs_catalog.get_layer(layer.name) + if gs_layer.default_style: + gs_style = gs_layer.default_style.sld_body + set_layer_style(layer, + layer.alternate, + gs_style) + name = gs_layer.default_style.name + if name: + break + except BaseException: + name = None + _tries += 1 + time.sleep(3) else: name = _default_style.name + gs_style = _default_style.sld_body + + if not name: + msg = """ + GeoServer didn't return a default style for this layer. + Consider increasing OGC_SERVER MAX_RETRIES value.'' + """ + raise GeoNodeException(msg) # Detect geometry type if it is a FeatureType res = gs_layer.resource if gs_layer else None @@ -289,7 +307,7 @@ def get_sld_for(gs_catalog, layer): bg=bg, mark=mark) else: - return None + return gs_style def fixup_style(cat, resource, style):