diff --git a/src/mapfile.py b/src/mapfile.py index 702f4396ada5ccb4603676566d891b6d6ec6d6e4..ce71b7c950f6547077e26c0a52a201af6d79dbf9 100644 --- a/src/mapfile.py +++ b/src/mapfile.py @@ -128,8 +128,6 @@ class Layer(MetadataMixin): # we need to rename it to something we are sure is not used. sld_layer_name = "__mra_tmp_template" - print new_sld - # This is realy ugly but etree has trouble with namespaces... # TODO: Do this again in an other way. fixedxml = re.sub(' [a-zzA-Z0-9]+:([a-zA-Z0-9]+=")', ' \\1', new_sld) @@ -231,8 +229,8 @@ class LayerGroup(object): extent = layers[0].get_extent() for layer in layers[1:]: e = layer.get_extent() - extent.addX(e.minX, e.maxX) - extent.addY(e.minY, e.maxY) + extent.addX(e.minX(), e.maxX()) + extent.addY(e.minY(), e.maxY()) return extent diff --git a/src/server.py b/src/server.py index 9fb012511dc74a13fe15a13ed46926c49c8b4bc5..4c0a0da06273d99b703eb506a6f293cde1268d9b 100755 --- a/src/server.py +++ b/src/server.py @@ -860,6 +860,9 @@ class layergroup(object): raise webapp.Forbidden("Can't change the name of a layergroup.") layers = data.pop("layers", []) + if not isinstance(layers, list) or any(not isinstance(x, basestring) for x in layers): + raise webapp.BadRequest("layers must be a list of layer names.") + lg.clear() lg.add(*layers) diff --git a/tests/testScenario.py b/tests/testScenario.py index ce64d9e8735505db028cb0aaf30e1d6bb25ebd56..1fc4cd453f51fc3129df4543621254895eca9f19 100644 --- a/tests/testScenario.py +++ b/tests/testScenario.py @@ -302,26 +302,60 @@ def _test_layers(target, map_name): _, r = APIRequest("POST", target + "/maps/" + map_name + "/layers", {"layer":{"name":name, "resource":{"href":c_link}}}, get_response=True) - ctl_link = r.getheader("Location").rsplit(".", 1)[0] + cl_link = r.getheader("Location").rsplit(".", 1)[0] # Check GET. - ctl = APIRequest("GET", ctl_link)["layer"] - assert ctl["name"] == name - assert ctl["type"] == "RASTER" + cl = APIRequest("GET", cl_link)["layer"] + assert cl["name"] == name + assert cl["type"] == "RASTER" # Check GET. layers = APIRequest("GET", target + "/maps/" + map_name + "/layers")["layers"] assert len(layers) == 2 # check GET fields - fields = APIRequest("GET", ctl_link + "/fields")["fields"] + fields = APIRequest("GET", cl_link + "/fields")["fields"] assert len(fields) == 0 # check GET layerstyles - fields = APIRequest("GET", ctl_link + "/styles")["styles"] + fields = APIRequest("GET", cl_link + "/styles")["styles"] assert len(fields) == 0 + # Now lets try layer groups. + + layers = APIRequest("GET", target + "/maps/" + map_name + "/layergroups")["layerGroups"] + assert len(layers) == 0 + + # POST an empty group + name = "test_group" + _, r = APIRequest("POST", target + "/maps/" + map_name + "/layergroups", {"layerGroup":{"name":name}}, get_response=True) + g_link = r.getheader("Location").rsplit(".", 1)[0] + + # GET it. + group = APIRequest("GET", g_link)["layerGroup"] + assert group["name"] == name + assert len(group["layers"]) == 0 + + # PUT some new layers in it. + group["layers"] = [x["name"] for x in group["layers"]] + [ftl["name"]] + del group["bounds"] + APIRequest("PUT", g_link, {"layerGroup":group}) + + # GET it. + group = APIRequest("GET", g_link)["layerGroup"] + assert len(group["layers"]) == 1 + + # PUT some new layers in it. + group["layers"] = [x["name"] for x in group["layers"]] + [cl["name"]] + del group["bounds"] + APIRequest("PUT", g_link, {"layerGroup":group}) + + # GET it. + group = APIRequest("GET", g_link)["layerGroup"] + assert len(group["layers"]) == 2 + + def test_scenario(): target = "http://localhost:8080"