Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions geonode/layers/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,16 +110,14 @@ def _resolve_layer(request, typename, permission='base.view_resourcebase',
service = Service.objects.filter(name=service_typename[0])
return resolve_object(request,
Layer,
{'service': service[0],
'typename': service_typename[1] if service[0].method != "C" else typename},
{'typename': service_typename[1] if service[0].method != "C" else typename},
permission=permission,
permission_msg=msg,
**kwargs)
else:
return resolve_object(request,
Layer,
{'typename': typename,
'service': None},
{'typename': typename},
permission=permission,
permission_msg=msg,
**kwargs)
Expand Down
7 changes: 4 additions & 3 deletions geonode/services/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

from django.test import TestCase
from django.core.urlresolvers import reverse
from .models import Service
from .models import Service, ServiceLayer


class ServicesTests(TestCase):
Expand Down Expand Up @@ -55,7 +55,8 @@ def test_register_indexed_wms(self):
try:
service = Service.objects.get(id=service_dict['service_id'])
# Harvested some layers
self.assertTrue(service.layer_set.count() > 0)

self.assertTrue(ServiceLayer.objects.filter(service=service).count() > 0)
self.assertEqual(service.method, "I")
self.assertEqual(service.type, "WMS")
self.assertEqual(service.ptype, 'gxp_wmscsource')
Expand All @@ -79,7 +80,7 @@ def test_register_arcrest(self):
try:
service = Service.objects.get(id=service_dict['service_id'])
# Harvested some layers
self.assertTrue(service.layer_set.count() > 0)
self.assertTrue(ServiceLayer.objects.filter(service=service).count() > 0)
self.assertEqual(service.method, "I")
self.assertEqual(service.type, "REST")
self.assertEqual(service.ptype, 'gxp_arcrestsource')
Expand Down
79 changes: 50 additions & 29 deletions geonode/services/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
from django.template import RequestContext, loader
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext as _
from django.db.models import signals
try:
# Django >= 1.7
import json
Expand All @@ -59,6 +60,9 @@
from geonode.layers.utils import create_thumbnail
from geonode.geoserver.helpers import set_attributes_from_geoserver
from geonode.base.models import Link
from geonode.base.models import resourcebase_post_save
from geonode.catalogue.models import catalogue_post_save


logger = logging.getLogger("geonode.core.layers.views")

Expand Down Expand Up @@ -467,7 +471,6 @@ def _register_cascaded_layers(service, owner=None):
bbox = resource.latlon_bbox
cascaded_layer, created = Layer.objects.get_or_create(
typename="%s:%s" % (cascade_ws.name, resource.name),
service=service,
defaults={
"name": resource.name,
"workspace": cascade_ws.name,
Expand Down Expand Up @@ -632,10 +635,16 @@ def _register_indexed_layers(service, wms=None, verbosity=False):
wms_layer.boundingBoxWGS84 or (-179.0, -89.0, 179.0, 89.0))

# Need to check if layer already exists??
saved_layer, created = Layer.objects.get_or_create(
typename=wms_layer.name,
service=service,
defaults=dict(
existing_layer = None
for layer in Layer.objects.filter(typename=wms_layer.name):
if layer.service == service:
existing_layer = layer

if not existing_layer:
signals.post_save.disconnect(resourcebase_post_save, sender=Layer)
signals.post_save.disconnect(catalogue_post_save, sender=Layer)
saved_layer = Layer.objects.create(
typename=wms_layer.name,
name=wms_layer.name,
store=service.name, # ??
storeType="remoteStore",
Expand All @@ -650,12 +659,10 @@ def _register_indexed_layers(service, wms=None, verbosity=False):
bbox_y0=bbox[1],
bbox_y1=bbox[3]
)
)
if created:

saved_layer.save()
saved_layer.set_default_permissions()
saved_layer.keywords.add(*keywords)
set_attributes_from_geoserver(saved_layer)

service_layer, created = ServiceLayer.objects.get_or_create(
typename=wms_layer.name,
Expand All @@ -666,6 +673,13 @@ def _register_indexed_layers(service, wms=None, verbosity=False):
service_layer.description = wms_layer.abstract
service_layer.styles = wms_layer.styles
service_layer.save()

resourcebase_post_save(saved_layer, Layer)
catalogue_post_save(saved_layer, Layer)
set_attributes_from_geoserver(saved_layer)

signals.post_save.connect(resourcebase_post_save, sender=Layer)
signals.post_save.connect(catalogue_post_save, sender=Layer)
count += 1
message = "%d Layers Registered" % count
return_dict = {'status': 'ok', 'msg': message}
Expand Down Expand Up @@ -844,35 +858,37 @@ def _register_arcgis_layers(service, arc=None):
existing_layer = None
logger.info("Registering layer %s" % layer.name)
try:
existing_layer = Layer.objects.get(
typename=typename, service=service)
for layer in Layer.objects.filter(typename=typename):
if layer.service == service:
existing_layer = layer
except Layer.DoesNotExist:
pass

llbbox = mercator_to_llbbox(bbox)

if existing_layer is None:

signals.post_save.disconnect(resourcebase_post_save, sender=Layer)
signals.post_save.disconnect(catalogue_post_save, sender=Layer)

# Need to check if layer already exists??
logger.info("Importing layer %s" % layer.name)
saved_layer, created = Layer.objects.get_or_create(
saved_layer = Layer.objects.create(
typename=typename,
service=service,
defaults=dict(
name=valid_name,
store=service.name, # ??
storeType="remoteStore",
workspace="remoteWorkspace",
title=layer.name,
abstract=layer._json_struct[
'description'] or _("Not provided"),
uuid=layer_uuid,
owner=None,
srid="EPSG:%s" % layer.extent.spatialReference.wkid,
bbox_x0=llbbox[0],
bbox_x1=llbbox[2],
bbox_y0=llbbox[1],
bbox_y1=llbbox[3],
)
name=valid_name,
store=service.name, # ??
storeType="remoteStore",
workspace="remoteWorkspace",
title=layer.name,
abstract=layer._json_struct[
'description'] or _("Not provided"),
uuid=layer_uuid,
owner=None,
srid="EPSG:%s" % layer.extent.spatialReference.wkid,
bbox_x0=llbbox[0],
bbox_x1=llbbox[2],
bbox_y0=llbbox[1],
bbox_y1=llbbox[3],
)

saved_layer.set_default_permissions()
Expand All @@ -888,6 +904,12 @@ def _register_arcgis_layers(service, arc=None):
service_layer.styles = None
service_layer.save()

resourcebase_post_save(saved_layer, Layer)
catalogue_post_save(saved_layer, Layer)

signals.post_save.connect(resourcebase_post_save, sender=Layer)
signals.post_save.connect(catalogue_post_save, sender=Layer)

create_arcgis_links(saved_layer)

count += 1
Expand Down Expand Up @@ -1109,7 +1131,6 @@ def process_ogp_results(ogp, result_json, owner=None):

layer_uuid = str(uuid.uuid1())
saved_layer, created = Layer.objects.get_or_create(typename=typename,
service=service,
defaults=dict(
name=doc["Name"],
uuid=layer_uuid,
Expand Down
12 changes: 2 additions & 10 deletions pavement.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,7 @@ def sync(options):
"""
Run the migrate and migrate management commands to create and migrate a DB
"""
for app in dev_config['MIGRATE_APPS']:
try:
sh("python manage.py migrate {app} --noinput".format(app=app))
except:
pass
try:
sh("python manage.py migrate --noinput")
except:
pass
sh("python manage.py migrate --noinput")
sh("python manage.py loaddata sample_admin.json")
sh("python manage.py loaddata geonode/base/fixtures/default_oauth_apps.json")
sh("python manage.py loaddata geonode/base/fixtures/initial_data.json")
Expand Down Expand Up @@ -494,7 +486,7 @@ def run_tests(options):
"""
Executes the entire test suite.
"""
if options.coverage:
if options.get('coverage'):
prefix = 'coverage run --branch --source=geonode'
else:
prefix = 'python'
Expand Down