diff options
author | rfkelly0 <rfkelly0@67cdc799-7952-0410-af00-57a81ceafa0f> | 2009-06-17 02:51:42 +0000 |
---|---|---|
committer | rfkelly0 <rfkelly0@67cdc799-7952-0410-af00-57a81ceafa0f> | 2009-06-17 02:51:42 +0000 |
commit | 2f34efa7ce57a8cf199e37ea43447497cc10c247 (patch) | |
tree | eddde8570ce3aa82d3e0089fbc7631596d734160 /fs/errors.py | |
parent | 72b8884b54aaba1739bf16749adfb9d7cb8d0b2e (diff) | |
download | pyfilesystem-git-2f34efa7ce57a8cf199e37ea43447497cc10c247.tar.gz |
make convert_os_errors() decorate rewrite the resource path if self as an attribute "root_path"
Diffstat (limited to 'fs/errors.py')
-rw-r--r-- | fs/errors.py | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/fs/errors.py b/fs/errors.py index 372096a..aac82e4 100644 --- a/fs/errors.py +++ b/fs/errors.py @@ -7,6 +7,8 @@ import sys import errno +from fs.path import * + try: from functools import wraps except ImportError: @@ -153,26 +155,31 @@ def convert_os_errors(func): """Function wrapper to convert OSError/IOError instances into FSErrors.""" opname = func.__name__ @wraps(func) - def wrapper(*args,**kwds): + def wrapper(self,*args,**kwds): try: - return func(*args,**kwds) + return func(self,*args,**kwds) except (OSError,IOError), e: + path = getattr(e,"filename",None) + if path and path[0] == "/" and hasattr(self,"root_path"): + path = normpath(path) + if isprefix(self.root_path,path): + path = path[len(self.root_path):] if not hasattr(e,"errno") or not e.errno: raise OperationFailedError(opname,details=e) if e.errno == errno.ENOENT: - raise ResourceNotFoundError(e.filename,opname=opname,details=e) + raise ResourceNotFoundError(path,opname=opname,details=e) if e.errno == errno.ENOTEMPTY: - raise DirectoryNotEmptyError(e.filename,opname=opname,details=e) + raise DirectoryNotEmptyError(path,opname=opname,details=e) if e.errno == errno.EEXIST: - raise DestinationExistsError(e.filename,opname=opname,details=e) + raise DestinationExistsError(path,opname=opname,details=e) if e.errno == 183: # some sort of win32 equivalent to EEXIST - raise DestinationExistsError(e.filename,opname=opname,details=e) + raise DestinationExistsError(path,opname=opname,details=e) if e.errno == errno.ENOTDIR: - raise ResourceInvalidError(e.filename,opname=opname,details=e) + raise ResourceInvalidError(path,opname=opname,details=e) if e.errno == errno.EISDIR: - raise ResourceInvalidError(e.filename,opname=opname,details=e) + raise ResourceInvalidError(path,opname=opname,details=e) if e.errno == errno.EINVAL: - raise ResourceInvalidError(e.filename,opname=opname,details=e) + raise ResourceInvalidError(path,opname=opname,details=e) raise OperationFailedError(opname,details=e) return wrapper |