summaryrefslogtreecommitdiff
path: root/fs/errors.py
diff options
context:
space:
mode:
authorrfkelly0 <rfkelly0@67cdc799-7952-0410-af00-57a81ceafa0f>2009-06-17 02:51:42 +0000
committerrfkelly0 <rfkelly0@67cdc799-7952-0410-af00-57a81ceafa0f>2009-06-17 02:51:42 +0000
commit2f34efa7ce57a8cf199e37ea43447497cc10c247 (patch)
treeeddde8570ce3aa82d3e0089fbc7631596d734160 /fs/errors.py
parent72b8884b54aaba1739bf16749adfb9d7cb8d0b2e (diff)
downloadpyfilesystem-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.py25
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