From: Daira Hopwood Date: Tue, 11 Aug 2015 14:43:01 +0000 (+0100) Subject: Add fileutil.get_pathinfo function. X-Git-Url: https://git.rkrishnan.org/specifications/provisioning?a=commitdiff_plain;h=fab9bfbebdf707f488f30e7a8aa646cb41942fd1;p=tahoe-lafs%2Ftahoe-lafs.git Add fileutil.get_pathinfo function. Signed-off-by: Daira Hopwood --- diff --git a/src/allmydata/util/fileutil.py b/src/allmydata/util/fileutil.py index 133d2271..6b1a9fea 100644 --- a/src/allmydata/util/fileutil.py +++ b/src/allmydata/util/fileutil.py @@ -3,7 +3,8 @@ Futz with files like a pro. """ import sys, exceptions, os, stat, tempfile, time, binascii -from errno import EEXIST +from collections import namedtuple +from errno import EEXIST, ENOENT from twisted.python import log @@ -622,3 +623,25 @@ else: rename_no_overwrite(replacement_path, replaced_path) except EnvironmentError: reraise(ConflictError) + + +PathInfo = namedtuple('PathInfo', 'isdir isfile islink exists') + +def get_pathinfo(path_u): + precondition(isinstance(path_u, unicode), path_u) + + # note: symlinks to directories are both islink and isdir + try: + statinfo = os.lstat(path_u) + mode = statinfo.st_mode + return PathInfo(isdir =stat.S_ISDIR(mode), + isfile=stat.S_ISREG(mode), + islink=stat.S_ISLNK(mode), + exists=True) + except OSError as e: + if e.errno == ENOENT: + return PathInfo(isdir=False, + isfile=False, + islink=False, + exists=False) + raise