29
31
This is the old "standard" exception class for IVLE errors. It is only
30
32
used in fileservice, and should not be used in any new code.
32
37
def __init__(self, httpcode, message=None):
33
38
self.httpcode = httpcode
34
39
self.message = message
95
100
return tuple(splitpath)
102
def relpath(path, start=os.path.curdir):
103
"""Return a relative version of a path.
104
XXX Backported from Python 2.6 posixpath.py.
108
raise ValueError("no path specified")
110
start_list = os.path.abspath(start).split(os.path.sep)
111
path_list = os.path.abspath(path).split(os.path.sep)
113
# Work out how much of the filepath is shared by start and path.
114
i = len(os.path.commonprefix([start_list, path_list]))
116
rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:]
118
return os.path.curdir
119
return os.path.join(*rel_list)
97
121
def incomplete_utf8_sequence(byteseq):
98
122
"""Calculate the completeness of a UTF-8 encoded string.
185
209
return dict((k, getattr(obj, k))
186
210
for k in attrnames if not k.startswith('_'))
212
def safe_rmtree(path, ignore_errors=False, onerror=None):
213
"""Recursively delete a directory tree.
215
Copied from shutil.rmtree from Python 2.6, which does not follow symbolic
216
links (it is otherwise unsafe to call as root on untrusted directories; do
217
not use shutil.rmtree in this case, as you may be running Python 2.5).
219
If ignore_errors is set, errors are ignored; otherwise, if onerror
220
is set, it is called to handle the error with arguments (func,
221
path, exc_info) where func is os.listdir, os.remove, or os.rmdir;
222
path is the argument to that function that caused it to fail; and
223
exc_info is a tuple returned by sys.exc_info(). If ignore_errors
224
is false and onerror is None, an exception is raised.
230
elif onerror is None:
234
if os.path.islink(path):
235
# symlinks to directories are forbidden, see bug #1669
236
raise OSError("Cannot call safe_rmtree on a symbolic link")
238
onerror(os.path.islink, path, sys.exc_info())
239
# can't continue even if onerror hook returns
243
names = os.listdir(path)
244
except os.error, err:
245
onerror(os.listdir, path, sys.exc_info())
247
fullname = os.path.join(path, name)
249
mode = os.lstat(fullname).st_mode
252
if stat.S_ISDIR(mode):
253
safe_rmtree(fullname, ignore_errors, onerror)
257
except os.error, err:
258
onerror(os.remove, fullname, sys.exc_info())
262
onerror(os.rmdir, path, sys.exc_info())