From afc80f845f049bf90ab47ad798a1cf69ebad943a Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Mon, 25 Aug 2014 18:23:59 +0100 Subject: [PATCH] Add support in abspath_expanduser_unicode for expanding relative to a base path. refs #2235 Signed-off-by: Daira Hopwood --- src/allmydata/util/fileutil.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/allmydata/util/fileutil.py b/src/allmydata/util/fileutil.py index 7f4f2975..8ed14264 100644 --- a/src/allmydata/util/fileutil.py +++ b/src/allmydata/util/fileutil.py @@ -276,6 +276,20 @@ def put_file(pathname, inf): outf.close() +def precondition_abspath(path): + if not isinstance(path, unicode): + raise AssertionError("an abspath must be a Unicode string") + + if sys.platform == "win32": + # This intentionally doesn't view absolute paths starting with a drive specification, or + # paths relative to the current drive, as acceptable. + if not path.startswith("\\\\"): + raise AssertionError("an abspath should be normalized using abspath_expanduser_unicode") + else: + # This intentionally doesn't view the path '~' or paths starting with '~/' as acceptable. + if not os.path.isabs(path): + raise AssertionError("an abspath should be normalized using abspath_expanduser_unicode") + # Work around . This code is adapted from # # with some simplifications. @@ -286,9 +300,18 @@ try: except ImportError: pass -def abspath_expanduser_unicode(path): - """Return the absolute version of a path.""" - assert isinstance(path, unicode), path +def abspath_expanduser_unicode(path, base=None): + """ + Return the absolute version of a path. If 'base' is given and 'path' is relative, + the path will be expanded relative to 'base'. + 'path' must be a Unicode string. 'base', if given, must be a Unicode string + corresponding to an absolute path as returned by a previous call to + abspath_expanduser_unicode. + """ + if not isinstance(path, unicode): + raise AssertionError("paths must be Unicode strings") + if base is not None: + precondition_abspath(base) path = os.path.expanduser(path) -- 2.45.2