From: tierno Date: Fri, 25 Jan 2019 08:56:17 +0000 (+0000) Subject: minor updates at fslocal to capture exceptions X-Git-Tag: v5.0.3~2 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fcommon.git;a=commitdiff_plain;h=c7ac30d7141ee0a296dc504989731bbf6d8d9a80 minor updates at fslocal to capture exceptions Change-Id: Ia0fb85f23329efe6b1ef373368f4c6af81850b8d Signed-off-by: tierno --- diff --git a/osm_common/fslocal.py b/osm_common/fslocal.py index bd243f0..7306559 100644 --- a/osm_common/fslocal.py +++ b/osm_common/fslocal.py @@ -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) diff --git a/osm_common/tests/test_fslocal.py b/osm_common/tests/test_fslocal.py index 86b0491..82dc6d2 100644 --- a/osm_common/tests/test_fslocal.py +++ b/osm_common/tests/test_fslocal.py @@ -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", [