Commit 2532c3da by rfkelly0

WrapFS: rewrite pathnames in errors

parent f68f9863
......@@ -16,6 +16,22 @@ directory listings.
from fs.base import FS
from fs.errors import wraps, ResourceError
def rewrite_errors(func):
@wraps(func)
def wrapper(self,*args,**kwds):
try:
return func(self,*args,**kwds)
except ResourceError, e:
try:
e.path = self._decode(e.path)
except AttributeError:
pass
raise
return wrapper
class WrapFS(FS):
"""FS that wraps another FS, providing translation etc.
......@@ -90,65 +106,83 @@ class WrapFS(FS):
"""
return (mode,mode)
@rewrite_errors
def getsyspath(self,path,allow_none=False):
return self.wrapped_fs.getsyspath(self._encode(path),allow_none)
@rewrite_errors
def hassyspath(self,path):
return self.wrapped_fs.hassyspath(self._encode(path))
@rewrite_errors
def open(self,path,mode="r"):
(mode,wmode) = self._adjust_mode(mode)
f = self.wrapped_fs.open(self._encode(path),wmode)
return self._file_wrap(f,mode)
@rewrite_errors
def exists(self,path):
return self.wrapped_fs.exists(self._encode(path))
@rewrite_errors
def isdir(self,path):
return self.wrapped_fs.isdir(self._encode(path))
@rewrite_errors
def isfile(self,path):
return self.wrapped_fs.isfile(self._encode(path))
@rewrite_errors
def listdir(self,path="",wildcard=None,full=False,absolute=False,dirs_only=False,files_only=False):
entries = []
for name in self.wrapped_fs.listdir(self._encode(path),wildcard=None,full=full,absolute=absolute,dirs_only=dirs_only,files_only=files_only):
entries.append(self._decode(name))
return self._listdir_helper(path,entries,wildcard=wildcard,full=False,absolute=False,dirs_only=False,files_only=False)
@rewrite_errors
def makedir(self,path,*args,**kwds):
return self.wrapped_fs.makedir(self._encode(path),*args,**kwds)
@rewrite_errors
def remove(self,path):
return self.wrapped_fs.remove(self._encode(path))
@rewrite_errors
def removedir(self,path,*args,**kwds):
return self.wrapped_fs.removedir(self._encode(path),*args,**kwds)
@rewrite_errors
def rename(self,src,dst):
return self.wrapped_fs.rename(self._encode(src),self._encode(dst))
@rewrite_errors
def getinfo(self,path):
return self.wrapped_fs.getinfo(self._encode(path))
@rewrite_errors
def desc(self,path):
return self.wrapped_fs.desc(self._encode(path))
@rewrite_errors
def copy(self,src,dst,overwrite=False,chunk_size=16384):
return self.wrapped_fs.copy(self._encode(src),self._encode(dst),overwrite,chunk_size)
@rewrite_errors
def move(self,src,dst,overwrite=False,chunk_size=16384):
return self.wrapped_fs.move(self._encode(src),self._encode(dst),overwrite,chunk_size)
@rewrite_errors
def movedir(self,src,dst,overwrite=False,ignore_errors=False,chunk_size=16384):
return self.wrapped_fs.movedir(self._encode(src),self._encode(dst),overwrite,ignore_errors,chunk_size)
@rewrite_errors
def copydir(self,src,dst,overwrite=False,ignore_errors=False,chunk_size=16384):
return self.wrapped_fs.copydir(self._encode(src),self._encode(dst),overwrite,ignore_errors,chunk_size)
def __getattr__(self,attr):
return getattr(self.wrapped_fs,attr)
@rewrite_errors
def close(self):
if hasattr(self.wrapped_fs,"close"):
self.wrapped_fs.close()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment