X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_common%2Ffslocal.py;h=5bae0e92d2a9ff53eb2ef26b78bcbe2bbe6a013e;hb=refs%2Fchanges%2F16%2F11816%2F6;hp=b90b25e7c07f0173c6f9269d97646feb49f7827b;hpb=e458cd8c564e13a04656e6a8337b7d5225cb1f8d;p=osm%2Fcommon.git diff --git a/osm_common/fslocal.py b/osm_common/fslocal.py index b90b25e..5bae0e9 100644 --- a/osm_common/fslocal.py +++ b/osm_common/fslocal.py @@ -15,19 +15,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os -import logging -# import tarfile from http import HTTPStatus +import logging +import os from shutil import rmtree +import tarfile +import zipfile + from osm_common.fsbase import FsBase, FsException __author__ = "Alfonso Tierno " class FsLocal(FsBase): - - def __init__(self, logger_name='fs', lock=False): + def __init__(self, logger_name="fs", lock=False): super().__init__(logger_name, lock) self.path = None @@ -42,8 +43,11 @@ class FsLocal(FsBase): if not self.path.endswith("/"): self.path += "/" if not os.path.exists(self.path): - raise FsException("Invalid configuration param at '[storage]': path '{}' does not exist".format( - config["path"])) + raise FsException( + "Invalid configuration param at '[storage]': path '{}' does not exist".format( + config["path"] + ) + ) except FsException: raise except Exception as e: # TODO refine @@ -113,10 +117,10 @@ class FsLocal(FsBase): f = "/".join(storage) return os.path.getsize(self.path + f) - def file_extract(self, tar_object, path): + def file_extract(self, compressed_object, path): """ extract a tar file - :param tar_object: object of type tar + :param compressed_object: object of type tar or zip :param path: can be a str or a str list, or a tar object where to extract the tar_object :return: None """ @@ -124,7 +128,13 @@ class FsLocal(FsBase): f = self.path + path else: f = self.path + "/".join(path) - tar_object.extractall(path=f) + + if type(compressed_object) is tarfile.TarFile: + compressed_object.extractall(path=f) + elif ( + type(compressed_object) is zipfile.ZipFile + ): # Just a check to know if this works with both tar and zip + compressed_object.extractall(path=f) def file_open(self, storage, mode): """ @@ -140,9 +150,13 @@ class FsLocal(FsBase): f = "/".join(storage) return open(self.path + f, mode) except FileNotFoundError: - raise FsException("File {} does not exist".format(f), http_code=HTTPStatus.NOT_FOUND) + 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) + raise FsException( + "File {} cannot be opened".format(f), http_code=HTTPStatus.BAD_REQUEST + ) def dir_ls(self, storage): """ @@ -157,9 +171,13 @@ class FsLocal(FsBase): f = "/".join(storage) return os.listdir(self.path + f) except NotADirectoryError: - raise FsException("File {} does not exist".format(f), http_code=HTTPStatus.NOT_FOUND) + 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) + raise FsException( + "File {} cannot be opened".format(f), http_code=HTTPStatus.BAD_REQUEST + ) def file_delete(self, storage, ignore_non_exist=False): """ @@ -176,9 +194,18 @@ 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.NOT_FOUND) + 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) + raise FsException( + "File {} cannot be deleted: {}".format(f, e), + http_code=HTTPStatus.INTERNAL_SERVER_ERROR, + ) + + def sync(self, from_path=None): + pass # Not needed in fslocal - def sync(self): + def reverse_sync(self, from_path): pass # Not needed in fslocal