From 4593656e1f168c067e2a37389aeaa67889c1c173 Mon Sep 17 00:00:00 2001 From: Vidyashree-Huawei Date: Wed, 22 Jan 2020 17:25:46 +0530 Subject: Create a camel route that would retrieve all the DCAE blueprints Retreive all the DCAE blueprints and update DcaeInventoryCache Change-Id: Ia03a89c1871119a208094c014e5cb8aa8b4f71d3 Issue-ID: CLAMP-573 Signed-off-by: Vidyashree-Huawei --- .../clamp/clds/model/dcae/DcaeInventoryCache.java | 2 +- .../clds/model/dcae/DcaeInventoryResponse.java | 11 -- .../loop/components/external/DcaeComponent.java | 33 +++++- .../resources/clds/camel/routes/dcae-flows.xml | 43 +++++++ .../model/dcae/DcaeInventoryResponseCacheTest.java | 81 ------------- .../dcae/DcaeInventoryResponseCacheTestItCase.java | 126 +++++++++++++++++++++ .../org/onap/clamp/loop/DcaeComponentTest.java | 89 +++++++++++++++ .../resources/clds/camel/routes/dcae-flows.xml | 43 +++++++ src/test/resources/http-cache/third_party_proxy.py | 19 ++++ 9 files changed, 352 insertions(+), 95 deletions(-) delete mode 100644 src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java create mode 100644 src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java index 558102c5d..19bc23d5e 100644 --- a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java +++ b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryCache.java @@ -36,7 +36,7 @@ import java.util.concurrent.ConcurrentHashMap; */ public class DcaeInventoryCache { - private Map> blueprintsMap = new ConcurrentHashMap<>(); + private static Map> blueprintsMap = new ConcurrentHashMap<>(); /** * Add Dcae inventory response. diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java index bdf6e70f5..67bd026d0 100644 --- a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java +++ b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java @@ -53,9 +53,6 @@ public class DcaeInventoryResponse implements Comparable @Expose private String asdcResourceId; - @Expose - private String selfLink; - public String getTypeName() { return typeName; } @@ -96,14 +93,6 @@ public class DcaeInventoryResponse implements Comparable this.asdcResourceId = asdcResourceId; } - public String getSelfLink() { - return selfLink; - } - - public void setSelfLink(String selfLink) { - this.selfLink = selfLink; - } - @Override public int compareTo(DcaeInventoryResponse otherResponse) { int thisResourceId = Integer.parseInt(this.asdcResourceId); diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java index 9b131299b..7a0d8b4b3 100644 --- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java +++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java @@ -24,10 +24,17 @@ package org.onap.clamp.loop.components.external; import com.google.gson.JsonObject; - +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; import java.util.UUID; - import org.apache.camel.Exchange; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.loop.Loop; @@ -164,4 +171,26 @@ public class DcaeComponent extends ExternalComponent { } return this.getState(); } + + /** + * Convert the json response to a DcaeInventoryResponse. + * + * @param responseBody The DCAE response Json paylaod + * @return list of DcaeInventoryResponse + * @throws ParseException In case of issues with the Json parsing + */ + public static List convertToDcaeInventoryResponse(String responseBody) + throws ParseException { + JSONParser parser = new JSONParser(); + JSONObject jsonObj = (JSONObject) parser.parse(responseBody); + JSONArray itemsArray = (JSONArray) jsonObj.get("items"); + Iterator it = itemsArray.iterator(); + List inventoryResponseList = new LinkedList<>(); + while (it.hasNext()) { + JSONObject item = (JSONObject) it.next(); + DcaeInventoryResponse response = JsonUtils.GSON.fromJson(item.toString(), DcaeInventoryResponse.class); + inventoryResponseList.add(response); + } + return inventoryResponseList; + } } diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml index fb3bc90ec..6c963349b 100644 --- a/src/main/resources/clds/camel/routes/dcae-flows.xml +++ b/src/main/resources/clds/camel/routes/dcae-flows.xml @@ -213,4 +213,47 @@ + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[dcaeResponseList]} + + + ${body} + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java b/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java deleted file mode 100644 index 26cc831ec..000000000 --- a/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTest.java +++ /dev/null @@ -1,81 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.clamp.clds.model.dcae; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.BeforeClass; -import org.junit.Test; - -public class DcaeInventoryResponseCacheTest { - - public static DcaeInventoryCache inventoryCache = new DcaeInventoryCache(); - - /** - * Initialize the responses. - */ - @BeforeClass - public static void createExample() { - DcaeInventoryResponse response1 = new DcaeInventoryResponse(); - response1.setAsdcServiceId("id1"); - response1.setAsdcResourceId("0"); - DcaeInventoryResponse response2 = new DcaeInventoryResponse(); - response2.setAsdcServiceId("id1"); - response2.setAsdcResourceId("1"); - DcaeInventoryResponse response3 = new DcaeInventoryResponse(); - response3.setAsdcServiceId("id1"); - response3.setAsdcResourceId("2"); - DcaeInventoryResponse response4 = new DcaeInventoryResponse(); - response4.setAsdcServiceId("id2"); - response4.setAsdcResourceId("0"); - DcaeInventoryResponse response5 = new DcaeInventoryResponse(); - response5.setAsdcServiceId("id2"); - response5.setAsdcResourceId("1"); - - inventoryCache.addDcaeInventoryResponse(response1); - inventoryCache.addDcaeInventoryResponse(response3); - inventoryCache.addDcaeInventoryResponse(response2); - inventoryCache.addDcaeInventoryResponse(response4); - inventoryCache.addDcaeInventoryResponse(response5); - } - - @Test - public void testGetAllLoopIds() { - assertThat(inventoryCache.getAllLoopIds().size()).isEqualTo(2); - } - - @Test - public void testGetAllBlueprintsPerLoopId() { - int value = 0; - for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id1")) { - assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); - } - - value = 0; - for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id2")) { - assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); - } - } - -} diff --git a/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java b/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java new file mode 100644 index 000000000..50da40049 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java @@ -0,0 +1,126 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.model.dcae; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + +import java.util.HashSet; +import java.util.Set; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.builder.ExchangeBuilder; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.clamp.clds.Application; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class DcaeInventoryResponseCacheTestItCase { + + public static DcaeInventoryCache inventoryCache = new DcaeInventoryCache(); + + @Autowired + CamelContext camelContext; + + /** + * Initialize the responses. + */ + @BeforeClass + public static void createExample() { + DcaeInventoryResponse response1 = new DcaeInventoryResponse(); + response1.setAsdcServiceId("id1"); + response1.setAsdcResourceId("0"); + DcaeInventoryResponse response2 = new DcaeInventoryResponse(); + response2.setAsdcServiceId("id1"); + response2.setAsdcResourceId("1"); + DcaeInventoryResponse response3 = new DcaeInventoryResponse(); + response3.setAsdcServiceId("id1"); + response3.setAsdcResourceId("2"); + DcaeInventoryResponse response4 = new DcaeInventoryResponse(); + response4.setAsdcServiceId("id2"); + response4.setAsdcResourceId("0"); + DcaeInventoryResponse response5 = new DcaeInventoryResponse(); + response5.setAsdcServiceId("id2"); + response5.setAsdcResourceId("1"); + + inventoryCache.addDcaeInventoryResponse(response1); + inventoryCache.addDcaeInventoryResponse(response3); + inventoryCache.addDcaeInventoryResponse(response2); + inventoryCache.addDcaeInventoryResponse(response4); + inventoryCache.addDcaeInventoryResponse(response5); + } + + @Test + public void testGetAllLoopIds() { + assertThat(inventoryCache.getAllLoopIds().size()).isEqualTo(2); + } + + @Test + public void testGetAllBlueprintsPerLoopId() { + int value = 0; + for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id1")) { + assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); + } + + value = 0; + for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id2")) { + assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); + } + } + + @Test + public void testDcaeInventoryResponse() { + Exchange exchange = ExchangeBuilder.anExchange(camelContext).build(); + Exchange exchangeResponse = camelContext.createProducerTemplate() + .send("direct:get-all-dcae-blueprint-inventory", exchange); + assertThat(exchangeResponse.getIn().getHeader("CamelHttpResponseCode")).isEqualTo(200); + Set blueprint = inventoryCache.getAllBlueprintsPerLoopId("testAsdcServiceId"); + assertThat(blueprint.size()).isEqualTo(2); + + DcaeInventoryResponse response1 = new DcaeInventoryResponse(); + response1.setAsdcResourceId("0"); + response1.setTypeName("testTypeName"); + response1.setAsdcServiceId("testAsdcServiceId"); + response1.setBlueprintTemplate("testBlueprintTemplate"); + response1.setTypeId("testtypeId"); + DcaeInventoryResponse response2 = new DcaeInventoryResponse(); + response2.setAsdcResourceId("1"); + response2.setTypeName("testTypeName2"); + response2.setAsdcServiceId("testAsdcServiceId"); + response2.setBlueprintTemplate("testBlueprintTemplate2"); + response2.setTypeId("testtypeId2"); + + Set expectedBlueprint = new HashSet<>(); + expectedBlueprint.add(response1); + expectedBlueprint.add(response2); + + assertEquals(blueprint, expectedBlueprint); + } +} diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java index 557fdcecf..4daab2ecc 100644 --- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java +++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java @@ -30,11 +30,15 @@ import com.google.gson.JsonObject; import java.io.IOException; import java.util.HashSet; +import java.util.List; import org.apache.camel.Exchange; import org.apache.camel.Message; +import org.json.simple.parser.ParseException; +import org.junit.Ignore; import org.junit.Test; import org.mockito.Mockito; +import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; import org.onap.clamp.loop.components.external.DcaeComponent; import org.onap.clamp.loop.components.external.ExternalComponentState; @@ -151,4 +155,89 @@ public class DcaeComponentTest { ExternalComponentState state9 = dcae.computeState(exchange); assertThat(state9.getStateName()).isEqualTo("IN_ERROR"); } + + @Test + public void convertToDcaeInventoryResponseTest() throws IOException, ParseException { + String dcaeFakeResponse = "{\n" + + " \"links\": {\n" + + " \"previousLink\": {\n" + + " \"title\": \"string\",\n" + + " \"rel\": \"string\",\n" + + " \"uri\": \"string\",\n" + + " \"uriBuilder\": {},\n" + + " \"rels\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"params\": {\n" + + " \"additionalProp1\": \"string\",\n" + + " \"additionalProp2\": \"string\",\n" + + " \"additionalProp3\": \"string\"\n" + + " },\n" + + " \"type\": \"string\"\n" + + " },\n" + + " \"nextLink\": {\n" + + " \"title\": \"string\",\n" + + " \"rel\": \"string\",\n" + + " \"uri\": \"string\",\n" + + " \"uriBuilder\": {},\n" + + " \"rels\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"params\": {\n" + + " \"additionalProp1\": \"string\",\n" + + " \"additionalProp2\": \"string\",\n" + + " \"additionalProp3\": \"string\"\n" + + " },\n" + + " \"type\": \"string\"\n" + + " }\n" + + " },\n" + + " \"totalCount\": 0,\n" + + " \"items\": [\n" + + " {\n" + + " \"owner\": \"testOwner\",\n" + + " \"application\": \"testApplication\",\n" + + " \"component\": \"testComponent\",\n" + + " \"typeName\": \"testTypeName\",\n" + + " \"typeVersion\": 0,\n" + + " \"blueprintTemplate\": \"testBlueprintTemplate\",\n" + + " \"serviceIds\": [\n" + + " \"serviceId1\", \"serviceId2\"\n" + + " ],\n" + + " \"vnfTypes\": [\n" + + " \"vnfType1\", \"vnfType2\"\n" + + " ],\n" + + " \"serviceLocations\": [\n" + + " \"serviceLocation1\", \"serviceLocation2\"\n" + + " ],\n" + + " \"asdcServiceId\": \"testAsdcServiceId\",\n" + + " \"asdcResourceId\": \"testAsdcResourceId\",\n" + + " \"asdcServiceURL\": \"testAsdcServiceURL\",\n" + + " \"typeId\": \"testTypeId\",\n" + + " \"selfLink\": {\n" + + " \"title\": \"selfLinkTitle\",\n" + + " \"rel\": \"selfLinkRel\",\n" + + " \"uri\": \"selfLinkUri\",\n" + + " \"uriBuilder\": {},\n" + + " \"rels\": [\n" + + " \"string\"\n" + + " ],\n" + + " \"params\": {\n" + + " \"additionalProp1\": \"string\",\n" + + " \"additionalProp2\": \"string\",\n" + + " \"additionalProp3\": \"string\"\n" + + " },\n" + + " \"type\": \"string\"\n" + + " },\n" + + " \"created\": \"2020-01-22T09:38:15.436Z\",\n" + + " \"deactivated\": \"2020-01-22T09:38:15.437Z\"\n" + + " }\n" + + " ]\n" + + "}"; + List responseObject = DcaeComponent.convertToDcaeInventoryResponse(dcaeFakeResponse); + assertThat(responseObject.get(0).getAsdcResourceId()).isEqualTo("testAsdcResourceId"); + assertThat(responseObject.get(0).getAsdcServiceId()).isEqualTo("testAsdcServiceId"); + assertThat(responseObject.get(0).getTypeName()).isEqualTo("testTypeName"); + assertThat(responseObject.get(0).getTypeId()).isEqualTo("testTypeId"); + assertThat(responseObject.get(0).getBlueprintTemplate()).isEqualTo("testBlueprintTemplate"); + } } diff --git a/src/test/resources/clds/camel/routes/dcae-flows.xml b/src/test/resources/clds/camel/routes/dcae-flows.xml index fb3bc90ec..1e5cbd89a 100644 --- a/src/test/resources/clds/camel/routes/dcae-flows.xml +++ b/src/test/resources/clds/camel/routes/dcae-flows.xml @@ -213,4 +213,47 @@ + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[dcaeResponseList]} + + + ${body} + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/http-cache/third_party_proxy.py b/src/test/resources/http-cache/third_party_proxy.py index 9dcc4b3a3..32f7faf4e 100755 --- a/src/test/resources/http-cache/third_party_proxy.py +++ b/src/test/resources/http-cache/third_party_proxy.py @@ -249,6 +249,22 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): with open(cached_file_content, 'w') as f: f.write(jsonGenerated) return True + elif self.path.startswith("/dcae-service-types") and http_type == "GET": + if not _file_available: + self.path = "/dcae-service-types" + cached_file_folder = '%s/%s' % (TMP_ROOT, self.path) + cached_file_content = self._get_cached_content_file_name(cached_file_folder) + cached_file_header = self._get_cached_header_file_name(cached_file_folder) + print "self.path start with /dcae-service-types, generating response json..." + response = "{\"links\": {\"previousLink\": {\"title\": \"string\",\"rel\": \"string\",\"uri\": \"string\",\"uriBuilder\": {},\"rels\": [\"string\"],\"params\": {\"additionalProp1\": \"string\",\"additionalProp2\": \"string\",\"additionalProp3\": \"string\"},\"type\": \"string\"},\"nextLink\": {\"title\": \"string\",\"rel\": \"string\",\"uri\": \"string\",\"uriBuilder\": {},\"rels\": [\"string\"],\"params\": {\"additionalProp1\": \"string\",\"additionalProp2\": \"string\",\"additionalProp3\": \"string\"},\"type\": \"string\"}},\"totalCount\": 1,\"items\": [{\"owner\": \"testOwner\",\"application\": \"testApplication\",\"component\": \"testComponent\",\"typeName\": \"testTypeName\",\"typeVersion\": 0,\"blueprintTemplate\": \"testBlueprintTemplate\",\"serviceIds\": [\"serviceId1\", \"serviceId2\"],\"vnfTypes\": [\"vnfType1\", \"vnfType2\"],\"serviceLocations\": [\"serviceLocation1\", \"serviceLocation2\"],\"asdcServiceId\": \"testAsdcServiceId\",\"asdcResourceId\": \"0\",\"asdcServiceURL\": \"testAsdcServiceURL\",\"typeId\": \"testtypeId\",\"selfLink\": {\"title\": \"selfLinkTitle\",\"rel\": \"selfLinkRel\",\"uri\": \"selfLinkUri\",\"uriBuilder\": {},\"rels\": [\"string\"],\"params\": {\"additionalProp1\": \"string\",\"additionalProp2\": \"string\",\"additionalProp3\": \"string\"},\"type\": \"string\"},\"created\": \"2020-01-22T09:38:15.436Z\",\"deactivated\": \"2020-01-22T09:38:15.437Z\"},{\"owner\": \"testOwner2\",\"application\": \"testApplication1\",\"component\": \"testComponent2\",\"typeName\": \"testTypeName2\",\"typeVersion\": 0,\"blueprintTemplate\": \"testBlueprintTemplate2\",\"serviceIds\": [\"serviceId3\", \"serviceId4\"],\"vnfTypes\": [\"vnfType13\", \"vnfType4\"],\"serviceLocations\": [\"serviceLocation3\", \"serviceLocation4\"],\"asdcServiceId\": \"testAsdcServiceId\",\"asdcResourceId\": \"1\",\"asdcServiceURL\": \"testAsdcServiceURL2\",\"typeId\": \"testtypeId2\",\"selfLink\": {\"title\": \"selfLinkTitle\",\"rel\": \"selfLinkRel\",\"uri\": \"selfLinkUri\",\"uriBuilder\": {},\"rels\": [\"string\"],\"params\": {\"additionalProp1\": \"string\",\"additionalProp2\": \"string\",\"additionalProp3\": \"string\"},\"type\": \"string\"},\"created\": \"2020-01-22T09:38:15.436Z\",\"deactivated\": \"2020-01-22T09:38:15.437Z\"}]}" + print "jsonGenerated: " + response + + os.makedirs(cached_file_folder, 0777) + with open(cached_file_header, 'w') as f: + f.write("{\"Content-Length\": \"" + str(len(response)) + "\", \"Content-Type\": \"application/json\"}") + with open(cached_file_content, 'w') as f: + f.write(response) + return True else: return False @@ -305,6 +321,9 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): if self.path.startswith("/dcae-service-types?asdcResourceId="): print "DCAE case deleting folder created " + cached_file_folder shutil.rmtree(cached_file_folder, ignore_errors=False, onerror=None) + elif self.path.startswith("/dcae-service-types"): + print "DCAE case deleting folder created " + cached_file_folder + shutil.rmtree(cached_file_folder, ignore_errors=False, onerror=None) else: print "NOT in DCAE case deleting folder created " + cached_file_folder -- cgit 1.2.3-korg