Added reverse sync
[osm/common.git] / osm_common / fslocal.py
index bd243f0..3686b36 100644 (file)
@@ -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)
 
@@ -91,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):
@@ -164,12 +168,20 @@ 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)
+
+    def sync(self, from_path=None):
+        pass  # Not needed in fslocal
+
+    def reverse_sync(self, from_path):
+        pass  # Not needed in fslocal