Fix multi-vdu workflow w/o charm
[osm/RO.git] / lcm / osm_common / fslocal.py
index b88475f..b7dd839 100644 (file)
@@ -1,13 +1,17 @@
 import os
 import os
+import logging
 import tarfile
 from http import HTTPStatus
 from shutil import rmtree
 from fsbase import FsBase, FsException
 
 import tarfile
 from http import HTTPStatus
 from shutil import rmtree
 from fsbase import FsBase, FsException
 
+__author__ = "Alfonso Tierno <alfonso.tiernosepulveda@telefonica.com>"
+
 
 class FsLocal(FsBase):
 
 
 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):
         self.path = None
 
     def get_params(self):
@@ -15,6 +19,8 @@ class FsLocal(FsBase):
 
     def fs_connect(self, config):
         try:
 
     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 += "/"
             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:
         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
         """
         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: 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):
         """
 
     def file_size(self, storage):
         """
@@ -84,11 +96,33 @@ class FsLocal(FsBase):
         :param mode: file mode
         :return: file object
         """
         :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):
         """
 
     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:
         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)