X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=lcm%2Fosm_common%2Ffslocal.py;h=b7dd8396ad1a147e1a57a03a3bd787a182e19a63;hb=54d9e2152d39930d6a7e43d25816671e56c91523;hp=b88475f5d0cc597c3e14dcec45506b36ed26b671;hpb=0aef0dbb3c8b50426f31812e7f386dc9188823d2;p=osm%2FRO.git diff --git a/lcm/osm_common/fslocal.py b/lcm/osm_common/fslocal.py index b88475f5..b7dd8396 100644 --- a/lcm/osm_common/fslocal.py +++ b/lcm/osm_common/fslocal.py @@ -1,13 +1,17 @@ import os +import logging import tarfile from http import HTTPStatus from shutil import rmtree from fsbase import FsBase, FsException +__author__ = "Alfonso Tierno " + class FsLocal(FsBase): - def __init__(self): + def __init__(self, logger_name='fs'): + self.logger = logging.getLogger(logger_name) self.path = None def get_params(self): @@ -15,6 +19,8 @@ class FsLocal(FsBase): def fs_connect(self, config): try: + if "logger_name" in config: + self.logger = logging.getLogger(config["logger_name"]) self.path = config["path"] if not self.path.endswith("/"): self.path += "/" @@ -38,19 +44,25 @@ class FsLocal(FsBase): try: os.mkdir(self.path + folder) except Exception as e: - raise FsException(str(e), http_code=HTTPStatus.INTERNAL_SERVER_ERROR.value) + raise FsException(str(e), http_code=HTTPStatus.INTERNAL_SERVER_ERROR) - def file_exists(self, storage): + def file_exists(self, storage, mode=None): """ Indicates if "storage" file exist :param storage: can be a str or a str list + :param mode: can be 'file' exist as a regular file; 'dir' exists as a directory or; 'None' just exists :return: True, False """ if isinstance(storage, str): f = storage else: f = "/".join(storage) - return os.path.exists(self.path + f) + if os.path.exists(self.path + f): + if mode == "file" and os.path.isfile(self.path + f): + return True + if mode == "dir" and os.path.isdir(self.path + f): + return True + return False def file_size(self, storage): """ @@ -84,11 +96,33 @@ class FsLocal(FsBase): :param mode: file mode :return: file object """ - if isinstance(storage, str): - f = storage - else: - f = "/".join(storage) - return open(self.path + f, mode) + try: + if isinstance(storage, str): + f = storage + else: + f = "/".join(storage) + return open(self.path + f, mode) + except FileNotFoundError: + raise FsException("File {} does not exist".format(f), http_code=HTTPStatus.NOT_FOUND) + except IOError: + raise FsException("File {} cannot be opened".format(f), http_code=HTTPStatus.BAD_REQUEST) + + def dir_ls(self, storage): + """ + return folder content + :param storage: can be a str or list of str + :return: folder content + """ + try: + if isinstance(storage, str): + f = storage + else: + f = "/".join(storage) + return os.listdir(self.path + f) + except NotADirectoryError: + raise FsException("File {} does not exist".format(f), http_code=HTTPStatus.NOT_FOUND) + except IOError: + raise FsException("File {} cannot be opened".format(f), http_code=HTTPStatus.BAD_REQUEST) def file_delete(self, storage, ignore_non_exist=False): """ @@ -105,4 +139,4 @@ class FsLocal(FsBase): if os.path.exists(f): rmtree(f) elif not ignore_non_exist: - raise FsException("File {} does not exist".format(storage), http_code=HTTPStatus.BAD_REQUEST.value) + raise FsException("File {} does not exist".format(storage), http_code=HTTPStatus.NOT_FOUND)