X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_common%2Ffslocal.py;h=b90b25e7c07f0173c6f9269d97646feb49f7827b;hb=e458cd8c564e13a04656e6a8337b7d5225cb1f8d;hp=a0275585b87d4d19ae283f42faf7fe7cc6b65893;hpb=87858cab98b3b169fc891fd2e0a0ba10f8b46127;p=osm%2Fcommon.git diff --git a/osm_common/fslocal.py b/osm_common/fslocal.py index a027558..b90b25e 100644 --- a/osm_common/fslocal.py +++ b/osm_common/fslocal.py @@ -27,8 +27,8 @@ __author__ = "Alfonso Tierno " class FsLocal(FsBase): - def __init__(self, logger_name='fs'): - self.logger = logging.getLogger(logger_name) + def __init__(self, logger_name='fs', lock=False): + super().__init__(logger_name, lock) self.path = None def get_params(self): @@ -60,6 +60,24 @@ 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) + + def dir_rename(self, src, dst): + """ + Rename one directory name. If dst exist, it replaces (deletes) existing directory + :param src: source directory + :param dst: destination directory + :return: None or raises and exception + """ + try: + if os.path.exists(self.path + dst): + rmtree(self.path + dst) + + os.rename(self.path + src, self.path + dst) + except Exception as e: raise FsException(str(e), http_code=HTTPStatus.INTERNAL_SERVER_ERROR) @@ -75,6 +93,8 @@ class FsLocal(FsBase): else: f = "/".join(storage) if os.path.exists(self.path + f): + if not mode: + return True if mode == "file" and os.path.isfile(self.path + f): return True if mode == "dir" and os.path.isdir(self.path + f): @@ -143,17 +163,22 @@ class FsLocal(FsBase): def file_delete(self, storage, ignore_non_exist=False): """ - Delete storage content recursivelly + Delete storage content recursively :param storage: can be a str or list of str :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) + + def sync(self): + pass # Not needed in fslocal