minor updates at fslocal to capture exceptions 28/7128/1
authortierno <alfonso.tiernosepulveda@telefonica.com>
Fri, 25 Jan 2019 08:56:17 +0000 (08:56 +0000)
committertierno <alfonso.tiernosepulveda@telefonica.com>
Mon, 28 Jan 2019 16:19:28 +0000 (16:19 +0000)
Change-Id: Ia0fb85f23329efe6b1ef373368f4c6af81850b8d
Signed-off-by: tierno <alfonso.tiernosepulveda@telefonica.com>
osm_common/fslocal.py
osm_common/tests/test_fslocal.py

index bd243f0..7306559 100644 (file)
@@ -60,6 +60,8 @@ class FsLocal(FsBase):
         """
         try:
             os.mkdir(self.path + folder)
+        except FileExistsError:  # make it idempotent
+            pass
         except Exception as e:
             raise FsException(str(e), http_code=HTTPStatus.INTERNAL_SERVER_ERROR)
 
@@ -164,12 +166,14 @@ class FsLocal(FsBase):
         :param ignore_non_exist: not raise exception if storage does not exist
         :return: None
         """
-
-        if isinstance(storage, str):
-            f = self.path + storage
-        else:
-            f = self.path + "/".join(storage)
-        if os.path.exists(f):
-            rmtree(f)
-        elif not ignore_non_exist:
-            raise FsException("File {} does not exist".format(storage), http_code=HTTPStatus.NOT_FOUND)
+        try:
+            if isinstance(storage, str):
+                f = self.path + storage
+            else:
+                f = self.path + "/".join(storage)
+            if os.path.exists(f):
+                rmtree(f)
+            elif not ignore_non_exist:
+                raise FsException("File {} does not exist".format(storage), http_code=HTTPStatus.NOT_FOUND)
+        except (IOError, PermissionError) as e:
+            raise FsException("File {} cannot be deleted: {}".format(f, e), http_code=HTTPStatus.INTERNAL_SERVER_ERROR)
index 86b0491..82dc6d2 100644 (file)
@@ -112,17 +112,17 @@ def test_mkdir_with_valid_path(fs_local):
     folder_path = valid_path() + folder_name
     fs_local.mkdir(folder_name)
     assert os.path.exists(folder_path)
+    # test idempotency
+    fs_local.mkdir(folder_name)
+    assert os.path.exists(folder_path)
     os.rmdir(folder_path)
 
 
 def test_mkdir_with_exception(fs_local):
     folder_name = str(uuid.uuid4())
-    folder_path = valid_path() + folder_name
-    os.mkdir(folder_path)
     with pytest.raises(FsException) as excinfo:
-        fs_local.mkdir(folder_name)
+        fs_local.mkdir(folder_name + "/" + folder_name)
     assert excinfo.value.http_code == http.HTTPStatus.INTERNAL_SERVER_ERROR
-    os.rmdir(folder_path)
 
 
 @pytest.mark.parametrize("storage, mode, expected", [