bug fixes and add text report
diff --git a/wally/storage.py b/wally/storage.py
index ab52e12..0459305 100644
--- a/wally/storage.py
+++ b/wally/storage.py
@@ -52,6 +52,10 @@
         pass
 
     @abc.abstractmethod
+    def get_fname(self, path: str) -> str:
+        pass
+
+    @abc.abstractmethod
     def sub_storage(self, path: str) -> 'ISimpleStorage':
         pass
 
@@ -141,6 +145,9 @@
     def __contains__(self, path: str) -> bool:
         return os.path.exists(self.j(path))
 
+    def get_fname(self, path: str) -> str:
+        return self.j(path)
+
     def get_fd(self, path: str, mode: str = "rb+") -> IO[bytes]:
         jpath = self.j(path)
 
@@ -281,6 +288,9 @@
     def get_fd(self, path: str, mode: str = "r") -> IO:
         return self.sstorage.get_fd(path, mode)
 
+    def get_fname(self, path: str) -> str:
+        return self.sstorage.get_fname(path)
+
     def load_list(self, obj_class: Type[ObjClass], *path: str) -> List[ObjClass]:
         path_s = "/".join(path)
         raw_val = cast(List[Dict[str, Any]], self.get(path_s))