Skip to content

Commit

Permalink
[Fixes #5504] Map Thumbnails Broken
Browse files Browse the repository at this point in the history
(cherry picked from commit 03886d0)

# Conflicts:
#	geonode/maps/tests.py
  • Loading branch information
afabiani committed Jan 14, 2020
1 parent f8df1bd commit 36dc374
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 99 deletions.
22 changes: 16 additions & 6 deletions geonode/layers/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
check_ogc_backend,
unzip_file,
extract_tarfile,
get_layer_name,
get_layer_workspace,
bbox_to_projection)

READ_PERMISSIONS = [
Expand Down Expand Up @@ -1107,13 +1109,21 @@ def create_gs_thumbnail_geonode(instance, overwrite=False, check_bbox=False):
for layer in instance.layers:
if layer.local:
# Compute Bounds
_layer_name = get_layer_name(layer)
_layer_store = layer.store
_layer_workspace = get_layer_workspace(layer)
_l = None
if layer.store and Layer.objects.filter(store=layer.store, name=layer.name).count() > 0:
_l = Layer.objects.get(
store=layer.store,
name=layer.name)
elif Layer.objects.filter(name=layer.name).count() > 0:
_l = Layer.objects.get(name=layer.name)
if _layer_store and \
Layer.objects.filter(store=_layer_store, workspace=_layer_workspace, name=_layer_name).count() > 0:
_l = Layer.objects.filter(
store=_layer_store,
workspace=_layer_workspace,
name=_layer_name).first()
elif _layer_workspace and \
Layer.objects.filter(workspace=_layer_workspace, name=_layer_name).count() > 0:
_l = Layer.objects.filter(workspace=_layer_workspace, name=_layer_name).first()
elif Layer.objects.filter(alternate=layer.name).count() > 0:
_l = Layer.objects.filter(alternate=layer.name).first()
if _l:
wgs84_bbox = bbox_to_projection(_l.bbox)
local_bboxes.append(wgs84_bbox)
Expand Down
18 changes: 1 addition & 17 deletions geonode/local_settings.py.geoserver.sample
Original file line number Diff line number Diff line change
Expand Up @@ -291,23 +291,7 @@ GOOGLE_API_KEY = os.environ.get('GOOGLE_API_KEY', None)

GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY = os.getenv('GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'mapstore')

MAP_BASELAYERS = [{
"source": {"ptype": "gxp_olsource"},
"type": "OpenLayers.Layer",
"args": ["No background"],
"name": "background",
"visibility": False,
"fixed": True,
"group":"background"
},
{
"source": {"ptype": "gxp_osmsource"},
"type": "OpenLayers.Layer.OSM",
"name": "mapnik",
"visibility": True,
"fixed": True,
"group": "background"
}]
MAP_BASELAYERS = [{}]

"""
To enable the GeoExt based Client:
Expand Down
7 changes: 4 additions & 3 deletions geonode/maps/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -801,10 +801,11 @@ def test_fix_baselayers(self):

# number of local layers
n_locallayers = map_obj.layer_set.filter(local=True).count()

fix_baselayers(map_id)

self.assertEquals(map_obj.layer_set.all().count(), n_baselayers + n_locallayers)
if check_ogc_backend(geoserver.BACKEND_PACKAGE):
self.assertEqual(1, n_baselayers + n_locallayers)
elif check_ogc_backend(qgis_server.BACKEND_PACKAGE):
self.assertEqual(2, n_baselayers + n_locallayers)

@dump_func_name
def test_batch_edit(self):
Expand Down
26 changes: 4 additions & 22 deletions geonode/security/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
from guardian.utils import get_user_obj_perms_model
from guardian.shortcuts import assign_perm
from geonode.groups.models import GroupProfile
from ..services.enumerations import CASCADED
from geonode.utils import get_layer_workspace

logger = logging.getLogger("geonode.security.utils")

Expand Down Expand Up @@ -285,7 +285,7 @@ def purge_geofence_layer_rules(resource):
user = settings.OGC_SERVER['default']['USER']
passwd = settings.OGC_SERVER['default']['PASSWORD']
headers = {'Content-type': 'application/json'}
workspace = _get_layer_workspace(resource.layer)
workspace = get_layer_workspace(resource.layer)
r = requests.get(
"{}rest/geofence/rules.json?workspace={}&layer={}".format(
url, workspace, resource.layer.name),
Expand Down Expand Up @@ -384,7 +384,7 @@ def set_geofence_all(instance):

resource = instance.get_self_resource()
logger.debug("Inside set_geofence_all for instance {}".format(instance))
workspace = _get_layer_workspace(resource.layer)
workspace = get_layer_workspace(resource.layer)
logger.debug("going to work in workspace {!r}".format(workspace))
try:
url = settings.OGC_SERVER['default']['LOCATION']
Expand Down Expand Up @@ -430,7 +430,7 @@ def sync_geofence_with_guardian(layer, perms, user=None, group=None):
Sync Guardian permissions to GeoFence.
"""
_layer_name = layer.name if layer.name else layer.alternate.split(":")[0]
_layer_workspace = _get_layer_workspace(layer)
_layer_workspace = get_layer_workspace(layer)
# Create new rule-set
gf_services = {}
gf_services["*"] = 'download_resourcebase' in perms and \
Expand Down Expand Up @@ -512,24 +512,6 @@ def remove_object_permissions(instance):
object_pk=instance.id).delete()


def _get_layer_workspace(layer):
"""Get the workspace where the input layer belongs"""
workspace = layer.workspace
if not workspace and layer.alternate and ':' in layer.alternate:
workspace = layer.alternate.split(":")[1]
if not workspace:
default_workspace = getattr(settings, "DEFAULT_WORKSPACE", "geonode")
try:
if layer.remote_service.method == CASCADED:
workspace = getattr(
settings, "CASCADE_WORKSPACE", default_workspace)
else:
raise RuntimeError("Layer is not cascaded")
except AttributeError: # layer does not have a service
workspace = default_workspace
return workspace


def _get_geofence_payload(layer, workspace, access, user=None, group=None,
service=None):
highest_priority = get_highest_priority()
Expand Down
36 changes: 19 additions & 17 deletions geonode/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -1336,23 +1336,7 @@

GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY = os.getenv('GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'mapstore')

MAP_BASELAYERS = [{
"source": {"ptype": "gxp_olsource"},
"type": "OpenLayers.Layer",
"args": ["No background"],
"name": "background",
"visibility": False,
"fixed": True,
"group":"background"
},
{
"source": {"ptype": "gxp_osmsource"},
"type": "OpenLayers.Layer.OSM",
"name": "mapnik",
"visibility": True,
"fixed": True,
"group": "background"
}]
MAP_BASELAYERS = [{}]

"""
To enable the GeoExt based Client:
Expand All @@ -1367,6 +1351,24 @@
if 'geoexplorer' not in INSTALLED_APPS:
INSTALLED_APPS += ('geoexplorer', )

MAP_BASELAYERS += [{
"source": {"ptype": "gxp_olsource"},
"type": "OpenLayers.Layer",
"args": ["No background"],
"name": "background",
"visibility": False,
"fixed": True,
"group": "background"
},
{
"source": {"ptype": "gxp_osmsource"},
"type": "OpenLayers.Layer.OSM",
"name": "mapnik",
"visibility": True,
"fixed": True,
"group": "background"
}]

# MAP_BASELAYERS += [
# {
# "source": {"ptype": "gxp_olsource"},
Expand Down
52 changes: 48 additions & 4 deletions geonode/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,50 @@ def extract_tarfile(upload_file, extension='.shp', tempdir=None):
return absolute_base_file


def get_layer_name(layer):
"""Get the workspace where the input layer belongs"""
_name = layer.name
if _name and ':' in _name:
_name = _name.split(':')[1]
try:
if not _name and layer.alternate:
if ':' in layer.alternate:
_name = layer.alternate.split(':')[1]
else:
_name = layer.alternate
except BaseException:
pass
return _name


def get_layer_workspace(layer):
"""Get the workspace where the input layer belongs"""
alternate = None
workspace = None
try:
alternate = layer.alternate
except BaseException:
alternate = layer.name
try:
workspace = layer.workspace
except BaseException:
workspace = None
if not workspace and alternate and ':' in alternate:
workspace = alternate.split(":")[1]
if not workspace:
default_workspace = getattr(settings, "DEFAULT_WORKSPACE", "geonode")
try:
from geonode.services.enumerations import CASCADED
if layer.remote_service.method == CASCADED:
workspace = getattr(
settings, "CASCADE_WORKSPACE", default_workspace)
else:
raise RuntimeError("Layer is not cascaded")
except AttributeError: # layer does not have a service
workspace = default_workspace
return workspace


def get_headers(request, url, raw_url, allowed_hosts=[]):
headers = {}
cookies = None
Expand Down Expand Up @@ -481,7 +525,7 @@ def layer_from_viewer_config(map_id, model, layer, source, ordering, save_map=Tr
fixed=layer.get("fixed", False),
group=layer.get('group', None),
visibility=layer.get("visibility", True),
ows_url=source.get("url", None),
ows_url=source.get("url", None) if source else None,
layer_params=json.dumps(layer_cfg),
source_params=json.dumps(source_cfg)
)
Expand Down Expand Up @@ -564,7 +608,7 @@ 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 \
if len(sources.keys()) > 0 and 'source' in settings.MAP_BASELAYERS[0] and \
'url' in settings.MAP_BASELAYERS[0]['source'] and \
not settings.MAP_BASELAYERS[0]['source']['url'] in source_urls:
keys = sorted(sources.keys())
Expand All @@ -581,7 +625,7 @@ def _base_source(source):
return base_source

for idx, lyr in enumerate(settings.MAP_BASELAYERS):
if _base_source(
if "source" in lyr and _base_source(
lyr["source"]) not in map(
_base_source,
sources.values()):
Expand Down Expand Up @@ -788,7 +832,7 @@ def _baselayer(lyr, order):
None,
GXPLayer,
layer=lyr,
source=lyr["source"],
source=lyr["source"] if lyr and "source" in lyr else None,
ordering=order
)

Expand Down
29 changes: 0 additions & 29 deletions package/support/geonode.local_settings
Original file line number Diff line number Diff line change
Expand Up @@ -340,35 +340,6 @@ MAPBOX_ACCESS_TOKEN = os.environ.get('MAPBOX_ACCESS_TOKEN', None)
BING_API_KEY = os.environ.get('BING_API_KEY', None)
GOOGLE_API_KEY = os.environ.get('GOOGLE_API_KEY', None)

MAP_BASELAYERS = [{
"source": {"ptype": "gxp_olsource"},
"type": "OpenLayers.Layer",
"args": ["No background"],
"name": "background",
"visibility": False,
"fixed": True,
"group":"background"
},
# {
# "source": {"ptype": "gxp_olsource"},
# "type": "OpenLayers.Layer.XYZ",
# "title": "TEST TILE",
# "args": ["TEST_TILE", "http://test_tiles/tiles/${z}/${x}/${y}.png"],
# "name": "background",
# "attribution": "© TEST TILE",
# "visibility": False,
# "fixed": True,
# "group":"background"
# },
{
"source": {"ptype": "gxp_osmsource"},
"type": "OpenLayers.Layer.OSM",
"name": "mapnik",
"visibility": True,
"fixed": True,
"group": "background"
}]

if 'geonode.geoserver' in INSTALLED_APPS:
LOCAL_GEOSERVER = {
"source": {
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ geonode-oauth-toolkit==1.1.4.6

# GeoNode org maintained apps.
django-geoexplorer==4.0.43
django-mapstore-adapter==1.0.16
django-mapstore-adapter==1.0.17
django-geonode-mapstore-client==1.4.8
django-geonode-client==1.0.9
geonode-user-messages==0.1.14
Expand Down

0 comments on commit 36dc374

Please sign in to comment.