Skip to content

Instantly share code, notes, and snippets.

@ingenieroariel
Created June 22, 2010 16:53
Show Gist options
  • Save ingenieroariel/448740 to your computer and use it in GitHub Desktop.
Save ingenieroariel/448740 to your computer and use it in GitHub Desktop.
diff --git a/src/GeoNodePy/geonode/maps/models.py b/src/GeoNodePy/geonode/maps/models.py
index c44abe0..762669e 100755
--- a/src/GeoNodePy/geonode/maps/models.py
+++ b/src/GeoNodePy/geonode/maps/models.py
@@ -167,24 +167,36 @@ class Layer(models.Model):
}).get(self.storeType, "Data")
def delete_from_geoserver(self):
- layerURL = "%srest/layers/%s.xml" % (settings.GEOSERVER_BASE_URL,self.name)
+ if self.name == '':
+ # This layer is not well configured, don't do anything.
+ return
+
+
+ layerUrl = "%srest/layers/%s.xml" % (settings.GEOSERVER_BASE_URL,self.name)
+
+ urls = []
if self.storeType == "dataStore":
- featureUrl = "%srest/workspaces/%s/datastores/%s/featuretypes/%s.xml" % (settings.GEOSERVER_BASE_URL, self.workspace, self.store, self.name)
- storeUrl = "%srest/workspaces/%s/datastores/%s.xml" % (settings.GEOSERVER_BASE_URL, self.workspace, self.store)
+ urls[0] = "%srest/workspaces/%s/datastores/%s/featuretypes/%s.xml" % (settings.GEOSERVER_BASE_URL, self.workspace, self.store, self.name)
+ urls[1] = "%srest/workspaces/%s/datastores/%s.xml" % (settings.GEOSERVER_BASE_URL, self.workspace, self.store)
elif self.storeType == "coverageStore":
- featureUrl = "%srest/workspaces/%s/coveragestores/%s/coverages/%s.xml" % (settings.GEOSERVER_BASE_URL,self.workspace,self.store, self.name)
- storeUrl = "%srest/workspaces/%s/coveragestores/%s.xml" % (settings.GEOSERVER_BASE_URL,self.workspace,self.store)
- urls = (layerURL,featureUrl,storeUrl)
+ urls[0] = "%srest/workspaces/%s/coveragestores/%s/coverages/%s.xml" % (settings.GEOSERVER_BASE_URL,self.workspace,self.store, self.name)
+ urls[1] = "%srest/workspaces/%s/coveragestores/%s.xml" % (settings.GEOSERVER_BASE_URL,self.workspace,self.store)
# GEOSERVER_CREDENTIALS
HTTP = httplib2.Http(".cache")
HTTP.add_credentials(_user,_password)
+ output = HTTP.request(layerUrl,"DELETE")
+ if output[0]["status"][0] == '4':
+ raise RuntimeError("Unable to remove layer from Geoserver: %s" % output[1])
+
for u in urls:
- output = HTTP.request(u,"DELETE")
- if output[0]["status"][0] == '4':
- raise RuntimeError("Unable to remove from Geoserver: %s" % output[1])
-
+ try:
+ output = HTTP.request(u,"DELETE")
+ except:
+ # If we cannot delete the containers it's ok. They might have other layers configured.
+ pass
+
def delete_from_geonetwork(self):
gn = GeoNetwork(settings.GEONETWORK_BASE_URL, settings.GEONETWORK_CREDENTIALS[0], settings.GEONETWORK_CREDENTIALS[1])
gn.login()
diff --git a/src/GeoNodePy/geonode/maps/tests.py b/src/GeoNodePy/geonode/maps/tests.py
index 81e7ac5..4970b6f 100755
--- a/src/GeoNodePy/geonode/maps/tests.py
+++ b/src/GeoNodePy/geonode/maps/tests.py
@@ -16,6 +16,19 @@ class MapTest(TestCase):
if "GEOSERVER" in os.environ.keys():
self.GEOSERVER = True
+ def resetLayers(self):
+ '''
+ This is a very expensive operation, does the same as
+ ./manage.py updatelayers
+ Call it for specific tests that need to access GeoNetwork
+ and avoid having a blank uuid in the layer object.
+ '''
+ if self.GEOSERVER:
+ # Since the layer list might not be up to date, just regenerate it
+ Layer.objects.all().delete()
+ Layer.objects.slurp()
+
+
default_abstract = "This is a demonstration of GeoNode, an application \
for assembling and publishing web based maps. After adding layers to the map, \
use the 'Save Map' button above to contribute your map to the GeoNode \
@@ -63,6 +76,7 @@ community."
def test_search_detail(self):
'''/data/search/detail -> Test accessing the data search detail for a layer'''
if self.GEOSERVER:
+ self.resetLayers()
layer = Layer.objects.all()[0]
c = Client()
response = c.get('/data/search/detail', {'uuid':layer.uuid})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment